'use strict'; require('../common'); const { spawnSyncAndAssert } = require('../common/child_process'); const { fixturesDir } = require('../common/fixtures'); function testPreload(preloadFlag) { // Test named exports. { spawnSyncAndAssert( process.execPath, [ '--experimental-require-module', preloadFlag, './es-module-loaders/module-named-exports.mjs', './printA.js', ], { cwd: fixturesDir }, { stdout: 'A', trim: true, } ); } // Test ESM that import ESM. { spawnSyncAndAssert( process.execPath, [ '--experimental-require-module', preloadFlag, './es-modules/import-esm.mjs', './printA.js', ], { cwd: fixturesDir }, { stdout: /^world\s+A$/, trim: true, } ); } // Test ESM that import CJS. { spawnSyncAndAssert( process.execPath, [ '--experimental-require-module', preloadFlag, './es-modules/cjs-exports.mjs', './printA.js', ], { cwd: fixturesDir }, { stdout: /^ok\s+A$/, trim: true, } ); } // Test ESM that require() CJS. // Can't use the common/index.mjs here because that checks the globals, and // -r injects a bunch of globals. { spawnSyncAndAssert( process.execPath, [ '--experimental-require-module', preloadFlag, './es-modules/require-cjs.mjs', './printA.js', ], { cwd: fixturesDir }, { stdout: /^world\s+A$/, trim: true, } ); } } testPreload('--require'); testPreload('--import'); // Test "type": "module" and "main" field in package.json, this is only for --require because // --import does not support extension-less preloads. { spawnSyncAndAssert( process.execPath, [ '--experimental-require-module', '--require', './es-modules/package-type-module', './printA.js', ], { cwd: fixturesDir }, { stdout: /^package-type-module\s+A$/, trim: true, } ); }