Files
bunext/dist/functions/write-error-file.js
T
2026-10-02 07:04:22 +01:00

43 lines
1.6 KiB
JavaScript

import path from "path";
import { existsSync, mkdirSync, writeFileSync } from "fs";
import grabDirNames from "../utils/grab-dir-names";
const { BUNX_BUNDLER_ERROR_EXIT_FILE } = grabDirNames();
/**
* 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: ${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 { }
}