49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
// This tests a pirates-like load hook works.
|
||
|
|
||
|
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');
|
||
|
}
|
||
|
|
||
|
const revert = addHook(hook, { exts: ['.js'], matcher });
|
||
|
|
||
|
{
|
||
|
const foo = loader.require('foo');
|
||
|
const filename = fixtures.path('module-hooks', 'node_modules', 'foo', 'foo.js');
|
||
|
assert.deepStrictEqual(matcherArgs, [filename]);
|
||
|
const code = readFileSync(filename, 'utf-8');
|
||
|
assert.deepStrictEqual(hookArgs, [{ code, filename }]);
|
||
|
assert.deepStrictEqual(foo, { hello: 'foo' });
|
||
|
}
|
||
|
|
||
|
matcherArgs.splice(0, 1);
|
||
|
hookArgs.splice(0, 1);
|
||
|
|
||
|
revert();
|
||
|
|
||
|
// Later loads are unaffected.
|
||
|
|
||
|
{
|
||
|
const bar = loader.require('bar');
|
||
|
assert.deepStrictEqual(matcherArgs, []);
|
||
|
assert.deepStrictEqual(hookArgs, []);
|
||
|
assert.deepStrictEqual(bar, { $key: 'bar' });
|
||
|
}
|