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>
This commit is contained in:
parent
708477bd8d
commit
bba07d7e1e
@ -593,17 +593,17 @@ translators.set('addon', function translateAddon(url, source, isMain) {
|
||||
});
|
||||
|
||||
// Strategy for loading a commonjs TypeScript module
|
||||
translators.set('commonjs-typescript', function(url, source) {
|
||||
translators.set('commonjs-typescript', function(url, source, isMain) {
|
||||
assertBufferSource(source, true, 'load');
|
||||
const code = stripTypeScriptModuleTypes(stringify(source), url);
|
||||
debug(`Translating TypeScript ${url}`);
|
||||
return FunctionPrototypeCall(translators.get('commonjs'), this, url, code, false);
|
||||
return FunctionPrototypeCall(translators.get('commonjs'), this, url, code, isMain);
|
||||
});
|
||||
|
||||
// Strategy for loading an esm TypeScript module
|
||||
translators.set('module-typescript', function(url, source) {
|
||||
translators.set('module-typescript', function(url, source, isMain) {
|
||||
assertBufferSource(source, true, 'load');
|
||||
const code = stripTypeScriptModuleTypes(stringify(source), url);
|
||||
debug(`Translating TypeScript ${url}`);
|
||||
return FunctionPrototypeCall(translators.get('module'), this, url, code, false);
|
||||
return FunctionPrototypeCall(translators.get('module'), this, url, code, isMain);
|
||||
});
|
||||
|
@ -3,17 +3,6 @@ import * as fixtures from '../common/fixtures.js';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, it } from 'node:test';
|
||||
|
||||
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');
|
||||
`;
|
||||
|
||||
function wrapScriptInEvalWorker(script) {
|
||||
return `
|
||||
import { Worker } from 'node:worker_threads';
|
||||
@ -33,6 +22,17 @@ function wrapScriptInUrlWorker(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,
|
||||
@ -72,3 +72,61 @@ describe('import.meta.main in evaluated scripts', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
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,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
1
test/fixtures/es-modules/import-meta-main.ts
vendored
Normal file
1
test/fixtures/es-modules/import-meta-main.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export const isMain = import.meta.main;
|
Loading…
x
Reference in New Issue
Block a user