diff options
-rw-r--r-- | src/cli.zig | 42 | ||||
-rw-r--r-- | src/cli/init_command.zig | 4 | ||||
-rw-r--r-- | src/cli/run_command.zig | 4 | ||||
-rw-r--r-- | src/feature_flags.zig | 2 | ||||
-rw-r--r-- | src/global.zig | 4 | ||||
-rw-r--r-- | src/http.zig | 16 | ||||
-rw-r--r-- | src/javascript/jsc/bindings/exports.zig | 15 | ||||
-rw-r--r-- | src/javascript/jsc/webcore/response.zig | 3 | ||||
-rw-r--r-- | src/router.zig | 6 |
9 files changed, 81 insertions, 15 deletions
diff --git a/src/cli.zig b/src/cli.zig index b7cbc97ba..f6b444087 100644 --- a/src/cli.zig +++ b/src/cli.zig @@ -41,12 +41,12 @@ pub const Cli = struct { pub fn startTransform(allocator: *std.mem.Allocator, args: Api.TransformOptions, log: *logger.Log) anyerror!void {} pub fn start(allocator: *std.mem.Allocator, stdout: anytype, stderr: anytype, comptime MainPanicHandler: type) anyerror!void { start_time = std.time.nanoTimestamp(); - var log = logger.Log.init(allocator); - var panicker = MainPanicHandler.init(&log); + var log = try allocator.create(logger.Log); + log.* = logger.Log.init(allocator); + var panicker = MainPanicHandler.init(log); MainPanicHandler.Singleton = &panicker; - try Command.start(allocator, &log); - std.mem.doNotOptimizeAway(&log); + try Command.start(allocator, log); } }; @@ -137,7 +137,7 @@ pub const Arguments = struct { } } - const ParamType = clap.Param(clap.Help); + pub const ParamType = clap.Param(clap.Help); const params: [25]ParamType = brk: { @setEvalBranchQuota(9999); @@ -448,6 +448,31 @@ const HelpCommand = struct { } }; +pub const PrintBundleCommand = struct { + pub fn exec(ctx: Command.Context) !void { + const entry_point = ctx.args.entry_points[0]; + var out_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; + var stdout = std.io.getStdOut(); + + var input = try std.fs.openFileAbsolute(try std.os.realpath(ctx.args.entry_points[0], &out_buffer), .{ .read = true }); + const params = comptime [_]Arguments.ParamType{ + clap.parseParam("--summary Peek inside the .bun") catch unreachable, + }; + + var jsBundleArgs = clap.parse(clap.Help, ¶ms, .{ .allocator = ctx.allocator }) catch |err| { + try NodeModuleBundle.printBundle(std.fs.File, input, @TypeOf(stdout), stdout); + return; + }; + + if (jsBundleArgs.flag("--summary")) { + NodeModuleBundle.printSummaryFromDisk(std.fs.File, input, @TypeOf(stdout), stdout, ctx.allocator) catch {}; + return; + } + + try NodeModuleBundle.printBundle(std.fs.File, input, @TypeOf(stdout), stdout); + } +}; + pub const Command = struct { pub const Context = struct { start_time: i128, @@ -536,6 +561,13 @@ pub const Command = struct { } }; + if (ctx.args.entry_points.len == 1 and + std.mem.endsWith(u8, ctx.args.entry_points[0], ".bun")) + { + try PrintBundleCommand.exec(ctx); + return; + } + try BuildCommand.exec(ctx); }, else => unreachable, diff --git a/src/cli/init_command.zig b/src/cli/init_command.zig index a0cadc3a6..100da7a63 100644 --- a/src/cli/init_command.zig +++ b/src/cli/init_command.zig @@ -20,5 +20,7 @@ const bundler = @import("../bundler.zig"); const NodeModuleBundle = @import("../node_module_bundle.zig").NodeModuleBundle; pub const InitCommand = struct { - pub fn exec(ctx: Command.Context) !void {} + pub fn exec(ctx: Command.Context) !void { + Output.prettyErrorln("<r><red>nOt<r> <magenta>iMpLeMeNtEd<r> <yellow>yEt<r>", .{}); + } }; diff --git a/src/cli/run_command.zig b/src/cli/run_command.zig index b5131ece1..2142d15b2 100644 --- a/src/cli/run_command.zig +++ b/src/cli/run_command.zig @@ -22,5 +22,7 @@ const bundler = @import("../bundler.zig"); const NodeModuleBundle = @import("../node_module_bundle.zig").NodeModuleBundle; pub const RunCommand = struct { - pub fn exec(ctx: Command.Context) !void {} + pub fn exec(ctx: Command.Context) !void { + Output.prettyErrorln("<r><red>nOt<r> <magenta>iMpLeMeNtEd<r> <yellow>yEt<r>", .{}); + } }; diff --git a/src/feature_flags.zig b/src/feature_flags.zig index 52d2b2fcd..5918f0f80 100644 --- a/src/feature_flags.zig +++ b/src/feature_flags.zig @@ -45,7 +45,7 @@ pub const react_specific_warnings = true; // command ../../build/debug/macos-x86_64/bun --use=./nexty2 --new-jsb > /dev/null // end // It only happens 1 out of every N times, probably like 50. -pub const parallel_jsb = false; +pub const parallel_bun = false; pub const CSSModulePolyfill = enum { // When you import a .css file and you reference the import in JavaScript diff --git a/src/global.zig b/src/global.zig index c2ef71ecb..7e51ef6ee 100644 --- a/src/global.zig +++ b/src/global.zig @@ -57,6 +57,10 @@ pub const Output = struct { pub var is_stdout_piped = false; pub var is_stderr_piped = false; + pub inline fn isEmojiEnabled() bool { + return enable_ansi_colors and !isWindows; + } + pub fn enableBuffering() void { enable_buffering = true; } diff --git a/src/http.zig b/src/http.zig index 9cd1fee4b..2848d78d4 100644 --- a/src/http.zig +++ b/src/http.zig @@ -1036,12 +1036,19 @@ pub const RequestContext = struct { defer handler.tombstone = true; defer removeWebsocket(handler); defer ctx.arena.deinit(); - defer ctx.conn.deinit(); + var is_socket_closed = false; + defer { + if (!is_socket_closed) { + ctx.conn.deinit(); + } + } defer Output.flush(); handler.checkUpgradeHeaders() catch |err| { switch (err) { error.BadRequest => { + defer is_socket_closed = true; + try ctx.sendBadRequest(); }, else => { @@ -1059,6 +1066,7 @@ pub const RequestContext = struct { try ctx.writeStatus(426); try ctx.flushHeaders(); ctx.done(); + is_socket_closed = true; return; }, } @@ -1103,6 +1111,7 @@ pub const RequestContext = struct { try welcome_message.encode(&writer); if ((try handler.websocket.writeBinary(fbs.getWritten())) == 0) { handler.tombstone = true; + is_socket_closed = true; Output.prettyErrorln("<r><red>ERR:<r> <b>Websocket failed to write.<r>", .{}); } @@ -1111,6 +1120,7 @@ pub const RequestContext = struct { handler.conn.client.getError() catch |err| { Output.prettyErrorln("<r><red>ERR:<r> <b>{s}<r>", .{err}); handler.tombstone = true; + is_socket_closed = true; }; var frame = handler.websocket.read() catch |err| { @@ -1118,6 +1128,7 @@ pub const RequestContext = struct { error.ConnectionClosed => { Output.prettyln("Websocket closed.", .{}); handler.tombstone = true; + is_socket_closed = true; continue; }, else => { @@ -1129,6 +1140,7 @@ pub const RequestContext = struct { switch (frame.header.opcode) { .Close => { Output.prettyln("Websocket closed.", .{}); + is_socket_closed = true; return; }, .Text => { @@ -1204,7 +1216,7 @@ pub const RequestContext = struct { } }, else => { - Output.prettyErrorln("<r>[Websocket]: Unknown cmd: <b>{d}<r>. This might be a version mismatch. Try updating your node_modules.bun", .{@enumToInt(cmd.kind)}); + Output.prettyErrorln("<r>[Websocket]: Unknown cmd: <b>{d}<r>. This might be a version mismatch. Try updating your node_modules.jsb", .{@enumToInt(cmd.kind)}); }, } }, diff --git a/src/javascript/jsc/bindings/exports.zig b/src/javascript/jsc/bindings/exports.zig index f1996ae0f..d58435785 100644 --- a/src/javascript/jsc/bindings/exports.zig +++ b/src/javascript/jsc/bindings/exports.zig @@ -6,7 +6,20 @@ const JS = @import("../javascript.zig"); const JSBase = @import("../base.zig"); const Handler = struct { pub export fn global_signal_handler_fn(sig: i32, info: *const std.os.siginfo_t, ctx_ptr: ?*const c_void) callconv(.C) void { - Global.panic("C++ Crash!!", .{}); + var stdout = std.io.getStdOut(); + var stderr = std.io.getStdErr(); + var source = Output.Source.init(stdout, stderr); + Output.Source.set(&source); + + if (Output.isEmojiEnabled()) { + Output.prettyErrorln("<r><red>Bun will crash now<r> ðŸ˜ðŸ˜ðŸ˜\n", .{}); + Output.flush(); + } else { + stderr.writeAll("Bun has crashed :'(\n") catch {}; + } + std.mem.doNotOptimizeAway(source); + + std.os.exit(6); } }; diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig index 0ae53a120..09014c17f 100644 --- a/src/javascript/jsc/webcore/response.zig +++ b/src/javascript/jsc/webcore/response.zig @@ -1101,7 +1101,8 @@ pub const FetchEvent = struct { switch (status) { .Fulfilled => {}, else => { - this.request_context.sendInternalError(error.rejectedPromise) catch {}; + VirtualMachine.vm.defaultErrorHandler(resolved.result(VirtualMachine.vm.global.vm())); + this.request_context.sendInternalError(error.rejectedPromiseSeeConsole) catch {}; return js.JSValueMakeUndefined(ctx); }, } diff --git a/src/router.zig b/src/router.zig index 7e6867848..ca2ac462e 100644 --- a/src/router.zig +++ b/src/router.zig @@ -195,13 +195,13 @@ pub fn loadRoutes( if (comptime isDebug) { if (comptime is_root) { var i: usize = 0; - Output.prettyln("Routes:", .{}); + Output.prettyErrorln("Routes (last segment only):", .{}); while (i < this.routes.routes.len) : (i += 1) { const route = this.routes.routes.get(i); - Output.prettyln(" {s}: {s}", .{ route.name, route.path }); + Output.prettyErrorln(" {s}: {s}", .{ route.name, route.path }); } - Output.prettyln(" {d} routes", .{this.routes.routes.len}); + Output.prettyErrorln(" {d} routes\n", .{this.routes.routes.len}); Output.flush(); } } |