aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/js_parser/js_parser.zig47
-rw-r--r--src/js_printer.zig8
2 files changed, 52 insertions, 3 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index 74d670d00..b548416cc 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -682,6 +682,8 @@ const StaticSymbolName = struct {
pub const @"$$m" = NewStaticSymbol("$$m");
+ pub const __exportValue = NewStaticSymbol("__exportValue");
+ pub const __exportDefault = NewStaticSymbol("__exportDefault");
pub const hmr = NewStaticSymbol("hmr");
};
};
@@ -3555,7 +3557,9 @@ pub fn NewParser(
p.runtime_imports.@"$$lzy" = try p.declareGeneratedSymbol(.other, "$$lzy");
- p.runtime_imports.__export = GeneratedSymbol{ .ref = p.exports_ref, .primary = Ref.None, .backup = Ref.None };
+ p.runtime_imports.__export = try p.declareGeneratedSymbol(.other, "__export");
+ p.runtime_imports.__exportValue = try p.declareGeneratedSymbol(.other, "__exportValue");
+ p.runtime_imports.__exportDefault = try p.declareGeneratedSymbol(.other, "__exportDefault");
}
if (p.options.features.hot_module_reloading) {
@@ -3625,6 +3629,9 @@ pub fn NewParser(
p.resolveGeneratedSymbol(&p.runtime_imports.__reExport.?);
p.resolveGeneratedSymbol(&p.runtime_imports.@"$$m".?);
p.resolveGeneratedSymbol(&p.runtime_imports.@"$$lzy".?);
+ p.resolveGeneratedSymbol(&p.runtime_imports.__export.?);
+ p.resolveGeneratedSymbol(&p.runtime_imports.__exportValue.?);
+ p.resolveGeneratedSymbol(&p.runtime_imports.__exportDefault.?);
}
pub fn resolveHMRSymbols(p: *P) void {
@@ -12431,6 +12438,15 @@ pub fn NewParser(
else => {},
}
}
+
+ // When bundling, replace ExportDefault with __exportDefault(exportsRef, expr);
+ 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 }, expr.loc);
+ export_default_args[1] = expr;
+ stmts.append(p.s(S.SExpr{ .value = p.callRuntime(expr.loc, "__exportDefault", export_default_args) }, expr.loc)) catch unreachable;
+ return;
+ }
},
.stmt => |s2| {
@@ -12445,6 +12461,16 @@ pub fn NewParser(
}
func.func = p.visitFunc(func.func, func.func.open_parens_loc);
+
+ 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);
+
+ stmts.append(p.s(S.SExpr{ .value = p.callRuntime(s2.loc, "__exportDefault", export_default_args) }, s2.loc)) catch unreachable;
+ return;
+ }
+
stmts.append(stmt.*) catch unreachable;
// if (func.func.name != null and func.func.name.?.ref != null) {
@@ -12455,7 +12481,16 @@ pub fn NewParser(
},
.s_class => |class| {
var shadow_ref = p.visitClass(s2.loc, &class.class);
- stmts.appendSlice(p.lowerClass(js_ast.StmtOrExpr{ .stmt = stmt.* }, shadow_ref)) catch unreachable;
+ 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);
+
+ stmts.append(p.s(S.SExpr{ .value = p.callRuntime(s2.loc, "__exportDefault", export_default_args) }, s2.loc)) catch unreachable;
+ return;
+ }
+
+ stmts.append(stmt.*) catch unreachable;
return;
},
else => {},
@@ -12464,6 +12499,14 @@ pub fn NewParser(
}
},
.s_export_equals => |data| {
+ 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 }, stmt.loc);
+ export_default_args[1] = data.value;
+
+ stmts.append(p.s(S.SExpr{ .value = p.callRuntime(stmt.loc, "__exportDefault", export_default_args) }, stmt.loc)) catch unreachable;
+ return;
+ }
// "module.exports = value"
stmts.append(
diff --git a/src/js_printer.zig b/src/js_printer.zig
index fc9ee97d7..c73e03464 100644
--- a/src/js_printer.zig
+++ b/src/js_printer.zig
@@ -2313,6 +2313,7 @@ pub fn NewPrinter(
switch (s.value) {
.expr => |expr| {
+ // this is still necessary for JSON
if (is_inside_bundle) {
p.printModuleExportSymbol();
p.print(".default = ");
@@ -2483,7 +2484,12 @@ pub fn NewPrinter(
// Object.assign(__export, {prop1, prop2, prop3});
else => {
- p.print("Object.assign");
+ if (comptime is_inside_bundle) {
+ p.printSymbol(p.options.runtime_imports.__exportValue.?.ref);
+ } else {
+ p.print("Object.assign");
+ }
+
p.print("(");
p.printModuleExportSymbol();
p.print(", {");