blob: a3bb0dd2c4bb50ad3bb12d2873329bba9e6cff5e [file] [edit]
'use strict';
// This tests that the async loader hooks can be invoked for require(esm).
require('../common');
const common = require('../common');
const { spawnSyncAndAssert } = require('../common/child_process');
const fixtures = require('../common/fixtures');
const assert = require('assert');
function assertSubGraph(output) {
// FIXME(node:59666): the async resolve hook invoked for require() in imported CJS only get the URL,
// not the specifier. This may be fixable if we re-implement the async loader hooks from within
// the synchronous loader hooks and use the original require() implementation.
assert.match(output, /resolve .+esm\.mjs from file:.+main\.cjs/);
assert.match(output, /load file:.+esm\.mjs/);
assert.match(output, /resolve \.\/inner\.mjs from file:.+esm\.mjs/);
assert.match(output, /load file:.+inner\.mjs/);
assert.match(output, /resolve \.\/cjs\.cjs from file:.+esm\.mjs/);
assert.match(output, /load file:.+cjs\.cjs/);
// FIXME(node:59666): see above.
assert.match(output, /resolve .+inner\.cjs from file:.+cjs\.cjs/);
assert.match(output, /load file:.+inner\.cjs/);
assert.match(output, /esmValue in main\.cjs: esm/);
assert.match(output, /cjsValue in main\.cjs: commonjs/);
}
spawnSyncAndAssert(process.execPath, [
'--import',
fixtures.fileURL('module-hooks', 'register-logger-async-hooks.mjs'),
fixtures.path('module-hooks', 'require-esm', 'main.cjs'),
], {
stdout: common.mustCall((output) => {
// The graph is:
// main.cjs
// -> esm.mjs
// -> inner.mjs
// -> cjs.cjs
// -> inner.cjs
assert.match(output, /resolve .+main\.cjs from undefined/);
assert.match(output, /load file:.+main\.cjs/);
assertSubGraph(output);
}),
});
spawnSyncAndAssert(process.execPath, [
'--import',
fixtures.fileURL('module-hooks', 'register-logger-async-hooks.mjs'),
fixtures.path('module-hooks', 'require-esm', 'main.mjs'),
], {
stdout: common.mustCall((output) => {
// The graph is:
// main.mjs
// -> main.cjs
// -> esm.mjs
// -> inner.mjs
// -> cjs.cjs
// -> inner.cjs
assert.match(output, /resolve .+main\.mjs from undefined/);
assert.match(output, /load file:.+main\.mjs/);
assert.match(output, /resolve .+main\.cjs from file:.+main\.mjs/);
assert.match(output, /load file:.+main\.cjs/);
assertSubGraph(output);
}),
});