From 26cee4eb0d041786f1d70cb2d9f3a6b6d82bd93d Mon Sep 17 00:00:00 2001 From: Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:06:04 -0800 Subject: 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. --- ext/node/polyfills/01_require.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'ext') 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; -- cgit v1.2.3