forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest-module-hooks-custom-conditions-special-values.js
More file actions
70 lines (66 loc) · 2.15 KB
/
test-module-hooks-custom-conditions-special-values.js
File metadata and controls
70 lines (66 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Check various special values of `conditions` in the context object
// when using synchronous module hooks to override the loaders in a
// CJS module.
'use strict';
const common = require('../common');
const { registerHooks } = require('node:module');
const assert = require('node:assert');
const { cjs, esm } = require('../fixtures/es-modules/custom-condition/load.cjs');
(async () => {
// Setting it to undefined would lead to the default conditions being used.
{
const hooks = registerHooks({
resolve(specifier, context, nextResolve) {
context.conditions = undefined;
return nextResolve(specifier, context);
},
});
assert.strictEqual(cjs('foo').result, 'default');
assert.strictEqual((await esm('foo')).result, 'default');
hooks.deregister();
}
// Setting it to an empty array would lead to the default conditions being used.
{
const hooks = registerHooks({
resolve(specifier, context, nextResolve) {
context.conditions = [];
return nextResolve(specifier, context);
},
});
assert.strictEqual(cjs('foo/second').result, 'default');
assert.strictEqual((await esm('foo/second')).result, 'default');
hooks.deregister();
}
// If the exports have no default export, it should error.
{
const hooks = registerHooks({
resolve(specifier, context, nextResolve) {
context.conditions = [];
return nextResolve(specifier, context);
},
});
assert.throws(() => cjs('foo/no-default'), {
code: 'ERR_PACKAGE_PATH_NOT_EXPORTED',
});
await assert.rejects(esm('foo/no-default'), {
code: 'ERR_PACKAGE_PATH_NOT_EXPORTED',
});
hooks.deregister();
}
// If the exports have no default export, it should error.
{
const hooks = registerHooks({
resolve(specifier, context, nextResolve) {
context.conditions = 'invalid';
return nextResolve(specifier, context);
},
});
assert.throws(() => cjs('foo/third'), {
code: 'ERR_INVALID_ARG_VALUE',
});
await assert.rejects(esm('foo/third'), {
code: 'ERR_INVALID_ARG_VALUE',
});
hooks.deregister();
}
})().then(common.mustCall());