@r-a-i-t-h/viz-host 0.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,394 @@
1
+ /**
2
+ * Static context dependency graph: which actions / guards / invokes read or
3
+ * write which context keys. Built from live machine `logic` before
4
+ * `toPortable` strips functions.
5
+ */
6
+ const CONTEXT_KEY_RE = /context\s*(?:\.\s*([A-Za-z_$][\w$]*)|\[["']([^"']+)["']\])/g;
7
+ const COMPOUND_GUARDS = new Set(['xstate.and', 'xstate.or', 'xstate.not']);
8
+ /** Analyze a live state machine for context key read/write dependencies. */
9
+ export function analyzeContextDeps(logic) {
10
+ const machine = logic;
11
+ const graph = { nodes: new Map(), edges: [] };
12
+ const initialKeys = plainContextKeys(machine.config?.context);
13
+ for (const key of initialKeys) {
14
+ ensureContextKey(graph, key);
15
+ }
16
+ const root = machine.definition;
17
+ if (root) {
18
+ walkState(root, machine.config, machine, graph);
19
+ }
20
+ return {
21
+ nodes: [...graph.nodes.values()],
22
+ edges: graph.edges,
23
+ };
24
+ }
25
+ function walkState(node, config, machine, graph) {
26
+ const stateId = typeof node.id === 'string' && node.id.length > 0 ? node.id : '(unknown)';
27
+ analyzeActions(node.entry, config?.entry, machine, graph, {
28
+ stateId,
29
+ site: 'entry',
30
+ });
31
+ analyzeActions(node.exit, config?.exit, machine, graph, {
32
+ stateId,
33
+ site: 'exit',
34
+ });
35
+ const onKeys = new Set(Object.keys(node.on ?? {}));
36
+ for (const [eventType, value] of Object.entries(node.on ?? {})) {
37
+ const configTransitions = config?.on?.[eventType];
38
+ const defTransitions = asList(value);
39
+ const cfgTransitions = asList(configTransitions);
40
+ for (let i = 0; i < defTransitions.length; i++) {
41
+ analyzeTransition(defTransitions[i], cfgTransitions[i], machine, graph, {
42
+ stateId,
43
+ site: 'transition',
44
+ eventType,
45
+ });
46
+ }
47
+ }
48
+ // Eventless / always transitions live on `transitions` but not always in `on`.
49
+ for (const transition of node.transitions ?? []) {
50
+ const eventType = eventTypeOf(transition);
51
+ if (eventType && onKeys.has(eventType))
52
+ continue;
53
+ analyzeTransition(transition, undefined, machine, graph, {
54
+ stateId,
55
+ site: 'transition',
56
+ eventType,
57
+ });
58
+ }
59
+ const defInvokes = node.invoke ?? [];
60
+ const cfgInvokes = asList(config?.invoke);
61
+ for (let i = 0; i < defInvokes.length; i++) {
62
+ analyzeInvoke(defInvokes[i], cfgInvokes[i], graph, stateId);
63
+ }
64
+ for (const [key, child] of Object.entries(node.states ?? {})) {
65
+ walkState(child, config?.states?.[key], machine, graph);
66
+ }
67
+ }
68
+ function analyzeTransition(transition, configTransition, machine, graph, site) {
69
+ if (!transition || typeof transition !== 'object')
70
+ return;
71
+ const t = transition;
72
+ const cfg = configTransition && typeof configTransition === 'object'
73
+ ? configTransition
74
+ : undefined;
75
+ analyzeActions(t.actions, cfg?.actions, machine, graph, site);
76
+ const guard = t.guard ?? cfg?.guard;
77
+ if (guard != null) {
78
+ analyzeGuard(guard, machine, graph, site);
79
+ }
80
+ }
81
+ function analyzeInvoke(invoke, configInvoke, graph, stateId) {
82
+ if (!invoke || typeof invoke !== 'object')
83
+ return;
84
+ const inv = invoke;
85
+ const cfg = configInvoke && typeof configInvoke === 'object'
86
+ ? configInvoke
87
+ : undefined;
88
+ const invokeId = invokeEntityId(inv.id, inv.src, stateId);
89
+ const label = invokeLabel(inv.id, inv.src);
90
+ ensureEntity(graph, invokeId, 'invoke', label, 'opaque');
91
+ const site = { stateId, site: 'invoke' };
92
+ const input = typeof inv.input === 'function' ? inv.input : cfg?.input;
93
+ if (typeof input === 'function') {
94
+ const reads = extractContextReads(input);
95
+ if (reads.length > 0) {
96
+ bumpCoverage(graph, invokeId, 'partial');
97
+ for (const key of reads) {
98
+ addEdge(graph, invokeId, key, 'reads', site);
99
+ }
100
+ }
101
+ }
102
+ // onDone / onError actions are already present on `definition.on` with live
103
+ // assign functions — do not re-walk invoke.onDone/onError (would duplicate).
104
+ }
105
+ function analyzeActions(actions, configActions, machine, graph, site) {
106
+ const defList = asList(actions);
107
+ const cfgList = asList(configActions);
108
+ const len = Math.max(defList.length, cfgList.length);
109
+ for (let i = 0; i < len; i++) {
110
+ const action = preferActionBody(defList[i], cfgList[i]);
111
+ if (action == null)
112
+ continue;
113
+ if (isInjectedAfterAction(action))
114
+ continue;
115
+ analyzeAction(action, machine, graph, site);
116
+ }
117
+ }
118
+ /**
119
+ * Definition sometimes stores `{ type: 'xstate.assign' }` without `.assignment`;
120
+ * the authored config still has the live assign function — prefer that.
121
+ */
122
+ function preferActionBody(definitionAction, configAction) {
123
+ if (isStrippedAssign(definitionAction) && configAction != null) {
124
+ return configAction;
125
+ }
126
+ return definitionAction ?? configAction;
127
+ }
128
+ function isStrippedAssign(action) {
129
+ if (!action || typeof action !== 'object')
130
+ return false;
131
+ const typed = action;
132
+ return typed.type === 'xstate.assign' && typed.assignment == null;
133
+ }
134
+ function analyzeAction(action, machine, graph, site) {
135
+ const resolved = resolveAction(action, machine);
136
+ const entityId = `action:${resolved.name}`;
137
+ ensureEntity(graph, entityId, 'action', resolved.name, 'opaque');
138
+ if (resolved.assignKeys.length > 0) {
139
+ bumpCoverage(graph, entityId, 'known');
140
+ for (const key of resolved.assignKeys) {
141
+ addEdge(graph, entityId, key, 'writes', site);
142
+ }
143
+ }
144
+ if (resolved.readKeys.length > 0) {
145
+ bumpCoverage(graph, entityId, 'partial');
146
+ for (const key of resolved.readKeys) {
147
+ addEdge(graph, entityId, key, 'reads', site);
148
+ }
149
+ }
150
+ }
151
+ function analyzeGuard(guard, machine, graph, site) {
152
+ for (const leaf of flattenGuard(guard)) {
153
+ const resolved = resolveGuard(leaf, machine);
154
+ const entityId = `guard:${resolved.name}`;
155
+ ensureEntity(graph, entityId, 'guard', resolved.name, 'opaque');
156
+ if (resolved.readKeys.length > 0) {
157
+ bumpCoverage(graph, entityId, 'partial');
158
+ for (const key of resolved.readKeys) {
159
+ addEdge(graph, entityId, key, 'reads', site);
160
+ }
161
+ }
162
+ }
163
+ }
164
+ function resolveAction(action, machine) {
165
+ if (typeof action === 'string') {
166
+ return resolveActionImpl(action, machine.implementations?.actions?.[action]);
167
+ }
168
+ if (typeof action === 'function') {
169
+ const typed = action;
170
+ const type = typeof typed.type === 'string' && typed.type.length > 0
171
+ ? typed.type
172
+ : '(inline)';
173
+ return inspectActionValue(type, action);
174
+ }
175
+ if (action && typeof action === 'object') {
176
+ const type = action.type;
177
+ if (typeof type === 'string' && type.length > 0) {
178
+ if (type === 'xstate.assign') {
179
+ return inspectActionValue(type, action);
180
+ }
181
+ const impl = machine.implementations?.actions?.[type];
182
+ if (impl !== undefined) {
183
+ return resolveActionImpl(type, impl);
184
+ }
185
+ return inspectActionValue(type, action);
186
+ }
187
+ }
188
+ return { name: '(inline)', assignKeys: [], readKeys: [] };
189
+ }
190
+ function resolveActionImpl(name, impl) {
191
+ if (impl === undefined) {
192
+ return { name, assignKeys: [], readKeys: [] };
193
+ }
194
+ return inspectActionValue(name, impl);
195
+ }
196
+ function inspectActionValue(name, value) {
197
+ const assignment = getAssignmentMap(value);
198
+ if (assignment) {
199
+ const assignKeys = [];
200
+ const readKeys = [];
201
+ for (const [key, expr] of Object.entries(assignment)) {
202
+ assignKeys.push(key);
203
+ if (typeof expr === 'function') {
204
+ readKeys.push(...extractContextReads(expr));
205
+ }
206
+ }
207
+ return {
208
+ name: name === 'xstate.assign' ? 'xstate.assign' : name,
209
+ assignKeys: unique(assignKeys),
210
+ readKeys: unique(readKeys),
211
+ };
212
+ }
213
+ if (typeof value === 'function') {
214
+ return {
215
+ name,
216
+ assignKeys: [],
217
+ readKeys: extractContextReads(value),
218
+ };
219
+ }
220
+ return { name, assignKeys: [], readKeys: [] };
221
+ }
222
+ /** XState `assign()` is a function (or object) with an `.assignment` map. */
223
+ function getAssignmentMap(value) {
224
+ if (value == null)
225
+ return null;
226
+ if (typeof value !== 'function' && typeof value !== 'object')
227
+ return null;
228
+ const assignment = value.assignment;
229
+ if (!assignment || typeof assignment !== 'object' || Array.isArray(assignment)) {
230
+ return null;
231
+ }
232
+ return assignment;
233
+ }
234
+ function resolveGuard(guard, machine) {
235
+ if (typeof guard === 'string') {
236
+ const impl = machine.implementations?.guards?.[guard];
237
+ return {
238
+ name: guard,
239
+ readKeys: typeof impl === 'function' ? extractContextReads(impl) : [],
240
+ };
241
+ }
242
+ if (typeof guard === 'function') {
243
+ const typed = guard;
244
+ const name = typeof typed.type === 'string' && typed.type.length > 0
245
+ ? typed.type
246
+ : '(inline)';
247
+ return { name, readKeys: extractContextReads(guard) };
248
+ }
249
+ if (guard && typeof guard === 'object' && 'type' in guard) {
250
+ const type = guard.type;
251
+ if (typeof type === 'string') {
252
+ const impl = machine.implementations?.guards?.[type];
253
+ if (typeof impl === 'function') {
254
+ return { name: type, readKeys: extractContextReads(impl) };
255
+ }
256
+ return { name: type, readKeys: [] };
257
+ }
258
+ }
259
+ return { name: '(inline)', readKeys: [] };
260
+ }
261
+ /** Expand compound guards into leaf refs (skipping and/or/not wrappers). */
262
+ function flattenGuard(guard) {
263
+ if (guard == null)
264
+ return [];
265
+ if (typeof guard === 'string' || typeof guard === 'function') {
266
+ return [guard];
267
+ }
268
+ if (guard && typeof guard === 'object' && 'type' in guard) {
269
+ const type = guard.type;
270
+ if (typeof type === 'string' && COMPOUND_GUARDS.has(type)) {
271
+ const params = guard.params;
272
+ const list = asList(params);
273
+ return list.flatMap(flattenGuard);
274
+ }
275
+ return [guard];
276
+ }
277
+ return [guard];
278
+ }
279
+ function extractContextReads(fn) {
280
+ if (typeof fn !== 'function')
281
+ return [];
282
+ try {
283
+ const src = Function.prototype.toString.call(fn);
284
+ const keys = [];
285
+ CONTEXT_KEY_RE.lastIndex = 0;
286
+ for (const match of src.matchAll(CONTEXT_KEY_RE)) {
287
+ const key = match[1] ?? match[2];
288
+ if (key)
289
+ keys.push(key);
290
+ }
291
+ return unique(keys);
292
+ }
293
+ catch {
294
+ return [];
295
+ }
296
+ }
297
+ function plainContextKeys(context) {
298
+ if (!context || typeof context !== 'object' || Array.isArray(context)) {
299
+ return [];
300
+ }
301
+ return Object.keys(context);
302
+ }
303
+ function ensureContextKey(graph, key) {
304
+ const id = `ctx:${key}`;
305
+ if (!graph.nodes.has(id)) {
306
+ graph.nodes.set(id, {
307
+ id,
308
+ kind: 'contextKey',
309
+ label: key,
310
+ coverage: 'known',
311
+ });
312
+ }
313
+ return id;
314
+ }
315
+ function ensureEntity(graph, id, kind, label, coverage) {
316
+ const existing = graph.nodes.get(id);
317
+ if (!existing) {
318
+ graph.nodes.set(id, { id, kind, label, coverage });
319
+ return;
320
+ }
321
+ existing.coverage = mergeCoverage(existing.coverage, coverage);
322
+ }
323
+ function bumpCoverage(graph, id, coverage) {
324
+ const node = graph.nodes.get(id);
325
+ if (!node)
326
+ return;
327
+ node.coverage = mergeCoverage(node.coverage, coverage);
328
+ }
329
+ function mergeCoverage(a, b) {
330
+ const rank = { opaque: 0, partial: 1, known: 2 };
331
+ return rank[a] >= rank[b] ? a : b;
332
+ }
333
+ function addEdge(graph, fromEntityId, contextKey, relation, site) {
334
+ const to = ensureContextKey(graph, contextKey);
335
+ const already = graph.edges.some((edge) => edge.from === fromEntityId &&
336
+ edge.to === to &&
337
+ edge.relation === relation &&
338
+ edge.at.stateId === site.stateId &&
339
+ edge.at.site === site.site &&
340
+ edge.at.eventType === site.eventType);
341
+ if (already)
342
+ return;
343
+ graph.edges.push({
344
+ from: fromEntityId,
345
+ to,
346
+ relation,
347
+ at: {
348
+ stateId: site.stateId,
349
+ site: site.site,
350
+ ...(site.eventType !== undefined ? { eventType: site.eventType } : {}),
351
+ },
352
+ });
353
+ }
354
+ function invokeEntityId(id, src, stateId) {
355
+ if (typeof id === 'string' && id.length > 0)
356
+ return `invoke:${id}`;
357
+ if (typeof src === 'string' && src.length > 0) {
358
+ return `invoke:${stateId}:${src}`;
359
+ }
360
+ return `invoke:${stateId}`;
361
+ }
362
+ function invokeLabel(id, src) {
363
+ if (typeof id === 'string' && id.length > 0)
364
+ return id;
365
+ if (typeof src === 'string' && src.length > 0)
366
+ return src;
367
+ if (src && typeof src === 'object' && 'id' in src) {
368
+ const srcId = src.id;
369
+ if (typeof srcId === 'string')
370
+ return srcId;
371
+ }
372
+ return '(invoke)';
373
+ }
374
+ function asList(value) {
375
+ if (value == null)
376
+ return [];
377
+ return Array.isArray(value) ? value : [value];
378
+ }
379
+ function eventTypeOf(transition) {
380
+ if (!transition || typeof transition !== 'object')
381
+ return undefined;
382
+ const eventType = transition.eventType;
383
+ return typeof eventType === 'string' ? eventType : undefined;
384
+ }
385
+ function isInjectedAfterAction(action) {
386
+ if (!action || typeof action !== 'object')
387
+ return false;
388
+ const type = action.type;
389
+ return type === 'xstate.raise' || type === 'xstate.cancel';
390
+ }
391
+ function unique(values) {
392
+ return [...new Set(values)];
393
+ }
394
+ //# sourceMappingURL=contextDeps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextDeps.js","sourceRoot":"","sources":["../src/contextDeps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { AnyEventObject, InspectionEvent, MachineContext } from 'xstate';
2
+ import { type HostBridgeStatus, type VisualizerSnapshot } from '@r-a-i-t-h/viz-protocol';
3
+ export type { HostBridgeStatus, VisualizerSnapshot } from '@r-a-i-t-h/viz-protocol';
4
+ export interface VisualizerHostOptions {
5
+ /**
6
+ * Absolute or same-origin URL of the visualizer page.
7
+ * Required for `openPopup()`.
8
+ */
9
+ visualizerUrl: string;
10
+ /** Max log entries retained for subscribers and popup replay. @default 100 */
11
+ maxLogEntries?: number;
12
+ /**
13
+ * Scrub context before frames are stored / sent over postMessage.
14
+ * Runs after actor-ref enrichment so spawn↔sessionId markers can survive
15
+ * if the hook leaves those keys intact.
16
+ */
17
+ sanitizeContext?: (context: MachineContext) => MachineContext;
18
+ /** Scrub events before logging event types (and any future event payloads). */
19
+ sanitizeEvent?: (event: AnyEventObject) => AnyEventObject;
20
+ }
21
+ export type VisualizerListener = (snapshot: VisualizerSnapshot) => void;
22
+ /**
23
+ * Framework-agnostic visualizer host API.
24
+ *
25
+ * Real deployments typically only call `openPopup()` from a user gesture
26
+ * (or a parent-page message that triggers one). Inline visibility is optional
27
+ * and mainly useful for local PoCs — the host iframe need not ship any UI.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const viz = createVisualizerHost({
32
+ * visualizerUrl: 'https://your-viz-host/',
33
+ * });
34
+ * const actor = createActor(machine, { inspect: viz.inspect });
35
+ * actor.start();
36
+ *
37
+ * // From a click handler, console, or parent postMessage bridge:
38
+ * viz.openPopup();
39
+ * viz.showInline();
40
+ * ```
41
+ */
42
+ export interface VisualizerHost {
43
+ /**
44
+ * Pass to `createActor(machine, { inspect: host.inspect })`.
45
+ * Every new machine actor (root or spawned/invoked) is projected from its
46
+ * `@xstate.actor` event and forwarded to the popup / subscribers.
47
+ */
48
+ readonly inspect: (event: InspectionEvent) => void;
49
+ /** Open (or focus) the popup visualizer. Must run from a user gesture. */
50
+ openPopup(): boolean;
51
+ /** Request that subscribers show an in-page visualizer. */
52
+ showInline(): void;
53
+ /** Request that subscribers hide the in-page visualizer. */
54
+ hideInline(): void;
55
+ /** Toggle in-page visualizer visibility. Returns the new value. */
56
+ toggleInline(): boolean;
57
+ isInlineVisible(): boolean;
58
+ getPopupStatus(): HostBridgeStatus;
59
+ getSnapshot(): VisualizerSnapshot;
60
+ /** Subscribe to snapshot changes. Returns an unsubscribe function. */
61
+ subscribe(listener: VisualizerListener): () => void;
62
+ dispose(): void;
63
+ }
64
+ /**
65
+ * Create a visualizer host that attaches to XState actors via `inspect`.
66
+ * No React, no CSS — pure API. Optional UIs subscribe or call these methods.
67
+ */
68
+ export declare function createVisualizerHost(options: VisualizerHostOptions): VisualizerHost;
69
+ //# sourceMappingURL=createVisualizerHost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createVisualizerHost.d.ts","sourceRoot":"","sources":["../src/createVisualizerHost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC9E,OAAO,EACL,KAAK,gBAAgB,EAIrB,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAQjC,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,cAAc,CAAC;IAC9D,+EAA+E;IAC/E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC;CAC3D;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAExE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAEnD,0EAA0E;IAC1E,SAAS,IAAI,OAAO,CAAC;IAErB,2DAA2D;IAC3D,UAAU,IAAI,IAAI,CAAC;IAEnB,4DAA4D;IAC5D,UAAU,IAAI,IAAI,CAAC;IAEnB,mEAAmE;IACnE,YAAY,IAAI,OAAO,CAAC;IAExB,eAAe,IAAI,OAAO,CAAC;IAE3B,cAAc,IAAI,gBAAgB,CAAC;IAEnC,WAAW,IAAI,kBAAkB,CAAC;IAElC,sEAAsE;IACtE,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAC;IAEpD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,cAAc,CAqIhB"}
@@ -0,0 +1,135 @@
1
+ import {} from '@r-a-i-t-h/viz-protocol';
2
+ import { HostBridge } from './bridge/hostBridge.js';
3
+ import { machineLogicFromEvent, projectFrame, projectMachine, } from './project.js';
4
+ /**
5
+ * Create a visualizer host that attaches to XState actors via `inspect`.
6
+ * No React, no CSS — pure API. Optional UIs subscribe or call these methods.
7
+ */
8
+ export function createVisualizerHost(options) {
9
+ const maxLogEntries = options.maxLogEntries ?? 100;
10
+ const listeners = new Set();
11
+ const machines = new Map();
12
+ const frames = new Map();
13
+ const previousContexts = new Map();
14
+ const previousContextAges = new Map();
15
+ let log = [];
16
+ let inlineVisible = false;
17
+ let seq = 0;
18
+ const bridge = new HostBridge({
19
+ visualizerUrl: options.visualizerUrl,
20
+ maxLogDeferred: maxLogEntries,
21
+ onStatus: () => emit(),
22
+ });
23
+ const emit = () => {
24
+ const snapshot = getSnapshot();
25
+ for (const listener of listeners)
26
+ listener(snapshot);
27
+ };
28
+ const getSnapshot = () => ({
29
+ machines: [...machines.values()],
30
+ frames: Object.fromEntries(frames),
31
+ log,
32
+ inlineVisible,
33
+ popupStatus: bridge.getStatus(),
34
+ });
35
+ const inspect = (event) => {
36
+ const resolved = machineLogicFromEvent(event);
37
+ if (resolved) {
38
+ const machine = projectMachine(resolved.logic, resolved.sessionId, {
39
+ parentSessionId: resolved.parentSessionId,
40
+ input: resolved.input,
41
+ });
42
+ machines.set(machine.sessionId, machine);
43
+ bridge.sendMachine(machine);
44
+ }
45
+ const logged = summarizeInspectionEvent(event, seq++, options.sanitizeEvent);
46
+ log = [logged, ...log].slice(0, maxLogEntries);
47
+ bridge.sendLog(logged);
48
+ if (event.type === '@xstate.snapshot') {
49
+ const snapshot = event.snapshot;
50
+ const sessionId = logged.sessionId;
51
+ const frame = projectFrame(sessionId, snapshot, {
52
+ eventType: logged.eventType,
53
+ previousContext: previousContexts.get(sessionId),
54
+ previousAges: previousContextAges.get(sessionId),
55
+ machine: machines.get(sessionId),
56
+ sanitizeContext: options.sanitizeContext
57
+ ? (ctx) => options.sanitizeContext((ctx ?? {}))
58
+ : undefined,
59
+ });
60
+ previousContexts.set(sessionId, frame.context);
61
+ if (frame.contextKeyAges) {
62
+ previousContextAges.set(sessionId, frame.contextKeyAges);
63
+ }
64
+ frames.set(frame.sessionId, frame);
65
+ bridge.sendFrame(frame);
66
+ }
67
+ emit();
68
+ };
69
+ const host = {
70
+ inspect,
71
+ openPopup() {
72
+ const ok = bridge.open();
73
+ emit();
74
+ return ok;
75
+ },
76
+ showInline() {
77
+ inlineVisible = true;
78
+ emit();
79
+ },
80
+ hideInline() {
81
+ inlineVisible = false;
82
+ emit();
83
+ },
84
+ toggleInline() {
85
+ inlineVisible = !inlineVisible;
86
+ emit();
87
+ return inlineVisible;
88
+ },
89
+ isInlineVisible() {
90
+ return inlineVisible;
91
+ },
92
+ getPopupStatus() {
93
+ return bridge.getStatus();
94
+ },
95
+ getSnapshot,
96
+ subscribe(listener) {
97
+ listeners.add(listener);
98
+ listener(getSnapshot());
99
+ return () => {
100
+ listeners.delete(listener);
101
+ };
102
+ },
103
+ dispose() {
104
+ bridge.dispose();
105
+ listeners.clear();
106
+ machines.clear();
107
+ frames.clear();
108
+ previousContexts.clear();
109
+ previousContextAges.clear();
110
+ log = [];
111
+ },
112
+ };
113
+ return host;
114
+ }
115
+ function summarizeInspectionEvent(event, seq, sanitizeEvent) {
116
+ const actorRef = event.actorRef;
117
+ const base = {
118
+ seq,
119
+ type: event.type,
120
+ sessionId: actorRef?.sessionId ?? '(unknown)',
121
+ at: Date.now(),
122
+ };
123
+ if ('event' in event && event.event) {
124
+ const scrubbed = sanitizeEvent
125
+ ? sanitizeEvent(event.event)
126
+ : event.event;
127
+ base.eventType = scrubbed.type;
128
+ }
129
+ if ('snapshot' in event && event.snapshot) {
130
+ const snapshot = event.snapshot;
131
+ base.value = snapshot.value;
132
+ }
133
+ return base;
134
+ }
135
+ //# sourceMappingURL=createVisualizerHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createVisualizerHost.js","sourceRoot":"","sources":["../src/createVisualizerHost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Host library: inspect + project live XState logic → Viz*, open popup bridge.
3
+ *
4
+ * Depends on `@r-a-i-t-h/viz-protocol` for the shared model/wire types.
5
+ * Peer: `xstate` v5.
6
+ */
7
+ export { createVisualizerHost, type VisualizerHost, type VisualizerHostOptions, type VisualizerListener, } from './createVisualizerHost.js';
8
+ export type { HostBridgeStatus, VisualizerSnapshot } from '@r-a-i-t-h/viz-protocol';
9
+ export { machineLogicFromEvent, projectFrame, projectMachine, portableizeContext, activePaths, } from './project.js';
10
+ export { normalizeStateNodeId } from '@r-a-i-t-h/viz-protocol';
11
+ export { collectNextEvents } from './nextEvents.js';
12
+ export { computeContextKeyAges } from './contextAges.js';
13
+ export { analyzeContextDeps, type ContextDepEdge, type ContextDepGraph, type ContextDepNode, type DepCoverage, type DepEntityKind, type DepRelation, type DepSite, } from './contextDeps.js';
14
+ /** Re-export protocol model for apps that only install `@r-a-i-t-h/viz-host`. */
15
+ export type { VizActorRefMarker, VizAnalysis, VizBadge, VizBadgeKind, VizEvent, VizFrame, VizInvoke, VizLogEntry, VizMachine, VizNextEvent, VizNextEventCandidate, VizNode, VizNodeDetails, VizNodeKind, VizSymbol, VizTransition, } from '@r-a-i-t-h/viz-protocol';
16
+ export { isVizActorRefMarker } from '@r-a-i-t-h/viz-protocol';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,OAAO,GACb,MAAM,kBAAkB,CAAC;AAE1B,iFAAiF;AACjF,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,GACd,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}