aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-01-03 22:17:34 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-01-03 22:17:34 -0800
commit0960f3d6d1b6460e1a7a4dcec4921d2cf664df72 (patch)
tree6928d162d1c2a9fac43fd7fdbc6c9cebb8cfa63c /src/main.zig
parent64b49ddd951e4e94978497302cd73e8ce8114010 (diff)
downloadbun-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.zig57
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);
+}