1// Flags: --experimental-specifier-resolution=node 2import { mustNotCall } from '../common/index.mjs'; 3import assert from 'assert'; 4import path from 'path'; 5import { spawn } from 'child_process'; 6import { fileURLToPath } from 'url'; 7 8// commonJS index.js 9import commonjs from '../fixtures/es-module-specifiers/package-type-commonjs'; 10// esm index.js 11import module from '../fixtures/es-module-specifiers/package-type-module'; 12// Notice the trailing slash 13import success, { explicit, implicit, implicitModule, getImplicitCommonjs } 14 from '../fixtures/es-module-specifiers/'; 15 16assert.strictEqual(commonjs, 'commonjs'); 17assert.strictEqual(module, 'module'); 18assert.strictEqual(success, 'success'); 19assert.strictEqual(explicit, 'esm'); 20assert.strictEqual(implicit, 'cjs'); 21assert.strictEqual(implicitModule, 'cjs'); 22 23async function main() { 24 try { 25 await import('../fixtures/es-module-specifiers/do-not-exist.js'); 26 } catch (e) { 27 // Files that do not exist should throw 28 assert.strictEqual(e.name, 'Error'); 29 } 30 try { 31 await getImplicitCommonjs(); 32 } catch (e) { 33 // Legacy loader cannot resolve .mjs automatically from main 34 assert.strictEqual(e.name, 'Error'); 35 } 36} 37 38main().catch(mustNotCall); 39 40// Test path from command line arguments 41[ 42 'package-type-commonjs', 43 'package-type-module', 44 '/', 45 '/index', 46].forEach((item) => { 47 const modulePath = path.join( 48 fileURLToPath(import.meta.url), 49 '../../fixtures/es-module-specifiers', 50 item, 51 ); 52 [ 53 '--experimental-specifier-resolution', 54 '--es-module-specifier-resolution', 55 ].forEach((option) => { 56 spawn(process.execPath, 57 [`${option}=node`, modulePath], 58 { stdio: 'inherit' }).on('exit', (code) => { 59 assert.strictEqual(code, 0); 60 }); 61 }); 62}); 63