GeezerVison is showing github.com — module: add isBuiltIn method · nodejs/node@e6186af
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: doc/api/module.md +16Lines changed: 16 additions & 0 deletions - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -62,6 +62,22 @@ const require = createRequire(import.meta.url); | 62 | 62 | const siblingModule = require('./sibling-module'); | 63 | 63 | ``` | 64 | 64 |
| | 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 | +
| 65 | 81 | ### `module.syncBuiltinESMExports()` | 66 | 82 |
| 67 | 83 | <!-- YAML | |
Collapse file Copy file name to clipboardExpand all lines: lib/internal/modules/cjs/loader.js +11Lines changed: 11 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -33,6 +33,7 @@ const { | 33 | 33 | ArrayPrototypeSplice, | 34 | 34 | ArrayPrototypeUnshift, | 35 | 35 | ArrayPrototypeUnshiftApply, | | 36 | + ArrayPrototypeFlatMap, | 36 | 37 | Boolean, | 37 | 38 | Error, | 38 | 39 | JSONParse, | @@ -51,6 +52,7 @@ const { | 51 | 52 | RegExpPrototypeExec, | 52 | 53 | RegExpPrototypeTest, | 53 | 54 | SafeMap, | | 55 | + SafeSet, | 54 | 56 | SafeWeakMap, | 55 | 57 | String, | 56 | 58 | StringPrototypeCharAt, | @@ -188,6 +190,11 @@ for (const { 0: id, 1: mod } of NativeModule.map) { | 188 | 190 | } | 189 | 191 | } | 190 | 192 |
| | 193 | +const allBuiltins = new SafeSet( | | 194 | + ArrayPrototypeFlatMap(builtinModules, (bm) => [bm, `node:${bm}`]) | | 195 | +); | | 196 | +NativeModule.getSchemeOnlyModuleNames().forEach((builtin) => allBuiltins.add(`node:${builtin}`)); | | 197 | + | 191 | 198 | ObjectFreeze(builtinModules); | 192 | 199 | Module.builtinModules = builtinModules; | 193 | 200 |
| @@ -1305,5 +1312,9 @@ Module.syncBuiltinESMExports = function syncBuiltinESMExports() { | 1305 | 1312 | } | 1306 | 1313 | }; | 1307 | 1314 |
| | 1315 | +Module.isBuiltin = function isBuiltin(moduleName) { | | 1316 | + return allBuiltins.has(moduleName); | | 1317 | +}; | | 1318 | + | 1308 | 1319 | // Backwards compatibility | 1309 | 1320 | Module.Module = Module; |
Collapse file Copy file name to clipboard +16Lines changed: 16 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 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)); |
|