node/test/es-module/test-esm-import-meta-main-eval.mjs
Marco Ippolito bba07d7e1e
module: fix typescript import.meta.main
PR-URL: https://github.com/nodejs/node/pull/58661
Fixes: https://github.com/nodejs/node/issues/58660
Reviewed-By: Xuguang Mei <meixuguang@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Jacob Smith <jacob@frende.me>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reviewed-By: Pietro Marchini <pietro.marchini94@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
2025-06-12 11:21:54 +00:00

132 lines
4 KiB
JavaScript

import { spawnPromisified } from '../common/index.mjs';
import * as fixtures from '../common/fixtures.js';
import assert from 'node:assert/strict';
import { describe, it } from 'node:test';
function wrapScriptInEvalWorker(script) {
return `
import { Worker } from 'node:worker_threads';
new Worker(${JSON.stringify(script)}, { eval: true });
`;
}
function convertScriptSourceToDataUrl(script) {
return new URL(`data:text/javascript,${encodeURIComponent(script)}`);
}
function wrapScriptInUrlWorker(script) {
return `
import { Worker } from 'node:worker_threads';
new Worker(new URL(${JSON.stringify(convertScriptSourceToDataUrl(script))}));
`;
}
describe('import.meta.main in evaluated scripts', () => {
const importMetaMainScript = `
import assert from 'node:assert/strict';
assert.strictEqual(import.meta.main, true, 'import.meta.main should evaluate true in main module');
const { isMain: importedModuleIsMain } = await import(
${JSON.stringify(fixtures.fileURL('es-modules/import-meta-main.mjs'))}
);
assert.strictEqual(importedModuleIsMain, false, 'import.meta.main should evaluate false in imported module');
`;
it('should evaluate true in evaluated script', async () => {
const result = await spawnPromisified(
process.execPath,
['--input-type=module', '--eval', importMetaMainScript],
);
assert.deepStrictEqual(result, {
stderr: '',
stdout: '',
code: 0,
signal: null,
});
});
it('should evaluate true in worker instantiated with module source by evaluated script', async () => {
const result = await spawnPromisified(
process.execPath,
['--input-type=module', '--eval', wrapScriptInEvalWorker(importMetaMainScript)],
);
assert.deepStrictEqual(result, {
stderr: '',
stdout: '',
code: 0,
signal: null,
});
});
it('should evaluate true in worker instantiated with `data:` URL by evaluated script', async () => {
const result = await spawnPromisified(
process.execPath,
['--input-type=module', '--eval', wrapScriptInUrlWorker(importMetaMainScript)],
);
assert.deepStrictEqual(result, {
stderr: '',
stdout: '',
code: 0,
signal: null,
});
});
});
describe('import.meta.main in typescript scripts', () => {
const importMetaMainTSScript = `
import assert from 'node:assert/strict';
assert.strictEqual(import.meta.main, true, 'import.meta.main should evaluate true in main module');
const { isMain: importedModuleIsMain } = await import(
${JSON.stringify(fixtures.fileURL('es-modules/import-meta-main.ts'))}
);
assert.strictEqual(importedModuleIsMain, false, 'import.meta.main should evaluate false in imported module');
`;
it('should evaluate true in evaluated script', async () => {
const result = await spawnPromisified(
process.execPath,
['--input-type=module-typescript', '--disable-warning=ExperimentalWarning', '--eval', importMetaMainTSScript],
);
assert.deepStrictEqual(result, {
stderr: '',
stdout: '',
code: 0,
signal: null,
});
});
it('should evaluate true in worker instantiated with module source by evaluated script', async () => {
const result = await spawnPromisified(
process.execPath,
['--input-type=module-typescript',
'--disable-warning=ExperimentalWarning',
'--eval',
wrapScriptInEvalWorker(importMetaMainTSScript)],
);
assert.deepStrictEqual(result, {
stderr: '',
stdout: '',
code: 0,
signal: null,
});
});
it('should evaluate true in worker instantiated with `data:` URL by evaluated script', async () => {
const result = await spawnPromisified(
process.execPath,
['--input-type=module',
'--input-type=module-typescript',
'--disable-warning=ExperimentalWarning',
'--eval', wrapScriptInUrlWorker(importMetaMainTSScript)],
);
assert.deepStrictEqual(result, {
stderr: '',
stdout: '',
code: 0,
signal: null,
});
});
});