import { defineDebug } from "./pi-ext-debug.ts"; const schema = { events: [ "session.start", "session.shutdown", "browser.launch.start", "browser.launch.finish", "browser.launch.error", "browser.close.start", "browser.close.finish", "cdp.events", "cdp.event", ], spans: ["browser.close", "tool.execute", "cdp.request", "operation"], fields: { count: "number", index: "number", timeoutMs: "number", mode: ["tui", "interactive", "print", "json", "rpc"], status: ["ok", "failure", "transport", "cdp-error"], subtype: ["runtime", "log", "target", "page", "network", "tracing"], kind: [ "cdp", "wait", "status", "close", "screenshot", "videoStart", "videoStop", "traceStart", "traceStop", ], }, } as const; type BoundDetails = Partial<{ [K in keyof (typeof schema)["fields"]]: (typeof schema)["fields"][K] extends "number" ? number : (typeof schema)["fields"][K] extends "boolean" ? boolean : (typeof schema)["fields"][K] extends readonly (infer V)[] ? V : never; }>; export type Debug = ( event: (typeof schema)["events"][number], details?: BoundDetails, ) => void; export type Span = ( event: (typeof schema)["spans"][number], details?: BoundDetails, ) => (outcome?: "finish" | "error", details?: BoundDetails) => void; export const { dbg, span, closeDebug, }: { dbg: Debug | undefined; span: Span | undefined; closeDebug: () => void; } = defineDebug(schema);