Skip to content

Commit 79ffed7

Browse files
committed
module: derive builtinModules from enabled builtin set
Signed-off-by: sjungwon03 <sjungwon03@gmail.com>
1 parent 55e4ca3 commit 79ffed7

3 files changed

Lines changed: 46 additions & 15 deletions

File tree

lib/internal/bootstrap/realm.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,16 @@ class BuiltinModule {
334334

335335
static getAllBuiltinModuleIds() {
336336
const allBuiltins = ArrayFrom(canBeRequiredByUsersWithoutSchemeList);
337-
ArrayPrototypePushApply(allBuiltins, ArrayFrom(schemelessBlockList, (x) => `node:${x}`));
337+
ArrayPrototypePushApply(
338+
allBuiltins,
339+
ArrayPrototypeMap(
340+
ArrayPrototypeFilter(
341+
ArrayFrom(schemelessBlockList),
342+
(id) => canBeRequiredByUsersList.has(id),
343+
),
344+
(id) => 'node:' + id,
345+
),
346+
);
338347
return allBuiltins;
339348
}
340349

lib/internal/modules/cjs/loader.js

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -492,20 +492,7 @@ Module.isBuiltin = BuiltinModule.isBuiltin;
492492
function initializeCJS() {
493493
// This need to be done at runtime in case --expose-internals is set.
494494

495-
let modules = Module.builtinModules = BuiltinModule.getAllBuiltinModuleIds();
496-
if (!getOptionValue('--experimental-dtls')) {
497-
modules = modules.filter((i) => i !== 'node:dtls');
498-
}
499-
if (!getOptionValue('--experimental-quic')) {
500-
modules = modules.filter((i) => i !== 'node:quic');
501-
}
502-
if (!getOptionValue('--experimental-ffi')) {
503-
modules = modules.filter((i) => i !== 'node:ffi');
504-
}
505-
if (!getOptionValue('--experimental-vfs')) {
506-
modules = modules.filter((i) => i !== 'node:vfs');
507-
}
508-
Module.builtinModules = ObjectFreeze(modules);
495+
Module.builtinModules = ObjectFreeze(BuiltinModule.getAllBuiltinModuleIds());
509496

510497
initializeCjsConditions();
511498

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const { spawnSyncAndAssert } = require('../common/child_process');
5+
6+
const experimentalBuiltins = [
7+
['dtls', '--experimental-dtls', common.hasDtls],
8+
['ffi', '--experimental-ffi', common.hasFFI],
9+
['quic', '--experimental-quic', common.hasQuic],
10+
['vfs', '--experimental-vfs', true],
11+
].filter(([, , available]) => available);
12+
13+
for (const [id, flag] of experimentalBuiltins) {
14+
const builtin = `node:${id}`;
15+
16+
spawnSyncAndAssert(process.execPath, [
17+
'-e', `const m = require('node:module'); if (m.builtinModules.includes('${builtin}')) process.exit(1); try { require('${builtin}'); } catch (e) { if (e.code === 'ERR_UNKNOWN_BUILTIN_MODULE') process.exit(0); } process.exit(1);`,
18+
], { status: 0 });
19+
20+
spawnSyncAndAssert(process.execPath, [
21+
flag,
22+
'-e', `const m = require('node:module'); if (!m.builtinModules.includes('${builtin}')) process.exit(1); require('${builtin}');`,
23+
], { status: 0 });
24+
}
25+
26+
const schemeOnlyBuiltins = ['node:test', 'node:sea'];
27+
if (common.hasSQLite) {
28+
schemeOnlyBuiltins.push('node:sqlite');
29+
}
30+
31+
for (const id of schemeOnlyBuiltins) {
32+
spawnSyncAndAssert(process.execPath, [
33+
'-e', `const m = require('node:module'); if (!m.builtinModules.includes('${id}')) process.exit(1); require('${id}');`,
34+
], { status: 0 });
35+
}

0 commit comments

Comments
 (0)