Skip to content

Commit 2fc8989

Browse files
marco-ippolitoaduh95
authored andcommitted
module: fix typescript import.meta.main
PR-URL: #58661 Backport-PR-URL: #58693Fixes: #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 430e66b commit 2fc8989

3 files changed

Lines changed: 78 additions & 15 deletions

File tree

‎lib/internal/modules/esm/translators.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -511,17 +511,17 @@ translators.set('wasm', async function(url, source) {
511511
});
512512

513513
// Strategy for loading a commonjs TypeScript module
514-
translators.set('commonjs-typescript',function(url,source){
514+
translators.set('commonjs-typescript',function(url,source,isMain){
515515
assertBufferSource(source,true,'load');
516516
constcode=stripTypeScriptModuleTypes(stringify(source),url);
517517
debug(`Translating TypeScript ${url}`);
518-
returnFunctionPrototypeCall(translators.get('commonjs'),this,url,code,false);
518+
returnFunctionPrototypeCall(translators.get('commonjs'),this,url,code,isMain);
519519
});
520520

521521
// Strategy for loading an esm TypeScript module
522-
translators.set('module-typescript',function(url,source){
522+
translators.set('module-typescript',function(url,source,isMain){
523523
assertBufferSource(source,true,'load');
524524
constcode=stripTypeScriptModuleTypes(stringify(source),url);
525525
debug(`Translating TypeScript ${url}`);
526-
returnFunctionPrototypeCall(translators.get('module'),this,url,code,false);
526+
returnFunctionPrototypeCall(translators.get('module'),this,url,code,isMain);
527527
});

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

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

6-
constimportMetaMainScript=`
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
functionwrapScriptInEvalWorker(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+
constimportMetaMainScript=`
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
constresult=awaitspawnPromisified(
3838
process.execPath,
@@ -72,3 +72,65 @@ describe('import.meta.main in evaluated scripts', () => {
7272
});
7373
});
7474
});
75+
76+
describe('import.meta.main in typescript scripts',()=>{
77+
constimportMetaMainTSScript=`
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+
constresult=awaitspawnPromisified(
90+
process.execPath,
91+
['--experimental-strip-types',
92+
'--input-type=module-typescript',
93+
'--disable-warning=ExperimentalWarning',
94+
'--eval',importMetaMainTSScript],
95+
);
96+
assert.deepStrictEqual(result,{
97+
stderr: '',
98+
stdout: '',
99+
code: 0,
100+
signal: null,
101+
});
102+
});
103+
104+
it('should evaluate true in worker instantiated with module source by evaluated script',async()=>{
105+
constresult=awaitspawnPromisified(
106+
process.execPath,
107+
['--experimental-strip-types',
108+
'--input-type=module-typescript',
109+
'--disable-warning=ExperimentalWarning',
110+
'--eval',wrapScriptInEvalWorker(importMetaMainTSScript)],
111+
);
112+
assert.deepStrictEqual(result,{
113+
stderr: '',
114+
stdout: '',
115+
code: 0,
116+
signal: null,
117+
});
118+
});
119+
120+
it('should evaluate true in worker instantiated with `data:` URL by evaluated script',async()=>{
121+
constresult=awaitspawnPromisified(
122+
process.execPath,
123+
['--input-type=module',
124+
'--experimental-strip-types',
125+
'--input-type=module-typescript',
126+
'--disable-warning=ExperimentalWarning',
127+
'--eval',wrapScriptInUrlWorker(importMetaMainTSScript)],
128+
);
129+
assert.deepStrictEqual(result,{
130+
stderr: '',
131+
stdout: '',
132+
code: 0,
133+
signal: null,
134+
});
135+
});
136+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
exportconstisMain=import.meta.main;

0 commit comments

Comments
 (0)