aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser/js_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-23 21:45:15 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-23 21:45:15 -0700
commitf78f4854a4e474a08023841f4714f0cd3774126b (patch)
tree6252b32e23a9aeb3ab279f2f1061a264e755c797 /src/js_parser/js_parser.zig
parentff01dfa03da3b9cb17fe2797a7e5e096844e5ee6 (diff)
downloadbun-f78f4854a4e474a08023841f4714f0cd3774126b.tar.gz
bun-f78f4854a4e474a08023841f4714f0cd3774126b.tar.zst
bun-f78f4854a4e474a08023841f4714f0cd3774126b.zip
Handle more edgecases in our CJS2ESM conversion code
Diffstat (limited to 'src/js_parser/js_parser.zig')
-rw-r--r--src/js_parser/js_parser.zig29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index b548416cc..1de8c4656 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -12453,6 +12453,7 @@ pub fn NewParser(
switch (s2.data) {
.s_function => |func| {
var name: string = "";
+ const had_name = func.func.name != null;
if (func.func.name) |func_loc| {
name = p.loadNameFromRef(func_loc.ref.?);
} else {
@@ -12465,7 +12466,15 @@ pub fn NewParser(
if (p.options.enable_bundling) {
var export_default_args = p.allocator.alloc(Expr, 2) catch unreachable;
export_default_args[0] = p.e(E.Identifier{ .ref = p.exports_ref }, s2.loc);
- export_default_args[1] = p.e(E.Function{ .func = func.func }, s2.loc);
+
+ if (had_name) {
+ export_default_args[1] = p.e(E.Identifier{ .ref = func.func.name.?.ref.? }, s2.loc);
+ stmts.ensureUnusedCapacity(2) catch unreachable;
+
+ stmts.appendAssumeCapacity(s2);
+ } else {
+ export_default_args[1] = p.e(E.Function{ .func = func.func }, s2.loc);
+ }
stmts.append(p.s(S.SExpr{ .value = p.callRuntime(s2.loc, "__exportDefault", export_default_args) }, s2.loc)) catch unreachable;
return;
@@ -12481,10 +12490,26 @@ pub fn NewParser(
},
.s_class => |class| {
var shadow_ref = p.visitClass(s2.loc, &class.class);
+
if (p.options.enable_bundling) {
var export_default_args = p.allocator.alloc(Expr, 2) catch unreachable;
export_default_args[0] = p.e(E.Identifier{ .ref = p.exports_ref }, s2.loc);
- export_default_args[1] = p.e(class.class, s2.loc);
+
+ const class_name_ref = brk: {
+ if (class.class.class_name) |class_name_ref| {
+ if (class_name_ref.ref) |ref| {
+ break :brk ref;
+ }
+ }
+ break :brk null;
+ };
+ if (class_name_ref) |ref| {
+ stmts.ensureUnusedCapacity(2) catch unreachable;
+ stmts.appendAssumeCapacity(s2);
+ export_default_args[1] = p.e(E.Identifier{ .ref = ref }, s2.loc);
+ } else {
+ export_default_args[1] = p.e(class.class, s2.loc);
+ }
stmts.append(p.s(S.SExpr{ .value = p.callRuntime(s2.loc, "__exportDefault", export_default_args) }, s2.loc)) catch unreachable;
return;