SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
4e23b01 verified
Raw History Blame Contribute Delete
1.48 kB
import { onTestFailed, onTestFinished } from 'vitest';
import { recordReportEvent, setActiveReportCase } from '../harness/report.js';
export function createCaseLogger(caseName: string): (label: string, value?: unknown) => void {
setActiveReportCase(caseName);
let failed = false;
onTestFailed((error) => {
failed = true;
recordReportEvent({
kind: 'test-result',
caseName,
state: 'failed',
error: errorForLog(error),
});
});
onTestFinished(() => {
if (failed) return;
recordReportEvent({
kind: 'test-result',
caseName,
state: 'passed',
});
});
return (label, value) => {
recordReportEvent({ kind: 'log', caseName, label, value });
const prefix = `[server-e2e] ${caseName} :: ${label}`;
if (value === undefined) {
writeLogLine(prefix);
return;
}
writeLogLine(`${prefix}\n${stringifyForLog(value)}`);
};
}
export function errorForLog(error: unknown): unknown {
if (error instanceof Error) {
return {
name: error.name,
message: error.message,
...objectFields(error),
};
}
return error;
}
function objectFields(value: object): Record<string, unknown> {
return Object.fromEntries(
Object.entries(value).filter(([, field]) => field !== undefined),
);
}
function stringifyForLog(value: unknown): string {
return JSON.stringify(value, null, 2);
}
function writeLogLine(line: string): void {
process.stdout.write(`${line}\n`);
}