mirror of https://github.com/nodejs/node.git
52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
// This tests a pirates-like load hook works.
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const fixtures = require('../common/fixtures');
|
|
const { readFileSync } = require('fs');
|
|
|
|
const loader = require('../fixtures/module-hooks/load-from-this-dir');
|
|
const { addHook } = require('../fixtures/module-hooks/add-hook');
|
|
|
|
const matcherArgs = [];
|
|
function matcher(filename) {
|
|
matcherArgs.push(filename);
|
|
return true;
|
|
}
|
|
|
|
const hookArgs = [];
|
|
function hook(code, filename) {
|
|
hookArgs.push({ code, filename });
|
|
return code.replace('$key', 'hello');
|
|
}
|
|
|
|
(async () => {
|
|
const revert = addHook(hook, { exts: ['.js'], matcher });
|
|
|
|
{
|
|
const foo = await loader.import('foo-esm');
|
|
const filename = fixtures.path('module-hooks', 'node_modules', 'foo-esm', 'foo-esm.js');
|
|
assert.deepStrictEqual(matcherArgs, [filename]);
|
|
const code = readFileSync(filename, 'utf-8');
|
|
assert.deepStrictEqual(hookArgs, [{ code, filename }]);
|
|
assert.deepStrictEqual({ ...foo }, { hello: 'foo-esm' });
|
|
}
|
|
|
|
matcherArgs.splice(0, 1);
|
|
hookArgs.splice(0, 1);
|
|
|
|
revert();
|
|
|
|
// Later loads are unaffected.
|
|
|
|
{
|
|
const bar = await loader.import('bar-esm');
|
|
assert.deepStrictEqual(matcherArgs, []);
|
|
assert.deepStrictEqual(hookArgs, []);
|
|
assert.deepStrictEqual({ ...bar }, { $key: 'bar-esm' });
|
|
}
|
|
|
|
})().catch(common.mustNotCall());
|