aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-06 23:36:26 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-06 23:36:26 -0700
commit7e58c7e89af5893250cccb1e5381101cf00d9c21 (patch)
tree73a9cfd480afd2929247178f2ce682e8e8fc0e00
parent3db549fdb5aac3d8161722f2624f1b7dedc198ec (diff)
downloadbun-7e58c7e89af5893250cccb1e5381101cf00d9c21.tar.gz
bun-7e58c7e89af5893250cccb1e5381101cf00d9c21.tar.zst
bun-7e58c7e89af5893250cccb1e5381101cf00d9c21.zip
Make `Bun.activate` run earlier so we catch errors sooner
-rw-r--r--src/js_parser/js_parser.zig58
1 files changed, 37 insertions, 21 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index 1945f9fa4..aa4219011 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -2829,7 +2829,41 @@ pub const Parser = struct {
(p.has_called_runtime or p.options.features.hot_module_reloading or has_cjs_imports))
{
const before_start = before.items.len;
- if (p.options.features.hot_module_reloading) p.resolveHMRSymbols();
+ if (p.options.features.hot_module_reloading) {
+ p.resolveHMRSymbols();
+
+ if (runtime_imports_iter.next()) |entry| {
+ std.debug.assert(entry.key == 0);
+
+ // HMRClient.activate(true)
+ var args_list: []Expr = if (Environment.isDebug) &Prefill.HotModuleReloading.DebugEnabledArgs else &Prefill.HotModuleReloading.DebugDisabled;
+
+ var hmr_module_class_ident = p.e(E.Identifier{ .ref = p.runtime_imports.__HMRClient.?.ref }, logger.Loc.Empty);
+ const imports = [_]u16{entry.key};
+ // TODO: remove these unnecessary allocations
+ p.generateImportStmt(
+ RuntimeImports.Name,
+ &imports,
+ &before,
+ p.runtime_imports,
+ p.s(
+ S.SExpr{
+ .value = p.e(E.Call{
+ .target = p.e(E.Dot{
+ .target = hmr_module_class_ident,
+ .name = "activate",
+ .name_loc = logger.Loc.Empty,
+ }, logger.Loc.Empty),
+ .args = ExprNodeList.init(args_list),
+ }, logger.Loc.Empty),
+ },
+ logger.Loc.Empty,
+ ),
+ "import_",
+ true,
+ ) catch unreachable;
+ }
+ }
while (runtime_imports_iter.next()) |entry| {
const imports = [_]u16{entry.key};
@@ -16099,7 +16133,7 @@ fn NewParser_(
// We still call exportAll just with an empty object.
const has_any_exports = named_exports_count > 0;
- const toplevel_stmts_count = 4 + (@intCast(usize, @boolToInt(has_any_exports)) * 2);
+ const toplevel_stmts_count = 3 + (@intCast(usize, @boolToInt(has_any_exports)) * 2);
var _stmts = allocator.alloc(
Stmt,
end_iife_stmts_count + toplevel_stmts_count + (named_exports_count * 2) + imports_count + exports_from_count,
@@ -16153,8 +16187,6 @@ fn NewParser_(
}
}
- var args_list: []Expr = if (Environment.isDebug) &Prefill.HotModuleReloading.DebugEnabledArgs else &Prefill.HotModuleReloading.DebugDisabled;
-
const new_call_args_count: usize = if (p.options.features.react_fast_refresh) 3 else 2;
var call_args = try allocator.alloc(Expr, new_call_args_count + 1);
var new_call_args = call_args[0..new_call_args_count];
@@ -16167,24 +16199,8 @@ fn NewParser_(
new_call_args[2] = p.e(E.Identifier{ .ref = p.jsx_refresh_runtime.ref }, logger.Loc.Empty);
}
- var hmr_module_class_ident = p.e(E.Identifier{ .ref = p.runtime_imports.__HMRClient.?.ref }, logger.Loc.Empty);
var toplevel_stmts_i: u8 = 0;
- // HMRClient.activate(true)
- toplevel_stmts[toplevel_stmts_i] = p.s(
- S.SExpr{
- .value = p.e(E.Call{
- .target = p.e(E.Dot{
- .target = hmr_module_class_ident,
- .name = "activate",
- .name_loc = logger.Loc.Empty,
- }, logger.Loc.Empty),
-
- .args = ExprNodeList.init(args_list),
- }, logger.Loc.Empty),
- },
- logger.Loc.Empty,
- );
- toplevel_stmts_i += 1;
+
var decls = try allocator.alloc(G.Decl, 2 + named_exports_count);
var first_decl = decls[0..2];
// We cannot rely on import.meta.url because if we import it within a blob: url, it will be nonsensical