mirror of https://github.com/nodejs/node.git
58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
// Similar to test-module-hooks-custom-conditions.mjs, but checking the
|
|
// real require() instead of the re-invented one for imported CJS.
|
|
'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 () => {
|
|
// Without hooks, the default condition is used.
|
|
assert.strictEqual(cjs('foo').result, 'default');
|
|
assert.strictEqual((await esm('foo')).result, 'default');
|
|
|
|
// Prepending 'foo' to the conditions array in the resolve hook should
|
|
// allow a CJS to be resolved with that condition.
|
|
{
|
|
const hooks = registerHooks({
|
|
resolve(specifier, context, nextResolve) {
|
|
assert(Array.isArray(context.conditions));
|
|
context.conditions = ['foo', ...context.conditions];
|
|
return nextResolve(specifier, context);
|
|
},
|
|
});
|
|
assert.strictEqual(cjs('foo/second').result, 'foo');
|
|
assert.strictEqual((await esm('foo/second')).result, 'foo');
|
|
hooks.deregister();
|
|
}
|
|
|
|
// Prepending 'foo-esm' to the conditions array in the resolve hook should
|
|
// allow a ESM to be resolved with that condition.
|
|
{
|
|
const hooks = registerHooks({
|
|
resolve(specifier, context, nextResolve) {
|
|
assert(Array.isArray(context.conditions));
|
|
context.conditions = ['foo-esm', ...context.conditions];
|
|
return nextResolve(specifier, context);
|
|
},
|
|
});
|
|
assert.strictEqual(cjs('foo/third').result, 'foo-esm');
|
|
assert.strictEqual((await esm('foo/third')).result, 'foo-esm');
|
|
hooks.deregister();
|
|
}
|
|
|
|
// Duplicating the 'foo' condition in the resolve hook should not change the result.
|
|
{
|
|
const hooks = registerHooks({
|
|
resolve(specifier, context, nextResolve) {
|
|
assert(Array.isArray(context.conditions));
|
|
context.conditions = ['foo', ...context.conditions, 'foo'];
|
|
return nextResolve(specifier, context);
|
|
},
|
|
});
|
|
assert.strictEqual(cjs('foo/fourth').result, 'foo');
|
|
assert.strictEqual((await esm('foo/fourth')).result, 'foo');
|
|
hooks.deregister();
|
|
}
|
|
})().then(common.mustCall());
|