diff options
author | 2022-02-08 01:00:46 -0800 | |
---|---|---|
committer | 2022-02-08 01:00:46 -0800 | |
commit | d4afa5477ddb3546fb9f6e88821cf1bc57316294 (patch) | |
tree | a41f62b9190410545ddae18f8ac1fdeced8f6d87 /src/js_parser/js_parser.zig | |
parent | 7792ef1bde9f753ea0285d2afa408eaa26f11959 (diff) | |
download | bun-d4afa5477ddb3546fb9f6e88821cf1bc57316294.tar.gz bun-d4afa5477ddb3546fb9f6e88821cf1bc57316294.tar.zst bun-d4afa5477ddb3546fb9f6e88821cf1bc57316294.zip |
Move __exportDefault transform to parser
Diffstat (limited to 'src/js_parser/js_parser.zig')
-rw-r--r-- | src/js_parser/js_parser.zig | 38 |
1 files changed, 34 insertions, 4 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; |