node/test/module-hooks/test-module-hooks-load-esm.js

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());