import { MARKER_PREFIX } from "./script"; type Marker = | { type: "step-start"; index: number } | { type: "step-end"; index: number; code: number } | { type: "step-skip"; index: number } | { type: "artifact"; name: string; path: string } | { type: "job-end"; failed: boolean } | { type: "setup-start" } | { type: "setup-end"; code: number }; export function parseMarker(line: string): Marker | null { if (!line.startsWith(MARKER_PREFIX)) return null; const [type, ...args] = line.slice(MARKER_PREFIX.length).trim().split(" "); const number = (value: string | undefined) => Number(value ?? "0"); switch (type) { case "step-start": return { type, index: number(args[0]) }; case "step-end": return { type, index: number(args[0]), code: number(args[1]) }; case "step-skip": return { type, index: number(args[0]) }; case "artifact": return { type, name: args[0] ?? "artifact", path: args.slice(1).join(" ").replace(/^"|"$/g, "") }; case "job-end": return { type, failed: args[0] !== "0" }; case "setup-start": return { type }; case "setup-end": return { type, code: number(args[0]) }; default: return null; } }