mirror of
https://github.com/denoland/deno.git
synced 2025-02-14 17:47:35 -05:00
fix(ext/node): Implement isBuiltin
in node:module
(#22817)
Fixes #22502 Implements the [`isBuiltin`](https://nodejs.org/api/module.html#moduleisbuiltinmodulename) function in `node:module`. I had to update the version of `@types/node` in the test registry in order to get the test I added to typecheck.
This commit is contained in:
parent
1e1d0410a4
commit
7f99b968fc
7 changed files with 38 additions and 78 deletions
|
@ -1181,6 +1181,25 @@ function createRequire(filenameOrUrl) {
|
||||||
return createRequireFromPath(filename);
|
return createRequireFromPath(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isBuiltin(moduleName) {
|
||||||
|
if (typeof moduleName !== "string") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringPrototypeStartsWith(moduleName, "node:")) {
|
||||||
|
moduleName = StringPrototypeSlice(moduleName, 5);
|
||||||
|
} else if (moduleName === "test") {
|
||||||
|
// test is only a builtin if it has the "node:" scheme
|
||||||
|
// see https://github.com/nodejs/node/blob/73025c4dec042e344eeea7912ed39f7b7c4a3991/test/parallel/test-module-isBuiltin.js#L14
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return moduleName in nativeModuleExports &&
|
||||||
|
!StringPrototypeStartsWith(moduleName, "internal/");
|
||||||
|
}
|
||||||
|
|
||||||
|
Module.isBuiltin = isBuiltin;
|
||||||
|
|
||||||
Module.createRequire = createRequire;
|
Module.createRequire = createRequire;
|
||||||
|
|
||||||
Module._initPaths = function () {
|
Module._initPaths = function () {
|
||||||
|
@ -1249,7 +1268,7 @@ internals.requireImpl = {
|
||||||
nativeModuleExports,
|
nativeModuleExports,
|
||||||
};
|
};
|
||||||
|
|
||||||
export { builtinModules, createRequire, Module };
|
export { builtinModules, createRequire, isBuiltin, Module };
|
||||||
export const _cache = Module._cache;
|
export const _cache = Module._cache;
|
||||||
export const _extensions = Module._extensions;
|
export const _extensions = Module._extensions;
|
||||||
export const _findPath = Module._findPath;
|
export const _findPath = Module._findPath;
|
||||||
|
|
2
tests/testdata/npm/compare_globals/main.out
vendored
2
tests/testdata/npm/compare_globals/main.out
vendored
|
@ -4,7 +4,7 @@ Download http://localhost:4545/npm/registry/@denotest/globals
|
||||||
[UNORDERED_END]
|
[UNORDERED_END]
|
||||||
[UNORDERED_START]
|
[UNORDERED_START]
|
||||||
Download http://localhost:4545/npm/registry/@denotest/globals/1.0.0.tgz
|
Download http://localhost:4545/npm/registry/@denotest/globals/1.0.0.tgz
|
||||||
Download http://localhost:4545/npm/registry/@types/node/node-18.8.2.tgz
|
Download http://localhost:4545/npm/registry/@types/node/node-18.16.19.tgz
|
||||||
[UNORDERED_END]
|
[UNORDERED_END]
|
||||||
Check file:///[WILDCARD]/npm/compare_globals/main.ts
|
Check file:///[WILDCARD]/npm/compare_globals/main.ts
|
||||||
true
|
true
|
||||||
|
|
BIN
tests/testdata/npm/registry/@types/node/node-18.16.19.tgz
vendored
Normal file
BIN
tests/testdata/npm/registry/@types/node/node-18.16.19.tgz
vendored
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,7 @@
|
||||||
Warning: Resolving "url" as "node:url" at file:///[WILDCARD]/publish/bare_node_builtins/mod.ts:1:22. If you want to use a built-in Node module, add a "node:" prefix.
|
Warning: Resolving "url" as "node:url" at file:///[WILDCARD]/publish/bare_node_builtins/mod.ts:1:22. If you want to use a built-in Node module, add a "node:" prefix.
|
||||||
Warning: Resolving "url" as "node:url" at file:///[WILDCARD]/publish/bare_node_builtins/mod.ts:1:22. If you want to use a built-in Node module, add a "node:" prefix.
|
Warning: Resolving "url" as "node:url" at file:///[WILDCARD]/publish/bare_node_builtins/mod.ts:1:22. If you want to use a built-in Node module, add a "node:" prefix.
|
||||||
Download http://localhost:4545/npm/registry/@types/node
|
Download http://localhost:4545/npm/registry/@types/node
|
||||||
Download http://localhost:4545/npm/registry/@types/node/node-18.8.2.tgz
|
Download http://localhost:4545/npm/registry/@types/node/node-18.16.19.tgz
|
||||||
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Download http://localhost:4545/npm/registry/@types/node
|
Download http://localhost:4545/npm/registry/@types/node
|
||||||
Download http://localhost:4545/npm/registry/@types/node/node-18.8.2.tgz
|
Download http://localhost:4545/npm/registry/@types/node/node-18.16.19.tgz
|
||||||
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
Check file:///[WILDCARD]/publish/bare_node_builtins/mod.ts
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
import { createRequire, Module } from "node:module";
|
import { createRequire, isBuiltin, Module } from "node:module";
|
||||||
import { assert, assertEquals } from "@std/assert/mod.ts";
|
import { assert, assertEquals } from "@std/assert/mod.ts";
|
||||||
import process from "node:process";
|
import process from "node:process";
|
||||||
import * as path from "node:path";
|
import * as path from "node:path";
|
||||||
|
@ -70,3 +70,16 @@ Deno.test("Built-in Node modules have `node:` prefix", () => {
|
||||||
|
|
||||||
assert(thrown);
|
assert(thrown);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Deno.test("[node/module isBuiltin] recognizes node builtins", () => {
|
||||||
|
assert(isBuiltin("node:fs"));
|
||||||
|
assert(isBuiltin("node:test"));
|
||||||
|
assert(isBuiltin("fs"));
|
||||||
|
assert(isBuiltin("buffer"));
|
||||||
|
|
||||||
|
assert(!isBuiltin("internal/errors"));
|
||||||
|
assert(!isBuiltin("test"));
|
||||||
|
assert(!isBuiltin(""));
|
||||||
|
// deno-lint-ignore no-explicit-any
|
||||||
|
assert(!isBuiltin(undefined as any));
|
||||||
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue