mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00

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>
132 lines
4 KiB
JavaScript
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,
|
|
});
|
|
});
|
|
});
|