node/test/module-hooks/test-module-hooks-resolve-require-resolve-consistency.js
Joyee Cheung dd400b9f12
module: run require.resolve through module.registerHooks()
Previously, require.resolve() called Module._resolveFilename() directly,
bypassing any resolve hooks registered via module.registerHooks(). This
patch fixes that.

PR-URL: https://github.com/nodejs/node/pull/62028
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
2026-03-02 18:28:25 +00:00

38 lines
1.1 KiB
JavaScript

'use strict';
// This tests that require.resolve() and require() both go through the same
// resolve hooks registered via module.registerHooks().
require('../common');
const assert = require('assert');
const { registerHooks } = require('module');
const fixtures = require('../common/fixtures');
const { pathToFileURL } = require('url');
const redirectedPath = fixtures.path('module-hooks', 'redirected-assert.js');
const resolvedSpecifiers = [];
const hook = registerHooks({
resolve(specifier, context, nextResolve) {
if (specifier === 'test-consistency-target') {
resolvedSpecifiers.push(specifier);
return {
url: pathToFileURL(redirectedPath).href,
shortCircuit: true,
};
}
return nextResolve(specifier, context);
},
});
const resolveResult = require.resolve('test-consistency-target');
const requireResult = require('test-consistency-target');
assert.strictEqual(resolveResult, redirectedPath);
assert.strictEqual(requireResult.exports_for_test, 'redirected assert');
assert.deepStrictEqual(resolvedSpecifiers, [
'test-consistency-target',
'test-consistency-target',
]);
hook.deregister();