Skip to content

Commit e6186af

Browse files
hemanthtargos
authored andcommitted
module: add isBuiltIn method
PR-URL: #43396 Fixes: #42785 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Anto Aravinth <[email protected]> Reviewed-By: Juan José Arboleda <[email protected]>
1 parent 288d9fb commit e6186af

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

doc/api/module.md

+16
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ const require = createRequire(import.meta.url);
6262
const siblingModule = require('./sibling-module');
6363
```
6464
65+
### `module.isBuiltin(moduleName)`
66+
67+
<!-- YAML
68+
added: REPLACEME
69+
-->
70+
71+
* `moduleName` {string} name of the module
72+
* Returns: {boolean} returns true if the module is builtin else returns false
73+
74+
```mjs
75+
import { isBuiltin } from 'node:module';
76+
isBuiltin('node:fs'); // true
77+
isBuiltin('fs'); // true
78+
isBuiltin('wss'); // false
79+
```
80+
6581
### `module.syncBuiltinESMExports()`
6682
6783
<!-- YAML

lib/internal/modules/cjs/loader.js

+11
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const {
3333
ArrayPrototypeSplice,
3434
ArrayPrototypeUnshift,
3535
ArrayPrototypeUnshiftApply,
36+
ArrayPrototypeFlatMap,
3637
Boolean,
3738
Error,
3839
JSONParse,
@@ -51,6 +52,7 @@ const {
5152
RegExpPrototypeExec,
5253
RegExpPrototypeTest,
5354
SafeMap,
55+
SafeSet,
5456
SafeWeakMap,
5557
String,
5658
StringPrototypeCharAt,
@@ -188,6 +190,11 @@ for (const { 0: id, 1: mod } of NativeModule.map) {
188190
}
189191
}
190192

193+
const allBuiltins = new SafeSet(
194+
ArrayPrototypeFlatMap(builtinModules, (bm) => [bm, `node:${bm}`])
195+
);
196+
NativeModule.getSchemeOnlyModuleNames().forEach((builtin) => allBuiltins.add(`node:${builtin}`));
197+
191198
ObjectFreeze(builtinModules);
192199
Module.builtinModules = builtinModules;
193200

@@ -1305,5 +1312,9 @@ Module.syncBuiltinESMExports = function syncBuiltinESMExports() {
13051312
}
13061313
};
13071314

1315+
Module.isBuiltin = function isBuiltin(moduleName) {
1316+
return allBuiltins.has(moduleName);
1317+
};
1318+
13081319
// Backwards compatibility
13091320
Module.Module = Module;
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
require('../common');
3+
const assert = require('assert');
4+
const { isBuiltin } = require('module');
5+
6+
// Includes modules in lib/ (even deprecated ones)
7+
assert(isBuiltin('http'));
8+
assert(isBuiltin('sys'));
9+
assert(isBuiltin('node:fs'));
10+
assert(isBuiltin('node:test'));
11+
12+
// Does not include internal modules
13+
assert(!isBuiltin('internal/errors'));
14+
assert(!isBuiltin('test'));
15+
assert(!isBuiltin(''));
16+
assert(!isBuiltin(undefined));

0 commit comments

Comments
 (0)