Error handling bugfix: pass #1
This commit is contained in:
Vendored
+35
-14
@@ -1,21 +1,42 @@
|
||||
import path from "path";
|
||||
import { mkdirSync, writeFileSync } from "fs";
|
||||
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
||||
import grabDirNames from "../utils/grab-dir-names";
|
||||
const { BUNX_BUNDLER_ERROR_EXIT_FILE } = grabDirNames();
|
||||
export default function writeErrorFile({ exitCode, error, }) {
|
||||
/**
|
||||
* Writes the `BUNDLER_EXIT.txt` flag that the bundler pipeline watches to
|
||||
* detect that the dev/prod child process previously crashed.
|
||||
*
|
||||
* Guardrails:
|
||||
* - Never writes for clean exits (exitCode === 0) or signal deaths where no
|
||||
* error is available (Ctrl+C must not leave a stale error file behind).
|
||||
* - The supervisor writes only when the file does not already exist, so the
|
||||
* crash handler's richer error/stack payload is not clobbered.
|
||||
*/
|
||||
export default function writeErrorFile({ force, error, exitCode, }) {
|
||||
const has_error = error != null;
|
||||
const abnormal_exit = exitCode != null && exitCode !== 0;
|
||||
if (!has_error && !abnormal_exit)
|
||||
return;
|
||||
if (!force && existsSync(BUNX_BUNDLER_ERROR_EXIT_FILE))
|
||||
return;
|
||||
const err = error instanceof Error
|
||||
? error
|
||||
: typeof error === "string"
|
||||
? new Error(error)
|
||||
: undefined;
|
||||
const message = err?.message || "Unknown error";
|
||||
const stack = err?.stack || "N/A";
|
||||
let txt = ``;
|
||||
txt += `Bunext Error\n`;
|
||||
txt += `============================================\n`;
|
||||
txt += `ERROR: ${error?.message}\n`;
|
||||
txt += `EXIT_CODE: ${exitCode || 0}\n`;
|
||||
txt += `CALL_STACK: ${error?.stack}\n`;
|
||||
mkdirSync(path.dirname(BUNX_BUNDLER_ERROR_EXIT_FILE), { recursive: true });
|
||||
writeFileSync(BUNX_BUNDLER_ERROR_EXIT_FILE, txt);
|
||||
txt += `ERROR: ${message}\n`;
|
||||
txt += `EXIT_CODE: ${exitCode ?? "N/A"}\n`;
|
||||
txt += `CALL_STACK:\n${stack}\n`;
|
||||
try {
|
||||
mkdirSync(path.dirname(BUNX_BUNDLER_ERROR_EXIT_FILE), {
|
||||
recursive: true,
|
||||
});
|
||||
writeFileSync(BUNX_BUNDLER_ERROR_EXIT_FILE, txt);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
// log.info("Running development server ...");
|
||||
// try {
|
||||
// rmSync(HYDRATION_DST_DIR, { recursive: true });
|
||||
// rmSync(BUNX_CWD_PAGES_REWRITE_DIR, { recursive: true });
|
||||
// } catch (error) {}
|
||||
// await bunextInit();
|
||||
// await startServer();
|
||||
|
||||
Reference in New Issue
Block a user