diff options
author | 2022-02-08 01:00:46 -0800 | |
---|---|---|
committer | 2022-02-08 01:00:46 -0800 | |
commit | d4afa5477ddb3546fb9f6e88821cf1bc57316294 (patch) | |
tree | a41f62b9190410545ddae18f8ac1fdeced8f6d87 | |
parent | 7792ef1bde9f753ea0285d2afa408eaa26f11959 (diff) | |
download | bun-d4afa5477ddb3546fb9f6e88821cf1bc57316294.tar.gz bun-d4afa5477ddb3546fb9f6e88821cf1bc57316294.tar.zst bun-d4afa5477ddb3546fb9f6e88821cf1bc57316294.zip |
Move __exportDefault transform to parser
-rw-r--r-- | src/js_parser/js_parser.zig | 38 | ||||
-rw-r--r-- | src/js_printer.zig | 16 |
2 files changed, 42 insertions, 12 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index 745688e61..0f2f66842 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -313,7 +313,7 @@ pub const ImportScanner = struct { kept_import_equals: bool = false, removed_import_equals: bool = false, - pub fn scan(comptime P: type, p: P, stmts: []Stmt) !ImportScanner { + pub fn scan(comptime P: type, p: P, stmts: []Stmt, will_transform_to_common_js: bool) !ImportScanner { var scanner = ImportScanner{}; var stmts_end: usize = 0; const allocator = p.allocator; @@ -746,6 +746,25 @@ pub const ImportScanner = struct { }, } } + } else if (will_transform_to_common_js) { + const expr: js_ast.Expr = switch (st.value) { + .expr => |exp| exp, + .stmt => |s2| brk2: { + switch (s2.data) { + .s_function => |func| { + break :brk2 p.e(E.Function{ .func = func.func }, s2.loc); + }, + .s_class => |class| { + break :brk2 p.e(class.class, s2.loc); + }, + else => unreachable, + } + }, + }; + var export_default_args = p.allocator.alloc(Expr, 2) catch unreachable; + export_default_args[0] = p.@"module.exports"(expr.loc); + export_default_args[1] = expr; + stmt = p.s(S.SExpr{ .value = p.callRuntime(expr.loc, "__exportDefault", export_default_args) }, expr.loc); } }, .s_export_clause => |st| { @@ -2159,6 +2178,12 @@ pub const Parser = struct { exports_kind = .cjs; if (p.options.transform_require_to_import) { var args = p.allocator.alloc(Expr, 2) catch unreachable; + + if (p.runtime_imports.__exportDefault == null and p.has_export_default) { + p.runtime_imports.__exportDefault = try p.declareGeneratedSymbol(.other, "__exportDefault"); + p.resolveGeneratedSymbol(&p.runtime_imports.__exportDefault.?); + } + wrapper_expr = p.callRuntime(logger.Loc.Empty, "__cJS2eSM", args); p.resolveGeneratedSymbol(&p.runtime_imports.__cJS2eSM.?); @@ -2945,6 +2970,9 @@ pub fn NewParser( scopes_in_order_visitor_index: usize = 0, has_classic_runtime_warned: bool = false, + /// Used for transforming export default -> module.exports + has_export_default: bool = false, + hmr_module: GeneratedSymbol = GeneratedSymbol{ .primary = Ref.None, .backup = Ref.None, .ref = Ref.None }, has_called_runtime: bool = false, @@ -5344,6 +5372,7 @@ pub fn NewParser( var expr = try p.parseSuffix(prefix_expr, Level.comma, null, Expr.EFlags.none); try p.lexer.expectOrInsertSemicolon(); var value = js_ast.StmtOrExpr{ .expr = expr }; + p.has_export_default = true; return p.s(S.ExportDefault{ .default_name = defaultName, .value = value }, loc); } @@ -5377,7 +5406,7 @@ pub fn NewParser( break :default_name_getter createDefaultName(p, defaultLoc) catch unreachable; }; - + p.has_export_default = true; return p.s( S.ExportDefault{ .default_name = default_name, .value = js_ast.StmtOrExpr{ .stmt = stmt } }, loc, @@ -5421,7 +5450,7 @@ pub fn NewParser( break :default_name_getter createDefaultName(p, defaultLoc) catch unreachable; }; - + p.has_export_default = true; return p.s(S.ExportDefault{ .default_name = default_name, .value = js_ast.StmtOrExpr{ .stmt = stmt } }, loc); }, else => { @@ -5461,6 +5490,7 @@ pub fn NewParser( break :default_name_getter createDefaultName(p, defaultLoc) catch unreachable; }; + p.has_export_default = true; return p.s( S.ExportDefault{ .default_name = default_name, @@ -14697,7 +14727,7 @@ pub fn NewParser( p.import_records_for_current_part.shrinkRetainingCapacity(0); p.declared_symbols.shrinkRetainingCapacity(0); - var result = try ImportScanner.scan(*P, p, part.stmts); + var result = try ImportScanner.scan(*P, p, part.stmts, commonjs_wrapper_expr != null); kept_import_equals = kept_import_equals or result.kept_import_equals; removed_import_equals = removed_import_equals or result.removed_import_equals; part.import_record_indices = part.import_record_indices; diff --git a/src/js_printer.zig b/src/js_printer.zig index e48af9caa..f8f56d91a 100644 --- a/src/js_printer.zig +++ b/src/js_printer.zig @@ -2551,7 +2551,7 @@ pub fn NewPrinter( p.printIndent(); p.printSpaceBeforeIdentifier(); - if (!is_inside_bundle and !rewrite_esm_to_cjs) { + if (!is_inside_bundle) { p.print("export default"); } @@ -2560,7 +2560,7 @@ pub fn NewPrinter( switch (s.value) { .expr => |expr| { // this is still necessary for JSON - if (is_inside_bundle or rewrite_esm_to_cjs) { + if (is_inside_bundle) { p.printModuleExportSymbol(); p.print(" = "); } @@ -2576,7 +2576,7 @@ pub fn NewPrinter( switch (s2.data) { .s_function => |func| { p.printSpaceBeforeIdentifier(); - if (is_inside_bundle or rewrite_esm_to_cjs) { + if (is_inside_bundle) { if (func.func.name == null) { p.printModuleExportSymbol(); p.print(" = "); @@ -2601,7 +2601,7 @@ pub fn NewPrinter( p.printFunc(func.func); - if (is_inside_bundle or rewrite_esm_to_cjs) { + if (is_inside_bundle) { p.printSemicolonAfterStatement(); } @@ -2611,14 +2611,14 @@ pub fn NewPrinter( p.printBundledExport("default", p.renamer.nameForSymbol(name.ref.?)); p.printSemicolonAfterStatement(); } - } else if (!rewrite_esm_to_cjs) { + } else { p.printNewline(); } }, .s_class => |class| { p.printSpaceBeforeIdentifier(); - if (is_inside_bundle or rewrite_esm_to_cjs) { + if (is_inside_bundle) { if (class.class.class_name == null) { p.printModuleExportSymbol(); p.print(" = "); @@ -2634,7 +2634,7 @@ pub fn NewPrinter( p.printClass(class.class); - if (is_inside_bundle or rewrite_esm_to_cjs) { + if (is_inside_bundle) { p.printSemicolonAfterStatement(); } @@ -2644,7 +2644,7 @@ pub fn NewPrinter( p.printBundledExport("default", p.renamer.nameForSymbol(name.ref.?)); p.printSemicolonAfterStatement(); } - } else if (!rewrite_esm_to_cjs) { + } else { p.printNewline(); } }, |