@saptools/cf-inspector 0.3.19 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/cdp/wsTransport.ts","../src/cli.ts","../src/cli/program.ts","../src/cli/commands/attach.ts","../src/inspector/discovery.ts","../src/cli/output.ts","../src/cf/tunnel.ts","../src/inspector/session.ts","../src/cdp/client.ts","../src/inspector/conversions.ts","../src/cli/target.ts","../src/cli/commandTypes.ts","../src/cli/commands/eval.ts","../src/inspector/runtime.ts","../src/cli/commands/listScripts.ts","../src/cli/commands/log.ts","../src/pathMapper.ts","../src/inspector/breakpoints.ts","../src/logpoint/condition.ts","../src/logpoint/events.ts","../src/logpoint/stream.ts","../src/cli/warnings.ts","../src/cli/commands/snapshot.ts","../src/inspector/pause.ts","../src/snapshot/values.ts","../src/snapshot/evaluation.ts","../src/snapshot/properties.ts","../src/snapshot/objects.ts","../src/snapshot/scopes.ts","../src/snapshot/capture.ts","../src/cli/captureParser.ts"],"sourcesContent":["export type CfInspectorErrorCode =\n | \"INVALID_ARGUMENT\"\n | \"INVALID_BREAKPOINT\"\n | \"INVALID_REMOTE_ROOT\"\n | \"INVALID_EXPRESSION\"\n | \"BREAKPOINT_DID_NOT_BIND\"\n | \"INSPECTOR_DISCOVERY_FAILED\"\n | \"INSPECTOR_CONNECTION_FAILED\"\n | \"CDP_REQUEST_FAILED\"\n | \"BREAKPOINT_NOT_HIT\"\n | \"UNRELATED_PAUSE\"\n | \"UNRELATED_PAUSE_TIMEOUT\"\n | \"EVALUATION_FAILED\"\n | \"MISSING_TARGET\"\n | \"ABORTED\";\n\nexport class CfInspectorError extends Error {\n public readonly code: CfInspectorErrorCode;\n public readonly detail?: string;\n\n public constructor(code: CfInspectorErrorCode, message: string, detail?: string) {\n super(message);\n this.name = \"CfInspectorError\";\n this.code = code;\n if (detail !== undefined) {\n this.detail = detail;\n }\n }\n}\n\nexport interface BreakpointLocation {\n readonly file: string;\n readonly line: number;\n}\n\nexport interface RemoteRootLiteral {\n readonly kind: \"literal\";\n readonly value: string;\n}\n\nexport interface RemoteRootRegex {\n readonly kind: \"regex\";\n readonly pattern: string;\n readonly flags: string;\n readonly regex: RegExp;\n}\n\nexport interface RemoteRootNone {\n readonly kind: \"none\";\n}\n\nexport type RemoteRootSetting = RemoteRootLiteral | RemoteRootRegex | RemoteRootNone;\n\nexport interface BreakpointHandle {\n readonly breakpointId: string;\n readonly file: string;\n readonly line: number;\n readonly urlRegex: string;\n readonly resolvedLocations: readonly ResolvedLocation[];\n}\n\nexport interface ResolvedLocation {\n readonly scriptId: string;\n readonly url?: string;\n readonly lineNumber: number;\n readonly columnNumber?: number;\n}\n\nexport interface CallFrameInfo {\n readonly callFrameId: string;\n readonly functionName: string;\n readonly url?: string;\n readonly lineNumber: number;\n readonly columnNumber: number;\n readonly scopeChain: readonly ScopeInfo[];\n}\n\nexport interface ScopeInfo {\n readonly type: string;\n readonly objectId?: string;\n readonly name?: string;\n}\n\nexport interface PauseEvent {\n readonly reason: string;\n readonly hitBreakpoints: readonly string[];\n readonly callFrames: readonly CallFrameInfo[];\n readonly receivedAtMs?: number;\n}\n\nexport interface VariableSnapshot {\n readonly name: string;\n readonly value: string;\n readonly type?: string;\n readonly children?: readonly VariableSnapshot[];\n}\n\nexport interface ScopeSnapshot {\n readonly type: string;\n readonly variables: readonly VariableSnapshot[];\n}\n\nexport interface FrameSnapshot {\n readonly functionName: string;\n readonly url?: string;\n readonly line: number;\n readonly column: number;\n readonly scopes?: readonly ScopeSnapshot[];\n}\n\nexport interface CapturedExpression {\n readonly expression: string;\n readonly value?: string;\n readonly type?: string;\n readonly error?: string;\n}\n\nexport interface SnapshotCaptureResult {\n readonly reason: string;\n readonly hitBreakpoints: readonly string[];\n readonly capturedAt: string;\n readonly topFrame?: FrameSnapshot;\n readonly captures: readonly CapturedExpression[];\n}\n\nexport interface SnapshotResult extends SnapshotCaptureResult {\n readonly pausedDurationMs: number | null;\n}\n\nexport interface ScriptInfo {\n readonly scriptId: string;\n readonly url: string;\n}\n\nexport interface InspectorConnectOptions {\n readonly port: number;\n readonly host?: string;\n readonly connectTimeoutMs?: number;\n}\n\nexport type CdpMessage =\n | { readonly id: number; readonly result: unknown }\n | { readonly id: number; readonly error: { readonly code: number; readonly message: string } }\n | { readonly method: string; readonly params: unknown };\n","import { WebSocket } from \"ws\";\n\nimport { CfInspectorError } from \"../types.js\";\n\nimport type { CdpTransport, CdpTransportEventMap } from \"./client.js\";\n\nexport async function wsTransportFactory(url: string): Promise<CdpTransport> {\n const socket = new WebSocket(url, { perMessageDeflate: false });\n await waitForOpen(socket, url);\n const wrappers = new WeakMap<object, (...args: unknown[]) => void>();\n\n return {\n send(payload: string): void {\n socket.send(payload);\n },\n close(): void {\n socket.close();\n },\n get readyState(): number {\n return socket.readyState;\n },\n on(event, listener): void {\n const wrapped = wrapListener(event, listener, wrappers);\n socket.on(event, wrapped);\n },\n off(event, listener): void {\n const wrapped = wrappers.get(listener as object);\n if (!wrapped) {\n return;\n }\n socket.off(event, wrapped);\n },\n };\n}\n\nasync function waitForOpen(socket: WebSocket, url: string): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const onOpen = (): void => {\n socket.off(\"error\", onError);\n resolve();\n };\n const onError = (err: Error): void => {\n socket.off(\"open\", onOpen);\n reject(\n new CfInspectorError(\n \"INSPECTOR_CONNECTION_FAILED\",\n `Failed to connect to inspector at ${url}: ${err.message}`,\n ),\n );\n };\n socket.once(\"open\", onOpen);\n socket.once(\"error\", onError);\n });\n}\n\nfunction wrapListener<E extends keyof CdpTransportEventMap>(\n event: E,\n listener: CdpTransportEventMap[E],\n wrappers: WeakMap<object, (...args: unknown[]) => void>,\n): (...args: unknown[]) => void {\n if (event === \"message\") {\n const wrapped = (data: Buffer): void => {\n (listener as CdpTransportEventMap[\"message\"])(data.toString(\"utf8\"));\n };\n wrappers.set(listener as object, wrapped as (...args: unknown[]) => void);\n return wrapped as (...args: unknown[]) => void;\n }\n if (event === \"close\") {\n const wrapped = (): void => {\n (listener as CdpTransportEventMap[\"close\"])();\n };\n wrappers.set(listener as object, wrapped as (...args: unknown[]) => void);\n return wrapped as (...args: unknown[]) => void;\n }\n const wrapped = (err: Error): void => {\n (listener as CdpTransportEventMap[\"error\"])(err);\n };\n wrappers.set(listener as object, wrapped as (...args: unknown[]) => void);\n return wrapped as (...args: unknown[]) => void;\n}\n","import process from \"node:process\";\n\nimport { main } from \"./cli/program.js\";\nimport { CfInspectorError } from \"./types.js\";\n\ntry {\n await main(process.argv);\n} catch (err: unknown) {\n if (err instanceof CfInspectorError) {\n process.stderr.write(`Error [${err.code}]: ${err.message}\\n`);\n if (err.detail !== undefined) {\n process.stderr.write(` detail: ${err.detail}\\n`);\n }\n process.exit(1);\n }\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(`Error: ${message}\\n`);\n process.exit(1);\n}\n","import { Command } from \"commander\";\n\nimport type {\n AttachCommandOptions,\n EvalCommandOptions,\n ListScriptsCommandOptions,\n LogCommandOptions,\n SnapshotCommandOptions,\n} from \"./commandTypes.js\";\nimport { handleAttach } from \"./commands/attach.js\";\nimport { handleEval } from \"./commands/eval.js\";\nimport { handleListScripts } from \"./commands/listScripts.js\";\nimport { handleLog } from \"./commands/log.js\";\nimport { handleSnapshot } from \"./commands/snapshot.js\";\n\nfunction applyTargetOptions(cmd: Command): Command {\n return cmd\n .option(\"--port <number>\", \"Local port the inspector or tunnel listens on\")\n .option(\"--host <host>\", \"Hostname (default: 127.0.0.1)\", \"127.0.0.1\")\n .option(\"--region <key>\", \"CF region key (e.g. eu10)\")\n .option(\"--org <name>\", \"CF org name\")\n .option(\"--space <name>\", \"CF space name\")\n .option(\"--app <name>\", \"CF app name\")\n .option(\"--cf-timeout <seconds>\", \"Timeout for CF tunnel readiness in seconds\");\n}\n\nexport async function main(argv: readonly string[]): Promise<void> {\n const program = new Command();\n program\n .name(\"cf-inspector\")\n .description(\"Drive a Node.js inspector from the command line — set breakpoints, capture snapshots, evaluate expressions\");\n\n registerSnapshot(program);\n registerLog(program);\n registerEval(program);\n registerListScripts(program);\n registerAttach(program);\n\n await program.parseAsync([...argv]);\n}\n\nfunction registerSnapshot(program: Command): void {\n const collectStrings = (value: string, prev: readonly string[] = []): readonly string[] => [\n ...prev,\n value,\n ];\n applyTargetOptions(\n program.command(\"snapshot\").description(\"Set a breakpoint, wait for it to hit, capture expressions, and resume\"),\n )\n .option(\"--bp <file:line>\", \"Breakpoint location (repeatable; first hit wins), e.g. src/handler.ts:42\", collectStrings, [] as readonly string[])\n .option(\"--capture <expr,…>\", \"Top-level comma-separated expressions to evaluate in the paused frame\")\n .option(\"--timeout <seconds>\", \"How long to wait for the breakpoint to hit (default: 30)\")\n .option(\"--max-value-length <chars>\", \"Maximum characters per captured value before truncation (default: 4096)\")\n .option(\"--remote-root <value>\", \"Path-mapping anchor: literal path or regex:<pattern> / /pattern/flags\")\n .option(\"--condition <expr>\", \"Only pause when this JS expression evaluates truthy in the paused frame\")\n .option(\"--include-scopes\", \"Include expanded paused-frame scopes in the snapshot\")\n .option(\"--no-json\", \"Print a human-readable summary instead of JSON\")\n .option(\"--keep-paused\", \"Skip Debugger.resume after capture; Node may resume when this CLI disconnects\")\n .option(\"--fail-on-unmatched-pause\", \"Fail immediately if the target pauses somewhere else\")\n .action(async (opts: SnapshotCommandOptions): Promise<void> => {\n await handleSnapshot(opts);\n });\n}\n\nfunction registerLog(program: Command): void {\n applyTargetOptions(\n program.command(\"log\").description(\"Stream a non-pausing logpoint: log an expression each time a line executes\"),\n )\n .requiredOption(\"--at <file:line>\", \"Logpoint location, e.g. src/handler.ts:42\")\n .requiredOption(\"--expr <expression>\", \"JavaScript expression to log on each hit\")\n .option(\"--remote-root <value>\", \"Path-mapping anchor: literal path or regex:<pattern> / /pattern/flags\")\n .option(\"--duration <seconds>\", \"Stop streaming after N seconds (default: run until SIGINT)\")\n .option(\"--no-json\", \"Print human-readable lines instead of JSON Lines\")\n .action(async (opts: LogCommandOptions): Promise<void> => {\n await handleLog(opts);\n });\n}\n\nfunction registerEval(program: Command): void {\n applyTargetOptions(\n program.command(\"eval\").description(\"Evaluate an expression against the global Runtime\"),\n )\n .requiredOption(\"--expr <expression>\", \"JavaScript expression to evaluate\")\n .option(\"--no-json\", \"Print only the resulting value, not the full CDP envelope\")\n .action(async (opts: EvalCommandOptions): Promise<void> => {\n await handleEval(opts);\n });\n}\n\nfunction registerListScripts(program: Command): void {\n applyTargetOptions(\n program.command(\"list-scripts\").description(\"Print the scripts the V8 instance currently knows about\"),\n )\n .option(\"--no-json\", \"Print scriptId<TAB>url instead of JSON\")\n .action(async (opts: ListScriptsCommandOptions): Promise<void> => {\n await handleListScripts(opts);\n });\n}\n\nfunction registerAttach(program: Command): void {\n applyTargetOptions(\n program.command(\"attach\").description(\"Connect, fetch the inspector version, and disconnect (smoke-test)\"),\n )\n .option(\"--no-json\", \"Print a multi-line summary instead of JSON\")\n .action(async (opts: AttachCommandOptions): Promise<void> => {\n await handleAttach(opts);\n });\n}\n","import process from \"node:process\";\n\nimport { fetchInspectorVersion } from \"../../inspector/discovery.js\";\nimport type { AttachCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { openTarget, resolveTarget } from \"../target.js\";\n\nexport async function handleAttach(opts: AttachCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const tunnel = await openTarget(target);\n try {\n const version = await fetchInspectorVersion(tunnel.host, tunnel.port, 5_000);\n if (opts.json) {\n writeJson({ host: tunnel.host, port: tunnel.port, ...version });\n return;\n }\n process.stdout.write(\n `Connected to ${tunnel.host}:${tunnel.port.toString()}\\n` +\n ` Browser: ${version.browser}\\n` +\n ` Protocol: ${version.protocolVersion}\\n`,\n );\n } finally {\n await tunnel.dispose();\n }\n}\n","import { request } from \"node:http\";\n\nimport { CfInspectorError } from \"../types.js\";\n\nexport interface InspectorTarget {\n readonly description: string;\n readonly devtoolsFrontendUrl?: string;\n readonly faviconUrl?: string;\n readonly id: string;\n readonly title: string;\n readonly type: string;\n readonly url: string;\n readonly webSocketDebuggerUrl: string;\n}\n\nexport interface InspectorVersion {\n readonly browser: string;\n readonly protocolVersion: string;\n}\n\nasync function fetchJson<T>(url: string, timeoutMs: number): Promise<T> {\n return await new Promise<T>((resolve, reject) => {\n const req = request(url, { method: \"GET\" }, (res) => {\n const chunks: Buffer[] = [];\n res.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n });\n res.on(\"end\", () => {\n try {\n resolve(parseJsonResponse(chunks) as T);\n } catch (err: unknown) {\n reject(parseDiscoveryError(url, err));\n }\n });\n res.on(\"error\", (err) => {\n reject(newDiscoveryError(`Inspector discovery response error: ${err.message}`));\n });\n });\n req.setTimeout(timeoutMs, () => {\n req.destroy(\n new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector discovery at ${url} timed out after ${timeoutMs.toString()}ms`,\n ),\n );\n });\n req.on(\"error\", (err) => {\n reject(\n err instanceof CfInspectorError\n ? err\n : new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector discovery at ${url} failed: ${err.message}`,\n ),\n );\n });\n req.end();\n });\n}\n\nfunction parseJsonResponse(chunks: readonly Buffer[]): unknown {\n const text = Buffer.concat(chunks).toString(\"utf8\");\n return JSON.parse(text) as unknown;\n}\n\nfunction parseDiscoveryError(url: string, err: unknown): CfInspectorError {\n const message = err instanceof Error ? err.message : String(err);\n return newDiscoveryError(`Failed to parse inspector discovery response from ${url}: ${message}`);\n}\n\nfunction newDiscoveryError(message: string): CfInspectorError {\n return new CfInspectorError(\"INSPECTOR_DISCOVERY_FAILED\", message);\n}\n\nfunction toInspectorTarget(value: unknown, source: string): InspectorTarget {\n if (typeof value !== \"object\" || value === null) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector target is not an object in ${source}`,\n );\n }\n const candidate = value as Record<string, unknown>;\n const webSocketDebuggerUrl = candidate[\"webSocketDebuggerUrl\"];\n if (typeof webSocketDebuggerUrl !== \"string\" || webSocketDebuggerUrl.length === 0) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector target is missing webSocketDebuggerUrl in ${source}`,\n );\n }\n return {\n description: typeof candidate[\"description\"] === \"string\" ? candidate[\"description\"] : \"\",\n id: typeof candidate[\"id\"] === \"string\" ? candidate[\"id\"] : \"\",\n title: typeof candidate[\"title\"] === \"string\" ? candidate[\"title\"] : \"\",\n type: typeof candidate[\"type\"] === \"string\" ? candidate[\"type\"] : \"\",\n url: typeof candidate[\"url\"] === \"string\" ? candidate[\"url\"] : \"\",\n webSocketDebuggerUrl,\n ...(typeof candidate[\"devtoolsFrontendUrl\"] === \"string\"\n ? { devtoolsFrontendUrl: candidate[\"devtoolsFrontendUrl\"] }\n : {}),\n ...(typeof candidate[\"faviconUrl\"] === \"string\" ? { faviconUrl: candidate[\"faviconUrl\"] } : {}),\n };\n}\n\nexport async function discoverInspectorTargets(\n host: string,\n port: number,\n timeoutMs: number,\n): Promise<readonly InspectorTarget[]> {\n const url = `http://${host}:${port.toString()}/json/list`;\n const raw = await fetchJson<unknown>(url, timeoutMs);\n if (!Array.isArray(raw) || raw.length === 0) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No inspector targets returned from ${url}`,\n );\n }\n return raw.map((entry, idx): InspectorTarget => toInspectorTarget(entry, `${url}[${idx.toString()}]`));\n}\n\nfunction readVersionField(value: Record<string, unknown>, ...keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const entry = value[key];\n if (typeof entry === \"string\" && entry.length > 0) {\n return entry;\n }\n }\n return undefined;\n}\n\nexport async function fetchInspectorVersion(\n host: string,\n port: number,\n timeoutMs: number,\n): Promise<InspectorVersion> {\n const url = `http://${host}:${port.toString()}/json/version`;\n const raw = await fetchJson<unknown>(url, timeoutMs);\n if (typeof raw !== \"object\" || raw === null) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Unexpected /json/version response from ${url}`,\n );\n }\n const value = raw as Record<string, unknown>;\n const browser = readVersionField(value, \"Browser\", \"browser\");\n const protocolVersion = readVersionField(value, \"Protocol-Version\", \"protocolVersion\");\n if (browser === undefined || protocolVersion === undefined) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Unexpected /json/version response from ${url}`,\n );\n }\n return { browser, protocolVersion };\n}\n","import process from \"node:process\";\n\nimport type { LogpointEvent } from \"../logpoint/events.js\";\nimport type { SnapshotResult } from \"../types.js\";\n\nexport function writeJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function writeHumanSnapshot(snapshot: SnapshotResult): void {\n const pausedDuration = snapshot.pausedDurationMs === null\n ? \"unknown\"\n : `${snapshot.pausedDurationMs.toFixed(1)}ms`;\n const lines: string[] = [];\n lines.push(\n `Snapshot @ ${snapshot.capturedAt}`,\n ` reason: ${snapshot.reason}`,\n ` paused: ${pausedDuration}`,\n );\n if (snapshot.topFrame) {\n appendFrameLines(lines, snapshot);\n }\n if (snapshot.captures.length > 0) {\n lines.push(\" captures:\");\n for (const capture of snapshot.captures) {\n const detail = capture.error ?? capture.value ?? \"undefined\";\n lines.push(` ${capture.expression} = ${detail}`);\n }\n }\n process.stdout.write(`${lines.join(\"\\n\")}\\n`);\n}\n\nfunction appendFrameLines(lines: string[], snapshot: SnapshotResult): void {\n const frame = snapshot.topFrame;\n if (frame === undefined) {\n return;\n }\n const fnName = frame.functionName.length === 0 ? \"(anonymous)\" : frame.functionName;\n const sourceUrl = frame.url !== undefined && frame.url.length > 0 ? frame.url : \"(unknown)\";\n lines.push(\n ` frame: ${fnName} ${sourceUrl}:${frame.line.toString()}:${frame.column.toString()}`,\n );\n if (frame.scopes === undefined) {\n return;\n }\n for (const scope of frame.scopes) {\n lines.push(` scope ${scope.type} (${scope.variables.length.toString()} vars):`);\n for (const variable of scope.variables) {\n lines.push(` ${variable.name} = ${variable.value}`);\n }\n }\n}\n\nexport function writeLogEvent(event: LogpointEvent, json: boolean): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(event)}\\n`);\n return;\n }\n if (event.error !== undefined) {\n process.stdout.write(`[${event.ts}] ${event.at} !err ${event.error}\\n`);\n return;\n }\n process.stdout.write(`[${event.ts}] ${event.at} ${event.value ?? \"\"}\\n`);\n}\n","import { startDebugger } from \"@saptools/cf-debugger\";\nimport type { DebuggerHandle, StartDebuggerOptions } from \"@saptools/cf-debugger\";\n\nexport interface TunnelTarget {\n readonly region: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly tunnelReadyTimeoutMs?: number;\n readonly preferredPort?: number;\n readonly verbose?: boolean;\n readonly signal?: AbortSignal;\n}\n\nexport interface OpenedTunnel {\n readonly localPort: number;\n readonly handle: DebuggerHandle;\n dispose(): Promise<void>;\n}\n\nexport async function openCfTunnel(target: TunnelTarget): Promise<OpenedTunnel> {\n const opts: StartDebuggerOptions = {\n region: target.region,\n org: target.org,\n space: target.space,\n app: target.app,\n ...(target.tunnelReadyTimeoutMs === undefined ? {} : { tunnelReadyTimeoutMs: target.tunnelReadyTimeoutMs }),\n ...(target.preferredPort === undefined ? {} : { preferredPort: target.preferredPort }),\n ...(target.verbose === undefined ? {} : { verbose: target.verbose }),\n ...(target.signal === undefined ? {} : { signal: target.signal }),\n };\n const handle = await startDebugger(opts);\n return {\n localPort: handle.session.localPort,\n handle,\n dispose: async (): Promise<void> => {\n await handle.dispose();\n },\n };\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { CdpClient } from \"../cdp/client.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { InspectorConnectOptions, PauseEvent, ScriptInfo } from \"../types.js\";\n\nimport { asString, toPauseEvent } from \"./conversions.js\";\nimport { discoverInspectorTargets } from \"./discovery.js\";\nimport type { CdpPauseParams, DebuggerState, InspectorSession, ScriptParsedParams } from \"./types.js\";\n\nconst DEFAULT_CONNECT_TIMEOUT_MS = 5_000;\nconst DEFAULT_HOST = \"127.0.0.1\";\nconst PAUSE_BUFFER_LIMIT = 32;\n\nexport async function connectInspector(options: InspectorConnectOptions): Promise<InspectorSession> {\n const host = options.host ?? DEFAULT_HOST;\n const connectTimeoutMs = options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;\n const targets = await discoverInspectorTargets(host, options.port, connectTimeoutMs);\n const target = targets[0];\n if (!target) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No inspector targets available on ${host}:${options.port.toString()}`,\n );\n }\n const client = await CdpClient.connect({ url: target.webSocketDebuggerUrl });\n const scripts = new Map<string, ScriptInfo>();\n client.on(\"Debugger.scriptParsed\", (raw) => {\n const params = raw as ScriptParsedParams;\n const scriptId = asString(params.scriptId);\n const url = asString(params.url);\n if (scriptId.length === 0) {\n return;\n }\n scripts.set(scriptId, { scriptId, url });\n });\n const pauseBuffer: PauseEvent[] = [];\n const pauseWaitGate = { active: false };\n const debuggerState: DebuggerState = {};\n client.on(\"Debugger.paused\", (raw) => {\n if (pauseWaitGate.active) {\n return;\n }\n const params = raw as CdpPauseParams;\n const event = toPauseEvent(params, performance.now(), scripts);\n if (pauseBuffer.length >= PAUSE_BUFFER_LIMIT) {\n pauseBuffer.shift();\n }\n pauseBuffer.push(event);\n });\n client.on(\"Debugger.resumed\", () => {\n debuggerState.lastResumedAtMs = performance.now();\n });\n await client.send(\"Runtime.enable\");\n await client.send(\"Debugger.enable\");\n return {\n client,\n target,\n scripts,\n pauseBuffer,\n pauseWaitGate,\n debuggerState,\n dispose: async (): Promise<void> => {\n try {\n await client.send(\"Debugger.disable\");\n } catch {\n // best-effort\n }\n client.dispose();\n },\n };\n}\n","import { EventEmitter } from \"node:events\";\n\nimport { CfInspectorError } from \"../types.js\";\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 15_000;\n\nexport interface CdpTransportEventMap {\n readonly message: (data: string) => void;\n readonly close: () => void;\n readonly error: (err: Error) => void;\n}\n\nexport interface CdpTransport {\n send(payload: string): void;\n close(): void;\n readonly readyState: number;\n on<E extends keyof CdpTransportEventMap>(event: E, listener: CdpTransportEventMap[E]): void;\n off<E extends keyof CdpTransportEventMap>(event: E, listener: CdpTransportEventMap[E]): void;\n}\n\nexport type CdpTransportFactory = (url: string) => Promise<CdpTransport>;\n\nexport interface CdpClientOptions {\n readonly url: string;\n readonly transportFactory?: CdpTransportFactory;\n readonly requestTimeoutMs?: number;\n}\n\ninterface PendingRequest {\n readonly resolve: (value: unknown) => void;\n readonly reject: (error: Error) => void;\n readonly timer: ReturnType<typeof setTimeout>;\n}\n\ninterface ParsedMessage {\n readonly id?: number;\n readonly method?: string;\n readonly result?: unknown;\n readonly params?: unknown;\n readonly error?: { readonly code: number; readonly message: string };\n}\n\nfunction parseMessage(raw: string): ParsedMessage | undefined {\n try {\n const value: unknown = JSON.parse(raw);\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n return value as ParsedMessage;\n } catch {\n return undefined;\n }\n}\n\nasync function loadDefaultFactory(): Promise<CdpTransportFactory> {\n const mod = await import(\"./wsTransport.js\");\n return mod.wsTransportFactory;\n}\n\nexport class CdpClient {\n private readonly transport: CdpTransport;\n private readonly requestTimeoutMs: number;\n private readonly pending = new Map<number, PendingRequest>();\n private readonly emitter = new EventEmitter();\n private nextId = 1;\n private closed = false;\n private closeReason: Error | undefined;\n\n private readonly handleMessage = (raw: string): void => {\n const parsed = parseMessage(raw);\n if (!parsed) {\n return;\n }\n if (typeof parsed.id === \"number\") {\n this.handleResponse(parsed);\n return;\n }\n if (typeof parsed.method === \"string\") {\n this.emitter.emit(parsed.method, parsed.params);\n this.emitter.emit(\"event\", { method: parsed.method, params: parsed.params });\n }\n };\n\n private readonly handleClose = (): void => {\n this.markClosed(new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Inspector connection closed\"));\n };\n\n private readonly handleError = (err: Error): void => {\n this.markClosed(\n err instanceof CfInspectorError\n ? err\n : new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", err.message),\n );\n };\n\n private constructor(transport: CdpTransport, requestTimeoutMs: number) {\n this.transport = transport;\n this.requestTimeoutMs = requestTimeoutMs;\n transport.on(\"message\", this.handleMessage);\n transport.on(\"close\", this.handleClose);\n transport.on(\"error\", this.handleError);\n }\n\n public static async connect(options: CdpClientOptions): Promise<CdpClient> {\n const factory = options.transportFactory ?? (await loadDefaultFactory());\n const transport = await factory(options.url);\n return new CdpClient(transport, options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);\n }\n\n public async send<TResult = unknown>(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<TResult> {\n if (this.closed) {\n throw this.closeReason ?? new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection closed\");\n }\n const id = this.nextId++;\n const payload = JSON.stringify({ id, method, params });\n return await new Promise<TResult>((resolve, reject) => {\n const timer = this.createRequestTimer(id, method, reject);\n this.pending.set(id, {\n resolve: (value): void => {\n resolve(value as TResult);\n },\n reject,\n timer,\n });\n this.sendPayload(id, method, payload, timer, reject);\n });\n }\n\n public on(method: string, listener: (params: unknown) => void): () => void {\n this.emitter.on(method, listener);\n return (): void => {\n this.emitter.off(method, listener);\n };\n }\n\n public async waitFor<T = unknown>(\n method: string,\n options: { readonly timeoutMs: number; readonly predicate?: (params: T) => boolean } = {\n timeoutMs: this.requestTimeoutMs,\n },\n ): Promise<T> {\n if (this.closed) {\n throw this.closeReason ?? new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection closed\");\n }\n return await new Promise<T>((resolve, reject) => {\n let settled = false;\n const cleanup = (): void => {\n clearTimeout(timer);\n offEvent();\n offClose();\n };\n const finish = (value: T): void => {\n settled = true;\n cleanup();\n resolve(value);\n };\n const offEvent = this.on(method, (raw) => {\n if (settled) {\n return;\n }\n const params = raw as T;\n if (options.predicate && !options.predicate(params)) {\n return;\n }\n finish(params);\n });\n const offClose = this.onClose((err) => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(err);\n });\n const timer = setTimeout(() => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(this.createWaitTimeoutError(method, options.timeoutMs));\n }, options.timeoutMs);\n });\n }\n\n public onClose(listener: (err: Error) => void): () => void {\n if (this.closed) {\n const reason = this.closeReason ?? new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection closed\");\n queueMicrotask(() => {\n listener(reason);\n });\n return (): void => {\n // already closed; nothing to detach\n };\n }\n this.emitter.on(\"__close__\", listener);\n return (): void => {\n this.emitter.off(\"__close__\", listener);\n };\n }\n\n public dispose(): void {\n if (this.closed) {\n return;\n }\n this.transport.off(\"message\", this.handleMessage);\n this.transport.off(\"close\", this.handleClose);\n this.transport.off(\"error\", this.handleError);\n try {\n this.transport.close();\n } catch {\n // best-effort\n }\n this.markClosed(new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection disposed\"));\n }\n\n public get isClosed(): boolean {\n return this.closed;\n }\n\n private handleResponse(parsed: ParsedMessage): void {\n const pending = this.pending.get(parsed.id ?? -1);\n if (!pending) {\n return;\n }\n this.pending.delete(parsed.id ?? -1);\n clearTimeout(pending.timer);\n if (parsed.error) {\n pending.reject(\n new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n `CDP request ${(parsed.id ?? -1).toString()} failed: ${parsed.error.message}`,\n JSON.stringify(parsed.error),\n ),\n );\n return;\n }\n pending.resolve(parsed.result);\n }\n\n private createRequestTimer(\n id: number,\n method: string,\n reject: (error: Error) => void,\n ): ReturnType<typeof setTimeout> {\n return setTimeout(() => {\n this.pending.delete(id);\n reject(\n new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n `CDP method ${method} timed out after ${this.requestTimeoutMs.toString()}ms`,\n ),\n );\n }, this.requestTimeoutMs);\n }\n\n private createWaitTimeoutError(method: string, timeoutMs: number): CfInspectorError {\n return new CfInspectorError(\n \"BREAKPOINT_NOT_HIT\",\n `Timed out waiting for ${method} after ${timeoutMs.toString()}ms`,\n );\n }\n\n private sendPayload(\n id: number,\n method: string,\n payload: string,\n timer: ReturnType<typeof setTimeout>,\n reject: (error: Error) => void,\n ): void {\n try {\n this.transport.send(payload);\n } catch (err: unknown) {\n clearTimeout(timer);\n this.pending.delete(id);\n const message = err instanceof Error ? err.message : String(err);\n reject(new CfInspectorError(\"CDP_REQUEST_FAILED\", `Failed to send ${method}: ${message}`));\n }\n }\n\n private markClosed(reason: Error): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.closeReason = reason;\n for (const [, pending] of this.pending) {\n clearTimeout(pending.timer);\n pending.reject(reason);\n }\n this.pending.clear();\n this.emitter.emit(\"__close__\", reason);\n this.emitter.removeAllListeners();\n }\n}\n","import type {\n CallFrameInfo,\n PauseEvent,\n ResolvedLocation,\n ScriptInfo,\n ScopeInfo,\n} from \"../types.js\";\n\nimport type {\n CdpCallFrame,\n CdpPauseParams,\n CdpResolvedLocation,\n CdpScope,\n} from \"./types.js\";\n\nexport function asString(value: unknown, fallback = \"\"): string {\n return typeof value === \"string\" ? value : fallback;\n}\n\nexport function asNumber(value: unknown, fallback = 0): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nexport function toResolvedLocations(value: unknown): readonly ResolvedLocation[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): ResolvedLocation[] => {\n if (typeof entry !== \"object\" || entry === null) {\n return [];\n }\n const candidate = entry as CdpResolvedLocation;\n const scriptId = asString(candidate.scriptId);\n if (scriptId.length === 0) {\n return [];\n }\n const url = typeof candidate.url === \"string\" ? candidate.url : undefined;\n const lineNumber = asNumber(candidate.lineNumber);\n const result: ResolvedLocation = url === undefined\n ? { scriptId, lineNumber, columnNumber: asNumber(candidate.columnNumber) }\n : { scriptId, url, lineNumber, columnNumber: asNumber(candidate.columnNumber) };\n return [result];\n });\n}\n\nfunction toScopeChain(value: unknown): readonly ScopeInfo[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): ScopeInfo[] => {\n if (typeof entry !== \"object\" || entry === null) {\n return [];\n }\n const candidate = entry as CdpScope;\n const type = asString(candidate.type);\n if (type.length === 0) {\n return [];\n }\n const objectId = typeof candidate.object?.objectId === \"string\" ? candidate.object.objectId : undefined;\n const name = typeof candidate.name === \"string\" ? candidate.name : undefined;\n const base: ScopeInfo = name === undefined\n ? { type }\n : { type, name };\n return [objectId === undefined ? base : { ...base, objectId }];\n });\n}\n\nfunction resolveCallFrameUrl(\n frame: CdpCallFrame,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): string | undefined {\n const direct = nonEmptyString(frame.url);\n if (direct !== undefined) {\n return direct;\n }\n const scriptId = nonEmptyString(frame.location?.scriptId);\n if (scriptId === undefined) {\n return undefined;\n }\n return nonEmptyString(scripts?.get(scriptId)?.url);\n}\n\nfunction toCallFrames(\n value: unknown,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): readonly CallFrameInfo[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): CallFrameInfo[] => {\n if (typeof entry !== \"object\" || entry === null) {\n return [];\n }\n const candidate = entry as CdpCallFrame;\n const callFrameId = asString(candidate.callFrameId);\n if (callFrameId.length === 0) {\n return [];\n }\n const url = resolveCallFrameUrl(candidate, scripts);\n const base: CallFrameInfo = {\n callFrameId,\n functionName: asString(candidate.functionName),\n lineNumber: asNumber(candidate.location?.lineNumber),\n columnNumber: asNumber(candidate.location?.columnNumber),\n scopeChain: toScopeChain(candidate.scopeChain),\n };\n return [url === undefined ? base : { ...base, url }];\n });\n}\n\nexport function toPauseEvent(\n params: CdpPauseParams,\n receivedAtMs: number,\n scripts?: ReadonlyMap<string, ScriptInfo>,\n): PauseEvent {\n return {\n reason: asString(params.reason),\n hitBreakpoints: Array.isArray(params.hitBreakpoints)\n ? params.hitBreakpoints.filter((id): id is string => typeof id === \"string\")\n : [],\n callFrames: toCallFrames(params.callFrames, scripts),\n receivedAtMs,\n };\n}\n\nfunction topFrameLocation(pause: PauseEvent): string {\n const top = pause.callFrames[0];\n if (top === undefined) {\n return \"(no call frame)\";\n }\n const url = top.url !== undefined && top.url.length > 0 ? top.url : \"(unknown)\";\n return `${url}:${(top.lineNumber + 1).toString()}:${(top.columnNumber + 1).toString()}`;\n}\n\nexport function pauseDetail(pause: PauseEvent): string {\n return JSON.stringify({\n reason: pause.reason,\n hitBreakpoints: pause.hitBreakpoints,\n topFrame: topFrameLocation(pause),\n });\n}\n","import { openCfTunnel } from \"../cf/tunnel.js\";\nimport { connectInspector } from \"../inspector/session.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\n\nimport { DEFAULT_CF_TIMEOUT_SEC } from \"./commandTypes.js\";\nimport type { SharedTargetOptions, Target } from \"./commandTypes.js\";\n\nexport function parsePositiveInt(raw: string | undefined, label: string): number | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const value = Number.parseInt(raw, 10);\n if (Number.isNaN(value) || value <= 0 || value.toString() !== raw.trim()) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", `Invalid ${label}: \"${raw}\" — expected a positive integer`);\n }\n return value;\n}\n\nexport function resolveTarget(opts: SharedTargetOptions): Target {\n const port = parsePositiveInt(opts.port, \"--port\");\n if (port !== undefined) {\n return { kind: \"port\", port, host: opts.host ?? \"127.0.0.1\" };\n }\n if (hasCfTarget(opts)) {\n const cfTimeoutSec = parsePositiveInt(opts.cfTimeout, \"--cf-timeout\") ?? DEFAULT_CF_TIMEOUT_SEC;\n return {\n kind: \"cf\",\n region: opts.region,\n org: opts.org,\n space: opts.space,\n app: opts.app,\n cfTimeoutMs: cfTimeoutSec * 1000,\n };\n }\n throw new CfInspectorError(\n \"MISSING_TARGET\",\n \"Provide either --port (and optionally --host) or all of --region, --org, --space, --app.\",\n );\n}\n\nfunction hasCfTarget(opts: SharedTargetOptions): opts is SharedTargetOptions & {\n readonly region: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n} {\n return (\n opts.region !== undefined &&\n opts.org !== undefined &&\n opts.space !== undefined &&\n opts.app !== undefined\n );\n}\n\ninterface ResolvedTunnel {\n readonly port: number;\n readonly host: string;\n readonly dispose: () => Promise<void>;\n}\n\nexport async function withSession<T>(\n target: Target,\n fn: (session: InspectorSession, port: number) => Promise<T>,\n): Promise<T> {\n const tunnel = await openTarget(target);\n let session: InspectorSession | undefined;\n try {\n session = await connectInspector({ port: tunnel.port, host: tunnel.host });\n return await fn(session, tunnel.port);\n } finally {\n if (session) {\n await session.dispose();\n }\n await tunnel.dispose();\n }\n}\n\nexport async function openTarget(target: Target): Promise<ResolvedTunnel> {\n if (target.kind === \"port\") {\n return {\n port: target.port,\n host: target.host,\n dispose: (): Promise<void> => Promise.resolve(),\n };\n }\n const tunnel = await openCfTunnel({\n region: target.region,\n org: target.org,\n space: target.space,\n app: target.app,\n tunnelReadyTimeoutMs: target.cfTimeoutMs,\n });\n return {\n port: tunnel.localPort,\n host: \"127.0.0.1\",\n dispose: async (): Promise<void> => {\n await tunnel.dispose();\n },\n };\n}\n","export const DEFAULT_BREAKPOINT_TIMEOUT_SEC = 30;\nexport const DEFAULT_CF_TIMEOUT_SEC = 60;\n\nexport interface PortTarget {\n readonly kind: \"port\";\n readonly port: number;\n readonly host: string;\n}\n\nexport interface CfTarget {\n readonly kind: \"cf\";\n readonly region: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly cfTimeoutMs: number;\n}\n\nexport type Target = PortTarget | CfTarget;\n\nexport interface SharedTargetOptions {\n readonly port?: string;\n readonly host?: string;\n readonly region?: string;\n readonly org?: string;\n readonly space?: string;\n readonly app?: string;\n readonly cfTimeout?: string;\n}\n\nexport interface SnapshotCommandOptions extends SharedTargetOptions {\n readonly bp: readonly string[];\n readonly capture?: string;\n readonly timeout?: string;\n readonly remoteRoot?: string;\n readonly condition?: string;\n readonly maxValueLength?: string;\n readonly json: boolean;\n readonly keepPaused?: boolean;\n readonly failOnUnmatchedPause?: boolean;\n readonly includeScopes?: boolean;\n}\n\nexport interface EvalCommandOptions extends SharedTargetOptions {\n readonly expr: string;\n readonly json: boolean;\n}\n\nexport interface ListScriptsCommandOptions extends SharedTargetOptions {\n readonly json: boolean;\n}\n\nexport interface LogCommandOptions extends SharedTargetOptions {\n readonly at: string;\n readonly expr: string;\n readonly remoteRoot?: string;\n readonly duration?: string;\n readonly json: boolean;\n}\n\nexport interface AttachCommandOptions extends SharedTargetOptions {\n readonly json: boolean;\n}\n","import process from \"node:process\";\n\nimport { evaluateGlobal } from \"../../inspector/runtime.js\";\nimport type { EvalCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { resolveTarget, withSession } from \"../target.js\";\n\nexport async function handleEval(opts: EvalCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const result = await withSession(target, async (session) => {\n return await evaluateGlobal(session, opts.expr);\n });\n if (opts.json) {\n writeJson(result);\n if (result.exceptionDetails !== undefined) {\n process.exitCode = 1;\n }\n return;\n }\n writeHumanEvalResult(result);\n}\n\nfunction writeHumanEvalResult(result: Awaited<ReturnType<typeof evaluateGlobal>>): void {\n if (result.exceptionDetails !== undefined) {\n const detail =\n typeof result.exceptionDetails.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails.text === \"string\" ? result.exceptionDetails.text : \"evaluation failed\");\n process.stderr.write(`${detail}\\n`);\n process.exitCode = 1;\n return;\n }\n const inner = result.result;\n if (inner === undefined) {\n process.stdout.write(\"\\n\");\n return;\n }\n if (typeof inner.value === \"string\") {\n process.stdout.write(`${inner.value}\\n`);\n return;\n }\n if (typeof inner.description === \"string\") {\n process.stdout.write(`${inner.description}\\n`);\n return;\n }\n process.stdout.write(`${JSON.stringify(inner.value)}\\n`);\n}\n","import { CfInspectorError } from \"../types.js\";\nimport type { ScriptInfo } from \"../types.js\";\n\nimport type { CdpEvalResult, CdpProperty, InspectorSession } from \"./types.js\";\n\nexport async function resume(session: InspectorSession): Promise<void> {\n await session.client.send(\"Debugger.resume\");\n}\n\nexport async function evaluateOnFrame(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n): Promise<CdpEvalResult> {\n return await session.client.send<CdpEvalResult>(\"Debugger.evaluateOnCallFrame\", {\n callFrameId,\n expression,\n returnByValue: false,\n generatePreview: true,\n silent: true,\n });\n}\n\nexport async function evaluateGlobal(\n session: InspectorSession,\n expression: string,\n): Promise<CdpEvalResult> {\n return await session.client.send<CdpEvalResult>(\"Runtime.evaluate\", {\n expression,\n returnByValue: false,\n generatePreview: true,\n silent: true,\n });\n}\n\nexport function listScripts(session: InspectorSession): readonly ScriptInfo[] {\n return [...session.scripts.values()];\n}\n\ninterface CdpCompileResult {\n scriptId?: unknown;\n exceptionDetails?: { text?: unknown; exception?: { description?: unknown } };\n}\n\nexport async function validateExpression(\n session: InspectorSession,\n expression: string,\n): Promise<void> {\n const result = await session.client.send<CdpCompileResult>(\"Runtime.compileScript\", {\n expression,\n sourceURL: \"<cf-inspector-validate>\",\n persistScript: false,\n });\n if (result.exceptionDetails === undefined) {\n return;\n }\n const description =\n typeof result.exceptionDetails.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails.text === \"string\"\n ? result.exceptionDetails.text\n : \"expression failed to compile\");\n throw new CfInspectorError(\"INVALID_EXPRESSION\", description);\n}\n\nexport async function getProperties(\n session: InspectorSession,\n objectId: string,\n): Promise<readonly CdpProperty[]> {\n const result = await session.client.send<{ result?: unknown }>(\"Runtime.getProperties\", {\n objectId,\n ownProperties: true,\n accessorPropertiesOnly: false,\n generatePreview: true,\n });\n if (!Array.isArray(result.result)) {\n return [];\n }\n return result.result as readonly CdpProperty[];\n}\n\nexport type { CdpEvalResult, CdpProperty } from \"./types.js\";\n","import process from \"node:process\";\n\nimport { listScripts } from \"../../inspector/runtime.js\";\nimport type { ListScriptsCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { resolveTarget, withSession } from \"../target.js\";\n\nexport async function handleListScripts(opts: ListScriptsCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const scripts = await withSession(target, (session) => Promise.resolve(listScripts(session)));\n if (opts.json) {\n writeJson(scripts);\n return;\n }\n for (const script of scripts) {\n process.stdout.write(`${script.scriptId}\\t${script.url}\\n`);\n }\n}\n","import process from \"node:process\";\n\nimport { validateExpression } from \"../../inspector/runtime.js\";\nimport { streamLogpoint } from \"../../logpoint/stream.js\";\nimport { parseBreakpointSpec, parseRemoteRoot } from \"../../pathMapper.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { LogCommandOptions } from \"../commandTypes.js\";\nimport { writeLogEvent } from \"../output.js\";\nimport { parsePositiveInt, resolveTarget, withSession } from \"../target.js\";\nimport { warnOnUnboundBreakpoints } from \"../warnings.js\";\n\nexport async function handleLog(opts: LogCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const location = parseBreakpointSpec(opts.at);\n const remoteRoot = parseRemoteRoot(opts.remoteRoot);\n const durationSec = parsePositiveInt(opts.duration, \"--duration\");\n const expression = opts.expr.trim();\n if (expression.length === 0) {\n throw new CfInspectorError(\"INVALID_BREAKPOINT\", \"--expr must not be empty\");\n }\n const abort = new AbortController();\n const onSig = (): void => {\n abort.abort();\n };\n process.once(\"SIGINT\", onSig);\n process.once(\"SIGTERM\", onSig);\n\n try {\n await withSession(target, async (session) => {\n await validateExpression(session, expression);\n const result = await streamLogpoint(session, {\n location,\n expression,\n remoteRoot,\n ...(durationSec === undefined ? {} : { durationMs: durationSec * 1000 }),\n signal: abort.signal,\n onEvent: (event) => {\n writeLogEvent(event, opts.json);\n },\n onBreakpointSet: (handle) => {\n warnOnUnboundBreakpoints([handle]);\n },\n });\n writeLogSummary(result.stoppedReason, result.emitted, opts.json);\n });\n } finally {\n process.off(\"SIGINT\", onSig);\n process.off(\"SIGTERM\", onSig);\n }\n}\n\nfunction writeLogSummary(stoppedReason: string, emitted: number, json: boolean): void {\n if (json) {\n process.stderr.write(`${JSON.stringify({ stopped: stoppedReason, emitted })}\\n`);\n return;\n }\n process.stderr.write(\n `Stopped (${stoppedReason}); emitted ${emitted.toString()} log ${emitted === 1 ? \"entry\" : \"entries\"}.\\n`,\n );\n}\n","import { CfInspectorError } from \"./types.js\";\nimport type { BreakpointLocation, RemoteRootSetting } from \"./types.js\";\n\nconst REGEX_PREFIX = \"regex:\";\n// cspell:ignore dgimsuvy\nconst REGEX_FLAGS_PATTERN = /^[dgimsuvy]*$/;\nconst TS_JS_EXT_PATTERN = /\\.(?:ts|js|mts|mjs|cts|cjs)$/i;\n\nexport function parseBreakpointSpec(input: string): BreakpointLocation {\n const idx = input.lastIndexOf(\":\");\n if (idx <= 0 || idx === input.length - 1) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n `Breakpoint must be in 'file:line' form, received: \"${input}\"`,\n );\n }\n const file = input.slice(0, idx).trim();\n const lineRaw = input.slice(idx + 1).trim();\n const line = Number.parseInt(lineRaw, 10);\n if (!Number.isInteger(line) || line <= 0 || line.toString() !== lineRaw) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n `Breakpoint line must be a positive integer, received: \"${lineRaw}\"`,\n );\n }\n if (file.length === 0) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n `Breakpoint file path is empty in \"${input}\"`,\n );\n }\n return { file, line };\n}\n\nexport function parseRemoteRoot(value: string | undefined): RemoteRootSetting {\n const trimmed = value?.trim();\n if (trimmed === undefined || trimmed.length === 0) {\n return { kind: \"none\" };\n }\n if (trimmed.startsWith(REGEX_PREFIX)) {\n return toRegex(trimmed.slice(REGEX_PREFIX.length), \"\");\n }\n const slashRegex = parseSlashDelimited(trimmed);\n if (slashRegex !== undefined) {\n return toRegex(slashRegex.pattern, slashRegex.flags);\n }\n return { kind: \"literal\", value: stripTrailingSlash(trimmed) };\n}\n\nfunction toRegex(pattern: string, flags: string): RemoteRootSetting {\n try {\n const regex = new RegExp(pattern, flags);\n return { kind: \"regex\", pattern, flags, regex };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new CfInspectorError(\n \"INVALID_REMOTE_ROOT\",\n `Failed to compile remote-root regex \"${pattern}\" with flags \"${flags}\": ${message}`,\n );\n }\n}\n\nfunction parseSlashDelimited(value: string): { pattern: string; flags: string } | undefined {\n if (!value.startsWith(\"/\")) {\n return undefined;\n }\n const closing = findLastUnescapedSlash(value);\n if (closing <= 0) {\n return undefined;\n }\n const flags = value.slice(closing + 1);\n // Disambiguate with literal paths: a path like \"/home/vcap/app/\" would parse\n // as `/<pattern>/` with empty flags. We require non-empty flags for the\n // slash-delimited form; flagless regexes must use the explicit \"regex:\" prefix.\n if (flags.length === 0 || !REGEX_FLAGS_PATTERN.test(flags)) {\n return undefined;\n }\n return { pattern: value.slice(1, closing), flags };\n}\n\nfunction findLastUnescapedSlash(value: string): number {\n for (let i = value.length - 1; i > 0; i--) {\n if (value[i] === \"/\" && !isEscaped(value, i)) {\n return i;\n }\n }\n return -1;\n}\n\nfunction isEscaped(value: string, idx: number): boolean {\n let backslashes = 0;\n for (let i = idx - 1; i >= 0; i--) {\n if (value[i] === \"\\\\\") {\n backslashes++;\n } else {\n break;\n }\n }\n return backslashes % 2 === 1;\n}\n\nfunction stripTrailingSlash(value: string): string {\n if (value.length > 1 && value.endsWith(\"/\")) {\n return value.slice(0, -1);\n }\n return value;\n}\n\nfunction normalizeRegexRootPattern(pattern: string): string {\n const withoutStartAnchor = pattern.startsWith(\"^\") ? pattern.slice(1) : pattern;\n const withoutEndAnchor =\n withoutStartAnchor.endsWith(\"$\") && !isEscaped(withoutStartAnchor, withoutStartAnchor.length - 1)\n ? withoutStartAnchor.slice(0, -1)\n : withoutStartAnchor;\n return stripTrailingSlash(withoutEndAnchor);\n}\n\nfunction buildFileUrlRegex(rootPattern: string, tail: string): string {\n const separator = rootPattern.endsWith(\"/\") ? \"\" : \"/\";\n return `^file://${rootPattern}${separator}${tail}$`;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n}\n\nfunction normalizeRelative(file: string): string {\n return file.replaceAll(/^[./\\\\]+/g, \"\").replaceAll(\"\\\\\", \"/\");\n}\n\nfunction dropExtension(file: string): { stem: string; matchedExt: boolean } {\n const match = TS_JS_EXT_PATTERN.exec(file);\n if (!match) {\n return { stem: file, matchedExt: false };\n }\n return { stem: file.slice(0, match.index), matchedExt: true };\n}\n\nconst EXT_GROUP = String.raw`\\.(?:ts|js|mts|mjs|cts|cjs)`;\nconst OPTIONAL_EXT_GROUP = String.raw`(?:\\.(?:ts|js|mts|mjs|cts|cjs))?`;\n\nexport interface BuildUrlRegexInput {\n readonly file: string;\n readonly remoteRoot: RemoteRootSetting;\n}\n\nexport function buildBreakpointUrlRegex(input: BuildUrlRegexInput): string {\n const normalized = normalizeRelative(input.file);\n const { stem, matchedExt } = dropExtension(normalized);\n const escapedStem = escapeRegExp(stem);\n const tail = matchedExt ? `${escapedStem}${EXT_GROUP}` : `${escapedStem}${OPTIONAL_EXT_GROUP}`;\n\n switch (input.remoteRoot.kind) {\n case \"none\": {\n return `(?:^|/)${tail}$`;\n }\n case \"literal\": {\n const escapedRoot = escapeRegExp(input.remoteRoot.value);\n return buildFileUrlRegex(escapedRoot, tail);\n }\n case \"regex\": {\n const rootPattern = normalizeRegexRootPattern(input.remoteRoot.pattern);\n return buildFileUrlRegex(rootPattern, tail);\n }\n }\n}\n","import { buildBreakpointUrlRegex } from \"../pathMapper.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { BreakpointHandle, RemoteRootSetting } from \"../types.js\";\n\nimport { asString, toResolvedLocations } from \"./conversions.js\";\nimport type { CdpSetBreakpointResult, InspectorSession, SetBreakpointInput } from \"./types.js\";\n\nexport async function setBreakpoint(\n session: InspectorSession,\n input: SetBreakpointInput,\n): Promise<BreakpointHandle> {\n const remoteRoot: RemoteRootSetting = input.remoteRoot ?? { kind: \"none\" };\n const urlRegex = buildBreakpointUrlRegex({ file: input.file, remoteRoot });\n const params: Record<string, unknown> = {\n lineNumber: input.line - 1,\n urlRegex,\n };\n if (input.condition !== undefined && input.condition.length > 0) {\n params[\"condition\"] = input.condition;\n }\n const result = await session.client.send<CdpSetBreakpointResult>(\n \"Debugger.setBreakpointByUrl\",\n params,\n );\n const breakpointId = asString(result.breakpointId);\n if (breakpointId.length === 0) {\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n `setBreakpointByUrl did not return a breakpointId for ${input.file}:${input.line.toString()}`,\n );\n }\n return {\n breakpointId,\n file: input.file,\n line: input.line,\n urlRegex,\n resolvedLocations: toResolvedLocations(result.locations),\n };\n}\n\nexport async function removeBreakpoint(\n session: InspectorSession,\n breakpointId: string,\n): Promise<void> {\n await session.client.send(\"Debugger.removeBreakpoint\", { breakpointId });\n}\n","import { randomBytes } from \"node:crypto\";\n\nconst SENTINEL_PREFIX = \"__CFI_LOG_\";\nconst SENTINEL_SUFFIX = \"__\";\n\nexport function buildLogpointCondition(sentinel: string, expression: string): string {\n return [\n \"(function(){\",\n `var s=${JSON.stringify(sentinel)};`,\n \"try{\",\n `var v=(${expression});`,\n \"var r=typeof v==='string'?v:JSON.stringify(v);\",\n \"console.log(s, r);\",\n \"}catch(e){\",\n \"console.log(s, '!err:'+(e&&e.message?e.message:String(e)));\",\n \"}\",\n \"return false;\",\n \"})()\",\n ].join(\"\");\n}\n\nexport function generateSentinel(): string {\n return `${SENTINEL_PREFIX}${randomBytes(8).toString(\"hex\")}${SENTINEL_SUFFIX}`;\n}\n\nexport { SENTINEL_PREFIX };\n","import type { BreakpointLocation } from \"../types.js\";\n\nexport interface LogpointEvent {\n readonly ts: string;\n readonly at: string;\n readonly value?: string;\n readonly error?: string;\n readonly raw?: string;\n}\n\ninterface CdpRemoteObject {\n type?: unknown;\n value?: unknown;\n}\n\nexport interface ConsoleAPICalledParams {\n type?: unknown;\n args?: unknown;\n timestamp?: unknown;\n}\n\nexport function asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readArg(arg: unknown, index: number): string | undefined {\n if (typeof arg !== \"object\" || arg === null) {\n return undefined;\n }\n const candidate = arg as CdpRemoteObject;\n if (candidate.type === \"string\" && typeof candidate.value === \"string\") {\n return candidate.value;\n }\n const isPrimitiveType =\n candidate.type === \"number\" ||\n candidate.type === \"boolean\" ||\n candidate.type === \"bigint\";\n const isPrimitiveValue =\n typeof candidate.value === \"number\" ||\n typeof candidate.value === \"boolean\" ||\n typeof candidate.value === \"bigint\";\n if (isPrimitiveType && isPrimitiveValue) {\n return String(candidate.value);\n }\n return index === 0 ? undefined : \"\";\n}\n\nexport function parseLogEvent(\n rawArgs: unknown,\n sentinel: string,\n location: BreakpointLocation,\n timestamp: number | undefined,\n): LogpointEvent | undefined {\n if (!Array.isArray(rawArgs) || rawArgs.length < 2) {\n return undefined;\n }\n const tag = readArg(rawArgs[0], 0);\n if (tag !== sentinel) {\n return undefined;\n }\n const payload = readArg(rawArgs[1], 1) ?? \"\";\n const ts = new Date(typeof timestamp === \"number\" ? timestamp : Date.now()).toISOString();\n const at = `${location.file}:${location.line.toString()}`;\n if (payload.startsWith(\"!err:\")) {\n return { ts, at, error: payload.slice(\"!err:\".length) };\n }\n return parsePayload(ts, at, payload);\n}\n\nfunction parsePayload(ts: string, at: string, payload: string): LogpointEvent {\n try {\n const parsed: unknown = JSON.parse(payload);\n if (typeof parsed === \"string\") {\n return { ts, at, value: parsed };\n }\n return { ts, at, value: JSON.stringify(parsed) };\n } catch {\n return { ts, at, value: payload, raw: payload };\n }\n}\n","import { removeBreakpoint, setBreakpoint } from \"../inspector/breakpoints.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport type { BreakpointHandle, BreakpointLocation, RemoteRootSetting } from \"../types.js\";\n\nimport { buildLogpointCondition, generateSentinel } from \"./condition.js\";\nimport { asString, parseLogEvent } from \"./events.js\";\nimport type { ConsoleAPICalledParams, LogpointEvent } from \"./events.js\";\n\nexport interface LogpointStreamOptions {\n readonly location: BreakpointLocation;\n readonly expression: string;\n readonly remoteRoot?: RemoteRootSetting;\n readonly durationMs?: number;\n readonly signal?: AbortSignal;\n readonly onEvent: (event: LogpointEvent) => void;\n readonly onBreakpointSet?: (handle: BreakpointHandle) => void;\n}\n\nexport interface LogpointStreamResult {\n readonly handle: BreakpointHandle;\n readonly sentinel: string;\n readonly emitted: number;\n readonly stoppedReason: \"duration\" | \"signal\" | \"transport-closed\";\n}\n\nexport async function streamLogpoint(\n session: InspectorSession,\n options: LogpointStreamOptions,\n): Promise<LogpointStreamResult> {\n const sentinel = generateSentinel();\n const condition = buildLogpointCondition(sentinel, options.expression);\n let emitted = 0;\n const offEvent = session.client.on(\"Runtime.consoleAPICalled\", (raw) => {\n const event = toLogpointEvent(raw, sentinel, options.location);\n if (event === undefined) {\n return;\n }\n emitted += 1;\n options.onEvent(event);\n });\n\n let handle: BreakpointHandle;\n try {\n handle = await setBreakpoint(session, {\n file: options.location.file,\n line: options.location.line,\n ...(options.remoteRoot === undefined ? {} : { remoteRoot: options.remoteRoot }),\n condition,\n });\n } catch (err: unknown) {\n offEvent();\n throw err;\n }\n options.onBreakpointSet?.(handle);\n\n try {\n const reason = await waitForStop(session, options);\n return { handle, sentinel, emitted, stoppedReason: reason };\n } finally {\n offEvent();\n await removeBreakpointBestEffort(session, handle.breakpointId);\n }\n}\n\nfunction toLogpointEvent(\n raw: unknown,\n sentinel: string,\n location: BreakpointLocation,\n): LogpointEvent | undefined {\n const params = raw as ConsoleAPICalledParams;\n if (asString(params.type) !== \"log\") {\n return undefined;\n }\n const ts = typeof params.timestamp === \"number\" ? params.timestamp : undefined;\n return parseLogEvent(params.args, sentinel, location, ts);\n}\n\nasync function removeBreakpointBestEffort(\n session: InspectorSession,\n breakpointId: string,\n): Promise<void> {\n try {\n await removeBreakpoint(session, breakpointId);\n } catch {\n // best-effort: tunnel may be gone\n }\n}\n\nasync function waitForStop(\n session: InspectorSession,\n options: LogpointStreamOptions,\n): Promise<LogpointStreamResult[\"stoppedReason\"]> {\n return await new Promise<LogpointStreamResult[\"stoppedReason\"]>((resolve) => {\n let settled = false;\n const finish = (reason: LogpointStreamResult[\"stoppedReason\"]): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n resolve(reason);\n };\n const timer = options.durationMs === undefined\n ? undefined\n : setTimeout(() => {\n finish(\"duration\");\n }, options.durationMs);\n const offClose = session.client.onClose(() => {\n finish(\"transport-closed\");\n });\n const onAbort = (): void => {\n finish(\"signal\");\n };\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted === true) {\n finish(\"signal\");\n }\n function cleanup(): void {\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n offClose();\n options.signal?.removeEventListener(\"abort\", onAbort);\n }\n });\n}\n","import process from \"node:process\";\n\nimport type { BreakpointHandle, PauseEvent, SnapshotCaptureResult, SnapshotResult } from \"../types.js\";\n\nexport function warnOnUnboundBreakpoints(handles: readonly BreakpointHandle[]): void {\n for (const handle of handles) {\n if (handle.resolvedLocations.length === 0) {\n process.stderr.write(\n `[cf-inspector] warning: breakpoint ${handle.file}:${handle.line.toString()} ` +\n `did not bind to any loaded script. Check the path or pass --remote-root. ` +\n `Use 'list-scripts' to inspect what V8 currently has loaded.\\n`,\n );\n }\n }\n}\n\nexport function roundDurationMs(durationMs: number): number {\n return Math.round(durationMs * 1000) / 1000;\n}\n\nexport function warnOnUnmatchedPause(pause: PauseEvent): void {\n const reason = pause.reason.length > 0 ? pause.reason : \"unknown\";\n process.stderr.write(\n `[cf-inspector] warning: target is paused by another debugger event ` +\n `(${reason} at ${formatPauseLocation(pause)}); waiting for it to resume...\\n`,\n );\n}\n\nexport function withPausedDuration(\n snapshot: SnapshotCaptureResult,\n pausedDurationMs: number | null,\n): SnapshotResult {\n return {\n reason: snapshot.reason,\n hitBreakpoints: snapshot.hitBreakpoints,\n capturedAt: snapshot.capturedAt,\n pausedDurationMs,\n ...(snapshot.topFrame === undefined ? {} : { topFrame: snapshot.topFrame }),\n captures: snapshot.captures,\n };\n}\n\nfunction formatPauseLocation(pause: PauseEvent): string {\n const top = pause.callFrames[0];\n if (top === undefined) {\n return \"(no call frame)\";\n }\n const url = top.url !== undefined && top.url.length > 0 ? top.url : \"(unknown)\";\n return `${url}:${(top.lineNumber + 1).toString()}:${(top.columnNumber + 1).toString()}`;\n}\n","import { performance } from \"node:perf_hooks\";\nimport process from \"node:process\";\n\nimport {\n resume,\n setBreakpoint,\n validateExpression,\n waitForPause,\n} from \"../../inspector/index.js\";\nimport { parseBreakpointSpec, parseRemoteRoot } from \"../../pathMapper.js\";\nimport { captureSnapshot } from \"../../snapshot/capture.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { BreakpointLocation, RemoteRootSetting, SnapshotResult } from \"../../types.js\";\nimport { parseCaptureList } from \"../captureParser.js\";\nimport { DEFAULT_BREAKPOINT_TIMEOUT_SEC } from \"../commandTypes.js\";\nimport type { SnapshotCommandOptions, Target } from \"../commandTypes.js\";\nimport { writeHumanSnapshot, writeJson } from \"../output.js\";\nimport { parsePositiveInt, resolveTarget, withSession } from \"../target.js\";\nimport {\n roundDurationMs,\n warnOnUnboundBreakpoints,\n warnOnUnmatchedPause,\n withPausedDuration,\n} from \"../warnings.js\";\n\ninterface PreparedSnapshotCommand {\n readonly target: Target;\n readonly breakpoints: readonly BreakpointLocation[];\n readonly captures: readonly string[];\n readonly remoteRoot: RemoteRootSetting;\n readonly timeoutMs: number;\n readonly maxValueLength?: number;\n readonly condition?: string;\n}\n\nexport async function handleSnapshot(opts: SnapshotCommandOptions): Promise<void> {\n const prepared = prepareSnapshotCommand(opts);\n const result = await runSnapshotCommand(prepared, opts);\n if (opts.json) {\n writeJson(result);\n } else {\n writeHumanSnapshot(result);\n }\n}\n\nfunction prepareSnapshotCommand(opts: SnapshotCommandOptions): PreparedSnapshotCommand {\n const target = resolveTarget(opts);\n if (opts.bp.length === 0) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n \"At least one --bp <file:line> is required.\",\n );\n }\n const timeoutSec = parsePositiveInt(opts.timeout, \"--timeout\") ?? DEFAULT_BREAKPOINT_TIMEOUT_SEC;\n const maxValueLength = parsePositiveInt(opts.maxValueLength, \"--max-value-length\");\n const condition = opts.condition !== undefined && opts.condition.trim().length > 0\n ? opts.condition.trim()\n : undefined;\n return {\n target,\n breakpoints: opts.bp.map((spec) => parseBreakpointSpec(spec)),\n captures: parseCaptureList(opts.capture),\n remoteRoot: parseRemoteRoot(opts.remoteRoot),\n timeoutMs: timeoutSec * 1000,\n ...(condition === undefined ? {} : { condition }),\n ...(maxValueLength === undefined ? {} : { maxValueLength }),\n };\n}\n\nasync function runSnapshotCommand(\n command: PreparedSnapshotCommand,\n opts: SnapshotCommandOptions,\n): Promise<SnapshotResult> {\n return await withSession(command.target, async (session): Promise<SnapshotResult> => {\n if (command.condition !== undefined) {\n await validateExpression(session, command.condition);\n }\n const handles = await Promise.all(\n command.breakpoints.map((bp) =>\n setBreakpoint(session, {\n file: bp.file,\n line: bp.line,\n remoteRoot: command.remoteRoot,\n ...(command.condition === undefined ? {} : { condition: command.condition }),\n }),\n ),\n );\n warnOnUnboundBreakpoints(handles);\n const pause = await waitForCommandPause(session, opts, handles, command.timeoutMs);\n const pausedStartedAt = pause.receivedAtMs ?? performance.now();\n const snapshot = await captureSnapshot(session, pause, {\n captures: command.captures,\n includeScopes: opts.includeScopes === true,\n ...(command.maxValueLength === undefined ? {} : { maxValueLength: command.maxValueLength }),\n });\n if (opts.keepPaused === true) {\n return withPausedDuration(snapshot, null);\n }\n return await resumeAfterSnapshot(session, snapshot, pausedStartedAt);\n });\n}\n\nasync function waitForCommandPause(\n session: Parameters<typeof waitForPause>[0],\n opts: SnapshotCommandOptions,\n handles: readonly Awaited<ReturnType<typeof setBreakpoint>>[],\n timeoutMs: number,\n): ReturnType<typeof waitForPause> {\n let warnedUnmatchedPause = false;\n return await waitForPause(session, {\n timeoutMs,\n breakpointIds: handles.map((h) => h.breakpointId),\n unmatchedPausePolicy: opts.failOnUnmatchedPause === true ? \"fail\" : \"wait-for-resume\",\n onUnmatchedPause: (unmatchedPause) => {\n if (warnedUnmatchedPause || opts.failOnUnmatchedPause === true) {\n return;\n }\n warnedUnmatchedPause = true;\n warnOnUnmatchedPause(unmatchedPause);\n },\n });\n}\n\nasync function resumeAfterSnapshot(\n session: Parameters<typeof resume>[0],\n snapshot: Awaited<ReturnType<typeof captureSnapshot>>,\n pausedStartedAt: number,\n): Promise<SnapshotResult> {\n try {\n await resume(session);\n return withPausedDuration(snapshot, roundDurationMs(performance.now() - pausedStartedAt));\n } catch {\n process.stderr.write(\n \"[cf-inspector] warning: Debugger.resume failed after snapshot; pausedDurationMs is unknown.\\n\",\n );\n return withPausedDuration(snapshot, null);\n }\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { CfInspectorError } from \"../types.js\";\nimport type { PauseEvent } from \"../types.js\";\n\nimport { pauseDetail, toPauseEvent } from \"./conversions.js\";\nimport type { CdpPauseParams, InspectorSession, WaitForPauseOptions } from \"./types.js\";\n\nfunction pauseMatches(pause: PauseEvent, breakpointIds: readonly string[] | undefined): boolean {\n if (breakpointIds === undefined || breakpointIds.length === 0) {\n return true;\n }\n return pause.hitBreakpoints.some((id) => breakpointIds.includes(id));\n}\n\nfunction remainingUntil(deadlineMs: number): number {\n return Math.max(0, deadlineMs - performance.now());\n}\n\nfunction hasResumedSincePause(session: InspectorSession, pause: PauseEvent): boolean {\n const pauseAt = pause.receivedAtMs;\n const resumedAt = session.debuggerState.lastResumedAtMs;\n return pauseAt !== undefined && resumedAt !== undefined && resumedAt >= pauseAt;\n}\n\nfunction throwBreakpointTimeout(timeoutMs: number): never {\n throw new CfInspectorError(\n \"BREAKPOINT_NOT_HIT\",\n `Timed out waiting for matching Debugger.paused after ${timeoutMs.toString()}ms`,\n );\n}\n\nfunction throwUnrelatedPauseTimeout(pause: PauseEvent, timeoutMs: number): never {\n throw new CfInspectorError(\n \"UNRELATED_PAUSE_TIMEOUT\",\n `Target stayed paused by another debugger event before this command's breakpoint could hit within ${timeoutMs.toString()}ms`,\n pauseDetail(pause),\n );\n}\n\nasync function waitForUnmatchedPauseToResume(\n session: InspectorSession,\n pause: PauseEvent,\n deadlineMs: number,\n timeoutMs: number,\n): Promise<void> {\n if (hasResumedSincePause(session, pause)) {\n return;\n }\n const remainingMs = remainingUntil(deadlineMs);\n if (remainingMs <= 0) {\n throwUnrelatedPauseTimeout(pause, timeoutMs);\n }\n try {\n await session.client.waitFor(\"Debugger.resumed\", { timeoutMs: remainingMs });\n session.debuggerState.lastResumedAtMs = performance.now();\n } catch (err: unknown) {\n if (err instanceof CfInspectorError && err.code === \"BREAKPOINT_NOT_HIT\") {\n throwUnrelatedPauseTimeout(pause, timeoutMs);\n }\n throw err;\n }\n}\n\nasync function handleUnmatchedPause(\n session: InspectorSession,\n pause: PauseEvent,\n options: WaitForPauseOptions,\n deadlineMs: number,\n): Promise<void> {\n if (options.unmatchedPausePolicy === \"fail\") {\n throw new CfInspectorError(\n \"UNRELATED_PAUSE\",\n \"Target paused before this command's breakpoint was reached\",\n pauseDetail(pause),\n );\n }\n if (hasResumedSincePause(session, pause)) {\n return;\n }\n options.onUnmatchedPause?.(pause);\n await waitForUnmatchedPauseToResume(session, pause, deadlineMs, options.timeoutMs);\n}\n\nexport async function waitForPause(\n session: InspectorSession,\n options: WaitForPauseOptions,\n): Promise<PauseEvent> {\n const deadlineMs = performance.now() + options.timeoutMs;\n const buffer = session.pauseBuffer;\n while (buffer.length > 0 || remainingUntil(deadlineMs) > 0) {\n while (buffer.length > 0) {\n const buffered = buffer.shift();\n if (buffered === undefined) {\n continue;\n }\n if (pauseMatches(buffered, options.breakpointIds)) {\n return buffered;\n }\n await handleUnmatchedPause(session, buffered, options, deadlineMs);\n }\n const pause = await waitForLivePause(session, options, deadlineMs);\n if (pauseMatches(pause, options.breakpointIds)) {\n return pause;\n }\n await handleUnmatchedPause(session, pause, options, deadlineMs);\n }\n throwBreakpointTimeout(options.timeoutMs);\n}\n\nasync function waitForLivePause(\n session: InspectorSession,\n options: WaitForPauseOptions,\n deadlineMs: number,\n): Promise<PauseEvent> {\n const remainingMs = remainingUntil(deadlineMs);\n if (remainingMs <= 0) {\n throwBreakpointTimeout(options.timeoutMs);\n }\n session.pauseWaitGate.active = true;\n let receivedAtMs: number | undefined;\n let params: CdpPauseParams;\n try {\n params = await session.client.waitFor<CdpPauseParams>(\"Debugger.paused\", {\n timeoutMs: remainingMs,\n predicate: (): boolean => {\n receivedAtMs = performance.now();\n return true;\n },\n });\n } finally {\n session.pauseWaitGate.active = false;\n }\n return toPauseEvent(params, receivedAtMs ?? performance.now(), session.scripts);\n}\n","import { CfInspectorError } from \"../types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nexport const DEFAULT_MAX_VALUE_LENGTH = 4096;\n\nexport function isPrimitive(value: unknown): value is string | number | boolean | bigint | symbol {\n const t = typeof value;\n return t === \"string\" || t === \"number\" || t === \"boolean\" || t === \"bigint\" || t === \"symbol\";\n}\n\nexport function formatPrimitive(value: string | number | boolean | bigint | symbol): string {\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"bigint\") {\n return `${value.toString()}n`;\n }\n return String(value);\n}\n\nexport function resolveMaxValueLength(value: number | undefined): number {\n if (value === undefined) {\n return DEFAULT_MAX_VALUE_LENGTH;\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new CfInspectorError(\n \"INVALID_ARGUMENT\",\n `Invalid maxValueLength: ${value.toString()} — expected a positive integer`,\n );\n }\n return value;\n}\n\nexport function limitValueLength(raw: string, maxValueLength = DEFAULT_MAX_VALUE_LENGTH): string {\n if (raw.length <= maxValueLength) {\n return raw;\n }\n return `${raw.slice(0, maxValueLength)}...`;\n}\n\nfunction parseQuotedString(value: string): string {\n try {\n const parsed: unknown = JSON.parse(value);\n return typeof parsed === \"string\" ? parsed : value;\n } catch {\n return value;\n }\n}\n\nfunction parseNumericIndex(name: string): number | undefined {\n const parsed = Number.parseInt(name, 10);\n if (!Number.isInteger(parsed) || parsed < 0 || parsed.toString() !== name) {\n return undefined;\n }\n return parsed;\n}\n\nfunction scalarFromVariable(variable: VariableSnapshot): unknown {\n const value = variable.value;\n if (variable.type === \"string\") {\n return parseQuotedString(value);\n }\n if (variable.type === \"number\") {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : value;\n }\n if (variable.type === \"boolean\") {\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n }\n if (variable.type === \"undefined\") {\n return \"[undefined]\";\n }\n if (variable.type === \"bigint\") {\n return value;\n }\n return value === \"null\" ? null : value;\n}\n\nexport function toStructuredValue(variable: VariableSnapshot): unknown {\n const children = variable.children;\n if (children === undefined || children.length === 0) {\n return scalarFromVariable(variable);\n }\n const indexed = children.flatMap((child): readonly [number, unknown][] => {\n const index = parseNumericIndex(child.name);\n if (index === undefined) {\n return [];\n }\n return [[index, toStructuredValue(child)]];\n });\n if (indexed.length > 0) {\n const maxIndex = Math.max(...indexed.map(([index]) => index));\n const out = Array.from({ length: maxIndex + 1 }, () => null as unknown);\n for (const [index, entry] of indexed) {\n out[index] = entry;\n }\n return out;\n }\n const out: Record<string, unknown> = {};\n for (const child of children) {\n out[child.name] = toStructuredValue(child);\n }\n return out;\n}\n","import type { CdpEvalResult } from \"../inspector/types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n DEFAULT_MAX_VALUE_LENGTH,\n formatPrimitive,\n isPrimitive,\n limitValueLength,\n} from \"./values.js\";\n\nexport function evalResultToCaptured(\n expression: string,\n result: CdpEvalResult,\n maxValueLength = DEFAULT_MAX_VALUE_LENGTH,\n): CapturedExpression {\n if (result.exceptionDetails !== undefined) {\n return { expression, error: readEvalError(result, maxValueLength) };\n }\n const inner = result.result;\n if (!inner) {\n return { expression, error: \"no result returned\" };\n }\n const type = typeof inner.type === \"string\" ? inner.type : undefined;\n const buildCaptured = (rendered: string): CapturedExpression => {\n const sanitized = limitValueLength(rendered, maxValueLength);\n const base: CapturedExpression = { expression, value: sanitized };\n return type === undefined ? base : { ...base, type };\n };\n\n if (type === \"string\" && typeof inner.value === \"string\") {\n return buildCaptured(JSON.stringify(inner.value));\n }\n if ((type === \"number\" || type === \"boolean\" || type === \"bigint\") && isPrimitive(inner.value)) {\n return buildCaptured(formatPrimitive(inner.value));\n }\n if (typeof inner.description === \"string\") {\n return buildCaptured(inner.description);\n }\n if (isPrimitive(inner.value)) {\n return buildCaptured(formatPrimitive(inner.value));\n }\n return buildCaptured(\"undefined\");\n}\n\nfunction readEvalError(result: CdpEvalResult, maxValueLength: number): string {\n const text =\n typeof result.exceptionDetails?.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails?.text === \"string\" ? result.exceptionDetails.text : \"evaluation failed\");\n return limitValueLength(text, maxValueLength);\n}\n","import { getProperties } from \"../inspector/runtime.js\";\nimport type { CdpProperty, InspectorSession } from \"../inspector/types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nimport { formatPrimitive, isPrimitive, limitValueLength } from \"./values.js\";\n\nexport const MAX_SCOPE_VARIABLES = 20;\nexport const MAX_CHILD_VARIABLES = 8;\nexport const MAX_VARIABLE_DEPTH = 2;\n\ninterface DescribedProperty {\n value: string;\n type?: string;\n objectId?: string;\n}\n\nfunction buildDescribed(value: string, type: string | undefined, objectId?: string): DescribedProperty {\n const base: DescribedProperty = { value };\n if (type !== undefined) {\n base.type = type;\n }\n if (objectId !== undefined) {\n base.objectId = objectId;\n }\n return base;\n}\n\nexport function describeProperty(prop: CdpProperty): DescribedProperty {\n const value = prop.value;\n if (value === undefined) {\n return { value: \"undefined\" };\n }\n const type = typeof value.type === \"string\" ? value.type : undefined;\n const objectId = typeof value.objectId === \"string\" ? value.objectId : undefined;\n if (type === \"undefined\") {\n return buildDescribed(\"undefined\", type);\n }\n if (type === \"string\" && typeof value.value === \"string\") {\n return buildDescribed(JSON.stringify(value.value), type);\n }\n if (\n (type === \"number\" || type === \"boolean\" || type === \"bigint\" || type === \"symbol\") &&\n isPrimitive(value.value)\n ) {\n return buildDescribed(formatPrimitive(value.value), type);\n }\n if (typeof value.description === \"string\") {\n return buildDescribed(value.description, type, objectId);\n }\n if (isPrimitive(value.value)) {\n return buildDescribed(formatPrimitive(value.value), type);\n }\n if (objectId === undefined) {\n return buildDescribed(\"undefined\", type);\n }\n return buildDescribed(\"[object]\", type, objectId);\n}\n\nfunction isExpandable(type: string | undefined): boolean {\n return type === \"object\" || type === \"function\";\n}\n\nexport async function captureProperties(\n session: InspectorSession,\n objectId: string,\n limit: number,\n depth: number,\n maxValueLength: number,\n): Promise<readonly VariableSnapshot[]> {\n const properties = await getProperties(session, objectId);\n const limited = properties.slice(0, limit);\n const variables = await Promise.all(\n limited.map(async (prop): Promise<VariableSnapshot> => {\n return await captureProperty(session, prop, depth, maxValueLength);\n }),\n );\n return variables;\n}\n\nasync function captureProperty(\n session: InspectorSession,\n prop: CdpProperty,\n depth: number,\n maxValueLength: number,\n): Promise<VariableSnapshot> {\n const name = typeof prop.name === \"string\" ? prop.name : \"?\";\n const described = describeProperty(prop);\n const children = await capturePropertyChildren(session, described, depth, maxValueLength);\n const sanitizedValue = limitValueLength(described.value, maxValueLength);\n const base: VariableSnapshot = { name, value: sanitizedValue };\n const withType = described.type === undefined ? base : { ...base, type: described.type };\n return children === undefined ? withType : { ...withType, children };\n}\n\nasync function capturePropertyChildren(\n session: InspectorSession,\n described: DescribedProperty,\n depth: number,\n maxValueLength: number,\n): Promise<readonly VariableSnapshot[] | undefined> {\n if (depth <= 0 || described.objectId === undefined || !isExpandable(described.type)) {\n return undefined;\n }\n try {\n const nested = await captureProperties(\n session,\n described.objectId,\n MAX_CHILD_VARIABLES,\n depth - 1,\n maxValueLength,\n );\n return nested.length > 0 ? nested : undefined;\n } catch {\n return undefined;\n }\n}\n","import type { CdpEvalResult, InspectorSession } from \"../inspector/types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n captureProperties,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport { limitValueLength, toStructuredValue } from \"./values.js\";\n\nfunction objectIdFromEvalResult(result: CdpEvalResult): string | undefined {\n const inner = result.result;\n if (inner?.type !== \"object\") {\n return undefined;\n }\n const objectId = inner.objectId;\n if (typeof objectId !== \"string\" || objectId.length === 0) {\n return undefined;\n }\n return objectId;\n}\n\nasync function renderObjectCapture(\n session: InspectorSession,\n objectId: string,\n maxValueLength: number,\n): Promise<string | undefined> {\n try {\n const properties = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n const structured: Record<string, unknown> = {};\n for (const variable of properties) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return JSON.stringify(structured);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeRenderedObjectCapture(rendered: string, original: string): string | undefined {\n if (rendered === \"{}\" && original !== \"Object\") {\n return undefined;\n }\n if (original.startsWith(\"Array(\") && rendered === \"{\\\"length\\\":0}\") {\n return \"[]\";\n }\n return rendered;\n}\n\nexport async function withSerializedObjectCapture(\n session: InspectorSession,\n expression: string,\n evalResult: CdpEvalResult,\n captured: CapturedExpression,\n maxValueLength: number,\n): Promise<CapturedExpression> {\n if (captured.error !== undefined || captured.value === undefined) {\n return captured;\n }\n const objectId = objectIdFromEvalResult(evalResult);\n if (objectId === undefined) {\n return captured;\n }\n const rendered = await renderObjectCapture(session, objectId, maxValueLength);\n if (rendered === undefined) {\n return captured;\n }\n const normalized = normalizeRenderedObjectCapture(rendered, captured.value);\n if (normalized === undefined) {\n return captured;\n }\n const value = limitValueLength(normalized, maxValueLength);\n return captured.type === undefined\n ? { expression, value }\n : { expression, value, type: captured.type };\n}\n","import type { InspectorSession } from \"../inspector/types.js\";\nimport type { CallFrameInfo, ScopeSnapshot } from \"../types.js\";\n\nimport {\n captureProperties,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\n\nconst MAX_SCOPES = 3;\n\nconst PRIORITY_BY_TYPE: Readonly<Record<string, number>> = {\n local: 0,\n arguments: 1,\n block: 2,\n closure: 3,\n catch: 4,\n with: 5,\n module: 6,\n script: 7,\n};\n\nexport function selectScopes(scopeChain: CallFrameInfo[\"scopeChain\"]): CallFrameInfo[\"scopeChain\"] {\n const eligible = scopeChain.filter((scope) => scope.objectId !== undefined && scope.type !== \"global\");\n return [...eligible]\n .sort((a, b) => priorityOf(a.type) - priorityOf(b.type))\n .slice(0, MAX_SCOPES);\n}\n\nfunction priorityOf(type: string): number {\n return PRIORITY_BY_TYPE[type] ?? Number.MAX_SAFE_INTEGER;\n}\n\nexport async function captureScopes(\n session: InspectorSession,\n frame: CallFrameInfo,\n maxValueLength: number,\n): Promise<readonly ScopeSnapshot[]> {\n const scopes = selectScopes(frame.scopeChain);\n return await Promise.all(\n scopes.map(async (scope): Promise<ScopeSnapshot> => {\n const objectId = scope.objectId;\n if (objectId === undefined) {\n return { type: scope.type, variables: [] };\n }\n try {\n const variables = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n return { type: scope.type, variables };\n } catch {\n return { type: scope.type, variables: [] };\n }\n }),\n );\n}\n","import { evaluateOnFrame } from \"../inspector/runtime.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport type {\n CapturedExpression,\n FrameSnapshot,\n PauseEvent,\n SnapshotCaptureResult,\n} from \"../types.js\";\n\nimport { evalResultToCaptured } from \"./evaluation.js\";\nimport { withSerializedObjectCapture } from \"./objects.js\";\nimport { describeProperty } from \"./properties.js\";\nimport { captureScopes, selectScopes } from \"./scopes.js\";\nimport {\n DEFAULT_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n} from \"./values.js\";\n\nexport interface CaptureSnapshotOptions {\n readonly captures?: readonly string[];\n readonly includeScopes?: boolean;\n readonly maxValueLength?: number;\n}\n\nexport async function captureSnapshot(\n session: InspectorSession,\n pause: PauseEvent,\n options: CaptureSnapshotOptions = {},\n): Promise<SnapshotCaptureResult> {\n const maxValueLength = resolveMaxValueLength(options.maxValueLength);\n const top = pause.callFrames[0];\n let topFrame: FrameSnapshot | undefined;\n let captures: CapturedExpression[] = [];\n if (top) {\n topFrame = {\n functionName: top.functionName,\n ...(top.url === undefined ? {} : { url: top.url }),\n line: top.lineNumber + 1,\n column: top.columnNumber + 1,\n };\n if (options.includeScopes === true) {\n const scopes = await captureScopes(session, top, maxValueLength);\n topFrame = { ...topFrame, scopes };\n }\n captures = await captureExpressions(session, top.callFrameId, options.captures, maxValueLength);\n }\n return {\n reason: pause.reason,\n hitBreakpoints: pause.hitBreakpoints,\n capturedAt: new Date().toISOString(),\n ...(topFrame === undefined ? {} : { topFrame }),\n captures,\n };\n}\n\nasync function captureExpressions(\n session: InspectorSession,\n callFrameId: string,\n captures: readonly string[] | undefined,\n maxValueLength: number,\n): Promise<CapturedExpression[]> {\n if (captures === undefined || captures.length === 0) {\n return [];\n }\n return await Promise.all(\n captures.map(async (expression): Promise<CapturedExpression> => {\n return await captureExpression(session, callFrameId, expression, maxValueLength);\n }),\n );\n}\n\nasync function captureExpression(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n maxValueLength: number,\n): Promise<CapturedExpression> {\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression);\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n return await withSerializedObjectCapture(session, expression, result, captured, maxValueLength);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return { expression, error: limitValueLength(message, maxValueLength) };\n }\n}\n\nexport const internalsForTesting = {\n DEFAULT_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n describeProperty,\n selectScopes,\n evalResultToCaptured,\n};\n","export function parseCaptureList(raw: string | undefined): readonly string[] {\n if (raw === undefined || raw.trim().length === 0) {\n return [];\n }\n return splitCaptureExpressions(raw);\n}\n\ntype QuoteChar = \"'\" | \"\\\"\" | \"`\";\n\ninterface CaptureSplitState {\n quote: QuoteChar | undefined;\n escaped: boolean;\n parenDepth: number;\n bracketDepth: number;\n braceDepth: number;\n start: number;\n readonly pieces: string[];\n}\n\nfunction isQuoteChar(value: string): value is QuoteChar {\n return value === \"'\" || value === \"\\\"\" || value === \"`\";\n}\n\nfunction consumeQuotedChar(state: CaptureSplitState, char: string): boolean {\n if (state.quote === undefined) {\n return false;\n }\n if (state.escaped) {\n state.escaped = false;\n return true;\n }\n if (char === \"\\\\\") {\n state.escaped = true;\n return true;\n }\n if (char === state.quote) {\n state.quote = undefined;\n }\n return true;\n}\n\nfunction updateCaptureDepth(state: CaptureSplitState, char: string): void {\n if (char === \"(\") {\n state.parenDepth += 1;\n } else if (char === \")\") {\n state.parenDepth = Math.max(0, state.parenDepth - 1);\n } else if (char === \"[\") {\n state.bracketDepth += 1;\n } else if (char === \"]\") {\n state.bracketDepth = Math.max(0, state.bracketDepth - 1);\n } else if (char === \"{\") {\n state.braceDepth += 1;\n } else if (char === \"}\") {\n state.braceDepth = Math.max(0, state.braceDepth - 1);\n }\n}\n\nfunction isTopLevel(state: CaptureSplitState): boolean {\n return state.parenDepth === 0 && state.bracketDepth === 0 && state.braceDepth === 0;\n}\n\nfunction appendCapturePiece(raw: string, state: CaptureSplitState, end: number): void {\n const piece = raw.slice(state.start, end).trim();\n if (piece.length > 0) {\n state.pieces.push(piece);\n }\n}\n\nfunction splitCaptureExpressions(raw: string): readonly string[] {\n const state: CaptureSplitState = {\n escaped: false,\n parenDepth: 0,\n bracketDepth: 0,\n braceDepth: 0,\n quote: undefined,\n start: 0,\n pieces: [],\n };\n for (let idx = 0; idx < raw.length; idx += 1) {\n const char = raw.charAt(idx);\n if (consumeQuotedChar(state, char)) {\n continue;\n }\n if (isQuoteChar(char)) {\n state.quote = char;\n continue;\n }\n updateCaptureDepth(state, char);\n if (char === \",\" && isTopLevel(state)) {\n appendCapturePiece(raw, state, idx);\n state.start = idx + 1;\n }\n }\n appendCapturePiece(raw, state, raw.length);\n return state.pieces;\n}\n"],"mappings":"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","names":["wrapped","process","process","process","process","process","process","process","process","asString","asString","process","process","performance","process","performance","performance","out","performance","process","process"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/cdp/wsTransport.ts","../src/cli.ts","../src/cli/program.ts","../src/cli/commands/attach.ts","../src/inspector/discovery.ts","../src/cli/output.ts","../src/cf/tunnel.ts","../src/inspector/session.ts","../src/cdp/client.ts","../src/inspector/conversions.ts","../src/cli/target.ts","../src/cli/commandTypes.ts","../src/cli/commands/eval.ts","../src/inspector/runtime.ts","../src/cli/commands/exception.ts","../src/pathMapper.ts","../src/inspector/breakpoints.ts","../src/inspector/pause.ts","../src/snapshot/values.ts","../src/snapshot/evaluation.ts","../src/snapshot/properties.ts","../src/snapshot/exception.ts","../src/snapshot/objects.ts","../src/snapshot/scopes.ts","../src/snapshot/stack.ts","../src/snapshot/capture.ts","../src/cli/captureParser.ts","../src/cli/warnings.ts","../src/cli/commands/listScripts.ts","../src/cli/commands/log.ts","../src/logpoint/stream.ts","../src/logpoint/condition.ts","../src/logpoint/events.ts","../src/cli/signals.ts","../src/cli/commands/snapshot.ts","../src/cli/commands/watch.ts"],"sourcesContent":["export type CfInspectorErrorCode =\n | \"INVALID_ARGUMENT\"\n | \"INVALID_BREAKPOINT\"\n | \"INVALID_REMOTE_ROOT\"\n | \"INVALID_EXPRESSION\"\n | \"INVALID_HIT_COUNT\"\n | \"INVALID_PAUSE_TYPE\"\n | \"BREAKPOINT_DID_NOT_BIND\"\n | \"INSPECTOR_DISCOVERY_FAILED\"\n | \"INSPECTOR_CONNECTION_FAILED\"\n | \"CDP_REQUEST_FAILED\"\n | \"BREAKPOINT_NOT_HIT\"\n | \"UNRELATED_PAUSE\"\n | \"UNRELATED_PAUSE_TIMEOUT\"\n | \"EVALUATION_FAILED\"\n | \"MISSING_TARGET\"\n | \"ABORTED\";\n\nexport class CfInspectorError extends Error {\n public readonly code: CfInspectorErrorCode;\n public readonly detail?: string;\n\n public constructor(code: CfInspectorErrorCode, message: string, detail?: string) {\n super(message);\n this.name = \"CfInspectorError\";\n this.code = code;\n if (detail !== undefined) {\n this.detail = detail;\n }\n }\n}\n\nexport interface BreakpointLocation {\n readonly file: string;\n readonly line: number;\n}\n\nexport interface RemoteRootLiteral {\n readonly kind: \"literal\";\n readonly value: string;\n}\n\nexport interface RemoteRootRegex {\n readonly kind: \"regex\";\n readonly pattern: string;\n readonly flags: string;\n readonly regex: RegExp;\n}\n\nexport interface RemoteRootNone {\n readonly kind: \"none\";\n}\n\nexport type RemoteRootSetting = RemoteRootLiteral | RemoteRootRegex | RemoteRootNone;\n\nexport interface BreakpointHandle {\n readonly breakpointId: string;\n readonly file: string;\n readonly line: number;\n readonly urlRegex: string;\n readonly resolvedLocations: readonly ResolvedLocation[];\n}\n\nexport interface ResolvedLocation {\n readonly scriptId: string;\n readonly url?: string;\n readonly lineNumber: number;\n readonly columnNumber?: number;\n}\n\nexport interface CallFrameInfo {\n readonly callFrameId: string;\n readonly functionName: string;\n readonly url?: string;\n readonly lineNumber: number;\n readonly columnNumber: number;\n readonly scopeChain: readonly ScopeInfo[];\n}\n\nexport interface ScopeInfo {\n readonly type: string;\n readonly objectId?: string;\n readonly name?: string;\n}\n\nexport interface PauseEvent {\n readonly reason: string;\n readonly hitBreakpoints: readonly string[];\n readonly callFrames: readonly CallFrameInfo[];\n readonly receivedAtMs?: number;\n readonly data?: unknown;\n}\n\nexport interface VariableSnapshot {\n readonly name: string;\n readonly value: string;\n readonly type?: string;\n readonly children?: readonly VariableSnapshot[];\n}\n\nexport interface ScopeSnapshot {\n readonly type: string;\n readonly variables: readonly VariableSnapshot[];\n}\n\nexport interface FrameSnapshot {\n readonly functionName: string;\n readonly url?: string;\n readonly line: number;\n readonly column: number;\n readonly scopes?: readonly ScopeSnapshot[];\n readonly captures?: readonly CapturedExpression[];\n}\n\nexport interface CapturedExpression {\n readonly expression: string;\n readonly value?: string;\n readonly type?: string;\n readonly error?: string;\n}\n\nexport interface ExceptionSnapshot {\n readonly value?: string;\n readonly type?: string;\n readonly description?: string;\n readonly error?: string;\n}\n\nexport interface SnapshotCaptureResult {\n readonly reason: string;\n readonly hitBreakpoints: readonly string[];\n readonly capturedAt: string;\n readonly topFrame?: FrameSnapshot;\n readonly captures: readonly CapturedExpression[];\n readonly stack?: readonly FrameSnapshot[];\n readonly exception?: ExceptionSnapshot;\n}\n\nexport interface SnapshotResult extends SnapshotCaptureResult {\n readonly pausedDurationMs: number | null;\n}\n\nexport interface WatchEvent {\n readonly ts: string;\n readonly at: string;\n readonly hit: number;\n readonly reason: string;\n readonly hitBreakpoints: readonly string[];\n readonly topFrame?: FrameSnapshot;\n readonly captures: readonly CapturedExpression[];\n readonly stack?: readonly FrameSnapshot[];\n readonly exception?: ExceptionSnapshot;\n}\n\nexport interface ScriptInfo {\n readonly scriptId: string;\n readonly url: string;\n}\n\nexport interface InspectorConnectOptions {\n readonly port: number;\n readonly host?: string;\n readonly connectTimeoutMs?: number;\n}\n\nexport type CdpMessage =\n | { readonly id: number; readonly result: unknown }\n | { readonly id: number; readonly error: { readonly code: number; readonly message: string } }\n | { readonly method: string; readonly params: unknown };\n","import { WebSocket } from \"ws\";\n\nimport { CfInspectorError } from \"../types.js\";\n\nimport type { CdpTransport, CdpTransportEventMap } from \"./client.js\";\n\nexport interface WsTransportOptions {\n readonly connectTimeoutMs?: number;\n}\n\nexport async function wsTransportFactory(\n url: string,\n options: WsTransportOptions = {},\n): Promise<CdpTransport> {\n const socket = new WebSocket(url, { perMessageDeflate: false });\n await waitForOpen(socket, url, options.connectTimeoutMs);\n // Keyed by `(event, listener)` — registering the same listener function for\n // two different events must produce two distinct wrappers; otherwise `off`\n // for one event would unsubscribe the wrong wrapper.\n const wrappers = new Map<keyof CdpTransportEventMap, WeakMap<object, (...args: unknown[]) => void>>();\n\n function wrappersFor(event: keyof CdpTransportEventMap): WeakMap<object, (...args: unknown[]) => void> {\n const existing = wrappers.get(event);\n if (existing !== undefined) {\n return existing;\n }\n const created = new WeakMap<object, (...args: unknown[]) => void>();\n wrappers.set(event, created);\n return created;\n }\n\n return {\n send(payload: string): void {\n socket.send(payload);\n },\n close(): void {\n socket.close();\n },\n get readyState(): number {\n return socket.readyState;\n },\n on(event, listener): void {\n const wrapped = wrapListener(event, listener);\n wrappersFor(event).set(listener as object, wrapped);\n socket.on(event, wrapped);\n },\n off(event, listener): void {\n const wrapped = wrappersFor(event).get(listener as object);\n if (!wrapped) {\n return;\n }\n socket.off(event, wrapped);\n },\n };\n}\n\nasync function waitForOpen(socket: WebSocket, url: string, timeoutMs: number | undefined): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const cleanup = (): void => {\n socket.off(\"open\", onOpen);\n socket.off(\"error\", onError);\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n };\n const onOpen = (): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n resolve();\n };\n const onError = (err: Error): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(\n new CfInspectorError(\n \"INSPECTOR_CONNECTION_FAILED\",\n `Failed to connect to inspector at ${url}: ${err.message}`,\n ),\n );\n };\n const timer = timeoutMs === undefined ? undefined : setTimeout(() => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n // Absorb the 'error' event that ws emits asynchronously when terminate()\n // races an in-flight handshake. Without this swallower the post-cleanup\n // error becomes an unhandled exception.\n socket.on(\"error\", () => {\n // swallow\n });\n try {\n socket.terminate();\n } catch {\n // best-effort\n }\n reject(\n new CfInspectorError(\n \"INSPECTOR_CONNECTION_FAILED\",\n `WebSocket handshake to ${url} timed out after ${timeoutMs.toString()}ms`,\n ),\n );\n }, timeoutMs);\n socket.once(\"open\", onOpen);\n socket.once(\"error\", onError);\n });\n}\n\nfunction wrapListener<E extends keyof CdpTransportEventMap>(\n event: E,\n listener: CdpTransportEventMap[E],\n): (...args: unknown[]) => void {\n if (event === \"message\") {\n const wrapped = (data: Buffer): void => {\n (listener as CdpTransportEventMap[\"message\"])(data.toString(\"utf8\"));\n };\n return wrapped as (...args: unknown[]) => void;\n }\n if (event === \"close\") {\n const wrapped = (): void => {\n (listener as CdpTransportEventMap[\"close\"])();\n };\n return wrapped as (...args: unknown[]) => void;\n }\n const wrapped = (err: Error): void => {\n (listener as CdpTransportEventMap[\"error\"])(err);\n };\n return wrapped as (...args: unknown[]) => void;\n}\n","import process from \"node:process\";\n\nimport { main } from \"./cli/program.js\";\nimport { CfInspectorError } from \"./types.js\";\n\ntry {\n await main(process.argv);\n} catch (err: unknown) {\n if (err instanceof CfInspectorError) {\n process.stderr.write(`Error [${err.code}]: ${err.message}\\n`);\n if (err.detail !== undefined) {\n process.stderr.write(` detail: ${err.detail}\\n`);\n }\n process.exit(1);\n }\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(`Error: ${message}\\n`);\n process.exit(1);\n}\n","import { Command } from \"commander\";\n\nimport type {\n AttachCommandOptions,\n EvalCommandOptions,\n ExceptionCommandOptions,\n ListScriptsCommandOptions,\n LogCommandOptions,\n SnapshotCommandOptions,\n WatchCommandOptions,\n} from \"./commandTypes.js\";\nimport { handleAttach } from \"./commands/attach.js\";\nimport { handleEval } from \"./commands/eval.js\";\nimport { handleException } from \"./commands/exception.js\";\nimport { handleListScripts } from \"./commands/listScripts.js\";\nimport { handleLog } from \"./commands/log.js\";\nimport { handleSnapshot } from \"./commands/snapshot.js\";\nimport { handleWatch } from \"./commands/watch.js\";\n\nfunction applyTargetOptions(cmd: Command): Command {\n return cmd\n .option(\"--port <number>\", \"Local port the inspector or tunnel listens on\")\n .option(\"--host <host>\", \"Hostname (default: 127.0.0.1)\", \"127.0.0.1\")\n .option(\"--region <key>\", \"CF region key (e.g. eu10)\")\n .option(\"--org <name>\", \"CF org name\")\n .option(\"--space <name>\", \"CF space name\")\n .option(\"--app <name>\", \"CF app name\")\n .option(\"--cf-timeout <seconds>\", \"Timeout for CF tunnel readiness in seconds\");\n}\n\nconst collectStrings = (value: string, prev: readonly string[] = []): readonly string[] => [\n ...prev,\n value,\n];\n\nexport async function main(argv: readonly string[]): Promise<void> {\n const program = new Command();\n program\n .name(\"cf-inspector\")\n .description(\"Drive a Node.js inspector from the command line — set breakpoints, capture snapshots, evaluate expressions\");\n\n registerSnapshot(program);\n registerLog(program);\n registerWatch(program);\n registerException(program);\n registerEval(program);\n registerListScripts(program);\n registerAttach(program);\n\n await program.parseAsync([...argv]);\n}\n\nfunction registerSnapshot(program: Command): void {\n applyTargetOptions(\n program.command(\"snapshot\").description(\"Set a breakpoint, wait for it to hit, capture expressions, and resume\"),\n )\n .option(\"--bp <file:line>\", \"Breakpoint location (repeatable; first hit wins), e.g. src/handler.ts:42\", collectStrings, [] as readonly string[])\n .option(\"--capture <expr,…>\", \"Top-level comma-separated expressions to evaluate in the paused frame\")\n .option(\"--timeout <seconds>\", \"How long to wait for the breakpoint to hit (default: 30)\")\n .option(\"--max-value-length <chars>\", \"Maximum characters per captured value before truncation (default: 4096)\")\n .option(\"--remote-root <value>\", \"Path-mapping anchor: literal path or regex:<pattern> / /pattern/flags\")\n .option(\"--condition <expr>\", \"Only pause when this JS expression evaluates truthy in the paused frame\")\n .option(\"--hit-count <n>\", \"Only pause after the breakpoint has been hit N or more times\")\n .option(\"--stack-depth <n>\", \"Walk this many call frames when capturing (default: 1, only top frame)\")\n .option(\"--stack-captures <expr,…>\", \"Expressions to evaluate on each call frame in the stack\")\n .option(\"--include-scopes\", \"Include expanded paused-frame scopes in the snapshot\")\n .option(\"--no-json\", \"Print a human-readable summary instead of JSON\")\n .option(\"--keep-paused\", \"Skip Debugger.resume after capture; Node may resume when this CLI disconnects\")\n .option(\"--fail-on-unmatched-pause\", \"Fail immediately if the target pauses somewhere else\")\n .action(async (opts: SnapshotCommandOptions): Promise<void> => {\n await handleSnapshot(opts);\n });\n}\n\nfunction registerLog(program: Command): void {\n applyTargetOptions(\n program.command(\"log\").description(\"Stream a non-pausing logpoint: log an expression each time a line executes\"),\n )\n .requiredOption(\"--at <file:line>\", \"Logpoint location, e.g. src/handler.ts:42\")\n .requiredOption(\"--expr <expression>\", \"JavaScript expression to log on each hit\")\n .option(\"--remote-root <value>\", \"Path-mapping anchor: literal path or regex:<pattern> / /pattern/flags\")\n .option(\"--duration <seconds>\", \"Stop streaming after N seconds (default: run until SIGINT)\")\n .option(\"--max-events <n>\", \"Stop streaming after emitting N log events\")\n .option(\"--hit-count <n>\", \"Start logging once the line has been hit N or more times\")\n .option(\"--condition <expr>\", \"Only log when this JS expression evaluates truthy on the inspectee\")\n .option(\"--no-json\", \"Print human-readable lines instead of JSON Lines\")\n .action(async (opts: LogCommandOptions): Promise<void> => {\n await handleLog(opts);\n });\n}\n\nfunction registerWatch(program: Command): void {\n applyTargetOptions(\n program.command(\"watch\").description(\"Stream a snapshot per breakpoint hit (multi-shot watch); resume between hits\"),\n )\n .option(\"--bp <file:line>\", \"Breakpoint location (repeatable), e.g. src/handler.ts:42\", collectStrings, [] as readonly string[])\n .option(\"--capture <expr,…>\", \"Top-level comma-separated expressions to evaluate per hit\")\n .option(\"--condition <expr>\", \"Only emit hits where this JS expression evaluates truthy\")\n .option(\"--hit-count <n>\", \"Start emitting after the line has been hit N or more times\")\n .option(\"--remote-root <value>\", \"Path-mapping anchor: literal path or regex:<pattern> / /pattern/flags\")\n .option(\"--duration <seconds>\", \"Stop streaming after N seconds (default: run until SIGINT)\")\n .option(\"--max-events <n>\", \"Stop streaming after emitting N watch events\")\n .option(\"--timeout <seconds>\", \"How long to wait for the next hit before giving up (default: 30)\")\n .option(\"--max-value-length <chars>\", \"Maximum characters per captured value before truncation (default: 4096)\")\n .option(\"--stack-depth <n>\", \"Walk this many call frames per hit (default: 1)\")\n .option(\"--stack-captures <expr,…>\", \"Expressions to evaluate on each call frame\")\n .option(\"--include-scopes\", \"Include expanded paused-frame scopes per hit\")\n .option(\"--no-json\", \"Print human-readable lines instead of JSON Lines\")\n .action(async (opts: WatchCommandOptions): Promise<void> => {\n await handleWatch(opts);\n });\n}\n\nfunction registerException(program: Command): void {\n applyTargetOptions(\n program.command(\"exception\").description(\"Pause on a thrown exception, capture the value and frame, then resume\"),\n )\n .option(\"--type <state>\", \"Pause type: uncaught (default), caught, or all\")\n .option(\"--capture <expr,…>\", \"Top-level comma-separated expressions to evaluate in the paused frame\")\n .option(\"--remote-root <value>\", \"Path-mapping anchor: literal path or regex:<pattern> / /pattern/flags\")\n .option(\"--timeout <seconds>\", \"How long to wait for an exception (default: 30)\")\n .option(\"--max-value-length <chars>\", \"Maximum characters per captured value before truncation (default: 4096)\")\n .option(\"--stack-depth <n>\", \"Walk this many call frames when capturing (default: 1)\")\n .option(\"--stack-captures <expr,…>\", \"Expressions to evaluate on each call frame in the stack\")\n .option(\"--include-scopes\", \"Include expanded paused-frame scopes in the snapshot\")\n .option(\"--keep-paused\", \"Skip Debugger.resume after capture; Node may resume when this CLI disconnects\")\n .option(\"--no-json\", \"Print a human-readable summary instead of JSON\")\n .action(async (opts: ExceptionCommandOptions): Promise<void> => {\n await handleException(opts);\n });\n}\n\nfunction registerEval(program: Command): void {\n applyTargetOptions(\n program.command(\"eval\").description(\"Evaluate an expression against the global Runtime\"),\n )\n .requiredOption(\"--expr <expression>\", \"JavaScript expression to evaluate\")\n .option(\"--no-json\", \"Print only the resulting value, not the full CDP envelope\")\n .action(async (opts: EvalCommandOptions): Promise<void> => {\n await handleEval(opts);\n });\n}\n\nfunction registerListScripts(program: Command): void {\n applyTargetOptions(\n program.command(\"list-scripts\").description(\"Print the scripts the V8 instance currently knows about\"),\n )\n .option(\"--no-json\", \"Print scriptId<TAB>url instead of JSON\")\n .action(async (opts: ListScriptsCommandOptions): Promise<void> => {\n await handleListScripts(opts);\n });\n}\n\nfunction registerAttach(program: Command): void {\n applyTargetOptions(\n program.command(\"attach\").description(\"Connect, fetch the inspector version, and disconnect (smoke-test)\"),\n )\n .option(\"--no-json\", \"Print a multi-line summary instead of JSON\")\n .action(async (opts: AttachCommandOptions): Promise<void> => {\n await handleAttach(opts);\n });\n}\n","import process from \"node:process\";\n\nimport { fetchInspectorVersion } from \"../../inspector/discovery.js\";\nimport type { AttachCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { openTarget, resolveTarget } from \"../target.js\";\n\nexport async function handleAttach(opts: AttachCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const tunnel = await openTarget(target);\n try {\n const version = await fetchInspectorVersion(tunnel.host, tunnel.port, 5_000);\n if (opts.json) {\n writeJson({ host: tunnel.host, port: tunnel.port, ...version });\n return;\n }\n process.stdout.write(\n `Connected to ${tunnel.host}:${tunnel.port.toString()}\\n` +\n ` Browser: ${version.browser}\\n` +\n ` Protocol: ${version.protocolVersion}\\n`,\n );\n } finally {\n await tunnel.dispose();\n }\n}\n","import { request } from \"node:http\";\n\nimport { CfInspectorError } from \"../types.js\";\n\nexport interface InspectorTarget {\n readonly description: string;\n readonly devtoolsFrontendUrl?: string;\n readonly faviconUrl?: string;\n readonly id: string;\n readonly title: string;\n readonly type: string;\n readonly url: string;\n readonly webSocketDebuggerUrl: string;\n}\n\nexport interface InspectorVersion {\n readonly browser: string;\n readonly protocolVersion: string;\n}\n\nasync function fetchJson<T>(url: string, timeoutMs: number): Promise<T> {\n return await new Promise<T>((resolve, reject) => {\n const req = request(url, { method: \"GET\" }, (res) => {\n const chunks: Buffer[] = [];\n res.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n });\n res.on(\"end\", () => {\n try {\n resolve(parseJsonResponse(chunks) as T);\n } catch (err: unknown) {\n reject(parseDiscoveryError(url, err));\n }\n });\n res.on(\"error\", (err) => {\n reject(newDiscoveryError(`Inspector discovery response error: ${err.message}`));\n });\n });\n req.setTimeout(timeoutMs, () => {\n req.destroy(\n new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector discovery at ${url} timed out after ${timeoutMs.toString()}ms`,\n ),\n );\n });\n req.on(\"error\", (err) => {\n reject(\n err instanceof CfInspectorError\n ? err\n : new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector discovery at ${url} failed: ${err.message}`,\n ),\n );\n });\n req.end();\n });\n}\n\nfunction parseJsonResponse(chunks: readonly Buffer[]): unknown {\n const text = Buffer.concat(chunks).toString(\"utf8\");\n return JSON.parse(text) as unknown;\n}\n\nfunction parseDiscoveryError(url: string, err: unknown): CfInspectorError {\n const message = err instanceof Error ? err.message : String(err);\n return newDiscoveryError(`Failed to parse inspector discovery response from ${url}: ${message}`);\n}\n\nfunction newDiscoveryError(message: string): CfInspectorError {\n return new CfInspectorError(\"INSPECTOR_DISCOVERY_FAILED\", message);\n}\n\nfunction toInspectorTarget(value: unknown, source: string): InspectorTarget {\n if (typeof value !== \"object\" || value === null) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector target is not an object in ${source}`,\n );\n }\n const candidate = value as Record<string, unknown>;\n const webSocketDebuggerUrl = candidate[\"webSocketDebuggerUrl\"];\n if (typeof webSocketDebuggerUrl !== \"string\" || webSocketDebuggerUrl.length === 0) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector target is missing webSocketDebuggerUrl in ${source}`,\n );\n }\n return {\n description: typeof candidate[\"description\"] === \"string\" ? candidate[\"description\"] : \"\",\n id: typeof candidate[\"id\"] === \"string\" ? candidate[\"id\"] : \"\",\n title: typeof candidate[\"title\"] === \"string\" ? candidate[\"title\"] : \"\",\n type: typeof candidate[\"type\"] === \"string\" ? candidate[\"type\"] : \"\",\n url: typeof candidate[\"url\"] === \"string\" ? candidate[\"url\"] : \"\",\n webSocketDebuggerUrl,\n ...(typeof candidate[\"devtoolsFrontendUrl\"] === \"string\"\n ? { devtoolsFrontendUrl: candidate[\"devtoolsFrontendUrl\"] }\n : {}),\n ...(typeof candidate[\"faviconUrl\"] === \"string\" ? { faviconUrl: candidate[\"faviconUrl\"] } : {}),\n };\n}\n\nexport async function discoverInspectorTargets(\n host: string,\n port: number,\n timeoutMs: number,\n): Promise<readonly InspectorTarget[]> {\n const url = `http://${host}:${port.toString()}/json/list`;\n const raw = await fetchJson<unknown>(url, timeoutMs);\n if (!Array.isArray(raw) || raw.length === 0) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No inspector targets returned from ${url}`,\n );\n }\n return raw.map((entry, idx): InspectorTarget => toInspectorTarget(entry, `${url}[${idx.toString()}]`));\n}\n\nfunction readVersionField(value: Record<string, unknown>, ...keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const entry = value[key];\n if (typeof entry === \"string\" && entry.length > 0) {\n return entry;\n }\n }\n return undefined;\n}\n\nexport async function fetchInspectorVersion(\n host: string,\n port: number,\n timeoutMs: number,\n): Promise<InspectorVersion> {\n const url = `http://${host}:${port.toString()}/json/version`;\n const raw = await fetchJson<unknown>(url, timeoutMs);\n if (typeof raw !== \"object\" || raw === null) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Unexpected /json/version response from ${url}`,\n );\n }\n const value = raw as Record<string, unknown>;\n const browser = readVersionField(value, \"Browser\", \"browser\");\n const protocolVersion = readVersionField(value, \"Protocol-Version\", \"protocolVersion\");\n if (browser === undefined || protocolVersion === undefined) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Unexpected /json/version response from ${url}`,\n );\n }\n return { browser, protocolVersion };\n}\n","import process from \"node:process\";\n\nimport type { LogpointEvent } from \"../logpoint/events.js\";\nimport type { ExceptionSnapshot, FrameSnapshot, SnapshotResult, WatchEvent } from \"../types.js\";\n\nexport function writeJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function writeHumanSnapshot(snapshot: SnapshotResult): void {\n const pausedDuration = snapshot.pausedDurationMs === null\n ? \"unknown\"\n : `${snapshot.pausedDurationMs.toFixed(1)}ms`;\n const lines: string[] = [];\n lines.push(\n `Snapshot @ ${snapshot.capturedAt}`,\n ` reason: ${snapshot.reason}`,\n ` paused: ${pausedDuration}`,\n );\n if (snapshot.exception !== undefined) {\n appendExceptionLines(lines, snapshot.exception);\n }\n if (snapshot.topFrame) {\n appendFrameLines(lines, snapshot.topFrame);\n }\n if (snapshot.captures.length > 0) {\n lines.push(\" captures:\");\n for (const capture of snapshot.captures) {\n const detail = capture.error ?? capture.value ?? \"undefined\";\n lines.push(` ${capture.expression} = ${detail}`);\n }\n }\n if (snapshot.stack !== undefined && snapshot.stack.length > 0) {\n lines.push(\" stack:\");\n for (const frame of snapshot.stack) {\n appendStackFrameLine(lines, frame);\n }\n }\n process.stdout.write(`${lines.join(\"\\n\")}\\n`);\n}\n\nfunction appendFrameLines(lines: string[], frame: FrameSnapshot): void {\n const fnName = frame.functionName.length === 0 ? \"(anonymous)\" : frame.functionName;\n const sourceUrl = frame.url !== undefined && frame.url.length > 0 ? frame.url : \"(unknown)\";\n lines.push(\n ` frame: ${fnName} ${sourceUrl}:${frame.line.toString()}:${frame.column.toString()}`,\n );\n if (frame.scopes === undefined) {\n return;\n }\n for (const scope of frame.scopes) {\n lines.push(` scope ${scope.type} (${scope.variables.length.toString()} vars):`);\n for (const variable of scope.variables) {\n lines.push(` ${variable.name} = ${variable.value}`);\n }\n }\n}\n\nfunction appendStackFrameLine(lines: string[], frame: FrameSnapshot): void {\n const fnName = frame.functionName.length === 0 ? \"(anonymous)\" : frame.functionName;\n const sourceUrl = frame.url !== undefined && frame.url.length > 0 ? frame.url : \"(unknown)\";\n lines.push(` ${fnName} ${sourceUrl}:${frame.line.toString()}:${frame.column.toString()}`);\n if (frame.captures !== undefined) {\n for (const capture of frame.captures) {\n const detail = capture.error ?? capture.value ?? \"undefined\";\n lines.push(` ${capture.expression} = ${detail}`);\n }\n }\n}\n\nfunction appendExceptionLines(lines: string[], exception: ExceptionSnapshot): void {\n if (exception.error !== undefined) {\n lines.push(` exception: !err ${exception.error}`);\n return;\n }\n const detail = exception.description ?? exception.value ?? \"(unknown)\";\n lines.push(` exception: ${detail}`);\n}\n\nexport function writeLogEvent(event: LogpointEvent, json: boolean): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(event)}\\n`);\n return;\n }\n if (event.error !== undefined) {\n process.stdout.write(`[${event.ts}] ${event.at} !err ${event.error}\\n`);\n return;\n }\n process.stdout.write(`[${event.ts}] ${event.at} ${event.value ?? \"\"}\\n`);\n}\n\nexport function writeWatchEvent(event: WatchEvent, json: boolean): void {\n if (json) {\n process.stdout.write(`${JSON.stringify(event)}\\n`);\n return;\n }\n process.stdout.write(`[${event.ts}] hit#${event.hit.toString()} ${event.at}\\n`);\n if (event.exception !== undefined) {\n const detail = event.exception.description ?? event.exception.value ?? event.exception.error ?? \"(unknown)\";\n process.stdout.write(` exception: ${detail}\\n`);\n }\n for (const capture of event.captures) {\n const detail = capture.error ?? capture.value ?? \"undefined\";\n process.stdout.write(` ${capture.expression} = ${detail}\\n`);\n }\n}\n","import { startDebugger } from \"@saptools/cf-debugger\";\nimport type { DebuggerHandle, StartDebuggerOptions } from \"@saptools/cf-debugger\";\n\nexport interface TunnelTarget {\n readonly region: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly tunnelReadyTimeoutMs?: number;\n readonly preferredPort?: number;\n readonly verbose?: boolean;\n readonly signal?: AbortSignal;\n}\n\nexport interface OpenedTunnel {\n readonly localPort: number;\n readonly handle: DebuggerHandle;\n dispose(): Promise<void>;\n}\n\nexport async function openCfTunnel(target: TunnelTarget): Promise<OpenedTunnel> {\n const opts: StartDebuggerOptions = {\n region: target.region,\n org: target.org,\n space: target.space,\n app: target.app,\n ...(target.tunnelReadyTimeoutMs === undefined ? {} : { tunnelReadyTimeoutMs: target.tunnelReadyTimeoutMs }),\n ...(target.preferredPort === undefined ? {} : { preferredPort: target.preferredPort }),\n ...(target.verbose === undefined ? {} : { verbose: target.verbose }),\n ...(target.signal === undefined ? {} : { signal: target.signal }),\n };\n const handle = await startDebugger(opts);\n return {\n localPort: handle.session.localPort,\n handle,\n dispose: async (): Promise<void> => {\n await handle.dispose();\n },\n };\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { CdpClient } from \"../cdp/client.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { InspectorConnectOptions, PauseEvent, ScriptInfo } from \"../types.js\";\n\nimport { asString, toPauseEvent } from \"./conversions.js\";\nimport { discoverInspectorTargets } from \"./discovery.js\";\nimport type { CdpPauseParams, DebuggerState, InspectorSession, ScriptParsedParams } from \"./types.js\";\n\nconst DEFAULT_CONNECT_TIMEOUT_MS = 5_000;\nconst DEFAULT_HOST = \"127.0.0.1\";\nconst PAUSE_BUFFER_LIMIT = 32;\n\nexport async function connectInspector(options: InspectorConnectOptions): Promise<InspectorSession> {\n const host = options.host ?? DEFAULT_HOST;\n const connectTimeoutMs = options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;\n const targets = await discoverInspectorTargets(host, options.port, connectTimeoutMs);\n const target = targets[0];\n if (!target) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No inspector targets available on ${host}:${options.port.toString()}`,\n );\n }\n const client = await CdpClient.connect({\n url: target.webSocketDebuggerUrl,\n connectTimeoutMs,\n });\n try {\n return await initSession(client, target);\n } catch (err: unknown) {\n // The CdpClient is alive (its WS is open) but the inspector handshake\n // failed before we could hand the session to the caller. Dispose so the\n // underlying WS does not leak.\n client.dispose();\n throw err;\n }\n}\n\nasync function initSession(\n client: CdpClient,\n target: InspectorSession[\"target\"],\n): Promise<InspectorSession> {\n const scripts = new Map<string, ScriptInfo>();\n client.on(\"Debugger.scriptParsed\", (raw) => {\n const params = raw as ScriptParsedParams;\n const scriptId = asString(params.scriptId);\n const url = asString(params.url);\n if (scriptId.length === 0) {\n return;\n }\n scripts.set(scriptId, { scriptId, url });\n });\n const pauseBuffer: PauseEvent[] = [];\n const pauseWaitGate = { active: false };\n const debuggerState: DebuggerState = {};\n client.on(\"Debugger.paused\", (raw) => {\n if (pauseWaitGate.active) {\n return;\n }\n const params = raw as CdpPauseParams;\n const event = toPauseEvent(params, performance.now(), scripts);\n if (pauseBuffer.length >= PAUSE_BUFFER_LIMIT) {\n pauseBuffer.shift();\n }\n pauseBuffer.push(event);\n });\n client.on(\"Debugger.resumed\", () => {\n debuggerState.lastResumedAtMs = performance.now();\n });\n await client.send(\"Runtime.enable\");\n await client.send(\"Debugger.enable\");\n return {\n client,\n target,\n scripts,\n pauseBuffer,\n pauseWaitGate,\n debuggerState,\n dispose: async (): Promise<void> => {\n try {\n await client.send(\"Debugger.disable\");\n } catch {\n // best-effort\n }\n client.dispose();\n },\n };\n}\n","import { EventEmitter } from \"node:events\";\n\nimport { CfInspectorError } from \"../types.js\";\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 15_000;\n\nexport interface CdpTransportEventMap {\n readonly message: (data: string) => void;\n readonly close: () => void;\n readonly error: (err: Error) => void;\n}\n\nexport interface CdpTransport {\n send(payload: string): void;\n close(): void;\n readonly readyState: number;\n on<E extends keyof CdpTransportEventMap>(event: E, listener: CdpTransportEventMap[E]): void;\n off<E extends keyof CdpTransportEventMap>(event: E, listener: CdpTransportEventMap[E]): void;\n}\n\nexport interface CdpTransportFactoryOptions {\n readonly connectTimeoutMs?: number;\n}\n\nexport type CdpTransportFactory = (\n url: string,\n options?: CdpTransportFactoryOptions,\n) => Promise<CdpTransport>;\n\nexport interface CdpClientOptions {\n readonly url: string;\n readonly transportFactory?: CdpTransportFactory;\n readonly requestTimeoutMs?: number;\n readonly connectTimeoutMs?: number;\n}\n\ninterface PendingRequest {\n readonly resolve: (value: unknown) => void;\n readonly reject: (error: Error) => void;\n readonly timer: ReturnType<typeof setTimeout>;\n}\n\ninterface ParsedMessage {\n readonly id?: number;\n readonly method?: string;\n readonly result?: unknown;\n readonly params?: unknown;\n readonly error?: { readonly code: number; readonly message: string };\n}\n\nfunction parseMessage(raw: string): ParsedMessage | undefined {\n try {\n const value: unknown = JSON.parse(raw);\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n return value as ParsedMessage;\n } catch {\n return undefined;\n }\n}\n\nasync function loadDefaultFactory(): Promise<CdpTransportFactory> {\n const mod = await import(\"./wsTransport.js\");\n return mod.wsTransportFactory;\n}\n\nexport class CdpClient {\n private readonly transport: CdpTransport;\n private readonly requestTimeoutMs: number;\n private readonly pending = new Map<number, PendingRequest>();\n private readonly emitter = new EventEmitter();\n private nextId = 1;\n private closed = false;\n private closeReason: Error | undefined;\n\n private readonly handleMessage = (raw: string): void => {\n const parsed = parseMessage(raw);\n if (!parsed) {\n return;\n }\n if (typeof parsed.id === \"number\") {\n this.handleResponse(parsed);\n return;\n }\n if (typeof parsed.method === \"string\") {\n // A throwing listener must not crash the WS message pipeline. Without\n // this guard, EventEmitter rethrows on the first uncaught listener\n // exception and the rest of the dispatch stops — including downstream\n // listeners that need to settle pending requests.\n this.safeEmit(parsed.method, parsed.params);\n this.safeEmit(\"event\", { method: parsed.method, params: parsed.params });\n }\n };\n\n private safeEmit(event: string, payload: unknown): void {\n // EventEmitter.emit re-throws on the first listener's exception and skips\n // the rest. Iterate explicitly so one bad listener does not deny later\n // listeners (e.g. the pause buffer pusher) from observing the event.\n const listeners = this.emitter.listeners(event);\n for (const listener of listeners) {\n try {\n (listener as (payload: unknown) => void)(payload);\n } catch {\n // Listener exceptions are caller bugs; swallow to keep the pipeline alive.\n }\n }\n }\n\n private readonly handleClose = (): void => {\n this.markClosed(new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Inspector connection closed\"));\n };\n\n private readonly handleError = (err: Error): void => {\n this.markClosed(\n err instanceof CfInspectorError\n ? err\n : new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", err.message),\n );\n };\n\n private constructor(transport: CdpTransport, requestTimeoutMs: number) {\n this.transport = transport;\n this.requestTimeoutMs = requestTimeoutMs;\n transport.on(\"message\", this.handleMessage);\n transport.on(\"close\", this.handleClose);\n transport.on(\"error\", this.handleError);\n }\n\n public static async connect(options: CdpClientOptions): Promise<CdpClient> {\n const factory = options.transportFactory ?? (await loadDefaultFactory());\n const factoryOptions: CdpTransportFactoryOptions =\n options.connectTimeoutMs === undefined ? {} : { connectTimeoutMs: options.connectTimeoutMs };\n const transport = await factory(options.url, factoryOptions);\n return new CdpClient(transport, options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);\n }\n\n public async send<TResult = unknown>(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<TResult> {\n if (this.closed) {\n throw this.closeReason ?? new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection closed\");\n }\n const id = this.nextId++;\n const payload = JSON.stringify({ id, method, params });\n return await new Promise<TResult>((resolve, reject) => {\n const timer = this.createRequestTimer(id, method, reject);\n this.pending.set(id, {\n resolve: (value): void => {\n resolve(value as TResult);\n },\n reject,\n timer,\n });\n this.sendPayload(id, method, payload, timer, reject);\n });\n }\n\n public on(method: string, listener: (params: unknown) => void): () => void {\n this.emitter.on(method, listener);\n return (): void => {\n this.emitter.off(method, listener);\n };\n }\n\n public async waitFor<T = unknown>(\n method: string,\n options: { readonly timeoutMs: number; readonly predicate?: (params: T) => boolean } = {\n timeoutMs: this.requestTimeoutMs,\n },\n ): Promise<T> {\n if (this.closed) {\n throw this.closeReason ?? new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection closed\");\n }\n return await new Promise<T>((resolve, reject) => {\n let settled = false;\n const cleanup = (): void => {\n clearTimeout(timer);\n offEvent();\n offClose();\n };\n const finish = (value: T): void => {\n settled = true;\n cleanup();\n resolve(value);\n };\n const offEvent = this.on(method, (raw) => {\n if (settled) {\n return;\n }\n const params = raw as T;\n if (options.predicate) {\n // A throwing predicate must not propagate up through emitter.emit\n // (which would crash the message handler and the WS pipeline).\n // Treat a throw as a predicate rejection so the caller times out\n // instead of bringing the process down.\n let accepted: boolean;\n try {\n accepted = options.predicate(params);\n } catch {\n return;\n }\n if (!accepted) {\n return;\n }\n }\n finish(params);\n });\n const offClose = this.onClose((err) => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(err);\n });\n const timer = setTimeout(() => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(this.createWaitTimeoutError(method, options.timeoutMs));\n }, options.timeoutMs);\n });\n }\n\n public onClose(listener: (err: Error) => void): () => void {\n if (this.closed) {\n const reason = this.closeReason ?? new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection closed\");\n queueMicrotask(() => {\n listener(reason);\n });\n return (): void => {\n // already closed; nothing to detach\n };\n }\n this.emitter.on(\"__close__\", listener);\n return (): void => {\n this.emitter.off(\"__close__\", listener);\n };\n }\n\n public dispose(): void {\n if (this.closed) {\n return;\n }\n this.transport.off(\"message\", this.handleMessage);\n this.transport.off(\"close\", this.handleClose);\n this.transport.off(\"error\", this.handleError);\n try {\n this.transport.close();\n } catch {\n // best-effort\n }\n this.markClosed(new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Connection disposed\"));\n }\n\n public get isClosed(): boolean {\n return this.closed;\n }\n\n private handleResponse(parsed: ParsedMessage): void {\n const pending = this.pending.get(parsed.id ?? -1);\n if (!pending) {\n return;\n }\n this.pending.delete(parsed.id ?? -1);\n clearTimeout(pending.timer);\n if (parsed.error) {\n pending.reject(\n new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n `CDP request ${(parsed.id ?? -1).toString()} failed: ${parsed.error.message}`,\n JSON.stringify(parsed.error),\n ),\n );\n return;\n }\n pending.resolve(parsed.result);\n }\n\n private createRequestTimer(\n id: number,\n method: string,\n reject: (error: Error) => void,\n ): ReturnType<typeof setTimeout> {\n return setTimeout(() => {\n this.pending.delete(id);\n reject(\n new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n `CDP method ${method} timed out after ${this.requestTimeoutMs.toString()}ms`,\n ),\n );\n }, this.requestTimeoutMs);\n }\n\n private createWaitTimeoutError(method: string, timeoutMs: number): CfInspectorError {\n return new CfInspectorError(\n \"BREAKPOINT_NOT_HIT\",\n `Timed out waiting for ${method} after ${timeoutMs.toString()}ms`,\n );\n }\n\n private sendPayload(\n id: number,\n method: string,\n payload: string,\n timer: ReturnType<typeof setTimeout>,\n reject: (error: Error) => void,\n ): void {\n try {\n this.transport.send(payload);\n } catch (err: unknown) {\n clearTimeout(timer);\n this.pending.delete(id);\n const message = err instanceof Error ? err.message : String(err);\n reject(new CfInspectorError(\"CDP_REQUEST_FAILED\", `Failed to send ${method}: ${message}`));\n }\n }\n\n private markClosed(reason: Error): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.closeReason = reason;\n for (const [, pending] of this.pending) {\n clearTimeout(pending.timer);\n pending.reject(reason);\n }\n this.pending.clear();\n this.emitter.emit(\"__close__\", reason);\n this.emitter.removeAllListeners();\n }\n}\n","import type {\n CallFrameInfo,\n PauseEvent,\n ResolvedLocation,\n ScriptInfo,\n ScopeInfo,\n} from \"../types.js\";\n\nimport type {\n CdpCallFrame,\n CdpPauseParams,\n CdpResolvedLocation,\n CdpScope,\n} from \"./types.js\";\n\nexport function asString(value: unknown, fallback = \"\"): string {\n return typeof value === \"string\" ? value : fallback;\n}\n\nexport function asNumber(value: unknown, fallback = 0): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nexport function toResolvedLocations(value: unknown): readonly ResolvedLocation[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): ResolvedLocation[] => {\n if (typeof entry !== \"object\" || entry === null) {\n return [];\n }\n const candidate = entry as CdpResolvedLocation;\n const scriptId = asString(candidate.scriptId);\n if (scriptId.length === 0) {\n return [];\n }\n const url = typeof candidate.url === \"string\" ? candidate.url : undefined;\n const lineNumber = asNumber(candidate.lineNumber);\n const result: ResolvedLocation = url === undefined\n ? { scriptId, lineNumber, columnNumber: asNumber(candidate.columnNumber) }\n : { scriptId, url, lineNumber, columnNumber: asNumber(candidate.columnNumber) };\n return [result];\n });\n}\n\nfunction toScopeChain(value: unknown): readonly ScopeInfo[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): ScopeInfo[] => {\n if (typeof entry !== \"object\" || entry === null) {\n return [];\n }\n const candidate = entry as CdpScope;\n const type = asString(candidate.type);\n if (type.length === 0) {\n return [];\n }\n const objectId = typeof candidate.object?.objectId === \"string\" ? candidate.object.objectId : undefined;\n const name = typeof candidate.name === \"string\" ? candidate.name : undefined;\n const base: ScopeInfo = name === undefined\n ? { type }\n : { type, name };\n return [objectId === undefined ? base : { ...base, objectId }];\n });\n}\n\nfunction resolveCallFrameUrl(\n frame: CdpCallFrame,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): string | undefined {\n const direct = nonEmptyString(frame.url);\n if (direct !== undefined) {\n return direct;\n }\n const scriptId = nonEmptyString(frame.location?.scriptId);\n if (scriptId === undefined) {\n return undefined;\n }\n return nonEmptyString(scripts?.get(scriptId)?.url);\n}\n\nfunction toCallFrames(\n value: unknown,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): readonly CallFrameInfo[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): CallFrameInfo[] => {\n if (typeof entry !== \"object\" || entry === null) {\n return [];\n }\n const candidate = entry as CdpCallFrame;\n const callFrameId = asString(candidate.callFrameId);\n if (callFrameId.length === 0) {\n return [];\n }\n const url = resolveCallFrameUrl(candidate, scripts);\n const base: CallFrameInfo = {\n callFrameId,\n functionName: asString(candidate.functionName),\n lineNumber: asNumber(candidate.location?.lineNumber),\n columnNumber: asNumber(candidate.location?.columnNumber),\n scopeChain: toScopeChain(candidate.scopeChain),\n };\n return [url === undefined ? base : { ...base, url }];\n });\n}\n\nexport function toPauseEvent(\n params: CdpPauseParams,\n receivedAtMs: number,\n scripts?: ReadonlyMap<string, ScriptInfo>,\n): PauseEvent {\n const base: PauseEvent = {\n reason: asString(params.reason),\n hitBreakpoints: Array.isArray(params.hitBreakpoints)\n ? params.hitBreakpoints.filter((id): id is string => typeof id === \"string\")\n : [],\n callFrames: toCallFrames(params.callFrames, scripts),\n receivedAtMs,\n };\n return params.data === undefined ? base : { ...base, data: params.data };\n}\n\nfunction topFrameLocation(pause: PauseEvent): string {\n const top = pause.callFrames[0];\n if (top === undefined) {\n return \"(no call frame)\";\n }\n const url = top.url !== undefined && top.url.length > 0 ? top.url : \"(unknown)\";\n return `${url}:${(top.lineNumber + 1).toString()}:${(top.columnNumber + 1).toString()}`;\n}\n\nexport function pauseDetail(pause: PauseEvent): string {\n return JSON.stringify({\n reason: pause.reason,\n hitBreakpoints: pause.hitBreakpoints,\n topFrame: topFrameLocation(pause),\n });\n}\n","import { openCfTunnel } from \"../cf/tunnel.js\";\nimport { connectInspector } from \"../inspector/session.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\n\nimport { DEFAULT_CF_TIMEOUT_SEC } from \"./commandTypes.js\";\nimport type { SharedTargetOptions, Target } from \"./commandTypes.js\";\n\nexport function parsePositiveInt(raw: string | undefined, label: string): number | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const value = Number.parseInt(raw, 10);\n if (Number.isNaN(value) || value <= 0 || value.toString() !== raw.trim()) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", `Invalid ${label}: \"${raw}\" — expected a positive integer`);\n }\n return value;\n}\n\nexport function resolveTarget(opts: SharedTargetOptions): Target {\n const port = parsePositiveInt(opts.port, \"--port\");\n if (port !== undefined) {\n return { kind: \"port\", port, host: opts.host ?? \"127.0.0.1\" };\n }\n if (hasCfTarget(opts)) {\n const cfTimeoutSec = parsePositiveInt(opts.cfTimeout, \"--cf-timeout\") ?? DEFAULT_CF_TIMEOUT_SEC;\n return {\n kind: \"cf\",\n region: opts.region,\n org: opts.org,\n space: opts.space,\n app: opts.app,\n cfTimeoutMs: cfTimeoutSec * 1000,\n };\n }\n throw new CfInspectorError(\n \"MISSING_TARGET\",\n \"Provide either --port (and optionally --host) or all of --region, --org, --space, --app.\",\n );\n}\n\nfunction hasCfTarget(opts: SharedTargetOptions): opts is SharedTargetOptions & {\n readonly region: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n} {\n return (\n opts.region !== undefined &&\n opts.org !== undefined &&\n opts.space !== undefined &&\n opts.app !== undefined\n );\n}\n\ninterface ResolvedTunnel {\n readonly port: number;\n readonly host: string;\n readonly dispose: () => Promise<void>;\n}\n\nexport async function withSession<T>(\n target: Target,\n fn: (session: InspectorSession, port: number) => Promise<T>,\n): Promise<T> {\n const tunnel = await openTarget(target);\n let session: InspectorSession | undefined;\n try {\n session = await connectInspector({ port: tunnel.port, host: tunnel.host });\n return await fn(session, tunnel.port);\n } finally {\n if (session) {\n await session.dispose();\n }\n await tunnel.dispose();\n }\n}\n\nexport async function openTarget(target: Target): Promise<ResolvedTunnel> {\n if (target.kind === \"port\") {\n return {\n port: target.port,\n host: target.host,\n dispose: (): Promise<void> => Promise.resolve(),\n };\n }\n const tunnel = await openCfTunnel({\n region: target.region,\n org: target.org,\n space: target.space,\n app: target.app,\n tunnelReadyTimeoutMs: target.cfTimeoutMs,\n });\n return {\n port: tunnel.localPort,\n host: \"127.0.0.1\",\n dispose: async (): Promise<void> => {\n await tunnel.dispose();\n },\n };\n}\n","export const DEFAULT_BREAKPOINT_TIMEOUT_SEC = 30;\nexport const DEFAULT_CF_TIMEOUT_SEC = 60;\nexport const DEFAULT_EXCEPTION_TIMEOUT_SEC = 30;\n\nexport interface PortTarget {\n readonly kind: \"port\";\n readonly port: number;\n readonly host: string;\n}\n\nexport interface CfTarget {\n readonly kind: \"cf\";\n readonly region: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly cfTimeoutMs: number;\n}\n\nexport type Target = PortTarget | CfTarget;\n\nexport interface SharedTargetOptions {\n readonly port?: string;\n readonly host?: string;\n readonly region?: string;\n readonly org?: string;\n readonly space?: string;\n readonly app?: string;\n readonly cfTimeout?: string;\n}\n\nexport interface SnapshotCommandOptions extends SharedTargetOptions {\n readonly bp: readonly string[];\n readonly capture?: string;\n readonly timeout?: string;\n readonly remoteRoot?: string;\n readonly condition?: string;\n readonly hitCount?: string;\n readonly stackDepth?: string;\n readonly stackCaptures?: string;\n readonly maxValueLength?: string;\n readonly json: boolean;\n readonly keepPaused?: boolean;\n readonly failOnUnmatchedPause?: boolean;\n readonly includeScopes?: boolean;\n}\n\nexport interface EvalCommandOptions extends SharedTargetOptions {\n readonly expr: string;\n readonly json: boolean;\n}\n\nexport interface ListScriptsCommandOptions extends SharedTargetOptions {\n readonly json: boolean;\n}\n\nexport interface LogCommandOptions extends SharedTargetOptions {\n readonly at: string;\n readonly expr: string;\n readonly remoteRoot?: string;\n readonly duration?: string;\n readonly maxEvents?: string;\n readonly hitCount?: string;\n readonly condition?: string;\n readonly json: boolean;\n}\n\nexport interface AttachCommandOptions extends SharedTargetOptions {\n readonly json: boolean;\n}\n\nexport interface WatchCommandOptions extends SharedTargetOptions {\n readonly bp: readonly string[];\n readonly capture?: string;\n readonly condition?: string;\n readonly hitCount?: string;\n readonly remoteRoot?: string;\n readonly duration?: string;\n readonly maxEvents?: string;\n readonly timeout?: string;\n readonly maxValueLength?: string;\n readonly stackDepth?: string;\n readonly stackCaptures?: string;\n readonly includeScopes?: boolean;\n readonly json: boolean;\n}\n\nexport interface ExceptionCommandOptions extends SharedTargetOptions {\n readonly type?: string;\n readonly capture?: string;\n readonly stackDepth?: string;\n readonly stackCaptures?: string;\n readonly remoteRoot?: string;\n readonly timeout?: string;\n readonly maxValueLength?: string;\n readonly includeScopes?: boolean;\n readonly keepPaused?: boolean;\n readonly json: boolean;\n}\n","import process from \"node:process\";\n\nimport { evaluateGlobal } from \"../../inspector/runtime.js\";\nimport type { EvalCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { resolveTarget, withSession } from \"../target.js\";\n\nexport async function handleEval(opts: EvalCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const result = await withSession(target, async (session) => {\n return await evaluateGlobal(session, opts.expr);\n });\n if (opts.json) {\n writeJson(result);\n if (result.exceptionDetails !== undefined) {\n process.exitCode = 1;\n }\n return;\n }\n writeHumanEvalResult(result);\n}\n\nfunction writeHumanEvalResult(result: Awaited<ReturnType<typeof evaluateGlobal>>): void {\n if (result.exceptionDetails !== undefined) {\n const detail =\n typeof result.exceptionDetails.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails.text === \"string\" ? result.exceptionDetails.text : \"evaluation failed\");\n process.stderr.write(`${detail}\\n`);\n process.exitCode = 1;\n return;\n }\n const inner = result.result;\n if (inner === undefined) {\n process.stdout.write(\"\\n\");\n return;\n }\n if (typeof inner.value === \"string\") {\n process.stdout.write(`${inner.value}\\n`);\n return;\n }\n if (typeof inner.description === \"string\") {\n process.stdout.write(`${inner.description}\\n`);\n return;\n }\n process.stdout.write(`${JSON.stringify(inner.value)}\\n`);\n}\n","import { CfInspectorError } from \"../types.js\";\nimport type { ScriptInfo } from \"../types.js\";\n\nimport type { CdpEvalResult, CdpProperty, InspectorSession } from \"./types.js\";\n\nexport type PauseOnExceptionsState = \"none\" | \"uncaught\" | \"caught\" | \"all\";\n\nexport async function resume(session: InspectorSession): Promise<void> {\n await session.client.send(\"Debugger.resume\");\n}\n\nexport async function setPauseOnExceptions(\n session: InspectorSession,\n state: PauseOnExceptionsState,\n): Promise<void> {\n await session.client.send(\"Debugger.setPauseOnExceptions\", { state });\n}\n\nexport async function evaluateOnFrame(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n): Promise<CdpEvalResult> {\n return await session.client.send<CdpEvalResult>(\"Debugger.evaluateOnCallFrame\", {\n callFrameId,\n expression,\n returnByValue: false,\n generatePreview: true,\n silent: true,\n });\n}\n\nexport async function evaluateGlobal(\n session: InspectorSession,\n expression: string,\n): Promise<CdpEvalResult> {\n return await session.client.send<CdpEvalResult>(\"Runtime.evaluate\", {\n expression,\n returnByValue: false,\n generatePreview: true,\n silent: true,\n });\n}\n\nexport function listScripts(session: InspectorSession): readonly ScriptInfo[] {\n return [...session.scripts.values()];\n}\n\ninterface CdpCompileResult {\n scriptId?: unknown;\n exceptionDetails?: { text?: unknown; exception?: { description?: unknown } };\n}\n\nexport async function validateExpression(\n session: InspectorSession,\n expression: string,\n): Promise<void> {\n const result = await session.client.send<CdpCompileResult>(\"Runtime.compileScript\", {\n expression,\n sourceURL: \"<cf-inspector-validate>\",\n persistScript: false,\n });\n if (result.exceptionDetails === undefined) {\n return;\n }\n const description =\n typeof result.exceptionDetails.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails.text === \"string\"\n ? result.exceptionDetails.text\n : \"expression failed to compile\");\n throw new CfInspectorError(\"INVALID_EXPRESSION\", description);\n}\n\nexport async function getProperties(\n session: InspectorSession,\n objectId: string,\n): Promise<readonly CdpProperty[]> {\n const result = await session.client.send<{ result?: unknown }>(\"Runtime.getProperties\", {\n objectId,\n ownProperties: true,\n accessorPropertiesOnly: false,\n generatePreview: true,\n });\n if (!Array.isArray(result.result)) {\n return [];\n }\n return result.result as readonly CdpProperty[];\n}\n\nexport type { CdpEvalResult, CdpProperty } from \"./types.js\";\n","import { performance } from \"node:perf_hooks\";\nimport process from \"node:process\";\n\nimport {\n resume,\n setPauseOnExceptions,\n waitForPause,\n} from \"../../inspector/index.js\";\nimport type { InspectorSession, PauseOnExceptionsState } from \"../../inspector/index.js\";\nimport { parseRemoteRoot } from \"../../pathMapper.js\";\nimport { captureSnapshot } from \"../../snapshot/capture.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { RemoteRootSetting, SnapshotResult } from \"../../types.js\";\nimport { parseCaptureList } from \"../captureParser.js\";\nimport { DEFAULT_EXCEPTION_TIMEOUT_SEC } from \"../commandTypes.js\";\nimport type { ExceptionCommandOptions, Target } from \"../commandTypes.js\";\nimport { writeHumanSnapshot, writeJson } from \"../output.js\";\nimport { parsePositiveInt, resolveTarget, withSession } from \"../target.js\";\nimport { roundDurationMs, withPausedDuration } from \"../warnings.js\";\n\nconst VALID_PAUSE_TYPES: readonly PauseOnExceptionsState[] = [\"uncaught\", \"caught\", \"all\"];\n\ninterface PreparedExceptionCommand {\n readonly target: Target;\n readonly state: PauseOnExceptionsState;\n readonly captures: readonly string[];\n readonly remoteRoot: RemoteRootSetting;\n readonly timeoutMs: number;\n readonly maxValueLength?: number;\n readonly stackDepth?: number;\n readonly stackCaptures: readonly string[];\n}\n\nexport async function handleException(opts: ExceptionCommandOptions): Promise<void> {\n const prepared = prepareExceptionCommand(opts);\n const result = await runExceptionCommand(prepared, opts);\n if (opts.json) {\n writeJson(result);\n } else {\n writeHumanSnapshot(result);\n }\n}\n\nfunction prepareExceptionCommand(opts: ExceptionCommandOptions): PreparedExceptionCommand {\n const target = resolveTarget(opts);\n const stateRaw = (opts.type ?? \"uncaught\").trim().toLowerCase();\n if (!VALID_PAUSE_TYPES.includes(stateRaw as PauseOnExceptionsState)) {\n throw new CfInspectorError(\n \"INVALID_PAUSE_TYPE\",\n `--type must be one of ${VALID_PAUSE_TYPES.join(\", \")} (received \"${stateRaw}\")`,\n );\n }\n const timeoutSec = parsePositiveInt(opts.timeout, \"--timeout\") ?? DEFAULT_EXCEPTION_TIMEOUT_SEC;\n const maxValueLength = parsePositiveInt(opts.maxValueLength, \"--max-value-length\");\n const stackDepth = parsePositiveInt(opts.stackDepth, \"--stack-depth\");\n return {\n target,\n state: stateRaw as PauseOnExceptionsState,\n captures: parseCaptureList(opts.capture),\n remoteRoot: parseRemoteRoot(opts.remoteRoot),\n timeoutMs: timeoutSec * 1000,\n ...(maxValueLength === undefined ? {} : { maxValueLength }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n };\n}\n\nasync function runExceptionCommand(\n command: PreparedExceptionCommand,\n opts: ExceptionCommandOptions,\n): Promise<SnapshotResult> {\n return await withSession(command.target, async (session): Promise<SnapshotResult> => {\n await setPauseOnExceptions(session, command.state);\n try {\n const pause = await waitForPause(session, {\n timeoutMs: command.timeoutMs,\n pauseReasons: [\"exception\", \"promiseRejection\"],\n unmatchedPausePolicy: \"wait-for-resume\",\n });\n const pausedStartedAt = pause.receivedAtMs ?? performance.now();\n const snapshot = await captureSnapshot(session, pause, {\n captures: command.captures,\n includeScopes: opts.includeScopes === true,\n ...(command.maxValueLength === undefined ? {} : { maxValueLength: command.maxValueLength }),\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n });\n if (opts.keepPaused === true) {\n return withPausedDuration(snapshot, null);\n }\n return await resumeAfterException(session, snapshot, pausedStartedAt);\n } finally {\n await disablePauseOnExceptionsBestEffort(session);\n }\n });\n}\n\nasync function resumeAfterException(\n session: InspectorSession,\n snapshot: Awaited<ReturnType<typeof captureSnapshot>>,\n pausedStartedAt: number,\n): Promise<SnapshotResult> {\n try {\n await resume(session);\n return withPausedDuration(snapshot, roundDurationMs(performance.now() - pausedStartedAt));\n } catch {\n process.stderr.write(\n \"[cf-inspector] warning: Debugger.resume failed after exception capture; pausedDurationMs is unknown.\\n\",\n );\n return withPausedDuration(snapshot, null);\n }\n}\n\nasync function disablePauseOnExceptionsBestEffort(session: InspectorSession): Promise<void> {\n try {\n await setPauseOnExceptions(session, \"none\");\n } catch {\n // best-effort: tunnel may be gone\n }\n}\n","import { CfInspectorError } from \"./types.js\";\nimport type { BreakpointLocation, RemoteRootSetting } from \"./types.js\";\n\nconst REGEX_PREFIX = \"regex:\";\n// cspell:ignore dgimsuvy\nconst REGEX_FLAGS_PATTERN = /^[dgimsuvy]*$/;\nconst TS_JS_EXT_PATTERN = /\\.(?:ts|js|mts|mjs|cts|cjs)$/i;\n\nexport function parseBreakpointSpec(input: string): BreakpointLocation {\n const idx = input.lastIndexOf(\":\");\n if (idx <= 0 || idx === input.length - 1) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n `Breakpoint must be in 'file:line' form, received: \"${input}\"`,\n );\n }\n const file = input.slice(0, idx).trim();\n const lineRaw = input.slice(idx + 1).trim();\n const line = Number.parseInt(lineRaw, 10);\n if (!Number.isInteger(line) || line <= 0 || line.toString() !== lineRaw) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n `Breakpoint line must be a positive integer, received: \"${lineRaw}\"`,\n );\n }\n if (file.length === 0) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n `Breakpoint file path is empty in \"${input}\"`,\n );\n }\n return { file, line };\n}\n\nexport function parseRemoteRoot(value: string | undefined): RemoteRootSetting {\n const trimmed = value?.trim();\n if (trimmed === undefined || trimmed.length === 0) {\n return { kind: \"none\" };\n }\n if (trimmed.startsWith(REGEX_PREFIX)) {\n return toRegex(trimmed.slice(REGEX_PREFIX.length), \"\");\n }\n const slashRegex = parseSlashDelimited(trimmed);\n if (slashRegex !== undefined) {\n return toRegex(slashRegex.pattern, slashRegex.flags);\n }\n return { kind: \"literal\", value: stripTrailingSlash(trimmed) };\n}\n\nfunction toRegex(pattern: string, flags: string): RemoteRootSetting {\n try {\n const regex = new RegExp(pattern, flags);\n return { kind: \"regex\", pattern, flags, regex };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new CfInspectorError(\n \"INVALID_REMOTE_ROOT\",\n `Failed to compile remote-root regex \"${pattern}\" with flags \"${flags}\": ${message}`,\n );\n }\n}\n\nfunction parseSlashDelimited(value: string): { pattern: string; flags: string } | undefined {\n if (!value.startsWith(\"/\")) {\n return undefined;\n }\n const closing = findLastUnescapedSlash(value);\n if (closing <= 0) {\n return undefined;\n }\n const flags = value.slice(closing + 1);\n // Disambiguate with literal paths: a path like \"/home/vcap/app/\" would parse\n // as `/<pattern>/` with empty flags. We require non-empty flags for the\n // slash-delimited form; flagless regexes must use the explicit \"regex:\" prefix.\n if (flags.length === 0 || !REGEX_FLAGS_PATTERN.test(flags)) {\n return undefined;\n }\n return { pattern: value.slice(1, closing), flags };\n}\n\nfunction findLastUnescapedSlash(value: string): number {\n for (let i = value.length - 1; i > 0; i--) {\n if (value[i] === \"/\" && !isEscaped(value, i)) {\n return i;\n }\n }\n return -1;\n}\n\nfunction isEscaped(value: string, idx: number): boolean {\n let backslashes = 0;\n for (let i = idx - 1; i >= 0; i--) {\n if (value[i] === \"\\\\\") {\n backslashes++;\n } else {\n break;\n }\n }\n return backslashes % 2 === 1;\n}\n\nfunction stripTrailingSlash(value: string): string {\n if (value.length > 1 && value.endsWith(\"/\")) {\n return value.slice(0, -1);\n }\n return value;\n}\n\nfunction normalizeRegexRootPattern(pattern: string): string {\n const withoutStartAnchor = pattern.startsWith(\"^\") ? pattern.slice(1) : pattern;\n const withoutEndAnchor =\n withoutStartAnchor.endsWith(\"$\") && !isEscaped(withoutStartAnchor, withoutStartAnchor.length - 1)\n ? withoutStartAnchor.slice(0, -1)\n : withoutStartAnchor;\n return stripTrailingSlash(withoutEndAnchor);\n}\n\nfunction buildFileUrlRegex(embeddedRoot: string, tail: string, separator: \"\" | \"/\"): string {\n return `^file://${embeddedRoot}${separator}${tail}$`;\n}\n\nfunction rootSeparator(rawPattern: string): \"\" | \"/\" {\n return rawPattern.endsWith(\"/\") ? \"\" : \"/\";\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n}\n\nfunction normalizeRelative(file: string): string {\n return file.replaceAll(/^[./\\\\]+/g, \"\").replaceAll(\"\\\\\", \"/\");\n}\n\nfunction dropExtension(file: string): { stem: string; matchedExt: boolean } {\n const match = TS_JS_EXT_PATTERN.exec(file);\n if (!match) {\n return { stem: file, matchedExt: false };\n }\n return { stem: file.slice(0, match.index), matchedExt: true };\n}\n\nconst EXT_GROUP = String.raw`\\.(?:ts|js|mts|mjs|cts|cjs)`;\nconst OPTIONAL_EXT_GROUP = String.raw`(?:\\.(?:ts|js|mts|mjs|cts|cjs))?`;\n\nexport interface BuildUrlRegexInput {\n readonly file: string;\n readonly remoteRoot: RemoteRootSetting;\n}\n\nexport function buildBreakpointUrlRegex(input: BuildUrlRegexInput): string {\n const normalized = normalizeRelative(input.file);\n const { stem, matchedExt } = dropExtension(normalized);\n const escapedStem = escapeRegExp(stem);\n const tail = matchedExt ? `${escapedStem}${EXT_GROUP}` : `${escapedStem}${OPTIONAL_EXT_GROUP}`;\n\n switch (input.remoteRoot.kind) {\n case \"none\": {\n return `(?:^|/)${tail}$`;\n }\n case \"literal\": {\n const root = input.remoteRoot.value;\n return buildFileUrlRegex(escapeRegExp(root), tail, rootSeparator(root));\n }\n case \"regex\": {\n const root = normalizeRegexRootPattern(input.remoteRoot.pattern);\n // Wrap the user pattern in a non-capturing group so alternation in the\n // user's regex (e.g. `regex:a|b`) does not bind to the surrounding\n // `^file://` / tail. Without this, the engine would parse the result as\n // `(^file://a)|(b/.../src/...$)`.\n return buildFileUrlRegex(`(?:${root})`, tail, rootSeparator(root));\n }\n }\n}\n","import { buildBreakpointUrlRegex } from \"../pathMapper.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { BreakpointHandle, RemoteRootSetting } from \"../types.js\";\n\nimport { asString, toResolvedLocations } from \"./conversions.js\";\nimport type { CdpSetBreakpointResult, InspectorSession, SetBreakpointInput } from \"./types.js\";\n\nconst HITS_GLOBAL = \"globalThis.__CFI_HITS\";\nlet counterKeyCounter = 0;\n\nfunction nextCounterKey(file: string, line: number): string {\n counterKeyCounter += 1;\n return `${file}:${line.toString()}:${counterKeyCounter.toString()}`;\n}\n\nfunction validateHitCount(hitCount: number | undefined): number | undefined {\n if (hitCount === undefined) {\n return undefined;\n }\n if (!Number.isInteger(hitCount) || hitCount <= 0) {\n throw new CfInspectorError(\n \"INVALID_HIT_COUNT\",\n `hitCount must be a positive integer, received: ${hitCount.toString()}`,\n );\n }\n return hitCount;\n}\n\nexport function buildHitCountedCondition(\n hitCount: number,\n counterKey: string,\n userCondition: string | undefined,\n): string {\n const keyLiteral = JSON.stringify(counterKey);\n const baseCondition = userCondition !== undefined && userCondition.trim().length > 0\n ? `(${userCondition})`\n : \"true\";\n return [\n \"(function(){\",\n `var m=(${HITS_GLOBAL}=${HITS_GLOBAL}||{});`,\n `var k=${keyLiteral};`,\n \"m[k]=(m[k]||0)+1;\",\n `if(m[k]<${hitCount.toString()})return false;`,\n `return ${baseCondition};`,\n \"})()\",\n ].join(\"\");\n}\n\nfunction resolveCondition(\n input: SetBreakpointInput,\n): string | undefined {\n const condition = input.condition;\n const hitCount = validateHitCount(input.hitCount);\n if (hitCount === undefined) {\n return condition !== undefined && condition.length > 0 ? condition : undefined;\n }\n const counterKey = nextCounterKey(input.file, input.line);\n return buildHitCountedCondition(hitCount, counterKey, condition);\n}\n\nexport async function setBreakpoint(\n session: InspectorSession,\n input: SetBreakpointInput,\n): Promise<BreakpointHandle> {\n const remoteRoot: RemoteRootSetting = input.remoteRoot ?? { kind: \"none\" };\n const urlRegex = buildBreakpointUrlRegex({ file: input.file, remoteRoot });\n const params: Record<string, unknown> = {\n lineNumber: input.line - 1,\n urlRegex,\n };\n const condition = resolveCondition(input);\n if (condition !== undefined) {\n params[\"condition\"] = condition;\n }\n const result = await session.client.send<CdpSetBreakpointResult>(\n \"Debugger.setBreakpointByUrl\",\n params,\n );\n const breakpointId = asString(result.breakpointId);\n if (breakpointId.length === 0) {\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n `setBreakpointByUrl did not return a breakpointId for ${input.file}:${input.line.toString()}`,\n );\n }\n return {\n breakpointId,\n file: input.file,\n line: input.line,\n urlRegex,\n resolvedLocations: toResolvedLocations(result.locations),\n };\n}\n\nexport async function removeBreakpoint(\n session: InspectorSession,\n breakpointId: string,\n): Promise<void> {\n await session.client.send(\"Debugger.removeBreakpoint\", { breakpointId });\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { CfInspectorError } from \"../types.js\";\nimport type { PauseEvent } from \"../types.js\";\n\nimport { pauseDetail, toPauseEvent } from \"./conversions.js\";\nimport type { CdpPauseParams, InspectorSession, WaitForPauseOptions } from \"./types.js\";\n\nfunction pauseMatches(\n pause: PauseEvent,\n breakpointIds: readonly string[] | undefined,\n pauseReasons: readonly string[] | undefined,\n): boolean {\n if (pauseReasons !== undefined && pauseReasons.length > 0) {\n return pauseReasons.includes(pause.reason);\n }\n if (breakpointIds === undefined || breakpointIds.length === 0) {\n return true;\n }\n return pause.hitBreakpoints.some((id) => breakpointIds.includes(id));\n}\n\nfunction remainingUntil(deadlineMs: number): number {\n return Math.max(0, deadlineMs - performance.now());\n}\n\nfunction hasResumedSincePause(session: InspectorSession, pause: PauseEvent): boolean {\n const pauseAt = pause.receivedAtMs;\n const resumedAt = session.debuggerState.lastResumedAtMs;\n return pauseAt !== undefined && resumedAt !== undefined && resumedAt >= pauseAt;\n}\n\nfunction throwBreakpointTimeout(timeoutMs: number): never {\n throw new CfInspectorError(\n \"BREAKPOINT_NOT_HIT\",\n `Timed out waiting for matching Debugger.paused after ${timeoutMs.toString()}ms`,\n );\n}\n\nfunction throwUnrelatedPauseTimeout(pause: PauseEvent, timeoutMs: number): never {\n throw new CfInspectorError(\n \"UNRELATED_PAUSE_TIMEOUT\",\n `Target stayed paused by another debugger event before this command's breakpoint could hit within ${timeoutMs.toString()}ms`,\n pauseDetail(pause),\n );\n}\n\nasync function waitForUnmatchedPauseToResume(\n session: InspectorSession,\n pause: PauseEvent,\n deadlineMs: number,\n timeoutMs: number,\n): Promise<void> {\n if (hasResumedSincePause(session, pause)) {\n return;\n }\n const remainingMs = remainingUntil(deadlineMs);\n if (remainingMs <= 0) {\n throwUnrelatedPauseTimeout(pause, timeoutMs);\n }\n try {\n await session.client.waitFor(\"Debugger.resumed\", { timeoutMs: remainingMs });\n session.debuggerState.lastResumedAtMs = performance.now();\n } catch (err: unknown) {\n if (err instanceof CfInspectorError && err.code === \"BREAKPOINT_NOT_HIT\") {\n throwUnrelatedPauseTimeout(pause, timeoutMs);\n }\n throw err;\n }\n}\n\nasync function handleUnmatchedPause(\n session: InspectorSession,\n pause: PauseEvent,\n options: WaitForPauseOptions,\n deadlineMs: number,\n): Promise<void> {\n if (options.unmatchedPausePolicy === \"fail\") {\n throw new CfInspectorError(\n \"UNRELATED_PAUSE\",\n \"Target paused before this command's breakpoint was reached\",\n pauseDetail(pause),\n );\n }\n if (hasResumedSincePause(session, pause)) {\n return;\n }\n options.onUnmatchedPause?.(pause);\n await waitForUnmatchedPauseToResume(session, pause, deadlineMs, options.timeoutMs);\n}\n\nexport async function waitForPause(\n session: InspectorSession,\n options: WaitForPauseOptions,\n): Promise<PauseEvent> {\n const deadlineMs = performance.now() + options.timeoutMs;\n const buffer = session.pauseBuffer;\n while (buffer.length > 0 || remainingUntil(deadlineMs) > 0) {\n while (buffer.length > 0) {\n const buffered = buffer.shift();\n if (buffered === undefined) {\n continue;\n }\n if (pauseMatches(buffered, options.breakpointIds, options.pauseReasons)) {\n return buffered;\n }\n await handleUnmatchedPause(session, buffered, options, deadlineMs);\n }\n const pause = await waitForLivePause(session, options, deadlineMs);\n if (pauseMatches(pause, options.breakpointIds, options.pauseReasons)) {\n return pause;\n }\n await handleUnmatchedPause(session, pause, options, deadlineMs);\n }\n throwBreakpointTimeout(options.timeoutMs);\n}\n\nasync function waitForLivePause(\n session: InspectorSession,\n options: WaitForPauseOptions,\n deadlineMs: number,\n): Promise<PauseEvent> {\n const remainingMs = remainingUntil(deadlineMs);\n if (remainingMs <= 0) {\n throwBreakpointTimeout(options.timeoutMs);\n }\n session.pauseWaitGate.active = true;\n let receivedAtMs: number | undefined;\n let params: CdpPauseParams;\n try {\n params = await session.client.waitFor<CdpPauseParams>(\"Debugger.paused\", {\n timeoutMs: remainingMs,\n predicate: (): boolean => {\n receivedAtMs = performance.now();\n return true;\n },\n });\n } finally {\n session.pauseWaitGate.active = false;\n }\n return toPauseEvent(params, receivedAtMs ?? performance.now(), session.scripts);\n}\n","import { CfInspectorError } from \"../types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nexport const DEFAULT_MAX_VALUE_LENGTH = 4096;\n\nexport function isPrimitive(value: unknown): value is string | number | boolean | bigint | symbol {\n const t = typeof value;\n return t === \"string\" || t === \"number\" || t === \"boolean\" || t === \"bigint\" || t === \"symbol\";\n}\n\nexport function formatPrimitive(value: string | number | boolean | bigint | symbol): string {\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"bigint\") {\n return `${value.toString()}n`;\n }\n return String(value);\n}\n\nexport function resolveMaxValueLength(value: number | undefined): number {\n if (value === undefined) {\n return DEFAULT_MAX_VALUE_LENGTH;\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new CfInspectorError(\n \"INVALID_ARGUMENT\",\n `Invalid maxValueLength: ${value.toString()} — expected a positive integer`,\n );\n }\n return value;\n}\n\nexport function limitValueLength(raw: string, maxValueLength = DEFAULT_MAX_VALUE_LENGTH): string {\n if (raw.length <= maxValueLength) {\n return raw;\n }\n return `${raw.slice(0, maxValueLength)}...`;\n}\n\nfunction parseQuotedString(value: string): string {\n try {\n const parsed: unknown = JSON.parse(value);\n return typeof parsed === \"string\" ? parsed : value;\n } catch {\n return value;\n }\n}\n\nfunction parseNumericIndex(name: string): number | undefined {\n const parsed = Number.parseInt(name, 10);\n if (!Number.isInteger(parsed) || parsed < 0 || parsed.toString() !== name) {\n return undefined;\n }\n return parsed;\n}\n\nfunction scalarFromVariable(variable: VariableSnapshot): unknown {\n const value = variable.value;\n if (variable.type === \"string\") {\n return parseQuotedString(value);\n }\n if (variable.type === \"number\") {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : value;\n }\n if (variable.type === \"boolean\") {\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n }\n if (variable.type === \"undefined\") {\n return \"[undefined]\";\n }\n if (variable.type === \"bigint\") {\n return value;\n }\n return value === \"null\" ? null : value;\n}\n\nfunction isArrayLikeChildren(children: readonly VariableSnapshot[]): boolean {\n let hasNumeric = false;\n for (const child of children) {\n // V8 includes `length` as an own property on arrays; ignore it when\n // deciding whether the children look array-shaped.\n if (child.name === \"length\") {\n continue;\n }\n if (parseNumericIndex(child.name) === undefined) {\n return false;\n }\n hasNumeric = true;\n }\n return hasNumeric;\n}\n\nexport function toStructuredValue(variable: VariableSnapshot): unknown {\n const children = variable.children;\n if (children === undefined || children.length === 0) {\n return scalarFromVariable(variable);\n }\n if (isArrayLikeChildren(children)) {\n const indexed = children.flatMap((child): readonly [number, unknown][] => {\n const index = parseNumericIndex(child.name);\n if (index === undefined) {\n // length entry; not part of the array body\n return [];\n }\n return [[index, toStructuredValue(child)]];\n });\n const maxIndex = Math.max(...indexed.map(([index]) => index));\n const out = Array.from({ length: maxIndex + 1 }, () => null as unknown);\n for (const [index, entry] of indexed) {\n out[index] = entry;\n }\n return out;\n }\n // Mixed numeric + string keys, or pure string keys: keep all children as\n // an object so non-indexed properties are not silently dropped.\n const out: Record<string, unknown> = {};\n for (const child of children) {\n out[child.name] = toStructuredValue(child);\n }\n return out;\n}\n","import type { CdpEvalResult } from \"../inspector/types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n DEFAULT_MAX_VALUE_LENGTH,\n formatPrimitive,\n isPrimitive,\n limitValueLength,\n} from \"./values.js\";\n\nexport function evalResultToCaptured(\n expression: string,\n result: CdpEvalResult,\n maxValueLength = DEFAULT_MAX_VALUE_LENGTH,\n): CapturedExpression {\n if (result.exceptionDetails !== undefined) {\n return { expression, error: readEvalError(result, maxValueLength) };\n }\n const inner = result.result;\n if (!inner) {\n return { expression, error: \"no result returned\" };\n }\n const type = typeof inner.type === \"string\" ? inner.type : undefined;\n const buildCaptured = (rendered: string): CapturedExpression => {\n const sanitized = limitValueLength(rendered, maxValueLength);\n const base: CapturedExpression = { expression, value: sanitized };\n return type === undefined ? base : { ...base, type };\n };\n\n if (type === \"string\" && typeof inner.value === \"string\") {\n return buildCaptured(JSON.stringify(inner.value));\n }\n if ((type === \"number\" || type === \"boolean\" || type === \"bigint\") && isPrimitive(inner.value)) {\n return buildCaptured(formatPrimitive(inner.value));\n }\n if (typeof inner.description === \"string\") {\n return buildCaptured(inner.description);\n }\n if (isPrimitive(inner.value)) {\n return buildCaptured(formatPrimitive(inner.value));\n }\n return buildCaptured(\"undefined\");\n}\n\nfunction readEvalError(result: CdpEvalResult, maxValueLength: number): string {\n const text =\n typeof result.exceptionDetails?.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails?.text === \"string\" ? result.exceptionDetails.text : \"evaluation failed\");\n return limitValueLength(text, maxValueLength);\n}\n","import { getProperties } from \"../inspector/runtime.js\";\nimport type { CdpProperty, InspectorSession } from \"../inspector/types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nimport { formatPrimitive, isPrimitive, limitValueLength } from \"./values.js\";\n\nexport const MAX_SCOPE_VARIABLES = 20;\nexport const MAX_CHILD_VARIABLES = 8;\nexport const MAX_VARIABLE_DEPTH = 2;\n\ninterface DescribedProperty {\n value: string;\n type?: string;\n objectId?: string;\n}\n\nfunction buildDescribed(value: string, type: string | undefined, objectId?: string): DescribedProperty {\n const base: DescribedProperty = { value };\n if (type !== undefined) {\n base.type = type;\n }\n if (objectId !== undefined) {\n base.objectId = objectId;\n }\n return base;\n}\n\nexport function describeProperty(prop: CdpProperty): DescribedProperty {\n const value = prop.value;\n if (value === undefined) {\n return { value: \"undefined\" };\n }\n const type = typeof value.type === \"string\" ? value.type : undefined;\n const objectId = typeof value.objectId === \"string\" ? value.objectId : undefined;\n if (type === \"undefined\") {\n return buildDescribed(\"undefined\", type);\n }\n if (type === \"string\" && typeof value.value === \"string\") {\n return buildDescribed(JSON.stringify(value.value), type);\n }\n if (\n (type === \"number\" || type === \"boolean\" || type === \"bigint\" || type === \"symbol\") &&\n isPrimitive(value.value)\n ) {\n return buildDescribed(formatPrimitive(value.value), type);\n }\n if (typeof value.description === \"string\") {\n return buildDescribed(value.description, type, objectId);\n }\n if (isPrimitive(value.value)) {\n return buildDescribed(formatPrimitive(value.value), type);\n }\n if (objectId === undefined) {\n return buildDescribed(\"undefined\", type);\n }\n return buildDescribed(\"[object]\", type, objectId);\n}\n\nfunction isExpandable(type: string | undefined): boolean {\n return type === \"object\" || type === \"function\";\n}\n\nexport async function captureProperties(\n session: InspectorSession,\n objectId: string,\n limit: number,\n depth: number,\n maxValueLength: number,\n): Promise<readonly VariableSnapshot[]> {\n const properties = await getProperties(session, objectId);\n const limited = properties.slice(0, limit);\n const variables = await Promise.all(\n limited.map(async (prop): Promise<VariableSnapshot> => {\n return await captureProperty(session, prop, depth, maxValueLength);\n }),\n );\n return variables;\n}\n\nasync function captureProperty(\n session: InspectorSession,\n prop: CdpProperty,\n depth: number,\n maxValueLength: number,\n): Promise<VariableSnapshot> {\n const name = typeof prop.name === \"string\" ? prop.name : \"?\";\n const described = describeProperty(prop);\n const children = await capturePropertyChildren(session, described, depth, maxValueLength);\n const sanitizedValue = limitValueLength(described.value, maxValueLength);\n const base: VariableSnapshot = { name, value: sanitizedValue };\n const withType = described.type === undefined ? base : { ...base, type: described.type };\n return children === undefined ? withType : { ...withType, children };\n}\n\nasync function capturePropertyChildren(\n session: InspectorSession,\n described: DescribedProperty,\n depth: number,\n maxValueLength: number,\n): Promise<readonly VariableSnapshot[] | undefined> {\n if (depth <= 0 || described.objectId === undefined || !isExpandable(described.type)) {\n return undefined;\n }\n try {\n const nested = await captureProperties(\n session,\n described.objectId,\n MAX_CHILD_VARIABLES,\n depth - 1,\n maxValueLength,\n );\n return nested.length > 0 ? nested : undefined;\n } catch {\n return undefined;\n }\n}\n","import { getProperties } from \"../inspector/runtime.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport type { ExceptionSnapshot, PauseEvent } from \"../types.js\";\n\nimport {\n captureProperties,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport { limitValueLength, toStructuredValue } from \"./values.js\";\n\ninterface CdpExceptionData {\n readonly type?: unknown;\n readonly description?: unknown;\n readonly value?: unknown;\n readonly objectId?: unknown;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nasync function materializeObject(\n session: InspectorSession,\n objectId: string,\n maxValueLength: number,\n): Promise<string | undefined> {\n try {\n const properties = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n if (properties.length === 0) {\n return undefined;\n }\n const structured: Record<string, unknown> = {};\n for (const variable of properties) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return JSON.stringify(structured);\n } catch {\n return undefined;\n }\n}\n\nasync function readPropertyDescription(\n session: InspectorSession,\n objectId: string,\n name: string,\n): Promise<string | undefined> {\n try {\n const properties = await getProperties(session, objectId);\n for (const prop of properties) {\n if (prop.name !== name) {\n continue;\n }\n const value = prop.value;\n if (value === undefined) {\n continue;\n }\n if (typeof value.value === \"string\") {\n return value.value;\n }\n if (typeof value.description === \"string\") {\n return value.description;\n }\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nexport async function captureException(\n session: InspectorSession,\n pause: PauseEvent,\n maxValueLength: number,\n): Promise<ExceptionSnapshot | undefined> {\n if (pause.reason !== \"exception\" && pause.reason !== \"promiseRejection\") {\n return undefined;\n }\n const data = pause.data;\n if (typeof data !== \"object\" || data === null) {\n return { error: \"no exception data attached\" };\n }\n const candidate = data as CdpExceptionData;\n const type = asString(candidate.type);\n const description = asString(candidate.description);\n if (typeof candidate.value === \"string\") {\n return buildResult(type, description, JSON.stringify(candidate.value), maxValueLength);\n }\n if (typeof candidate.value === \"number\" || typeof candidate.value === \"boolean\") {\n return buildResult(type, description, String(candidate.value), maxValueLength);\n }\n const objectId = asString(candidate.objectId);\n if (objectId === undefined) {\n if (description !== undefined) {\n return buildResult(type, description, description, maxValueLength);\n }\n return { error: \"exception data has no objectId or value\" };\n }\n const message = await readPropertyDescription(session, objectId, \"message\");\n const rendered = await materializeObject(session, objectId, maxValueLength);\n if (rendered !== undefined) {\n const result = buildResult(type, description, rendered, maxValueLength);\n return message === undefined ? result : { ...result, description: limitValueLength(message, maxValueLength) };\n }\n return buildResult(type, description, description ?? \"[exception]\", maxValueLength);\n}\n\nfunction buildResult(\n type: string | undefined,\n description: string | undefined,\n value: string,\n maxValueLength: number,\n): ExceptionSnapshot {\n const safeValue = limitValueLength(value, maxValueLength);\n const base: ExceptionSnapshot = { value: safeValue };\n const withType = type === undefined ? base : { ...base, type };\n return description === undefined ? withType : { ...withType, description: limitValueLength(description, maxValueLength) };\n}\n","import type { CdpEvalResult, InspectorSession } from \"../inspector/types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n captureProperties,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport { limitValueLength, toStructuredValue } from \"./values.js\";\n\nfunction objectIdFromEvalResult(result: CdpEvalResult): string | undefined {\n const inner = result.result;\n if (inner?.type !== \"object\") {\n return undefined;\n }\n const objectId = inner.objectId;\n if (typeof objectId !== \"string\" || objectId.length === 0) {\n return undefined;\n }\n return objectId;\n}\n\nasync function renderObjectCapture(\n session: InspectorSession,\n objectId: string,\n maxValueLength: number,\n): Promise<string | undefined> {\n try {\n const properties = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n const structured: Record<string, unknown> = {};\n for (const variable of properties) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return JSON.stringify(structured);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeRenderedObjectCapture(rendered: string, original: string): string | undefined {\n if (rendered === \"{}\" && original !== \"Object\") {\n return undefined;\n }\n if (original.startsWith(\"Array(\") && rendered === \"{\\\"length\\\":0}\") {\n return \"[]\";\n }\n return rendered;\n}\n\nexport async function withSerializedObjectCapture(\n session: InspectorSession,\n expression: string,\n evalResult: CdpEvalResult,\n captured: CapturedExpression,\n maxValueLength: number,\n): Promise<CapturedExpression> {\n if (captured.error !== undefined || captured.value === undefined) {\n return captured;\n }\n const objectId = objectIdFromEvalResult(evalResult);\n if (objectId === undefined) {\n return captured;\n }\n const rendered = await renderObjectCapture(session, objectId, maxValueLength);\n if (rendered === undefined) {\n return captured;\n }\n const normalized = normalizeRenderedObjectCapture(rendered, captured.value);\n if (normalized === undefined) {\n return captured;\n }\n const value = limitValueLength(normalized, maxValueLength);\n return captured.type === undefined\n ? { expression, value }\n : { expression, value, type: captured.type };\n}\n","import type { InspectorSession } from \"../inspector/types.js\";\nimport type { CallFrameInfo, ScopeSnapshot } from \"../types.js\";\n\nimport {\n captureProperties,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\n\nconst MAX_SCOPES = 3;\n\nconst PRIORITY_BY_TYPE: Readonly<Record<string, number>> = {\n local: 0,\n arguments: 1,\n block: 2,\n closure: 3,\n catch: 4,\n with: 5,\n module: 6,\n script: 7,\n};\n\nexport function selectScopes(scopeChain: CallFrameInfo[\"scopeChain\"]): CallFrameInfo[\"scopeChain\"] {\n const eligible = scopeChain.filter((scope) => scope.objectId !== undefined && scope.type !== \"global\");\n return [...eligible]\n .sort((a, b) => priorityOf(a.type) - priorityOf(b.type))\n .slice(0, MAX_SCOPES);\n}\n\nfunction priorityOf(type: string): number {\n return PRIORITY_BY_TYPE[type] ?? Number.MAX_SAFE_INTEGER;\n}\n\nexport async function captureScopes(\n session: InspectorSession,\n frame: CallFrameInfo,\n maxValueLength: number,\n): Promise<readonly ScopeSnapshot[]> {\n const scopes = selectScopes(frame.scopeChain);\n return await Promise.all(\n scopes.map(async (scope): Promise<ScopeSnapshot> => {\n const objectId = scope.objectId;\n if (objectId === undefined) {\n return { type: scope.type, variables: [] };\n }\n try {\n const variables = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n return { type: scope.type, variables };\n } catch {\n return { type: scope.type, variables: [] };\n }\n }),\n );\n}\n","import { evaluateOnFrame } from \"../inspector/runtime.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport type {\n CallFrameInfo,\n CapturedExpression,\n FrameSnapshot,\n} from \"../types.js\";\n\nimport { evalResultToCaptured } from \"./evaluation.js\";\nimport { withSerializedObjectCapture } from \"./objects.js\";\nimport { limitValueLength } from \"./values.js\";\n\nexport const DEFAULT_STACK_DEPTH = 1;\nexport const MAX_STACK_DEPTH = 64;\n\nfunction clampDepth(depth: number, frameCount: number): number {\n if (depth <= 0) {\n return 0;\n }\n return Math.min(depth, frameCount, MAX_STACK_DEPTH);\n}\n\nfunction buildBaseFrame(frame: CallFrameInfo): FrameSnapshot {\n const base: FrameSnapshot = {\n functionName: frame.functionName,\n line: frame.lineNumber + 1,\n column: frame.columnNumber + 1,\n };\n return frame.url === undefined ? base : { ...base, url: frame.url };\n}\n\nasync function captureFrameExpression(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n maxValueLength: number,\n): Promise<CapturedExpression> {\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression);\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n return await withSerializedObjectCapture(session, expression, result, captured, maxValueLength);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return { expression, error: limitValueLength(message, maxValueLength) };\n }\n}\n\nasync function captureFrameExpressions(\n session: InspectorSession,\n frame: CallFrameInfo,\n expressions: readonly string[],\n maxValueLength: number,\n): Promise<readonly CapturedExpression[]> {\n if (expressions.length === 0) {\n return [];\n }\n return await Promise.all(\n expressions.map((expression) =>\n captureFrameExpression(session, frame.callFrameId, expression, maxValueLength),\n ),\n );\n}\n\nexport interface WalkStackOptions {\n readonly stackDepth: number;\n readonly stackCaptures: readonly string[];\n readonly maxValueLength: number;\n}\n\nexport async function walkStack(\n session: InspectorSession,\n callFrames: readonly CallFrameInfo[],\n options: WalkStackOptions,\n): Promise<readonly FrameSnapshot[]> {\n const depth = clampDepth(options.stackDepth, callFrames.length);\n if (depth <= 1) {\n return [];\n }\n const slice = callFrames.slice(0, depth);\n return await Promise.all(\n slice.map(async (frame): Promise<FrameSnapshot> => {\n const base = buildBaseFrame(frame);\n if (options.stackCaptures.length === 0) {\n return base;\n }\n const captures = await captureFrameExpressions(\n session,\n frame,\n options.stackCaptures,\n options.maxValueLength,\n );\n return { ...base, captures };\n }),\n );\n}\n","import { evaluateOnFrame } from \"../inspector/runtime.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport type {\n CapturedExpression,\n ExceptionSnapshot,\n FrameSnapshot,\n PauseEvent,\n SnapshotCaptureResult,\n} from \"../types.js\";\n\nimport { evalResultToCaptured } from \"./evaluation.js\";\nimport { captureException } from \"./exception.js\";\nimport { withSerializedObjectCapture } from \"./objects.js\";\nimport { describeProperty } from \"./properties.js\";\nimport { captureScopes, selectScopes } from \"./scopes.js\";\nimport { DEFAULT_STACK_DEPTH, walkStack } from \"./stack.js\";\nimport {\n DEFAULT_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n} from \"./values.js\";\n\nexport interface CaptureSnapshotOptions {\n readonly captures?: readonly string[];\n readonly includeScopes?: boolean;\n readonly maxValueLength?: number;\n readonly stackDepth?: number;\n readonly stackCaptures?: readonly string[];\n}\n\nexport async function captureSnapshot(\n session: InspectorSession,\n pause: PauseEvent,\n options: CaptureSnapshotOptions = {},\n): Promise<SnapshotCaptureResult> {\n const maxValueLength = resolveMaxValueLength(options.maxValueLength);\n const top = pause.callFrames[0];\n let topFrame: FrameSnapshot | undefined;\n let captures: CapturedExpression[] = [];\n let stack: readonly FrameSnapshot[] = [];\n if (top) {\n topFrame = {\n functionName: top.functionName,\n ...(top.url === undefined ? {} : { url: top.url }),\n line: top.lineNumber + 1,\n column: top.columnNumber + 1,\n };\n if (options.includeScopes === true) {\n const scopes = await captureScopes(session, top, maxValueLength);\n topFrame = { ...topFrame, scopes };\n }\n captures = await captureExpressions(session, top.callFrameId, options.captures, maxValueLength);\n stack = await walkStack(session, pause.callFrames, {\n stackDepth: options.stackDepth ?? DEFAULT_STACK_DEPTH,\n stackCaptures: options.stackCaptures ?? [],\n maxValueLength,\n });\n }\n const exception = await captureException(session, pause, maxValueLength);\n return buildResult({\n pause,\n topFrame,\n captures,\n stack,\n exception,\n });\n}\n\ninterface BuildResultInput {\n readonly pause: PauseEvent;\n readonly topFrame: FrameSnapshot | undefined;\n readonly captures: readonly CapturedExpression[];\n readonly stack: readonly FrameSnapshot[];\n readonly exception: ExceptionSnapshot | undefined;\n}\n\nfunction buildResult(input: BuildResultInput): SnapshotCaptureResult {\n const base: SnapshotCaptureResult = {\n reason: input.pause.reason,\n hitBreakpoints: input.pause.hitBreakpoints,\n capturedAt: new Date().toISOString(),\n captures: input.captures,\n };\n const withFrame = input.topFrame === undefined ? base : { ...base, topFrame: input.topFrame };\n const withStack = input.stack.length > 0 ? { ...withFrame, stack: input.stack } : withFrame;\n return input.exception === undefined ? withStack : { ...withStack, exception: input.exception };\n}\n\nasync function captureExpressions(\n session: InspectorSession,\n callFrameId: string,\n captures: readonly string[] | undefined,\n maxValueLength: number,\n): Promise<CapturedExpression[]> {\n if (captures === undefined || captures.length === 0) {\n return [];\n }\n return await Promise.all(\n captures.map(async (expression): Promise<CapturedExpression> => {\n return await captureExpression(session, callFrameId, expression, maxValueLength);\n }),\n );\n}\n\nasync function captureExpression(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n maxValueLength: number,\n): Promise<CapturedExpression> {\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression);\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n return await withSerializedObjectCapture(session, expression, result, captured, maxValueLength);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return { expression, error: limitValueLength(message, maxValueLength) };\n }\n}\n\nexport const internalsForTesting = {\n DEFAULT_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n describeProperty,\n selectScopes,\n evalResultToCaptured,\n};\n","export function parseCaptureList(raw: string | undefined): readonly string[] {\n if (raw === undefined || raw.trim().length === 0) {\n return [];\n }\n return splitCaptureExpressions(raw);\n}\n\ntype QuoteChar = \"'\" | \"\\\"\" | \"`\";\n\ninterface CaptureSplitState {\n quote: QuoteChar | undefined;\n escaped: boolean;\n parenDepth: number;\n bracketDepth: number;\n braceDepth: number;\n start: number;\n readonly pieces: string[];\n}\n\nfunction isQuoteChar(value: string): value is QuoteChar {\n return value === \"'\" || value === \"\\\"\" || value === \"`\";\n}\n\nfunction consumeQuotedChar(state: CaptureSplitState, char: string): boolean {\n if (state.quote === undefined) {\n return false;\n }\n if (state.escaped) {\n state.escaped = false;\n return true;\n }\n if (char === \"\\\\\") {\n state.escaped = true;\n return true;\n }\n if (char === state.quote) {\n state.quote = undefined;\n }\n return true;\n}\n\nfunction updateCaptureDepth(state: CaptureSplitState, char: string): void {\n if (char === \"(\") {\n state.parenDepth += 1;\n } else if (char === \")\") {\n state.parenDepth = Math.max(0, state.parenDepth - 1);\n } else if (char === \"[\") {\n state.bracketDepth += 1;\n } else if (char === \"]\") {\n state.bracketDepth = Math.max(0, state.bracketDepth - 1);\n } else if (char === \"{\") {\n state.braceDepth += 1;\n } else if (char === \"}\") {\n state.braceDepth = Math.max(0, state.braceDepth - 1);\n }\n}\n\nfunction isTopLevel(state: CaptureSplitState): boolean {\n return state.parenDepth === 0 && state.bracketDepth === 0 && state.braceDepth === 0;\n}\n\nfunction appendCapturePiece(raw: string, state: CaptureSplitState, end: number): void {\n const piece = raw.slice(state.start, end).trim();\n if (piece.length > 0) {\n state.pieces.push(piece);\n }\n}\n\nfunction splitCaptureExpressions(raw: string): readonly string[] {\n const state: CaptureSplitState = {\n escaped: false,\n parenDepth: 0,\n bracketDepth: 0,\n braceDepth: 0,\n quote: undefined,\n start: 0,\n pieces: [],\n };\n for (let idx = 0; idx < raw.length; idx += 1) {\n const char = raw.charAt(idx);\n if (consumeQuotedChar(state, char)) {\n continue;\n }\n if (isQuoteChar(char)) {\n state.quote = char;\n continue;\n }\n updateCaptureDepth(state, char);\n if (char === \",\" && isTopLevel(state)) {\n appendCapturePiece(raw, state, idx);\n state.start = idx + 1;\n }\n }\n appendCapturePiece(raw, state, raw.length);\n return state.pieces;\n}\n","import process from \"node:process\";\n\nimport type { BreakpointHandle, PauseEvent, SnapshotCaptureResult, SnapshotResult } from \"../types.js\";\n\nexport function warnOnUnboundBreakpoints(handles: readonly BreakpointHandle[]): void {\n for (const handle of handles) {\n if (handle.resolvedLocations.length === 0) {\n process.stderr.write(\n `[cf-inspector] warning: breakpoint ${handle.file}:${handle.line.toString()} ` +\n `did not bind to any loaded script. Check the path or pass --remote-root. ` +\n `Use 'list-scripts' to inspect what V8 currently has loaded.\\n`,\n );\n }\n }\n}\n\nexport function roundDurationMs(durationMs: number): number {\n return Math.round(durationMs * 1000) / 1000;\n}\n\nexport function warnOnUnmatchedPause(pause: PauseEvent): void {\n const reason = pause.reason.length > 0 ? pause.reason : \"unknown\";\n process.stderr.write(\n `[cf-inspector] warning: target is paused by another debugger event ` +\n `(${reason} at ${formatPauseLocation(pause)}); waiting for it to resume...\\n`,\n );\n}\n\nexport function withPausedDuration(\n snapshot: SnapshotCaptureResult,\n pausedDurationMs: number | null,\n): SnapshotResult {\n const base: SnapshotResult = {\n reason: snapshot.reason,\n hitBreakpoints: snapshot.hitBreakpoints,\n capturedAt: snapshot.capturedAt,\n pausedDurationMs,\n captures: snapshot.captures,\n };\n const withFrame = snapshot.topFrame === undefined ? base : { ...base, topFrame: snapshot.topFrame };\n const withStack = snapshot.stack === undefined ? withFrame : { ...withFrame, stack: snapshot.stack };\n return snapshot.exception === undefined ? withStack : { ...withStack, exception: snapshot.exception };\n}\n\nfunction formatPauseLocation(pause: PauseEvent): string {\n const top = pause.callFrames[0];\n if (top === undefined) {\n return \"(no call frame)\";\n }\n const url = top.url !== undefined && top.url.length > 0 ? top.url : \"(unknown)\";\n return `${url}:${(top.lineNumber + 1).toString()}:${(top.columnNumber + 1).toString()}`;\n}\n","import process from \"node:process\";\n\nimport { listScripts } from \"../../inspector/runtime.js\";\nimport type { ListScriptsCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { resolveTarget, withSession } from \"../target.js\";\n\nexport async function handleListScripts(opts: ListScriptsCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const scripts = await withSession(target, (session) => Promise.resolve(listScripts(session)));\n if (opts.json) {\n writeJson(scripts);\n return;\n }\n for (const script of scripts) {\n process.stdout.write(`${script.scriptId}\\t${script.url}\\n`);\n }\n}\n","import process from \"node:process\";\n\nimport { validateExpression } from \"../../inspector/runtime.js\";\nimport { streamLogpoint } from \"../../logpoint/stream.js\";\nimport { parseBreakpointSpec, parseRemoteRoot } from \"../../pathMapper.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { LogCommandOptions } from \"../commandTypes.js\";\nimport { writeLogEvent } from \"../output.js\";\nimport { withTerminationSignal } from \"../signals.js\";\nimport { parsePositiveInt, resolveTarget, withSession } from \"../target.js\";\nimport { warnOnUnboundBreakpoints } from \"../warnings.js\";\n\nexport async function handleLog(opts: LogCommandOptions): Promise<void> {\n const target = resolveTarget(opts);\n const location = parseBreakpointSpec(opts.at);\n const remoteRoot = parseRemoteRoot(opts.remoteRoot);\n const durationSec = parsePositiveInt(opts.duration, \"--duration\");\n const maxEvents = parsePositiveInt(opts.maxEvents, \"--max-events\");\n const hitCount = parsePositiveInt(opts.hitCount, \"--hit-count\");\n const expression = opts.expr.trim();\n if (expression.length === 0) {\n throw new CfInspectorError(\"INVALID_EXPRESSION\", \"--expr must not be empty\");\n }\n const condition = opts.condition !== undefined && opts.condition.trim().length > 0\n ? opts.condition.trim()\n : undefined;\n\n await withTerminationSignal(async (signal) => {\n await withSession(target, async (session) => {\n await validateExpression(session, expression);\n if (condition !== undefined) {\n await validateExpression(session, condition);\n }\n const result = await streamLogpoint(session, {\n location,\n expression,\n remoteRoot,\n ...(durationSec === undefined ? {} : { durationMs: durationSec * 1000 }),\n ...(maxEvents === undefined ? {} : { maxEvents }),\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(condition === undefined ? {} : { condition }),\n signal,\n onEvent: (event) => {\n writeLogEvent(event, opts.json);\n },\n onBreakpointSet: (handle) => {\n warnOnUnboundBreakpoints([handle]);\n },\n });\n writeLogSummary(result.stoppedReason, result.emitted, opts.json);\n });\n });\n}\n\nfunction writeLogSummary(stoppedReason: string, emitted: number, json: boolean): void {\n if (json) {\n process.stderr.write(`${JSON.stringify({ stopped: stoppedReason, emitted })}\\n`);\n return;\n }\n process.stderr.write(\n `Stopped (${stoppedReason}); emitted ${emitted.toString()} log ${emitted === 1 ? \"entry\" : \"entries\"}.\\n`,\n );\n}\n","import { removeBreakpoint, setBreakpoint } from \"../inspector/breakpoints.js\";\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { BreakpointHandle, BreakpointLocation, RemoteRootSetting } from \"../types.js\";\n\nimport { buildLogpointCondition, generateSentinel } from \"./condition.js\";\nimport { asString, parseLogEvent } from \"./events.js\";\nimport type { ConsoleAPICalledParams, LogpointEvent } from \"./events.js\";\n\nexport type LogpointStopReason =\n | \"duration\"\n | \"signal\"\n | \"transport-closed\"\n | \"max-events\";\n\nexport interface LogpointStreamOptions {\n readonly location: BreakpointLocation;\n readonly expression: string;\n readonly remoteRoot?: RemoteRootSetting;\n readonly durationMs?: number;\n readonly maxEvents?: number;\n readonly hitCount?: number;\n readonly condition?: string;\n readonly signal?: AbortSignal;\n readonly onEvent: (event: LogpointEvent) => void;\n readonly onBreakpointSet?: (handle: BreakpointHandle) => void;\n}\n\nexport interface LogpointStreamResult {\n readonly handle: BreakpointHandle;\n readonly sentinel: string;\n readonly emitted: number;\n readonly stoppedReason: LogpointStopReason;\n}\n\nfunction validateMaxEvents(maxEvents: number | undefined): number | undefined {\n if (maxEvents === undefined) {\n return undefined;\n }\n if (!Number.isInteger(maxEvents) || maxEvents <= 0) {\n throw new CfInspectorError(\n \"INVALID_ARGUMENT\",\n `maxEvents must be a positive integer, received: ${maxEvents.toString()}`,\n );\n }\n return maxEvents;\n}\n\nfunction validateHitCount(hitCount: number | undefined): number | undefined {\n if (hitCount === undefined) {\n return undefined;\n }\n if (!Number.isInteger(hitCount) || hitCount <= 0) {\n throw new CfInspectorError(\n \"INVALID_HIT_COUNT\",\n `hitCount must be a positive integer, received: ${hitCount.toString()}`,\n );\n }\n return hitCount;\n}\n\nexport async function streamLogpoint(\n session: InspectorSession,\n options: LogpointStreamOptions,\n): Promise<LogpointStreamResult> {\n const maxEvents = validateMaxEvents(options.maxEvents);\n const hitCount = validateHitCount(options.hitCount);\n const sentinel = generateSentinel();\n const condition = buildLogpointCondition(sentinel, options.expression, {\n ...(options.condition === undefined ? {} : { predicate: options.condition }),\n ...(hitCount === undefined ? {} : { hitCount }),\n });\n let emitted = 0;\n let maxEventsReached = false;\n let stopMaxEvents: (() => void) | undefined;\n const offEvent = session.client.on(\"Runtime.consoleAPICalled\", (raw) => {\n if (maxEventsReached) {\n return;\n }\n const event = toLogpointEvent(raw, sentinel, options.location);\n if (event === undefined) {\n return;\n }\n emitted += 1;\n try {\n options.onEvent(event);\n } catch {\n // A throwing onEvent must not stop the stream or skip the max-events\n // check below — that would cause us to overshoot the cap on every throw.\n }\n if (maxEvents !== undefined && emitted >= maxEvents) {\n maxEventsReached = true;\n stopMaxEvents?.();\n }\n });\n\n let handle: BreakpointHandle;\n try {\n handle = await setBreakpoint(session, {\n file: options.location.file,\n line: options.location.line,\n ...(options.remoteRoot === undefined ? {} : { remoteRoot: options.remoteRoot }),\n condition,\n });\n } catch (err: unknown) {\n offEvent();\n throw err;\n }\n options.onBreakpointSet?.(handle);\n\n try {\n const reason = await waitForStop(session, options, (signal) => {\n stopMaxEvents = signal;\n if (maxEventsReached) {\n signal();\n }\n });\n return { handle, sentinel, emitted, stoppedReason: reason };\n } finally {\n offEvent();\n await removeBreakpointBestEffort(session, handle.breakpointId);\n }\n}\n\nfunction toLogpointEvent(\n raw: unknown,\n sentinel: string,\n location: BreakpointLocation,\n): LogpointEvent | undefined {\n const params = raw as ConsoleAPICalledParams;\n if (asString(params.type) !== \"log\") {\n return undefined;\n }\n const ts = typeof params.timestamp === \"number\" ? params.timestamp : undefined;\n return parseLogEvent(params.args, sentinel, location, ts);\n}\n\nasync function removeBreakpointBestEffort(\n session: InspectorSession,\n breakpointId: string,\n): Promise<void> {\n try {\n await removeBreakpoint(session, breakpointId);\n } catch {\n // best-effort: tunnel may be gone\n }\n}\n\nasync function waitForStop(\n session: InspectorSession,\n options: LogpointStreamOptions,\n registerMaxEventsSignal: (signal: () => void) => void,\n): Promise<LogpointStopReason> {\n return await new Promise<LogpointStopReason>((resolve) => {\n let settled = false;\n const finish = (reason: LogpointStopReason): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n resolve(reason);\n };\n const timer = options.durationMs === undefined\n ? undefined\n : setTimeout(() => {\n finish(\"duration\");\n }, options.durationMs);\n const offClose = session.client.onClose(() => {\n finish(\"transport-closed\");\n });\n const onAbort = (): void => {\n finish(\"signal\");\n };\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted === true) {\n finish(\"signal\");\n }\n registerMaxEventsSignal(() => {\n finish(\"max-events\");\n });\n function cleanup(): void {\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n offClose();\n options.signal?.removeEventListener(\"abort\", onAbort);\n }\n });\n}\n","import { randomBytes } from \"node:crypto\";\n\nconst SENTINEL_PREFIX = \"__CFI_LOG_\";\nconst SENTINEL_SUFFIX = \"__\";\n\nexport interface LogpointConditionOptions {\n readonly predicate?: string;\n readonly hitCount?: number;\n readonly counterKey?: string;\n}\n\nconst HITS_GLOBAL = \"globalThis.__CFI_LOG_HITS\";\n\nfunction buildLoggingIife(sentinel: string, expression: string): string {\n return [\n \"(function(){\",\n `var s=${JSON.stringify(sentinel)};`,\n \"try{\",\n `var v=(${expression});`,\n \"var r=typeof v==='string'?v:JSON.stringify(v);\",\n \"console.log(s, r);\",\n \"}catch(e){\",\n \"console.log(s, '!err:'+(e&&e.message?e.message:String(e)));\",\n \"}\",\n \"return false;\",\n \"})()\",\n ].join(\"\");\n}\n\nfunction buildHitGate(hitCount: number, counterKey: string): string {\n const keyLiteral = JSON.stringify(counterKey);\n return [\n \"(function(){\",\n `var m=(${HITS_GLOBAL}=${HITS_GLOBAL}||{});`,\n `var k=${keyLiteral};`,\n \"m[k]=(m[k]||0)+1;\",\n `return m[k]>=${hitCount.toString()};`,\n \"})()\",\n ].join(\"\");\n}\n\nfunction combineGuards(guards: readonly string[]): string | undefined {\n const filtered = guards.filter((guard) => guard.length > 0);\n if (filtered.length === 0) {\n return undefined;\n }\n if (filtered.length === 1) {\n return filtered[0];\n }\n return filtered.map((guard) => `(${guard})`).join(\"&&\");\n}\n\nexport function buildLogpointCondition(\n sentinel: string,\n expression: string,\n options: LogpointConditionOptions = {},\n): string {\n const guards: string[] = [];\n if (options.hitCount !== undefined) {\n const counterKey = options.counterKey ?? sentinel;\n guards.push(buildHitGate(options.hitCount, counterKey));\n }\n const userPredicate = options.predicate?.trim();\n if (userPredicate !== undefined && userPredicate.length > 0) {\n guards.push(`(${userPredicate})`);\n }\n const iife = buildLoggingIife(sentinel, expression);\n const guard = combineGuards(guards);\n if (guard === undefined) {\n return iife;\n }\n return `(${guard})?${iife}:false`;\n}\n\nexport function generateSentinel(): string {\n return `${SENTINEL_PREFIX}${randomBytes(8).toString(\"hex\")}${SENTINEL_SUFFIX}`;\n}\n\nexport { SENTINEL_PREFIX };\n","import type { BreakpointLocation } from \"../types.js\";\n\nexport interface LogpointEvent {\n readonly ts: string;\n readonly at: string;\n readonly value?: string;\n readonly error?: string;\n readonly raw?: string;\n}\n\ninterface CdpRemoteObject {\n type?: unknown;\n value?: unknown;\n}\n\nexport interface ConsoleAPICalledParams {\n type?: unknown;\n args?: unknown;\n timestamp?: unknown;\n}\n\nexport function asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction readArg(arg: unknown, index: number): string | undefined {\n if (typeof arg !== \"object\" || arg === null) {\n return undefined;\n }\n const candidate = arg as CdpRemoteObject;\n if (candidate.type === \"string\" && typeof candidate.value === \"string\") {\n return candidate.value;\n }\n const isPrimitiveType =\n candidate.type === \"number\" ||\n candidate.type === \"boolean\" ||\n candidate.type === \"bigint\";\n const isPrimitiveValue =\n typeof candidate.value === \"number\" ||\n typeof candidate.value === \"boolean\" ||\n typeof candidate.value === \"bigint\";\n if (isPrimitiveType && isPrimitiveValue) {\n return String(candidate.value);\n }\n return index === 0 ? undefined : \"\";\n}\n\nexport function parseLogEvent(\n rawArgs: unknown,\n sentinel: string,\n location: BreakpointLocation,\n timestamp: number | undefined,\n): LogpointEvent | undefined {\n if (!Array.isArray(rawArgs) || rawArgs.length < 2) {\n return undefined;\n }\n const tag = readArg(rawArgs[0], 0);\n if (tag !== sentinel) {\n return undefined;\n }\n const payload = readArg(rawArgs[1], 1) ?? \"\";\n const ts = new Date(typeof timestamp === \"number\" ? timestamp : Date.now()).toISOString();\n const at = `${location.file}:${location.line.toString()}`;\n if (payload.startsWith(\"!err:\")) {\n return { ts, at, error: payload.slice(\"!err:\".length) };\n }\n return parsePayload(ts, at, payload);\n}\n\nfunction parsePayload(ts: string, at: string, payload: string): LogpointEvent {\n try {\n const parsed: unknown = JSON.parse(payload);\n if (typeof parsed === \"string\") {\n return { ts, at, value: parsed };\n }\n return { ts, at, value: JSON.stringify(parsed) };\n } catch {\n return { ts, at, value: payload, raw: payload };\n }\n}\n","import process from \"node:process\";\n\n/**\n * Run `fn` with a fresh AbortController whose signal aborts on SIGINT/SIGTERM.\n * The handlers are detached on completion so repeated invocations do not leak\n * listeners, and so the next signal restores the default Node behaviour.\n */\nexport async function withTerminationSignal<T>(\n fn: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n const abort = new AbortController();\n const onSignal = (): void => {\n abort.abort();\n };\n process.once(\"SIGINT\", onSignal);\n process.once(\"SIGTERM\", onSignal);\n try {\n return await fn(abort.signal);\n } finally {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n }\n}\n","import { performance } from \"node:perf_hooks\";\nimport process from \"node:process\";\n\nimport {\n resume,\n setBreakpoint,\n validateExpression,\n waitForPause,\n} from \"../../inspector/index.js\";\nimport { parseBreakpointSpec, parseRemoteRoot } from \"../../pathMapper.js\";\nimport { captureSnapshot } from \"../../snapshot/capture.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { BreakpointLocation, RemoteRootSetting, SnapshotResult } from \"../../types.js\";\nimport { parseCaptureList } from \"../captureParser.js\";\nimport { DEFAULT_BREAKPOINT_TIMEOUT_SEC } from \"../commandTypes.js\";\nimport type { SnapshotCommandOptions, Target } from \"../commandTypes.js\";\nimport { writeHumanSnapshot, writeJson } from \"../output.js\";\nimport { parsePositiveInt, resolveTarget, withSession } from \"../target.js\";\nimport {\n roundDurationMs,\n warnOnUnboundBreakpoints,\n warnOnUnmatchedPause,\n withPausedDuration,\n} from \"../warnings.js\";\n\ninterface PreparedSnapshotCommand {\n readonly target: Target;\n readonly breakpoints: readonly BreakpointLocation[];\n readonly captures: readonly string[];\n readonly remoteRoot: RemoteRootSetting;\n readonly timeoutMs: number;\n readonly maxValueLength?: number;\n readonly condition?: string;\n readonly hitCount?: number;\n readonly stackDepth?: number;\n readonly stackCaptures: readonly string[];\n}\n\nexport async function handleSnapshot(opts: SnapshotCommandOptions): Promise<void> {\n const prepared = prepareSnapshotCommand(opts);\n const result = await runSnapshotCommand(prepared, opts);\n if (opts.json) {\n writeJson(result);\n } else {\n writeHumanSnapshot(result);\n }\n}\n\nfunction prepareSnapshotCommand(opts: SnapshotCommandOptions): PreparedSnapshotCommand {\n const target = resolveTarget(opts);\n if (opts.bp.length === 0) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n \"At least one --bp <file:line> is required.\",\n );\n }\n const timeoutSec = parsePositiveInt(opts.timeout, \"--timeout\") ?? DEFAULT_BREAKPOINT_TIMEOUT_SEC;\n const maxValueLength = parsePositiveInt(opts.maxValueLength, \"--max-value-length\");\n const condition = opts.condition !== undefined && opts.condition.trim().length > 0\n ? opts.condition.trim()\n : undefined;\n const hitCount = parsePositiveInt(opts.hitCount, \"--hit-count\");\n const stackDepth = parsePositiveInt(opts.stackDepth, \"--stack-depth\");\n return {\n target,\n breakpoints: opts.bp.map((spec) => parseBreakpointSpec(spec)),\n captures: parseCaptureList(opts.capture),\n remoteRoot: parseRemoteRoot(opts.remoteRoot),\n timeoutMs: timeoutSec * 1000,\n ...(condition === undefined ? {} : { condition }),\n ...(maxValueLength === undefined ? {} : { maxValueLength }),\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n };\n}\n\nasync function runSnapshotCommand(\n command: PreparedSnapshotCommand,\n opts: SnapshotCommandOptions,\n): Promise<SnapshotResult> {\n return await withSession(command.target, async (session): Promise<SnapshotResult> => {\n if (command.condition !== undefined) {\n await validateExpression(session, command.condition);\n }\n const handles = await Promise.all(\n command.breakpoints.map((bp) =>\n setBreakpoint(session, {\n file: bp.file,\n line: bp.line,\n remoteRoot: command.remoteRoot,\n ...(command.condition === undefined ? {} : { condition: command.condition }),\n ...(command.hitCount === undefined ? {} : { hitCount: command.hitCount }),\n }),\n ),\n );\n warnOnUnboundBreakpoints(handles);\n const pause = await waitForCommandPause(session, opts, handles, command.timeoutMs);\n const pausedStartedAt = pause.receivedAtMs ?? performance.now();\n const snapshot = await captureSnapshot(session, pause, {\n captures: command.captures,\n includeScopes: opts.includeScopes === true,\n ...(command.maxValueLength === undefined ? {} : { maxValueLength: command.maxValueLength }),\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n });\n if (opts.keepPaused === true) {\n return withPausedDuration(snapshot, null);\n }\n return await resumeAfterSnapshot(session, snapshot, pausedStartedAt);\n });\n}\n\nasync function waitForCommandPause(\n session: Parameters<typeof waitForPause>[0],\n opts: SnapshotCommandOptions,\n handles: readonly Awaited<ReturnType<typeof setBreakpoint>>[],\n timeoutMs: number,\n): ReturnType<typeof waitForPause> {\n let warnedUnmatchedPause = false;\n return await waitForPause(session, {\n timeoutMs,\n breakpointIds: handles.map((h) => h.breakpointId),\n unmatchedPausePolicy: opts.failOnUnmatchedPause === true ? \"fail\" : \"wait-for-resume\",\n onUnmatchedPause: (unmatchedPause) => {\n if (warnedUnmatchedPause || opts.failOnUnmatchedPause === true) {\n return;\n }\n warnedUnmatchedPause = true;\n warnOnUnmatchedPause(unmatchedPause);\n },\n });\n}\n\nasync function resumeAfterSnapshot(\n session: Parameters<typeof resume>[0],\n snapshot: Awaited<ReturnType<typeof captureSnapshot>>,\n pausedStartedAt: number,\n): Promise<SnapshotResult> {\n try {\n await resume(session);\n return withPausedDuration(snapshot, roundDurationMs(performance.now() - pausedStartedAt));\n } catch {\n process.stderr.write(\n \"[cf-inspector] warning: Debugger.resume failed after snapshot; pausedDurationMs is unknown.\\n\",\n );\n return withPausedDuration(snapshot, null);\n }\n}\n","import { performance } from \"node:perf_hooks\";\nimport process from \"node:process\";\n\nimport {\n resume,\n setBreakpoint,\n validateExpression,\n waitForPause,\n} from \"../../inspector/index.js\";\nimport type { InspectorSession } from \"../../inspector/types.js\";\nimport { parseBreakpointSpec, parseRemoteRoot } from \"../../pathMapper.js\";\nimport { captureSnapshot } from \"../../snapshot/capture.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { BreakpointHandle, BreakpointLocation, RemoteRootSetting, WatchEvent } from \"../../types.js\";\nimport { parseCaptureList } from \"../captureParser.js\";\nimport { DEFAULT_BREAKPOINT_TIMEOUT_SEC } from \"../commandTypes.js\";\nimport type { Target, WatchCommandOptions } from \"../commandTypes.js\";\nimport { writeJson, writeWatchEvent } from \"../output.js\";\nimport { withTerminationSignal } from \"../signals.js\";\nimport { parsePositiveInt, resolveTarget, withSession } from \"../target.js\";\nimport { warnOnUnboundBreakpoints } from \"../warnings.js\";\n\ninterface PreparedWatchCommand {\n readonly target: Target;\n readonly breakpoints: readonly BreakpointLocation[];\n readonly captures: readonly string[];\n readonly remoteRoot: RemoteRootSetting;\n readonly perHitTimeoutMs: number;\n readonly durationMs?: number;\n readonly maxEvents?: number;\n readonly maxValueLength?: number;\n readonly condition?: string;\n readonly hitCount?: number;\n readonly stackDepth?: number;\n readonly stackCaptures: readonly string[];\n}\n\ntype WatchStopReason = \"duration\" | \"signal\" | \"max-events\" | \"transport-closed\";\n\nexport async function handleWatch(opts: WatchCommandOptions): Promise<void> {\n const prepared = prepareWatchCommand(opts);\n let stoppedReason: WatchStopReason = \"signal\";\n let emitted = 0;\n await withTerminationSignal(async (signal) => {\n await withSession(prepared.target, async (session) => {\n const result = await runWatchLoop(session, prepared, opts, signal);\n stoppedReason = result.stoppedReason;\n emitted = result.emitted;\n });\n });\n writeWatchSummary(stoppedReason, emitted, opts.json);\n}\n\nfunction prepareWatchCommand(opts: WatchCommandOptions): PreparedWatchCommand {\n const target = resolveTarget(opts);\n if (opts.bp.length === 0) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n \"At least one --bp <file:line> is required.\",\n );\n }\n const perHitTimeoutSec = parsePositiveInt(opts.timeout, \"--timeout\") ?? DEFAULT_BREAKPOINT_TIMEOUT_SEC;\n const durationSec = parsePositiveInt(opts.duration, \"--duration\");\n const maxEvents = parsePositiveInt(opts.maxEvents, \"--max-events\");\n const maxValueLength = parsePositiveInt(opts.maxValueLength, \"--max-value-length\");\n const hitCount = parsePositiveInt(opts.hitCount, \"--hit-count\");\n const stackDepth = parsePositiveInt(opts.stackDepth, \"--stack-depth\");\n const condition = opts.condition !== undefined && opts.condition.trim().length > 0\n ? opts.condition.trim()\n : undefined;\n return {\n target,\n breakpoints: opts.bp.map((spec) => parseBreakpointSpec(spec)),\n captures: parseCaptureList(opts.capture),\n remoteRoot: parseRemoteRoot(opts.remoteRoot),\n perHitTimeoutMs: perHitTimeoutSec * 1000,\n ...(durationSec === undefined ? {} : { durationMs: durationSec * 1000 }),\n ...(maxEvents === undefined ? {} : { maxEvents }),\n ...(maxValueLength === undefined ? {} : { maxValueLength }),\n ...(condition === undefined ? {} : { condition }),\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n };\n}\n\ninterface WatchLoopResult {\n readonly emitted: number;\n readonly stoppedReason: WatchStopReason;\n}\n\nasync function runWatchLoop(\n session: InspectorSession,\n command: PreparedWatchCommand,\n opts: WatchCommandOptions,\n signal: AbortSignal,\n): Promise<WatchLoopResult> {\n if (command.condition !== undefined) {\n await validateExpression(session, command.condition);\n }\n const handles = await Promise.all(\n command.breakpoints.map((bp) =>\n setBreakpoint(session, {\n file: bp.file,\n line: bp.line,\n remoteRoot: command.remoteRoot,\n ...(command.condition === undefined ? {} : { condition: command.condition }),\n ...(command.hitCount === undefined ? {} : { hitCount: command.hitCount }),\n }),\n ),\n );\n warnOnUnboundBreakpoints(handles);\n\n const deadline = computeDeadline(command.durationMs);\n let emitted = 0;\n const state: { stopped: boolean; reason: WatchStopReason } = { stopped: false, reason: \"signal\" };\n\n const setStop = (reason: WatchStopReason): void => {\n if (state.stopped) {\n return;\n }\n state.reason = reason;\n state.stopped = true;\n };\n\n const transportClosed = waitForTransportClose(session);\n transportClosed.promise.then(() => {\n setStop(\"transport-closed\");\n }).catch(() => {\n /* swallowed: best-effort signal */\n });\n\n try {\n while (!state.stopped) {\n if (signal.aborted) {\n setStop(\"signal\");\n break;\n }\n const remainingMs = remainingForLoop(deadline, command.perHitTimeoutMs);\n if (remainingMs <= 0) {\n setStop(\"duration\");\n break;\n }\n const pause = await waitForNextWatchPause(session, handles, remainingMs, signal);\n if (pause === \"signal\") {\n setStop(\"signal\");\n break;\n }\n if (pause === \"timeout\") {\n if (deadline !== undefined && performance.now() >= deadline) {\n setStop(\"duration\");\n break;\n }\n continue;\n }\n const event = await captureWatchEvent(session, command, pause, emitted + 1, opts);\n emitted += 1;\n writeWatchEvent(event, opts.json);\n try {\n await resume(session);\n } catch {\n process.stderr.write(\"[cf-inspector] warning: Debugger.resume failed during watch.\\n\");\n setStop(\"transport-closed\");\n break;\n }\n if (command.maxEvents !== undefined && emitted >= command.maxEvents) {\n setStop(\"max-events\");\n break;\n }\n }\n } finally {\n transportClosed.cancel();\n }\n\n return { emitted, stoppedReason: state.reason };\n}\n\nfunction computeDeadline(durationMs: number | undefined): number | undefined {\n if (durationMs === undefined) {\n return undefined;\n }\n return performance.now() + durationMs;\n}\n\nfunction remainingForLoop(deadline: number | undefined, perHitTimeoutMs: number): number {\n if (deadline === undefined) {\n return perHitTimeoutMs;\n }\n const remaining = deadline - performance.now();\n if (remaining <= 0) {\n return 0;\n }\n return Math.min(remaining, perHitTimeoutMs);\n}\n\ninterface TransportClosedHandle {\n readonly promise: Promise<void>;\n cancel(): void;\n}\n\nfunction waitForTransportClose(session: InspectorSession): TransportClosedHandle {\n let cancelled = false;\n let resolve: (() => void) | undefined;\n const promise = new Promise<void>((res) => {\n resolve = res;\n });\n const off = session.client.onClose(() => {\n if (!cancelled) {\n resolve?.();\n }\n });\n return {\n promise,\n cancel: (): void => {\n cancelled = true;\n off();\n resolve?.();\n },\n };\n}\n\nasync function waitForNextWatchPause(\n session: InspectorSession,\n handles: readonly BreakpointHandle[],\n timeoutMs: number,\n signal: AbortSignal,\n): Promise<Awaited<ReturnType<typeof waitForPause>> | \"signal\" | \"timeout\"> {\n if (signal.aborted) {\n return \"signal\";\n }\n try {\n return await waitForPause(session, {\n timeoutMs,\n breakpointIds: handles.map((h) => h.breakpointId),\n unmatchedPausePolicy: \"wait-for-resume\",\n });\n } catch (err: unknown) {\n if (err instanceof CfInspectorError) {\n if (err.code === \"BREAKPOINT_NOT_HIT\") {\n return \"timeout\";\n }\n if (err.code === \"UNRELATED_PAUSE_TIMEOUT\") {\n return \"timeout\";\n }\n }\n throw err;\n }\n}\n\nasync function captureWatchEvent(\n session: InspectorSession,\n command: PreparedWatchCommand,\n pause: Awaited<ReturnType<typeof waitForPause>>,\n hit: number,\n opts: WatchCommandOptions,\n): Promise<WatchEvent> {\n const snapshot = await captureSnapshot(session, pause, {\n captures: command.captures,\n includeScopes: opts.includeScopes === true,\n ...(command.maxValueLength === undefined ? {} : { maxValueLength: command.maxValueLength }),\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n });\n const at = formatLocation(command, snapshot.topFrame);\n const base: WatchEvent = {\n ts: new Date().toISOString(),\n at,\n hit,\n reason: snapshot.reason,\n hitBreakpoints: snapshot.hitBreakpoints,\n captures: snapshot.captures,\n };\n const withFrame = snapshot.topFrame === undefined ? base : { ...base, topFrame: snapshot.topFrame };\n const withStack = snapshot.stack === undefined ? withFrame : { ...withFrame, stack: snapshot.stack };\n return snapshot.exception === undefined ? withStack : { ...withStack, exception: snapshot.exception };\n}\n\nfunction formatLocation(\n command: PreparedWatchCommand,\n topFrame: { url?: string; line: number } | undefined,\n): string {\n if (topFrame?.url !== undefined) {\n return `${topFrame.url}:${topFrame.line.toString()}`;\n }\n const first = command.breakpoints[0];\n if (first === undefined) {\n return \"(unknown)\";\n }\n return `${first.file}:${first.line.toString()}`;\n}\n\nfunction writeWatchSummary(reason: WatchStopReason, emitted: number, json: boolean): void {\n if (json) {\n process.stderr.write(`${JSON.stringify({ stopped: reason, emitted })}\\n`);\n return;\n }\n process.stderr.write(\n `Stopped (${reason}); emitted ${emitted.toString()} watch ${emitted === 1 ? \"event\" : \"events\"}.\\n`,\n );\n}\n\nexport const internalsForTesting = {\n formatLocation,\n computeDeadline,\n remainingForLoop,\n prepareWatchCommand,\n writeJson,\n};\n"],"mappings":"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","names":["wrapped","process","process","process","process","process","performance","process","performance","performance","out","asString","buildResult","process","performance","process","process","process","process","HITS_GLOBAL","asString","validateHitCount","asString","process","process","performance","process","performance","process","performance","process","performance","process","process"]}