Skip to content

Commit

Permalink
esm: refactor test-esm-loader-resolve-type
Browse files Browse the repository at this point in the history
PR-URL: nodejs/node#49493
Backport-PR-URL: nodejs/node#50669
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Antoine du Hamel <[email protected]>
  • Loading branch information
sercher committed Apr 25, 2024
1 parent 64bbde6 commit fe729ec
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 41 deletions.
10 changes: 6 additions & 4 deletions graal-nodejs/test/es-module/test-esm-loader-resolve-type.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ try {
{ recursive: true }
);

deepStrictEqual(await spawnPromisified(
const output = await spawnPromisified(
execPath,
[
'--no-warnings',
Expand All @@ -29,15 +29,17 @@ try {
console.log(JSON.stringify({ before, after }));`,
],
{ cwd: base },
), {
);

deepStrictEqual(output, {
code: 0,
signal: null,
stderr: '',
stdout: JSON.stringify({
before: { importedESM: 0, importedCJS: 0 },
// Dynamic import in the eval script should increment ESM counter but not CJS counter
after: { importedESM: 1, importedCJS: 0 },
}) + '\n',
code: 0,
signal: null,
});
} finally {
await rm(base, { recursive: true, force: true });
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/** @type {MessagePort} */
let port;
export function initialize(data) {
port = data.port;
}

export async function resolve(specifier, context, next) {
const nextResult = await next(specifier, context);
const { format } = nextResult;

if (format === 'module' || specifier.endsWith('.mjs')) {
port.postMessage({ type: 'module' });
} else if (format == null || format === 'commonjs') {
port.postMessage({ type: 'commonjs' });
}

return nextResult;
}
60 changes: 23 additions & 37 deletions graal-nodejs/test/fixtures/es-module-loaders/hook-resolve-type.mjs
Original file line number Diff line number Diff line change
@@ -1,44 +1,30 @@
import * as fixtures from '../../common/fixtures.mjs';
import { register } from 'node:module';
import { MessageChannel } from 'node:worker_threads';

let importedESM = 0;
let importedCJS = 0;
export function getModuleTypeStats() {
return { importedESM, importedCJS };
};

export function globalPreload({ port }) {
port.on('message', (int32) => {
port.postMessage({ importedESM, importedCJS });
Atomics.store(int32, 0, 1);
Atomics.notify(int32, 0);
});
port.unref();
return `
const { receiveMessageOnPort } = getBuiltin('worker_threads');
global.getModuleTypeStats = async function getModuleTypeStats() {
const sab = new SharedArrayBuffer(4);
const int32 = new Int32Array(sab);
port.postMessage(int32);
// Artificial timeout to keep the event loop alive.
// https://bugs.chromium.org/p/v8/issues/detail?id=13238
// TODO(targos) Remove when V8 issue is resolved.
const timeout = setTimeout(() => { throw new Error('timeout'); }, 1_000);
await Atomics.waitAsync(int32, 0, 0).value;
clearTimeout(timeout);
return receiveMessageOnPort(port).message;
};
`;
}

export async function load(url, context, next) {
return next(url);
}
const { port1, port2 } = new MessageChannel();

export async function resolve(specifier, context, next) {
const nextResult = await next(specifier, context);
const { format } = nextResult;
register(fixtures.fileURL('es-module-loaders/hook-resolve-type-loader.mjs'), {
data: { port: port2 },
transferList: [port2],
});

if (format === 'module' || specifier.endsWith('.mjs')) {
importedESM++;
} else if (format == null || format === 'commonjs') {
importedCJS++;
port1.on('message', ({ type }) => {
switch (type) {
case 'module':
importedESM++;
break;
case 'commonjs':
importedCJS++;
break;
}
});

return nextResult;
}

port1.unref();
port2.unref();

0 comments on commit fe729ec

Please sign in to comment.