Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/chrome-cdp/src/debug.ts

Raw
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);