@xstate-devtools/adapter 0.1.2 → 0.1.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/logging.ts","../src/sanitize.ts","../src/serialize.ts","../src/core.ts"],"sourcesContent":["// Browser entrypoint — uses window.postMessage via the extension's injected bridge.\nimport type {\n ExtensionToPageMessage,\n PageToExtensionMessage,\n} from '../../extension/src/shared/types.js'\nimport { createInspector, type InspectorOptions, type Transport } from './core.js'\nimport { debugLog, infoLog, warnLog } from './logging.js'\n\ndeclare global {\n interface Window {\n __XSTATE_DEVTOOLS__?: {\n send: (message: unknown) => void\n }\n }\n}\n\nexport function createAdapter(options: InspectorOptions = {}) {\n if (typeof window === 'undefined') {\n // Non-browser env (SSR/SSG/server) — return a no-op so importing this module is safe.\n infoLog('web:adapter', 'createAdapter called without window; returning no-op adapter')\n return { inspect: () => {}, dispose: () => {} }\n }\n\n infoLog('web:adapter', 'creating browser adapter', {\n hookInstalled: Boolean(window.__XSTATE_DEVTOOLS__),\n })\n\n let warnedMissingHook = false\n\n const transport: Transport = {\n send(message: PageToExtensionMessage) {\n const payload = { ...message, __xstateDevtools: true as const }\n debugLog('web:adapter', 'sending message via page hook', {\n type: message.type,\n sessionId: 'sessionId' in message ? message.sessionId : undefined,\n })\n if (window.__XSTATE_DEVTOOLS__) {\n window.__XSTATE_DEVTOOLS__.send(payload)\n return\n }\n\n if (!warnedMissingHook) {\n warnedMissingHook = true\n warnLog('web:adapter', 'page hook missing; using direct window.postMessage fallback')\n }\n // Fallback keeps inspection working if MAIN-world injection is unavailable.\n window.postMessage(payload, '*')\n },\n subscribe(handler) {\n infoLog('web:adapter', 'subscribing to window messages')\n const onMessage = (evt: MessageEvent) => {\n if (evt.source !== window) return\n const data = evt.data\n if (!data?.__xstateDevtools) return\n debugLog('web:adapter', 'received message from window bridge', {\n type: (data as ExtensionToPageMessage).type,\n sessionId:\n 'sessionId' in (data as ExtensionToPageMessage)\n ? (data as ExtensionToPageMessage & { sessionId?: string }).sessionId\n : undefined,\n })\n handler(data as ExtensionToPageMessage)\n }\n window.addEventListener('message', onMessage)\n return () => {\n infoLog('web:adapter', 'unsubscribing from window messages')\n window.removeEventListener('message', onMessage)\n }\n },\n }\n\n return createInspector(transport, 'web', options)\n}\n","type LogLevel = 'debug' | 'info' | 'warn'\n\ndeclare global {\n var __XSTATE_DEVTOOLS_LOGGING__: boolean | undefined\n}\n\nfunction hasProcessEnv() {\n return typeof process !== 'undefined' && typeof process.env !== 'undefined'\n}\n\nexport function isLoggingEnabled() {\n if (globalThis.__XSTATE_DEVTOOLS_LOGGING__ === true) return true\n if (!hasProcessEnv()) return false\n\n const value = process.env.XSTATE_DEVTOOLS_LOGGING\n return value === '1' || value === 'true'\n}\n\nfunction log(level: LogLevel, scope: string, message: string, details?: unknown) {\n if (!isLoggingEnabled()) return\n\n if (details === undefined) {\n console[level](`[xstate-devtools:${scope}] ${message}`)\n return\n }\n\n console[level](`[xstate-devtools:${scope}] ${message}`, details)\n}\n\nexport function debugLog(scope: string, message: string, details?: unknown) {\n log('debug', scope, message, details)\n}\n\nexport function infoLog(scope: string, message: string, details?: unknown) {\n log('info', scope, message, details)\n}\n\nexport function warnLog(scope: string, message: string, details?: unknown) {\n log('warn', scope, message, details)\n}\n","// packages/adapter/src/sanitize.ts\n\nconst MAX_DEPTH = 10\nconst MAX_STRING_LENGTH = 500\nconst MAX_ARRAY_LENGTH = 100\n\nfunction sanitizeValue(value: unknown, depth: number, seen: WeakSet<object>): unknown {\n if (depth > MAX_DEPTH) return '[MaxDepth]'\n if (value === null || value === undefined) return value\n if (typeof value === 'boolean' || typeof value === 'number') return value\n if (typeof value === 'string') {\n return value.length > MAX_STRING_LENGTH ? `${value.slice(0, MAX_STRING_LENGTH)}…` : value\n }\n if (typeof value === 'function') return `[Function: ${value.name || '(anonymous)'}]`\n if (typeof value === 'symbol') return `[Symbol: ${value.description ?? ''}]`\n if (typeof value === 'bigint') return `[BigInt: ${value}]`\n if (value instanceof Error) return { __type: 'Error', name: value.name, message: value.message }\n if (value instanceof Date) return { __type: 'Date', iso: value.toISOString() }\n if (value instanceof RegExp) return { __type: 'RegExp', source: value.source, flags: value.flags }\n if (typeof value === 'object') {\n if (seen.has(value)) return '[Circular]'\n seen.add(value)\n }\n if (value instanceof Map) {\n const entries: [unknown, unknown][] = []\n for (const [k, v] of value as Map<unknown, unknown>) {\n if (entries.length >= MAX_ARRAY_LENGTH) break\n entries.push([sanitizeValue(k, depth + 1, seen), sanitizeValue(v, depth + 1, seen)])\n }\n return { __type: 'Map', entries }\n }\n if (value instanceof Set) {\n const values: unknown[] = []\n for (const v of value as Set<unknown>) {\n if (values.length >= MAX_ARRAY_LENGTH) break\n values.push(sanitizeValue(v, depth + 1, seen))\n }\n return { __type: 'Set', values }\n }\n if (value instanceof Promise) return '[Promise]'\n if (value instanceof WeakMap || value instanceof WeakSet) return '[WeakCollection]'\n if (ArrayBuffer.isView(value)) return `[TypedArray: ${(value as any).constructor.name}]`\n // Detect DOM nodes (works in browser and is safe to check)\n if (typeof Node !== 'undefined' && value instanceof Node) {\n return `[DOMNode: ${(value as Element).tagName ?? value.nodeName}]`\n }\n if (Array.isArray(value)) {\n const sliced = value.slice(0, MAX_ARRAY_LENGTH)\n const result = sliced.map((v) => sanitizeValue(v, depth + 1, seen))\n if (value.length > MAX_ARRAY_LENGTH) result.push(`[…${value.length - MAX_ARRAY_LENGTH} more]`)\n return result\n }\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {}\n let count = 0\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (count++ >= MAX_ARRAY_LENGTH) {\n result['…'] = '[truncated]'\n break\n }\n result[k] = sanitizeValue(v, depth + 1, seen)\n }\n return result\n }\n return String(value)\n}\n\nexport function sanitize(value: unknown, depth = 0): unknown {\n return sanitizeValue(value, depth, new WeakSet<object>())\n}\n","// packages/adapter/src/serialize.ts\nimport type { AnyStateMachine } from 'xstate'\nimport type {\n SerializedInvoke,\n SerializedMachine,\n SerializedStateNode,\n SerializedTransition,\n} from '../../extension/src/shared/types.js'\n\nconst MAX_SERIALIZED_NODES = 500\nconst MAX_TRANSITIONS_PER_NODE = 100\nconst MAX_CHILD_STATES = 100\nconst MAX_ACTIONS_PER_TRANSITION = 20\nconst MAX_ENTRY_EXIT_ACTIONS = 20\nconst MAX_INVOKES_PER_NODE = 20\n\nfunction serializeGuard(guard: unknown): string | undefined {\n if (!guard) return undefined\n if (typeof guard === 'string') return guard\n if (typeof guard === 'function') return (guard as Function).name || '(inline)'\n if (typeof guard === 'object' && guard !== null) {\n const g = guard as any\n return g.type ?? g.name ?? '(inline)'\n }\n return '(inline)'\n}\n\nfunction serializeAction(action: unknown): string {\n if (typeof action === 'string') return action\n if (typeof action === 'function') return (action as Function).name || '(anonymous)'\n if (typeof action === 'object' && action !== null) {\n const a = action as any\n return a.type ?? a.name ?? String(action)\n }\n return String(action)\n}\n\nfunction serializeTransitionList(transitions: any[]): SerializedTransition[] {\n return transitions.slice(0, MAX_TRANSITIONS_PER_NODE).map((t: any) => ({\n eventType: t.eventType ?? '',\n targets: (t.target ?? []).map((n: any) => n?.id ?? String(n)).filter(Boolean),\n guard: serializeGuard(t.guard),\n actions: (t.actions ?? [])\n .slice(0, MAX_ACTIONS_PER_TRANSITION)\n .map(serializeAction)\n .filter(Boolean),\n }))\n}\n\nfunction serializeInvokes(node: any): SerializedInvoke[] {\n return (node.invoke as any[]).slice(0, MAX_INVOKES_PER_NODE).map((inv: any) => ({\n id: inv.id ?? '(unknown)',\n src: typeof inv.src === 'string' ? inv.src : (inv.src?.id ?? inv.src?.name ?? '(inline)'),\n }))\n}\n\ninterface SerializeState {\n seen: WeakSet<object>\n count: number\n}\n\nfunction serializeNode(node: any, state: SerializeState): SerializedStateNode {\n if (!node || typeof node !== 'object') {\n return {\n id: '(unknown)',\n key: '(unknown)',\n type: 'atomic',\n states: {},\n on: [],\n always: [],\n entry: [],\n exit: [],\n invoke: [],\n }\n }\n\n if (state.count >= MAX_SERIALIZED_NODES) {\n return {\n id: node.id ?? '(truncated)',\n key: node.key ?? '(truncated)',\n type: node.type ?? 'atomic',\n states: {},\n on: [],\n always: [],\n entry: [],\n exit: [],\n invoke: [],\n }\n }\n\n if (state.seen.has(node)) {\n return {\n id: node.id ?? '(circular)',\n key: node.key ?? '(circular)',\n type: node.type ?? 'atomic',\n states: {},\n on: [],\n always: [],\n entry: [],\n exit: [],\n invoke: [],\n }\n }\n\n state.seen.add(node)\n state.count += 1\n\n const allTransitions: SerializedTransition[] = []\n if (node.transitions instanceof Map) {\n for (const [, tList] of node.transitions) {\n if (allTransitions.length >= MAX_TRANSITIONS_PER_NODE) break\n allTransitions.push(...serializeTransitionList(tList))\n if (allTransitions.length >= MAX_TRANSITIONS_PER_NODE) {\n allTransitions.length = MAX_TRANSITIONS_PER_NODE\n break\n }\n }\n }\n\n const always = Array.isArray(node.always) ? serializeTransitionList(node.always) : []\n const childEntries = Object.entries(node.states ?? {}).slice(0, MAX_CHILD_STATES)\n\n return {\n id: node.id,\n key: node.key,\n type: node.type,\n initial: node.initial?.target?.[0]?.key,\n states: Object.fromEntries(childEntries.map(([k, v]) => [k, serializeNode(v, state)])),\n on: allTransitions,\n always,\n entry: (node.entry ?? []).slice(0, MAX_ENTRY_EXIT_ACTIONS).map(serializeAction).filter(Boolean),\n exit: (node.exit ?? []).slice(0, MAX_ENTRY_EXIT_ACTIONS).map(serializeAction).filter(Boolean),\n invoke: serializeInvokes(node),\n sourceLocation: node.config?.__xstateDevtoolsSource ?? undefined,\n description: node.config?.description ?? undefined,\n }\n}\n\nexport function serializeMachine(\n machine: AnyStateMachine,\n sourceLocation?: string,\n): SerializedMachine {\n return {\n id: machine.id,\n root: serializeNode(machine.root, { seen: new WeakSet<object>(), count: 0 }),\n sourceLocation,\n }\n}\n","// Transport-agnostic XState inspection core.\n// Browser and server entrypoints supply their own transports.\nimport type { AnyActorRef } from 'xstate'\nimport type {\n ExtensionToPageMessage,\n PageToExtensionMessage,\n SerializedEvent,\n SerializedMachine,\n SerializedSnapshot,\n} from '../../extension/src/shared/types.js'\nimport {\n debugLog as baseDebugLog,\n infoLog as baseInfoLog,\n warnLog as baseWarnLog,\n} from './logging.js'\nimport { sanitize } from './sanitize.js'\nimport { serializeMachine } from './serialize.js'\n\nexport type Source = 'web' | 'srv'\n\nexport interface InspectorOptions {\n /**\n * Absolute filesystem root for the web app. When provided, web stack frames\n * like http://localhost:5173/app/... are remapped to <webSourceRoot>/app/...\n * so VS Code source links can open local files.\n */\n webSourceRoot?: string\n}\n\nexport interface Transport {\n /** Send a protocol message outbound (toward the panel). */\n send: (message: PageToExtensionMessage) => void\n /** Subscribe to inbound dispatch messages from the panel. Returns a teardown. */\n subscribe: (handler: (message: ExtensionToPageMessage) => void) => () => void\n}\n\ntype StateValue = string | { [key: string]: StateValue }\n\ninterface StateNodeLike {\n id: string\n key: string\n type: 'atomic' | 'compound' | 'parallel' | 'final' | 'history' | string\n parent?: StateNodeLike\n states?: Record<string, StateNodeLike>\n initial?: string | { target?: StateNodeLike[] }\n}\n\ninterface MachineLike {\n root: StateNodeLike\n getStateNodeById: (id: string) => StateNodeLike\n resolveState: (snapshot: {\n value: unknown\n context?: unknown\n status?: string\n output?: unknown\n error?: unknown\n historyValue?: unknown\n }) => unknown\n}\n\ninterface MutableActorRef extends AnyActorRef {\n logic?: MachineLike\n update?: (snapshot: unknown, event: { type: string; stateNodeId: string }) => void\n}\n\nfunction summarizeMessage(message: ExtensionToPageMessage | PageToExtensionMessage) {\n const summary: Record<string, unknown> = { type: message.type }\n if ('sessionId' in message) summary.sessionId = message.sessionId\n if ('stateNodeId' in message) summary.stateNodeId = message.stateNodeId\n if ('parentSessionId' in message && message.parentSessionId) {\n summary.parentSessionId = message.parentSessionId\n }\n if ('globalSeq' in message) summary.globalSeq = message.globalSeq\n if ('timestamp' in message) summary.timestamp = message.timestamp\n if (\n 'event' in message &&\n message.event &&\n typeof message.event === 'object' &&\n 'type' in message.event\n ) {\n summary.eventType = message.event.type\n }\n return summary\n}\n\nfunction summarizeInspectionEvent(event: any) {\n return {\n type: event?.type,\n sessionId: event?.actorRef?.sessionId,\n eventType:\n event?.type === '@xstate.event' && event?.event && typeof event.event === 'object'\n ? event.event.type\n : undefined,\n }\n}\n\nfunction debugLog(source: Source, message: string, details?: unknown) {\n baseDebugLog(`${source}:adapter`, message, details)\n}\n\nfunction infoLog(source: Source, message: string, details?: unknown) {\n baseInfoLog(`${source}:adapter`, message, details)\n}\n\nfunction warnLog(source: Source, message: string, details?: unknown) {\n baseWarnLog(`${source}:adapter`, message, details)\n}\n\nfunction isLibraryStackFrame(line: string): boolean {\n const normalized = line.replace(/\\\\/g, '/').toLowerCase()\n return (\n normalized.includes('/node_modules/xstate/') ||\n normalized.includes('/node_modules/@xstate/') ||\n normalized.includes('/@xstate-devtools/adapter/') ||\n normalized.includes('/packages/adapter/')\n )\n}\n\nfunction normalizeStackFrame(line: string): string {\n return line.trim().replace(/^at\\s+/, '')\n}\n\nfunction extractStackFrameLocation(frame: string): string {\n return frame.match(/\\((.*)\\)$/)?.[1] ?? frame\n}\n\nfunction isAnonymousOrEvalLocation(location: string): boolean {\n const normalized = location\n .trim()\n .toLowerCase()\n .replace(/^[./\\\\]+/, '')\n\n return (\n normalized === '<anonymous>' ||\n normalized === 'anonymous' ||\n normalized === '(anonymous)' ||\n normalized === 'eval' ||\n normalized === '<eval>' ||\n normalized === '[native code]'\n )\n}\n\nfunction hasFilesystemBackedPath(location: string): boolean {\n const trimmed = location.trim()\n if (!trimmed) return false\n\n const match = trimmed.match(/^(.*?)(?::\\d+)?(?::\\d+)?$/)\n const rawPath = (match?.[1] ?? trimmed).trim()\n if (!rawPath || isAnonymousOrEvalLocation(rawPath)) return false\n\n if (/^[a-zA-Z]:[\\\\/]/.test(rawPath)) return true\n if (rawPath.startsWith('/') || rawPath.startsWith('./') || rawPath.startsWith('../')) return true\n\n if (/^[a-zA-Z][a-zA-Z\\d+.-]*:\\/\\//.test(rawPath)) {\n try {\n const url = new URL(rawPath)\n if (url.protocol === 'file:') return true\n return url.pathname.startsWith('/@fs/')\n } catch {\n return false\n }\n }\n\n return false\n}\n\nfunction remapWebUrlLocationToFsPath(\n location: string,\n source: Source,\n options?: InspectorOptions,\n): string {\n if (source !== 'web' || !options?.webSourceRoot) return location\n\n const match = location.trim().match(/^(.*?)(?::(\\d+))?(?::(\\d+))?$/)\n if (!match) return location\n\n const [, rawPath, line, column] = match\n if (!rawPath || !/^https?:\\/\\//.test(rawPath)) return location\n\n try {\n const url = new URL(rawPath)\n const pathname = decodeURIComponent(url.pathname)\n if (!pathname.startsWith('/app/')) return location\n\n const root = options.webSourceRoot.replace(/\\/+$/, '')\n const filePath = `${root}${pathname}`\n const suffix = line ? `:${line}${column ? `:${column}` : ''}` : ''\n return `${filePath}${suffix}`\n } catch {\n return location\n }\n}\n\nexport function getSourceLocationFromStack(\n stack?: string,\n source: Source = 'web',\n options?: InspectorOptions,\n): string | undefined {\n const lines = stack?.split('\\n') ?? []\n\n for (let i = 0; i < lines.length; i += 1) {\n if (i <= 2) continue\n\n const line = lines[i]\n if (isLibraryStackFrame(line)) continue\n\n const normalizedFrame = normalizeStackFrame(line)\n const location = remapWebUrlLocationToFsPath(\n extractStackFrameLocation(normalizedFrame),\n source,\n options,\n )\n\n if (!hasFilesystemBackedPath(location)) continue\n\n const wrapped = normalizedFrame.match(/\\((.*)\\)$/)\n if (wrapped) {\n return normalizedFrame.replace(wrapped[1], location)\n }\n\n return location\n }\n\n return undefined\n}\n\nfunction getSourceLocation(source: Source, options?: InspectorOptions): string | undefined {\n try {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = 50\n const stack = new Error().stack\n Error.stackTraceLimit = oldLimit\n return getSourceLocationFromStack(stack, source, options)\n } catch {\n return undefined\n }\n}\n\nfunction serializeSnapshot(snapshot: any): SerializedSnapshot {\n return {\n value: snapshot?.value ?? null,\n context: sanitize(snapshot?.context),\n status: snapshot?.status ?? 'active',\n error: snapshot?.error ? sanitize(snapshot.error) : undefined,\n }\n}\n\nfunction safeSerializeSnapshot(actorRef: AnyActorRef): SerializedSnapshot {\n try {\n return serializeSnapshot(actorRef.getSnapshot())\n } catch {\n return { value: null, context: undefined, status: 'active' }\n }\n}\n\nfunction getActorDisplayName(actorRef: AnyActorRef): string | undefined {\n const actor = actorRef as {\n logic?: { id?: string; src?: unknown; name?: string } | undefined\n src?: unknown\n }\n\n const src = actor.src ?? actor.logic?.src\n if (typeof src === 'string' && src.length > 0) return src\n if (typeof actor.logic?.id === 'string' && actor.logic.id.length > 0) return actor.logic.id\n if (typeof actor.logic?.name === 'string' && actor.logic.name.length > 0) return actor.logic.name\n if (src && typeof src === 'object') {\n const namedSrc = src as { id?: string; name?: string }\n if (typeof namedSrc.id === 'string' && namedSrc.id.length > 0) return namedSrc.id\n if (typeof namedSrc.name === 'string' && namedSrc.name.length > 0) return namedSrc.name\n }\n return undefined\n}\n\nfunction getNodeInitialChild(node: StateNodeLike): StateNodeLike | null {\n if (!node.states) return null\n if (typeof node.initial === 'string') {\n return node.states[node.initial] ?? null\n }\n\n const target = Array.isArray(node.initial?.target) ? node.initial.target[0] : null\n return target ?? null\n}\n\nfunction encodeChildValue(child: StateNodeLike, childValue: StateValue): StateValue {\n if (child.type === 'atomic' || child.type === 'final' || child.type === 'history') {\n return child.key\n }\n\n return { [child.key]: childValue }\n}\n\nfunction getDefaultStateValue(node: StateNodeLike): StateValue {\n if (node.type === 'parallel') {\n const value: Record<string, StateValue> = {}\n for (const child of Object.values(node.states ?? {})) {\n value[child.key] = getDefaultSelectionValue(child)\n }\n return value\n }\n\n const initialChild = getNodeInitialChild(node)\n if (!initialChild) return {}\n return encodeChildValue(initialChild, getDefaultStateValue(initialChild))\n}\n\nfunction getDefaultSelectionValue(node: StateNodeLike): StateValue {\n if (node.type === 'atomic' || node.type === 'final' || node.type === 'history') {\n return node.key\n }\n\n return getDefaultStateValue(node)\n}\n\nfunction getExistingChildValue(value: unknown, childKey: string): StateValue | undefined {\n if (!value || typeof value !== 'object') return undefined\n return (value as Record<string, StateValue>)[childKey]\n}\n\nfunction getPathToRoot(target: StateNodeLike, root: StateNodeLike): StateNodeLike[] {\n const path: StateNodeLike[] = []\n let current: StateNodeLike | undefined = target\n\n while (current) {\n path.unshift(current)\n if (current.id === root.id) return path\n current = current.parent\n }\n\n throw new Error(`State node '${target.id}' is not part of machine '${root.id}'`)\n}\n\nfunction buildTargetStateValue(\n node: StateNodeLike,\n path: StateNodeLike[],\n currentValue: unknown,\n): StateValue {\n const [, ...restPath] = path\n\n if (restPath.length === 0) {\n if (node.type === 'parallel') {\n const next: Record<string, StateValue> = {}\n for (const child of Object.values(node.states ?? {})) {\n next[child.key] =\n getExistingChildValue(currentValue, child.key) ?? getDefaultSelectionValue(child)\n }\n return next\n }\n\n if (node.type === 'compound') {\n return getDefaultStateValue(node)\n }\n\n return node.key\n }\n\n const child = restPath[0]\n if (node.type === 'parallel') {\n const next: Record<string, StateValue> = {}\n for (const sibling of Object.values(node.states ?? {})) {\n if (sibling.key === child.key) {\n next[sibling.key] = buildTargetStateValue(\n sibling,\n restPath,\n getExistingChildValue(currentValue, sibling.key),\n )\n } else {\n next[sibling.key] =\n getExistingChildValue(currentValue, sibling.key) ?? getDefaultSelectionValue(sibling)\n }\n }\n return next\n }\n\n const childValue = buildTargetStateValue(\n child,\n restPath,\n getExistingChildValue(currentValue, child.key),\n )\n return encodeChildValue(child, childValue)\n}\n\nfunction setActiveState(actorRef: AnyActorRef, stateNodeId: string): void {\n const mutableActorRef = actorRef as MutableActorRef\n const machine = mutableActorRef.logic\n if (\n !machine?.getStateNodeById ||\n !machine.resolveState ||\n typeof mutableActorRef.update !== 'function'\n ) {\n throw new Error('Actor does not expose machine state mutation internals')\n }\n\n const currentSnapshot = actorRef.getSnapshot() as {\n value: unknown\n context?: unknown\n status?: string\n output?: unknown\n error?: unknown\n historyValue?: unknown\n }\n const targetNode = machine.getStateNodeById(stateNodeId)\n const path = getPathToRoot(targetNode, machine.root)\n const targetValue = buildTargetStateValue(machine.root, path, currentSnapshot?.value)\n\n const nextSnapshot = machine.resolveState({\n value: targetValue,\n context: currentSnapshot?.context,\n status: currentSnapshot?.status,\n output: currentSnapshot?.output,\n error: currentSnapshot?.error,\n historyValue: currentSnapshot?.historyValue,\n })\n\n mutableActorRef.update(nextSnapshot, {\n type: 'xstate.devtools.set-active-state',\n stateNodeId,\n })\n}\n\n// Cached on globalThis so HMR re-evaluating this module doesn't reset the\n// monotonic seq counter mid-session. The panel re-numbers messages on ingest\n// to merge multiple sources, but keeping a stable per-process seq still helps\n// when the panel reconnects to an already-running adapter.\nconst SEQ_KEY = '__xstate_devtools_global_seq__'\nfunction nextSeq(): number {\n const g = globalThis as Record<string, unknown>\n const cur = (g[SEQ_KEY] as number | undefined) ?? 0\n const next = cur + 1\n g[SEQ_KEY] = next\n return next\n}\n\nexport function createInspector(\n transport: Transport,\n source: Source,\n options: InspectorOptions = {},\n) {\n const actorRefs = new Map<string, AnyActorRef>()\n const actorMachines = new Map<string, SerializedMachine | null>()\n const prefix = `${source}:`\n const tag = (sessionId: string) => prefix + sessionId\n const tagOptional = (id: string | undefined) => (id ? prefix + id : undefined)\n const stripIfMine = (id: string): string | null =>\n id.startsWith(prefix) ? id.slice(prefix.length) : null\n\n function checkAndNotifyStop(actorRef: AnyActorRef) {\n let snap: any\n try {\n snap = actorRef.getSnapshot()\n } catch {\n return\n }\n if (snap?.status !== 'active') {\n const message: PageToExtensionMessage = {\n type: 'XSTATE_ACTOR_STOPPED',\n sessionId: tag(actorRef.sessionId),\n }\n debugLog(source, 'actor stopped; notifying transport', summarizeMessage(message))\n transport.send(message)\n actorRefs.delete(actorRef.sessionId)\n actorMachines.delete(actorRef.sessionId)\n }\n }\n\n const unsubscribe = transport.subscribe((message) => {\n debugLog(source, 'received message from transport', summarizeMessage(message))\n if (message.type === 'XSTATE_PANEL_CONNECTED') {\n // The devtools panel just connected (or reconnected). Re-broadcast every\n // currently-active actor so the panel is never blank because the MV3\n // service worker was killed between page load and panel open.\n infoLog(source, 'panel connected; resyncing actors', { actorCount: actorRefs.size })\n actorRefs.forEach((actorRef, sessionId) => {\n const machine = actorMachines.get(sessionId) ?? null\n const resyncMessage: PageToExtensionMessage = {\n type: 'XSTATE_ACTOR_REGISTERED',\n sessionId: tag(sessionId),\n parentSessionId: tagOptional((actorRef as any)._parent?.sessionId),\n displayName: getActorDisplayName(actorRef),\n machine,\n snapshot: safeSerializeSnapshot(actorRef),\n globalSeq: nextSeq(),\n timestamp: Date.now(),\n }\n debugLog(source, 'resyncing actor', summarizeMessage(resyncMessage))\n transport.send(resyncMessage)\n })\n return\n }\n if (message.type === 'XSTATE_DISPATCH') {\n const local = stripIfMine(message.sessionId)\n if (local === null) {\n debugLog(source, 'ignoring dispatch for different source', summarizeMessage(message))\n return // not for this transport source\n }\n const ref = actorRefs.get(local)\n if (ref) {\n try {\n debugLog(source, 'dispatching event to actor', {\n sessionId: local,\n eventType:\n message.event && typeof message.event === 'object' && 'type' in message.event\n ? message.event.type\n : undefined,\n })\n ref.send(message.event)\n } catch (e) {\n warnLog(source, 'dispatch error', { error: e, sessionId: local })\n }\n } else {\n warnLog(source, 'received dispatch for unknown actor', {\n sessionId: local,\n knownActors: actorRefs.size,\n })\n }\n return\n }\n if (message.type === 'XSTATE_SET_ACTIVE_STATE') {\n const local = stripIfMine(message.sessionId)\n if (local === null) {\n debugLog(\n source,\n 'ignoring state activation for different source',\n summarizeMessage(message),\n )\n return\n }\n\n const ref = actorRefs.get(local)\n if (!ref) {\n warnLog(source, 'received state activation for unknown actor', {\n sessionId: local,\n knownActors: actorRefs.size,\n })\n return\n }\n\n try {\n debugLog(source, 'setting active state on actor', summarizeMessage(message))\n setActiveState(ref, message.stateNodeId)\n const snapshotMessage: PageToExtensionMessage = {\n type: 'XSTATE_SNAPSHOT',\n sessionId: tag(local),\n snapshot: safeSerializeSnapshot(ref),\n timestamp: Date.now(),\n globalSeq: nextSeq(),\n }\n debugLog(\n source,\n 'sending snapshot after state activation',\n summarizeMessage(snapshotMessage),\n )\n transport.send(snapshotMessage)\n } catch (error) {\n warnLog(source, 'failed to set active state', {\n error,\n sessionId: local,\n stateNodeId: message.stateNodeId,\n })\n }\n }\n })\n\n // Notify the extension that the adapter is ready\n transport.send({ type: 'XSTATE_ADAPTER_READY' })\n\n infoLog(source, 'inspector created')\n\n const inspect = (inspectionEvent: any) => {\n debugLog(source, 'inspect callback invoked', summarizeInspectionEvent(inspectionEvent))\n if (inspectionEvent.type === '@xstate.actor') {\n const actorRef: AnyActorRef = inspectionEvent.actorRef\n const sessionId: string = actorRef.sessionId\n\n // Serialize machine and populate both Maps BEFORE subscribing so that\n // the Maps are fully consistent if complete()/error() ever fire\n // synchronously during subscribe() (e.g. an actor that starts in a\n // final state). Populating after subscribe introduced a race where\n // actorMachines.delete() in the callback was a no-op and the subsequent\n // actorMachines.set() would leak the entry permanently.\n const actorLogic = (actorRef as { logic?: unknown }).logic as any\n const machine = actorLogic?.root\n ? serializeMachine(\n actorLogic,\n actorLogic.config?.__xstateDevtoolsSource ?? getSourceLocation(source, options),\n )\n : null\n actorRefs.set(sessionId, actorRef)\n actorMachines.set(sessionId, machine)\n\n // Eagerly remove the actor from both maps when it stops so we don't\n // accumulate strong references to every short-lived actor indefinitely.\n // Without this, actors that stop silently (no further snapshot/event) are\n // only removed by checkAndNotifyStop — which never fires for them.\n const notifyStop = () => {\n if (actorRefs.has(sessionId)) {\n actorRefs.delete(sessionId)\n actorMachines.delete(sessionId)\n const stopMsg: PageToExtensionMessage = {\n type: 'XSTATE_ACTOR_STOPPED',\n sessionId: tag(sessionId),\n }\n debugLog(source, 'actor stopped; notifying transport', summarizeMessage(stopMsg))\n transport.send(stopMsg)\n }\n }\n try {\n actorRef.subscribe({ complete: notifyStop, error: notifyStop })\n } catch {\n // subscribe is best-effort; older actor implementations may not support it\n }\n\n const message: PageToExtensionMessage = {\n type: 'XSTATE_ACTOR_REGISTERED',\n sessionId: tag(sessionId),\n parentSessionId: tagOptional((actorRef as any)._parent?.sessionId),\n displayName: getActorDisplayName(actorRef),\n machine,\n snapshot: safeSerializeSnapshot(actorRef),\n globalSeq: nextSeq(),\n timestamp: Date.now(),\n }\n infoLog(source, 'registering actor with transport', {\n message: summarizeMessage(message),\n actorCount: actorRefs.size,\n hasMachine: machine !== null,\n })\n transport.send(message)\n } else if (inspectionEvent.type === '@xstate.snapshot') {\n const message: PageToExtensionMessage = {\n type: 'XSTATE_SNAPSHOT',\n sessionId: tag(inspectionEvent.actorRef.sessionId),\n snapshot: serializeSnapshot(inspectionEvent.snapshot),\n timestamp: Date.now(),\n globalSeq: nextSeq(),\n }\n debugLog(source, 'sending snapshot to transport', summarizeMessage(message))\n transport.send(message)\n checkAndNotifyStop(inspectionEvent.actorRef)\n } else if (inspectionEvent.type === '@xstate.event') {\n const message: PageToExtensionMessage = {\n type: 'XSTATE_EVENT',\n sessionId: tag(inspectionEvent.actorRef.sessionId),\n // sanitize() returns unknown; the inspected event keeps its { type, ... }\n // shape, so it is a SerializedEvent after deep-sanitizing.\n event: sanitize(inspectionEvent.event) as SerializedEvent,\n snapshotAfter: safeSerializeSnapshot(inspectionEvent.actorRef),\n timestamp: Date.now(),\n globalSeq: nextSeq(),\n }\n debugLog(source, 'sending event to transport', summarizeMessage(message))\n transport.send(message)\n checkAndNotifyStop(inspectionEvent.actorRef)\n } else {\n debugLog(\n source,\n 'ignoring unsupported inspection event',\n summarizeInspectionEvent(inspectionEvent),\n )\n }\n }\n\n function dispose() {\n infoLog(source, 'disposing inspector', { actorCount: actorRefs.size })\n unsubscribe()\n actorRefs.clear()\n actorMachines.clear()\n }\n\n return { inspect, dispose }\n}\n"],"mappings":"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","names":["debugLog","infoLog","warnLog","child"]}
@@ -0,0 +1,22 @@
1
+ interface InspectorOptions {
2
+ /**
3
+ * Absolute filesystem root for the web app. When provided, web stack frames
4
+ * like http://localhost:5173/app/... are remapped to <webSourceRoot>/app/...
5
+ * so VS Code source links can open local files.
6
+ */
7
+ webSourceRoot?: string;
8
+ }
9
+
10
+ declare global {
11
+ interface Window {
12
+ __XSTATE_DEVTOOLS__?: {
13
+ send: (message: unknown) => void;
14
+ };
15
+ }
16
+ }
17
+ declare function createAdapter(options?: InspectorOptions): {
18
+ inspect: (inspectionEvent: any) => void;
19
+ dispose: () => void;
20
+ };
21
+
22
+ export { createAdapter };
@@ -0,0 +1,22 @@
1
+ interface InspectorOptions {
2
+ /**
3
+ * Absolute filesystem root for the web app. When provided, web stack frames
4
+ * like http://localhost:5173/app/... are remapped to <webSourceRoot>/app/...
5
+ * so VS Code source links can open local files.
6
+ */
7
+ webSourceRoot?: string;
8
+ }
9
+
10
+ declare global {
11
+ interface Window {
12
+ __XSTATE_DEVTOOLS__?: {
13
+ send: (message: unknown) => void;
14
+ };
15
+ }
16
+ }
17
+ declare function createAdapter(options?: InspectorOptions): {
18
+ inspect: (inspectionEvent: any) => void;
19
+ dispose: () => void;
20
+ };
21
+
22
+ export { createAdapter };
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ import {
2
+ createAdapter
3
+ } from "./chunk-MHHRMHW5.js";
4
+ import "./chunk-3GM2SFT4.js";
5
+ export {
6
+ createAdapter
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}