summaryrefslogtreecommitdiff
path: root/ext/node
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-11-13 08:02:09 +0530
committerGitHub <noreply@github.com>2024-11-13 08:02:09 +0530
commit43812ee8ff0eb2584c7beb18639da14d96d06817 (patch)
tree729a8af7e035dee6e58f1eb2e2e4d498e9575475 /ext/node
parent119910f3395cf073b7acf6a31c207daf597917f1 (diff)
fix(ext/node): process.getBuiltinModule (#26833)
Closes https://github.com/denoland/deno/issues/26832
Diffstat (limited to 'ext/node')
-rw-r--r--ext/node/polyfills/01_require.js20
-rw-r--r--ext/node/polyfills/process.ts14
2 files changed, 31 insertions, 3 deletions
diff --git a/ext/node/polyfills/01_require.js b/ext/node/polyfills/01_require.js
index d818bb572..0d267ca44 100644
--- a/ext/node/polyfills/01_require.js
+++ b/ext/node/polyfills/01_require.js
@@ -1233,6 +1233,24 @@ function isBuiltin(moduleName) {
!StringPrototypeStartsWith(moduleName, "internal/");
}
+function getBuiltinModule(id) {
+ if (!isBuiltin(id)) {
+ return undefined;
+ }
+
+ if (StringPrototypeStartsWith(id, "node:")) {
+ // Slice 'node:' prefix
+ id = StringPrototypeSlice(id, 5);
+ }
+
+ const mod = loadNativeModule(id, id);
+ if (mod) {
+ return mod.exports;
+ }
+
+ return undefined;
+}
+
Module.isBuiltin = isBuiltin;
Module.createRequire = createRequire;
@@ -1327,7 +1345,7 @@ export function register(_specifier, _parentUrl, _options) {
return undefined;
}
-export { builtinModules, createRequire, isBuiltin, Module };
+export { builtinModules, createRequire, getBuiltinModule, isBuiltin, Module };
export const _cache = Module._cache;
export const _extensions = Module._extensions;
export const _findPath = Module._findPath;
diff --git a/ext/node/polyfills/process.ts b/ext/node/polyfills/process.ts
index 2605fa6d1..bf626e410 100644
--- a/ext/node/polyfills/process.ts
+++ b/ext/node/polyfills/process.ts
@@ -15,7 +15,7 @@ import {
import { warnNotImplemented } from "ext:deno_node/_utils.ts";
import { EventEmitter } from "node:events";
-import Module from "node:module";
+import Module, { getBuiltinModule } from "node:module";
import { report } from "ext:deno_node/internal/process/report.ts";
import { validateString } from "ext:deno_node/internal/validators.mjs";
import {
@@ -38,7 +38,15 @@ import {
versions,
} from "ext:deno_node/_process/process.ts";
import { _exiting } from "ext:deno_node/_process/exiting.ts";
-export { _nextTick as nextTick, chdir, cwd, env, version, versions };
+export {
+ _nextTick as nextTick,
+ chdir,
+ cwd,
+ env,
+ getBuiltinModule,
+ version,
+ versions,
+};
import {
createWritableStdioStream,
initStdin,
@@ -728,6 +736,8 @@ Process.prototype.getegid = getegid;
/** This method is removed on Windows */
Process.prototype.geteuid = geteuid;
+Process.prototype.getBuiltinModule = getBuiltinModule;
+
// TODO(kt3k): Implement this when we added -e option to node compat mode
Process.prototype._eval = undefined;