@prometheus-ags/entity-graph-core 3.0.5 → 3.1.0

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/devtools/protocol.ts","../src/devtools/projection.ts","../src/devtools/inspection.ts","../src/devtools/relationships.ts","../src/devtools/time-travel.ts","../src/devtools/views.ts","../src/devtools/previews.ts","../src/devtools/controller.ts","../src/devtools/client.ts"],"names":["reference","encodedBytes","base","event"],"mappings":"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","file":"devtools.mjs","sourcesContent":["import type { GraphState } from \"../graph\";\n\n/** Stable wire protocol identifier for every DevTools envelope. */\nexport const GRAPH_DEVTOOLS_PROTOCOL = \"prometheus.entity-graph.devtools\" as const;\n\n/** Current wire protocol major. Incompatible envelopes must be rejected. */\nexport const GRAPH_DEVTOOLS_PROTOCOL_VERSION = 1 as const;\n\nexport type GraphDevtoolsChangeCategory =\n | \"entity\"\n | \"patch\"\n | \"entity-state\"\n | \"sync\"\n | \"list\"\n | \"store\";\n\nexport type GraphDevtoolsChangeAction = \"added\" | \"updated\" | \"removed\" | \"replaced\";\n\nexport interface GraphDevtoolsCounts {\n entityTypes: number;\n entities: number;\n patchedEntities: number;\n entityStates: number;\n syncMetadata: number;\n lists: number;\n listMemberships: number;\n fetching: number;\n stale: number;\n errors: number;\n}\n\nexport interface GraphDevtoolsChange {\n category: GraphDevtoolsChangeCategory;\n action: GraphDevtoolsChangeAction;\n /** Entity type, entity-state key, or list query key. */\n key: string;\n /** Entity id when the change targets one normalized entity. */\n id?: string;\n beforeCount?: number;\n afterCount?: number;\n valueState:\n | \"hidden-by-policy\"\n | \"included\"\n | \"redacted\"\n | \"redaction-error\"\n | \"truncated\";\n /** Omitted under the default metadata-only policy. */\n before?: unknown;\n /** Omitted under the default metadata-only policy. */\n after?: unknown;\n}\n\nexport interface GraphDevtoolsCapabilities {\n protocolVersion: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n metadataOnlyByDefault: true;\n commands: ReadonlyArray<GraphDevtoolsCommandName>;\n features: ReadonlyArray<\n | \"semantic-events\"\n | \"diagnostic-events\"\n | \"bounded-history\"\n | \"multi-client\"\n | \"multi-store\"\n | \"entity-inspection\"\n | \"view-inspection\"\n | \"relationship-inspection\"\n | \"local-preview\"\n | \"snapshot-history\"\n | \"time-travel\"\n | \"history-import\"\n >;\n limits: {\n historyEvents: number;\n historyBytes: number;\n eventBytes: number;\n snapshots: number;\n snapshotBytes: number;\n };\n}\n\nexport type GraphDevtoolsSnapshotReference =\n | {\n cursor: number;\n capturedAt: string;\n eventSequence: number | null;\n label?: string;\n status: \"retained\";\n bytes: number;\n }\n | {\n cursor: number;\n capturedAt: string;\n eventSequence: number | null;\n label?: string;\n status: \"unavailable\";\n reason: \"retention-disabled\" | \"capture-failed\" | \"oversize\";\n };\n\nexport interface GraphDevtoolsSnapshotHistoryStatus {\n mode: \"live\" | \"rewound\";\n cursor: number | null;\n source: \"retained\" | \"import\" | null;\n retainedSnapshots: number;\n retainedBytes: number;\n snapshotLimit: number;\n byteLimit: number;\n baselineCursor: number | null;\n oldestCursor: number | null;\n newestCursor: number | null;\n latestCursor: number | null;\n lastUnavailable: Extract<GraphDevtoolsSnapshotReference, { status: \"unavailable\" }> | null;\n importCandidate: {\n candidateId: string;\n snapshots: number;\n bytes: number;\n } | null;\n}\n\nexport interface GraphDevtoolsEventBase {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n storeId: string;\n sequence: number;\n eventId: string;\n /** For v1 mutation events one event represents one Zustand publication. */\n correlationId: string;\n observedAt: string;\n}\n\nexport interface GraphDevtoolsMutationEvent extends GraphDevtoolsEventBase {\n type: \"mutation\";\n payload: {\n /** Capture outcome at this publication; later eviction does not rewrite the event. */\n snapshot: GraphDevtoolsSnapshotReference;\n changes: GraphDevtoolsChange[];\n /** Entity identities touched by this exact publication. */\n affectedEntities?: GraphDevtoolsViewMembership[];\n /** Registered views affected at this publication boundary. */\n affectedViewIds?: string[];\n before: GraphDevtoolsCounts;\n after: GraphDevtoolsCounts;\n /** Time spent projecting the already-completed store publication. */\n projectionDurationMs: number;\n valuesTruncated: boolean;\n /** Semantic changes omitted only when metadata itself exceeds the event byte limit. */\n changesOmitted: number;\n };\n}\n\nexport interface GraphDevtoolsLifecycleEvent extends GraphDevtoolsEventBase {\n type: \"lifecycle\";\n payload: {\n state: \"attached\" | \"client-connected\" | \"client-disconnected\" | \"disposed\";\n clientId?: string;\n activeClients: number;\n };\n}\n\nexport interface GraphDevtoolsDiagnosticEvent extends GraphDevtoolsEventBase {\n type: \"diagnostic\";\n payload: {\n code: \"projection-failed\";\n message: string;\n /** The graph publication is still captured even when semantic projection fails. */\n snapshot: GraphDevtoolsSnapshotReference;\n };\n}\n\nexport interface GraphDevtoolsViewEvent extends GraphDevtoolsEventBase {\n type: \"view\";\n payload: {\n state: \"registered\" | \"membership-changed\" | \"unregistered\";\n viewId: string;\n membershipCount: number;\n };\n}\n\nexport interface GraphDevtoolsTimeTravelEvent extends GraphDevtoolsEventBase {\n type: \"time-travel\";\n payload: {\n state: \"rewound\" | \"live\";\n cursor: number | null;\n previousCursor: number | null;\n source: \"retained\" | \"import\" | null;\n previousSource: \"retained\" | \"import\" | null;\n reason: \"command\" | \"import\" | \"mutation\";\n };\n}\n\nexport type GraphDevtoolsEvent =\n | GraphDevtoolsMutationEvent\n | GraphDevtoolsLifecycleEvent\n | GraphDevtoolsDiagnosticEvent\n | GraphDevtoolsViewEvent\n | GraphDevtoolsTimeTravelEvent;\n\nexport interface GraphDevtoolsSnapshot {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n storeId: string;\n capturedAt: string;\n counts: GraphDevtoolsCounts;\n history: GraphDevtoolsHistoryStatus;\n snapshots: GraphDevtoolsSnapshotHistoryStatus;\n}\n\nexport interface GraphDevtoolsHistoryStatus {\n retainedEvents: number;\n retainedBytes: number;\n eventLimit: number;\n byteLimit: number;\n oldestSequence: number | null;\n newestSequence: number | null;\n}\n\nexport interface GraphDevtoolsEntityError {\n kind: \"entity-fetch\";\n message: string;\n /** `null` when the graph only retained the compatibility error string. */\n retryable: boolean | null;\n}\n\nexport interface GraphDevtoolsEntityDirtyReason {\n kind: \"local-patch\" | \"sync-state\";\n field: string | null;\n change: \"added\" | \"changed\" | \"unsynced\";\n}\n\nexport interface GraphDevtoolsEntityRecord {\n key: string;\n type: string;\n id: string;\n presence: \"present\" | \"missing-canonical\";\n canonical: unknown | null;\n patch: unknown | null;\n merged: unknown | null;\n dirty: boolean;\n dirtyReasons: GraphDevtoolsEntityDirtyReason[];\n entityState: {\n isFetching: boolean;\n lastFetchedAt: string | null;\n stale: boolean;\n error: GraphDevtoolsEntityError | null;\n };\n sync: {\n synced: boolean;\n origin: \"server\" | \"client\" | \"optimistic\";\n updatedAt: string | null;\n };\n /** Store-local revision; increments once per publication that touches this entity. */\n revision: number;\n /** Stable IDs of registered views currently displaying this entity. */\n viewIds: string[];\n}\n\nexport interface GraphDevtoolsEntityRecordsSnapshot {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n storeId: string;\n capturedAt: string;\n entityRecords: GraphDevtoolsEntityRecord[];\n}\n\nexport interface GraphDevtoolsViewDefinition {\n viewId: string;\n label: string;\n kind: \"entity\" | \"list\";\n entityType: string;\n queryKey?: string | null;\n}\n\nexport interface GraphDevtoolsViewMembership {\n type: string;\n id: string;\n}\n\nexport interface GraphDevtoolsViewListStats {\n visibleCount: number;\n graphCount: number;\n total: number | null;\n isFetching: boolean;\n isFetchingMore: boolean;\n stale: boolean;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n}\n\nexport interface GraphDevtoolsViewRecord extends GraphDevtoolsViewDefinition {\n queryKey: string | null;\n registeredAt: string;\n lastRenderedAt: string | null;\n renderCount: number;\n /** Active rendered registrations contributing to this view record. */\n subscriberCount: number;\n membership: GraphDevtoolsViewMembership[];\n list: GraphDevtoolsViewListStats | null;\n}\n\nexport interface GraphDevtoolsEntityViewMembership extends GraphDevtoolsViewMembership {\n viewIds: string[];\n}\n\nexport interface GraphDevtoolsViewsSnapshot {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n storeId: string;\n capturedAt: string;\n views: GraphDevtoolsViewRecord[];\n entityViewMembership: GraphDevtoolsEntityViewMembership[];\n}\n\nexport interface GraphDevtoolsRelationshipEndpoint {\n type: string;\n id: string;\n field?: string | null;\n}\n\nexport interface GraphDevtoolsRelationship {\n relation: string;\n cardinality: \"belongsTo\" | \"hasMany\" | \"manyToMany\";\n direction: \"outgoing\" | \"reverse\";\n source: GraphDevtoolsRelationshipEndpoint;\n target: GraphDevtoolsRelationshipEndpoint;\n status: \"resolved\" | \"missing-target\";\n}\n\nexport interface GraphDevtoolsRelationshipsSnapshot {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n storeId: string;\n capturedAt: string;\n relationships: GraphDevtoolsRelationship[];\n}\n\nexport interface GraphDevtoolsPreviewEntityPatchPayload {\n type: string;\n id: string;\n patch: Record<string, unknown>;\n}\n\nexport interface GraphDevtoolsRestoreEntityPreviewPayload {\n previewId: string;\n}\n\nexport interface GraphDevtoolsRewindPayload {\n cursor: number;\n}\n\nexport interface GraphDevtoolsRewindReceipt {\n status: \"rewound\";\n cursor: number;\n source: \"retained\";\n previousCursor: number | null;\n previousSource: \"retained\" | \"import\" | null;\n changedAt: string;\n}\n\nexport interface GraphDevtoolsExpiredHistoryReceipt {\n status: \"expired-history\";\n cursor: number;\n reason: \"evicted\" | \"cleared\" | \"unavailable\";\n unavailableReason?: Extract<GraphDevtoolsSnapshotReference, { status: \"unavailable\" }>[\"reason\"];\n oldestCursor: number | null;\n newestCursor: number | null;\n latestCursor: number | null;\n}\n\nexport type GraphDevtoolsRewindResult =\n | GraphDevtoolsRewindReceipt\n | GraphDevtoolsExpiredHistoryReceipt;\n\nexport interface GraphDevtoolsReturnToLiveReceipt {\n status: \"live\";\n cursor: null;\n previousCursor: number;\n previousSource: \"retained\" | \"import\";\n reason: \"command\";\n changedAt: string;\n}\n\nexport type GraphDevtoolsGraphData = Pick<\n GraphState,\n \"entities\" | \"patches\" | \"entityStates\" | \"syncMetadata\" | \"lists\"\n>;\n\nexport interface GraphDevtoolsHistoryImportSnapshot {\n cursor: number;\n capturedAt: string;\n eventSequence: number | null;\n data: GraphDevtoolsGraphData;\n}\n\nexport interface GraphDevtoolsHistoryImportEnvelope {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n storeId: string;\n exportedAt: string;\n snapshots: ReadonlyArray<GraphDevtoolsHistoryImportSnapshot>;\n}\n\nexport interface GraphDevtoolsInspectHistoryImportPayload {\n candidate: unknown;\n}\n\nexport interface GraphDevtoolsHistoryImportInspectionReceipt {\n status: \"awaiting-confirmation\";\n candidateId: string;\n storeId: string;\n protocolVersion: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n inspectedAt: string;\n bytes: number;\n snapshots: ReadonlyArray<{\n cursor: number;\n capturedAt: string;\n eventSequence: number | null;\n bytes: number;\n }>;\n}\n\nexport interface GraphDevtoolsHistoryImportRejectedReceipt {\n status: \"rejected\";\n reason:\n | \"invalid-envelope\"\n | \"wrong-store\"\n | \"unsupported-version\"\n | \"snapshot-limit-exceeded\"\n | \"byte-limit-exceeded\"\n | \"time-travel-unavailable\"\n | \"disposed\";\n message: string;\n}\n\nexport type GraphDevtoolsHistoryImportInspectionResult =\n | GraphDevtoolsHistoryImportInspectionReceipt\n | GraphDevtoolsHistoryImportRejectedReceipt;\n\nexport interface GraphDevtoolsConfirmHistoryImportPayload {\n candidateId: string;\n cursor: number;\n confirm: true;\n}\n\nexport interface GraphDevtoolsHistoryImportRestoreReceipt {\n status: \"rewound\";\n source: \"import\";\n candidateId: string;\n cursor: number;\n previousCursor: number | null;\n previousSource: \"retained\" | \"import\" | null;\n changedAt: string;\n}\n\nexport interface GraphDevtoolsHistoryImportRestoreRejectedReceipt {\n status: \"rejected\";\n reason:\n | \"candidate-not-found\"\n | \"snapshot-not-found\"\n | \"restore-failed\"\n | \"time-travel-unavailable\"\n | \"disposed\";\n message: string;\n}\n\nexport type GraphDevtoolsHistoryImportRestoreResult =\n | GraphDevtoolsHistoryImportRestoreReceipt\n | GraphDevtoolsHistoryImportRestoreRejectedReceipt;\n\nexport interface GraphDevtoolsPreviewAppliedReceipt {\n previewId: string;\n entity: { type: string; id: string };\n priorPatch: unknown | null;\n previewPatch: unknown;\n appliedPatch: unknown;\n baselineRevision: number;\n previewRevision: number;\n appliedAt: string;\n}\n\nexport interface GraphDevtoolsPreviewRestoredReceipt {\n previewId: string;\n status: \"restored\";\n restoredPatch: unknown | null;\n observedRevision: number;\n restoredAt: string;\n}\n\nexport interface GraphDevtoolsPreviewConflictReceipt {\n previewId: string;\n status: \"conflict\";\n reason: \"entity-changed-since-preview\";\n expectedRevision: number;\n observedRevision: number;\n currentPatch: unknown | null;\n priorPatch: unknown | null;\n}\n\nexport type GraphDevtoolsPreviewRestoreReceipt =\n | GraphDevtoolsPreviewRestoredReceipt\n | GraphDevtoolsPreviewConflictReceipt;\n\nexport type GraphDevtoolsCommandName =\n | \"get-capabilities\"\n | \"get-snapshot\"\n | \"get-history\"\n | \"get-history-status\"\n | \"get-entity-records\"\n | \"get-views\"\n | \"get-relationships\"\n | \"preview-entity-patch\"\n | \"restore-entity-preview\"\n | \"get-time-travel-status\"\n | \"rewind\"\n | \"return-to-live\"\n | \"inspect-history-import\"\n | \"confirm-history-import\"\n | \"clear-history\";\n\nexport interface GraphDevtoolsCommand {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n requestId: string;\n storeId: string;\n command: GraphDevtoolsCommandName;\n payload?: unknown;\n}\n\nexport type GraphDevtoolsResultPayload =\n | GraphDevtoolsCapabilities\n | GraphDevtoolsSnapshot\n | GraphDevtoolsHistoryStatus\n | GraphDevtoolsEntityRecordsSnapshot\n | GraphDevtoolsViewsSnapshot\n | GraphDevtoolsRelationshipsSnapshot\n | GraphDevtoolsPreviewAppliedReceipt\n | GraphDevtoolsPreviewRestoreReceipt\n | GraphDevtoolsSnapshotHistoryStatus\n | GraphDevtoolsRewindResult\n | GraphDevtoolsReturnToLiveReceipt\n | GraphDevtoolsHistoryImportInspectionResult\n | GraphDevtoolsHistoryImportRestoreResult\n | ReadonlyArray<GraphDevtoolsEvent>\n | { cleared: true };\n\nexport type GraphDevtoolsResult =\n | {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n requestId: string;\n storeId: string;\n ok: true;\n result: GraphDevtoolsResultPayload;\n }\n | {\n protocol: typeof GRAPH_DEVTOOLS_PROTOCOL;\n version: typeof GRAPH_DEVTOOLS_PROTOCOL_VERSION;\n requestId: string;\n storeId: string;\n ok: false;\n error: {\n code:\n | \"invalid-envelope\"\n | \"invalid-payload\"\n | \"unsupported-version\"\n | \"wrong-store\"\n | \"unsupported-command\"\n | \"entity-not-found\"\n | \"preview-not-found\"\n | \"snapshot-not-found\"\n | \"time-travel-unavailable\"\n | \"not-rewound\"\n | \"confirmation-required\"\n | \"disposed\";\n message: string;\n };\n };\n\nexport interface GraphDevtoolsValueContext {\n storeId: string;\n category: GraphDevtoolsChangeCategory;\n key: string;\n id?: string;\n /** Empty means the redactor is receiving the whole current change value. */\n fieldPath: ReadonlyArray<string | number>;\n side: \"before\" | \"after\";\n destination: \"history\" | \"inspection\";\n}\n\n/** Values never leave the graph under the default metadata-only policy. */\nexport type GraphDevtoolsValuePolicy =\n | { mode?: \"metadata-only\" }\n | {\n mode: \"include\";\n redact?: (value: unknown, context: GraphDevtoolsValueContext) => unknown;\n };\n\nexport interface GraphDevtoolsTransport {\n request(command: unknown): Promise<GraphDevtoolsResult>;\n subscribe(listener: (event: GraphDevtoolsEvent) => void): () => void;\n close(): void;\n}\n","import type { GraphState } from \"../graph\";\nimport type {\n GraphDevtoolsChange,\n GraphDevtoolsCounts,\n GraphDevtoolsValueContext,\n GraphDevtoolsValuePolicy,\n} from \"./protocol\";\n\ntype GraphDataState = Pick<\n GraphState,\n \"entities\" | \"patches\" | \"entityStates\" | \"syncMetadata\" | \"lists\"\n>;\n\nfunction countRecordEntries(record: Record<string, unknown>): number {\n return Object.keys(record).length;\n}\n\nexport function collectGraphDevtoolsCounts(state: GraphDataState): GraphDevtoolsCounts {\n let entities = 0;\n let entityTypes = 0;\n for (const bucket of Object.values(state.entities)) {\n const count = Object.keys(bucket).length;\n if (count > 0) entityTypes += 1;\n entities += count;\n }\n\n let patchedEntities = 0;\n for (const bucket of Object.values(state.patches)) {\n for (const patch of Object.values(bucket)) {\n if (Object.keys(patch).length > 0) patchedEntities += 1;\n }\n }\n\n let listMemberships = 0;\n let fetching = 0;\n let stale = 0;\n let errors = 0;\n for (const list of Object.values(state.lists)) {\n listMemberships += list.ids.length;\n if (list.isFetching || list.isFetchingMore) fetching += 1;\n if (list.stale) stale += 1;\n if (list.error !== null || list.lastError !== null) errors += 1;\n }\n for (const entityState of Object.values(state.entityStates)) {\n if (entityState.isFetching) fetching += 1;\n if (entityState.stale) stale += 1;\n if (entityState.error !== null) errors += 1;\n }\n\n return {\n entityTypes,\n entities,\n patchedEntities,\n entityStates: countRecordEntries(state.entityStates),\n syncMetadata: countRecordEntries(state.syncMetadata),\n lists: countRecordEntries(state.lists),\n listMemberships,\n fetching,\n stale,\n errors,\n };\n}\n\nfunction withValues(\n change: Omit<GraphDevtoolsChange, \"valueState\" | \"before\" | \"after\">,\n before: unknown,\n after: unknown,\n policy: GraphDevtoolsValuePolicy,\n storeId: string,\n): GraphDevtoolsChange {\n if (policy.mode !== \"include\") return { ...change, valueState: \"hidden-by-policy\" };\n const redact = policy.redact ?? ((value: unknown) => value);\n const baseContext: Omit<GraphDevtoolsValueContext, \"side\"> = {\n storeId,\n category: change.category,\n key: change.key,\n ...(change.id !== undefined ? { id: change.id } : {}),\n fieldPath: [],\n destination: \"history\",\n };\n const projectValue = (value: unknown, side: GraphDevtoolsValueContext[\"side\"]) => {\n try {\n return { value: toGraphDevtoolsTransportValue(redact(value, { ...baseContext, side })), failed: false };\n } catch {\n return { value: { $type: \"redaction-error\" }, failed: true };\n }\n };\n const projectedBefore = before !== undefined ? projectValue(before, \"before\") : undefined;\n const projectedAfter = after !== undefined ? projectValue(after, \"after\") : undefined;\n return {\n ...change,\n valueState:\n projectedBefore?.failed || projectedAfter?.failed\n ? \"redaction-error\"\n : policy.redact\n ? \"redacted\"\n : \"included\",\n ...(projectedBefore ? { before: projectedBefore.value } : {}),\n ...(projectedAfter ? { after: projectedAfter.value } : {}),\n };\n}\n\n/** Convert graph values into deterministic JSON-safe DevTools payloads. */\nexport function toGraphDevtoolsTransportValue(value: unknown, seen = new WeakSet<object>()): unknown {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (typeof value === \"bigint\") return { $type: \"bigint\", value: value.toString() };\n if (typeof value === \"undefined\") return { $type: \"undefined\" };\n if (typeof value === \"function\" || typeof value === \"symbol\") return { $type: typeof value };\n if (value instanceof Date) return { $type: \"date\", value: value.toISOString() };\n if (value instanceof Error) return { $type: \"error\", name: value.name, message: value.message };\n if (typeof value !== \"object\") return String(value);\n if (seen.has(value)) return { $type: \"circular\" };\n seen.add(value);\n try {\n if (Array.isArray(value)) return value.map((item) => toGraphDevtoolsTransportValue(item, seen));\n const normalized: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n normalized[key] = toGraphDevtoolsTransportValue(item, seen);\n }\n return normalized;\n } finally {\n seen.delete(value);\n }\n}\n\nfunction actionFor(before: unknown, after: unknown): GraphDevtoolsChange[\"action\"] {\n if (before === undefined) return \"added\";\n if (after === undefined) return \"removed\";\n return \"updated\";\n}\n\nfunction diffNestedRecords(\n category: \"entity\" | \"patch\",\n before: Record<string, Record<string, Record<string, unknown>>>,\n after: Record<string, Record<string, Record<string, unknown>>>,\n policy: GraphDevtoolsValuePolicy,\n storeId: string,\n): GraphDevtoolsChange[] {\n const changes: GraphDevtoolsChange[] = [];\n for (const type of new Set([...Object.keys(before), ...Object.keys(after)])) {\n const beforeBucket = before[type] ?? {};\n const afterBucket = after[type] ?? {};\n if (beforeBucket === afterBucket) continue;\n for (const id of new Set([...Object.keys(beforeBucket), ...Object.keys(afterBucket)])) {\n const previous = beforeBucket[id];\n const current = afterBucket[id];\n if (previous === current) continue;\n changes.push(withValues({\n category,\n action: actionFor(previous, current),\n key: type,\n id,\n }, previous, current, policy, storeId));\n }\n }\n return changes;\n}\n\nfunction diffFlatRecords(\n category: \"entity-state\" | \"sync\",\n before: Record<string, unknown>,\n after: Record<string, unknown>,\n policy: GraphDevtoolsValuePolicy,\n storeId: string,\n): GraphDevtoolsChange[] {\n const changes: GraphDevtoolsChange[] = [];\n if (before === after) return changes;\n for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {\n const previous = before[key];\n const current = after[key];\n if (previous === current) continue;\n changes.push(withValues({\n category,\n action: actionFor(previous, current),\n key,\n }, previous, current, policy, storeId));\n }\n return changes;\n}\n\nfunction diffLists(\n before: GraphState[\"lists\"],\n after: GraphState[\"lists\"],\n policy: GraphDevtoolsValuePolicy,\n storeId: string,\n): GraphDevtoolsChange[] {\n const changes: GraphDevtoolsChange[] = [];\n if (before === after) return changes;\n for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {\n const previous = before[key];\n const current = after[key];\n if (previous === current) continue;\n changes.push(withValues({\n category: \"list\",\n action: actionFor(previous, current),\n key,\n beforeCount: previous?.ids.length ?? 0,\n afterCount: current?.ids.length ?? 0,\n }, previous, current, policy, storeId));\n }\n return changes;\n}\n\n/**\n * Project one Zustand publication into semantic graph effects. This is the\n * authoritative boundary because it also observes direct `store.setState`\n * hydration, rollback, restore, and external adapter writes.\n */\nexport function projectGraphDevtoolsChanges(\n before: GraphDataState,\n after: GraphDataState,\n policy: GraphDevtoolsValuePolicy,\n storeId: string,\n): GraphDevtoolsChange[] {\n return [\n ...diffNestedRecords(\"entity\", before.entities, after.entities, policy, storeId),\n ...diffNestedRecords(\"patch\", before.patches, after.patches, policy, storeId),\n ...diffFlatRecords(\"entity-state\", before.entityStates, after.entityStates, policy, storeId),\n ...diffFlatRecords(\"sync\", before.syncMetadata, after.syncMetadata, policy, storeId),\n ...diffLists(before.lists, after.lists, policy, storeId),\n ];\n}\n","import {\n EMPTY_ENTITY_STATE,\n EMPTY_SYNC_METADATA,\n type GraphState,\n} from \"../graph\";\nimport type {\n GraphDevtoolsChange,\n GraphDevtoolsEntityDirtyReason,\n GraphDevtoolsEntityRecord,\n GraphDevtoolsEntityRecordsSnapshot,\n GraphDevtoolsValueContext,\n GraphDevtoolsValuePolicy,\n} from \"./protocol\";\nimport {\n GRAPH_DEVTOOLS_PROTOCOL,\n GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n} from \"./protocol\";\nimport { toGraphDevtoolsTransportValue } from \"./projection\";\n\ntype GraphInspectionState = Pick<\n GraphState,\n \"entities\" | \"patches\" | \"entityStates\" | \"syncMetadata\"\n>;\n\ntype GraphEntityIdentityState = Pick<GraphState, \"entities\" | \"patches\">;\n\nfunction wireEntityKey(type: string, id: string): string {\n return `${type}:${id}`;\n}\n\n/** Collision-free key for controller-owned maps; never exposed as a wire identity. */\nexport function graphDevtoolsEntityIdentityKey(type: string, id: string): string {\n return JSON.stringify([type, id]);\n}\n\nexport function parseGraphDevtoolsEntityIdentityKey(\n key: string,\n): { type: string; id: string } | null {\n try {\n const value: unknown = JSON.parse(key);\n if (\n Array.isArray(value) && value.length === 2 &&\n typeof value[0] === \"string\" && typeof value[1] === \"string\"\n ) return { type: value[0], id: value[1] };\n } catch {\n // Internal map keys may be absent or stale; never surface parser failures.\n }\n return null;\n}\n\nfunction splitEntityKey(key: string): { type: string; id: string } | null {\n const separator = key.indexOf(\":\");\n if (separator < 1 || separator === key.length - 1) return null;\n return { type: key.slice(0, separator), id: key.slice(separator + 1) };\n}\n\n/** Resolve legacy `type:id` metadata keys against actual graph buckets first. */\nexport function graphDevtoolsEntityIdentitiesForStateKey(\n state: GraphEntityIdentityState,\n key: string,\n): Array<{ type: string; id: string }> {\n const matches: Array<{ type: string; id: string }> = [];\n const types = new Set([...Object.keys(state.entities), ...Object.keys(state.patches)]);\n for (const type of types) {\n const ids = new Set([\n ...Object.keys(state.entities[type] ?? {}),\n ...Object.keys(state.patches[type] ?? {}),\n ]);\n for (const id of ids) {\n if (wireEntityKey(type, id) === key) matches.push({ type, id });\n }\n }\n if (matches.length > 0) return matches;\n const fallback = splitEntityKey(key);\n return fallback ? [fallback] : [];\n}\n\nfunction toIsoTimestamp(value: number | null): string | null {\n return value === null ? null : new Date(value).toISOString();\n}\n\nfunction compareEntityIdentity(\n left: { type: string; id: string },\n right: { type: string; id: string },\n): number {\n if (left.type !== right.type) return left.type < right.type ? -1 : 1;\n if (left.id === right.id) return 0;\n return left.id < right.id ? -1 : 1;\n}\n\nfunction collectEntityIdentities(state: GraphInspectionState): Array<{ type: string; id: string }> {\n const identities = new Map<string, { type: string; id: string }>();\n for (const [type, bucket] of Object.entries(state.entities)) {\n for (const id of Object.keys(bucket)) {\n identities.set(graphDevtoolsEntityIdentityKey(type, id), { type, id });\n }\n }\n for (const [type, bucket] of Object.entries(state.patches)) {\n for (const id of Object.keys(bucket)) {\n identities.set(graphDevtoolsEntityIdentityKey(type, id), { type, id });\n }\n }\n for (const key of [...Object.keys(state.entityStates), ...Object.keys(state.syncMetadata)]) {\n for (const identity of graphDevtoolsEntityIdentitiesForStateKey(state, key)) {\n identities.set(graphDevtoolsEntityIdentityKey(identity.type, identity.id), identity);\n }\n }\n return [...identities.values()].sort(compareEntityIdentity);\n}\n\nfunction dirtyReasonsFor(\n canonical: Record<string, unknown> | undefined,\n patch: Record<string, unknown> | undefined,\n synced: boolean,\n): GraphDevtoolsEntityDirtyReason[] {\n const reasons: GraphDevtoolsEntityDirtyReason[] = [];\n for (const field of Object.keys(patch ?? {}).sort()) {\n reasons.push({\n kind: \"local-patch\",\n field,\n change: canonical && Object.hasOwn(canonical, field) ? \"changed\" : \"added\",\n });\n }\n if (!synced) {\n reasons.push({ kind: \"sync-state\", field: null, change: \"unsynced\" });\n }\n return reasons;\n}\n\nexport function projectGraphDevtoolsInspectionValue(\n value: unknown,\n policy: GraphDevtoolsValuePolicy,\n context: Omit<GraphDevtoolsValueContext, \"fieldPath\" | \"side\" | \"destination\">,\n): unknown {\n if (policy.mode !== \"include\") return { $type: \"hidden-by-policy\" };\n try {\n const projected = policy.redact\n ? policy.redact(value, {\n ...context,\n fieldPath: [],\n side: \"after\",\n destination: \"inspection\",\n })\n : value;\n return toGraphDevtoolsTransportValue(projected);\n } catch {\n return { $type: \"redaction-error\" };\n }\n}\n\nfunction recordFor(\n state: GraphInspectionState,\n storeId: string,\n type: string,\n id: string,\n revisions: ReadonlyMap<string, number>,\n valuePolicy: GraphDevtoolsValuePolicy,\n): GraphDevtoolsEntityRecord {\n const key = wireEntityKey(type, id);\n const identityKey = graphDevtoolsEntityIdentityKey(type, id);\n const canonical = state.entities[type]?.[id];\n const storedPatch = state.patches[type]?.[id];\n const patch = storedPatch && Object.keys(storedPatch).length > 0 ? storedPatch : undefined;\n const entityState = state.entityStates[key] ?? EMPTY_ENTITY_STATE;\n const sync = state.syncMetadata[key] ?? EMPTY_SYNC_METADATA;\n const dirtyReasons = dirtyReasonsFor(canonical, patch, sync.synced);\n\n return {\n key,\n type,\n id,\n presence: canonical ? \"present\" : \"missing-canonical\",\n canonical: canonical\n ? projectGraphDevtoolsInspectionValue(canonical, valuePolicy, { storeId, category: \"entity\", key: type, id })\n : null,\n patch: patch\n ? projectGraphDevtoolsInspectionValue(patch, valuePolicy, { storeId, category: \"patch\", key: type, id })\n : null,\n merged: canonical\n ? projectGraphDevtoolsInspectionValue(\n { ...canonical, ...(patch ?? {}) },\n valuePolicy,\n { storeId, category: \"entity\", key: type, id },\n )\n : null,\n dirty: dirtyReasons.length > 0,\n dirtyReasons,\n entityState: {\n isFetching: entityState.isFetching,\n lastFetchedAt: toIsoTimestamp(entityState.lastFetched),\n stale: entityState.stale,\n error: entityState.error === null\n ? null\n : {\n kind: \"entity-fetch\",\n message: entityState.error,\n retryable: null,\n },\n },\n sync: {\n synced: sync.synced,\n origin: sync.origin,\n updatedAt: toIsoTimestamp(sync.updatedAt),\n },\n revision: revisions.get(identityKey) ?? 0,\n viewIds: [],\n };\n}\n\n/** Project the current entity inspection model without retaining graph values. */\nexport function projectGraphDevtoolsEntityRecords(\n state: GraphInspectionState,\n storeId: string,\n revisions: ReadonlyMap<string, number>,\n valuePolicy: GraphDevtoolsValuePolicy = { mode: \"metadata-only\" },\n viewIdsByEntity: ReadonlyMap<string, readonly string[]> = new Map(),\n): GraphDevtoolsEntityRecordsSnapshot {\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n storeId,\n capturedAt: new Date().toISOString(),\n entityRecords: collectEntityIdentities(state).map(({ type, id }) => {\n const record = recordFor(state, storeId, type, id, revisions, valuePolicy);\n return {\n ...record,\n viewIds: [...(viewIdsByEntity.get(graphDevtoolsEntityIdentityKey(type, id)) ?? [])],\n };\n }),\n };\n}\n\n/** Advance each touched entity exactly once for one completed store publication. */\nexport function advanceGraphDevtoolsEntityRevisions(\n changes: ReadonlyArray<GraphDevtoolsChange>,\n revisions: Map<string, number>,\n state: GraphEntityIdentityState,\n valueRevisions?: Map<string, number>,\n): void {\n const touched = new Set<string>();\n const valueTouched = new Set<string>();\n for (const change of changes) {\n if ((change.category === \"entity\" || change.category === \"patch\") && change.id !== undefined) {\n const key = graphDevtoolsEntityIdentityKey(change.key, change.id);\n touched.add(key);\n valueTouched.add(key);\n continue;\n }\n if (change.category === \"entity-state\" || change.category === \"sync\") {\n for (const identity of graphDevtoolsEntityIdentitiesForStateKey(state, change.key)) {\n touched.add(graphDevtoolsEntityIdentityKey(identity.type, identity.id));\n }\n }\n }\n for (const key of touched) revisions.set(key, (revisions.get(key) ?? 0) + 1);\n if (valueRevisions) {\n for (const key of valueTouched) valueRevisions.set(key, (valueRevisions.get(key) ?? 0) + 1);\n }\n}\n","import { getRegisteredSchemas, type RelationDescriptor } from \"../crud/relations\";\nimport { serializeKey } from \"../engine\";\nimport type { GraphState } from \"../graph\";\nimport {\n GRAPH_DEVTOOLS_PROTOCOL,\n GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n type GraphDevtoolsRelationship,\n type GraphDevtoolsRelationshipsSnapshot,\n} from \"./protocol\";\n\nfunction mergedEntity(\n state: GraphState,\n type: string,\n id: string,\n): Record<string, unknown> | null {\n const canonical = state.entities[type]?.[id];\n if (!canonical) return null;\n return { ...canonical, ...(state.patches[type]?.[id] ?? {}) };\n}\n\nfunction statusFor(state: GraphState, type: string, id: string): GraphDevtoolsRelationship[\"status\"] {\n return state.entities[type]?.[id] ? \"resolved\" : \"missing-target\";\n}\n\nfunction edge(\n relation: string,\n descriptor: RelationDescriptor,\n direction: GraphDevtoolsRelationship[\"direction\"],\n sourceType: string,\n sourceId: string,\n sourceField: string | null,\n targetType: string,\n targetId: string,\n state: GraphState,\n): GraphDevtoolsRelationship {\n return {\n relation,\n cardinality: descriptor.cardinality,\n direction,\n source: { type: sourceType, id: sourceId, field: sourceField },\n target: { type: targetType, id: targetId },\n status: statusFor(state, targetType, targetId),\n };\n}\n\nfunction belongsToEdges(\n state: GraphState,\n schemaType: string,\n relation: string,\n descriptor: Extract<RelationDescriptor, { cardinality: \"belongsTo\" }>,\n): GraphDevtoolsRelationship[] {\n const edges: GraphDevtoolsRelationship[] = [];\n for (const id of Object.keys(state.entities[schemaType] ?? {})) {\n const entity = mergedEntity(state, schemaType, id);\n const targetId = entity?.[descriptor.foreignKey];\n if (typeof targetId !== \"string\" || targetId.length === 0) continue;\n edges.push(edge(\n relation,\n descriptor,\n \"outgoing\",\n schemaType,\n id,\n descriptor.foreignKey,\n descriptor.targetType,\n targetId,\n state,\n ));\n }\n return edges;\n}\n\nfunction hasManyEdges(\n state: GraphState,\n schemaType: string,\n relation: string,\n descriptor: Extract<RelationDescriptor, { cardinality: \"hasMany\" }>,\n): GraphDevtoolsRelationship[] {\n const edges: GraphDevtoolsRelationship[] = [];\n for (const parentId of Object.keys(state.entities[schemaType] ?? {})) {\n const childIds = new Set<string>();\n for (const childId of Object.keys(state.entities[descriptor.targetType] ?? {})) {\n const child = mergedEntity(state, descriptor.targetType, childId);\n if (child?.[descriptor.foreignKey] === parentId) childIds.add(childId);\n }\n const listKey = serializeKey(descriptor.listKeyPrefix(parentId) as unknown[]);\n for (const childId of state.lists[listKey]?.ids ?? []) {\n if (!state.entities[descriptor.targetType]?.[childId]) childIds.add(childId);\n }\n for (const childId of childIds) {\n edges.push(edge(\n relation,\n descriptor,\n \"reverse\",\n schemaType,\n parentId,\n null,\n descriptor.targetType,\n childId,\n state,\n ));\n }\n }\n return edges;\n}\n\nfunction manyToManyEdges(\n state: GraphState,\n schemaType: string,\n relation: string,\n descriptor: Extract<RelationDescriptor, { cardinality: \"manyToMany\" }>,\n): GraphDevtoolsRelationship[] {\n const field = descriptor.localArrayField;\n if (!field) return [];\n const edges: GraphDevtoolsRelationship[] = [];\n for (const id of Object.keys(state.entities[schemaType] ?? {})) {\n const entity = mergedEntity(state, schemaType, id);\n const targetIds = entity?.[field];\n if (!Array.isArray(targetIds)) continue;\n for (const targetId of new Set(targetIds)) {\n if (typeof targetId !== \"string\" || targetId.length === 0) continue;\n edges.push(edge(\n relation,\n descriptor,\n \"outgoing\",\n schemaType,\n id,\n field,\n descriptor.targetType,\n targetId,\n state,\n ));\n }\n }\n return edges;\n}\n\nfunction compareRelationships(\n left: GraphDevtoolsRelationship,\n right: GraphDevtoolsRelationship,\n): number {\n const leftKey = [\n left.source.type,\n left.source.id,\n left.relation,\n left.direction,\n left.target.type,\n left.target.id,\n ].join(\"\\u0000\");\n const rightKey = [\n right.source.type,\n right.source.id,\n right.relation,\n right.direction,\n right.target.type,\n right.target.id,\n ].join(\"\\u0000\");\n if (leftKey === rightKey) return 0;\n return leftKey < rightKey ? -1 : 1;\n}\n\n/** Project relationships exclusively from the existing CRUD schema registry and graph state. */\nexport function projectGraphDevtoolsRelationships(\n state: GraphState,\n storeId: string,\n): GraphDevtoolsRelationshipsSnapshot {\n const relationships: GraphDevtoolsRelationship[] = [];\n for (const schema of getRegisteredSchemas()) {\n for (const [name, descriptor] of Object.entries(schema.relations ?? {})) {\n switch (descriptor.cardinality) {\n case \"belongsTo\":\n relationships.push(...belongsToEdges(state, schema.type, name, descriptor));\n break;\n case \"hasMany\":\n relationships.push(...hasManyEdges(state, schema.type, name, descriptor));\n break;\n case \"manyToMany\":\n relationships.push(...manyToManyEdges(state, schema.type, name, descriptor));\n break;\n }\n }\n }\n relationships.sort(compareRelationships);\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n storeId,\n capturedAt: new Date().toISOString(),\n relationships,\n };\n}\n","import type { GraphState } from \"../graph\";\nimport {\n GRAPH_DEVTOOLS_PROTOCOL,\n GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n type GraphDevtoolsExpiredHistoryReceipt,\n type GraphDevtoolsGraphData,\n type GraphDevtoolsHistoryImportInspectionResult,\n type GraphDevtoolsHistoryImportInspectionReceipt,\n type GraphDevtoolsSnapshotHistoryStatus,\n type GraphDevtoolsSnapshotReference,\n} from \"./protocol\";\n\nexport interface GraphDevtoolsRetainedSnapshot {\n readonly reference: Extract<GraphDevtoolsSnapshotReference, { status: \"retained\" }>;\n readonly data: GraphDevtoolsGraphData;\n}\n\nexport type GraphDevtoolsSnapshotRewindAttempt =\n | {\n status: \"rewound\";\n previousCursor: number | null;\n previousSource: \"retained\" | \"import\" | null;\n }\n | GraphDevtoolsExpiredHistoryReceipt\n | null;\n\nexport type GraphDevtoolsImportRestoreAttempt =\n | {\n status: \"rewound\";\n previousCursor: number | null;\n previousSource: \"retained\" | \"import\" | null;\n }\n | { status: \"candidate-not-found\" }\n | { status: \"snapshot-not-found\" }\n | { status: \"restore-failed\" };\n\nexport interface GraphDevtoolsReturnToLiveAttempt {\n previousCursor: number;\n previousSource: \"retained\" | \"import\";\n}\n\nexport interface GraphDevtoolsSnapshotHistory {\n capture(state: GraphState, eventSequence: number | null, label?: string): GraphDevtoolsSnapshotReference;\n captureCompatibility(state: GraphState, label?: string): GraphDevtoolsSnapshotReference;\n getStatus(): GraphDevtoolsSnapshotHistoryStatus;\n getReferences(): ReadonlyArray<Extract<GraphDevtoolsSnapshotReference, { status: \"retained\" }>>;\n getCompatibilityReferences(): ReadonlyArray<Extract<GraphDevtoolsSnapshotReference, { status: \"retained\" }>>;\n read(cursor: number): GraphDevtoolsGraphData | null;\n rewind(\n cursor: number,\n liveState: GraphState,\n restore: (data: GraphDevtoolsGraphData) => void,\n ): GraphDevtoolsSnapshotRewindAttempt;\n inspectImport(candidate: unknown, storeId: string): GraphDevtoolsHistoryImportInspectionResult;\n restoreImport(\n candidateId: string,\n cursor: number,\n liveState: GraphState,\n restore: (data: GraphDevtoolsGraphData) => void,\n ): GraphDevtoolsImportRestoreAttempt;\n returnToLive(restore: (data: GraphDevtoolsGraphData) => void): GraphDevtoolsReturnToLiveAttempt | null;\n leaveRewindForMutation(): GraphDevtoolsReturnToLiveAttempt | null;\n configureLimit(snapshotLimit: number): void;\n subscribe(listener: () => void): () => void;\n clear(): void;\n dispose(): void;\n}\n\nexport interface GraphDevtoolsSnapshotHistoryOptions {\n snapshotLimit: number;\n snapshotBytesLimit: number;\n}\n\nfunction cloneGraphData(data: GraphDevtoolsGraphData): GraphDevtoolsGraphData {\n return structuredClone({\n entities: data.entities,\n patches: data.patches,\n entityStates: data.entityStates,\n syncMetadata: data.syncMetadata,\n lists: data.lists,\n });\n}\n\nfunction encodedBytes(value: unknown): number {\n return new TextEncoder().encode(JSON.stringify(value)).byteLength;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction isJsonValue(value: unknown, ancestors = new Set<object>()): boolean {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (typeof value !== \"object\") return false;\n if (ancestors.has(value)) return false;\n\n ancestors.add(value);\n const valid = Array.isArray(value)\n ? value.every((item) => isJsonValue(item, ancestors))\n : isRecord(value) && Object.values(value).every((item) => isJsonValue(item, ancestors));\n ancestors.delete(value);\n return valid;\n}\n\nfunction isNullableString(value: unknown): boolean {\n return value === null || typeof value === \"string\";\n}\n\nfunction isNullableFiniteNumber(value: unknown): boolean {\n return value === null || (typeof value === \"number\" && Number.isFinite(value));\n}\n\nfunction isTimestamp(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0 && Number.isFinite(Date.parse(value));\n}\n\nfunction isEntityTable(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(\n (entities) => isRecord(entities) && Object.values(entities).every(isRecord),\n );\n}\n\nfunction isEntityStates(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every((state) => (\n isRecord(state) &&\n typeof state.isFetching === \"boolean\" &&\n isNullableFiniteNumber(state.lastFetched) &&\n isNullableString(state.error) &&\n typeof state.stale === \"boolean\"\n ));\n}\n\nfunction isSyncMetadata(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every((metadata) => (\n isRecord(metadata) &&\n typeof metadata.synced === \"boolean\" &&\n (metadata.origin === \"server\" || metadata.origin === \"client\" || metadata.origin === \"optimistic\") &&\n isNullableFiniteNumber(metadata.updatedAt)\n ));\n}\n\nfunction isLists(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every((list) => (\n isRecord(list) &&\n Array.isArray(list.ids) && list.ids.every((id) => typeof id === \"string\") &&\n isNullableFiniteNumber(list.total) &&\n isNullableString(list.nextCursor) &&\n isNullableString(list.prevCursor) &&\n typeof list.hasNextPage === \"boolean\" &&\n typeof list.hasPrevPage === \"boolean\" &&\n typeof list.isFetching === \"boolean\" &&\n typeof list.isFetchingMore === \"boolean\" &&\n isNullableString(list.error) &&\n (list.lastError === null || isRecord(list.lastError)) &&\n isNullableFiniteNumber(list.lastFetched) &&\n typeof list.stale === \"boolean\" &&\n isNullableFiniteNumber(list.currentPage) &&\n isNullableFiniteNumber(list.pageSize)\n ));\n}\n\nfunction isGraphData(value: unknown): value is GraphDevtoolsGraphData {\n return isRecord(value) &&\n isEntityTable(value.entities) &&\n isEntityTable(value.patches) &&\n isEntityStates(value.entityStates) &&\n isSyncMetadata(value.syncMetadata) &&\n isLists(value.lists);\n}\n\ninterface ImportedSnapshot {\n cursor: number;\n capturedAt: string;\n eventSequence: number | null;\n bytes: number;\n data: GraphDevtoolsGraphData;\n}\n\ninterface ImportedCandidate {\n candidateId: string;\n bytes: number;\n snapshots: ImportedSnapshot[];\n}\n\n/** Controller-local snapshot storage. It never subscribes to or owns a graph. */\nexport function createGraphDevtoolsSnapshotHistory(\n options: GraphDevtoolsSnapshotHistoryOptions,\n): GraphDevtoolsSnapshotHistory {\n const retained: GraphDevtoolsRetainedSnapshot[] = [];\n const compatibilityLabels = new Map<number, string | undefined>();\n const listeners = new Set<() => void>();\n let snapshotLimit = options.snapshotLimit;\n let retainedBytes = 0;\n let latestCursor = 0;\n let baselineCursor: number | null = null;\n let lastUnavailable: Extract<GraphDevtoolsSnapshotReference, { status: \"unavailable\" }> | null = null;\n const unavailableReferences = new Map<\n number,\n Extract<GraphDevtoolsSnapshotReference, { status: \"unavailable\" }>\n >();\n let clearedThroughCursor = 0;\n let mode: GraphDevtoolsSnapshotHistoryStatus[\"mode\"] = \"live\";\n let activeCursor: number | null = null;\n let activeSource: GraphDevtoolsSnapshotHistoryStatus[\"source\"] = null;\n let protectedLiveHead: GraphDevtoolsGraphData | null = null;\n let importedCandidate: ImportedCandidate | null = null;\n let nextImportCandidate = 1;\n let disposed = false;\n\n const notify = () => {\n for (const listener of [...listeners]) {\n try {\n listener();\n } catch {\n // Compatibility observers are isolated from the snapshot owner.\n }\n }\n };\n\n const unavailable = (\n cursor: number,\n capturedAt: string,\n eventSequence: number | null,\n reason: Extract<GraphDevtoolsSnapshotReference, { status: \"unavailable\" }>[\"reason\"],\n label?: string,\n ): GraphDevtoolsSnapshotReference => {\n const reference: Extract<GraphDevtoolsSnapshotReference, { status: \"unavailable\" }> = {\n cursor,\n capturedAt,\n eventSequence,\n ...(label !== undefined ? { label } : {}),\n status: \"unavailable\",\n reason,\n };\n lastUnavailable = reference;\n unavailableReferences.set(cursor, reference);\n while (unavailableReferences.size > Math.max(1, snapshotLimit)) {\n const oldest = unavailableReferences.keys().next().value as number | undefined;\n if (oldest === undefined) break;\n unavailableReferences.delete(oldest);\n }\n return reference;\n };\n\n const expired = (cursor: number): GraphDevtoolsExpiredHistoryReceipt | null => {\n if (cursor > latestCursor) return null;\n const status = history.getStatus();\n const unavailableReference = unavailableReferences.get(cursor);\n if (unavailableReference) {\n return {\n status: \"expired-history\",\n cursor,\n reason: \"unavailable\",\n unavailableReason: unavailableReference.reason,\n oldestCursor: status.oldestCursor,\n newestCursor: status.newestCursor,\n latestCursor: status.latestCursor,\n };\n }\n return {\n status: \"expired-history\",\n cursor,\n reason: cursor <= clearedThroughCursor ? \"cleared\" : \"evicted\",\n oldestCursor: status.oldestCursor,\n newestCursor: status.newestCursor,\n latestCursor: status.latestCursor,\n };\n };\n\n const enterRewind = (\n cursor: number,\n source: \"retained\" | \"import\",\n data: GraphDevtoolsGraphData,\n liveState: GraphState,\n restore: (data: GraphDevtoolsGraphData) => void,\n ): Extract<GraphDevtoolsSnapshotRewindAttempt, { status: \"rewound\" }> | null => {\n if (disposed || (mode === \"rewound\" && protectedLiveHead === null)) return null;\n const previousCursor = activeCursor;\n const previousSource = activeSource;\n let target: GraphDevtoolsGraphData;\n let nextLiveHead = protectedLiveHead;\n try {\n target = cloneGraphData(data);\n if (mode === \"live\") nextLiveHead = cloneGraphData(liveState);\n restore(target);\n } catch {\n return null;\n }\n protectedLiveHead = nextLiveHead;\n mode = \"rewound\";\n activeCursor = cursor;\n activeSource = source;\n return { status: \"rewound\", previousCursor, previousSource };\n };\n\n const history: GraphDevtoolsSnapshotHistory = {\n capture(state, eventSequence, label) {\n // Live graph activity invalidates an inspected-but-unrestored candidate\n // and releases its portion of the one controller-local memory budget.\n importedCandidate = null;\n const cursor = ++latestCursor;\n const capturedAt = new Date().toISOString();\n if (baselineCursor === null) baselineCursor = cursor;\n if (disposed || snapshotLimit === 0 || options.snapshotBytesLimit === 0) {\n const reference = unavailable(cursor, capturedAt, eventSequence, \"retention-disabled\", label);\n notify();\n return reference;\n }\n\n let data: GraphDevtoolsGraphData;\n let bytes: number;\n try {\n data = cloneGraphData(state);\n bytes = encodedBytes(data);\n } catch {\n const reference = unavailable(cursor, capturedAt, eventSequence, \"capture-failed\", label);\n notify();\n return reference;\n }\n if (bytes > options.snapshotBytesLimit) {\n const unavailableReference = unavailable(cursor, capturedAt, eventSequence, \"oversize\", label);\n notify();\n return unavailableReference;\n }\n\n const reference: Extract<GraphDevtoolsSnapshotReference, { status: \"retained\" }> = {\n cursor,\n capturedAt,\n eventSequence,\n ...(label !== undefined ? { label } : {}),\n status: \"retained\",\n bytes,\n };\n retained.push({ reference, data });\n retainedBytes += bytes;\n while (\n retained.length > snapshotLimit ||\n retainedBytes > options.snapshotBytesLimit\n ) {\n const removed = retained.shift();\n if (removed) compatibilityLabels.delete(removed.reference.cursor);\n retainedBytes -= removed?.reference.bytes ?? 0;\n }\n notify();\n return reference;\n },\n captureCompatibility(state, label) {\n const candidateCursor = mode === \"live\"\n ? latestCursor\n : activeSource === \"retained\"\n ? activeCursor\n : null;\n const current = candidateCursor === null\n ? undefined\n : retained.find(({ reference }) => reference.cursor === candidateCursor);\n if (current && !compatibilityLabels.has(current.reference.cursor)) {\n compatibilityLabels.set(current.reference.cursor, label);\n notify();\n return {\n ...current.reference,\n ...(label !== undefined ? { label } : {}),\n };\n }\n const reference = history.capture(state, null, label);\n if (reference.status === \"retained\") {\n compatibilityLabels.set(reference.cursor, label);\n }\n return reference;\n },\n getStatus() {\n return {\n mode,\n cursor: activeCursor,\n source: activeSource,\n retainedSnapshots: retained.length,\n retainedBytes,\n snapshotLimit,\n byteLimit: options.snapshotBytesLimit,\n baselineCursor,\n oldestCursor: retained[0]?.reference.cursor ?? null,\n newestCursor: retained.length > 0\n ? retained[retained.length - 1]!.reference.cursor\n : null,\n latestCursor: latestCursor === 0 ? null : latestCursor,\n lastUnavailable,\n importCandidate: importedCandidate\n ? {\n candidateId: importedCandidate.candidateId,\n snapshots: importedCandidate.snapshots.length,\n bytes: importedCandidate.bytes,\n }\n : null,\n };\n },\n getReferences() {\n return retained.map(({ reference }) => ({ ...reference }));\n },\n getCompatibilityReferences() {\n return retained\n .filter(({ reference }) => compatibilityLabels.has(reference.cursor))\n .map(({ reference }) => {\n const label = compatibilityLabels.get(reference.cursor);\n return { ...reference, ...(label !== undefined ? { label } : {}) };\n });\n },\n read(cursor) {\n const snapshot = retained.find((candidate) => candidate.reference.cursor === cursor);\n return snapshot ? cloneGraphData(snapshot.data) : null;\n },\n rewind(cursor, liveState, restore) {\n if (disposed) return null;\n const snapshot = retained.find((candidate) => candidate.reference.cursor === cursor);\n if (!snapshot) return expired(cursor);\n const result = enterRewind(cursor, \"retained\", snapshot.data, liveState, restore);\n if (result) notify();\n return result;\n },\n inspectImport(candidate, storeId) {\n // Every inspection attempt replaces the prior inert candidate, including\n // a rejected attempt, so confirmation can never target stale UI state.\n importedCandidate = null;\n const rejected = (\n reason: Extract<GraphDevtoolsHistoryImportInspectionResult, { status: \"rejected\" }>[\"reason\"],\n message: string,\n ): GraphDevtoolsHistoryImportInspectionResult => {\n notify();\n return { status: \"rejected\", reason, message };\n };\n try {\n if (!isRecord(candidate) || !isJsonValue(candidate) || candidate.protocol !== GRAPH_DEVTOOLS_PROTOCOL) {\n return rejected(\"invalid-envelope\", \"Import must use the Prometheus entity-graph DevTools protocol\");\n }\n if (candidate.version !== GRAPH_DEVTOOLS_PROTOCOL_VERSION) {\n return rejected(\"unsupported-version\", `Import protocol version ${String(candidate.version)} is unsupported`);\n }\n if (candidate.storeId !== storeId) {\n return rejected(\"wrong-store\", `Import targets ${String(candidate.storeId)}, not ${storeId}`);\n }\n if (!isTimestamp(candidate.exportedAt) || !Array.isArray(candidate.snapshots) || candidate.snapshots.length === 0) {\n return rejected(\"invalid-envelope\", \"Import metadata and at least one snapshot are required\");\n }\n if (candidate.snapshots.length > snapshotLimit) {\n return rejected(\"snapshot-limit-exceeded\", `Import contains ${candidate.snapshots.length} snapshots; limit is ${snapshotLimit}`);\n }\n const importBytes = encodedBytes(candidate);\n if (importBytes > options.snapshotBytesLimit) {\n return rejected(\"byte-limit-exceeded\", `Import contains ${importBytes} bytes; limit is ${options.snapshotBytesLimit}`);\n }\n\n const snapshots: ImportedSnapshot[] = [];\n let previousCursor = 0;\n for (const value of candidate.snapshots) {\n if (!isRecord(value)) return rejected(\"invalid-envelope\", \"Every imported snapshot must be an object\");\n const cursor = value.cursor;\n const eventSequence = value.eventSequence;\n if (\n typeof cursor !== \"number\" || !Number.isSafeInteger(cursor) || cursor <= previousCursor ||\n !isTimestamp(value.capturedAt) ||\n !(eventSequence === null || (typeof eventSequence === \"number\" && Number.isSafeInteger(eventSequence) && eventSequence > 0)) ||\n !isGraphData(value.data)\n ) {\n return rejected(\"invalid-envelope\", \"Imported snapshots must have ordered stable cursors and valid graph data\");\n }\n const data = cloneGraphData(value.data);\n snapshots.push({\n cursor,\n capturedAt: value.capturedAt,\n eventSequence,\n bytes: encodedBytes(data),\n data,\n });\n previousCursor = cursor;\n }\n\n const candidateBytes = snapshots.reduce((total, snapshot) => total + snapshot.bytes, 0);\n while (\n retained.length + snapshots.length > snapshotLimit ||\n retainedBytes + candidateBytes > options.snapshotBytesLimit\n ) {\n const removed = retained.shift();\n if (!removed) break;\n compatibilityLabels.delete(removed.reference.cursor);\n retainedBytes -= removed.reference.bytes;\n }\n\n const candidateId = `import-${nextImportCandidate++}`;\n importedCandidate = { candidateId, bytes: candidateBytes, snapshots };\n notify();\n const receipt: GraphDevtoolsHistoryImportInspectionReceipt = {\n status: \"awaiting-confirmation\",\n candidateId,\n storeId,\n protocolVersion: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n inspectedAt: new Date().toISOString(),\n bytes: importBytes,\n snapshots: snapshots.map(({ data: _data, ...metadata }) => metadata),\n };\n return receipt;\n } catch {\n return rejected(\"invalid-envelope\", \"Import could not be safely inspected or cloned\");\n }\n },\n restoreImport(candidateId, cursor, liveState, restore) {\n if (!importedCandidate || importedCandidate.candidateId !== candidateId) {\n return { status: \"candidate-not-found\" };\n }\n const snapshot = importedCandidate.snapshots.find((candidate) => candidate.cursor === cursor);\n if (!snapshot) return { status: \"snapshot-not-found\" };\n const restored = enterRewind(cursor, \"import\", snapshot.data, liveState, restore);\n if (!restored) return { status: \"restore-failed\" };\n // Confirmation is one-shot. Reusing imported data requires a fresh,\n // visible inspection and confirmation cycle.\n importedCandidate = null;\n notify();\n return restored;\n },\n returnToLive(restore) {\n if (disposed || mode !== \"rewound\" || protectedLiveHead === null) return null;\n const previousCursor = activeCursor;\n const previousSource = activeSource;\n if (previousCursor === null || previousSource === null) return null;\n try {\n restore(cloneGraphData(protectedLiveHead));\n } catch {\n return null;\n }\n mode = \"live\";\n activeCursor = null;\n activeSource = null;\n protectedLiveHead = null;\n notify();\n return { previousCursor, previousSource };\n },\n leaveRewindForMutation() {\n if (mode !== \"rewound\") return null;\n const previousCursor = activeCursor;\n const previousSource = activeSource;\n if (previousCursor === null || previousSource === null) return null;\n mode = \"live\";\n activeCursor = null;\n activeSource = null;\n protectedLiveHead = null;\n notify();\n return { previousCursor, previousSource };\n },\n configureLimit(nextLimit) {\n if (!Number.isFinite(nextLimit) || nextLimit <= 0) return;\n snapshotLimit = Math.max(1, Math.floor(nextLimit));\n while (retained.length > snapshotLimit) {\n const removed = retained.shift();\n if (removed) compatibilityLabels.delete(removed.reference.cursor);\n retainedBytes -= removed?.reference.bytes ?? 0;\n }\n while (unavailableReferences.size > Math.max(1, snapshotLimit)) {\n const oldest = unavailableReferences.keys().next().value as number | undefined;\n if (oldest === undefined) break;\n unavailableReferences.delete(oldest);\n }\n if (importedCandidate && retained.length + importedCandidate.snapshots.length > snapshotLimit) {\n importedCandidate = null;\n }\n notify();\n },\n subscribe(listener) {\n if (disposed) return () => {};\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n clear() {\n retained.length = 0;\n compatibilityLabels.clear();\n retainedBytes = 0;\n clearedThroughCursor = latestCursor;\n importedCandidate = null;\n notify();\n },\n dispose() {\n disposed = true;\n retained.length = 0;\n compatibilityLabels.clear();\n retainedBytes = 0;\n lastUnavailable = null;\n unavailableReferences.clear();\n mode = \"live\";\n activeCursor = null;\n activeSource = null;\n protectedLiveHead = null;\n importedCandidate = null;\n listeners.clear();\n },\n };\n\n return history;\n}\n","import { EMPTY_LIST_STATE, type GraphState } from \"../graph\";\nimport {\n GRAPH_DEVTOOLS_PROTOCOL,\n GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n type GraphDevtoolsViewDefinition,\n type GraphDevtoolsViewEvent,\n type GraphDevtoolsViewMembership,\n type GraphDevtoolsViewRecord,\n type GraphDevtoolsViewsSnapshot,\n} from \"./protocol\";\nimport {\n graphDevtoolsEntityIdentitiesForStateKey,\n graphDevtoolsEntityIdentityKey,\n parseGraphDevtoolsEntityIdentityKey,\n} from \"./inspection\";\n\nexport interface GraphDevtoolsViewRegistration {\n readonly viewId: string;\n updateMembership(entityIds: readonly string[]): void;\n unregister(): void;\n}\n\nexport interface GraphDevtoolsViewRegistry {\n register(definition: GraphDevtoolsViewDefinition): GraphDevtoolsViewRegistration;\n getSnapshot(): GraphDevtoolsViewsSnapshot;\n getViewIdsByEntity(): ReadonlyMap<string, readonly string[]>;\n dispose(): void;\n}\n\ninterface ViewRegistrationState {\n entityIds: string[];\n renderCount: number;\n lastRenderedAt: string | null;\n}\n\ninterface ViewEntry {\n definition: GraphDevtoolsViewDefinition;\n registeredAt: string;\n registrations: Map<symbol, ViewRegistrationState>;\n}\n\nfunction orderedUnique(values: readonly string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction sameValues(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction membershipFor(entry: ViewEntry): GraphDevtoolsViewMembership[] {\n const entityIds = new Set<string>();\n for (const registration of entry.registrations.values()) {\n for (const id of registration.entityIds) entityIds.add(id);\n }\n return [...entityIds].map((id) => ({ type: entry.definition.entityType, id }));\n}\n\nfunction viewRecord(entry: ViewEntry, state: GraphState): GraphDevtoolsViewRecord {\n const membership = membershipFor(entry);\n const registrations = [...entry.registrations.values()];\n const lastRenderedAt = registrations\n .map((registration) => registration.lastRenderedAt)\n .filter((value): value is string => value !== null)\n .sort()\n .at(-1) ?? null;\n const queryKey = entry.definition.queryKey ?? null;\n const listState = queryKey === null ? EMPTY_LIST_STATE : (state.lists[queryKey] ?? EMPTY_LIST_STATE);\n\n return {\n ...entry.definition,\n queryKey,\n registeredAt: entry.registeredAt,\n lastRenderedAt,\n renderCount: registrations.reduce((total, registration) => total + registration.renderCount, 0),\n subscriberCount: registrations.length,\n membership,\n list: entry.definition.kind === \"list\"\n ? {\n visibleCount: membership.length,\n graphCount: listState.ids.length,\n total: listState.total,\n isFetching: listState.isFetching,\n isFetchingMore: listState.isFetchingMore,\n stale: listState.stale,\n hasNextPage: listState.hasNextPage,\n hasPreviousPage: listState.hasPrevPage,\n }\n : null,\n };\n}\n\nfunction allEntityIdentities(\n state: GraphState,\n memberships: ReadonlyMap<string, readonly string[]>,\n): Array<{ type: string; id: string }> {\n const identities = new Map<string, { type: string; id: string }>();\n for (const [type, bucket] of Object.entries(state.entities)) {\n for (const id of Object.keys(bucket)) {\n identities.set(graphDevtoolsEntityIdentityKey(type, id), { type, id });\n }\n }\n for (const [type, bucket] of Object.entries(state.patches)) {\n for (const id of Object.keys(bucket)) {\n identities.set(graphDevtoolsEntityIdentityKey(type, id), { type, id });\n }\n }\n for (const key of [\n ...Object.keys(state.entityStates),\n ...Object.keys(state.syncMetadata),\n ]) {\n for (const identity of graphDevtoolsEntityIdentitiesForStateKey(state, key)) {\n identities.set(graphDevtoolsEntityIdentityKey(identity.type, identity.id), identity);\n }\n }\n for (const key of memberships.keys()) {\n const identity = parseGraphDevtoolsEntityIdentityKey(key);\n if (identity) identities.set(key, identity);\n }\n return [...identities.values()].sort((left, right) => {\n if (left.type !== right.type) return left.type < right.type ? -1 : 1;\n if (left.id === right.id) return 0;\n return left.id < right.id ? -1 : 1;\n });\n}\n\nexport function createGraphDevtoolsViewRegistry(\n storeId: string,\n getState: () => GraphState,\n onViewChange: (change: GraphDevtoolsViewEvent[\"payload\"]) => void,\n): GraphDevtoolsViewRegistry {\n const entries = new Map<string, ViewEntry>();\n let disposed = false;\n\n const viewIdsByEntity = (): Map<string, string[]> => {\n const result = new Map<string, string[]>();\n for (const [viewId, entry] of entries) {\n for (const membership of membershipFor(entry)) {\n const key = graphDevtoolsEntityIdentityKey(membership.type, membership.id);\n const viewIds = result.get(key) ?? [];\n viewIds.push(viewId);\n result.set(key, viewIds);\n }\n }\n for (const viewIds of result.values()) viewIds.sort();\n return result;\n };\n\n return {\n register(definition) {\n if (disposed) return { viewId: definition.viewId, updateMembership() {}, unregister() {} };\n const token = Symbol(definition.viewId);\n let entry = entries.get(definition.viewId);\n const isNew = entry === undefined;\n if (!entry) {\n entry = {\n definition: { ...definition, queryKey: definition.queryKey ?? null },\n registeredAt: new Date().toISOString(),\n registrations: new Map(),\n };\n entries.set(definition.viewId, entry);\n }\n entry.registrations.set(token, { entityIds: [], renderCount: 0, lastRenderedAt: null });\n if (isNew) onViewChange({ state: \"registered\", viewId: definition.viewId, membershipCount: 0 });\n\n let unregistered = false;\n return {\n viewId: definition.viewId,\n updateMembership(entityIds) {\n if (disposed || unregistered) return;\n const currentEntry = entries.get(definition.viewId);\n const registration = currentEntry?.registrations.get(token);\n if (!currentEntry || !registration) return;\n const before = membershipFor(currentEntry);\n registration.entityIds = orderedUnique(entityIds);\n registration.renderCount += 1;\n registration.lastRenderedAt = new Date().toISOString();\n const after = membershipFor(currentEntry);\n const beforeKeys = before.map(({ type, id }) => graphDevtoolsEntityIdentityKey(type, id));\n const afterKeys = after.map(({ type, id }) => graphDevtoolsEntityIdentityKey(type, id));\n if (!sameValues(beforeKeys, afterKeys)) {\n onViewChange({\n state: \"membership-changed\",\n viewId: definition.viewId,\n membershipCount: after.length,\n });\n }\n },\n unregister() {\n if (disposed || unregistered) return;\n unregistered = true;\n const currentEntry = entries.get(definition.viewId);\n if (!currentEntry) return;\n const before = membershipFor(currentEntry);\n currentEntry.registrations.delete(token);\n if (currentEntry.registrations.size === 0) {\n entries.delete(definition.viewId);\n onViewChange({ state: \"unregistered\", viewId: definition.viewId, membershipCount: 0 });\n return;\n }\n const after = membershipFor(currentEntry);\n const beforeKeys = before.map(({ type, id }) => graphDevtoolsEntityIdentityKey(type, id));\n const afterKeys = after.map(({ type, id }) => graphDevtoolsEntityIdentityKey(type, id));\n if (!sameValues(beforeKeys, afterKeys)) {\n onViewChange({\n state: \"membership-changed\",\n viewId: definition.viewId,\n membershipCount: after.length,\n });\n }\n },\n };\n },\n getSnapshot() {\n const state = getState();\n const memberships = viewIdsByEntity();\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n storeId,\n capturedAt: new Date().toISOString(),\n views: [...entries.values()]\n .map((entry) => viewRecord(entry, state))\n .sort((left, right) => left.viewId < right.viewId ? -1 : left.viewId > right.viewId ? 1 : 0),\n entityViewMembership: allEntityIdentities(state, memberships).map(({ type, id }) => ({\n type,\n id,\n viewIds: [...(memberships.get(graphDevtoolsEntityIdentityKey(type, id)) ?? [])],\n })),\n };\n },\n getViewIdsByEntity() {\n return viewIdsByEntity();\n },\n dispose() {\n disposed = true;\n entries.clear();\n },\n };\n}\n","import type { GraphStore } from \"../graph\";\nimport {\n graphDevtoolsEntityIdentityKey,\n projectGraphDevtoolsInspectionValue,\n} from \"./inspection\";\nimport type {\n GraphDevtoolsPreviewAppliedReceipt,\n GraphDevtoolsPreviewConflictReceipt,\n GraphDevtoolsPreviewRestoreReceipt,\n GraphDevtoolsValuePolicy,\n} from \"./protocol\";\n\ninterface RawPreviewReceipt {\n previewId: string;\n type: string;\n id: string;\n priorPatch: Record<string, unknown> | undefined;\n previewPatch: Record<string, unknown>;\n appliedPatch: Record<string, unknown>;\n baselineRevision: number;\n previewRevision: number;\n appliedAt: string;\n}\n\nexport interface GraphDevtoolsPreviewController {\n apply(type: string, id: string, patch: Record<string, unknown>): GraphDevtoolsPreviewAppliedReceipt | null;\n restore(previewId: string): GraphDevtoolsPreviewRestoreReceipt | null;\n dispose(): void;\n}\n\nfunction replaceEntityPatch(\n store: GraphStore,\n type: string,\n id: string,\n patch: Record<string, unknown> | undefined,\n): void {\n store.setState((state) => {\n const patches = { ...state.patches };\n const bucket = { ...(patches[type] ?? {}) };\n if (patch === undefined) delete bucket[id];\n else bucket[id] = { ...patch };\n if (Object.keys(bucket).length === 0) delete patches[type];\n else patches[type] = bucket;\n return { patches };\n });\n}\n\nexport function createGraphDevtoolsPreviewController(\n store: GraphStore,\n storeId: string,\n valuePolicy: GraphDevtoolsValuePolicy,\n valueRevisionFor: (type: string, id: string) => number,\n): GraphDevtoolsPreviewController {\n const receipts = new Map<string, RawPreviewReceipt>();\n const activeByEntity = new Map<string, string>();\n let nextPreview = 1;\n let disposed = false;\n\n const projectPatch = (type: string, id: string, value: unknown): unknown => (\n projectGraphDevtoolsInspectionValue(\n value,\n valuePolicy,\n { storeId, category: \"patch\", key: type, id },\n )\n );\n\n const removeReceipt = (receipt: RawPreviewReceipt) => {\n receipts.delete(receipt.previewId);\n const key = graphDevtoolsEntityIdentityKey(receipt.type, receipt.id);\n if (activeByEntity.get(key) === receipt.previewId) activeByEntity.delete(key);\n };\n\n return {\n apply(type, id, patch) {\n if (disposed || !store.getState().entities[type]?.[id]) return null;\n const key = graphDevtoolsEntityIdentityKey(type, id);\n const previousPreviewId = activeByEntity.get(key);\n if (previousPreviewId) receipts.delete(previousPreviewId);\n\n const storedPriorPatch = store.getState().patches[type]?.[id];\n const priorPatch = storedPriorPatch === undefined ? undefined : { ...storedPriorPatch };\n const previewPatch = { ...patch };\n const baselineRevision = valueRevisionFor(type, id);\n store.getState().patchEntity(type, id, previewPatch);\n const appliedPatch = { ...(store.getState().patches[type]?.[id] ?? {}) };\n const previewRevision = valueRevisionFor(type, id);\n const receipt: RawPreviewReceipt = {\n previewId: `preview-${storeId}-${nextPreview++}`,\n type,\n id,\n priorPatch,\n previewPatch,\n appliedPatch,\n baselineRevision,\n previewRevision,\n appliedAt: new Date().toISOString(),\n };\n receipts.set(receipt.previewId, receipt);\n activeByEntity.set(key, receipt.previewId);\n return {\n previewId: receipt.previewId,\n entity: { type, id },\n priorPatch: priorPatch === undefined ? null : projectPatch(type, id, priorPatch),\n previewPatch: projectPatch(type, id, previewPatch),\n appliedPatch: projectPatch(type, id, appliedPatch),\n baselineRevision,\n previewRevision,\n appliedAt: receipt.appliedAt,\n };\n },\n restore(previewId) {\n if (disposed) return null;\n const receipt = receipts.get(previewId);\n if (!receipt) return null;\n const observedRevision = valueRevisionFor(receipt.type, receipt.id);\n if (observedRevision !== receipt.previewRevision) {\n const currentPatch = store.getState().patches[receipt.type]?.[receipt.id];\n const conflict: GraphDevtoolsPreviewConflictReceipt = {\n previewId,\n status: \"conflict\",\n reason: \"entity-changed-since-preview\",\n expectedRevision: receipt.previewRevision,\n observedRevision,\n currentPatch: currentPatch === undefined\n ? null\n : projectPatch(receipt.type, receipt.id, currentPatch),\n priorPatch: receipt.priorPatch === undefined\n ? null\n : projectPatch(receipt.type, receipt.id, receipt.priorPatch),\n };\n removeReceipt(receipt);\n return conflict;\n }\n\n replaceEntityPatch(store, receipt.type, receipt.id, receipt.priorPatch);\n removeReceipt(receipt);\n return {\n previewId,\n status: \"restored\",\n restoredPatch: receipt.priorPatch === undefined\n ? null\n : projectPatch(receipt.type, receipt.id, receipt.priorPatch),\n observedRevision,\n restoredAt: new Date().toISOString(),\n };\n },\n dispose() {\n disposed = true;\n receipts.clear();\n activeByEntity.clear();\n },\n };\n}\n","import type { GraphState, GraphStore } from \"../graph\";\nimport {\n registerGraphDevtoolsCompatibilityDelegate,\n registerGraphDevtoolsCompatibilityFactory,\n} from \"../devtools-compatibility-bridge\";\nimport {\n advanceGraphDevtoolsEntityRevisions,\n graphDevtoolsEntityIdentitiesForStateKey,\n graphDevtoolsEntityIdentityKey,\n projectGraphDevtoolsEntityRecords,\n} from \"./inspection\";\nimport { collectGraphDevtoolsCounts, projectGraphDevtoolsChanges } from \"./projection\";\nimport {\n GRAPH_DEVTOOLS_PROTOCOL,\n GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n type GraphDevtoolsCapabilities,\n type GraphDevtoolsCommand,\n type GraphDevtoolsCommandName,\n type GraphDevtoolsDiagnosticEvent,\n type GraphDevtoolsEvent,\n type GraphDevtoolsEntityRecordsSnapshot,\n type GraphDevtoolsGraphData,\n type GraphDevtoolsHistoryImportInspectionResult,\n type GraphDevtoolsHistoryImportRestoreReceipt,\n type GraphDevtoolsHistoryImportRestoreResult,\n type GraphDevtoolsHistoryStatus,\n type GraphDevtoolsInspectHistoryImportPayload,\n type GraphDevtoolsLifecycleEvent,\n type GraphDevtoolsMutationEvent,\n type GraphDevtoolsPreviewEntityPatchPayload,\n type GraphDevtoolsRewindPayload,\n type GraphDevtoolsRewindResult,\n type GraphDevtoolsRelationshipsSnapshot,\n type GraphDevtoolsRestoreEntityPreviewPayload,\n type GraphDevtoolsReturnToLiveReceipt,\n type GraphDevtoolsResult,\n type GraphDevtoolsSnapshot,\n type GraphDevtoolsSnapshotHistoryStatus,\n type GraphDevtoolsSnapshotReference,\n type GraphDevtoolsTimeTravelEvent,\n type GraphDevtoolsTransport,\n type GraphDevtoolsValuePolicy,\n type GraphDevtoolsViewDefinition,\n type GraphDevtoolsViewEvent,\n type GraphDevtoolsViewMembership,\n type GraphDevtoolsViewsSnapshot,\n} from \"./protocol\";\nimport { createGraphDevtoolsSnapshotHistory } from \"./time-travel\";\nimport {\n createGraphDevtoolsViewRegistry,\n type GraphDevtoolsViewRegistration,\n} from \"./views\";\nimport { projectGraphDevtoolsRelationships } from \"./relationships\";\nimport { createGraphDevtoolsPreviewController } from \"./previews\";\n\nexport interface AttachGraphDevtoolsOptions {\n /**\n * `false` makes only this attachment a no-op. It never tears down references\n * already held by other attachments to the same store.\n */\n enabled?: boolean;\n storeId?: string;\n historyLimit?: number;\n historyBytesLimit?: number;\n eventBytesLimit?: number;\n snapshotLimit?: number;\n snapshotBytesLimit?: number;\n values?: GraphDevtoolsValuePolicy;\n}\n\nexport interface GraphDevtoolsController {\n readonly storeId: string;\n readonly capabilities: GraphDevtoolsCapabilities;\n getSnapshot(): GraphDevtoolsSnapshot;\n getHistory(): ReadonlyArray<GraphDevtoolsEvent>;\n getHistoryStatus(): GraphDevtoolsHistoryStatus;\n getSnapshotHistoryStatus(): GraphDevtoolsSnapshotHistoryStatus;\n getSnapshotReferences(): ReadonlyArray<Extract<GraphDevtoolsSnapshotReference, { status: \"retained\" }>>;\n getCompatibilitySnapshotReferences(): ReadonlyArray<Extract<GraphDevtoolsSnapshotReference, { status: \"retained\" }>>;\n captureCompatibilitySnapshot(label?: string): number;\n configureSnapshotLimit(snapshotLimit: number): void;\n subscribeSnapshotHistory(listener: () => void): () => void;\n clearSnapshotHistory(): void;\n getEntityRecords(): GraphDevtoolsEntityRecordsSnapshot;\n getViews(): GraphDevtoolsViewsSnapshot;\n getRelationships(): GraphDevtoolsRelationshipsSnapshot;\n registerView(definition: GraphDevtoolsViewDefinition): GraphDevtoolsViewRegistration;\n rewind(cursor: number): GraphDevtoolsRewindResult | null;\n returnToLive(): GraphDevtoolsReturnToLiveReceipt | null;\n inspectHistoryImport(candidate: unknown): GraphDevtoolsHistoryImportInspectionResult;\n confirmHistoryImport(candidateId: string, cursor: number): GraphDevtoolsHistoryImportRestoreResult;\n clearHistory(): void;\n subscribe(listener: (event: GraphDevtoolsEvent) => void, replay?: boolean): () => void;\n connect(clientId?: string): GraphDevtoolsTransport;\n handleCommand(command: unknown): GraphDevtoolsResult;\n isDisposed(): boolean;\n}\n\nexport interface GraphDevtoolsAttachment {\n readonly enabled: boolean;\n readonly controller: GraphDevtoolsController | null;\n detach(): void;\n}\n\ninterface ControllerEntry {\n controller: GraphDevtoolsController;\n dispose(): void;\n references: number;\n}\n\ninterface CreatedController {\n controller: GraphDevtoolsController;\n dispose(): void;\n}\n\nconst controllers = new WeakMap<GraphStore, ControllerEntry>();\nconst storeNumbers = new WeakMap<GraphStore, number>();\nlet nextStoreNumber = 1;\n\nfunction nowDuration(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction boundedLimit(value: number | undefined, fallback: number, minimum = 0): number {\n const candidate = value ?? fallback;\n return Number.isFinite(candidate) ? Math.max(minimum, Math.floor(candidate)) : fallback;\n}\n\nfunction storeIdFor(store: GraphStore): string {\n let number = storeNumbers.get(store);\n if (number === undefined) {\n number = nextStoreNumber++;\n storeNumbers.set(store, number);\n }\n return `graph-${number}`;\n}\n\nfunction resultError(\n storeId: string,\n requestId: string,\n code: Extract<GraphDevtoolsResult, { ok: false }>[\"error\"][\"code\"],\n message: string,\n): GraphDevtoolsResult {\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n requestId,\n storeId,\n ok: false,\n error: { code, message },\n };\n}\n\nfunction parseCommand(command: unknown): GraphDevtoolsCommand | null {\n if (typeof command !== \"object\" || command === null) return null;\n const candidate = command as Partial<GraphDevtoolsCommand>;\n if (\n candidate.protocol !== GRAPH_DEVTOOLS_PROTOCOL ||\n typeof candidate.version !== \"number\" ||\n typeof candidate.requestId !== \"string\" ||\n typeof candidate.storeId !== \"string\" ||\n typeof candidate.command !== \"string\"\n ) return null;\n return candidate as GraphDevtoolsCommand;\n}\n\nfunction parsePreviewPayload(payload: unknown): GraphDevtoolsPreviewEntityPatchPayload | null {\n if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) return null;\n const candidate = payload as Partial<GraphDevtoolsPreviewEntityPatchPayload>;\n if (\n typeof candidate.type !== \"string\" || candidate.type.length === 0 ||\n typeof candidate.id !== \"string\" || candidate.id.length === 0 ||\n typeof candidate.patch !== \"object\" || candidate.patch === null || Array.isArray(candidate.patch) ||\n Object.keys(candidate.patch).length === 0\n ) return null;\n return candidate as GraphDevtoolsPreviewEntityPatchPayload;\n}\n\nfunction parseRestorePreviewPayload(payload: unknown): GraphDevtoolsRestoreEntityPreviewPayload | null {\n if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) return null;\n const previewId = (payload as Partial<GraphDevtoolsRestoreEntityPreviewPayload>).previewId;\n return typeof previewId === \"string\" && previewId.length > 0 ? { previewId } : null;\n}\n\nfunction parseRewindPayload(payload: unknown): GraphDevtoolsRewindPayload | null {\n if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) return null;\n const cursor = (payload as Partial<GraphDevtoolsRewindPayload>).cursor;\n return typeof cursor === \"number\" && Number.isSafeInteger(cursor) && cursor > 0\n ? { cursor }\n : null;\n}\n\nfunction parseInspectHistoryImportPayload(\n payload: unknown,\n): GraphDevtoolsInspectHistoryImportPayload | null {\n if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) return null;\n if (!Object.prototype.hasOwnProperty.call(payload, \"candidate\")) return null;\n return { candidate: (payload as GraphDevtoolsInspectHistoryImportPayload).candidate };\n}\n\ninterface ParsedConfirmHistoryImportPayload {\n candidateId: string;\n cursor: number;\n confirm: boolean;\n}\n\nfunction parseConfirmHistoryImportPayload(\n payload: unknown,\n): ParsedConfirmHistoryImportPayload | null {\n if (typeof payload !== \"object\" || payload === null || Array.isArray(payload)) return null;\n const candidate = payload as Partial<ParsedConfirmHistoryImportPayload>;\n if (\n typeof candidate.candidateId !== \"string\" || candidate.candidateId.length === 0 ||\n typeof candidate.cursor !== \"number\" || !Number.isSafeInteger(candidate.cursor) || candidate.cursor <= 0 ||\n typeof candidate.confirm !== \"boolean\"\n ) return null;\n return candidate as ParsedConfirmHistoryImportPayload;\n}\n\nfunction createController(\n store: GraphStore,\n options: AttachGraphDevtoolsOptions,\n): CreatedController {\n const storeId = options.storeId ?? storeIdFor(store);\n const historyLimit = boundedLimit(options.historyLimit, 500);\n const historyBytesLimit = boundedLimit(options.historyBytesLimit, 5 * 1024 * 1024);\n const eventBytesLimit = boundedLimit(options.eventBytesLimit, 256 * 1024, 1024);\n const snapshotLimit = boundedLimit(options.snapshotLimit, 50);\n const snapshotBytesLimit = boundedLimit(options.snapshotBytesLimit, 10 * 1024 * 1024);\n const timeTravelEnabled = snapshotLimit > 0 && snapshotBytesLimit > 0;\n const timeTravelCommands: GraphDevtoolsCommandName[] = timeTravelEnabled\n ? [\n \"get-time-travel-status\",\n \"rewind\",\n \"return-to-live\",\n \"inspect-history-import\",\n \"confirm-history-import\",\n ]\n : [];\n const timeTravelFeatures: Array<GraphDevtoolsCapabilities[\"features\"][number]> = timeTravelEnabled\n ? [\"snapshot-history\", \"time-travel\", \"history-import\"]\n : [];\n const valuePolicy = options.values ?? { mode: \"metadata-only\" };\n const capabilities: GraphDevtoolsCapabilities = {\n protocolVersion: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n metadataOnlyByDefault: true,\n commands: [\n \"get-capabilities\",\n \"get-snapshot\",\n \"get-history\",\n \"get-history-status\",\n \"get-entity-records\",\n \"get-views\",\n \"get-relationships\",\n \"preview-entity-patch\",\n \"restore-entity-preview\",\n ...timeTravelCommands,\n \"clear-history\",\n ],\n features: [\n \"semantic-events\",\n \"diagnostic-events\",\n \"bounded-history\",\n \"multi-client\",\n \"multi-store\",\n \"entity-inspection\",\n \"view-inspection\",\n \"relationship-inspection\",\n \"local-preview\",\n ...timeTravelFeatures,\n ],\n limits: {\n historyEvents: historyLimit,\n historyBytes: historyBytesLimit,\n eventBytes: eventBytesLimit,\n snapshots: snapshotLimit,\n snapshotBytes: snapshotBytesLimit,\n },\n };\n const listeners = new Set<(event: GraphDevtoolsEvent) => void>();\n const history: GraphDevtoolsEvent[] = [];\n const historySizes: number[] = [];\n const entityRevisions = new Map<string, number>();\n const entityValueRevisions = new Map<string, number>();\n let retainedBytes = 0;\n let sequence = 0;\n let activeClients = 0;\n let nextClientNumber = 1;\n let disposed = false;\n let projectionFailureRevision = 0;\n let internalReplayDepth = 0;\n const snapshotHistory = createGraphDevtoolsSnapshotHistory({\n snapshotLimit,\n snapshotBytesLimit,\n });\n snapshotHistory.capture(store.getState(), null);\n\n const nextBase = () => {\n const current = ++sequence;\n const eventId = `${storeId}:${current}`;\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n storeId,\n sequence: current,\n eventId,\n correlationId: eventId,\n observedAt: new Date().toISOString(),\n } as const;\n };\n\n const encodedBytes = (value: unknown) => new TextEncoder().encode(JSON.stringify(value)).byteLength;\n\n const boundEvent = (event: GraphDevtoolsEvent): GraphDevtoolsEvent => {\n if (event.type !== \"mutation\") return event;\n if (encodedBytes(event) <= eventBytesLimit) return event;\n const valuesTruncated = event.payload.changes.some(\n (change) => \"before\" in change || \"after\" in change,\n );\n const withoutValues: GraphDevtoolsMutationEvent = {\n ...event,\n payload: {\n ...event.payload,\n valuesTruncated,\n changes: event.payload.changes.map(({ before: _before, after: _after, ...change }) => ({\n ...change,\n valueState:\n change.valueState === \"hidden-by-policy\" || change.valueState === \"redaction-error\"\n ? change.valueState\n : \"truncated\",\n })),\n },\n };\n if (encodedBytes(withoutValues) <= eventBytesLimit) return withoutValues;\n\n let lower = 0;\n let upper = withoutValues.payload.changes.length;\n let bounded: GraphDevtoolsMutationEvent = {\n ...withoutValues,\n payload: {\n ...withoutValues.payload,\n changes: [],\n changesOmitted: withoutValues.payload.changes.length,\n },\n };\n while (lower <= upper) {\n const count = Math.floor((lower + upper) / 2);\n const candidate: GraphDevtoolsMutationEvent = {\n ...withoutValues,\n payload: {\n ...withoutValues.payload,\n changes: withoutValues.payload.changes.slice(0, count),\n changesOmitted: withoutValues.payload.changes.length - count,\n },\n };\n if (encodedBytes(candidate) <= eventBytesLimit) {\n bounded = candidate;\n lower = count + 1;\n } else {\n upper = count - 1;\n }\n }\n return bounded;\n };\n\n const publish = (candidate: GraphDevtoolsEvent) => {\n if (disposed) return;\n const event = boundEvent(candidate);\n if (historyLimit > 0 && historyBytesLimit > 0) {\n const size = encodedBytes(event);\n history.push(event);\n historySizes.push(size);\n retainedBytes += size;\n while (history.length > historyLimit || retainedBytes > historyBytesLimit) {\n history.shift();\n retainedBytes -= historySizes.shift() ?? 0;\n }\n }\n for (const listener of [...listeners]) {\n try {\n listener(event);\n } catch {\n // Tooling listeners are isolated from the production graph boundary.\n }\n }\n };\n\n const publishLifecycle = (\n state: GraphDevtoolsLifecycleEvent[\"payload\"][\"state\"],\n clientId?: string,\n ) => {\n publish({\n ...nextBase(),\n type: \"lifecycle\",\n payload: {\n state,\n ...(clientId !== undefined ? { clientId } : {}),\n activeClients,\n },\n });\n };\n\n const publishTimeTravel = (\n state: GraphDevtoolsTimeTravelEvent[\"payload\"][\"state\"],\n cursor: number | null,\n previousCursor: number | null,\n source: GraphDevtoolsTimeTravelEvent[\"payload\"][\"source\"],\n previousSource: GraphDevtoolsTimeTravelEvent[\"payload\"][\"previousSource\"],\n reason: GraphDevtoolsTimeTravelEvent[\"payload\"][\"reason\"],\n ): GraphDevtoolsTimeTravelEvent => {\n const event: GraphDevtoolsTimeTravelEvent = {\n ...nextBase(),\n type: \"time-travel\",\n payload: { state, cursor, previousCursor, source, previousSource, reason },\n };\n publish(event);\n return event;\n };\n\n const restoreGraphData = (data: GraphDevtoolsGraphData) => {\n internalReplayDepth += 1;\n try {\n store.setState(data as Partial<GraphState>);\n } finally {\n internalReplayDepth -= 1;\n }\n };\n\n const leaveRewindForMutation = () => {\n const previous = snapshotHistory.leaveRewindForMutation();\n if (previous === null) return;\n projectionFailureRevision += 1;\n publishTimeTravel(\n \"live\",\n null,\n previous.previousCursor,\n null,\n previous.previousSource,\n \"mutation\",\n );\n };\n\n const viewRegistry = createGraphDevtoolsViewRegistry(storeId, () => store.getState(), (payload) => {\n const event: GraphDevtoolsViewEvent = { ...nextBase(), type: \"view\", payload };\n publish(event);\n });\n\n const affectedProjection = (\n changes: GraphDevtoolsMutationEvent[\"payload\"][\"changes\"],\n previous: GraphState,\n current: GraphState,\n ): { affectedEntities: GraphDevtoolsViewMembership[]; affectedViewIds: string[] } => {\n const identities = new Map<string, GraphDevtoolsViewMembership>();\n const changedListKeys = new Set<string>();\n for (const change of changes) {\n if ((change.category === \"entity\" || change.category === \"patch\") && change.id !== undefined) {\n identities.set(graphDevtoolsEntityIdentityKey(change.key, change.id), {\n type: change.key,\n id: change.id,\n });\n } else if (change.category === \"entity-state\" || change.category === \"sync\") {\n const stateIdentities = [\n ...graphDevtoolsEntityIdentitiesForStateKey(previous, change.key),\n ...graphDevtoolsEntityIdentitiesForStateKey(current, change.key),\n ];\n for (const identity of stateIdentities) {\n identities.set(graphDevtoolsEntityIdentityKey(identity.type, identity.id), identity);\n }\n } else if (change.category === \"list\") {\n changedListKeys.add(change.key);\n }\n }\n\n const views = viewRegistry.getSnapshot().views;\n const affectedViewIds = new Set<string>();\n for (const view of views) {\n if (view.queryKey !== null && changedListKeys.has(view.queryKey)) {\n affectedViewIds.add(view.viewId);\n const previousIds = previous.lists[view.queryKey]?.ids ?? [];\n const currentIds = current.lists[view.queryKey]?.ids ?? [];\n const previousPositions = new Map(previousIds.map((id, index) => [id, index]));\n const currentPositions = new Map(currentIds.map((id, index) => [id, index]));\n const ids = new Set([...previousIds, ...currentIds]);\n for (const id of ids) {\n if (previousPositions.get(id) === currentPositions.get(id)) continue;\n identities.set(graphDevtoolsEntityIdentityKey(view.entityType, id), {\n type: view.entityType,\n id,\n });\n }\n }\n if (view.membership.some((member) => (\n identities.has(graphDevtoolsEntityIdentityKey(member.type, member.id))\n ))) {\n affectedViewIds.add(view.viewId);\n }\n }\n\n return {\n affectedEntities: [...identities.values()],\n affectedViewIds: [...affectedViewIds].sort(),\n };\n };\n\n const unsubscribeStore = store.subscribe((current: GraphState, previous: GraphState) => {\n if (disposed || internalReplayDepth > 0) return;\n const startedAt = nowDuration();\n let changes: GraphDevtoolsMutationEvent[\"payload\"][\"changes\"];\n try {\n changes = projectGraphDevtoolsChanges(previous, current, valuePolicy, storeId);\n } catch {\n // The failed projection cannot prove which values changed. Advance a\n // controller-wide epoch so every active preview refuses a possibly\n // destructive restore rather than treating an unknown publication as safe.\n leaveRewindForMutation();\n projectionFailureRevision += 1;\n const base = nextBase();\n const event: GraphDevtoolsDiagnosticEvent = {\n ...base,\n type: \"diagnostic\",\n payload: {\n code: \"projection-failed\",\n message: \"A graph publication could not be projected for DevTools.\",\n snapshot: snapshotHistory.capture(current, base.sequence),\n },\n };\n publish(event);\n return;\n }\n if (changes.length === 0) return;\n leaveRewindForMutation();\n advanceGraphDevtoolsEntityRevisions(changes, entityRevisions, current, entityValueRevisions);\n const affected = affectedProjection(changes, previous, current);\n const base = nextBase();\n const event: GraphDevtoolsMutationEvent = {\n ...base,\n type: \"mutation\",\n payload: {\n snapshot: snapshotHistory.capture(current, base.sequence),\n valuesTruncated: false,\n changesOmitted: 0,\n changes,\n ...affected,\n before: collectGraphDevtoolsCounts(previous),\n after: collectGraphDevtoolsCounts(current),\n projectionDurationMs: Math.max(0, nowDuration() - startedAt),\n },\n };\n publish(event);\n });\n\n const previewController = createGraphDevtoolsPreviewController(\n store,\n storeId,\n valuePolicy,\n (type, id) => (\n (entityValueRevisions.get(graphDevtoolsEntityIdentityKey(type, id)) ?? 0) +\n projectionFailureRevision\n ),\n );\n\n const controller: GraphDevtoolsController = {\n storeId,\n capabilities,\n getSnapshot() {\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n storeId,\n capturedAt: new Date().toISOString(),\n counts: collectGraphDevtoolsCounts(store.getState()),\n history: controller.getHistoryStatus(),\n snapshots: controller.getSnapshotHistoryStatus(),\n };\n },\n getHistory() {\n return [...history];\n },\n getHistoryStatus() {\n return {\n retainedEvents: history.length,\n retainedBytes,\n eventLimit: historyLimit,\n byteLimit: historyBytesLimit,\n oldestSequence: history[0]?.sequence ?? null,\n newestSequence: history.length > 0 ? history[history.length - 1]!.sequence : null,\n };\n },\n getSnapshotHistoryStatus() {\n return snapshotHistory.getStatus();\n },\n getSnapshotReferences() {\n return snapshotHistory.getReferences();\n },\n getCompatibilitySnapshotReferences() {\n return snapshotHistory.getCompatibilityReferences();\n },\n captureCompatibilitySnapshot(label) {\n const reference = snapshotHistory.captureCompatibility(store.getState(), label);\n return reference.status === \"retained\" ? reference.cursor : -1;\n },\n configureSnapshotLimit(nextSnapshotLimit) {\n snapshotHistory.configureLimit(nextSnapshotLimit);\n capabilities.limits.snapshots = snapshotHistory.getStatus().snapshotLimit;\n },\n subscribeSnapshotHistory(listener) {\n return snapshotHistory.subscribe(listener);\n },\n clearSnapshotHistory() {\n snapshotHistory.clear();\n },\n getEntityRecords() {\n return projectGraphDevtoolsEntityRecords(\n store.getState(),\n storeId,\n entityRevisions,\n valuePolicy,\n viewRegistry.getViewIdsByEntity(),\n );\n },\n getViews() {\n return viewRegistry.getSnapshot();\n },\n getRelationships() {\n return projectGraphDevtoolsRelationships(store.getState(), storeId);\n },\n registerView(definition) {\n return viewRegistry.register(definition);\n },\n rewind(cursor) {\n if (!timeTravelEnabled) return null;\n const attempt = snapshotHistory.rewind(cursor, store.getState(), restoreGraphData);\n if (attempt === null || attempt.status === \"expired-history\") return attempt;\n projectionFailureRevision += 1;\n const event = publishTimeTravel(\n \"rewound\",\n cursor,\n attempt.previousCursor,\n \"retained\",\n attempt.previousSource,\n \"command\",\n );\n return {\n status: \"rewound\",\n cursor,\n source: \"retained\",\n previousCursor: attempt.previousCursor,\n previousSource: attempt.previousSource,\n changedAt: event.observedAt,\n };\n },\n returnToLive() {\n if (!timeTravelEnabled) return null;\n const previous = snapshotHistory.returnToLive(restoreGraphData);\n if (previous === null) return null;\n projectionFailureRevision += 1;\n const event = publishTimeTravel(\n \"live\",\n null,\n previous.previousCursor,\n null,\n previous.previousSource,\n \"command\",\n );\n return {\n status: \"live\",\n cursor: null,\n previousCursor: previous.previousCursor,\n previousSource: previous.previousSource,\n reason: \"command\",\n changedAt: event.observedAt,\n };\n },\n inspectHistoryImport(candidate) {\n if (disposed) {\n return { status: \"rejected\", reason: \"disposed\", message: \"DevTools controller is disposed\" };\n }\n if (!timeTravelEnabled) {\n return {\n status: \"rejected\",\n reason: \"time-travel-unavailable\",\n message: \"Time travel is disabled for this controller\",\n };\n }\n return snapshotHistory.inspectImport(candidate, storeId);\n },\n confirmHistoryImport(candidateId, cursor) {\n if (disposed) {\n return { status: \"rejected\", reason: \"disposed\", message: \"DevTools controller is disposed\" };\n }\n if (!timeTravelEnabled) {\n return {\n status: \"rejected\",\n reason: \"time-travel-unavailable\",\n message: \"Time travel is disabled for this controller\",\n };\n }\n const attempt = snapshotHistory.restoreImport(\n candidateId,\n cursor,\n store.getState(),\n restoreGraphData,\n );\n if (attempt.status === \"candidate-not-found\") {\n return {\n status: \"rejected\",\n reason: \"candidate-not-found\",\n message: `Import candidate ${candidateId} is no longer awaiting confirmation`,\n };\n }\n if (attempt.status === \"snapshot-not-found\") {\n return {\n status: \"rejected\",\n reason: \"snapshot-not-found\",\n message: `Import candidate ${candidateId} does not contain cursor ${cursor}`,\n };\n }\n if (attempt.status === \"restore-failed\") {\n return {\n status: \"rejected\",\n reason: \"restore-failed\",\n message: `Import candidate ${candidateId} could not be restored through the graph boundary`,\n };\n }\n projectionFailureRevision += 1;\n const event = publishTimeTravel(\n \"rewound\",\n cursor,\n attempt.previousCursor,\n \"import\",\n attempt.previousSource,\n \"import\",\n );\n const receipt: GraphDevtoolsHistoryImportRestoreReceipt = {\n status: \"rewound\",\n source: \"import\",\n candidateId,\n cursor,\n previousCursor: attempt.previousCursor,\n previousSource: attempt.previousSource,\n changedAt: event.observedAt,\n };\n return receipt;\n },\n clearHistory() {\n history.length = 0;\n historySizes.length = 0;\n retainedBytes = 0;\n snapshotHistory.clear();\n },\n subscribe(listener, replay = false) {\n if (disposed) return () => {};\n if (replay) {\n for (const event of [...history]) {\n try {\n listener(event);\n } catch {\n // Replay delivery has the same listener isolation as live delivery.\n }\n }\n }\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n connect(clientId = `client-${nextClientNumber++}`) {\n if (disposed) return createDisposedTransport(storeId, clientId);\n activeClients += 1;\n publishLifecycle(\"client-connected\", clientId);\n let closed = false;\n const connectionSubscriptions = new Set<() => void>();\n return {\n request(command) {\n if (closed) {\n const parsed = parseCommand(command);\n return Promise.resolve(resultError(\n storeId,\n parsed?.requestId ?? \"closed\",\n \"disposed\",\n \"DevTools client is disconnected\",\n ));\n }\n return Promise.resolve(controller.handleCommand(command));\n },\n subscribe(listener) {\n if (closed) return () => {};\n const unsubscribe = controller.subscribe(listener);\n connectionSubscriptions.add(unsubscribe);\n return () => {\n connectionSubscriptions.delete(unsubscribe);\n unsubscribe();\n };\n },\n close() {\n if (closed) return;\n closed = true;\n for (const unsubscribe of connectionSubscriptions) unsubscribe();\n connectionSubscriptions.clear();\n activeClients = Math.max(0, activeClients - 1);\n publishLifecycle(\"client-disconnected\", clientId);\n },\n };\n },\n handleCommand(command) {\n const parsed = parseCommand(command);\n const requestId = parsed?.requestId ?? \"invalid\";\n if (disposed) return resultError(storeId, requestId, \"disposed\", \"DevTools controller is disposed\");\n if (!parsed) return resultError(storeId, requestId, \"invalid-envelope\", \"Invalid DevTools command envelope\");\n if (parsed.version !== GRAPH_DEVTOOLS_PROTOCOL_VERSION) {\n return resultError(storeId, parsed.requestId, \"unsupported-version\", `Unsupported DevTools protocol version ${parsed.version}`);\n }\n if (parsed.storeId !== storeId) {\n return resultError(storeId, parsed.requestId, \"wrong-store\", `Command targets ${parsed.storeId}, not ${storeId}`);\n }\n\n let result: Extract<GraphDevtoolsResult, { ok: true }>[\"result\"];\n switch (parsed.command) {\n case \"get-capabilities\": result = capabilities; break;\n case \"get-snapshot\": result = controller.getSnapshot(); break;\n case \"get-history\": result = controller.getHistory(); break;\n case \"get-history-status\": result = controller.getHistoryStatus(); break;\n case \"get-entity-records\": result = controller.getEntityRecords(); break;\n case \"get-views\": result = controller.getViews(); break;\n case \"get-relationships\": result = controller.getRelationships(); break;\n case \"get-time-travel-status\": {\n if (!timeTravelEnabled) return resultError(storeId, parsed.requestId, \"time-travel-unavailable\", \"Time travel is disabled for this controller\");\n result = controller.getSnapshotHistoryStatus();\n break;\n }\n case \"rewind\": {\n if (!timeTravelEnabled) return resultError(storeId, parsed.requestId, \"time-travel-unavailable\", \"Time travel is disabled for this controller\");\n const payload = parseRewindPayload(parsed.payload);\n if (!payload) return resultError(storeId, parsed.requestId, \"invalid-payload\", \"Invalid rewind payload\");\n const receipt = controller.rewind(payload.cursor);\n if (!receipt) return resultError(storeId, parsed.requestId, \"snapshot-not-found\", `Snapshot cursor ${payload.cursor} is not retained`);\n result = receipt;\n break;\n }\n case \"return-to-live\": {\n if (!timeTravelEnabled) return resultError(storeId, parsed.requestId, \"time-travel-unavailable\", \"Time travel is disabled for this controller\");\n const receipt = controller.returnToLive();\n if (!receipt) return resultError(storeId, parsed.requestId, \"not-rewound\", \"The graph is already live\");\n result = receipt;\n break;\n }\n case \"inspect-history-import\": {\n if (!timeTravelEnabled) return resultError(storeId, parsed.requestId, \"time-travel-unavailable\", \"Time travel is disabled for this controller\");\n const payload = parseInspectHistoryImportPayload(parsed.payload);\n if (!payload) return resultError(storeId, parsed.requestId, \"invalid-payload\", \"Invalid history import inspection payload\");\n result = controller.inspectHistoryImport(payload.candidate);\n break;\n }\n case \"confirm-history-import\": {\n if (!timeTravelEnabled) return resultError(storeId, parsed.requestId, \"time-travel-unavailable\", \"Time travel is disabled for this controller\");\n const payload = parseConfirmHistoryImportPayload(parsed.payload);\n if (!payload) return resultError(storeId, parsed.requestId, \"invalid-payload\", \"Invalid history import confirmation payload\");\n if (!payload.confirm) return resultError(storeId, parsed.requestId, \"confirmation-required\", \"History import restore requires confirm: true\");\n result = controller.confirmHistoryImport(payload.candidateId, payload.cursor);\n break;\n }\n case \"preview-entity-patch\": {\n const payload = parsePreviewPayload(parsed.payload);\n if (!payload) return resultError(storeId, parsed.requestId, \"invalid-payload\", \"Invalid entity preview payload\");\n const receipt = previewController.apply(payload.type, payload.id, payload.patch);\n if (!receipt) return resultError(storeId, parsed.requestId, \"entity-not-found\", `Entity ${payload.type}:${payload.id} was not found`);\n result = receipt;\n break;\n }\n case \"restore-entity-preview\": {\n const payload = parseRestorePreviewPayload(parsed.payload);\n if (!payload) return resultError(storeId, parsed.requestId, \"invalid-payload\", \"Invalid preview restore payload\");\n const receipt = previewController.restore(payload.previewId);\n if (!receipt) return resultError(storeId, parsed.requestId, \"preview-not-found\", `Preview ${payload.previewId} was not found`);\n result = receipt;\n break;\n }\n case \"clear-history\": controller.clearHistory(); result = { cleared: true }; break;\n default:\n return resultError(storeId, parsed.requestId, \"unsupported-command\", `Unsupported DevTools command ${parsed.command}`);\n }\n return {\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n requestId: parsed.requestId,\n storeId,\n ok: true,\n result,\n };\n },\n isDisposed() {\n return disposed;\n },\n };\n\n const unregisterCompatibility = registerGraphDevtoolsCompatibilityDelegate(store, {\n configure(capacity) {\n controller.configureSnapshotLimit(capacity);\n },\n capture(label) {\n return controller.captureCompatibilitySnapshot(label);\n },\n restoreByIndex(index) {\n if (!Number.isInteger(index)) return false;\n const reference = controller.getCompatibilitySnapshotReferences()[index];\n if (!reference) return false;\n return controller.rewind(reference.cursor)?.status === \"rewound\";\n },\n restoreByCursor(cursor) {\n return controller.rewind(cursor)?.status === \"rewound\";\n },\n step(delta) {\n if (!Number.isInteger(delta)) return false;\n const references = controller.getCompatibilitySnapshotReferences();\n if (references.length === 0) return false;\n const status = controller.getSnapshotHistoryStatus();\n const activeIndex = status.source === \"retained\" && status.cursor !== null\n ? references.findIndex((reference) => reference.cursor === status.cursor)\n : -1;\n const base = activeIndex === -1 ? references.length - 1 : activeIndex;\n const target = Math.max(0, Math.min(references.length - 1, base + delta));\n return controller.rewind(references[target]!.cursor)?.status === \"rewound\";\n },\n getState() {\n const references = controller.getCompatibilitySnapshotReferences();\n const status = controller.getSnapshotHistoryStatus();\n const cursor = status.source === \"retained\" && status.cursor !== null\n ? references.findIndex((reference) => reference.cursor === status.cursor)\n : -1;\n return {\n snapshots: references.map((reference) => ({\n seq: reference.cursor,\n at: Date.parse(reference.capturedAt),\n ...(reference.label !== undefined ? { label: reference.label } : {}),\n })),\n cursor: cursor === -1 ? null : cursor,\n capacity: status.snapshotLimit,\n };\n },\n subscribe(listener) {\n return controller.subscribeSnapshotHistory(listener);\n },\n clear() {\n controller.clearSnapshotHistory();\n },\n });\n\n const dispose = () => {\n if (disposed) return;\n activeClients = 0;\n publishLifecycle(\"disposed\");\n disposed = true;\n unregisterCompatibility();\n unsubscribeStore();\n listeners.clear();\n history.length = 0;\n historySizes.length = 0;\n retainedBytes = 0;\n entityRevisions.clear();\n entityValueRevisions.clear();\n viewRegistry.dispose();\n previewController.dispose();\n snapshotHistory.dispose();\n };\n\n publishLifecycle(\"attached\");\n return { controller, dispose };\n}\n\nfunction createDisposedTransport(storeId: string, clientId: string): GraphDevtoolsTransport {\n return {\n request(command) {\n const parsed = parseCommand(command);\n return Promise.resolve(resultError(\n storeId,\n parsed?.requestId ?? clientId,\n \"disposed\",\n \"DevTools controller is disposed\",\n ));\n },\n subscribe() {\n return () => {};\n },\n close() {},\n };\n}\n\n/** Attach or reference the one DevTools controller owned by `store`. */\nexport function attachGraphDevtools(\n store: GraphStore,\n options: AttachGraphDevtoolsOptions = {},\n): GraphDevtoolsAttachment {\n if (options.enabled === false) {\n return { enabled: false, controller: null, detach() {} };\n }\n\n let entry = controllers.get(store);\n if (!entry || entry.controller.isDisposed()) {\n entry = { ...createController(store, options), references: 0 };\n controllers.set(store, entry);\n }\n entry.references += 1;\n let detached = false;\n\n return {\n enabled: true,\n controller: entry.controller,\n detach() {\n if (detached) return;\n detached = true;\n const current = controllers.get(store);\n if (!current || current.controller !== entry?.controller) return;\n current.references = Math.max(0, current.references - 1);\n if (current.references === 0) {\n current.dispose();\n controllers.delete(store);\n }\n },\n };\n}\n\n/** Return the currently attached controller without changing its lifetime. */\nexport function getGraphDevtoolsController(store: GraphStore): GraphDevtoolsController | null {\n const entry = controllers.get(store);\n return entry && !entry.controller.isDisposed() ? entry.controller : null;\n}\n\nregisterGraphDevtoolsCompatibilityFactory((store) => {\n const attachment = attachGraphDevtools(store);\n return () => attachment.detach();\n});\n","import {\n GRAPH_DEVTOOLS_PROTOCOL,\n GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n type GraphDevtoolsCommandName,\n type GraphDevtoolsEvent,\n type GraphDevtoolsResult,\n type GraphDevtoolsTransport,\n} from \"./protocol\";\n\nexport interface GraphDevtoolsClient {\n readonly storeId: string;\n request(command: GraphDevtoolsCommandName, payload?: unknown): Promise<GraphDevtoolsResult>;\n subscribe(listener: (event: GraphDevtoolsEvent) => void): () => void;\n disconnect(): void;\n}\n\nlet nextRequest = 1;\n\n/** Protocol client that depends only on a transport, not Zustand or a UI runtime. */\nexport function createGraphDevtoolsClient(\n storeId: string,\n transport: GraphDevtoolsTransport,\n): GraphDevtoolsClient {\n let disconnected = false;\n return {\n storeId,\n request(command, payload) {\n const requestId = `request-${nextRequest++}`;\n return transport.request({\n protocol: GRAPH_DEVTOOLS_PROTOCOL,\n version: GRAPH_DEVTOOLS_PROTOCOL_VERSION,\n requestId,\n storeId,\n command,\n ...(payload !== undefined ? { payload } : {}),\n });\n },\n subscribe(listener) {\n if (disconnected) return () => {};\n return transport.subscribe(listener);\n },\n disconnect() {\n if (disconnected) return;\n disconnected = true;\n transport.close();\n },\n };\n}\n"]}