diff options
author | Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> | 2024-03-08 18:06:04 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-08 18:06:04 -0800 |
commit | 26cee4eb0d041786f1d70cb2d9f3a6b6d82bd93d (patch) | |
tree | 2981cb52f726056bcfb71132f3814385ea5a8eb9 /ext/node/polyfills/01_require.js | |
parent | 529f79505d5924ee461593840c9383c5d8f6ed65 (diff) |
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.
Diffstat (limited to 'ext/node/polyfills/01_require.js')
-rw-r--r-- | ext/node/polyfills/01_require.js | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/ext/node/polyfills/01_require.js b/ext/node/polyfills/01_require.js index 81af7062a..8136bc68e 100644 --- a/ext/node/polyfills/01_require.js +++ b/ext/node/polyfills/01_require.js @@ -1181,6 +1181,25 @@ function createRequire(filenameOrUrl) { 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._initPaths = function () { @@ -1249,7 +1268,7 @@ internals.requireImpl = { nativeModuleExports, }; -export { builtinModules, createRequire, Module }; +export { builtinModules, createRequire, isBuiltin, Module }; export const _cache = Module._cache; export const _extensions = Module._extensions; export const _findPath = Module._findPath; |