aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dylan Conway <35280289+dylan-conway@users.noreply.github.com> 2023-09-27 23:37:53 -0700
committerGravatar GitHub <noreply@github.com> 2023-09-27 23:37:53 -0700
commit31d96a1b7f8a72a1976bee92e6c3f08faade8c31 (patch)
tree7d90077409aa380e3debe8afc6bba8d3bc064d4f
parent3ee09bfe798b91a6de6076b572d0dc606246c2a9 (diff)
downloadbun-31d96a1b7f8a72a1976bee92e6c3f08faade8c31.tar.gz
bun-31d96a1b7f8a72a1976bee92e6c3f08faade8c31.tar.zst
bun-31d96a1b7f8a72a1976bee92e6c3f08faade8c31.zip
fix typescript metadata for import identifiers (#6130)
* handle import identifiers * a test * handle dot case
-rw-r--r--src/js_parser.zig30
-rw-r--r--test/bundler/bundler_decorator_metadata.test.ts34
2 files changed, 58 insertions, 6 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index 13e264251..449d1cbab 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -19556,6 +19556,15 @@ fn NewParser_(
.m_identifier => |ref| {
p.recordUsage(ref);
+ if (p.is_import_item.contains(ref)) {
+ return p.maybeDefinedHelper(p.newExpr(
+ E.ImportIdentifier{
+ .ref = ref,
+ },
+ logger.Loc.Empty,
+ ));
+ }
+
return p.maybeDefinedHelper(p.newExpr(
E.Identifier{ .ref = ref },
logger.Loc.Empty,
@@ -19588,12 +19597,21 @@ fn NewParser_(
i -= 1;
}
- current_expr.* = p.newExpr(
- E.Identifier{
- .ref = refs.items[0],
- },
- logger.Loc.Empty,
- );
+ if (p.is_import_item.contains(refs.items[0])) {
+ current_expr.* = p.newExpr(
+ E.ImportIdentifier{
+ .ref = refs.items[0],
+ },
+ logger.Loc.Empty,
+ );
+ } else {
+ current_expr.* = p.newExpr(
+ E.Identifier{
+ .ref = refs.items[0],
+ },
+ logger.Loc.Empty,
+ );
+ }
const dot_identifier = current_expr.*;
var current_dot = dots;
diff --git a/test/bundler/bundler_decorator_metadata.test.ts b/test/bundler/bundler_decorator_metadata.test.ts
index 54bbdd6a5..10fee3c68 100644
--- a/test/bundler/bundler_decorator_metadata.test.ts
+++ b/test/bundler/bundler_decorator_metadata.test.ts
@@ -503,3 +503,37 @@ itBundled("decorator_metadata/TypeSerialization", {
stdout: "true\n".repeat(212),
},
});
+
+itBundled("decorator_metadata/ImportIdentifiers", {
+ files: {
+ "/entry.ts": /* ts */ `
+ import "reflect-metadata";
+ import { Foo } from "./foo.js";
+
+ function d1() {}
+
+ @d1
+ class Bar {
+ constructor(foo: Foo) {}
+ }
+
+ console.log(Reflect.getMetadata("design:paramtypes", Bar)[0] === Foo);
+ `,
+ "/foo.js": /* js */ `
+ const f = () => "Foo";
+ module.exports[f()] = class Foo {};
+ `,
+ "/tsconfig.json": /* json */ `
+ {
+ "compilerOptions": {
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
+ }
+ }
+ `,
+ },
+ install: ["reflect-metadata"],
+ run: {
+ stdout: "true\n",
+ },
+});