Skip to content

Commit 71471a8

Browse files
authored
fix: do not transform new.target as import.meta (#498)
1 parent a8ef8b8 commit 71471a8

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

lib/compiler_transforms.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,17 @@ Deno.test("transform import.meta.resolve expressions in esModule", () => {
7070
`function test(specifier) { globalThis[Symbol.for("import-meta-ponyfill-esmodule")](import.meta).resolve(specifier); }\n`,
7171
);
7272
});
73+
74+
Deno.test("does not transform new.target in commonjs", () => {
75+
testImportReplacementsCjs(
76+
"function test(...args) { return Reflect.construct(Struct, args, new.target); }",
77+
`function test(...args) { return Reflect.construct(Struct, args, new.target); }\n`,
78+
);
79+
});
80+
81+
Deno.test("does not transform new.target in esModule", () => {
82+
testImportReplacementsEsm(
83+
"function test(...args) { return Reflect.construct(Struct, args, new.target); }",
84+
`function test(...args) { return Reflect.construct(Struct, args, new.target); }\n`,
85+
);
86+
});

lib/compiler_transforms.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ export const transformImportMeta: ts.TransformerFactory<ts.SourceFile> = (
1414
return (sourceFile) => ts.visitEachChild(sourceFile, visitNode, context);
1515

1616
function visitNode(node: ts.Node): ts.Node {
17-
// find `import.meta`
18-
if (ts.isMetaProperty(node)) {
17+
// find `import.meta` (not `new.target`, which is also a meta property)
18+
if (
19+
ts.isMetaProperty(node) &&
20+
node.keywordToken === ts.SyntaxKind.ImportKeyword
21+
) {
1922
if (isScriptModule) {
2023
return getReplacementImportMetaScript();
2124
} else {

0 commit comments

Comments
 (0)