node/test/module-hooks/test-module-hooks-resolve-context-merged.js
Joyee Cheung ea2004a2ac
module: allow omitting context in synchronous next hooks
This aligns the behavior of synchronous hooks with asynchronous
hooks by allowing omission of the context parameter in the
invocation of next hooks. The contexts are merged along the
chain.

PR-URL: https://github.com/nodejs/node/pull/57056
Fixes: https://github.com/nodejs/node/issues/57030
Reviewed-By: Jacob Smith <jacob@frende.me>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2025-02-18 15:28:59 +00:00

34 lines
1 KiB
JavaScript

'use strict';
// Test that the context parameter will be merged in multiple resolve hooks.
const common = require('../common');
const assert = require('assert');
const { registerHooks } = require('module');
const hook1 = registerHooks({
resolve: common.mustCall(function(specifier, context, nextResolve) {
assert.strictEqual(context.testProp, 'custom'); // It should be merged from hook 2 and 3.
const result = nextResolve(specifier, context);
return result;
}, 1),
});
const hook2 = registerHooks({
resolve: common.mustCall(function(specifier, context, nextResolve) {
assert.strictEqual(context.testProp, 'custom'); // It should be merged from hook 3.
return nextResolve(specifier); // Omit the context.
}, 1),
});
const hook3 = registerHooks({
resolve: common.mustCall(function(specifier, context, nextResolve) {
return nextResolve(specifier, { testProp: 'custom' }); // Add a custom property
}, 1),
});
require('../fixtures/empty.js');
hook3.deregister();
hook2.deregister();
hook1.deregister();