Files
turso/simulator-docker-runner/logParse.ts

58 lines
1.5 KiB
TypeScript

// Helper functions
export type StackTraceInfo = {
type: "panic";
trace: string;
mainError: string;
}
export type AssertionFailureInfo = {
type: "assertion";
output: string;
}
/**
* Extract failure information from log output
*/
export function extractFailureInfo(output: string): StackTraceInfo | AssertionFailureInfo {
const lines = output.split('\n');
const panicLineIndex = lines.findIndex(line => line.includes("panic occurred"));
const info = getTraceFromOutput(lines) ?? getAssertionFailureInfo(lines);
if (!info) {
throw new Error("No failure information found");
}
return info;
}
function getTraceFromOutput(lines: string[]): StackTraceInfo | null {
const panicLineIndex = lines.findIndex(line => line.includes("panic occurred"));
if (panicLineIndex === -1) {
return null;
}
const startIndex = panicLineIndex + 1;
const endIndex = Math.min(lines.length, startIndex + 50);
const trace = lines.slice(startIndex, endIndex).join('\n');
const mainError = lines[startIndex] ?? "???";
return { type: "panic", trace, mainError };
}
function getAssertionFailureInfo(lines: string[]): AssertionFailureInfo | null {
const simulationFailedLineIndex = lines.findIndex(line => line.includes("simulation failed:"));
if (simulationFailedLineIndex === -1) {
return null;
}
const startIndex = simulationFailedLineIndex;
const endIndex = Math.min(lines.length, startIndex + 1);
const output = lines.slice(startIndex, endIndex).join('\n');
return { type: "assertion", output };
}