• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Flags: --experimental-loader ./test/fixtures/es-module-loaders/hooks-custom.mjs
2import '../common/index.mjs';
3import assert from 'assert';
4
5
6await assert.rejects(
7  import('nonexistent/file.mjs'),
8  { code: 'ERR_MODULE_NOT_FOUND' },
9);
10
11await assert.rejects(
12  import('../fixtures/es-modules/file.unknown'),
13  { code: 'ERR_UNKNOWN_FILE_EXTENSION' },
14);
15
16await assert.rejects(
17  import('esmHook/badReturnVal.mjs'),
18  { code: 'ERR_INVALID_RETURN_VALUE' },
19);
20
21// Nullish values are allowed; booleans are not
22await assert.rejects(
23  import('esmHook/format.false'),
24  { code: 'ERR_INVALID_RETURN_PROPERTY_VALUE' },
25);
26await assert.rejects(
27  import('esmHook/format.true'),
28  { code: 'ERR_INVALID_RETURN_PROPERTY_VALUE' },
29);
30
31await assert.rejects(
32  import('esmHook/badReturnFormatVal.mjs'),
33  { code: 'ERR_INVALID_RETURN_PROPERTY_VALUE' },
34);
35
36await assert.rejects(
37  import('esmHook/unsupportedReturnFormatVal.mjs'),
38  { code: 'ERR_UNKNOWN_MODULE_FORMAT' },
39);
40
41await assert.rejects(
42  import('esmHook/badReturnSourceVal.mjs'),
43  { code: 'ERR_INVALID_RETURN_PROPERTY_VALUE' },
44);
45
46await import('../fixtures/es-module-loaders/js-as-esm.js')
47.then((parsedModule) => {
48  assert.strictEqual(typeof parsedModule, 'object');
49  assert.strictEqual(parsedModule.namedExport, 'named-export');
50});
51
52// The custom loader tells node .ext files are MJS
53await import('../fixtures/es-modules/file.ext')
54.then((parsedModule) => {
55  assert.strictEqual(typeof parsedModule, 'object');
56  const { default: defaultExport } = parsedModule;
57  assert.strictEqual(typeof defaultExport, 'function');
58  assert.strictEqual(defaultExport.name, 'iAmReal');
59  assert.strictEqual(defaultExport(), true);
60});
61
62// The custom loader's resolve hook predetermines the format
63await import('esmHook/preknownFormat.pre')
64.then((parsedModule) => {
65  assert.strictEqual(typeof parsedModule, 'object');
66  assert.strictEqual(parsedModule.default, 'hello world');
67});
68
69// The custom loader provides source even though file does not actually exist
70await import('esmHook/virtual.mjs')
71.then((parsedModule) => {
72  assert.strictEqual(typeof parsedModule, 'object');
73  assert.strictEqual(typeof parsedModule.default, 'undefined');
74  assert.strictEqual(parsedModule.message, 'WOOHOO!');
75});
76
77// Ensure custom loaders have separate context from userland
78// hooks-custom.mjs also increments count (which starts at 0)
79// if both share context, count here would be 2
80await import('../fixtures/es-modules/stateful.mjs')
81.then(({ default: count }) => {
82  assert.strictEqual(count(), 1);
83});
84