• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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