Skip to content

Commit ff8a369

Browse files
marco-ippolitotargos
authored andcommitted
module: fix typescript import.meta.main
PR-URL: #58661 Fixes: #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>
1 parent 45f7d16 commit ff8a369

File tree

3 files changed

+74
-15
lines changed

3 files changed

+74
-15
lines changed

lib/internal/modules/esm/translators.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -593,17 +593,17 @@ translators.set('addon', function translateAddon(url, source, isMain) {
593593
});
594594

595595
// Strategy for loading a commonjs TypeScript module
596-
translators.set('commonjs-typescript', function(url, source) {
596+
translators.set('commonjs-typescript', function(url, source, isMain) {
597597
assertBufferSource(source, true, 'load');
598598
const code = stripTypeScriptModuleTypes(stringify(source), url);
599599
debug(`Translating TypeScript ${url}`);
600-
return FunctionPrototypeCall(translators.get('commonjs'), this, url, code, false);
600+
return FunctionPrototypeCall(translators.get('commonjs'), this, url, code, isMain);
601601
});
602602

603603
// Strategy for loading an esm TypeScript module
604-
translators.set('module-typescript', function(url, source) {
604+
translators.set('module-typescript', function(url, source, isMain) {
605605
assertBufferSource(source, true, 'load');
606606
const code = stripTypeScriptModuleTypes(stringify(source), url);
607607
debug(`Translating TypeScript ${url}`);
608-
return FunctionPrototypeCall(translators.get('module'), this, url, code, false);
608+
return FunctionPrototypeCall(translators.get('module'), this, url, code, isMain);
609609
});

test/es-module/test-esm-import-meta-main-eval.mjs

Lines changed: 69 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,6 @@ import * as fixtures from '../common/fixtures.js';
33
import assert from 'node:assert/strict';
44
import { describe, it } from 'node:test';
55

6-
const importMetaMainScript = `
7-
import assert from 'node:assert/strict';
8-
9-
assert.strictEqual(import.meta.main, true, 'import.meta.main should evaluate true in main module');
10-
11-
const { isMain: importedModuleIsMain } = await import(
12-
${JSON.stringify(fixtures.fileURL('es-modules/import-meta-main.mjs'))}
13-
);
14-
assert.strictEqual(importedModuleIsMain, false, 'import.meta.main should evaluate false in imported module');
15-
`;
16-
176
function wrapScriptInEvalWorker(script) {
187
return `
198
import { Worker } from 'node:worker_threads';
@@ -33,6 +22,17 @@ function wrapScriptInUrlWorker(script) {
3322
}
3423

3524
describe('import.meta.main in evaluated scripts', () => {
25+
const importMetaMainScript = `
26+
import assert from 'node:assert/strict';
27+
28+
assert.strictEqual(import.meta.main, true, 'import.meta.main should evaluate true in main module');
29+
30+
const { isMain: importedModuleIsMain } = await import(
31+
${JSON.stringify(fixtures.fileURL('es-modules/import-meta-main.mjs'))}
32+
);
33+
assert.strictEqual(importedModuleIsMain, false, 'import.meta.main should evaluate false in imported module');
34+
`;
35+
3636
it('should evaluate true in evaluated script', async () => {
3737
const result = await spawnPromisified(
3838
process.execPath,
@@ -72,3 +72,61 @@ describe('import.meta.main in evaluated scripts', () => {
7272
});
7373
});
7474
});
75+
76+
describe('import.meta.main in typescript scripts', () => {
77+
const importMetaMainTSScript = `
78+
import assert from 'node:assert/strict';
79+
80+
assert.strictEqual(import.meta.main, true, 'import.meta.main should evaluate true in main module');
81+
82+
const { isMain: importedModuleIsMain } = await import(
83+
${JSON.stringify(fixtures.fileURL('es-modules/import-meta-main.ts'))}
84+
);
85+
assert.strictEqual(importedModuleIsMain, false, 'import.meta.main should evaluate false in imported module');
86+
`;
87+
88+
it('should evaluate true in evaluated script', async () => {
89+
const result = await spawnPromisified(
90+
process.execPath,
91+
['--input-type=module-typescript', '--disable-warning=ExperimentalWarning', '--eval', importMetaMainTSScript],
92+
);
93+
assert.deepStrictEqual(result, {
94+
stderr: '',
95+
stdout: '',
96+
code: 0,
97+
signal: null,
98+
});
99+
});
100+
101+
it('should evaluate true in worker instantiated with module source by evaluated script', async () => {
102+
const result = await spawnPromisified(
103+
process.execPath,
104+
['--input-type=module-typescript',
105+
'--disable-warning=ExperimentalWarning',
106+
'--eval',
107+
wrapScriptInEvalWorker(importMetaMainTSScript)],
108+
);
109+
assert.deepStrictEqual(result, {
110+
stderr: '',
111+
stdout: '',
112+
code: 0,
113+
signal: null,
114+
});
115+
});
116+
117+
it('should evaluate true in worker instantiated with `data:` URL by evaluated script', async () => {
118+
const result = await spawnPromisified(
119+
process.execPath,
120+
['--input-type=module',
121+
'--input-type=module-typescript',
122+
'--disable-warning=ExperimentalWarning',
123+
'--eval', wrapScriptInUrlWorker(importMetaMainTSScript)],
124+
);
125+
assert.deepStrictEqual(result, {
126+
stderr: '',
127+
stdout: '',
128+
code: 0,
129+
signal: null,
130+
});
131+
});
132+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const isMain = import.meta.main;

0 commit comments

Comments
 (0)