mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
Previously, when require()-ing builtins with the node: prefix, the sync resolve hooks were not properly invoked, and load hooks could not override the builtin's format. This fixes the handling and enables redirecting prefixed built-ins to on-disk files and overriding them with other module types via hooks. PR-URL: https://github.com/nodejs/node/pull/61088 Fixes: https://github.com/nodejs/node/issues/60005 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
// This tests that load hooks can override the format of builtin modules
|
|
// to 'json' format.
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { registerHooks } = require('module');
|
|
|
|
// Pick a builtin that's unlikely to be loaded already - like zlib.
|
|
assert(!process.moduleLoadList.includes('NativeModule zlib'));
|
|
|
|
const hook = registerHooks({
|
|
load: common.mustCall(function load(url, context, nextLoad) {
|
|
// Only intercept zlib builtin
|
|
if (url === 'node:zlib') {
|
|
// Return JSON format to override the builtin
|
|
return {
|
|
source: JSON.stringify({ custom_zlib: 'JSON overridden zlib' }),
|
|
format: 'json',
|
|
shortCircuit: true,
|
|
};
|
|
}
|
|
return nextLoad(url, context);
|
|
}, 2), // Called twice: once for 'zlib', once for 'node:zlib'
|
|
});
|
|
|
|
// Test: Load hook overrides builtin format to json
|
|
const zlib = require('zlib');
|
|
assert.strictEqual(zlib.custom_zlib, 'JSON overridden zlib');
|
|
assert.strictEqual(typeof zlib.createGzip, 'undefined'); // Original zlib API should not be available
|
|
|
|
// Test with node: prefix
|
|
const zlib2 = require('node:zlib');
|
|
assert.strictEqual(zlib2.custom_zlib, 'JSON overridden zlib');
|
|
assert.strictEqual(typeof zlib2.createGzip, 'undefined');
|
|
|
|
hook.deregister();
|