fix(cli): bound diagnostics and add swap management
This commit is contained in:
+15
-4
@@ -5,6 +5,20 @@ export interface JsonEnvelope<T> {
|
||||
error?: unknown;
|
||||
}
|
||||
|
||||
function isEpipe(error: unknown): boolean {
|
||||
return typeof error === "object" && error !== null && "code" in error && (error as { code?: unknown }).code === "EPIPE";
|
||||
}
|
||||
|
||||
process.stdout.on("error", (error) => {
|
||||
if (isEpipe(error)) process.exit(0);
|
||||
throw error;
|
||||
});
|
||||
|
||||
process.stderr.on("error", (error) => {
|
||||
if (isEpipe(error)) process.exit(0);
|
||||
throw error;
|
||||
});
|
||||
|
||||
export function emitJson<T>(command: string, data: T, ok = true): void {
|
||||
const envelope: JsonEnvelope<T> = { ok, command, data };
|
||||
safeStdoutWrite(`${JSON.stringify(envelope, null, 2)}\n`);
|
||||
@@ -22,10 +36,7 @@ function safeStdoutWrite(text: string): void {
|
||||
try {
|
||||
process.stdout.write(text);
|
||||
} catch (error) {
|
||||
if (typeof error === "object" && error !== null && "code" in error && (error as { code?: unknown }).code === "EPIPE") {
|
||||
process.exitCode = 0;
|
||||
return;
|
||||
}
|
||||
if (isEpipe(error)) process.exit(0);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user