Skip to content

Commit e6186af

Browse files
hemanthtargos
authored andcommitted
module: add isBuiltIn method
PR-URL: #43396Fixes: #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‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ const require = createRequire(import.meta.url);
6262
constsiblingModule=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‎

Lines changed: 11 additions & 0 deletions
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+
constallBuiltins=newSafeSet(
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=functionisBuiltin(moduleName){
1316+
returnallBuiltins.has(moduleName);
1317+
};
1318+
13081319
// Backwards compatibility
13091320
Module.Module=Module;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
require('../common');
3+
constassert=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)