diff options
author | 2022-01-03 22:17:34 -0800 | |
---|---|---|
committer | 2022-01-03 22:17:34 -0800 | |
commit | 0960f3d6d1b6460e1a7a4dcec4921d2cf664df72 (patch) | |
tree | 6928d162d1c2a9fac43fd7fdbc6c9cebb8cfa63c /src/main.zig | |
parent | 64b49ddd951e4e94978497302cd73e8ce8114010 (diff) | |
download | bun-0960f3d6d1b6460e1a7a4dcec4921d2cf664df72.tar.gz bun-0960f3d6d1b6460e1a7a4dcec4921d2cf664df72.tar.zst bun-0960f3d6d1b6460e1a7a4dcec4921d2cf664df72.zip |
Implement a crash reporter and improve some error handling in `bun install`
Diffstat (limited to '')
-rw-r--r-- | src/main.zig | 57 |
1 files changed, 54 insertions, 3 deletions
diff --git a/src/main.zig b/src/main.zig index 00c25c9f4..79a4755c0 100644 --- a/src/main.zig +++ b/src/main.zig @@ -24,14 +24,22 @@ const cli = @import("cli.zig"); pub const MainPanicHandler = panicky.NewPanicHandler(std.builtin.default_panic); const js = @import("javascript/jsc/bindings/bindings.zig"); const JavaScript = @import("javascript/jsc/javascript.zig"); - pub const io_mode = .blocking; - +const Report = @import("./report.zig"); pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace) noreturn { MainPanicHandler.handle_panic(msg, error_return_trace); } + +const CrashReporter = @import("crash_reporter"); + +pub fn PLCrashReportHandler() void { + Report.fatal(null, null); +} + pub var start_time: i128 = 0; pub fn main() anyerror!void { + std.debug.assert(CrashReporter.start(Global.package_json_version)); + start_time = std.time.nanoTimestamp(); // The memory allocator makes a massive difference. @@ -58,7 +66,46 @@ pub fn main() anyerror!void { Output.flush(); std.os.exit(1); }, - else => return err, + error.FileNotFound => { + Output.prettyError( + "\n<r><red>error<r><d>:<r> <b>FileNotFound<r>\nbun could not find a file, and the code that produces this error is missing a better error.\n", + .{}, + ); + Output.flush(); + + Report.printMetadata(); + + Output.flush(); + + print_stacktrace: { + var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; + var trace = @errorReturnTrace() orelse break :print_stacktrace; + Output.disableBuffering(); + std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig()) catch break :print_stacktrace; + } + + std.os.exit(1); + }, + error.MissingPackageJSON => { + Output.prettyError( + "\n<r><red>error<r><d>:<r> <b>MissingPackageJSON<r>\nbun could not find a package.json file.\n", + .{}, + ); + Output.flush(); + std.os.exit(1); + }, + else => { + Report.fatal(err, null); + + print_stacktrace: { + var debug_info = std.debug.getSelfDebugInfo() catch break :print_stacktrace; + var trace = @errorReturnTrace() orelse break :print_stacktrace; + Output.disableBuffering(); + std.debug.writeStackTrace(trace.*, Output.errorWriter(), default_allocator, debug_info, std.debug.detectTTYConfig()) catch break :print_stacktrace; + } + + std.os.exit(1); + }, } }; @@ -76,3 +123,7 @@ test "" { std.mem.doNotOptimizeAway(JavaScriptVirtualMachine.init); std.mem.doNotOptimizeAway(JavaScriptVirtualMachine.resolve); } + +test "panic" { + panic("woah", null); +} |