module: add isBuiltIn method

PR-URL: https://github.com/nodejs/node/pull/43396
Fixes: https://github.com/nodejs/node/issues/42785
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
This commit is contained in:
hemanth.hm
2022-07-08 01:12:32 -07:00
committed by GitHub
parent 264d5fe8cb
commit 6317b8432e
3 changed files with 43 additions and 0 deletions

View File

@@ -62,6 +62,22 @@ const require = createRequire(import.meta.url);
const siblingModule = require('./sibling-module');
```
### `module.isBuiltin(moduleName)`
<!-- YAML
added: REPLACEME
-->
* `moduleName` {string} name of the module
* Returns: {boolean} returns true if the module is builtin else returns false
```mjs
import { isBuiltin } from 'node:module';
isBuiltin('node:fs'); // true
isBuiltin('fs'); // true
isBuiltin('wss'); // false
```
### `module.syncBuiltinESMExports()`
<!-- YAML

View File

@@ -33,6 +33,7 @@ const {
ArrayPrototypeSplice,
ArrayPrototypeUnshift,
ArrayPrototypeUnshiftApply,
ArrayPrototypeFlatMap,
Boolean,
Error,
JSONParse,
@@ -50,6 +51,7 @@ const {
ReflectSet,
RegExpPrototypeExec,
SafeMap,
SafeSet,
SafeWeakMap,
String,
StringPrototypeCharAt,
@@ -186,6 +188,11 @@ for (const { 0: id, 1: mod } of NativeModule.map) {
}
}
const allBuiltins = new SafeSet(
ArrayPrototypeFlatMap(builtinModules, (bm) => [bm, `node:${bm}`])
);
NativeModule.getSchemeOnlyModuleNames().forEach((builtin) => allBuiltins.add(`node:${builtin}`));
ObjectFreeze(builtinModules);
Module.builtinModules = builtinModules;
@@ -1300,5 +1307,9 @@ Module.syncBuiltinESMExports = function syncBuiltinESMExports() {
}
};
Module.isBuiltin = function isBuiltin(moduleName) {
return allBuiltins.has(moduleName);
};
// Backwards compatibility
Module.Module = Module;

View File

@@ -0,0 +1,16 @@
'use strict';
require('../common');
const assert = require('assert');
const { isBuiltin } = require('module');
// Includes modules in lib/ (even deprecated ones)
assert(isBuiltin('http'));
assert(isBuiltin('sys'));
assert(isBuiltin('node:fs'));
assert(isBuiltin('node:test'));
// Does not include internal modules
assert(!isBuiltin('internal/errors'));
assert(!isBuiltin('test'));
assert(!isBuiltin(''));
assert(!isBuiltin(undefined));