@saptools/cf-inspector 0.6.0 → 0.6.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/cli/target.ts","../src/cf/tunnel.ts","../src/inspector/session.ts","../src/cdp/client.ts","../src/inspector/conversions.ts","../src/cli/commandTypes.ts","../src/cli/warnings.ts","../src/cli/captureParser.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/evaluation.ts","../src/snapshot/values.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/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 | \"MUTATION_NOT_ALLOWED\"\n | \"SETUP_EVAL_FAILED\"\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}\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 ScriptLocation {\n readonly scriptId: string;\n readonly lineNumber: number;\n readonly columnNumber?: number;\n}\n\nexport interface BreakLocation extends ScriptLocation {\n readonly type?: string;\n}\n\nexport interface ResolvedLocation extends ScriptLocation {\n readonly url?: string;\n}\n\nexport interface GetPossibleBreakpointsOptions {\n readonly start: ScriptLocation;\n readonly end?: ScriptLocation;\n readonly restrictToFunction?: boolean;\n}\n\nexport interface SetBreakpointAtLocationInput {\n readonly location: ScriptLocation;\n readonly condition?: string;\n}\n\nexport interface ExactBreakpointHandle {\n readonly breakpointId: string;\n readonly requestedLocation: ScriptLocation;\n readonly actualLocation: ScriptLocation;\n}\n\nexport interface RemoteObjectInfo {\n readonly type: string;\n readonly subtype?: string;\n readonly className?: string;\n readonly completeness?: \"truncated\" | \"unavailable\";\n readonly value?: unknown;\n readonly unserializableValue?: string;\n readonly description?: string;\n readonly deepSerializedValue?: unknown;\n readonly objectId?: string;\n readonly preview?: unknown;\n readonly customPreview?: unknown;\n}\n\nexport interface StackTraceIdInfo {\n readonly id: string;\n readonly debuggerId?: string;\n}\n\nexport interface StackTraceFrameInfo {\n readonly functionName: string;\n readonly scriptId: string;\n readonly url: string;\n readonly lineNumber: number;\n readonly columnNumber: number;\n}\n\nexport interface StackTraceInfo {\n readonly description?: string;\n readonly callFrames: readonly StackTraceFrameInfo[];\n readonly parent?: StackTraceInfo;\n readonly parentId?: StackTraceIdInfo;\n}\n\nexport interface CallFrameInfo {\n readonly callFrameId: string;\n readonly functionName: string;\n readonly scriptId?: string;\n readonly functionLocation?: ScriptLocation;\n readonly url?: string;\n readonly lineNumber: number;\n readonly columnNumber: number;\n readonly scopeChain: readonly ScopeInfo[];\n readonly thisObject?: RemoteObjectInfo;\n readonly returnValue?: RemoteObjectInfo;\n}\n\nexport interface ScopeInfo {\n readonly type: string;\n readonly objectId?: string;\n readonly object?: RemoteObjectInfo;\n readonly name?: string;\n readonly startLocation?: ScriptLocation;\n readonly endLocation?: ScriptLocation;\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 readonly asyncStackTrace?: StackTraceInfo;\n readonly asyncStackTraceId?: StackTraceIdInfo;\n readonly asyncCallStackTraceId?: StackTraceIdInfo;\n}\n\nexport interface VariableSnapshot {\n readonly name: string;\n readonly value: string;\n readonly type?: string;\n readonly children?: readonly VariableSnapshot[];\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly omittedCount?: number;\n}\n\nexport interface ScopeSnapshot {\n readonly type: string;\n readonly variables: readonly VariableSnapshot[];\n readonly truncated?: true;\n readonly omittedCount?: number;\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 readonly truncated?: true;\n readonly omittedCount?: number;\n}\n\nexport interface CapturedExpression {\n readonly expression: string;\n readonly value?: string;\n readonly type?: string;\n readonly error?: string;\n readonly mutationRisk?: boolean;\n readonly blocked?: true;\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly omittedCount?: number;\n}\n\nexport interface ExceptionSnapshot {\n readonly value?: string;\n readonly type?: string;\n readonly description?: string;\n readonly error?: string;\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly valueOriginalLength?: number;\n readonly descriptionOriginalLength?: number;\n readonly omittedCount?: number;\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 readonly startLine?: number;\n readonly startColumn?: number;\n readonly endLine?: number;\n readonly endColumn?: number;\n readonly executionContextId?: number;\n readonly hash?: string;\n readonly buildId?: string;\n readonly executionContextAuxData?: unknown;\n readonly sourceMapURL?: string;\n readonly hasSourceURL?: boolean;\n readonly isModule?: boolean;\n readonly length?: number;\n readonly stackTrace?: StackTraceInfo;\n}\n\nexport interface InspectorConnectOptions {\n readonly port: number;\n readonly host?: string;\n readonly connectTimeoutMs?: number;\n readonly targetIndex?: number;\n readonly workerIndex?: 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 { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Command } from \"commander\";\n\nimport type {\n AttachCommandOptions,\n EvalCommandOptions,\n ExceptionCommandOptions,\n ListScriptsCommandOptions,\n ListTargetsCommandOptions,\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, handleListTargets } 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(\n cmd: Command,\n options: {\n readonly includeTarget?: boolean;\n readonly includeTimeout?: boolean;\n readonly includeWorker?: boolean;\n } = {},\n): Command {\n const withEndpointOptions = 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 (required with --app)\")\n .option(\"--api-endpoint <url>\", \"CF API endpoint override for --region\")\n .option(\"--org <name>\", \"CF org name (required with --app)\")\n .option(\"--space <name>\", \"CF space name (required with --app)\")\n .option(\n \"--app <name>\",\n \"CF app name; requires explicit --region/--org/--space (ambient cf target is ignored)\",\n );\n const withTargetOption = options.includeTarget === false\n ? withEndpointOptions\n : withEndpointOptions.option(\n \"--target <index>\",\n \"Inspector target index from /json/list (default: 0)\",\n );\n const withWorkerOption = options.includeWorker === false\n ? withTargetOption\n : withTargetOption.option(\"--worker <index>\", \"NodeWorker sub-session index listed by list-targets\");\n return options.includeTimeout === false\n ? withWorkerOption\n : withWorkerOption.option(\"--timeout <seconds>\", \"Timeout for CF tunnel readiness in seconds (default: 180)\");\n}\n\nconst collectStrings = (value: string, prev: readonly string[] = []): readonly string[] => [\n ...prev,\n value,\n];\n\nfunction readPackageVersion(): string {\n let current = dirname(fileURLToPath(import.meta.url));\n for (let depth = 0; depth < 4; depth += 1) {\n const candidate = join(current, \"package.json\");\n try {\n const parsed: unknown = JSON.parse(readFileSync(candidate, \"utf8\"));\n if (typeof parsed === \"object\" && parsed !== null) {\n const record = parsed as Record<string, unknown>;\n if (record[\"name\"] === \"@saptools/cf-inspector\" && typeof record[\"version\"] === \"string\") {\n return record[\"version\"];\n }\n }\n } catch {\n // Keep walking toward the package root. The source path and bundled CLI\n // live at different depths, so one failed candidate is expected.\n }\n current = dirname(current);\n }\n throw new Error(\"Unable to read @saptools/cf-inspector package version\");\n}\n\nexport async function main(argv: readonly string[]): Promise<void> {\n const program = new Command();\n program\n .name(\"cf-inspector\")\n .version(readPackageVersion())\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 registerListTargets(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 { includeTimeout: false },\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(\"--setup-eval <expr>\", \"Evaluate a global setup expression before breakpoint setup (repeatable)\", collectStrings, [] as readonly string[])\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: 131072)\")\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(\"--allow-mutation\", \"Allow mutation-capable captures and native breakpoint conditions to run\")\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(\"--quiet\", \"Suppress progress messages on stderr\")\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(\"--max-value-length <chars>\", \"Maximum characters per log value before truncation (default: 4096)\")\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 { includeTimeout: false },\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(\"--setup-eval <expr>\", \"Evaluate a global setup expression before breakpoint setup (repeatable)\", collectStrings, [] as readonly string[])\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(\"--allow-mutation\", \"Allow mutation-capable captures and native breakpoint conditions to run\")\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 { includeTimeout: false },\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: 131072)\")\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(\"--allow-mutation\", \"Allow mutation-capable capture expressions to run\")\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(\"--filter <pattern>\", \"Only include script URLs matching this pattern\")\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 registerListTargets(program: Command): void {\n applyTargetOptions(\n program.command(\"list-targets\").description(\n \"List raw /json/list targets and nested workers; use --target or --worker on other commands\",\n ),\n { includeTarget: false, includeWorker: false },\n )\n .option(\n \"--no-json\",\n \"Print tab-separated target/worker rows: index, kind, type, title, and URL\",\n )\n .action(async (opts: ListTargetsCommandOptions): Promise<void> => {\n await handleListTargets(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 { includeTarget: false, includeWorker: false },\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, resolveTargetWithCurrentCfTarget } from \"../target.js\";\n\nexport async function handleAttach(opts: AttachCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(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\";\nimport { performance } from \"node:perf_hooks\";\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\ninterface NodeSystemError extends Error {\n readonly code?: string;\n readonly syscall?: string;\n readonly address?: string;\n readonly port?: number;\n}\n\nclass InvalidDiscoveryPayloadError extends CfInspectorError {}\n\nasync function fetchJson<T>(url: string, timeoutMs: number): Promise<T> {\n const deadline = performance.now() + timeoutMs;\n let lastError: unknown;\n\n while (performance.now() < deadline) {\n try {\n const remainingMs = deadline - performance.now();\n if (remainingMs <= 0) {\n break;\n }\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 const attemptTimeoutMs = Math.min(2000, remainingMs);\n req.setTimeout(attemptTimeoutMs, () => {\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(err instanceof CfInspectorError ? err : formatDiscoveryRequestError(url, err));\n });\n req.end();\n });\n } catch (err: unknown) {\n if (err instanceof InvalidDiscoveryPayloadError) {\n throw err;\n }\n lastError = err;\n const now = performance.now();\n if (now < deadline) {\n const sleepMs = Math.min(1000, deadline - now);\n await new Promise((r) => setTimeout(r, sleepMs));\n }\n }\n }\n\n if (lastError instanceof Error) {\n throw lastError;\n }\n throw new CfInspectorError(\"INSPECTOR_DISCOVERY_FAILED\", `Inspector discovery at ${url} timed out after ${timeoutMs.toString()}ms`);\n}\n\nfunction isNodeSystemError(err: unknown): err is NodeSystemError {\n return err instanceof Error;\n}\n\nfunction isConnectionRefusedOrUnreachable(code: string | undefined): boolean {\n return code === \"ECONNREFUSED\" ||\n code === \"ECONNRESET\" ||\n code === \"ETIMEDOUT\" ||\n code === \"EHOSTUNREACH\" ||\n code === \"ENETUNREACH\";\n}\n\nfunction formatEndpoint(url: string, err: NodeSystemError): string {\n if (typeof err.address === \"string\" && typeof err.port === \"number\") {\n return `${err.address}:${err.port.toString()}`;\n }\n const parsed = new URL(url);\n return parsed.host;\n}\n\nfunction formatDiscoveryRequestError(url: string, err: unknown): CfInspectorError {\n const detail = err instanceof Error ? err.message : String(err);\n if (!isNodeSystemError(err) || !isConnectionRefusedOrUnreachable(err.code)) {\n return new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector discovery at ${url} failed: ${detail}`,\n );\n }\n const endpoint = formatEndpoint(url, err);\n return new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Cannot reach Node inspector discovery at ${url}. Nothing is listening on ${endpoint}, or the inspector tunnel is stale/closed. Restart the local inspector or tunnel and retry. If this port came from cf-debugger, stop the stale session and start a fresh tunnel, or run cf-inspector with --app/--region/--org/--space so it can open a tunnel.`,\n detail,\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 new InvalidDiscoveryPayloadError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Failed to parse inspector discovery response from ${url}: ${message}`,\n );\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\ninterface TruncationSummary {\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly omittedCount?: number;\n}\n\nexport function writeProgress(message: string): void {\n process.stderr.write(`[cf-inspector] ${message}\\n`);\n}\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} = ${renderTruncated(detail, capture)}`);\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.truncated === true) {\n lines.push(` scopes: ${truncationLabel(frame)}`);\n }\n if (frame.scopes === undefined) {\n return;\n }\n for (const scope of frame.scopes) {\n const scopeSuffix = scope.truncated === true ? `; ${truncationLabel(scope)}` : \"\";\n lines.push(` scope ${scope.type} (${scope.variables.length.toString()} vars${scopeSuffix}):`);\n for (const variable of scope.variables) {\n lines.push(` ${variable.name} = ${renderTruncated(variable.value, variable)}`);\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} = ${renderTruncated(detail, capture)}`);\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 lines.push(` exception: ${renderExceptionDetail(exception)}`);\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 ${renderTruncated(event.error, event)}\\n`);\n return;\n }\n process.stdout.write(`[${event.ts}] ${event.at} ${renderTruncated(event.value ?? \"\", event)}\\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 process.stdout.write(` exception: ${renderExceptionDetail(event.exception)}\\n`);\n }\n for (const capture of event.captures) {\n const detail = capture.error ?? capture.value ?? \"undefined\";\n process.stdout.write(` ${capture.expression} = ${renderTruncated(detail, capture)}\\n`);\n }\n}\n\nfunction renderExceptionDetail(exception: ExceptionSnapshot): string {\n if (exception.description !== undefined) {\n const originalLength = exception.descriptionOriginalLength;\n return renderTruncated(\n exception.description,\n originalLength === undefined ? {} : { truncated: true, originalLength },\n );\n }\n if (exception.value !== undefined) {\n const originalLength = exception.valueOriginalLength ?? exception.originalLength;\n const summary: TruncationSummary = {\n ...(originalLength === undefined ? {} : { truncated: true, originalLength }),\n ...(exception.omittedCount === undefined\n ? {}\n : { truncated: true, omittedCount: exception.omittedCount }),\n };\n return renderTruncated(exception.value, summary);\n }\n return exception.error ?? \"(unknown)\";\n}\n\nfunction renderTruncated(value: string, summary: TruncationSummary): string {\n if (summary.truncated !== true) {\n return value;\n }\n const visualValue = summary.originalLength === undefined ? value : `${value}…`;\n return `${visualValue} [${truncationLabel(summary)}]`;\n}\n\nfunction truncationLabel(summary: TruncationSummary): string {\n const details: string[] = [];\n if (summary.originalLength !== undefined) {\n details.push(`original ${summary.originalLength.toString()} chars`);\n }\n if (summary.omittedCount !== undefined) {\n details.push(`${summary.omittedCount.toString()} omitted`);\n }\n return details.length === 0 ? \"truncated\" : `truncated: ${details.join(\", \")}`;\n}\n","import {\n type SessionStatus,\n} from \"@saptools/cf-debugger\";\n\nimport { 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\";\nimport { warnOnImplicitInspectorSelection } from \"./warnings.js\";\n\nexport type ProgressReporter = (message: string) => void;\n\nconst CF_TUNNEL_STATUS_MESSAGES = {\n starting: \"Preparing the Cloud Foundry debugger...\",\n \"logging-in\": \"Logging in to Cloud Foundry...\",\n targeting: \"Targeting the Cloud Foundry org and space...\",\n \"ssh-enabling\": \"Enabling SSH for the Cloud Foundry app...\",\n \"ssh-restarting\": \"Restarting the Cloud Foundry app to activate SSH...\",\n signaling: \"Starting the remote Node.js inspector...\",\n tunneling: \"Opening the SSH inspector tunnel...\",\n ready: \"Cloud Foundry inspector tunnel is ready.\",\n stopping: \"Closing the Cloud Foundry inspector tunnel...\",\n stopped: \"Cloud Foundry inspector tunnel closed.\",\n error: \"Cloud Foundry inspector tunnel failed.\",\n} as const satisfies Readonly<Record<SessionStatus, string>>;\n\nexport function formatCfTunnelStatus(status: SessionStatus): string {\n return CF_TUNNEL_STATUS_MESSAGES[status];\n}\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 interface TargetResolveOptions {\n readonly useTimeoutForTunnel?: boolean;\n}\n\nexport function resolveTarget(opts: SharedTargetOptions, options: TargetResolveOptions = {}): Target {\n const port = parsePositiveInt(opts.port, \"--port\");\n const targetIndex = parseTargetIndex(opts.target);\n const workerIndex = parseSelectionIndex(opts.worker, \"--worker\");\n if (port !== undefined) {\n return {\n kind: \"port\",\n port,\n host: opts.host ?? \"127.0.0.1\",\n ...selectionOptions(targetIndex, workerIndex),\n };\n }\n\n const region = optionalText(opts.region);\n const org = optionalText(opts.org);\n const space = optionalText(opts.space);\n const app = optionalText(opts.app);\n const missingFlags = [\n ...(region === undefined ? [\"--region\"] : []),\n ...(org === undefined ? [\"--org\"] : []),\n ...(space === undefined ? [\"--space\"] : []),\n ...(app === undefined ? [\"--app\"] : []),\n ];\n if (region === undefined || org === undefined || space === undefined || app === undefined) {\n throw new CfInspectorError(\n \"MISSING_TARGET\",\n `Cloud Foundry targeting requires explicit selectors. Missing: ${missingFlags.join(\", \")}. ` +\n \"cf-inspector does not consult ambient `cf target` because it can silently change between runs.\",\n );\n }\n\n return buildCfTarget(\n region,\n optionalText(opts.apiEndpoint),\n org,\n space,\n app,\n parseTunnelTimeout(opts, options),\n targetIndex,\n workerIndex,\n );\n}\n\nexport async function resolveTargetWithCurrentCfTarget(\n opts: SharedTargetOptions,\n options: TargetResolveOptions = {},\n): Promise<Target> {\n return await Promise.resolve(resolveTarget(opts, options));\n}\n\nfunction parseTunnelTimeout(opts: SharedTargetOptions, options: TargetResolveOptions): number {\n if (options.useTimeoutForTunnel === false) {\n return DEFAULT_CF_TIMEOUT_SEC;\n }\n return parsePositiveInt(opts.timeout, \"--timeout\") ?? DEFAULT_CF_TIMEOUT_SEC;\n}\n\nfunction parseTargetIndex(raw: string | undefined): number | undefined {\n return parseSelectionIndex(raw, \"--target\");\n}\n\nfunction parseSelectionIndex(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(\n \"INVALID_ARGUMENT\",\n `Invalid ${label}: \"${raw}\" — expected a non-negative integer`,\n );\n }\n return value;\n}\n\nfunction targetIndexOption(targetIndex: number | undefined): { readonly targetIndex?: number } {\n return targetIndex === undefined ? {} : { targetIndex };\n}\n\nfunction selectionOptions(\n targetIndex: number | undefined,\n workerIndex: number | undefined,\n): { readonly targetIndex?: number; readonly workerIndex?: number } {\n return {\n ...targetIndexOption(targetIndex),\n ...(workerIndex === undefined ? {} : { workerIndex }),\n };\n}\n\nfunction buildCfTarget(\n region: string,\n apiEndpoint: string | undefined,\n org: string,\n space: string,\n app: string,\n tunnelTimeoutSec: number,\n targetIndex: number | undefined,\n workerIndex: number | undefined,\n): Target {\n return {\n kind: \"cf\",\n region,\n ...(apiEndpoint === undefined ? {} : { apiEndpoint }),\n org,\n space,\n app,\n tunnelTimeoutMs: tunnelTimeoutSec * 1000,\n ...selectionOptions(targetIndex, workerIndex),\n };\n}\n\nfunction optionalText(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;\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 reportProgress?: ProgressReporter,\n signal?: AbortSignal,\n): Promise<T> {\n const tunnel = await openTarget(target, reportProgress, signal);\n let session: InspectorSession | undefined;\n try {\n reportProgress?.(\n `Connecting to the Node.js inspector at ${tunnel.host}:${tunnel.port.toString()}...`,\n );\n session = await connectInspector({\n port: tunnel.port,\n host: tunnel.host,\n ...selectionOptions(target.targetIndex, target.workerIndex),\n });\n warnOnImplicitInspectorSelection(\n session,\n target.targetIndex !== undefined,\n target.workerIndex !== undefined,\n );\n reportProgress?.(\"Inspector session is ready.\");\n return await fn(session, tunnel.port);\n } finally {\n if (session) {\n reportProgress?.(\"Closing the inspector session...\");\n await session.dispose();\n reportProgress?.(\"Inspector session closed.\");\n }\n await tunnel.dispose();\n }\n}\n\nexport async function openTarget(\n target: Target,\n reportProgress?: ProgressReporter,\n signal?: AbortSignal,\n): 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 reportProgress?.(formatCfTunnelStatus(\"starting\"));\n const tunnel = await openCfTunnel({\n region: target.region,\n ...(target.apiEndpoint === undefined ? {} : { apiEndpoint: target.apiEndpoint }),\n org: target.org,\n space: target.space,\n app: target.app,\n tunnelReadyTimeoutMs: target.tunnelTimeoutMs,\n ...(signal === undefined ? {} : { signal }),\n ...(reportProgress === undefined\n ? {}\n : {\n onStatus: (status: SessionStatus, message?: string): void => {\n reportProgress(message ?? formatCfTunnelStatus(status));\n },\n }),\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","import { startDebugger } from \"@saptools/cf-debugger\";\nimport type { DebuggerHandle, SessionStatus, StartDebuggerOptions } from \"@saptools/cf-debugger\";\n\nexport interface TunnelTarget {\n readonly region: string;\n readonly apiEndpoint?: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly process?: string;\n readonly instance?: number;\n readonly nodePid?: number;\n readonly allowSshEnableRestart?: boolean;\n readonly tunnelReadyTimeoutMs?: number;\n readonly preferredPort?: number;\n readonly verbose?: boolean;\n readonly signal?: AbortSignal;\n readonly onStatus?: (status: SessionStatus, message?: string) => void;\n}\n\nexport interface OpenedTunnel {\n readonly localPort: number;\n readonly handle?: DebuggerHandle;\n dispose(): Promise<void>;\n}\n\nfunction targetOptions(\n target: TunnelTarget,\n): Pick<StartDebuggerOptions, \"apiEndpoint\" | \"process\" | \"instance\" | \"nodePid\"> {\n return {\n ...(target.apiEndpoint === undefined ? {} : { apiEndpoint: target.apiEndpoint }),\n ...(target.process === undefined ? {} : { process: target.process }),\n ...(target.instance === undefined ? {} : { instance: target.instance }),\n ...(target.nodePid === undefined ? {} : { nodePid: target.nodePid }),\n };\n}\n\nfunction lifecycleOptions(\n target: TunnelTarget,\n): Pick<\n StartDebuggerOptions,\n \"allowSshEnableRestart\" | \"tunnelReadyTimeoutMs\" | \"preferredPort\" | \"verbose\" | \"signal\" | \"onStatus\"\n> {\n return {\n ...(target.allowSshEnableRestart === undefined ? {} : { allowSshEnableRestart: target.allowSshEnableRestart }),\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 ...(target.onStatus === undefined ? {} : { onStatus: target.onStatus }),\n };\n}\n\nfunction toStartDebuggerOptions(target: TunnelTarget): StartDebuggerOptions {\n return {\n region: target.region,\n org: target.org,\n space: target.space,\n app: target.app,\n ...targetOptions(target),\n ...lifecycleOptions(target),\n };\n}\n\nexport async function openOwnedCfTunnel(target: TunnelTarget): Promise<OpenedTunnel> {\n const opts = toStartDebuggerOptions(target);\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\nfunction isExistingSessionError(error: unknown): error is Error & { readonly code: \"SESSION_ALREADY_RUNNING\" } {\n return error instanceof Error\n && \"code\" in error\n && error.code === \"SESSION_ALREADY_RUNNING\";\n}\n\nfunction existingTunnelPort(error: unknown): number | undefined {\n if (!isExistingSessionError(error)) {\n return undefined;\n }\n const rawPort = /\\bon port (\\d+)\\b/iu.exec(error.message)?.[1];\n if (rawPort === undefined) {\n return undefined;\n }\n const port = Number.parseInt(rawPort, 10);\n return Number.isInteger(port) && port >= 1 && port <= 65_535 ? port : undefined;\n}\n\nexport async function openCfTunnel(target: TunnelTarget): Promise<OpenedTunnel> {\n try {\n return await openOwnedCfTunnel(target);\n } catch (error: unknown) {\n const localPort = existingTunnelPort(error);\n if (localPort === undefined) {\n throw error;\n }\n target.onStatus?.(\"ready\", `Reusing existing tunnel on port ${localPort.toString()}`);\n return { localPort, dispose: (): Promise<void> => Promise.resolve() };\n }\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { CdpClient, createNodeWorkerClient } from \"../cdp/client.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { InspectorConnectOptions, PauseEvent, ScriptInfo } from \"../types.js\";\n\nimport { asString, toPauseEvent, toScriptInfo } from \"./conversions.js\";\nimport { discoverInspectorTargets } from \"./discovery.js\";\nimport type { InspectorTarget } from \"./discovery.js\";\nimport type {\n DebuggerState,\n InspectorSession,\n InspectorWorkerTarget,\n} 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 class NodeWorkerDiscovery {\n private readonly workers = new Map<string, InspectorWorkerTarget>();\n private readonly detachListeners: readonly (() => void)[];\n public supported = false;\n private disposed = false;\n\n public constructor(private readonly client: CdpClient) {\n this.detachListeners = [\n client.on(\"NodeWorker.attachedToWorker\", (raw) => {\n const worker = toInspectorWorkerTarget(raw);\n if (worker !== undefined) {\n this.workers.set(worker.sessionId, worker);\n }\n }),\n client.on(\"NodeWorker.detachedFromWorker\", (raw) => {\n const sessionId = readField(raw, \"sessionId\");\n if (typeof sessionId === \"string\") {\n this.workers.delete(sessionId);\n }\n }),\n ];\n }\n\n public async enable(): Promise<void> {\n try {\n await this.client.send(\"NodeWorker.enable\", { waitForDebuggerOnStart: false });\n this.supported = true;\n } catch (error: unknown) {\n if (!isUnsupportedNodeWorkerDomain(error)) {\n throw error;\n }\n }\n }\n\n public list(): readonly InspectorWorkerTarget[] {\n return [...this.workers.values()].sort(compareWorkers);\n }\n\n public async dispose(): Promise<void> {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n if (this.supported && !this.client.isClosed) {\n try {\n await this.client.send(\"NodeWorker.disable\");\n } catch {\n // best-effort: the parent inspector may already be closing\n }\n }\n for (const detach of this.detachListeners) {\n detach();\n }\n }\n}\n\nfunction isUnsupportedNodeWorkerDomain(error: unknown): boolean {\n if (!(error instanceof CfInspectorError) || error.code !== \"CDP_REQUEST_FAILED\") {\n return false;\n }\n return error.detail?.includes('\"code\":-32601') === true;\n}\n\nfunction compareWorkers(left: InspectorWorkerTarget, right: InspectorWorkerTarget): number {\n const leftId = Number.parseInt(left.workerId, 10);\n const rightId = Number.parseInt(right.workerId, 10);\n if (!Number.isNaN(leftId) && !Number.isNaN(rightId) && leftId !== rightId) {\n return leftId - rightId;\n }\n return left.workerId.localeCompare(right.workerId);\n}\n\nfunction toInspectorWorkerTarget(raw: unknown): InspectorWorkerTarget | undefined {\n const sessionId = readField(raw, \"sessionId\");\n const info = readField(raw, \"workerInfo\");\n if (typeof sessionId !== \"string\" || !isUnknownRecord(info)) {\n return undefined;\n }\n const workerId = asString(info[\"workerId\"]);\n if (workerId.length === 0) {\n return undefined;\n }\n return {\n sessionId,\n workerId,\n type: asString(info[\"type\"]),\n title: asString(info[\"title\"]),\n url: asString(info[\"url\"]),\n };\n}\n\nfunction readField(value: unknown, name: string): unknown {\n return isUnknownRecord(value) ? value[name] : void 0;\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport async function startNodeWorkerDiscovery(client: CdpClient): Promise<NodeWorkerDiscovery> {\n const discovery = new NodeWorkerDiscovery(client);\n await discovery.enable();\n return discovery;\n}\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 targetIndex = options.targetIndex ?? 0;\n const target = targets[targetIndex];\n if (!target) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No inspector target at index ${targetIndex.toString()} on ${host}:${options.port.toString()} (available: ${targets.length.toString()})`,\n );\n }\n const client = await CdpClient.connect({\n url: target.webSocketDebuggerUrl,\n connectTimeoutMs,\n });\n let workerDiscovery: NodeWorkerDiscovery | undefined;\n try {\n workerDiscovery = await startNodeWorkerDiscovery(client);\n if (options.workerIndex === undefined) {\n const session = await initSession(client, target);\n return withWorkerMetadata(session, workerDiscovery, targetIndex, targets.length);\n }\n return await initWorkerSession(\n client,\n workerDiscovery,\n options.workerIndex,\n targetIndex,\n targets.length,\n );\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 await workerDiscovery?.dispose();\n client.dispose();\n throw err;\n }\n}\n\nasync function initWorkerSession(\n parent: CdpClient,\n discovery: NodeWorkerDiscovery,\n workerIndex: number,\n targetIndex: number,\n targetCount: number,\n): Promise<InspectorSession> {\n const workers = discovery.list();\n if (!discovery.supported) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n \"This runtime does not expose the NodeWorker CDP domain; --worker cannot be used. Run list-targets for available raw targets.\",\n );\n }\n const worker = workers[workerIndex];\n if (worker === undefined) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No NodeWorker sub-session at index ${workerIndex.toString()} (available: ${workers.length.toString()}). Ensure the worker is alive, then rerun list-targets.`,\n );\n }\n const client = await createNodeWorkerClient(parent, worker.sessionId);\n const session = await initSession(client, workerToInspectorTarget(worker));\n return withWorkerMetadata(session, discovery, targetIndex, targetCount, workerIndex, parent);\n}\n\nfunction withWorkerMetadata(\n session: InspectorSession,\n discovery: NodeWorkerDiscovery,\n targetIndex: number,\n targetCount: number,\n workerIndex?: number,\n parent?: CdpClient,\n): InspectorSession {\n return {\n ...session,\n targetIndex,\n targetCount,\n ...(workerIndex === undefined ? {} : { workerIndex }),\n workerTargets: discovery.list(),\n workerDiscoverySupported: discovery.supported,\n dispose: async (): Promise<void> => {\n await session.dispose();\n await discovery.dispose();\n parent?.dispose();\n },\n };\n}\n\nfunction workerToInspectorTarget(worker: InspectorWorkerTarget): InspectorTarget {\n return {\n description: \"Node worker sub-session\",\n id: worker.workerId,\n title: worker.title,\n type: worker.type,\n url: worker.url,\n webSocketDebuggerUrl: `node-worker://${worker.sessionId}`,\n };\n}\n\nexport interface NodeWorkerTargetsResult {\n readonly supported: boolean;\n readonly workers: readonly InspectorWorkerTarget[];\n}\n\nexport async function discoverNodeWorkerTargets(\n target: InspectorTarget,\n connectTimeoutMs = DEFAULT_CONNECT_TIMEOUT_MS,\n): Promise<NodeWorkerTargetsResult> {\n const client = await CdpClient.connect({ url: target.webSocketDebuggerUrl, connectTimeoutMs });\n let discovery: NodeWorkerDiscovery | undefined;\n try {\n discovery = await startNodeWorkerDiscovery(client);\n return { supported: discovery.supported, workers: discovery.list() };\n } finally {\n await discovery?.dispose();\n client.dispose();\n }\n}\n\nasync function initSession(\n client: CdpClient,\n target: InspectorSession[\"target\"],\n): Promise<InspectorSession> {\n const scripts = new Map<string, ScriptInfo>();\n registerScriptTracking(client, scripts);\n const pauseBuffer: PauseEvent[] = [];\n const pauseWaitGate = { active: false };\n const debuggerState: DebuggerState = {};\n registerPauseTracking(client, scripts, pauseBuffer, pauseWaitGate, debuggerState);\n await client.send(\"Runtime.enable\");\n await client.send(\"Debugger.enable\");\n return createSession(client, target, scripts, pauseBuffer, pauseWaitGate, debuggerState);\n}\n\nfunction registerScriptTracking(client: CdpClient, scripts: Map<string, ScriptInfo>): void {\n client.on(\"Debugger.scriptParsed\", (raw) => {\n const script = toScriptInfo(raw);\n if (script !== undefined) {\n scripts.set(script.scriptId, script);\n }\n });\n}\n\nfunction registerPauseTracking(\n client: CdpClient,\n scripts: ReadonlyMap<string, ScriptInfo>,\n pauseBuffer: PauseEvent[],\n pauseWaitGate: { active: boolean },\n debuggerState: DebuggerState,\n): void {\n client.on(\"Debugger.paused\", (raw) => {\n if (pauseWaitGate.active) {\n return;\n }\n const event = toPauseEvent(raw, 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}\n\nfunction createSession(\n client: CdpClient,\n target: InspectorSession[\"target\"],\n scripts: ReadonlyMap<string, ScriptInfo>,\n pauseBuffer: PauseEvent[],\n pauseWaitGate: { active: boolean },\n debuggerState: DebuggerState,\n): InspectorSession {\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\nexport const internalsForTesting = {\n startNodeWorkerDiscovery,\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\nexport interface CdpWaitOptions<T> {\n readonly timeoutMs: number;\n readonly predicate?: (params: T) => boolean;\n readonly signal?: AbortSignal;\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\ninterface NodeWorkerEventParams {\n readonly sessionId?: unknown;\n readonly message?: unknown;\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: CdpWaitOptions<T> = {\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 if (options.signal?.aborted === true) {\n throw this.createWaitAbortError(method);\n }\n return await this.createEventWait(method, options);\n }\n\n private createEventWait<T>(method: string, options: CdpWaitOptions<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n let offEvent = (): void => undefined;\n let offClose = (): void => undefined;\n const cleanup = (): void => {\n clearTimeout(timer);\n offEvent();\n offClose();\n options.signal?.removeEventListener(\"abort\", onAbort);\n };\n const resolveOnce = (value: T): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n resolve(value);\n };\n const rejectOnce = (error: Error): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(error);\n };\n const onAbort = (): void => {\n rejectOnce(this.createWaitAbortError(method));\n };\n const timer = setTimeout(() => {\n rejectOnce(this.createWaitTimeoutError(method, options.timeoutMs));\n }, options.timeoutMs);\n offEvent = this.on(method, (raw) => {\n const params = raw as T;\n if (!this.eventMatches(params, options.predicate)) {\n return;\n }\n resolveOnce(params);\n });\n offClose = this.onClose((error) => {\n rejectOnce(error);\n });\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted === true) {\n onAbort();\n }\n });\n }\n\n private eventMatches<T>(params: T, predicate: ((params: T) => boolean) | undefined): boolean {\n if (predicate === undefined) {\n return true;\n }\n try {\n return predicate(params);\n } catch {\n return false;\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 createWaitAbortError(method: string): CfInspectorError {\n return new CfInspectorError(\"ABORTED\", `Aborted while waiting for ${method}`);\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\nclass NodeWorkerTransport implements CdpTransport {\n private readonly emitter = new EventEmitter();\n private readonly detachParentListeners: readonly (() => void)[];\n public readyState = 1;\n\n public constructor(\n private readonly parent: CdpClient,\n private readonly sessionId: string,\n ) {\n this.detachParentListeners = [\n parent.on(\"NodeWorker.receivedMessageFromWorker\", (raw) => {\n this.forwardWorkerMessage(raw);\n }),\n parent.on(\"NodeWorker.detachedFromWorker\", (raw) => {\n this.handleWorkerDetach(raw);\n }),\n parent.onClose((error) => {\n this.closeWithError(error);\n }),\n ];\n }\n\n public send(payload: string): void {\n if (this.readyState !== 1) {\n throw new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Worker inspector session is closed\");\n }\n void this.parent.send(\"NodeWorker.sendMessageToWorker\", {\n sessionId: this.sessionId,\n message: payload,\n }).catch((error: unknown) => {\n const normalized = error instanceof Error ? error : new Error(String(error));\n this.closeWithError(normalized);\n });\n }\n\n public close(): void {\n this.finishClose();\n }\n\n public on<E extends keyof CdpTransportEventMap>(\n event: E,\n listener: CdpTransportEventMap[E],\n ): void {\n this.emitter.on(event, listener);\n }\n\n public off<E extends keyof CdpTransportEventMap>(\n event: E,\n listener: CdpTransportEventMap[E],\n ): void {\n this.emitter.off(event, listener);\n }\n\n private forwardWorkerMessage(raw: unknown): void {\n const params = asNodeWorkerEventParams(raw);\n if (params.sessionId !== this.sessionId || typeof params.message !== \"string\") {\n return;\n }\n this.emitter.emit(\"message\", params.message);\n }\n\n private handleWorkerDetach(raw: unknown): void {\n const params = asNodeWorkerEventParams(raw);\n if (params.sessionId === this.sessionId) {\n this.finishClose();\n }\n }\n\n private closeWithError(error: Error): void {\n if (this.readyState !== 1) {\n return;\n }\n this.emitter.emit(\"error\", error);\n this.finishClose();\n }\n\n private finishClose(): void {\n if (this.readyState !== 1) {\n return;\n }\n this.readyState = 3;\n for (const detach of this.detachParentListeners) {\n detach();\n }\n this.emitter.emit(\"close\");\n this.emitter.removeAllListeners();\n }\n}\n\nfunction asNodeWorkerEventParams(raw: unknown): NodeWorkerEventParams {\n if (!isUnknownRecord(raw)) {\n return {};\n }\n const sessionId = raw[\"sessionId\"];\n const message = raw[\"message\"];\n return {\n ...(typeof sessionId === \"string\" ? { sessionId } : {}),\n ...(typeof message === \"string\" ? { message } : {}),\n };\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport async function createNodeWorkerClient(\n parent: CdpClient,\n sessionId: string,\n requestTimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS,\n): Promise<CdpClient> {\n const transport = new NodeWorkerTransport(parent, sessionId);\n return await CdpClient.connect({\n url: `node-worker://${sessionId}`,\n transportFactory: (): Promise<CdpTransport> => Promise.resolve(transport),\n requestTimeoutMs,\n });\n}\n","// cspell:words trustedtype wasmvalue webassemblymemory\nimport type {\n BreakLocation,\n CallFrameInfo,\n PauseEvent,\n RemoteObjectInfo,\n ResolvedLocation,\n ScriptInfo,\n ScriptLocation,\n ScopeInfo,\n StackTraceFrameInfo,\n StackTraceIdInfo,\n StackTraceInfo,\n} from \"../types.js\";\n\nconst INTERNAL_SLOT_SUBTYPES = new Set([\n \"regexp\",\n \"date\",\n \"map\",\n \"set\",\n \"weakmap\",\n \"weakset\",\n \"iterator\",\n \"generator\",\n \"promise\",\n \"typedarray\",\n \"arraybuffer\",\n \"dataview\",\n \"webassemblymemory\",\n \"wasmvalue\",\n \"trustedtype\",\n]);\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 isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction optionalCoordinate(value: unknown): number | undefined {\n const number = optionalNumber(value);\n return number !== undefined && Number.isSafeInteger(number) && number >= 0\n ? number\n : undefined;\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function toScriptLocation(value: unknown): ScriptLocation | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const scriptId = nonEmptyString(value[\"scriptId\"]);\n const lineNumber = optionalCoordinate(value[\"lineNumber\"]);\n if (scriptId === undefined || lineNumber === undefined) {\n return undefined;\n }\n const rawColumnNumber = value[\"columnNumber\"];\n const columnNumber = optionalCoordinate(rawColumnNumber);\n if (rawColumnNumber !== undefined && columnNumber === undefined) {\n return undefined;\n }\n return columnNumber === undefined\n ? { scriptId, lineNumber }\n : { scriptId, lineNumber, columnNumber };\n}\n\nexport function toResolvedLocations(value: unknown): readonly ResolvedLocation[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): ResolvedLocation[] => {\n const location = toScriptLocation(entry);\n if (location === undefined || !isRecord(entry)) {\n return [];\n }\n const url = typeof entry[\"url\"] === \"string\" ? entry[\"url\"] : undefined;\n return [url === undefined ? location : { ...location, url }];\n });\n}\n\nexport function toBreakLocations(value: unknown): readonly BreakLocation[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): BreakLocation[] => {\n const location = toScriptLocation(entry);\n if (location === undefined || !isRecord(entry)) {\n return [];\n }\n const type = nonEmptyString(entry[\"type\"]);\n return [type === undefined ? location : { ...location, type }];\n });\n}\n\nfunction remoteCompleteness(subtype: string | undefined): RemoteObjectInfo[\"completeness\"] {\n if (subtype === \"proxy\") {\n return \"unavailable\";\n }\n return subtype !== undefined && INTERNAL_SLOT_SUBTYPES.has(subtype)\n ? \"truncated\"\n : undefined;\n}\n\nfunction optionalOwnField(\n key: string,\n value: Readonly<Record<string, unknown>>,\n): Readonly<Record<string, unknown>> {\n return Object.hasOwn(value, key) ? { [key]: value[key] } : {};\n}\n\nexport function toRemoteObject(value: unknown): RemoteObjectInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = nonEmptyString(value[\"type\"]);\n if (type === undefined) {\n return undefined;\n }\n const subtype = nonEmptyString(value[\"subtype\"]);\n const completeness = remoteCompleteness(subtype);\n return {\n type,\n ...(subtype === undefined ? {} : { subtype }),\n ...optionalTextField(\"className\", value[\"className\"]),\n ...(completeness === undefined ? {} : { completeness }),\n ...optionalOwnField(\"value\", value),\n ...optionalTextField(\"unserializableValue\", value[\"unserializableValue\"]),\n ...optionalTextField(\"description\", value[\"description\"]),\n ...optionalOwnField(\"deepSerializedValue\", value),\n ...optionalTextField(\"objectId\", value[\"objectId\"]),\n ...optionalOwnField(\"preview\", value),\n ...optionalOwnField(\"customPreview\", value),\n };\n}\n\nfunction optionalTextField(\n key: string,\n value: unknown,\n): Readonly<Record<string, string>> {\n return typeof value === \"string\" ? { [key]: value } : {};\n}\n\nfunction toScope(value: unknown): ScopeInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = nonEmptyString(value[\"type\"]);\n if (type === undefined) {\n return undefined;\n }\n const object = toRemoteObject(value[\"object\"]);\n const name = nonEmptyString(value[\"name\"]);\n const startLocation = toScriptLocation(value[\"startLocation\"]);\n const endLocation = toScriptLocation(value[\"endLocation\"]);\n return {\n type,\n ...(name === undefined ? {} : { name }),\n ...(object === undefined ? {} : { object }),\n ...(object?.objectId === undefined ? {} : { objectId: object.objectId }),\n ...(startLocation === undefined ? {} : { startLocation }),\n ...(endLocation === undefined ? {} : { endLocation }),\n };\n}\n\nfunction toScopeChain(value: unknown): readonly ScopeInfo[] {\n return Array.isArray(value)\n ? value.flatMap((entry): ScopeInfo[] => {\n const scope = toScope(entry);\n return scope === undefined ? [] : [scope];\n })\n : [];\n}\n\nfunction resolveCallFrameUrl(\n frame: Readonly<Record<string, unknown>>,\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 = toScriptLocation(frame[\"location\"])?.scriptId;\n return scriptId === undefined ? undefined : nonEmptyString(scripts?.get(scriptId)?.url);\n}\n\nfunction toCallFrameMetadata(\n candidate: Readonly<Record<string, unknown>>,\n location: ScriptLocation | undefined,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): Partial<CallFrameInfo> {\n const functionLocation = toScriptLocation(candidate[\"functionLocation\"]);\n const thisObject = toRemoteObject(candidate[\"this\"]);\n const returnValue = toRemoteObject(candidate[\"returnValue\"]);\n const url = resolveCallFrameUrl(candidate, scripts);\n return {\n ...(location === undefined ? {} : { scriptId: location.scriptId }),\n ...(functionLocation === undefined ? {} : { functionLocation }),\n ...(url === undefined ? {} : { url }),\n ...(thisObject === undefined ? {} : { thisObject }),\n ...(returnValue === undefined ? {} : { returnValue }),\n };\n}\n\nfunction toCallFrame(\n value: unknown,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): CallFrameInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const callFrameId = nonEmptyString(value[\"callFrameId\"]);\n if (callFrameId === undefined) {\n return undefined;\n }\n const location = toScriptLocation(value[\"location\"]);\n return {\n callFrameId,\n functionName: asString(value[\"functionName\"]),\n ...toCallFrameMetadata(value, location, scripts),\n lineNumber: location?.lineNumber ?? 0,\n columnNumber: location?.columnNumber ?? 0,\n scopeChain: toScopeChain(value[\"scopeChain\"]),\n };\n}\n\nfunction toCallFrames(\n value: unknown,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): readonly CallFrameInfo[] {\n return Array.isArray(value)\n ? value.flatMap((entry): CallFrameInfo[] => {\n const frame = toCallFrame(entry, scripts);\n return frame === undefined ? [] : [frame];\n })\n : [];\n}\n\nfunction toStackTraceId(value: unknown): StackTraceIdInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const id = nonEmptyString(value[\"id\"]);\n if (id === undefined) {\n return undefined;\n }\n const debuggerId = nonEmptyString(value[\"debuggerId\"]);\n return debuggerId === undefined ? { id } : { id, debuggerId };\n}\n\nfunction toStackTraceFrame(value: unknown): StackTraceFrameInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const scriptId = nonEmptyString(value[\"scriptId\"]);\n if (scriptId === undefined) {\n return undefined;\n }\n return {\n functionName: asString(value[\"functionName\"]),\n scriptId,\n url: asString(value[\"url\"]),\n lineNumber: asNumber(value[\"lineNumber\"]),\n columnNumber: asNumber(value[\"columnNumber\"]),\n };\n}\n\nfunction toStackTrace(value: unknown): StackTraceInfo | undefined {\n if (!isRecord(value) || !Array.isArray(value[\"callFrames\"])) {\n return undefined;\n }\n const callFrames = value[\"callFrames\"].flatMap((entry): StackTraceFrameInfo[] => {\n const frame = toStackTraceFrame(entry);\n return frame === undefined ? [] : [frame];\n });\n const description = nonEmptyString(value[\"description\"]);\n const parent = toStackTrace(value[\"parent\"]);\n const parentId = toStackTraceId(value[\"parentId\"]);\n return {\n callFrames,\n ...(description === undefined ? {} : { description }),\n ...(parent === undefined ? {} : { parent }),\n ...(parentId === undefined ? {} : { parentId }),\n };\n}\n\nexport function toPauseEvent(\n value: unknown,\n receivedAtMs: number,\n scripts?: ReadonlyMap<string, ScriptInfo>,\n): PauseEvent {\n const params = isRecord(value) ? value : {};\n const asyncStackTrace = toStackTrace(params[\"asyncStackTrace\"]);\n const asyncStackTraceId = toStackTraceId(params[\"asyncStackTraceId\"]);\n const asyncCallStackTraceId = toStackTraceId(params[\"asyncCallStackTraceId\"]);\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 ...(params[\"data\"] === undefined ? {} : { data: params[\"data\"] }),\n ...(asyncStackTrace === undefined ? {} : { asyncStackTrace }),\n ...(asyncStackTraceId === undefined ? {} : { asyncStackTraceId }),\n ...(asyncCallStackTraceId === undefined ? {} : { asyncCallStackTraceId }),\n };\n}\n\nexport function toScriptInfo(value: unknown): ScriptInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const scriptId = nonEmptyString(value[\"scriptId\"]);\n if (scriptId === undefined) {\n return undefined;\n }\n const stackTrace = toStackTrace(value[\"stackTrace\"]);\n return {\n scriptId,\n url: asString(value[\"url\"]),\n ...optionalNumericField(\"startLine\", value[\"startLine\"]),\n ...optionalNumericField(\"startColumn\", value[\"startColumn\"]),\n ...optionalNumericField(\"endLine\", value[\"endLine\"]),\n ...optionalNumericField(\"endColumn\", value[\"endColumn\"]),\n ...optionalNumericField(\"executionContextId\", value[\"executionContextId\"]),\n ...optionalTextField(\"hash\", value[\"hash\"]),\n ...optionalTextField(\"buildId\", value[\"buildId\"]),\n ...(value[\"executionContextAuxData\"] === undefined\n ? {}\n : { executionContextAuxData: value[\"executionContextAuxData\"] }),\n ...optionalTextField(\"sourceMapURL\", value[\"sourceMapURL\"]),\n ...optionalBooleanField(\"hasSourceURL\", value[\"hasSourceURL\"]),\n ...optionalBooleanField(\"isModule\", value[\"isModule\"]),\n ...optionalNumericField(\"length\", value[\"length\"]),\n ...(stackTrace === undefined ? {} : { stackTrace }),\n };\n}\n\nfunction optionalNumericField(\n key: string,\n value: unknown,\n): Readonly<Record<string, number>> {\n const number = optionalNumber(value);\n return number === undefined ? {} : { [key]: number };\n}\n\nfunction optionalBooleanField(\n key: string,\n value: unknown,\n): Readonly<Record<string, boolean>> {\n const boolean = optionalBoolean(value);\n return boolean === undefined ? {} : { [key]: boolean };\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","export const DEFAULT_BREAKPOINT_TIMEOUT_SEC = 30;\nexport const DEFAULT_CF_TIMEOUT_SEC = 180;\nexport const DEFAULT_EXCEPTION_TIMEOUT_SEC = 30;\n\nexport interface PortTarget {\n readonly kind: \"port\";\n readonly port: number;\n readonly host: string;\n readonly targetIndex?: number;\n readonly workerIndex?: number;\n}\n\nexport interface CfTarget {\n readonly kind: \"cf\";\n readonly region: string;\n readonly apiEndpoint?: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly tunnelTimeoutMs: number;\n readonly targetIndex?: number;\n readonly workerIndex?: 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 apiEndpoint?: string;\n readonly org?: string;\n readonly space?: string;\n readonly app?: string;\n readonly timeout?: string;\n readonly target?: string;\n readonly worker?: string;\n}\n\nexport interface SnapshotCommandOptions extends SharedTargetOptions {\n readonly bp: readonly string[];\n readonly capture?: string;\n readonly setupEval?: readonly 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 readonly quiet?: boolean;\n readonly allowMutation?: 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 filter?: string;\n readonly json: boolean;\n}\n\nexport interface ListTargetsCommandOptions 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 maxValueLength?: 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 setupEval?: readonly 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 readonly allowMutation?: 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 readonly allowMutation?: boolean;\n}\n","import process from \"node:process\";\n\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { BreakpointHandle, PauseEvent, SnapshotCaptureResult, SnapshotResult } from \"../types.js\";\n\nimport { looksLikeMutation } from \"./captureParser.js\";\n\nexport function warnOnCaptureMutationRisk(\n expressions: readonly string[],\n allowMutation: boolean,\n): void {\n const riskyCount = expressions.filter(looksLikeMutation).length;\n if (riskyCount === 0) {\n return;\n }\n const suffix = allowMutation\n ? \"will run without the V8 side-effect guard because --allow-mutation was passed.\"\n : \"will be checked by the V8 side-effect guard and blocked unless V8 proves them safe; pass --allow-mutation to run them unrestricted.\";\n process.stderr.write(\n `[cf-inspector] warning: ${riskyCount.toString()} capture ` +\n `${riskyCount === 1 ? \"expression looks\" : \"expressions look\"} mutation-capable and ${suffix}\\n`,\n );\n}\n\nexport function enforceNativeConditionMutationPolicy(\n expression: string,\n allowMutation: boolean,\n context: string,\n): void {\n if (!looksLikeMutation(expression)) {\n return;\n }\n if (!allowMutation) {\n throw new CfInspectorError(\n \"MUTATION_NOT_ALLOWED\",\n `${context} looks mutation-capable. Native breakpoint conditions cannot be protected by V8's side-effect guard; pass --allow-mutation to arm it explicitly.`,\n );\n }\n process.stderr.write(\n `[cf-inspector] warning: ${context} looks mutation-capable and will run as a native breakpoint condition; native conditions cannot be side-effect-gated.\\n`,\n );\n}\n\nexport function warnOnMutationRisk(expression: string, context: string): void {\n if (!looksLikeMutation(expression)) {\n return;\n }\n process.stderr.write(\n `[cf-inspector] warning: ${context} looks mutation-capable and will execute against the live inspectee without a side-effect guard.\\n`,\n );\n}\n\nexport function warnOnUnboundBreakpoints(handles: readonly BreakpointHandle[]): void {\n for (const handle of handles) {\n if (handle.resolvedLocations.length === 0) {\n const tsHint = handle.file.endsWith(\".ts\")\n ? \" Hint: Source TS breakpoints may not bind. Try inspecting loaded scripts with list-scripts and target the compiled .js file instead.\"\n : \"\";\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.${tsHint}\\n`,\n );\n }\n }\n}\n\nexport function warnOnImplicitInspectorSelection(\n session: Pick<\n InspectorSession,\n \"targetCount\" | \"targetIndex\" | \"workerTargets\"\n >,\n targetWasExplicit: boolean,\n workerWasExplicit: boolean,\n): void {\n const targetCount = session.targetCount ?? 1;\n const targetIndex = session.targetIndex ?? 0;\n if (!targetWasExplicit && targetCount > 1) {\n process.stderr.write(\n `[cf-inspector] notice: attached to inspector target ${targetIndex.toString()} of ` +\n `${targetCount.toString()}; pass --target <index> to pick another.\\n`,\n );\n }\n const workerCount = session.workerTargets?.length ?? 0;\n if (!workerWasExplicit && workerCount > 0) {\n process.stderr.write(\n `[cf-inspector] notice: attached to the main isolate; ${workerCount.toString()} Node ` +\n `${workerCount === 1 ? \"worker is\" : \"workers are\"} available. ` +\n \"Run list-targets and pass --worker <index> to inspect one.\\n\",\n );\n }\n}\n\nexport function warnOnBoundBreakpointWithoutHit(handles: readonly BreakpointHandle[]): void {\n const boundCount = handles.reduce((count, handle) => {\n return count + handle.resolvedLocations.length;\n }, 0);\n if (boundCount === 0) {\n return;\n }\n process.stderr.write(\n `[cf-inspector] warning: ${boundCount.toString()} breakpoint ` +\n `${boundCount === 1 ? \"location bound\" : \"locations bound\"}, but no hit was observed. ` +\n \"The code may be running in another worker isolate. Run list-targets and retry with \" +\n \"--worker <index> for a NodeWorker sub-session or --target <index> for a raw target.\\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","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 QuoteScanState {\n quote: QuoteChar | undefined;\n escaped: boolean;\n}\n\ninterface CaptureSplitState extends QuoteScanState {\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: QuoteScanState, 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 stripQuotedText(expression: string): string {\n const state: QuoteScanState = { quote: undefined, escaped: false };\n let stripped = \"\";\n for (const char of expression) {\n if (consumeQuotedChar(state, char)) {\n stripped += \" \";\n continue;\n }\n if (isQuoteChar(char)) {\n state.quote = char;\n stripped += \" \";\n continue;\n }\n stripped += char;\n }\n return stripped;\n}\n\nexport function looksLikeMutation(expression: string): boolean {\n const stripped = stripQuotedText(expression);\n const hasUpdate = /(?:\\+\\+|--)/u.test(stripped);\n const hasAssignment = /(?:\\*\\*=|&&=|\\|\\|=|\\?\\?=|[+\\-*/%&|^]=|(?:^|[^=!<>])=(?!=|>))/u.test(stripped);\n const hasDelete = /\\bdelete\\b/u.test(stripped);\n const hasMutatingMethod = /\\.\\s*(?:push|pop|shift|unshift|splice|sort|reverse|fill|copyWithin|set|add|delete|clear)\\s*\\(/u.test(stripped);\n const hasObjectMutation = /\\bObject\\s*\\.\\s*(?:assign|defineProperty|defineProperties)\\s*\\(/u.test(stripped);\n return hasUpdate || hasAssignment || hasDelete || hasMutatingMethod || hasObjectMutation;\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 { evaluateGlobal } from \"../../inspector/runtime.js\";\nimport type { EvalCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport { warnOnMutationRisk } from \"../warnings.js\";\n\nexport async function handleEval(opts: EvalCommandOptions): Promise<void> {\n warnOnMutationRisk(opts.expr, \"eval --expr\");\n const target = await resolveTargetWithCurrentCfTarget(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 interface EvaluateOnFrameOptions {\n readonly throwOnSideEffect?: boolean;\n readonly objectGroup?: string;\n}\n\nexport interface StepIntoOptions {\n readonly breakOnAsyncCall?: boolean;\n}\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 options: EvaluateOnFrameOptions = {},\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 ...(options.throwOnSideEffect === undefined\n ? {}\n : { throwOnSideEffect: options.throwOnSideEffect }),\n ...(options.objectGroup === undefined ? {} : { objectGroup: options.objectGroup }),\n });\n}\n\nexport function isSideEffectRefusal(result: CdpEvalResult): boolean {\n const classNames = [\n result.result?.className,\n result.exceptionDetails?.exception?.className,\n ];\n const descriptions = [\n result.result?.description,\n result.exceptionDetails?.exception?.description,\n ];\n const isEvalError = classNames.includes(\"EvalError\");\n return isEvalError && descriptions.some(\n (description) =>\n typeof description === \"string\" &&\n description.toLowerCase().includes(\"possible side-effect in debug-evaluate\"),\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 async function runSetupEvals(\n session: InspectorSession,\n expressions: readonly string[],\n): Promise<void> {\n for (const expression of expressions) {\n const result = await evaluateGlobal(session, expression);\n if (result.exceptionDetails !== undefined) {\n throw new CfInspectorError(\n \"SETUP_EVAL_FAILED\",\n exceptionDetailsMessage(result, \"setup evaluation failed\"),\n );\n }\n }\n}\n\nfunction exceptionDetailsMessage(result: CdpEvalResult, fallback: string): string {\n return typeof result.exceptionDetails?.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails?.text === \"string\"\n ? result.exceptionDetails.text\n : fallback);\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 async function getScriptSource(\n session: InspectorSession,\n scriptId: string,\n): Promise<string> {\n if (scriptId.trim().length === 0) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", \"scriptId must not be empty\");\n }\n const result = await session.client.send<{ readonly scriptSource?: unknown }>(\n \"Debugger.getScriptSource\",\n { scriptId },\n );\n if (typeof result.scriptSource !== \"string\") {\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n \"Debugger.getScriptSource did not return scriptSource\",\n );\n }\n return result.scriptSource;\n}\n\nexport async function stepInto(\n session: InspectorSession,\n options: StepIntoOptions = {},\n): Promise<void> {\n await session.client.send(\"Debugger.stepInto\", {\n ...(options.breakOnAsyncCall === undefined\n ? {}\n : { breakOnAsyncCall: options.breakOnAsyncCall }),\n });\n}\n\nexport async function stepOver(session: InspectorSession): Promise<void> {\n await session.client.send(\"Debugger.stepOver\");\n}\n\nexport async function stepOut(session: InspectorSession): Promise<void> {\n await session.client.send(\"Debugger.stepOut\");\n}\n\nexport async function releaseObject(\n session: InspectorSession,\n objectId: string,\n): Promise<void> {\n await session.client.send(\"Runtime.releaseObject\", { objectId });\n}\n\nexport async function releaseObjectGroup(\n session: InspectorSession,\n objectGroup: string,\n): Promise<void> {\n await session.client.send(\"Runtime.releaseObjectGroup\", { objectGroup });\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 { DEFAULT_MAX_VALUE_LENGTH } from \"../../snapshot/values.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, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport { roundDurationMs, warnOnCaptureMutationRisk, 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 readonly throwOnSideEffect: boolean;\n}\n\nexport async function handleException(opts: ExceptionCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts, { useTimeoutForTunnel: false });\n const prepared = prepareExceptionCommand(opts, target);\n warnOnCaptureMutationRisk(\n [...prepared.captures, ...prepared.stackCaptures],\n opts.allowMutation === true,\n );\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, target: Target): PreparedExceptionCommand {\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 ?? DEFAULT_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,\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n throwOnSideEffect: opts.allowMutation !== true,\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 maxValueLength: command.maxValueLength,\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n throwOnSideEffect: command.throwOnSideEffect,\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\nexport const internalsForTesting = {\n prepareExceptionCommand,\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 return { kind: \"regex\", pattern, flags };\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 {\n BreakLocation,\n BreakpointHandle,\n ExactBreakpointHandle,\n GetPossibleBreakpointsOptions,\n RemoteRootSetting,\n ScriptLocation,\n SetBreakpointAtLocationInput,\n} from \"../types.js\";\n\nimport {\n asString,\n toBreakLocations,\n toResolvedLocations,\n toScriptLocation,\n} from \"./conversions.js\";\nimport type {\n CdpPossibleBreakpointsResult,\n CdpSetBreakpointResult,\n CdpSetExactBreakpointResult,\n InspectorSession,\n SetBreakpointInput,\n} 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\nfunction validateCoordinate(value: number, label: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new CfInspectorError(\n \"INVALID_ARGUMENT\",\n `${label} must be a non-negative integer, received: ${value.toString()}`,\n );\n }\n}\n\nfunction validateScriptLocation(location: ScriptLocation, label: string): void {\n if (location.scriptId.trim().length === 0) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", `${label}.scriptId must not be empty`);\n }\n validateCoordinate(location.lineNumber, `${label}.lineNumber`);\n if (location.columnNumber !== undefined) {\n validateCoordinate(location.columnNumber, `${label}.columnNumber`);\n }\n}\n\nfunction isSameScriptLocation(\n requested: ScriptLocation,\n actual: ScriptLocation,\n): boolean {\n return requested.scriptId === actual.scriptId\n && requested.lineNumber === actual.lineNumber\n && (requested.columnNumber ?? 0) === (actual.columnNumber ?? 0);\n}\n\nexport async function getPossibleBreakpoints(\n session: InspectorSession,\n options: GetPossibleBreakpointsOptions,\n): Promise<readonly BreakLocation[]> {\n validateScriptLocation(options.start, \"start\");\n if (options.end !== undefined) {\n validateScriptLocation(options.end, \"end\");\n if (options.end.scriptId !== options.start.scriptId) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", \"start and end must refer to the same scriptId\");\n }\n }\n const result = await session.client.send<CdpPossibleBreakpointsResult>(\n \"Debugger.getPossibleBreakpoints\",\n {\n start: options.start,\n ...(options.end === undefined ? {} : { end: options.end }),\n ...(options.restrictToFunction === undefined\n ? {}\n : { restrictToFunction: options.restrictToFunction }),\n },\n );\n if (!Array.isArray(result.locations)) {\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n \"Debugger.getPossibleBreakpoints did not return a locations array\",\n );\n }\n return toBreakLocations(result.locations);\n}\n\nexport async function setBreakpointAtLocation(\n session: InspectorSession,\n input: SetBreakpointAtLocationInput,\n): Promise<ExactBreakpointHandle> {\n validateScriptLocation(input.location, \"location\");\n const result = await session.client.send<CdpSetExactBreakpointResult>(\"Debugger.setBreakpoint\", {\n location: input.location,\n ...(input.condition === undefined || input.condition.length === 0\n ? {}\n : { condition: input.condition }),\n });\n const breakpointId = asString(result.breakpointId);\n const actualLocation = toScriptLocation(result.actualLocation);\n const wrongLocation = actualLocation !== undefined\n && !isSameScriptLocation(input.location, actualLocation);\n if (breakpointId.length === 0 || actualLocation === undefined || wrongLocation) {\n if (breakpointId.length > 0) {\n try {\n await removeBreakpoint(session, breakpointId);\n } catch {\n // The invalid binding is already unusable; preserve the validation failure.\n }\n }\n if (wrongLocation) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n \"Debugger.setBreakpoint resolved the breakpoint at a different script, line, or column\",\n );\n }\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n \"Debugger.setBreakpoint did not return a breakpointId and actualLocation\",\n );\n }\n return {\n breakpointId,\n requestedLocation: input.location,\n actualLocation,\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(\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 throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted === true) {\n throw new CfInspectorError(\"ABORTED\", \"Aborted while waiting for Debugger.paused\");\n }\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 options: WaitForPauseOptions,\n): Promise<void> {\n if (hasResumedSincePause(session, pause)) {\n return;\n }\n const remainingMs = remainingUntil(deadlineMs);\n if (remainingMs <= 0) {\n throwUnrelatedPauseTimeout(pause, options.timeoutMs);\n }\n try {\n await session.client.waitFor(\"Debugger.resumed\", {\n timeoutMs: remainingMs,\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n session.debuggerState.lastResumedAtMs = performance.now();\n } catch (err: unknown) {\n if (err instanceof CfInspectorError && err.code === \"BREAKPOINT_NOT_HIT\") {\n throwUnrelatedPauseTimeout(pause, options.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);\n}\n\nexport async function waitForPause(\n session: InspectorSession,\n options: WaitForPauseOptions,\n): Promise<PauseEvent> {\n throwIfAborted(options.signal);\n const deadlineMs = performance.now() + options.timeoutMs;\n const buffer = session.pauseBuffer;\n while (buffer.length > 0 || remainingUntil(deadlineMs) > 0) {\n throwIfAborted(options.signal);\n while (buffer.length > 0) {\n throwIfAborted(options.signal);\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 ...(options.signal === undefined ? {} : { signal: options.signal }),\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 type { CdpEvalResult } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n DEFAULT_MAX_VALUE_LENGTH,\n formatPrimitive,\n isPrimitive,\n limitValueLength,\n textTruncationFields,\n} from \"./values.js\";\nimport type { LimitedValue } 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 const limited = readEvalError(result, maxValueLength);\n return {\n expression,\n error: limited.text,\n ...textTruncationFields(limited),\n };\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 limited = limitValueLength(rendered, maxValueLength);\n const base: CapturedExpression = {\n expression,\n value: limited.text,\n ...textTruncationFields(limited),\n };\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\nexport function sideEffectRefusalToCaptured(expression: string): CapturedExpression {\n const error = new CfInspectorError(\n \"MUTATION_NOT_ALLOWED\",\n `V8 blocked the capture expression \"${expression}\" because it may have side effects. Pass --allow-mutation to run it explicitly.`,\n );\n return {\n expression,\n error: `${error.code}: ${error.message}`,\n mutationRisk: true,\n blocked: true,\n };\n}\n\nfunction readEvalError(result: CdpEvalResult, maxValueLength: number): LimitedValue {\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 { CfInspectorError } from \"../types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nexport const DEFAULT_MAX_VALUE_LENGTH = 131_072;\nexport const DEFAULT_STREAM_MAX_VALUE_LENGTH = 4_096;\n\nexport interface TruncatedValue {\n readonly text: string;\n readonly truncated: true;\n readonly originalLength: number;\n}\n\nexport interface CompleteValue {\n readonly text: string;\n readonly truncated: false;\n}\n\nexport type LimitedValue = TruncatedValue | CompleteValue;\n\nexport interface TextTruncationFields {\n readonly truncated?: true;\n readonly originalLength?: number;\n}\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(\n raw: string,\n maxValueLength = DEFAULT_MAX_VALUE_LENGTH,\n): LimitedValue {\n if (raw.length <= maxValueLength) {\n return { text: raw, truncated: false };\n }\n return {\n text: raw.slice(0, maxValueLength),\n truncated: true,\n originalLength: raw.length,\n };\n}\n\nexport function textTruncationFields(limited: LimitedValue): TextTruncationFields {\n return limited.truncated\n ? { truncated: true, originalLength: limited.originalLength }\n : {};\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 { getProperties } from \"../inspector/runtime.js\";\nimport type { CdpProperty, InspectorSession } from \"../inspector/types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nimport {\n formatPrimitive,\n isPrimitive,\n limitValueLength,\n textTruncationFields,\n} 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\nexport interface CapturedProperties {\n readonly variables: readonly VariableSnapshot[];\n readonly omittedCount?: number;\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<CapturedProperties> {\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 const omittedCount = Math.max(properties.length - limited.length, 0);\n return omittedCount === 0 ? { variables } : { variables, omittedCount };\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 capturedChildren = await capturePropertyChildren(\n session,\n described,\n depth,\n maxValueLength,\n );\n const limited = limitValueLength(described.value, maxValueLength);\n const base: VariableSnapshot = {\n name,\n value: limited.text,\n ...textTruncationFields(limited),\n };\n const withType = described.type === undefined ? base : { ...base, type: described.type };\n const children = capturedChildren?.variables;\n const withChildren = children === undefined || children.length === 0\n ? withType\n : { ...withType, children };\n const omittedCount = capturedChildren?.omittedCount ?? 0;\n return omittedCount === 0\n ? withChildren\n : { ...withChildren, truncated: true, omittedCount };\n}\n\nasync function capturePropertyChildren(\n session: InspectorSession,\n described: DescribedProperty,\n depth: number,\n maxValueLength: number,\n): Promise<CapturedProperties | undefined> {\n if (described.objectId === undefined || !isExpandable(described.type)) {\n return undefined;\n }\n if (depth <= 0) {\n return await countDepthOmissions(session, described.objectId);\n }\n try {\n return await captureProperties(\n session,\n described.objectId,\n MAX_CHILD_VARIABLES,\n depth - 1,\n maxValueLength,\n );\n } catch {\n return undefined;\n }\n}\n\nasync function countDepthOmissions(\n session: InspectorSession,\n objectId: string,\n): Promise<CapturedProperties | undefined> {\n try {\n const properties = await getProperties(session, objectId);\n return properties.length === 0\n ? undefined\n : { variables: [], omittedCount: properties.length };\n } catch {\n return undefined;\n }\n}\n\nexport function countPropertyOmissions(captured: CapturedProperties): number {\n return (captured.omittedCount ?? 0) + captured.variables.reduce((total, variable) => {\n const childOmissions = variable.children === undefined\n ? 0\n : countPropertyOmissions({ variables: variable.children });\n return total + (variable.omittedCount ?? 0) + childOmissions;\n }, 0);\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 countPropertyOmissions,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport { limitValueLength, toStructuredValue } from \"./values.js\";\nimport type { LimitedValue } 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\ninterface MaterializedObject {\n readonly value: string;\n readonly omittedCount: number;\n}\n\nasync function materializeObject(\n session: InspectorSession,\n objectId: string,\n): Promise<MaterializedObject | undefined> {\n try {\n const captured = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n Number.MAX_SAFE_INTEGER,\n );\n if (captured.variables.length === 0) {\n return undefined;\n }\n const structured: Record<string, unknown> = {};\n for (const variable of captured.variables) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return {\n value: JSON.stringify(structured),\n omittedCount: countPropertyOmissions(captured),\n };\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);\n if (rendered !== undefined) {\n return buildResult(\n type,\n message ?? description,\n rendered.value,\n maxValueLength,\n rendered.omittedCount,\n );\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 omittedCount = 0,\n): ExceptionSnapshot {\n const limitedValue = limitValueLength(value, maxValueLength);\n const limitedDescription = description === undefined\n ? undefined\n : limitValueLength(description, maxValueLength);\n const base: ExceptionSnapshot = {\n value: limitedValue.text,\n ...exceptionTruncationFields(limitedValue, limitedDescription),\n };\n const withType = type === undefined ? base : { ...base, type };\n const withDescription = limitedDescription === undefined\n ? withType\n : { ...withType, description: limitedDescription.text };\n return omittedCount === 0\n ? withDescription\n : { ...withDescription, truncated: true, omittedCount };\n}\n\nfunction exceptionTruncationFields(\n value: LimitedValue,\n description: LimitedValue | undefined,\n): Pick<\n ExceptionSnapshot,\n \"truncated\" | \"originalLength\" | \"valueOriginalLength\" | \"descriptionOriginalLength\"\n> {\n const valueLength = value.truncated ? value.originalLength : undefined;\n const descriptionLength = description?.truncated === true\n ? description.originalLength\n : undefined;\n const lengths = [valueLength, descriptionLength].filter(\n (length): length is number => length !== undefined,\n );\n if (lengths.length === 0) {\n return {};\n }\n return {\n truncated: true,\n originalLength: Math.max(...lengths),\n ...(valueLength === undefined ? {} : { valueOriginalLength: valueLength }),\n ...(descriptionLength === undefined\n ? {}\n : { descriptionOriginalLength: descriptionLength }),\n };\n}\n","import type { CdpEvalResult, InspectorSession } from \"../inspector/types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n captureProperties,\n countPropertyOmissions,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport {\n limitValueLength,\n textTruncationFields,\n toStructuredValue,\n} 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\ninterface RenderedObjectCapture {\n readonly value: string;\n readonly omittedCount: number;\n}\n\nasync function renderObjectCapture(\n session: InspectorSession,\n objectId: string,\n): Promise<RenderedObjectCapture | undefined> {\n try {\n const captured = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n Number.MAX_SAFE_INTEGER,\n );\n const structured: Record<string, unknown> = {};\n for (const variable of captured.variables) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return {\n value: JSON.stringify(structured),\n omittedCount: countPropertyOmissions(captured),\n };\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);\n if (rendered === undefined) {\n return captured;\n }\n const normalized = normalizeRenderedObjectCapture(rendered.value, captured.value);\n if (normalized === undefined) {\n return captured;\n }\n const limited = limitValueLength(normalized, maxValueLength);\n const base: CapturedExpression = {\n expression,\n value: limited.text,\n ...textTruncationFields(limited),\n ...(captured.type === undefined ? {} : { type: captured.type }),\n };\n return rendered.omittedCount === 0\n ? base\n : { ...base, truncated: true, omittedCount: rendered.omittedCount };\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 interface CapturedScopes {\n readonly scopes: readonly ScopeSnapshot[];\n readonly omittedCount?: number;\n}\n\nexport function selectScopes(scopeChain: CallFrameInfo[\"scopeChain\"]): CallFrameInfo[\"scopeChain\"] {\n return rankedScopes(scopeChain).slice(0, MAX_SCOPES);\n}\n\nfunction rankedScopes(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}\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<CapturedScopes> {\n const ranked = rankedScopes(frame.scopeChain);\n const scopes = ranked.slice(0, MAX_SCOPES);\n const capturedScopes = 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 captured = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n const base: ScopeSnapshot = { type: scope.type, variables: captured.variables };\n return captured.omittedCount === undefined\n ? base\n : { ...base, truncated: true, omittedCount: captured.omittedCount };\n } catch {\n return { type: scope.type, variables: [] };\n }\n }),\n );\n const omittedCount = Math.max(ranked.length - capturedScopes.length, 0);\n return omittedCount === 0\n ? { scopes: capturedScopes }\n : { scopes: capturedScopes, omittedCount };\n}\n","import { looksLikeMutation } from \"../cli/captureParser.js\";\nimport { evaluateOnFrame, isSideEffectRefusal } 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, sideEffectRefusalToCaptured } from \"./evaluation.js\";\nimport { withSerializedObjectCapture } from \"./objects.js\";\nimport { limitValueLength, textTruncationFields } 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 throwOnSideEffect: boolean | undefined,\n): Promise<CapturedExpression> {\n const mutationRisk = throwOnSideEffect === false && looksLikeMutation(expression);\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression, {\n ...(throwOnSideEffect === undefined ? {} : { throwOnSideEffect }),\n });\n if (isSideEffectRefusal(result)) {\n return sideEffectRefusalToCaptured(expression);\n }\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n const serialized = await withSerializedObjectCapture(\n session,\n expression,\n result,\n captured,\n maxValueLength,\n );\n return mutationRisk ? { ...serialized, mutationRisk: true } : serialized;\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n const limited = limitValueLength(message, maxValueLength);\n const captured: CapturedExpression = {\n expression,\n error: limited.text,\n ...textTruncationFields(limited),\n };\n return mutationRisk ? { ...captured, mutationRisk: true } : captured;\n }\n}\n\nasync function captureFrameExpressions(\n session: InspectorSession,\n frame: CallFrameInfo,\n expressions: readonly string[],\n maxValueLength: number,\n throwOnSideEffect: boolean | undefined,\n): Promise<readonly CapturedExpression[]> {\n if (expressions.length === 0) {\n return [];\n }\n return await Promise.all(\n expressions.map((expression) =>\n captureFrameExpression(\n session,\n frame.callFrameId,\n expression,\n maxValueLength,\n throwOnSideEffect,\n ),\n ),\n );\n}\n\nexport interface WalkStackOptions {\n readonly stackDepth: number;\n readonly stackCaptures: readonly string[];\n readonly maxValueLength: number;\n readonly throwOnSideEffect?: boolean;\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 options.throwOnSideEffect,\n );\n return { ...base, captures };\n }),\n );\n}\n","import { looksLikeMutation } from \"../cli/captureParser.js\";\nimport { evaluateOnFrame, isSideEffectRefusal } 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, sideEffectRefusalToCaptured } 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 DEFAULT_STREAM_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n textTruncationFields,\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 readonly throwOnSideEffect?: boolean;\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 capturedScopes = await captureScopes(session, top, maxValueLength);\n topFrame = {\n ...topFrame,\n scopes: capturedScopes.scopes,\n ...(capturedScopes.omittedCount === undefined\n ? {}\n : { truncated: true, omittedCount: capturedScopes.omittedCount }),\n };\n }\n captures = await captureExpressions(\n session,\n top.callFrameId,\n options.captures,\n maxValueLength,\n options.throwOnSideEffect,\n );\n stack = await walkStack(session, pause.callFrames, {\n stackDepth: options.stackDepth ?? DEFAULT_STACK_DEPTH,\n stackCaptures: options.stackCaptures ?? [],\n maxValueLength,\n ...(options.throwOnSideEffect === undefined\n ? {}\n : { throwOnSideEffect: options.throwOnSideEffect }),\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 throwOnSideEffect: boolean | undefined,\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(\n session,\n callFrameId,\n expression,\n maxValueLength,\n throwOnSideEffect,\n );\n }),\n );\n}\n\nasync function captureExpression(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n maxValueLength: number,\n throwOnSideEffect: boolean | undefined,\n): Promise<CapturedExpression> {\n const mutationRisk = throwOnSideEffect === false && looksLikeMutation(expression);\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression, {\n ...(throwOnSideEffect === undefined ? {} : { throwOnSideEffect }),\n });\n if (isSideEffectRefusal(result)) {\n return sideEffectRefusalToCaptured(expression);\n }\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n const serialized = await withSerializedObjectCapture(\n session,\n expression,\n result,\n captured,\n maxValueLength,\n );\n return mutationRisk ? { ...serialized, mutationRisk: true } : serialized;\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n const limited = limitValueLength(message, maxValueLength);\n const captured: CapturedExpression = {\n expression,\n error: limited.text,\n ...textTruncationFields(limited),\n };\n return mutationRisk ? { ...captured, mutationRisk: true } : captured;\n }\n}\n\nexport const internalsForTesting = {\n DEFAULT_MAX_VALUE_LENGTH,\n DEFAULT_STREAM_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n describeProperty,\n selectScopes,\n evalResultToCaptured,\n};\n","import process from \"node:process\";\n\nimport { discoverInspectorTargets } from \"../../inspector/discovery.js\";\nimport type { InspectorTarget } from \"../../inspector/discovery.js\";\nimport { listScripts } from \"../../inspector/runtime.js\";\nimport { discoverNodeWorkerTargets } from \"../../inspector/session.js\";\nimport type { InspectorWorkerTarget } from \"../../inspector/types.js\";\nimport type { ListScriptsCommandOptions, ListTargetsCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { openTarget, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\n\ntype ScriptUrlFilter = (url: string) => boolean;\ntype FilterToken = string | { readonly kind: \"wildcard\"; readonly minChars: 0 | 1 };\n\nexport async function handleListScripts(opts: ListScriptsCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts);\n const filter = compileScriptUrlFilter(opts.filter);\n const scripts = (await withSession(target, (session) => Promise.resolve(listScripts(session))))\n .filter((script) => filter === undefined || filter(script.url));\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\nexport async function handleListTargets(opts: ListTargetsCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts);\n const tunnel = await openTarget(target);\n try {\n const targets = await discoverInspectorTargets(tunnel.host, tunnel.port, 5_000);\n const indexedTargets = await buildListedTargets(targets);\n const workerCount = indexedTargets.reduce((count, targetEntry) => {\n return count + targetEntry.workers.length;\n }, 0);\n writeTargetCountSummary(indexedTargets.length, workerCount);\n warnOnMissingWorkers(indexedTargets.length, workerCount, indexedTargets);\n if (opts.json) {\n writeJson(indexedTargets);\n return;\n }\n writeHumanTargets(indexedTargets);\n } finally {\n await tunnel.dispose();\n }\n}\n\ninterface ListedWorkerTarget {\n readonly index: number;\n readonly workerId: string;\n readonly type: string;\n readonly title: string;\n readonly url: string;\n}\n\ninterface ListedInspectorTarget extends InspectorTarget {\n readonly index: number;\n readonly likelyWorker: boolean;\n readonly workerDiscoverySupported: boolean;\n readonly workers: readonly ListedWorkerTarget[];\n}\n\nasync function buildListedTargets(\n targets: readonly InspectorTarget[],\n): Promise<readonly ListedInspectorTarget[]> {\n return await Promise.all(targets.map(async (target, index) => {\n try {\n const workerResult = await discoverNodeWorkerTargets(target);\n return buildListedTarget(target, index, workerResult.supported, workerResult.workers);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(\n `[cf-inspector] warning: worker discovery failed for raw target ${index.toString()}: ${message}\\n`,\n );\n return buildListedTarget(target, index, false, []);\n }\n }));\n}\n\nfunction buildListedTarget(\n target: InspectorTarget,\n index: number,\n workerDiscoverySupported: boolean,\n workers: readonly InspectorWorkerTarget[],\n): ListedInspectorTarget {\n return {\n index,\n ...target,\n likelyWorker: looksLikeWorkerTarget(target),\n workerDiscoverySupported,\n workers: workers.map((worker, workerIndex) => ({\n index: workerIndex,\n workerId: worker.workerId,\n type: worker.type,\n title: worker.title,\n url: worker.url,\n })),\n };\n}\n\nfunction looksLikeWorkerTarget(target: InspectorTarget): boolean {\n return `${target.type} ${target.title} ${target.url}`.toLowerCase().includes(\"worker\");\n}\n\nfunction writeTargetCountSummary(targetCount: number, workerCount: number): void {\n process.stderr.write(\n `[cf-inspector] ${targetCount.toString()} raw inspector ` +\n `${targetCount === 1 ? \"target\" : \"targets\"}; ${workerCount.toString()} ` +\n `${workerCount === 1 ? \"worker\" : \"workers\"}.\\n`,\n );\n}\n\nfunction warnOnMissingWorkers(\n targetCount: number,\n workerCount: number,\n targets: readonly ListedInspectorTarget[],\n): void {\n if (targetCount !== 1 || workerCount !== 0) {\n return;\n }\n const supported = targets[0]?.workerDiscoverySupported === true;\n const supportHint = supported\n ? \"NodeWorker discovery is available, but no live worker attached.\"\n : \"This runtime did not expose NodeWorker discovery.\";\n process.stderr.write(\n `[cf-inspector] warning: only the main inspector target is reachable. ${supportHint} ` +\n \"If worker code is expected, ensure the worker is alive and rerun list-targets. \" +\n \"A worker on a separate inspector port is not carried by a single Cloud Foundry tunnel.\\n\",\n );\n}\n\nfunction writeHumanTargets(targets: readonly ListedInspectorTarget[]): void {\n for (const target of targets) {\n const workerLabel = target.likelyWorker ? \"\\tlikely-worker\" : \"\";\n process.stdout.write(\n `${target.index.toString()}\\ttarget\\t${target.type}\\t${target.title}\\t${target.url}${workerLabel}\\n`,\n );\n for (const worker of target.workers) {\n process.stdout.write(\n ` ${worker.index.toString()}\\tworker\\t${worker.type}\\t${worker.title}\\t${worker.url}\\n`,\n );\n }\n }\n}\n\nexport function compileScriptUrlFilter(pattern: string | undefined): ScriptUrlFilter | undefined {\n if (pattern === undefined || pattern.length === 0) {\n return undefined;\n }\n const alternatives = splitPatternAlternatives(pattern)\n .map((alternative) => parseFilterTokens(alternative))\n .filter((tokens) => tokens.length > 0);\n return (url: string): boolean => alternatives.some((tokens) => matchesFilterTokens(url, tokens));\n}\n\nfunction splitPatternAlternatives(pattern: string): readonly string[] {\n const alternatives: string[] = [];\n let current = \"\";\n for (let index = 0; index < pattern.length; index++) {\n const char = pattern[index] ?? \"\";\n if (char === \"\\\\\" && index + 1 < pattern.length) {\n current += `${char}${pattern[index + 1] ?? \"\"}`;\n index++;\n } else if (char === \"|\") {\n alternatives.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n alternatives.push(current);\n return alternatives;\n}\n\nfunction parseFilterTokens(pattern: string): readonly FilterToken[] {\n const tokens: FilterToken[] = [];\n let literal = \"\";\n for (let index = 0; index < pattern.length; index++) {\n const char = pattern[index] ?? \"\";\n const nextChar = pattern[index + 1];\n if (char === \"\\\\\" && nextChar !== undefined) {\n literal += nextChar;\n index++;\n } else if (char === \".\" && (nextChar === \"*\" || nextChar === \"+\")) {\n if (literal.length > 0) { tokens.push(literal); }\n literal = \"\";\n tokens.push({ kind: \"wildcard\", minChars: nextChar === \"+\" ? 1 : 0 });\n index++;\n } else {\n literal += char;\n }\n }\n if (literal.length > 0) { tokens.push(literal); }\n return tokens;\n}\n\nfunction matchesFilterTokens(value: string, tokens: readonly FilterToken[]): boolean {\n let position = 0;\n for (const token of tokens) {\n if (typeof token === \"string\") {\n const nextPosition = value.indexOf(token, position);\n if (nextPosition === -1) { return false; }\n position = nextPosition + token.length;\n } else {\n if (token.minChars === 1 && position >= value.length) { return false; }\n position += token.minChars;\n }\n }\n return true;\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 { DEFAULT_STREAM_MAX_VALUE_LENGTH } from \"../../snapshot/values.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { LogCommandOptions } from \"../commandTypes.js\";\nimport { writeLogEvent } from \"../output.js\";\nimport { withTerminationSignal } from \"../signals.js\";\nimport { parsePositiveInt, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport {\n warnOnBoundBreakpointWithoutHit,\n warnOnMutationRisk,\n warnOnUnboundBreakpoints,\n} from \"../warnings.js\";\n\nexport async function handleLog(opts: LogCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(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 maxValueLength = parsePositiveInt(opts.maxValueLength, \"--max-value-length\")\n ?? DEFAULT_STREAM_MAX_VALUE_LENGTH;\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 warnOnMutationRisk(expression, \"log --expr\");\n if (condition !== undefined) {\n warnOnMutationRisk(condition, \"log --condition\");\n }\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 maxValueLength,\n signal,\n onEvent: (event) => {\n writeLogEvent(event, opts.json);\n },\n onBreakpointSet: (handle) => {\n warnOnUnboundBreakpoints([handle]);\n },\n });\n if (\n result.emitted === 0 &&\n (result.stoppedReason === \"duration\" || result.stoppedReason === \"signal\")\n ) {\n warnOnBoundBreakpointWithoutHit([result.handle]);\n }\n writeLogSummary(result.stoppedReason, result.emitted, opts.json);\n }, undefined, signal);\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 {\n DEFAULT_STREAM_MAX_VALUE_LENGTH,\n resolveMaxValueLength,\n} from \"../snapshot/values.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 maxValueLength?: 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: 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 maxValueLength = resolveMaxValueLength(\n options.maxValueLength ?? DEFAULT_STREAM_MAX_VALUE_LENGTH,\n );\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, maxValueLength);\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 maxValueLength: number,\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, maxValueLength);\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 {\n DEFAULT_STREAM_MAX_VALUE_LENGTH,\n limitValueLength,\n textTruncationFields,\n} from \"../snapshot/values.js\";\nimport 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 readonly truncated?: true;\n readonly originalLength?: number;\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 maxValueLength = DEFAULT_STREAM_MAX_VALUE_LENGTH,\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 const limited = limitValueLength(payload.slice(\"!err:\".length), maxValueLength);\n return {\n ts,\n at,\n error: limited.text,\n ...textTruncationFields(limited),\n };\n }\n return parsePayload(ts, at, payload, maxValueLength);\n}\n\nfunction parsePayload(\n ts: string,\n at: string,\n payload: string,\n maxValueLength: number,\n): LogpointEvent {\n try {\n const parsed: unknown = JSON.parse(payload);\n if (typeof parsed === \"string\") {\n return buildValueEvent(ts, at, parsed, maxValueLength);\n }\n return buildValueEvent(ts, at, JSON.stringify(parsed), maxValueLength);\n } catch {\n return buildValueEvent(ts, at, payload, maxValueLength, true);\n }\n}\n\nfunction buildValueEvent(\n ts: string,\n at: string,\n value: string,\n maxValueLength: number,\n includeRaw = false,\n): LogpointEvent {\n const limited = limitValueLength(value, maxValueLength);\n return {\n ts,\n at,\n value: limited.text,\n ...(includeRaw ? { raw: limited.text } : {}),\n ...textTruncationFields(limited),\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 runSetupEvals,\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 { DEFAULT_MAX_VALUE_LENGTH } from \"../../snapshot/values.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, writeProgress } from \"../output.js\";\nimport { parsePositiveInt, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport type { ProgressReporter } from \"../target.js\";\nimport {\n enforceNativeConditionMutationPolicy,\n roundDurationMs,\n warnOnCaptureMutationRisk,\n warnOnBoundBreakpointWithoutHit,\n warnOnMutationRisk,\n warnOnUnboundBreakpoints,\n warnOnUnmatchedPause,\n withPausedDuration,\n} from \"../warnings.js\";\n\ninterface PreparedSnapshotCommand {\n readonly target: Target;\n readonly setupEvals: readonly string[];\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 readonly throwOnSideEffect: boolean;\n}\n\nexport async function handleSnapshot(opts: SnapshotCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts, { useTimeoutForTunnel: false });\n const prepared = prepareSnapshotCommand(opts, target);\n warnOnCaptureMutationRisk(\n [...prepared.captures, ...prepared.stackCaptures],\n opts.allowMutation === true,\n );\n for (const expression of prepared.setupEvals) {\n warnOnMutationRisk(expression, \"snapshot --setup-eval\");\n }\n const reportProgress = opts.quiet === true ? undefined : writeProgress;\n const result = await runSnapshotCommand(prepared, opts, reportProgress);\n if (opts.json) {\n writeJson(result);\n } else {\n writeHumanSnapshot(result);\n }\n reportProgress?.(\"Snapshot complete.\");\n}\n\nfunction prepareSnapshotCommand(opts: SnapshotCommandOptions, target: Target): PreparedSnapshotCommand {\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 ?? DEFAULT_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 const setupEvals = parseSetupEvals(opts.setupEval);\n enforceNativeConditionMutationPolicy(\n condition ?? \"\",\n opts.allowMutation === true,\n \"snapshot --condition\",\n );\n return {\n target,\n setupEvals,\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,\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n throwOnSideEffect: opts.allowMutation !== true,\n };\n}\n\nasync function runSnapshotCommand(\n command: PreparedSnapshotCommand,\n opts: SnapshotCommandOptions,\n reportProgress?: ProgressReporter,\n): Promise<SnapshotResult> {\n return await withSession(command.target, async (session): Promise<SnapshotResult> => {\n return await runSnapshotOnSession(session, command, opts, reportProgress);\n }, reportProgress);\n}\n\nasync function runSnapshotOnSession(\n session: InspectorSession,\n command: PreparedSnapshotCommand,\n opts: SnapshotCommandOptions,\n reportProgress?: ProgressReporter,\n): Promise<SnapshotResult> {\n if (command.setupEvals.length > 0) {\n const setupCount = command.setupEvals.length;\n reportProgress?.(`Running ${setupCount.toString()} setup ${setupCount === 1 ? \"evaluation\" : \"evaluations\"}...`);\n await runSetupEvals(session, command.setupEvals);\n reportProgress?.(\"Setup evaluation complete.\");\n }\n\n if (command.condition !== undefined) {\n reportProgress?.(\"Validating the breakpoint condition...\");\n await validateExpression(session, command.condition);\n reportProgress?.(\"Breakpoint condition is valid.\");\n }\n const breakpointCount = command.breakpoints.length;\n reportProgress?.(\n `Setting ${breakpointCount.toString()} ${breakpointCount === 1 ? \"breakpoint\" : \"breakpoints\"}...`,\n );\n const handles = await setCommandBreakpoints(session, command);\n const resolvedCount = handles.reduce(\n (total, handle) => total + handle.resolvedLocations.length,\n 0,\n );\n reportProgress?.(\n `Breakpoint setup complete: ${resolvedCount.toString()} resolved ${resolvedCount === 1 ? \"location\" : \"locations\"}.`,\n );\n warnOnUnboundBreakpoints(handles);\n reportProgress?.(\n `Waiting up to ${(command.timeoutMs / 1000).toString()}s for a breakpoint hit...`,\n );\n const pause = await waitForCommandPause(session, opts, handles, command.timeoutMs);\n const captureCount = command.captures.length;\n reportProgress?.(\n `Breakpoint hit; capturing ${captureCount.toString()} ${captureCount === 1 ? \"expression\" : \"expressions\"}...`,\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 maxValueLength: command.maxValueLength,\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n throwOnSideEffect: command.throwOnSideEffect,\n });\n if (opts.keepPaused === true) {\n reportProgress?.(\"Snapshot captured; leaving the target paused as requested.\");\n return withPausedDuration(snapshot, null);\n }\n reportProgress?.(\"Snapshot captured; resuming the target...\");\n return await resumeAfterSnapshot(session, snapshot, pausedStartedAt, reportProgress);\n}\n\nasync function setCommandBreakpoints(\n session: Parameters<typeof setBreakpoint>[0],\n command: PreparedSnapshotCommand,\n): Promise<readonly Awaited<ReturnType<typeof setBreakpoint>>[]> {\n return 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}\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 try {\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 } catch (error: unknown) {\n if (\n error instanceof CfInspectorError &&\n (error.code === \"BREAKPOINT_NOT_HIT\" || error.code === \"UNRELATED_PAUSE_TIMEOUT\")\n ) {\n warnOnBoundBreakpointWithoutHit(handles);\n }\n throw error;\n }\n}\n\nasync function resumeAfterSnapshot(\n session: Parameters<typeof resume>[0],\n snapshot: Awaited<ReturnType<typeof captureSnapshot>>,\n pausedStartedAt: number,\n reportProgress?: ProgressReporter,\n): Promise<SnapshotResult> {\n try {\n await resume(session);\n reportProgress?.(\"Target resumed.\");\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\nfunction parseSetupEvals(raw: unknown): readonly string[] {\n const values: readonly unknown[] = Array.isArray(raw) ? raw : [];\n return values\n .filter((expr): expr is string => typeof expr === \"string\" && expr.trim().length > 0)\n .map((expr) => expr.trim());\n}\n\nexport const internalsForTesting = {\n parseSetupEvals,\n prepareSnapshotCommand,\n runSnapshotCommand,\n runSnapshotOnSession,\n};\n","import { performance } from \"node:perf_hooks\";\nimport process from \"node:process\";\n\nimport {\n resume,\n runSetupEvals,\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 { DEFAULT_STREAM_MAX_VALUE_LENGTH } from \"../../snapshot/values.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, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport {\n enforceNativeConditionMutationPolicy,\n warnOnBoundBreakpointWithoutHit,\n warnOnCaptureMutationRisk,\n warnOnMutationRisk,\n warnOnUnboundBreakpoints,\n} from \"../warnings.js\";\n\ninterface PreparedWatchCommand {\n readonly target: Target;\n readonly setupEvals: readonly string[];\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 readonly throwOnSideEffect: boolean;\n}\n\ntype WatchStopReason = \"duration\" | \"signal\" | \"max-events\" | \"transport-closed\";\n\nexport async function handleWatch(opts: WatchCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts, { useTimeoutForTunnel: false });\n const prepared = prepareWatchCommand(opts, target);\n warnOnCaptureMutationRisk(\n [...prepared.captures, ...prepared.stackCaptures],\n opts.allowMutation === true,\n );\n for (const expression of prepared.setupEvals) {\n warnOnMutationRisk(expression, \"watch --setup-eval\");\n }\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 }, undefined, signal);\n });\n writeWatchSummary(stoppedReason, emitted, opts.json);\n}\n\nfunction prepareWatchCommand(opts: WatchCommandOptions, target: Target): PreparedWatchCommand {\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 ?? DEFAULT_STREAM_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 const setupEvals = parseSetupEvals(opts.setupEval);\n enforceNativeConditionMutationPolicy(\n condition ?? \"\",\n opts.allowMutation === true,\n \"watch --condition\",\n );\n return {\n target,\n setupEvals,\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,\n ...(condition === undefined ? {} : { condition }),\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n throwOnSideEffect: opts.allowMutation !== true,\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.setupEvals.length > 0) {\n await runSetupEvals(session, command.setupEvals);\n }\n\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 if (emitted === 0 && (state.reason === \"duration\" || state.reason === \"signal\")) {\n warnOnBoundBreakpointWithoutHit(handles);\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 signal,\n });\n } catch (err: unknown) {\n if (err instanceof CfInspectorError) {\n if (err.code === \"ABORTED\") {\n return \"signal\";\n }\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 maxValueLength: command.maxValueLength,\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n throwOnSideEffect: command.throwOnSideEffect,\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\nfunction parseSetupEvals(raw: unknown): readonly string[] {\n const values: readonly unknown[] = Array.isArray(raw) ? raw : [];\n return values\n .filter((expr): expr is string => typeof expr === \"string\" && expr.trim().length > 0)\n .map((expr) => expr.trim());\n}\n\nexport const internalsForTesting = {\n formatLocation,\n computeDeadline,\n remainingForLoop,\n parseSetupEvals,\n prepareWatchCommand,\n runWatchLoop,\n writeJson,\n};\n"],"mappings":"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","names":["wrapped","process","process","performance","isUnknownRecord","performance","process","process","process","process","process","performance","process","performance","performance","out","asString","buildResult","performance","process","process","process","process","HITS_GLOBAL","asString","validateHitCount","asString","process","process","performance","process","performance","process","performance","process","parseSetupEvals","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/cli/target.ts","../src/cf/tunnel.ts","../src/inspector/session.ts","../src/cdp/client.ts","../src/inspector/conversions.ts","../src/cli/commandTypes.ts","../src/cli/warnings.ts","../src/cli/captureParser.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/evaluation.ts","../src/snapshot/values.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/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 | \"MUTATION_NOT_ALLOWED\"\n | \"SETUP_EVAL_FAILED\"\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}\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 ScriptLocation {\n readonly scriptId: string;\n readonly lineNumber: number;\n readonly columnNumber?: number;\n}\n\nexport interface BreakLocation extends ScriptLocation {\n readonly type?: string;\n}\n\nexport interface ResolvedLocation extends ScriptLocation {\n readonly url?: string;\n}\n\nexport interface GetPossibleBreakpointsOptions {\n readonly start: ScriptLocation;\n readonly end?: ScriptLocation;\n readonly restrictToFunction?: boolean;\n}\n\nexport interface SetBreakpointAtLocationInput {\n readonly location: ScriptLocation;\n readonly condition?: string;\n}\n\nexport interface ExactBreakpointHandle {\n readonly breakpointId: string;\n readonly requestedLocation: ScriptLocation;\n readonly actualLocation: ScriptLocation;\n}\n\nexport interface RemoteObjectInfo {\n readonly type: string;\n readonly subtype?: string;\n readonly className?: string;\n readonly completeness?: \"truncated\" | \"unavailable\";\n readonly value?: unknown;\n readonly unserializableValue?: string;\n readonly description?: string;\n readonly deepSerializedValue?: unknown;\n readonly objectId?: string;\n readonly preview?: unknown;\n readonly customPreview?: unknown;\n}\n\nexport interface StackTraceIdInfo {\n readonly id: string;\n readonly debuggerId?: string;\n}\n\nexport interface StackTraceFrameInfo {\n readonly functionName: string;\n readonly scriptId: string;\n readonly url: string;\n readonly lineNumber: number;\n readonly columnNumber: number;\n}\n\nexport interface StackTraceInfo {\n readonly description?: string;\n readonly callFrames: readonly StackTraceFrameInfo[];\n readonly parent?: StackTraceInfo;\n readonly parentId?: StackTraceIdInfo;\n}\n\nexport interface CallFrameInfo {\n readonly callFrameId: string;\n readonly functionName: string;\n readonly scriptId?: string;\n readonly functionLocation?: ScriptLocation;\n readonly url?: string;\n readonly lineNumber: number;\n readonly columnNumber: number;\n readonly scopeChain: readonly ScopeInfo[];\n readonly thisObject?: RemoteObjectInfo;\n readonly returnValue?: RemoteObjectInfo;\n}\n\nexport interface ScopeInfo {\n readonly type: string;\n readonly objectId?: string;\n readonly object?: RemoteObjectInfo;\n readonly name?: string;\n readonly startLocation?: ScriptLocation;\n readonly endLocation?: ScriptLocation;\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 readonly asyncStackTrace?: StackTraceInfo;\n readonly asyncStackTraceId?: StackTraceIdInfo;\n readonly asyncCallStackTraceId?: StackTraceIdInfo;\n}\n\nexport interface VariableSnapshot {\n readonly name: string;\n readonly value: string;\n readonly type?: string;\n readonly children?: readonly VariableSnapshot[];\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly omittedCount?: number;\n}\n\nexport interface ScopeSnapshot {\n readonly type: string;\n readonly variables: readonly VariableSnapshot[];\n readonly truncated?: true;\n readonly omittedCount?: number;\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 readonly truncated?: true;\n readonly omittedCount?: number;\n}\n\nexport interface CapturedExpression {\n readonly expression: string;\n readonly value?: string;\n readonly type?: string;\n readonly error?: string;\n readonly mutationRisk?: boolean;\n readonly blocked?: true;\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly omittedCount?: number;\n}\n\nexport interface ExceptionSnapshot {\n readonly value?: string;\n readonly type?: string;\n readonly description?: string;\n readonly error?: string;\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly valueOriginalLength?: number;\n readonly descriptionOriginalLength?: number;\n readonly omittedCount?: number;\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 readonly startLine?: number;\n readonly startColumn?: number;\n readonly endLine?: number;\n readonly endColumn?: number;\n readonly executionContextId?: number;\n readonly hash?: string;\n readonly buildId?: string;\n readonly executionContextAuxData?: unknown;\n readonly sourceMapURL?: string;\n readonly hasSourceURL?: boolean;\n readonly isModule?: boolean;\n readonly length?: number;\n readonly stackTrace?: StackTraceInfo;\n}\n\nexport interface InspectorConnectOptions {\n readonly port: number;\n readonly host?: string;\n readonly connectTimeoutMs?: number;\n readonly targetIndex?: number;\n readonly workerIndex?: 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 { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Command } from \"commander\";\n\nimport type {\n AttachCommandOptions,\n EvalCommandOptions,\n ExceptionCommandOptions,\n ListScriptsCommandOptions,\n ListTargetsCommandOptions,\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, handleListTargets } 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(\n cmd: Command,\n options: {\n readonly includeTarget?: boolean;\n readonly includeTimeout?: boolean;\n readonly includeWorker?: boolean;\n } = {},\n): Command {\n const withEndpointOptions = 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 (required with --app)\")\n .option(\"--api-endpoint <url>\", \"CF API endpoint override for --region\")\n .option(\"--org <name>\", \"CF org name (required with --app)\")\n .option(\"--space <name>\", \"CF space name (required with --app)\")\n .option(\n \"--app <name>\",\n \"CF app name; requires explicit --region/--org/--space (ambient cf target is ignored)\",\n );\n const withTargetOption = options.includeTarget === false\n ? withEndpointOptions\n : withEndpointOptions.option(\n \"--target <index>\",\n \"Inspector target index from /json/list (default: 0)\",\n );\n const withWorkerOption = options.includeWorker === false\n ? withTargetOption\n : withTargetOption.option(\"--worker <index>\", \"NodeWorker sub-session index listed by list-targets\");\n return options.includeTimeout === false\n ? withWorkerOption\n : withWorkerOption.option(\"--timeout <seconds>\", \"Timeout for CF tunnel readiness in seconds (default: 180)\");\n}\n\nconst collectStrings = (value: string, prev: readonly string[] = []): readonly string[] => [\n ...prev,\n value,\n];\n\nfunction readPackageVersion(): string {\n let current = dirname(fileURLToPath(import.meta.url));\n for (let depth = 0; depth < 4; depth += 1) {\n const candidate = join(current, \"package.json\");\n try {\n const parsed: unknown = JSON.parse(readFileSync(candidate, \"utf8\"));\n if (typeof parsed === \"object\" && parsed !== null) {\n const record = parsed as Record<string, unknown>;\n if (record[\"name\"] === \"@saptools/cf-inspector\" && typeof record[\"version\"] === \"string\") {\n return record[\"version\"];\n }\n }\n } catch {\n // Keep walking toward the package root. The source path and bundled CLI\n // live at different depths, so one failed candidate is expected.\n }\n current = dirname(current);\n }\n throw new Error(\"Unable to read @saptools/cf-inspector package version\");\n}\n\nexport async function main(argv: readonly string[]): Promise<void> {\n const program = new Command();\n program\n .name(\"cf-inspector\")\n .version(readPackageVersion())\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 registerListTargets(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 { includeTimeout: false },\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(\"--setup-eval <expr>\", \"Evaluate a global setup expression before breakpoint setup (repeatable)\", collectStrings, [] as readonly string[])\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: 131072)\")\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(\"--allow-mutation\", \"Allow mutation-capable captures and native breakpoint conditions to run\")\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(\"--quiet\", \"Suppress progress messages on stderr\")\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(\"--max-value-length <chars>\", \"Maximum characters per log value before truncation (default: 4096)\")\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 { includeTimeout: false },\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(\"--setup-eval <expr>\", \"Evaluate a global setup expression before breakpoint setup (repeatable)\", collectStrings, [] as readonly string[])\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(\"--allow-mutation\", \"Allow mutation-capable captures and native breakpoint conditions to run\")\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 { includeTimeout: false },\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: 131072)\")\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(\"--allow-mutation\", \"Allow mutation-capable capture expressions to run\")\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(\"--filter <pattern>\", \"Only include script URLs matching this pattern\")\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 registerListTargets(program: Command): void {\n applyTargetOptions(\n program.command(\"list-targets\").description(\n \"List raw /json/list targets and nested workers; use --target or --worker on other commands\",\n ),\n { includeTarget: false, includeWorker: false },\n )\n .option(\n \"--no-json\",\n \"Print tab-separated target/worker rows: index, kind, type, title, and URL\",\n )\n .action(async (opts: ListTargetsCommandOptions): Promise<void> => {\n await handleListTargets(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 { includeTarget: false, includeWorker: false },\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, resolveTargetWithCurrentCfTarget } from \"../target.js\";\n\nexport async function handleAttach(opts: AttachCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(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\";\nimport { performance } from \"node:perf_hooks\";\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\ninterface NodeSystemError extends Error {\n readonly code?: string;\n readonly syscall?: string;\n readonly address?: string;\n readonly port?: number;\n}\n\nclass InvalidDiscoveryPayloadError extends CfInspectorError {}\n\nasync function fetchJson<T>(url: string, timeoutMs: number): Promise<T> {\n const deadline = performance.now() + timeoutMs;\n let lastError: unknown;\n\n while (performance.now() < deadline) {\n try {\n const remainingMs = deadline - performance.now();\n if (remainingMs <= 0) {\n break;\n }\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 const attemptTimeoutMs = Math.min(2000, remainingMs);\n req.setTimeout(attemptTimeoutMs, () => {\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(err instanceof CfInspectorError ? err : formatDiscoveryRequestError(url, err));\n });\n req.end();\n });\n } catch (err: unknown) {\n if (err instanceof InvalidDiscoveryPayloadError) {\n throw err;\n }\n lastError = err;\n const now = performance.now();\n if (now < deadline) {\n const sleepMs = Math.min(1000, deadline - now);\n await new Promise((r) => setTimeout(r, sleepMs));\n }\n }\n }\n\n if (lastError instanceof Error) {\n throw lastError;\n }\n throw new CfInspectorError(\"INSPECTOR_DISCOVERY_FAILED\", `Inspector discovery at ${url} timed out after ${timeoutMs.toString()}ms`);\n}\n\nfunction isNodeSystemError(err: unknown): err is NodeSystemError {\n return err instanceof Error;\n}\n\nfunction isConnectionRefusedOrUnreachable(code: string | undefined): boolean {\n return code === \"ECONNREFUSED\" ||\n code === \"ECONNRESET\" ||\n code === \"ETIMEDOUT\" ||\n code === \"EHOSTUNREACH\" ||\n code === \"ENETUNREACH\";\n}\n\nfunction formatEndpoint(url: string, err: NodeSystemError): string {\n if (typeof err.address === \"string\" && typeof err.port === \"number\") {\n return `${err.address}:${err.port.toString()}`;\n }\n const parsed = new URL(url);\n return parsed.host;\n}\n\nfunction formatDiscoveryRequestError(url: string, err: unknown): CfInspectorError {\n const detail = err instanceof Error ? err.message : String(err);\n if (!isNodeSystemError(err) || !isConnectionRefusedOrUnreachable(err.code)) {\n return new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Inspector discovery at ${url} failed: ${detail}`,\n );\n }\n const endpoint = formatEndpoint(url, err);\n return new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Cannot reach Node inspector discovery at ${url}. Nothing is listening on ${endpoint}, or the inspector tunnel is stale/closed. Restart the local inspector or tunnel and retry. If this port came from cf-debugger, stop the stale session and start a fresh tunnel, or run cf-inspector with --app/--region/--org/--space so it can open a tunnel.`,\n detail,\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 new InvalidDiscoveryPayloadError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `Failed to parse inspector discovery response from ${url}: ${message}`,\n );\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\ninterface TruncationSummary {\n readonly truncated?: true;\n readonly originalLength?: number;\n readonly omittedCount?: number;\n}\n\nexport function writeProgress(message: string): void {\n process.stderr.write(`[cf-inspector] ${message}\\n`);\n}\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} = ${renderTruncated(detail, capture)}`);\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.truncated === true) {\n lines.push(` scopes: ${truncationLabel(frame)}`);\n }\n if (frame.scopes === undefined) {\n return;\n }\n for (const scope of frame.scopes) {\n const scopeSuffix = scope.truncated === true ? `; ${truncationLabel(scope)}` : \"\";\n lines.push(` scope ${scope.type} (${scope.variables.length.toString()} vars${scopeSuffix}):`);\n for (const variable of scope.variables) {\n lines.push(` ${variable.name} = ${renderTruncated(variable.value, variable)}`);\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} = ${renderTruncated(detail, capture)}`);\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 lines.push(` exception: ${renderExceptionDetail(exception)}`);\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 ${renderTruncated(event.error, event)}\\n`);\n return;\n }\n process.stdout.write(`[${event.ts}] ${event.at} ${renderTruncated(event.value ?? \"\", event)}\\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 process.stdout.write(` exception: ${renderExceptionDetail(event.exception)}\\n`);\n }\n for (const capture of event.captures) {\n const detail = capture.error ?? capture.value ?? \"undefined\";\n process.stdout.write(` ${capture.expression} = ${renderTruncated(detail, capture)}\\n`);\n }\n}\n\nfunction renderExceptionDetail(exception: ExceptionSnapshot): string {\n if (exception.description !== undefined) {\n const originalLength = exception.descriptionOriginalLength;\n return renderTruncated(\n exception.description,\n originalLength === undefined ? {} : { truncated: true, originalLength },\n );\n }\n if (exception.value !== undefined) {\n const originalLength = exception.valueOriginalLength ?? exception.originalLength;\n const summary: TruncationSummary = {\n ...(originalLength === undefined ? {} : { truncated: true, originalLength }),\n ...(exception.omittedCount === undefined\n ? {}\n : { truncated: true, omittedCount: exception.omittedCount }),\n };\n return renderTruncated(exception.value, summary);\n }\n return exception.error ?? \"(unknown)\";\n}\n\nfunction renderTruncated(value: string, summary: TruncationSummary): string {\n if (summary.truncated !== true) {\n return value;\n }\n const visualValue = summary.originalLength === undefined ? value : `${value}…`;\n return `${visualValue} [${truncationLabel(summary)}]`;\n}\n\nfunction truncationLabel(summary: TruncationSummary): string {\n const details: string[] = [];\n if (summary.originalLength !== undefined) {\n details.push(`original ${summary.originalLength.toString()} chars`);\n }\n if (summary.omittedCount !== undefined) {\n details.push(`${summary.omittedCount.toString()} omitted`);\n }\n return details.length === 0 ? \"truncated\" : `truncated: ${details.join(\", \")}`;\n}\n","import {\n type SessionStatus,\n} from \"@saptools/cf-debugger\";\n\nimport { 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\";\nimport { warnOnImplicitInspectorSelection } from \"./warnings.js\";\n\nexport type ProgressReporter = (message: string) => void;\n\nconst CF_TUNNEL_STATUS_MESSAGES = {\n starting: \"Preparing the Cloud Foundry debugger...\",\n \"logging-in\": \"Logging in to Cloud Foundry...\",\n targeting: \"Targeting the Cloud Foundry org and space...\",\n \"ssh-enabling\": \"Enabling SSH for the Cloud Foundry app...\",\n \"ssh-restarting\": \"Restarting the Cloud Foundry app to activate SSH...\",\n signaling: \"Starting the remote Node.js inspector...\",\n tunneling: \"Opening the SSH inspector tunnel...\",\n ready: \"Cloud Foundry inspector tunnel is ready.\",\n stopping: \"Closing the Cloud Foundry inspector tunnel...\",\n stopped: \"Cloud Foundry inspector tunnel closed.\",\n error: \"Cloud Foundry inspector tunnel failed.\",\n} as const satisfies Readonly<Record<SessionStatus, string>>;\n\nexport function formatCfTunnelStatus(status: SessionStatus): string {\n return CF_TUNNEL_STATUS_MESSAGES[status];\n}\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 interface TargetResolveOptions {\n readonly useTimeoutForTunnel?: boolean;\n}\n\nexport function resolveTarget(opts: SharedTargetOptions, options: TargetResolveOptions = {}): Target {\n const port = parsePositiveInt(opts.port, \"--port\");\n const targetIndex = parseTargetIndex(opts.target);\n const workerIndex = parseSelectionIndex(opts.worker, \"--worker\");\n if (port !== undefined) {\n return {\n kind: \"port\",\n port,\n host: opts.host ?? \"127.0.0.1\",\n ...selectionOptions(targetIndex, workerIndex),\n };\n }\n\n const region = optionalText(opts.region);\n const org = optionalText(opts.org);\n const space = optionalText(opts.space);\n const app = optionalText(opts.app);\n const missingFlags = [\n ...(region === undefined ? [\"--region\"] : []),\n ...(org === undefined ? [\"--org\"] : []),\n ...(space === undefined ? [\"--space\"] : []),\n ...(app === undefined ? [\"--app\"] : []),\n ];\n if (region === undefined || org === undefined || space === undefined || app === undefined) {\n throw new CfInspectorError(\n \"MISSING_TARGET\",\n `Cloud Foundry targeting requires explicit selectors. Missing: ${missingFlags.join(\", \")}. ` +\n \"cf-inspector does not consult ambient `cf target` because it can silently change between runs.\",\n );\n }\n\n return buildCfTarget(\n region,\n optionalText(opts.apiEndpoint),\n org,\n space,\n app,\n parseTunnelTimeout(opts, options),\n targetIndex,\n workerIndex,\n );\n}\n\nexport async function resolveTargetWithCurrentCfTarget(\n opts: SharedTargetOptions,\n options: TargetResolveOptions = {},\n): Promise<Target> {\n return await Promise.resolve(resolveTarget(opts, options));\n}\n\nfunction parseTunnelTimeout(opts: SharedTargetOptions, options: TargetResolveOptions): number {\n if (options.useTimeoutForTunnel === false) {\n return DEFAULT_CF_TIMEOUT_SEC;\n }\n return parsePositiveInt(opts.timeout, \"--timeout\") ?? DEFAULT_CF_TIMEOUT_SEC;\n}\n\nfunction parseTargetIndex(raw: string | undefined): number | undefined {\n return parseSelectionIndex(raw, \"--target\");\n}\n\nfunction parseSelectionIndex(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(\n \"INVALID_ARGUMENT\",\n `Invalid ${label}: \"${raw}\" — expected a non-negative integer`,\n );\n }\n return value;\n}\n\nfunction targetIndexOption(targetIndex: number | undefined): { readonly targetIndex?: number } {\n return targetIndex === undefined ? {} : { targetIndex };\n}\n\nfunction selectionOptions(\n targetIndex: number | undefined,\n workerIndex: number | undefined,\n): { readonly targetIndex?: number; readonly workerIndex?: number } {\n return {\n ...targetIndexOption(targetIndex),\n ...(workerIndex === undefined ? {} : { workerIndex }),\n };\n}\n\nfunction buildCfTarget(\n region: string,\n apiEndpoint: string | undefined,\n org: string,\n space: string,\n app: string,\n tunnelTimeoutSec: number,\n targetIndex: number | undefined,\n workerIndex: number | undefined,\n): Target {\n return {\n kind: \"cf\",\n region,\n ...(apiEndpoint === undefined ? {} : { apiEndpoint }),\n org,\n space,\n app,\n tunnelTimeoutMs: tunnelTimeoutSec * 1000,\n ...selectionOptions(targetIndex, workerIndex),\n };\n}\n\nfunction optionalText(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;\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 reportProgress?: ProgressReporter,\n signal?: AbortSignal,\n): Promise<T> {\n const tunnel = await openTarget(target, reportProgress, signal);\n let session: InspectorSession | undefined;\n try {\n reportProgress?.(\n `Connecting to the Node.js inspector at ${tunnel.host}:${tunnel.port.toString()}...`,\n );\n session = await connectInspector({\n port: tunnel.port,\n host: tunnel.host,\n ...selectionOptions(target.targetIndex, target.workerIndex),\n });\n warnOnImplicitInspectorSelection(\n session,\n target.targetIndex !== undefined,\n target.workerIndex !== undefined,\n );\n reportProgress?.(\"Inspector session is ready.\");\n return await fn(session, tunnel.port);\n } finally {\n if (session) {\n reportProgress?.(\"Closing the inspector session...\");\n await session.dispose();\n reportProgress?.(\"Inspector session closed.\");\n }\n await tunnel.dispose();\n }\n}\n\nexport async function openTarget(\n target: Target,\n reportProgress?: ProgressReporter,\n signal?: AbortSignal,\n): 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 reportProgress?.(formatCfTunnelStatus(\"starting\"));\n const tunnel = await openCfTunnel({\n region: target.region,\n ...(target.apiEndpoint === undefined ? {} : { apiEndpoint: target.apiEndpoint }),\n org: target.org,\n space: target.space,\n app: target.app,\n tunnelReadyTimeoutMs: target.tunnelTimeoutMs,\n ...(signal === undefined ? {} : { signal }),\n ...(reportProgress === undefined\n ? {}\n : {\n onStatus: (status: SessionStatus, message?: string): void => {\n reportProgress(message ?? formatCfTunnelStatus(status));\n },\n }),\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","import { startDebugger } from \"@saptools/cf-debugger\";\nimport type { DebuggerHandle, SessionStatus, StartDebuggerOptions } from \"@saptools/cf-debugger\";\n\nexport interface TunnelTarget {\n readonly region: string;\n readonly apiEndpoint?: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly process?: string;\n readonly instance?: number;\n readonly nodePid?: number;\n readonly allowSshEnableRestart?: boolean;\n readonly tunnelReadyTimeoutMs?: number;\n readonly preferredPort?: number;\n readonly verbose?: boolean;\n readonly signal?: AbortSignal;\n readonly onStatus?: (status: SessionStatus, message?: string) => void;\n}\n\nexport interface OpenedTunnel {\n readonly localPort: number;\n readonly handle?: DebuggerHandle;\n dispose(): Promise<void>;\n}\n\nfunction targetOptions(\n target: TunnelTarget,\n): Pick<StartDebuggerOptions, \"apiEndpoint\" | \"process\" | \"instance\" | \"nodePid\"> {\n return {\n ...(target.apiEndpoint === undefined ? {} : { apiEndpoint: target.apiEndpoint }),\n ...(target.process === undefined ? {} : { process: target.process }),\n ...(target.instance === undefined ? {} : { instance: target.instance }),\n ...(target.nodePid === undefined ? {} : { nodePid: target.nodePid }),\n };\n}\n\nfunction lifecycleOptions(\n target: TunnelTarget,\n): Pick<\n StartDebuggerOptions,\n \"allowSshEnableRestart\" | \"tunnelReadyTimeoutMs\" | \"preferredPort\" | \"verbose\" | \"signal\" | \"onStatus\"\n> {\n return {\n ...(target.allowSshEnableRestart === undefined ? {} : { allowSshEnableRestart: target.allowSshEnableRestart }),\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 ...(target.onStatus === undefined ? {} : { onStatus: target.onStatus }),\n };\n}\n\nfunction toStartDebuggerOptions(target: TunnelTarget): StartDebuggerOptions {\n return {\n region: target.region,\n org: target.org,\n space: target.space,\n app: target.app,\n ...targetOptions(target),\n ...lifecycleOptions(target),\n };\n}\n\nexport async function openOwnedCfTunnel(target: TunnelTarget): Promise<OpenedTunnel> {\n const opts = toStartDebuggerOptions(target);\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\nfunction isExistingSessionError(error: unknown): error is Error & { readonly code: \"SESSION_ALREADY_RUNNING\" } {\n return error instanceof Error\n && \"code\" in error\n && error.code === \"SESSION_ALREADY_RUNNING\";\n}\n\nfunction existingTunnelPort(error: unknown): number | undefined {\n if (!isExistingSessionError(error)) {\n return undefined;\n }\n const rawPort = /\\bon port (\\d+)\\b/iu.exec(error.message)?.[1];\n if (rawPort === undefined) {\n return undefined;\n }\n const port = Number.parseInt(rawPort, 10);\n return Number.isInteger(port) && port >= 1 && port <= 65_535 ? port : undefined;\n}\n\nexport async function openCfTunnel(target: TunnelTarget): Promise<OpenedTunnel> {\n try {\n return await openOwnedCfTunnel(target);\n } catch (error: unknown) {\n const localPort = existingTunnelPort(error);\n if (localPort === undefined) {\n throw error;\n }\n target.onStatus?.(\"ready\", `Reusing existing tunnel on port ${localPort.toString()}`);\n return { localPort, dispose: (): Promise<void> => Promise.resolve() };\n }\n}\n","import { performance } from \"node:perf_hooks\";\n\nimport { CdpClient, createNodeWorkerClient } from \"../cdp/client.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { InspectorConnectOptions, PauseEvent, ScriptInfo } from \"../types.js\";\n\nimport { asString, toPauseEvent, toScriptInfo } from \"./conversions.js\";\nimport { discoverInspectorTargets } from \"./discovery.js\";\nimport type { InspectorTarget } from \"./discovery.js\";\nimport type {\n DebuggerState,\n InspectorSession,\n InspectorWorkerTarget,\n} 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 class NodeWorkerDiscovery {\n private readonly workers = new Map<string, InspectorWorkerTarget>();\n private readonly detachListeners: readonly (() => void)[];\n public supported = false;\n private disposed = false;\n\n public constructor(private readonly client: CdpClient) {\n this.detachListeners = [\n client.on(\"NodeWorker.attachedToWorker\", (raw) => {\n const worker = toInspectorWorkerTarget(raw);\n if (worker !== undefined) {\n this.workers.set(worker.sessionId, worker);\n }\n }),\n client.on(\"NodeWorker.detachedFromWorker\", (raw) => {\n const sessionId = readField(raw, \"sessionId\");\n if (typeof sessionId === \"string\") {\n this.workers.delete(sessionId);\n }\n }),\n ];\n }\n\n public async enable(): Promise<void> {\n try {\n await this.client.send(\"NodeWorker.enable\", { waitForDebuggerOnStart: false });\n this.supported = true;\n } catch (error: unknown) {\n if (!isUnsupportedNodeWorkerDomain(error)) {\n throw error;\n }\n }\n }\n\n public list(): readonly InspectorWorkerTarget[] {\n return [...this.workers.values()].sort(compareWorkers);\n }\n\n public async dispose(): Promise<void> {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n if (this.supported && !this.client.isClosed) {\n try {\n await this.client.send(\"NodeWorker.disable\");\n } catch {\n // best-effort: the parent inspector may already be closing\n }\n }\n for (const detach of this.detachListeners) {\n detach();\n }\n }\n}\n\nfunction isUnsupportedNodeWorkerDomain(error: unknown): boolean {\n if (!(error instanceof CfInspectorError) || error.code !== \"CDP_REQUEST_FAILED\") {\n return false;\n }\n return error.detail?.includes('\"code\":-32601') === true;\n}\n\nfunction compareWorkers(left: InspectorWorkerTarget, right: InspectorWorkerTarget): number {\n const leftId = Number.parseInt(left.workerId, 10);\n const rightId = Number.parseInt(right.workerId, 10);\n if (!Number.isNaN(leftId) && !Number.isNaN(rightId) && leftId !== rightId) {\n return leftId - rightId;\n }\n return left.workerId.localeCompare(right.workerId);\n}\n\nfunction toInspectorWorkerTarget(raw: unknown): InspectorWorkerTarget | undefined {\n const sessionId = readField(raw, \"sessionId\");\n const info = readField(raw, \"workerInfo\");\n if (typeof sessionId !== \"string\" || !isUnknownRecord(info)) {\n return undefined;\n }\n const workerId = asString(info[\"workerId\"]);\n if (workerId.length === 0) {\n return undefined;\n }\n return {\n sessionId,\n workerId,\n type: asString(info[\"type\"]),\n title: asString(info[\"title\"]),\n url: asString(info[\"url\"]),\n };\n}\n\nfunction readField(value: unknown, name: string): unknown {\n return isUnknownRecord(value) ? value[name] : void 0;\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport async function startNodeWorkerDiscovery(client: CdpClient): Promise<NodeWorkerDiscovery> {\n const discovery = new NodeWorkerDiscovery(client);\n await discovery.enable();\n return discovery;\n}\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 targetIndex = options.targetIndex ?? 0;\n const target = targets[targetIndex];\n if (!target) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No inspector target at index ${targetIndex.toString()} on ${host}:${options.port.toString()} (available: ${targets.length.toString()})`,\n );\n }\n const client = await CdpClient.connect({\n url: target.webSocketDebuggerUrl,\n connectTimeoutMs,\n });\n let workerDiscovery: NodeWorkerDiscovery | undefined;\n try {\n workerDiscovery = await startNodeWorkerDiscovery(client);\n if (options.workerIndex === undefined) {\n const session = await initSession(client, target);\n return withWorkerMetadata(session, workerDiscovery, targetIndex, targets.length);\n }\n return await initWorkerSession(\n client,\n workerDiscovery,\n options.workerIndex,\n targetIndex,\n targets.length,\n );\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 await workerDiscovery?.dispose();\n client.dispose();\n throw err;\n }\n}\n\nasync function initWorkerSession(\n parent: CdpClient,\n discovery: NodeWorkerDiscovery,\n workerIndex: number,\n targetIndex: number,\n targetCount: number,\n): Promise<InspectorSession> {\n const workers = discovery.list();\n if (!discovery.supported) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n \"This runtime does not expose the NodeWorker CDP domain; --worker cannot be used. Run list-targets for available raw targets.\",\n );\n }\n const worker = workers[workerIndex];\n if (worker === undefined) {\n throw new CfInspectorError(\n \"INSPECTOR_DISCOVERY_FAILED\",\n `No NodeWorker sub-session at index ${workerIndex.toString()} (available: ${workers.length.toString()}). Ensure the worker is alive, then rerun list-targets.`,\n );\n }\n const client = await createNodeWorkerClient(parent, worker.sessionId);\n const session = await initSession(client, workerToInspectorTarget(worker));\n return withWorkerMetadata(session, discovery, targetIndex, targetCount, workerIndex, parent);\n}\n\nfunction withWorkerMetadata(\n session: InspectorSession,\n discovery: NodeWorkerDiscovery,\n targetIndex: number,\n targetCount: number,\n workerIndex?: number,\n parent?: CdpClient,\n): InspectorSession {\n return {\n ...session,\n targetIndex,\n targetCount,\n ...(workerIndex === undefined ? {} : { workerIndex }),\n workerTargets: discovery.list(),\n workerDiscoverySupported: discovery.supported,\n dispose: async (): Promise<void> => {\n await session.dispose();\n await discovery.dispose();\n parent?.dispose();\n },\n };\n}\n\nfunction workerToInspectorTarget(worker: InspectorWorkerTarget): InspectorTarget {\n return {\n description: \"Node worker sub-session\",\n id: worker.workerId,\n title: worker.title,\n type: worker.type,\n url: worker.url,\n webSocketDebuggerUrl: `node-worker://${worker.sessionId}`,\n };\n}\n\nexport interface NodeWorkerTargetsResult {\n readonly supported: boolean;\n readonly workers: readonly InspectorWorkerTarget[];\n}\n\nexport async function discoverNodeWorkerTargets(\n target: InspectorTarget,\n connectTimeoutMs = DEFAULT_CONNECT_TIMEOUT_MS,\n): Promise<NodeWorkerTargetsResult> {\n const client = await CdpClient.connect({ url: target.webSocketDebuggerUrl, connectTimeoutMs });\n let discovery: NodeWorkerDiscovery | undefined;\n try {\n discovery = await startNodeWorkerDiscovery(client);\n return { supported: discovery.supported, workers: discovery.list() };\n } finally {\n await discovery?.dispose();\n client.dispose();\n }\n}\n\nasync function initSession(\n client: CdpClient,\n target: InspectorSession[\"target\"],\n): Promise<InspectorSession> {\n const scripts = new Map<string, ScriptInfo>();\n registerScriptTracking(client, scripts);\n const pauseBuffer: PauseEvent[] = [];\n const pauseWaitGate = { active: false };\n const debuggerState: DebuggerState = {};\n registerPauseTracking(client, scripts, pauseBuffer, pauseWaitGate, debuggerState);\n await client.send(\"Runtime.enable\");\n await client.send(\"Debugger.enable\");\n return createSession(client, target, scripts, pauseBuffer, pauseWaitGate, debuggerState);\n}\n\nfunction registerScriptTracking(client: CdpClient, scripts: Map<string, ScriptInfo>): void {\n client.on(\"Debugger.scriptParsed\", (raw) => {\n const script = toScriptInfo(raw);\n if (script !== undefined) {\n scripts.set(script.scriptId, script);\n }\n });\n}\n\nfunction registerPauseTracking(\n client: CdpClient,\n scripts: ReadonlyMap<string, ScriptInfo>,\n pauseBuffer: PauseEvent[],\n pauseWaitGate: { active: boolean },\n debuggerState: DebuggerState,\n): void {\n client.on(\"Debugger.paused\", (raw) => {\n if (pauseWaitGate.active) {\n return;\n }\n const event = toPauseEvent(raw, 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}\n\nfunction createSession(\n client: CdpClient,\n target: InspectorSession[\"target\"],\n scripts: ReadonlyMap<string, ScriptInfo>,\n pauseBuffer: PauseEvent[],\n pauseWaitGate: { active: boolean },\n debuggerState: DebuggerState,\n): InspectorSession {\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\nexport const internalsForTesting = {\n startNodeWorkerDiscovery,\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\nexport interface CdpWaitOptions<T> {\n readonly timeoutMs: number;\n readonly predicate?: (params: T) => boolean;\n readonly signal?: AbortSignal;\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\ninterface NodeWorkerEventParams {\n readonly sessionId?: unknown;\n readonly message?: unknown;\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: CdpWaitOptions<T> = {\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 if (options.signal?.aborted === true) {\n throw this.createWaitAbortError(method);\n }\n return await this.createEventWait(method, options);\n }\n\n private createEventWait<T>(method: string, options: CdpWaitOptions<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n let offEvent = (): void => undefined;\n let offClose = (): void => undefined;\n const cleanup = (): void => {\n clearTimeout(timer);\n offEvent();\n offClose();\n options.signal?.removeEventListener(\"abort\", onAbort);\n };\n const resolveOnce = (value: T): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n resolve(value);\n };\n const rejectOnce = (error: Error): void => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n reject(error);\n };\n const onAbort = (): void => {\n rejectOnce(this.createWaitAbortError(method));\n };\n const timer = setTimeout(() => {\n rejectOnce(this.createWaitTimeoutError(method, options.timeoutMs));\n }, options.timeoutMs);\n offEvent = this.on(method, (raw) => {\n const params = raw as T;\n if (!this.eventMatches(params, options.predicate)) {\n return;\n }\n resolveOnce(params);\n });\n offClose = this.onClose((error) => {\n rejectOnce(error);\n });\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted === true) {\n onAbort();\n }\n });\n }\n\n private eventMatches<T>(params: T, predicate: ((params: T) => boolean) | undefined): boolean {\n if (predicate === undefined) {\n return true;\n }\n try {\n return predicate(params);\n } catch {\n return false;\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 createWaitAbortError(method: string): CfInspectorError {\n return new CfInspectorError(\"ABORTED\", `Aborted while waiting for ${method}`);\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\nclass NodeWorkerTransport implements CdpTransport {\n private readonly emitter = new EventEmitter();\n private readonly detachParentListeners: readonly (() => void)[];\n public readyState = 1;\n\n public constructor(\n private readonly parent: CdpClient,\n private readonly sessionId: string,\n ) {\n this.detachParentListeners = [\n parent.on(\"NodeWorker.receivedMessageFromWorker\", (raw) => {\n this.forwardWorkerMessage(raw);\n }),\n parent.on(\"NodeWorker.detachedFromWorker\", (raw) => {\n this.handleWorkerDetach(raw);\n }),\n parent.onClose((error) => {\n this.closeWithError(error);\n }),\n ];\n }\n\n public send(payload: string): void {\n if (this.readyState !== 1) {\n throw new CfInspectorError(\"INSPECTOR_CONNECTION_FAILED\", \"Worker inspector session is closed\");\n }\n void this.parent.send(\"NodeWorker.sendMessageToWorker\", {\n sessionId: this.sessionId,\n message: payload,\n }).catch((error: unknown) => {\n const normalized = error instanceof Error ? error : new Error(String(error));\n this.closeWithError(normalized);\n });\n }\n\n public close(): void {\n this.finishClose();\n }\n\n public on<E extends keyof CdpTransportEventMap>(\n event: E,\n listener: CdpTransportEventMap[E],\n ): void {\n this.emitter.on(event, listener);\n }\n\n public off<E extends keyof CdpTransportEventMap>(\n event: E,\n listener: CdpTransportEventMap[E],\n ): void {\n this.emitter.off(event, listener);\n }\n\n private forwardWorkerMessage(raw: unknown): void {\n const params = asNodeWorkerEventParams(raw);\n if (params.sessionId !== this.sessionId || typeof params.message !== \"string\") {\n return;\n }\n this.emitter.emit(\"message\", params.message);\n }\n\n private handleWorkerDetach(raw: unknown): void {\n const params = asNodeWorkerEventParams(raw);\n if (params.sessionId === this.sessionId) {\n this.finishClose();\n }\n }\n\n private closeWithError(error: Error): void {\n if (this.readyState !== 1) {\n return;\n }\n this.emitter.emit(\"error\", error);\n this.finishClose();\n }\n\n private finishClose(): void {\n if (this.readyState !== 1) {\n return;\n }\n this.readyState = 3;\n for (const detach of this.detachParentListeners) {\n detach();\n }\n this.emitter.emit(\"close\");\n this.emitter.removeAllListeners();\n }\n}\n\nfunction asNodeWorkerEventParams(raw: unknown): NodeWorkerEventParams {\n if (!isUnknownRecord(raw)) {\n return {};\n }\n const sessionId = raw[\"sessionId\"];\n const message = raw[\"message\"];\n return {\n ...(typeof sessionId === \"string\" ? { sessionId } : {}),\n ...(typeof message === \"string\" ? { message } : {}),\n };\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport async function createNodeWorkerClient(\n parent: CdpClient,\n sessionId: string,\n requestTimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS,\n): Promise<CdpClient> {\n const transport = new NodeWorkerTransport(parent, sessionId);\n return await CdpClient.connect({\n url: `node-worker://${sessionId}`,\n transportFactory: (): Promise<CdpTransport> => Promise.resolve(transport),\n requestTimeoutMs,\n });\n}\n","// cspell:words trustedtype wasmvalue webassemblymemory\nimport type {\n BreakLocation,\n CallFrameInfo,\n PauseEvent,\n RemoteObjectInfo,\n ResolvedLocation,\n ScriptInfo,\n ScriptLocation,\n ScopeInfo,\n StackTraceFrameInfo,\n StackTraceIdInfo,\n StackTraceInfo,\n} from \"../types.js\";\n\nconst INTERNAL_SLOT_SUBTYPES = new Set([\n \"regexp\",\n \"date\",\n \"map\",\n \"set\",\n \"weakmap\",\n \"weakset\",\n \"iterator\",\n \"generator\",\n \"promise\",\n \"typedarray\",\n \"arraybuffer\",\n \"dataview\",\n \"webassemblymemory\",\n \"wasmvalue\",\n \"trustedtype\",\n]);\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 isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction optionalCoordinate(value: unknown): number | undefined {\n const number = optionalNumber(value);\n return number !== undefined && Number.isSafeInteger(number) && number >= 0\n ? number\n : undefined;\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function toScriptLocation(value: unknown): ScriptLocation | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const scriptId = nonEmptyString(value[\"scriptId\"]);\n const lineNumber = optionalCoordinate(value[\"lineNumber\"]);\n if (scriptId === undefined || lineNumber === undefined) {\n return undefined;\n }\n const rawColumnNumber = value[\"columnNumber\"];\n const columnNumber = optionalCoordinate(rawColumnNumber);\n if (rawColumnNumber !== undefined && columnNumber === undefined) {\n return undefined;\n }\n return columnNumber === undefined\n ? { scriptId, lineNumber }\n : { scriptId, lineNumber, columnNumber };\n}\n\nexport function toResolvedLocations(value: unknown): readonly ResolvedLocation[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): ResolvedLocation[] => {\n const location = toScriptLocation(entry);\n if (location === undefined || !isRecord(entry)) {\n return [];\n }\n const url = typeof entry[\"url\"] === \"string\" ? entry[\"url\"] : undefined;\n return [url === undefined ? location : { ...location, url }];\n });\n}\n\nexport function toBreakLocations(value: unknown): readonly BreakLocation[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.flatMap((entry): BreakLocation[] => {\n const location = toScriptLocation(entry);\n if (location === undefined || !isRecord(entry)) {\n return [];\n }\n const type = nonEmptyString(entry[\"type\"]);\n return [type === undefined ? location : { ...location, type }];\n });\n}\n\nfunction remoteCompleteness(subtype: string | undefined): RemoteObjectInfo[\"completeness\"] {\n if (subtype === \"proxy\") {\n return \"unavailable\";\n }\n return subtype !== undefined && INTERNAL_SLOT_SUBTYPES.has(subtype)\n ? \"truncated\"\n : undefined;\n}\n\nfunction optionalOwnField(\n key: string,\n value: Readonly<Record<string, unknown>>,\n): Readonly<Record<string, unknown>> {\n return Object.hasOwn(value, key) ? { [key]: value[key] } : {};\n}\n\nexport function toRemoteObject(value: unknown): RemoteObjectInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = nonEmptyString(value[\"type\"]);\n if (type === undefined) {\n return undefined;\n }\n const subtype = nonEmptyString(value[\"subtype\"]);\n const completeness = remoteCompleteness(subtype);\n return {\n type,\n ...(subtype === undefined ? {} : { subtype }),\n ...optionalTextField(\"className\", value[\"className\"]),\n ...(completeness === undefined ? {} : { completeness }),\n ...optionalOwnField(\"value\", value),\n ...optionalTextField(\"unserializableValue\", value[\"unserializableValue\"]),\n ...optionalTextField(\"description\", value[\"description\"]),\n ...optionalOwnField(\"deepSerializedValue\", value),\n ...optionalTextField(\"objectId\", value[\"objectId\"]),\n ...optionalOwnField(\"preview\", value),\n ...optionalOwnField(\"customPreview\", value),\n };\n}\n\nfunction optionalTextField(\n key: string,\n value: unknown,\n): Readonly<Record<string, string>> {\n return typeof value === \"string\" ? { [key]: value } : {};\n}\n\nfunction toScope(value: unknown): ScopeInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = nonEmptyString(value[\"type\"]);\n if (type === undefined) {\n return undefined;\n }\n const object = toRemoteObject(value[\"object\"]);\n const name = nonEmptyString(value[\"name\"]);\n const startLocation = toScriptLocation(value[\"startLocation\"]);\n const endLocation = toScriptLocation(value[\"endLocation\"]);\n return {\n type,\n ...(name === undefined ? {} : { name }),\n ...(object === undefined ? {} : { object }),\n ...(object?.objectId === undefined ? {} : { objectId: object.objectId }),\n ...(startLocation === undefined ? {} : { startLocation }),\n ...(endLocation === undefined ? {} : { endLocation }),\n };\n}\n\nfunction toScopeChain(value: unknown): readonly ScopeInfo[] {\n return Array.isArray(value)\n ? value.flatMap((entry): ScopeInfo[] => {\n const scope = toScope(entry);\n return scope === undefined ? [] : [scope];\n })\n : [];\n}\n\nfunction resolveCallFrameUrl(\n frame: Readonly<Record<string, unknown>>,\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 = toScriptLocation(frame[\"location\"])?.scriptId;\n return scriptId === undefined ? undefined : nonEmptyString(scripts?.get(scriptId)?.url);\n}\n\nfunction toCallFrameMetadata(\n candidate: Readonly<Record<string, unknown>>,\n location: ScriptLocation | undefined,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): Partial<CallFrameInfo> {\n const functionLocation = toScriptLocation(candidate[\"functionLocation\"]);\n const thisObject = toRemoteObject(candidate[\"this\"]);\n const returnValue = toRemoteObject(candidate[\"returnValue\"]);\n const url = resolveCallFrameUrl(candidate, scripts);\n return {\n ...(location === undefined ? {} : { scriptId: location.scriptId }),\n ...(functionLocation === undefined ? {} : { functionLocation }),\n ...(url === undefined ? {} : { url }),\n ...(thisObject === undefined ? {} : { thisObject }),\n ...(returnValue === undefined ? {} : { returnValue }),\n };\n}\n\nfunction toCallFrame(\n value: unknown,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): CallFrameInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const callFrameId = nonEmptyString(value[\"callFrameId\"]);\n if (callFrameId === undefined) {\n return undefined;\n }\n const location = toScriptLocation(value[\"location\"]);\n return {\n callFrameId,\n functionName: asString(value[\"functionName\"]),\n ...toCallFrameMetadata(value, location, scripts),\n lineNumber: location?.lineNumber ?? 0,\n columnNumber: location?.columnNumber ?? 0,\n scopeChain: toScopeChain(value[\"scopeChain\"]),\n };\n}\n\nfunction toCallFrames(\n value: unknown,\n scripts: ReadonlyMap<string, ScriptInfo> | undefined,\n): readonly CallFrameInfo[] {\n return Array.isArray(value)\n ? value.flatMap((entry): CallFrameInfo[] => {\n const frame = toCallFrame(entry, scripts);\n return frame === undefined ? [] : [frame];\n })\n : [];\n}\n\nfunction toStackTraceId(value: unknown): StackTraceIdInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const id = nonEmptyString(value[\"id\"]);\n if (id === undefined) {\n return undefined;\n }\n const debuggerId = nonEmptyString(value[\"debuggerId\"]);\n return debuggerId === undefined ? { id } : { id, debuggerId };\n}\n\nfunction toStackTraceFrame(value: unknown): StackTraceFrameInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const scriptId = nonEmptyString(value[\"scriptId\"]);\n if (scriptId === undefined) {\n return undefined;\n }\n return {\n functionName: asString(value[\"functionName\"]),\n scriptId,\n url: asString(value[\"url\"]),\n lineNumber: asNumber(value[\"lineNumber\"]),\n columnNumber: asNumber(value[\"columnNumber\"]),\n };\n}\n\nfunction toStackTrace(value: unknown): StackTraceInfo | undefined {\n if (!isRecord(value) || !Array.isArray(value[\"callFrames\"])) {\n return undefined;\n }\n const callFrames = value[\"callFrames\"].flatMap((entry): StackTraceFrameInfo[] => {\n const frame = toStackTraceFrame(entry);\n return frame === undefined ? [] : [frame];\n });\n const description = nonEmptyString(value[\"description\"]);\n const parent = toStackTrace(value[\"parent\"]);\n const parentId = toStackTraceId(value[\"parentId\"]);\n return {\n callFrames,\n ...(description === undefined ? {} : { description }),\n ...(parent === undefined ? {} : { parent }),\n ...(parentId === undefined ? {} : { parentId }),\n };\n}\n\nexport function toPauseEvent(\n value: unknown,\n receivedAtMs: number,\n scripts?: ReadonlyMap<string, ScriptInfo>,\n): PauseEvent {\n const params = isRecord(value) ? value : {};\n const asyncStackTrace = toStackTrace(params[\"asyncStackTrace\"]);\n const asyncStackTraceId = toStackTraceId(params[\"asyncStackTraceId\"]);\n const asyncCallStackTraceId = toStackTraceId(params[\"asyncCallStackTraceId\"]);\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 ...(params[\"data\"] === undefined ? {} : { data: params[\"data\"] }),\n ...(asyncStackTrace === undefined ? {} : { asyncStackTrace }),\n ...(asyncStackTraceId === undefined ? {} : { asyncStackTraceId }),\n ...(asyncCallStackTraceId === undefined ? {} : { asyncCallStackTraceId }),\n };\n}\n\nexport function toScriptInfo(value: unknown): ScriptInfo | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const scriptId = nonEmptyString(value[\"scriptId\"]);\n if (scriptId === undefined) {\n return undefined;\n }\n const stackTrace = toStackTrace(value[\"stackTrace\"]);\n return {\n scriptId,\n url: asString(value[\"url\"]),\n ...optionalNumericField(\"startLine\", value[\"startLine\"]),\n ...optionalNumericField(\"startColumn\", value[\"startColumn\"]),\n ...optionalNumericField(\"endLine\", value[\"endLine\"]),\n ...optionalNumericField(\"endColumn\", value[\"endColumn\"]),\n ...optionalNumericField(\"executionContextId\", value[\"executionContextId\"]),\n ...optionalTextField(\"hash\", value[\"hash\"]),\n ...optionalTextField(\"buildId\", value[\"buildId\"]),\n ...(value[\"executionContextAuxData\"] === undefined\n ? {}\n : { executionContextAuxData: value[\"executionContextAuxData\"] }),\n ...optionalTextField(\"sourceMapURL\", value[\"sourceMapURL\"]),\n ...optionalBooleanField(\"hasSourceURL\", value[\"hasSourceURL\"]),\n ...optionalBooleanField(\"isModule\", value[\"isModule\"]),\n ...optionalNumericField(\"length\", value[\"length\"]),\n ...(stackTrace === undefined ? {} : { stackTrace }),\n };\n}\n\nfunction optionalNumericField(\n key: string,\n value: unknown,\n): Readonly<Record<string, number>> {\n const number = optionalNumber(value);\n return number === undefined ? {} : { [key]: number };\n}\n\nfunction optionalBooleanField(\n key: string,\n value: unknown,\n): Readonly<Record<string, boolean>> {\n const boolean = optionalBoolean(value);\n return boolean === undefined ? {} : { [key]: boolean };\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","export const DEFAULT_BREAKPOINT_TIMEOUT_SEC = 30;\nexport const DEFAULT_CF_TIMEOUT_SEC = 180;\nexport const DEFAULT_EXCEPTION_TIMEOUT_SEC = 30;\n\nexport interface PortTarget {\n readonly kind: \"port\";\n readonly port: number;\n readonly host: string;\n readonly targetIndex?: number;\n readonly workerIndex?: number;\n}\n\nexport interface CfTarget {\n readonly kind: \"cf\";\n readonly region: string;\n readonly apiEndpoint?: string;\n readonly org: string;\n readonly space: string;\n readonly app: string;\n readonly tunnelTimeoutMs: number;\n readonly targetIndex?: number;\n readonly workerIndex?: 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 apiEndpoint?: string;\n readonly org?: string;\n readonly space?: string;\n readonly app?: string;\n readonly timeout?: string;\n readonly target?: string;\n readonly worker?: string;\n}\n\nexport interface SnapshotCommandOptions extends SharedTargetOptions {\n readonly bp: readonly string[];\n readonly capture?: string;\n readonly setupEval?: readonly 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 readonly quiet?: boolean;\n readonly allowMutation?: 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 filter?: string;\n readonly json: boolean;\n}\n\nexport interface ListTargetsCommandOptions 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 maxValueLength?: 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 setupEval?: readonly 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 readonly allowMutation?: 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 readonly allowMutation?: boolean;\n}\n","import process from \"node:process\";\n\nimport type { InspectorSession } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { BreakpointHandle, PauseEvent, SnapshotCaptureResult, SnapshotResult } from \"../types.js\";\n\nimport { looksLikeMutation } from \"./captureParser.js\";\n\nexport function warnOnCaptureMutationRisk(\n expressions: readonly string[],\n allowMutation: boolean,\n): void {\n const riskyCount = expressions.filter(looksLikeMutation).length;\n if (riskyCount === 0) {\n return;\n }\n const suffix = allowMutation\n ? \"will run without the V8 side-effect guard because --allow-mutation was passed.\"\n : \"will be checked by the V8 side-effect guard and blocked unless V8 proves them safe; pass --allow-mutation to run them unrestricted.\";\n process.stderr.write(\n `[cf-inspector] warning: ${riskyCount.toString()} capture ` +\n `${riskyCount === 1 ? \"expression looks\" : \"expressions look\"} mutation-capable and ${suffix}\\n`,\n );\n}\n\nexport function enforceNativeConditionMutationPolicy(\n expression: string,\n allowMutation: boolean,\n context: string,\n): void {\n if (!looksLikeMutation(expression)) {\n return;\n }\n if (!allowMutation) {\n throw new CfInspectorError(\n \"MUTATION_NOT_ALLOWED\",\n `${context} looks mutation-capable. Native breakpoint conditions cannot be protected by V8's side-effect guard; pass --allow-mutation to arm it explicitly.`,\n );\n }\n process.stderr.write(\n `[cf-inspector] warning: ${context} looks mutation-capable and will run as a native breakpoint condition; native conditions cannot be side-effect-gated.\\n`,\n );\n}\n\nexport function warnOnMutationRisk(expression: string, context: string): void {\n if (!looksLikeMutation(expression)) {\n return;\n }\n process.stderr.write(\n `[cf-inspector] warning: ${context} looks mutation-capable and will execute against the live inspectee without a side-effect guard.\\n`,\n );\n}\n\nexport function warnOnUnboundBreakpoints(handles: readonly BreakpointHandle[]): void {\n for (const handle of handles) {\n if (handle.resolvedLocations.length === 0) {\n const tsHint = handle.file.endsWith(\".ts\")\n ? \" Hint: Source TS breakpoints may not bind. Try inspecting loaded scripts with list-scripts and target the compiled .js file instead.\"\n : \"\";\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.${tsHint}\\n`,\n );\n }\n }\n}\n\nexport function warnOnImplicitInspectorSelection(\n session: Pick<\n InspectorSession,\n \"targetCount\" | \"targetIndex\" | \"workerTargets\"\n >,\n targetWasExplicit: boolean,\n workerWasExplicit: boolean,\n): void {\n const targetCount = session.targetCount ?? 1;\n const targetIndex = session.targetIndex ?? 0;\n if (!targetWasExplicit && targetCount > 1) {\n process.stderr.write(\n `[cf-inspector] notice: attached to inspector target ${targetIndex.toString()} of ` +\n `${targetCount.toString()}; pass --target <index> to pick another.\\n`,\n );\n }\n const workerCount = session.workerTargets?.length ?? 0;\n if (!workerWasExplicit && workerCount > 0) {\n process.stderr.write(\n `[cf-inspector] notice: attached to the main isolate; ${workerCount.toString()} Node ` +\n `${workerCount === 1 ? \"worker is\" : \"workers are\"} available. ` +\n \"Run list-targets and pass --worker <index> to inspect one.\\n\",\n );\n }\n}\n\nexport function warnOnBoundBreakpointWithoutHit(handles: readonly BreakpointHandle[]): void {\n const boundCount = handles.reduce((count, handle) => {\n return count + handle.resolvedLocations.length;\n }, 0);\n if (boundCount === 0) {\n return;\n }\n process.stderr.write(\n `[cf-inspector] warning: ${boundCount.toString()} breakpoint ` +\n `${boundCount === 1 ? \"location bound\" : \"locations bound\"}, but no hit was observed. ` +\n \"The code may be running in another worker isolate. Run list-targets and retry with \" +\n \"--worker <index> for a NodeWorker sub-session or --target <index> for a raw target.\\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","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 QuoteScanState {\n quote: QuoteChar | undefined;\n escaped: boolean;\n}\n\ninterface CaptureSplitState extends QuoteScanState {\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: QuoteScanState, 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 stripQuotedText(expression: string): string {\n const state: QuoteScanState = { quote: undefined, escaped: false };\n let stripped = \"\";\n for (const char of expression) {\n if (consumeQuotedChar(state, char)) {\n stripped += \" \";\n continue;\n }\n if (isQuoteChar(char)) {\n state.quote = char;\n stripped += \" \";\n continue;\n }\n stripped += char;\n }\n return stripped;\n}\n\nexport function looksLikeMutation(expression: string): boolean {\n const stripped = stripQuotedText(expression);\n const hasUpdate = /(?:\\+\\+|--)/u.test(stripped);\n const hasAssignment = /(?:\\*\\*=|&&=|\\|\\|=|\\?\\?=|[+\\-*/%&|^]=|(?:^|[^=!<>])=(?!=|>))/u.test(stripped);\n const hasDelete = /\\bdelete\\b/u.test(stripped);\n const hasMutatingMethod = /\\.\\s*(?:push|pop|shift|unshift|splice|sort|reverse|fill|copyWithin|set|add|delete|clear)\\s*\\(/u.test(stripped);\n const hasObjectMutation = /\\bObject\\s*\\.\\s*(?:assign|defineProperty|defineProperties)\\s*\\(/u.test(stripped);\n return hasUpdate || hasAssignment || hasDelete || hasMutatingMethod || hasObjectMutation;\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 { evaluateGlobal } from \"../../inspector/runtime.js\";\nimport type { EvalCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport { warnOnMutationRisk } from \"../warnings.js\";\n\nexport async function handleEval(opts: EvalCommandOptions): Promise<void> {\n warnOnMutationRisk(opts.expr, \"eval --expr\");\n const target = await resolveTargetWithCurrentCfTarget(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 interface EvaluateOnFrameOptions {\n readonly throwOnSideEffect?: boolean;\n readonly objectGroup?: string;\n}\n\nexport interface StepIntoOptions {\n readonly breakOnAsyncCall?: boolean;\n}\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 setAsyncCallStackDepth(\n session: InspectorSession,\n maxDepth: number,\n): Promise<void> {\n await session.client.send(\"Debugger.setAsyncCallStackDepth\", { maxDepth });\n}\n\nexport async function evaluateOnFrame(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n options: EvaluateOnFrameOptions = {},\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 ...(options.throwOnSideEffect === undefined\n ? {}\n : { throwOnSideEffect: options.throwOnSideEffect }),\n ...(options.objectGroup === undefined ? {} : { objectGroup: options.objectGroup }),\n });\n}\n\nexport function isSideEffectRefusal(result: CdpEvalResult): boolean {\n const classNames = [\n result.result?.className,\n result.exceptionDetails?.exception?.className,\n ];\n const descriptions = [\n result.result?.description,\n result.exceptionDetails?.exception?.description,\n ];\n const isEvalError = classNames.includes(\"EvalError\");\n return isEvalError && descriptions.some(\n (description) =>\n typeof description === \"string\" &&\n description.toLowerCase().includes(\"possible side-effect in debug-evaluate\"),\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 async function runSetupEvals(\n session: InspectorSession,\n expressions: readonly string[],\n): Promise<void> {\n for (const expression of expressions) {\n const result = await evaluateGlobal(session, expression);\n if (result.exceptionDetails !== undefined) {\n throw new CfInspectorError(\n \"SETUP_EVAL_FAILED\",\n exceptionDetailsMessage(result, \"setup evaluation failed\"),\n );\n }\n }\n}\n\nfunction exceptionDetailsMessage(result: CdpEvalResult, fallback: string): string {\n return typeof result.exceptionDetails?.exception?.description === \"string\"\n ? result.exceptionDetails.exception.description\n : (typeof result.exceptionDetails?.text === \"string\"\n ? result.exceptionDetails.text\n : fallback);\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 async function getScriptSource(\n session: InspectorSession,\n scriptId: string,\n): Promise<string> {\n if (scriptId.trim().length === 0) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", \"scriptId must not be empty\");\n }\n const result = await session.client.send<{ readonly scriptSource?: unknown }>(\n \"Debugger.getScriptSource\",\n { scriptId },\n );\n if (typeof result.scriptSource !== \"string\") {\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n \"Debugger.getScriptSource did not return scriptSource\",\n );\n }\n return result.scriptSource;\n}\n\nexport async function stepInto(\n session: InspectorSession,\n options: StepIntoOptions = {},\n): Promise<void> {\n await session.client.send(\"Debugger.stepInto\", {\n ...(options.breakOnAsyncCall === undefined\n ? {}\n : { breakOnAsyncCall: options.breakOnAsyncCall }),\n });\n}\n\nexport async function stepOver(session: InspectorSession): Promise<void> {\n await session.client.send(\"Debugger.stepOver\");\n}\n\nexport async function stepOut(session: InspectorSession): Promise<void> {\n await session.client.send(\"Debugger.stepOut\");\n}\n\nexport async function releaseObject(\n session: InspectorSession,\n objectId: string,\n): Promise<void> {\n await session.client.send(\"Runtime.releaseObject\", { objectId });\n}\n\nexport async function releaseObjectGroup(\n session: InspectorSession,\n objectGroup: string,\n): Promise<void> {\n await session.client.send(\"Runtime.releaseObjectGroup\", { objectGroup });\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 { DEFAULT_MAX_VALUE_LENGTH } from \"../../snapshot/values.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, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport { roundDurationMs, warnOnCaptureMutationRisk, 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 readonly throwOnSideEffect: boolean;\n}\n\nexport async function handleException(opts: ExceptionCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts, { useTimeoutForTunnel: false });\n const prepared = prepareExceptionCommand(opts, target);\n warnOnCaptureMutationRisk(\n [...prepared.captures, ...prepared.stackCaptures],\n opts.allowMutation === true,\n );\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, target: Target): PreparedExceptionCommand {\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 ?? DEFAULT_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,\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n throwOnSideEffect: opts.allowMutation !== true,\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 maxValueLength: command.maxValueLength,\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n throwOnSideEffect: command.throwOnSideEffect,\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\nexport const internalsForTesting = {\n prepareExceptionCommand,\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 return { kind: \"regex\", pattern, flags };\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 {\n BreakLocation,\n BreakpointHandle,\n ExactBreakpointHandle,\n GetPossibleBreakpointsOptions,\n RemoteRootSetting,\n ScriptLocation,\n SetBreakpointAtLocationInput,\n} from \"../types.js\";\n\nimport {\n asString,\n toBreakLocations,\n toResolvedLocations,\n toScriptLocation,\n} from \"./conversions.js\";\nimport type {\n CdpPossibleBreakpointsResult,\n CdpSetBreakpointResult,\n CdpSetExactBreakpointResult,\n InspectorSession,\n SetBreakpointInput,\n} 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\nfunction validateCoordinate(value: number, label: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new CfInspectorError(\n \"INVALID_ARGUMENT\",\n `${label} must be a non-negative integer, received: ${value.toString()}`,\n );\n }\n}\n\nfunction validateScriptLocation(location: ScriptLocation, label: string): void {\n if (location.scriptId.trim().length === 0) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", `${label}.scriptId must not be empty`);\n }\n validateCoordinate(location.lineNumber, `${label}.lineNumber`);\n if (location.columnNumber !== undefined) {\n validateCoordinate(location.columnNumber, `${label}.columnNumber`);\n }\n}\n\nfunction isSameScriptLocation(\n requested: ScriptLocation,\n actual: ScriptLocation,\n): boolean {\n return requested.scriptId === actual.scriptId\n && requested.lineNumber === actual.lineNumber\n && (requested.columnNumber ?? 0) === (actual.columnNumber ?? 0);\n}\n\nexport async function getPossibleBreakpoints(\n session: InspectorSession,\n options: GetPossibleBreakpointsOptions,\n): Promise<readonly BreakLocation[]> {\n validateScriptLocation(options.start, \"start\");\n if (options.end !== undefined) {\n validateScriptLocation(options.end, \"end\");\n if (options.end.scriptId !== options.start.scriptId) {\n throw new CfInspectorError(\"INVALID_ARGUMENT\", \"start and end must refer to the same scriptId\");\n }\n }\n const result = await session.client.send<CdpPossibleBreakpointsResult>(\n \"Debugger.getPossibleBreakpoints\",\n {\n start: options.start,\n ...(options.end === undefined ? {} : { end: options.end }),\n ...(options.restrictToFunction === undefined\n ? {}\n : { restrictToFunction: options.restrictToFunction }),\n },\n );\n if (!Array.isArray(result.locations)) {\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n \"Debugger.getPossibleBreakpoints did not return a locations array\",\n );\n }\n return toBreakLocations(result.locations);\n}\n\nexport async function setBreakpointAtLocation(\n session: InspectorSession,\n input: SetBreakpointAtLocationInput,\n): Promise<ExactBreakpointHandle> {\n validateScriptLocation(input.location, \"location\");\n const result = await session.client.send<CdpSetExactBreakpointResult>(\"Debugger.setBreakpoint\", {\n location: input.location,\n ...(input.condition === undefined || input.condition.length === 0\n ? {}\n : { condition: input.condition }),\n });\n const breakpointId = asString(result.breakpointId);\n const actualLocation = toScriptLocation(result.actualLocation);\n const wrongLocation = actualLocation !== undefined\n && !isSameScriptLocation(input.location, actualLocation);\n if (breakpointId.length === 0 || actualLocation === undefined || wrongLocation) {\n if (breakpointId.length > 0) {\n try {\n await removeBreakpoint(session, breakpointId);\n } catch {\n // The invalid binding is already unusable; preserve the validation failure.\n }\n }\n if (wrongLocation) {\n throw new CfInspectorError(\n \"INVALID_BREAKPOINT\",\n \"Debugger.setBreakpoint resolved the breakpoint at a different script, line, or column\",\n );\n }\n throw new CfInspectorError(\n \"CDP_REQUEST_FAILED\",\n \"Debugger.setBreakpoint did not return a breakpointId and actualLocation\",\n );\n }\n return {\n breakpointId,\n requestedLocation: input.location,\n actualLocation,\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(\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 throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted === true) {\n throw new CfInspectorError(\"ABORTED\", \"Aborted while waiting for Debugger.paused\");\n }\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 options: WaitForPauseOptions,\n): Promise<void> {\n if (hasResumedSincePause(session, pause)) {\n return;\n }\n const remainingMs = remainingUntil(deadlineMs);\n if (remainingMs <= 0) {\n throwUnrelatedPauseTimeout(pause, options.timeoutMs);\n }\n try {\n await session.client.waitFor(\"Debugger.resumed\", {\n timeoutMs: remainingMs,\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n });\n session.debuggerState.lastResumedAtMs = performance.now();\n } catch (err: unknown) {\n if (err instanceof CfInspectorError && err.code === \"BREAKPOINT_NOT_HIT\") {\n throwUnrelatedPauseTimeout(pause, options.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);\n}\n\nexport async function waitForPause(\n session: InspectorSession,\n options: WaitForPauseOptions,\n): Promise<PauseEvent> {\n throwIfAborted(options.signal);\n const deadlineMs = performance.now() + options.timeoutMs;\n const buffer = session.pauseBuffer;\n while (buffer.length > 0 || remainingUntil(deadlineMs) > 0) {\n throwIfAborted(options.signal);\n while (buffer.length > 0) {\n throwIfAborted(options.signal);\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 ...(options.signal === undefined ? {} : { signal: options.signal }),\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 type { CdpEvalResult } from \"../inspector/types.js\";\nimport { CfInspectorError } from \"../types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n DEFAULT_MAX_VALUE_LENGTH,\n formatPrimitive,\n isPrimitive,\n limitValueLength,\n textTruncationFields,\n} from \"./values.js\";\nimport type { LimitedValue } 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 const limited = readEvalError(result, maxValueLength);\n return {\n expression,\n error: limited.text,\n ...textTruncationFields(limited),\n };\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 limited = limitValueLength(rendered, maxValueLength);\n const base: CapturedExpression = {\n expression,\n value: limited.text,\n ...textTruncationFields(limited),\n };\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\nexport function sideEffectRefusalToCaptured(expression: string): CapturedExpression {\n const error = new CfInspectorError(\n \"MUTATION_NOT_ALLOWED\",\n `V8 blocked the capture expression \"${expression}\" because it may have side effects. Pass --allow-mutation to run it explicitly.`,\n );\n return {\n expression,\n error: `${error.code}: ${error.message}`,\n mutationRisk: true,\n blocked: true,\n };\n}\n\nfunction readEvalError(result: CdpEvalResult, maxValueLength: number): LimitedValue {\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 { CfInspectorError } from \"../types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nexport const DEFAULT_MAX_VALUE_LENGTH = 131_072;\nexport const DEFAULT_STREAM_MAX_VALUE_LENGTH = 4_096;\n\nexport interface TruncatedValue {\n readonly text: string;\n readonly truncated: true;\n readonly originalLength: number;\n}\n\nexport interface CompleteValue {\n readonly text: string;\n readonly truncated: false;\n}\n\nexport type LimitedValue = TruncatedValue | CompleteValue;\n\nexport interface TextTruncationFields {\n readonly truncated?: true;\n readonly originalLength?: number;\n}\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(\n raw: string,\n maxValueLength = DEFAULT_MAX_VALUE_LENGTH,\n): LimitedValue {\n if (raw.length <= maxValueLength) {\n return { text: raw, truncated: false };\n }\n return {\n text: raw.slice(0, maxValueLength),\n truncated: true,\n originalLength: raw.length,\n };\n}\n\nexport function textTruncationFields(limited: LimitedValue): TextTruncationFields {\n return limited.truncated\n ? { truncated: true, originalLength: limited.originalLength }\n : {};\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 { getProperties } from \"../inspector/runtime.js\";\nimport type { CdpProperty, InspectorSession } from \"../inspector/types.js\";\nimport type { VariableSnapshot } from \"../types.js\";\n\nimport {\n formatPrimitive,\n isPrimitive,\n limitValueLength,\n textTruncationFields,\n} 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\nexport interface CapturedProperties {\n readonly variables: readonly VariableSnapshot[];\n readonly omittedCount?: number;\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<CapturedProperties> {\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 const omittedCount = Math.max(properties.length - limited.length, 0);\n return omittedCount === 0 ? { variables } : { variables, omittedCount };\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 capturedChildren = await capturePropertyChildren(\n session,\n described,\n depth,\n maxValueLength,\n );\n const limited = limitValueLength(described.value, maxValueLength);\n const base: VariableSnapshot = {\n name,\n value: limited.text,\n ...textTruncationFields(limited),\n };\n const withType = described.type === undefined ? base : { ...base, type: described.type };\n const children = capturedChildren?.variables;\n const withChildren = children === undefined || children.length === 0\n ? withType\n : { ...withType, children };\n const omittedCount = capturedChildren?.omittedCount ?? 0;\n return omittedCount === 0\n ? withChildren\n : { ...withChildren, truncated: true, omittedCount };\n}\n\nasync function capturePropertyChildren(\n session: InspectorSession,\n described: DescribedProperty,\n depth: number,\n maxValueLength: number,\n): Promise<CapturedProperties | undefined> {\n if (described.objectId === undefined || !isExpandable(described.type)) {\n return undefined;\n }\n if (depth <= 0) {\n return await countDepthOmissions(session, described.objectId);\n }\n try {\n return await captureProperties(\n session,\n described.objectId,\n MAX_CHILD_VARIABLES,\n depth - 1,\n maxValueLength,\n );\n } catch {\n return undefined;\n }\n}\n\nasync function countDepthOmissions(\n session: InspectorSession,\n objectId: string,\n): Promise<CapturedProperties | undefined> {\n try {\n const properties = await getProperties(session, objectId);\n return properties.length === 0\n ? undefined\n : { variables: [], omittedCount: properties.length };\n } catch {\n return undefined;\n }\n}\n\nexport function countPropertyOmissions(captured: CapturedProperties): number {\n return (captured.omittedCount ?? 0) + captured.variables.reduce((total, variable) => {\n const childOmissions = variable.children === undefined\n ? 0\n : countPropertyOmissions({ variables: variable.children });\n return total + (variable.omittedCount ?? 0) + childOmissions;\n }, 0);\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 countPropertyOmissions,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport { limitValueLength, toStructuredValue } from \"./values.js\";\nimport type { LimitedValue } 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\ninterface MaterializedObject {\n readonly value: string;\n readonly omittedCount: number;\n}\n\nasync function materializeObject(\n session: InspectorSession,\n objectId: string,\n): Promise<MaterializedObject | undefined> {\n try {\n const captured = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n Number.MAX_SAFE_INTEGER,\n );\n if (captured.variables.length === 0) {\n return undefined;\n }\n const structured: Record<string, unknown> = {};\n for (const variable of captured.variables) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return {\n value: JSON.stringify(structured),\n omittedCount: countPropertyOmissions(captured),\n };\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);\n if (rendered !== undefined) {\n return buildResult(\n type,\n message ?? description,\n rendered.value,\n maxValueLength,\n rendered.omittedCount,\n );\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 omittedCount = 0,\n): ExceptionSnapshot {\n const limitedValue = limitValueLength(value, maxValueLength);\n const limitedDescription = description === undefined\n ? undefined\n : limitValueLength(description, maxValueLength);\n const base: ExceptionSnapshot = {\n value: limitedValue.text,\n ...exceptionTruncationFields(limitedValue, limitedDescription),\n };\n const withType = type === undefined ? base : { ...base, type };\n const withDescription = limitedDescription === undefined\n ? withType\n : { ...withType, description: limitedDescription.text };\n return omittedCount === 0\n ? withDescription\n : { ...withDescription, truncated: true, omittedCount };\n}\n\nfunction exceptionTruncationFields(\n value: LimitedValue,\n description: LimitedValue | undefined,\n): Pick<\n ExceptionSnapshot,\n \"truncated\" | \"originalLength\" | \"valueOriginalLength\" | \"descriptionOriginalLength\"\n> {\n const valueLength = value.truncated ? value.originalLength : undefined;\n const descriptionLength = description?.truncated === true\n ? description.originalLength\n : undefined;\n const lengths = [valueLength, descriptionLength].filter(\n (length): length is number => length !== undefined,\n );\n if (lengths.length === 0) {\n return {};\n }\n return {\n truncated: true,\n originalLength: Math.max(...lengths),\n ...(valueLength === undefined ? {} : { valueOriginalLength: valueLength }),\n ...(descriptionLength === undefined\n ? {}\n : { descriptionOriginalLength: descriptionLength }),\n };\n}\n","import type { CdpEvalResult, InspectorSession } from \"../inspector/types.js\";\nimport type { CapturedExpression } from \"../types.js\";\n\nimport {\n captureProperties,\n countPropertyOmissions,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n} from \"./properties.js\";\nimport {\n limitValueLength,\n textTruncationFields,\n toStructuredValue,\n} 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\ninterface RenderedObjectCapture {\n readonly value: string;\n readonly omittedCount: number;\n}\n\nasync function renderObjectCapture(\n session: InspectorSession,\n objectId: string,\n): Promise<RenderedObjectCapture | undefined> {\n try {\n const captured = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n Number.MAX_SAFE_INTEGER,\n );\n const structured: Record<string, unknown> = {};\n for (const variable of captured.variables) {\n structured[variable.name] = toStructuredValue(variable);\n }\n return {\n value: JSON.stringify(structured),\n omittedCount: countPropertyOmissions(captured),\n };\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);\n if (rendered === undefined) {\n return captured;\n }\n const normalized = normalizeRenderedObjectCapture(rendered.value, captured.value);\n if (normalized === undefined) {\n return captured;\n }\n const limited = limitValueLength(normalized, maxValueLength);\n const base: CapturedExpression = {\n expression,\n value: limited.text,\n ...textTruncationFields(limited),\n ...(captured.type === undefined ? {} : { type: captured.type }),\n };\n return rendered.omittedCount === 0\n ? base\n : { ...base, truncated: true, omittedCount: rendered.omittedCount };\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 interface CapturedScopes {\n readonly scopes: readonly ScopeSnapshot[];\n readonly omittedCount?: number;\n}\n\nexport function selectScopes(scopeChain: CallFrameInfo[\"scopeChain\"]): CallFrameInfo[\"scopeChain\"] {\n return rankedScopes(scopeChain).slice(0, MAX_SCOPES);\n}\n\nfunction rankedScopes(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}\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<CapturedScopes> {\n const ranked = rankedScopes(frame.scopeChain);\n const scopes = ranked.slice(0, MAX_SCOPES);\n const capturedScopes = 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 captured = await captureProperties(\n session,\n objectId,\n MAX_SCOPE_VARIABLES,\n MAX_VARIABLE_DEPTH,\n maxValueLength,\n );\n const base: ScopeSnapshot = { type: scope.type, variables: captured.variables };\n return captured.omittedCount === undefined\n ? base\n : { ...base, truncated: true, omittedCount: captured.omittedCount };\n } catch {\n return { type: scope.type, variables: [] };\n }\n }),\n );\n const omittedCount = Math.max(ranked.length - capturedScopes.length, 0);\n return omittedCount === 0\n ? { scopes: capturedScopes }\n : { scopes: capturedScopes, omittedCount };\n}\n","import { looksLikeMutation } from \"../cli/captureParser.js\";\nimport { evaluateOnFrame, isSideEffectRefusal } 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, sideEffectRefusalToCaptured } from \"./evaluation.js\";\nimport { withSerializedObjectCapture } from \"./objects.js\";\nimport { limitValueLength, textTruncationFields } 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 throwOnSideEffect: boolean | undefined,\n): Promise<CapturedExpression> {\n const mutationRisk = throwOnSideEffect === false && looksLikeMutation(expression);\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression, {\n ...(throwOnSideEffect === undefined ? {} : { throwOnSideEffect }),\n });\n if (isSideEffectRefusal(result)) {\n return sideEffectRefusalToCaptured(expression);\n }\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n const serialized = await withSerializedObjectCapture(\n session,\n expression,\n result,\n captured,\n maxValueLength,\n );\n return mutationRisk ? { ...serialized, mutationRisk: true } : serialized;\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n const limited = limitValueLength(message, maxValueLength);\n const captured: CapturedExpression = {\n expression,\n error: limited.text,\n ...textTruncationFields(limited),\n };\n return mutationRisk ? { ...captured, mutationRisk: true } : captured;\n }\n}\n\nasync function captureFrameExpressions(\n session: InspectorSession,\n frame: CallFrameInfo,\n expressions: readonly string[],\n maxValueLength: number,\n throwOnSideEffect: boolean | undefined,\n): Promise<readonly CapturedExpression[]> {\n if (expressions.length === 0) {\n return [];\n }\n return await Promise.all(\n expressions.map((expression) =>\n captureFrameExpression(\n session,\n frame.callFrameId,\n expression,\n maxValueLength,\n throwOnSideEffect,\n ),\n ),\n );\n}\n\nexport interface WalkStackOptions {\n readonly stackDepth: number;\n readonly stackCaptures: readonly string[];\n readonly maxValueLength: number;\n readonly throwOnSideEffect?: boolean;\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 options.throwOnSideEffect,\n );\n return { ...base, captures };\n }),\n );\n}\n","import { looksLikeMutation } from \"../cli/captureParser.js\";\nimport { evaluateOnFrame, isSideEffectRefusal } 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, sideEffectRefusalToCaptured } 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 DEFAULT_STREAM_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n textTruncationFields,\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 readonly throwOnSideEffect?: boolean;\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 capturedScopes = await captureScopes(session, top, maxValueLength);\n topFrame = {\n ...topFrame,\n scopes: capturedScopes.scopes,\n ...(capturedScopes.omittedCount === undefined\n ? {}\n : { truncated: true, omittedCount: capturedScopes.omittedCount }),\n };\n }\n captures = await captureExpressions(\n session,\n top.callFrameId,\n options.captures,\n maxValueLength,\n options.throwOnSideEffect,\n );\n stack = await walkStack(session, pause.callFrames, {\n stackDepth: options.stackDepth ?? DEFAULT_STACK_DEPTH,\n stackCaptures: options.stackCaptures ?? [],\n maxValueLength,\n ...(options.throwOnSideEffect === undefined\n ? {}\n : { throwOnSideEffect: options.throwOnSideEffect }),\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 throwOnSideEffect: boolean | undefined,\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(\n session,\n callFrameId,\n expression,\n maxValueLength,\n throwOnSideEffect,\n );\n }),\n );\n}\n\nasync function captureExpression(\n session: InspectorSession,\n callFrameId: string,\n expression: string,\n maxValueLength: number,\n throwOnSideEffect: boolean | undefined,\n): Promise<CapturedExpression> {\n const mutationRisk = throwOnSideEffect === false && looksLikeMutation(expression);\n try {\n const result = await evaluateOnFrame(session, callFrameId, expression, {\n ...(throwOnSideEffect === undefined ? {} : { throwOnSideEffect }),\n });\n if (isSideEffectRefusal(result)) {\n return sideEffectRefusalToCaptured(expression);\n }\n const captured = evalResultToCaptured(expression, result, maxValueLength);\n const serialized = await withSerializedObjectCapture(\n session,\n expression,\n result,\n captured,\n maxValueLength,\n );\n return mutationRisk ? { ...serialized, mutationRisk: true } : serialized;\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n const limited = limitValueLength(message, maxValueLength);\n const captured: CapturedExpression = {\n expression,\n error: limited.text,\n ...textTruncationFields(limited),\n };\n return mutationRisk ? { ...captured, mutationRisk: true } : captured;\n }\n}\n\nexport const internalsForTesting = {\n DEFAULT_MAX_VALUE_LENGTH,\n DEFAULT_STREAM_MAX_VALUE_LENGTH,\n limitValueLength,\n resolveMaxValueLength,\n describeProperty,\n selectScopes,\n evalResultToCaptured,\n};\n","import process from \"node:process\";\n\nimport { discoverInspectorTargets } from \"../../inspector/discovery.js\";\nimport type { InspectorTarget } from \"../../inspector/discovery.js\";\nimport { listScripts } from \"../../inspector/runtime.js\";\nimport { discoverNodeWorkerTargets } from \"../../inspector/session.js\";\nimport type { InspectorWorkerTarget } from \"../../inspector/types.js\";\nimport type { ListScriptsCommandOptions, ListTargetsCommandOptions } from \"../commandTypes.js\";\nimport { writeJson } from \"../output.js\";\nimport { openTarget, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\n\ntype ScriptUrlFilter = (url: string) => boolean;\ntype FilterToken = string | { readonly kind: \"wildcard\"; readonly minChars: 0 | 1 };\n\nexport async function handleListScripts(opts: ListScriptsCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts);\n const filter = compileScriptUrlFilter(opts.filter);\n const scripts = (await withSession(target, (session) => Promise.resolve(listScripts(session))))\n .filter((script) => filter === undefined || filter(script.url));\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\nexport async function handleListTargets(opts: ListTargetsCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts);\n const tunnel = await openTarget(target);\n try {\n const targets = await discoverInspectorTargets(tunnel.host, tunnel.port, 5_000);\n const indexedTargets = await buildListedTargets(targets);\n const workerCount = indexedTargets.reduce((count, targetEntry) => {\n return count + targetEntry.workers.length;\n }, 0);\n writeTargetCountSummary(indexedTargets.length, workerCount);\n warnOnMissingWorkers(indexedTargets.length, workerCount, indexedTargets);\n if (opts.json) {\n writeJson(indexedTargets);\n return;\n }\n writeHumanTargets(indexedTargets);\n } finally {\n await tunnel.dispose();\n }\n}\n\ninterface ListedWorkerTarget {\n readonly index: number;\n readonly workerId: string;\n readonly type: string;\n readonly title: string;\n readonly url: string;\n}\n\ninterface ListedInspectorTarget extends InspectorTarget {\n readonly index: number;\n readonly likelyWorker: boolean;\n readonly workerDiscoverySupported: boolean;\n readonly workers: readonly ListedWorkerTarget[];\n}\n\nasync function buildListedTargets(\n targets: readonly InspectorTarget[],\n): Promise<readonly ListedInspectorTarget[]> {\n return await Promise.all(targets.map(async (target, index) => {\n try {\n const workerResult = await discoverNodeWorkerTargets(target);\n return buildListedTarget(target, index, workerResult.supported, workerResult.workers);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(\n `[cf-inspector] warning: worker discovery failed for raw target ${index.toString()}: ${message}\\n`,\n );\n return buildListedTarget(target, index, false, []);\n }\n }));\n}\n\nfunction buildListedTarget(\n target: InspectorTarget,\n index: number,\n workerDiscoverySupported: boolean,\n workers: readonly InspectorWorkerTarget[],\n): ListedInspectorTarget {\n return {\n index,\n ...target,\n likelyWorker: looksLikeWorkerTarget(target),\n workerDiscoverySupported,\n workers: workers.map((worker, workerIndex) => ({\n index: workerIndex,\n workerId: worker.workerId,\n type: worker.type,\n title: worker.title,\n url: worker.url,\n })),\n };\n}\n\nfunction looksLikeWorkerTarget(target: InspectorTarget): boolean {\n return `${target.type} ${target.title} ${target.url}`.toLowerCase().includes(\"worker\");\n}\n\nfunction writeTargetCountSummary(targetCount: number, workerCount: number): void {\n process.stderr.write(\n `[cf-inspector] ${targetCount.toString()} raw inspector ` +\n `${targetCount === 1 ? \"target\" : \"targets\"}; ${workerCount.toString()} ` +\n `${workerCount === 1 ? \"worker\" : \"workers\"}.\\n`,\n );\n}\n\nfunction warnOnMissingWorkers(\n targetCount: number,\n workerCount: number,\n targets: readonly ListedInspectorTarget[],\n): void {\n if (targetCount !== 1 || workerCount !== 0) {\n return;\n }\n const supported = targets[0]?.workerDiscoverySupported === true;\n const supportHint = supported\n ? \"NodeWorker discovery is available, but no live worker attached.\"\n : \"This runtime did not expose NodeWorker discovery.\";\n process.stderr.write(\n `[cf-inspector] warning: only the main inspector target is reachable. ${supportHint} ` +\n \"If worker code is expected, ensure the worker is alive and rerun list-targets. \" +\n \"A worker on a separate inspector port is not carried by a single Cloud Foundry tunnel.\\n\",\n );\n}\n\nfunction writeHumanTargets(targets: readonly ListedInspectorTarget[]): void {\n for (const target of targets) {\n const workerLabel = target.likelyWorker ? \"\\tlikely-worker\" : \"\";\n process.stdout.write(\n `${target.index.toString()}\\ttarget\\t${target.type}\\t${target.title}\\t${target.url}${workerLabel}\\n`,\n );\n for (const worker of target.workers) {\n process.stdout.write(\n ` ${worker.index.toString()}\\tworker\\t${worker.type}\\t${worker.title}\\t${worker.url}\\n`,\n );\n }\n }\n}\n\nexport function compileScriptUrlFilter(pattern: string | undefined): ScriptUrlFilter | undefined {\n if (pattern === undefined || pattern.length === 0) {\n return undefined;\n }\n const alternatives = splitPatternAlternatives(pattern)\n .map((alternative) => parseFilterTokens(alternative))\n .filter((tokens) => tokens.length > 0);\n return (url: string): boolean => alternatives.some((tokens) => matchesFilterTokens(url, tokens));\n}\n\nfunction splitPatternAlternatives(pattern: string): readonly string[] {\n const alternatives: string[] = [];\n let current = \"\";\n for (let index = 0; index < pattern.length; index++) {\n const char = pattern[index] ?? \"\";\n if (char === \"\\\\\" && index + 1 < pattern.length) {\n current += `${char}${pattern[index + 1] ?? \"\"}`;\n index++;\n } else if (char === \"|\") {\n alternatives.push(current);\n current = \"\";\n } else {\n current += char;\n }\n }\n alternatives.push(current);\n return alternatives;\n}\n\nfunction parseFilterTokens(pattern: string): readonly FilterToken[] {\n const tokens: FilterToken[] = [];\n let literal = \"\";\n for (let index = 0; index < pattern.length; index++) {\n const char = pattern[index] ?? \"\";\n const nextChar = pattern[index + 1];\n if (char === \"\\\\\" && nextChar !== undefined) {\n literal += nextChar;\n index++;\n } else if (char === \".\" && (nextChar === \"*\" || nextChar === \"+\")) {\n if (literal.length > 0) { tokens.push(literal); }\n literal = \"\";\n tokens.push({ kind: \"wildcard\", minChars: nextChar === \"+\" ? 1 : 0 });\n index++;\n } else {\n literal += char;\n }\n }\n if (literal.length > 0) { tokens.push(literal); }\n return tokens;\n}\n\nfunction matchesFilterTokens(value: string, tokens: readonly FilterToken[]): boolean {\n let position = 0;\n for (const token of tokens) {\n if (typeof token === \"string\") {\n const nextPosition = value.indexOf(token, position);\n if (nextPosition === -1) { return false; }\n position = nextPosition + token.length;\n } else {\n if (token.minChars === 1 && position >= value.length) { return false; }\n position += token.minChars;\n }\n }\n return true;\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 { DEFAULT_STREAM_MAX_VALUE_LENGTH } from \"../../snapshot/values.js\";\nimport { CfInspectorError } from \"../../types.js\";\nimport type { LogCommandOptions } from \"../commandTypes.js\";\nimport { writeLogEvent } from \"../output.js\";\nimport { withTerminationSignal } from \"../signals.js\";\nimport { parsePositiveInt, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport {\n warnOnBoundBreakpointWithoutHit,\n warnOnMutationRisk,\n warnOnUnboundBreakpoints,\n} from \"../warnings.js\";\n\nexport async function handleLog(opts: LogCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(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 maxValueLength = parsePositiveInt(opts.maxValueLength, \"--max-value-length\")\n ?? DEFAULT_STREAM_MAX_VALUE_LENGTH;\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 warnOnMutationRisk(expression, \"log --expr\");\n if (condition !== undefined) {\n warnOnMutationRisk(condition, \"log --condition\");\n }\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 maxValueLength,\n signal,\n onEvent: (event) => {\n writeLogEvent(event, opts.json);\n },\n onBreakpointSet: (handle) => {\n warnOnUnboundBreakpoints([handle]);\n },\n });\n if (\n result.emitted === 0 &&\n (result.stoppedReason === \"duration\" || result.stoppedReason === \"signal\")\n ) {\n warnOnBoundBreakpointWithoutHit([result.handle]);\n }\n writeLogSummary(result.stoppedReason, result.emitted, opts.json);\n }, undefined, signal);\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 {\n DEFAULT_STREAM_MAX_VALUE_LENGTH,\n resolveMaxValueLength,\n} from \"../snapshot/values.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 maxValueLength?: 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: 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 maxValueLength = resolveMaxValueLength(\n options.maxValueLength ?? DEFAULT_STREAM_MAX_VALUE_LENGTH,\n );\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, maxValueLength);\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 maxValueLength: number,\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, maxValueLength);\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 {\n DEFAULT_STREAM_MAX_VALUE_LENGTH,\n limitValueLength,\n textTruncationFields,\n} from \"../snapshot/values.js\";\nimport 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 readonly truncated?: true;\n readonly originalLength?: number;\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 maxValueLength = DEFAULT_STREAM_MAX_VALUE_LENGTH,\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 const limited = limitValueLength(payload.slice(\"!err:\".length), maxValueLength);\n return {\n ts,\n at,\n error: limited.text,\n ...textTruncationFields(limited),\n };\n }\n return parsePayload(ts, at, payload, maxValueLength);\n}\n\nfunction parsePayload(\n ts: string,\n at: string,\n payload: string,\n maxValueLength: number,\n): LogpointEvent {\n try {\n const parsed: unknown = JSON.parse(payload);\n if (typeof parsed === \"string\") {\n return buildValueEvent(ts, at, parsed, maxValueLength);\n }\n return buildValueEvent(ts, at, JSON.stringify(parsed), maxValueLength);\n } catch {\n return buildValueEvent(ts, at, payload, maxValueLength, true);\n }\n}\n\nfunction buildValueEvent(\n ts: string,\n at: string,\n value: string,\n maxValueLength: number,\n includeRaw = false,\n): LogpointEvent {\n const limited = limitValueLength(value, maxValueLength);\n return {\n ts,\n at,\n value: limited.text,\n ...(includeRaw ? { raw: limited.text } : {}),\n ...textTruncationFields(limited),\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 runSetupEvals,\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 { DEFAULT_MAX_VALUE_LENGTH } from \"../../snapshot/values.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, writeProgress } from \"../output.js\";\nimport { parsePositiveInt, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport type { ProgressReporter } from \"../target.js\";\nimport {\n enforceNativeConditionMutationPolicy,\n roundDurationMs,\n warnOnCaptureMutationRisk,\n warnOnBoundBreakpointWithoutHit,\n warnOnMutationRisk,\n warnOnUnboundBreakpoints,\n warnOnUnmatchedPause,\n withPausedDuration,\n} from \"../warnings.js\";\n\ninterface PreparedSnapshotCommand {\n readonly target: Target;\n readonly setupEvals: readonly string[];\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 readonly throwOnSideEffect: boolean;\n}\n\nexport async function handleSnapshot(opts: SnapshotCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts, { useTimeoutForTunnel: false });\n const prepared = prepareSnapshotCommand(opts, target);\n warnOnCaptureMutationRisk(\n [...prepared.captures, ...prepared.stackCaptures],\n opts.allowMutation === true,\n );\n for (const expression of prepared.setupEvals) {\n warnOnMutationRisk(expression, \"snapshot --setup-eval\");\n }\n const reportProgress = opts.quiet === true ? undefined : writeProgress;\n const result = await runSnapshotCommand(prepared, opts, reportProgress);\n if (opts.json) {\n writeJson(result);\n } else {\n writeHumanSnapshot(result);\n }\n reportProgress?.(\"Snapshot complete.\");\n}\n\nfunction prepareSnapshotCommand(opts: SnapshotCommandOptions, target: Target): PreparedSnapshotCommand {\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 ?? DEFAULT_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 const setupEvals = parseSetupEvals(opts.setupEval);\n enforceNativeConditionMutationPolicy(\n condition ?? \"\",\n opts.allowMutation === true,\n \"snapshot --condition\",\n );\n return {\n target,\n setupEvals,\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,\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n throwOnSideEffect: opts.allowMutation !== true,\n };\n}\n\nasync function runSnapshotCommand(\n command: PreparedSnapshotCommand,\n opts: SnapshotCommandOptions,\n reportProgress?: ProgressReporter,\n): Promise<SnapshotResult> {\n return await withSession(command.target, async (session): Promise<SnapshotResult> => {\n return await runSnapshotOnSession(session, command, opts, reportProgress);\n }, reportProgress);\n}\n\nasync function runSnapshotOnSession(\n session: InspectorSession,\n command: PreparedSnapshotCommand,\n opts: SnapshotCommandOptions,\n reportProgress?: ProgressReporter,\n): Promise<SnapshotResult> {\n if (command.setupEvals.length > 0) {\n const setupCount = command.setupEvals.length;\n reportProgress?.(`Running ${setupCount.toString()} setup ${setupCount === 1 ? \"evaluation\" : \"evaluations\"}...`);\n await runSetupEvals(session, command.setupEvals);\n reportProgress?.(\"Setup evaluation complete.\");\n }\n\n if (command.condition !== undefined) {\n reportProgress?.(\"Validating the breakpoint condition...\");\n await validateExpression(session, command.condition);\n reportProgress?.(\"Breakpoint condition is valid.\");\n }\n const breakpointCount = command.breakpoints.length;\n reportProgress?.(\n `Setting ${breakpointCount.toString()} ${breakpointCount === 1 ? \"breakpoint\" : \"breakpoints\"}...`,\n );\n const handles = await setCommandBreakpoints(session, command);\n const resolvedCount = handles.reduce(\n (total, handle) => total + handle.resolvedLocations.length,\n 0,\n );\n reportProgress?.(\n `Breakpoint setup complete: ${resolvedCount.toString()} resolved ${resolvedCount === 1 ? \"location\" : \"locations\"}.`,\n );\n warnOnUnboundBreakpoints(handles);\n reportProgress?.(\n `Waiting up to ${(command.timeoutMs / 1000).toString()}s for a breakpoint hit...`,\n );\n const pause = await waitForCommandPause(session, opts, handles, command.timeoutMs);\n const captureCount = command.captures.length;\n reportProgress?.(\n `Breakpoint hit; capturing ${captureCount.toString()} ${captureCount === 1 ? \"expression\" : \"expressions\"}...`,\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 maxValueLength: command.maxValueLength,\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n throwOnSideEffect: command.throwOnSideEffect,\n });\n if (opts.keepPaused === true) {\n reportProgress?.(\"Snapshot captured; leaving the target paused as requested.\");\n return withPausedDuration(snapshot, null);\n }\n reportProgress?.(\"Snapshot captured; resuming the target...\");\n return await resumeAfterSnapshot(session, snapshot, pausedStartedAt, reportProgress);\n}\n\nasync function setCommandBreakpoints(\n session: Parameters<typeof setBreakpoint>[0],\n command: PreparedSnapshotCommand,\n): Promise<readonly Awaited<ReturnType<typeof setBreakpoint>>[]> {\n return 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}\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 try {\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 } catch (error: unknown) {\n if (\n error instanceof CfInspectorError &&\n (error.code === \"BREAKPOINT_NOT_HIT\" || error.code === \"UNRELATED_PAUSE_TIMEOUT\")\n ) {\n warnOnBoundBreakpointWithoutHit(handles);\n }\n throw error;\n }\n}\n\nasync function resumeAfterSnapshot(\n session: Parameters<typeof resume>[0],\n snapshot: Awaited<ReturnType<typeof captureSnapshot>>,\n pausedStartedAt: number,\n reportProgress?: ProgressReporter,\n): Promise<SnapshotResult> {\n try {\n await resume(session);\n reportProgress?.(\"Target resumed.\");\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\nfunction parseSetupEvals(raw: unknown): readonly string[] {\n const values: readonly unknown[] = Array.isArray(raw) ? raw : [];\n return values\n .filter((expr): expr is string => typeof expr === \"string\" && expr.trim().length > 0)\n .map((expr) => expr.trim());\n}\n\nexport const internalsForTesting = {\n parseSetupEvals,\n prepareSnapshotCommand,\n runSnapshotCommand,\n runSnapshotOnSession,\n};\n","import { performance } from \"node:perf_hooks\";\nimport process from \"node:process\";\n\nimport {\n resume,\n runSetupEvals,\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 { DEFAULT_STREAM_MAX_VALUE_LENGTH } from \"../../snapshot/values.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, resolveTargetWithCurrentCfTarget, withSession } from \"../target.js\";\nimport {\n enforceNativeConditionMutationPolicy,\n warnOnBoundBreakpointWithoutHit,\n warnOnCaptureMutationRisk,\n warnOnMutationRisk,\n warnOnUnboundBreakpoints,\n} from \"../warnings.js\";\n\ninterface PreparedWatchCommand {\n readonly target: Target;\n readonly setupEvals: readonly string[];\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 readonly throwOnSideEffect: boolean;\n}\n\ntype WatchStopReason = \"duration\" | \"signal\" | \"max-events\" | \"transport-closed\";\n\nexport async function handleWatch(opts: WatchCommandOptions): Promise<void> {\n const target = await resolveTargetWithCurrentCfTarget(opts, { useTimeoutForTunnel: false });\n const prepared = prepareWatchCommand(opts, target);\n warnOnCaptureMutationRisk(\n [...prepared.captures, ...prepared.stackCaptures],\n opts.allowMutation === true,\n );\n for (const expression of prepared.setupEvals) {\n warnOnMutationRisk(expression, \"watch --setup-eval\");\n }\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 }, undefined, signal);\n });\n writeWatchSummary(stoppedReason, emitted, opts.json);\n}\n\nfunction prepareWatchCommand(opts: WatchCommandOptions, target: Target): PreparedWatchCommand {\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 ?? DEFAULT_STREAM_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 const setupEvals = parseSetupEvals(opts.setupEval);\n enforceNativeConditionMutationPolicy(\n condition ?? \"\",\n opts.allowMutation === true,\n \"watch --condition\",\n );\n return {\n target,\n setupEvals,\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,\n ...(condition === undefined ? {} : { condition }),\n ...(hitCount === undefined ? {} : { hitCount }),\n ...(stackDepth === undefined ? {} : { stackDepth }),\n stackCaptures: parseCaptureList(opts.stackCaptures),\n throwOnSideEffect: opts.allowMutation !== true,\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.setupEvals.length > 0) {\n await runSetupEvals(session, command.setupEvals);\n }\n\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 if (emitted === 0 && (state.reason === \"duration\" || state.reason === \"signal\")) {\n warnOnBoundBreakpointWithoutHit(handles);\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 signal,\n });\n } catch (err: unknown) {\n if (err instanceof CfInspectorError) {\n if (err.code === \"ABORTED\") {\n return \"signal\";\n }\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 maxValueLength: command.maxValueLength,\n ...(command.stackDepth === undefined ? {} : { stackDepth: command.stackDepth }),\n stackCaptures: command.stackCaptures,\n throwOnSideEffect: command.throwOnSideEffect,\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\nfunction parseSetupEvals(raw: unknown): readonly string[] {\n const values: readonly unknown[] = Array.isArray(raw) ? raw : [];\n return values\n .filter((expr): expr is string => typeof expr === \"string\" && expr.trim().length > 0)\n .map((expr) => expr.trim());\n}\n\nexport const internalsForTesting = {\n formatLocation,\n computeDeadline,\n remainingForLoop,\n parseSetupEvals,\n prepareWatchCommand,\n runWatchLoop,\n writeJson,\n};\n"],"mappings":"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","names":["wrapped","process","process","performance","isUnknownRecord","performance","process","process","process","process","process","performance","process","performance","performance","out","asString","buildResult","performance","process","process","process","process","HITS_GLOBAL","asString","validateHitCount","asString","process","process","performance","process","performance","process","performance","process","parseSetupEvals","performance","process","process"]}