current commit
261015.3 · vfs: unflag
// Flags: --disable-warning=ExperimentalWarning
'use strict';

const common = require('../common');
const { spawnSyncAndAssert } = require('../common/child_process');

const experimentalBuiltins = [
  ['bench', '--experimental-bench', true],
  ['bench/reporters', '--experimental-bench', true],
  ['dtls', '--experimental-dtls', common.hasDtls],
  ['quic', '--experimental-quic', common.hasQuic],
].filter(([, , available]) => available);

for (const [id, flag] of experimentalBuiltins) {
  const builtin = `node:${id}`;

  spawnSyncAndAssert(process.execPath, [
    '-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);`,
  ], { status: 0 });

  spawnSyncAndAssert(process.execPath, [
    flag,
    '-e', `const m = require('node:module'); if (!m.builtinModules.includes('${builtin}')) process.exit(1); require('${builtin}');`,
  ], { status: 0 });
}

const schemelessExperimentalBuiltins = [
  ['stream/iter', '--experimental-stream-iter'],
  ['zlib/iter', '--experimental-stream-iter'],
];

for (const [id, flag] of schemelessExperimentalBuiltins) {
  const nodeBuiltin = `node:${id}`;

  spawnSyncAndAssert(process.execPath, [
    '-e', `const assert = require('node:assert'); const { builtinModules } = require('node:module'); assert(!builtinModules.includes('${id}')); assert(!builtinModules.includes('${nodeBuiltin}')); assert.throws(() => require('${id}'), { code: 'MODULE_NOT_FOUND' }); assert.throws(() => require('${nodeBuiltin}'), { code: 'ERR_UNKNOWN_BUILTIN_MODULE' });`,
  ], { status: 0 });

  spawnSyncAndAssert(process.execPath, [
    flag,
    '-e', `const assert = require('node:assert'); const { builtinModules } = require('node:module'); assert(builtinModules.includes('${id}')); assert(!builtinModules.includes('${nodeBuiltin}')); require('${id}'); require('${nodeBuiltin}');`,
  ], { status: 0 });
}

// node:ffi is enabled by default in builds with FFI support and can be
// disabled with --no-experimental-ffi.
if (common.hasFFI) {
  spawnSyncAndAssert(process.execPath, [
    '--no-experimental-ffi',
    '-e', `const m = require('node:module'); if (m.builtinModules.includes('node:ffi')) process.exit(1); try { require('node:ffi'); } catch (e) { if (e.code === 'ERR_UNKNOWN_BUILTIN_MODULE') process.exit(0); } process.exit(1);`,
  ], { status: 0 });
}

// node:vfs is enabled by default and can be disabled with
// --no-experimental-vfs.
spawnSyncAndAssert(process.execPath, [
  '--no-experimental-vfs',
  '-e', `const m = require('node:module'); if (m.builtinModules.includes('node:vfs')) process.exit(1); try { require('node:vfs'); } catch (e) { if (e.code === 'ERR_UNKNOWN_BUILTIN_MODULE') process.exit(0); } process.exit(1);`,
], { status: 0 });

const schemeOnlyBuiltins = ['node:test', 'node:sea', 'node:vfs'];
if (common.hasFFI) {
  schemeOnlyBuiltins.push('node:ffi');
}
if (common.hasSQLite) {
  schemeOnlyBuiltins.push('node:sqlite');
}

for (const id of schemeOnlyBuiltins) {
  spawnSyncAndAssert(process.execPath, [
    '-e', `const m = require('node:module'); if (!m.builtinModules.includes('${id}')) process.exit(1); require('${id}');`,
  ], { status: 0 });
}