diff options
-rw-r--r-- | src/js_parser.zig | 13 | ||||
-rw-r--r-- | test/transpiler/decorator-export-default-class-fixture.ts | 10 | ||||
-rw-r--r-- | test/transpiler/decorators.test.ts | 5 |
3 files changed, 27 insertions, 1 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig index 230a09fd0..df5c84294 100644 --- a/src/js_parser.zig +++ b/src/js_parser.zig @@ -18146,7 +18146,18 @@ fn NewParser_( data.default_name = createDefaultName(p, stmt.loc) catch unreachable; } - stmts.append(stmt.*) catch unreachable; + var class_stmts = p.lowerClass(.{ .stmt = s2 }); + + if (class_stmts.len > 1) { + std.debug.assert(class_stmts[0].data == .s_class); + data.value.stmt = class_stmts[0]; + stmts.append(stmt.*) catch {}; + stmts.appendSlice(class_stmts[1..]) catch {}; + } else { + data.value.stmt = class_stmts[0]; + stmts.append(stmt.*) catch {}; + } + return; }, else => {}, diff --git a/test/transpiler/decorator-export-default-class-fixture.ts b/test/transpiler/decorator-export-default-class-fixture.ts new file mode 100644 index 000000000..901c17718 --- /dev/null +++ b/test/transpiler/decorator-export-default-class-fixture.ts @@ -0,0 +1,10 @@ +function decorator(target: any, propertyKey: any) { + target[propertyKey + "decorated"] = true; +} + +export default class DecoratedClass { + @decorator + method() { + return 42; + } +} diff --git a/test/transpiler/decorators.test.ts b/test/transpiler/decorators.test.ts index 8769ea2bc..ad0980930 100644 --- a/test/transpiler/decorators.test.ts +++ b/test/transpiler/decorators.test.ts @@ -1,5 +1,6 @@ // @ts-nocheck import { test, expect, describe } from "bun:test"; +import DecoratedClass from "./decorator-export-default-class-fixture"; test("decorator order of evaluation", () => { let counter = 0; @@ -988,3 +989,7 @@ describe("constructor statements", () => { expect(a.v2).toBe(0); }); }); + +test("export default class works", () => { + expect(new DecoratedClass()["methoddecorated"]).toBe(true); +}); |