@llui/dom 0.0.28 → 0.0.30

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.
@@ -187,6 +187,21 @@ export interface LluiDebugAPI {
187
187
  dirtyBindingIndices: number[];
188
188
  };
189
189
  };
190
+ /** Returns the pre- and post-transform source of the view function injected by the compiler. Pass an optional viewFn name to select a specific view (currently unused — returns the component's view). Returns null if no source was injected. */
191
+ getCompiledSource(_viewFn?: string): {
192
+ pre: string;
193
+ post: string;
194
+ } | null;
195
+ /** Returns the per-Msg-variant → dirty-mask map injected by the compiler. Lets tools explain which state fields a given message type will dirty. Returns null if not injected. */
196
+ getMsgMaskMap(): Record<string, number> | null;
197
+ /** Returns the source location (file, line, column) for the binding at the given index, as recorded by the compiler. Returns null if the index is out of range or no source map was injected. */
198
+ getBindingSource(bindingIndex: number): {
199
+ file: string;
200
+ line: number;
201
+ column: number;
202
+ } | null;
203
+ /** Compare server-rendered HTML (stored in data-llui-ssr-html on the mount root) against the current client DOM. Returns an array of divergences — empty when hydration is clean. */
204
+ getHydrationReport(): HydrationDivergence[];
190
205
  }
191
206
  export interface ElementReport {
192
207
  selector: string;
@@ -234,5 +249,11 @@ export interface MessageSchemaInfo {
234
249
  discriminant: string;
235
250
  variants: Record<string, Record<string, unknown>>;
236
251
  }
252
+ export interface HydrationDivergence {
253
+ path: string;
254
+ kind: 'attribute' | 'text' | 'structural';
255
+ server: unknown;
256
+ client: unknown;
257
+ }
237
258
  export declare function installDevTools(inst: object): void;
238
259
  //# sourceMappingURL=devtools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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"}
package/dist/devtools.js CHANGED
@@ -180,6 +180,39 @@ export function startRelay(port = 5200) {
180
180
  connectRelay(port, true);
181
181
  }
182
182
  }
183
+ function diffNodes(client, server, path, out) {
184
+ const clientAttrs = new Map(Array.from(client.attributes).map((a) => [a.name, a.value]));
185
+ const serverAttrs = new Map(Array.from(server.attributes).map((a) => [a.name, a.value]));
186
+ for (const [name, val] of serverAttrs) {
187
+ if (clientAttrs.get(name) !== val) {
188
+ out.push({
189
+ path,
190
+ kind: 'attribute',
191
+ server: `${name}="${val}"`,
192
+ client: `${name}="${clientAttrs.get(name) ?? ''}"`,
193
+ });
194
+ }
195
+ }
196
+ if (client.children.length === 0 && server.children.length === 0) {
197
+ if (client.textContent !== server.textContent) {
198
+ out.push({ path, kind: 'text', server: server.textContent, client: client.textContent });
199
+ }
200
+ return;
201
+ }
202
+ if (client.children.length !== server.children.length) {
203
+ out.push({
204
+ path,
205
+ kind: 'structural',
206
+ server: server.children.length,
207
+ client: client.children.length,
208
+ });
209
+ return;
210
+ }
211
+ for (let i = 0; i < client.children.length; i++) {
212
+ const tag = client.children[i].tagName.toLowerCase();
213
+ diffNodes(client.children[i], server.children[i], `${path} > ${tag}:nth-child(${i + 1})`, out);
214
+ }
215
+ }
183
216
  const MAX_HISTORY = 1000;
184
217
  function findLifetimeById(root, id) {
185
218
  const n = Number(id);
@@ -732,6 +765,47 @@ export function installDevTools(inst) {
732
765
  const known = schema?.variants ? Object.keys(schema.variants) : undefined;
733
766
  return ci._coverage.snapshot(known);
734
767
  },
768
+ getCompiledSource(_viewFn) {
769
+ const def = ci.def;
770
+ const pre = def['__preSource'];
771
+ const post = def['__postSource'];
772
+ if (typeof pre !== 'string' || typeof post !== 'string')
773
+ return null;
774
+ return { pre, post };
775
+ },
776
+ getMsgMaskMap() {
777
+ const def = ci.def;
778
+ const map = def['__msgMaskMap'];
779
+ return map != null && typeof map === 'object' ? map : null;
780
+ },
781
+ getBindingSource(bindingIndex) {
782
+ const def = ci.def;
783
+ const sources = def['__bindingSources'];
784
+ if (!Array.isArray(sources))
785
+ return null;
786
+ const entry = sources.find((s) => s.bindingIndex === bindingIndex);
787
+ return entry ? { file: entry.file, line: entry.line, column: entry.column } : null;
788
+ },
789
+ getHydrationReport() {
790
+ if (typeof document === 'undefined')
791
+ return [];
792
+ // Find a mounted element that carries the server-rendered HTML attribute.
793
+ // @llui/vike stamps this attribute during SSR so the client can compare.
794
+ const root = document.querySelector('[data-llui-ssr-html]');
795
+ if (!root)
796
+ return [];
797
+ const serverHtml = root.getAttribute('data-llui-ssr-html');
798
+ if (!serverHtml)
799
+ return [];
800
+ const parser = new DOMParser();
801
+ const serverDoc = parser.parseFromString(serverHtml, 'text/html');
802
+ const serverRoot = serverDoc.body.firstChild;
803
+ if (!serverRoot)
804
+ return [];
805
+ const divergences = [];
806
+ diffNodes(root, serverRoot, 'root', divergences);
807
+ return divergences;
808
+ },
735
809
  evalInPage(code) {
736
810
  const stateBefore = JSON.parse(JSON.stringify(ci.state));
737
811
  const historyLenBefore = history.length;
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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","sourcesContent":["import { flushInstance, _forceState, type ComponentInstance } from './update-loop.js'\nimport { _setDevToolsInstall } from './mount.js'\nimport { _markDisposerLogInstalled } from './lifetime.js'\nimport type { Binding, Lifetime, LifetimeNode } from './types.js'\nimport { applyBinding } from './binding.js'\nimport { createRingBuffer, type EachDiff } from './tracking/each-diff.js'\nimport {\n createRingBuffer as createDisposerBuffer,\n type DisposerEvent,\n} from './tracking/disposer-log.js'\nimport { createCoverageTracker, type CoverageSnapshot } from './tracking/coverage.js'\nimport {\n createRingBuffer as createTimelineBuffer,\n createMockRegistry,\n createPendingEffectsList,\n type PendingEffect,\n type EffectTimelineEntry,\n type EffectMatch,\n} from './tracking/effect-timeline.js'\n\nexport interface StateDiff {\n added: Record<string, unknown>\n removed: Record<string, unknown>\n changed: Record<string, { from: unknown; to: unknown }>\n}\n\nfunction diffStateInternal(a: unknown, b: unknown): StateDiff {\n const out: StateDiff = { added: {}, removed: {}, changed: {} }\n if (\n a == null ||\n b == null ||\n typeof a !== 'object' ||\n typeof b !== 'object' ||\n Array.isArray(a) !== Array.isArray(b)\n ) {\n if (a !== b) out.changed['<root>'] = { from: a, to: b }\n return out\n }\n const aObj = a as Record<string, unknown>\n const bObj = b as Record<string, unknown>\n const keys = new Set([...Object.keys(aObj), ...Object.keys(bObj)])\n for (const k of keys) {\n if (!(k in aObj)) out.added[k] = bObj[k]\n else if (!(k in bObj)) out.removed[k] = aObj[k]\n else if (!Object.is(aObj[k], bObj[k])) out.changed[k] = { from: aObj[k], to: bObj[k] }\n }\n return out\n}\n\n/**\n * Enable devtools auto-installation for every mountApp call. Called by\n * compiler-generated dev code — never imported in production builds.\n * Once enabled, every mounted component attaches `globalThis.__lluiDebug`\n * to the most recently mounted instance.\n */\nexport function enableDevTools(): void {\n _setDevToolsInstall(installDevTools)\n}\n\n// ── MCP WebSocket Relay ─────────────────────────────────────────────\n// Forwards method calls from an out-of-process MCP server to the\n// current __lluiDebug API. Dev-mode only — compiler injects startRelay(port).\n//\n// On-demand: tries a SINGLE connection on page load. If it succeeds\n// (MCP server is already running), the relay stays open and reconnects\n// on drop. If it fails, no retry loop — just registers\n// `window.__lluiConnect(port?)` so the developer can connect later\n// from the console or when the MCP server starts.\n\nlet relayPort = 5200\nlet relayConnected = false\n\ninterface RelayRequest {\n id: string\n method: keyof LluiDebugAPI | '__listComponents' | '__selectComponent'\n args: unknown[]\n}\n\nfunction handleMessage(ws: WebSocket, event: MessageEvent): void {\n let req: RelayRequest\n try {\n req = JSON.parse(String(event.data)) as RelayRequest\n } catch {\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any\n if (req.method === '__listComponents') {\n const keys = g.__lluiComponents ? Object.keys(g.__lluiComponents) : []\n const active =\n g.__lluiDebug && g.__lluiComponents\n ? (Object.entries(g.__lluiComponents).find(([, v]) => v === g.__lluiDebug)?.[0] ?? null)\n : null\n ws.send(JSON.stringify({ id: req.id, result: { components: keys, active } }))\n return\n }\n if (req.method === '__selectComponent') {\n const key = (req.args?.[0] as string | undefined) ?? ''\n const entry = g.__lluiComponents?.[key]\n if (!entry) {\n ws.send(JSON.stringify({ id: req.id, error: `unknown component: ${key}` }))\n return\n }\n g.__lluiDebug = entry\n ws.send(JSON.stringify({ id: req.id, result: { active: key } }))\n return\n }\n\n const api = g.__lluiDebug as LluiDebugAPI | undefined\n if (!api) {\n ws.send(JSON.stringify({ id: req.id, error: '__lluiDebug not available' }))\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (api as any)[req.method]\n if (typeof fn !== 'function') {\n ws.send(JSON.stringify({ id: req.id, error: `unknown method: ${req.method}` }))\n return\n }\n try {\n const result = fn.apply(api, req.args ?? [])\n ws.send(JSON.stringify({ id: req.id, result: result ?? null }))\n } catch (e) {\n ws.send(JSON.stringify({ id: req.id, error: e instanceof Error ? e.message : String(e) }))\n }\n}\n\nfunction connectRelay(port: number, isInitial: boolean): void {\n if (typeof WebSocket === 'undefined') return\n\n let ws: WebSocket\n try {\n ws = new WebSocket(`ws://127.0.0.1:${port}`)\n } catch {\n if (!isInitial) console.warn(`[LLui MCP] failed to connect to ws://127.0.0.1:${port}`)\n return\n }\n\n ws.onopen = () => {\n relayConnected = true\n console.log(`[LLui MCP] connected to ws://127.0.0.1:${port}`)\n }\n ws.onmessage = (event) => handleMessage(ws, event)\n ws.onclose = () => {\n if (relayConnected) {\n relayConnected = false\n console.log('[LLui MCP] disconnected — call __lluiConnect() to reconnect')\n }\n }\n ws.onerror = () => {\n // onclose fires after onerror — nothing to do here\n }\n}\n\n/**\n * Register the MCP relay for this page.\n *\n * Discovery happens in two phases:\n *\n * 1. **Status endpoint** (preferred): fetches `/__llui_mcp_status`,\n * which the Vite plugin serves from the active marker file written\n * by `@llui/mcp`. If the MCP server is running, the response gives\n * us the actual port — we connect immediately. This avoids the race\n * where HMR events fire before the listener registers, and handles\n * cases where MCP runs on a non-default port.\n * 2. **Compile-time fallback**: if the status endpoint is unavailable\n * (404, network error, non-Vite environment), we attempt a single\n * connection to the compiled-in `port` parameter as a best-effort.\n *\n * Either way: no retry loop. If both fail, `window.__lluiConnect(port?)`\n * is exposed so the developer can connect manually from the console\n * when the MCP server starts. The Vite plugin also dispatches an\n * `llui:mcp-ready` HMR custom event when the marker file appears later,\n * which the compiler-injected dev code forwards to `__lluiConnect`.\n */\nexport function startRelay(port = 5200): void {\n relayPort = port\n if (typeof WebSocket === 'undefined') return\n\n // Expose manual connect for on-demand use\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any\n g.__lluiConnect = (p?: number) => {\n connectRelay(p ?? relayPort, false)\n }\n\n // Try the Vite middleware first (knows the actual port from the marker file)\n if (typeof fetch !== 'undefined') {\n fetch('/__llui_mcp_status')\n .then((res) => (res.ok ? (res.json() as Promise<{ port: number }>) : null))\n .then((data) => {\n if (data && typeof data.port === 'number') {\n relayPort = data.port\n connectRelay(data.port, true)\n } else {\n // Endpoint replied 404 — MCP not running. Don't fall back to the\n // compile-time port; the HMR event will fire if MCP starts later.\n }\n })\n .catch(() => {\n // Network error or non-Vite environment — fall back to compile-time port\n connectRelay(port, true)\n })\n } else {\n // No fetch available — use the compile-time port directly\n connectRelay(port, true)\n }\n}\n\nexport interface MessageRecord {\n index: number\n timestamp: number\n msg: unknown\n stateBefore: unknown\n stateAfter: unknown\n effects: unknown[]\n dirtyMask: number\n}\n\nexport interface BindingDebugInfo {\n index: number\n mask: number\n lastValue: unknown\n kind: string\n key: string | undefined\n dead: boolean\n perItem: boolean\n}\n\nexport interface UpdateExplanation {\n bindingIndex: number\n bindingMask: number\n lastDirtyMask: number\n matched: boolean\n accessorResult: unknown\n lastValue: unknown\n changed: boolean\n}\n\nexport interface ValidationError {\n path: string\n expected: string\n received: string\n message: string\n}\n\nexport interface LluiDebugAPI {\n getState(): unknown\n send(msg: unknown): void\n flush(): void\n getMessageHistory(opts?: { since?: number; limit?: number }): MessageRecord[]\n evalUpdate(msg: unknown): { state: unknown; effects: unknown[] }\n exportTrace(): {\n lluiTrace: 1\n component: string\n generatedBy: string\n timestamp: string\n entries: Array<{ msg: unknown; expectedState: unknown; expectedEffects: unknown[] }>\n }\n clearLog(): void\n validateMessage(msg: unknown): ValidationError[] | null\n getBindings(): BindingDebugInfo[]\n whyDidUpdate(bindingIndex: number): UpdateExplanation\n searchState(query: string): unknown\n /** Returns the compiled Msg schema (discriminant + variant field types). */\n getMessageSchema(): MessageSchemaInfo | null\n /** Returns the bit→field map injected by the compiler. Lets tools decode dirty-mask values. */\n getMaskLegend(): Record<string, number> | null\n /** Given a dirty mask, return the list of top-level fields it represents. */\n decodeMask(mask: number): string[]\n /** Component name + source location (file/line from compiler-injected metadata). */\n getComponentInfo(): ComponentInfo\n /** Returns the compiled State type shape (from TypeScript `type State = { … }`). */\n getStateSchema(): object | null\n /** Returns the compiled Effect schema (from TypeScript `type Effect = { … }` union). */\n getEffectSchema(): object | null\n /** Deep-clone the current state. Pair with restoreState() to checkpoint before risky operations. */\n snapshotState(): unknown\n /** Overwrite the current state with a previously-captured snapshot. Triggers a full re-render. */\n restoreState(snap: unknown): void\n /** Find all bindings whose target node matches or is a child of the selector. */\n getBindingsFor(selector: string): BindingLocation[]\n /** Return a rich structural + style + binding report for the first element matching selector. Returns null if no element matches or document is unavailable. */\n inspectElement(selector: string): ElementReport | null\n /** Get the outerHTML of the mounted component or a specific element. Pass a selector for a specific node (defaults to the mount root). Pass maxLength to truncate output. */\n getRenderedHtml(selector?: string, maxLength?: number): string\n /** Synthesize and dispatch a browser event at a DOM element matched by selector. Returns dispatched status, the history indices of any Msgs the handler produced, and the resulting state. */\n dispatchDomEvent(\n selector: string,\n type: string,\n init?: EventInit,\n ): {\n dispatched: boolean\n messagesProducedIndices: number[]\n resultingState: unknown | null\n }\n /** Return info about the currently focused element: { selector (if it has an id), tagName, selectionStart, selectionEnd }. Useful for catching \"focus lost on re-render\" bugs. */\n getFocus(): {\n selector: string | null\n tagName: string | null\n selectionStart: number | null\n selectionEnd: number | null\n }\n /** Re-evaluate every binding's accessor against the current state, apply values that changed to the DOM, and return indices of bindings that changed. */\n forceRerender(): { changedBindings: number[] }\n /** Per-each-site reconciliation diffs (added/removed/moved/reused keys) from the dev-time diff log. Pass sinceIndex to filter to entries after a specific message history index. */\n getEachDiff(sinceIndex?: number): EachDiff[]\n /** Walk the component's scope tree and return a nested LifetimeNode with kind classification. Pass depth to limit traversal depth, scopeId to start from a specific scope. */\n getScopeTree(opts?: { depth?: number; scopeId?: string }): LifetimeNode\n /** Recent onDispose firings with scope id and cause. Pass 'limit' to cap results to the N most recent entries. Catches 'leak on branch swap' class bugs. */\n getDisposerLog(limit?: number): DisposerEvent[]\n /** Edge list: state path → binding indices that depend on it. Inverts the compiler-emitted mask legend to show, for each top-level state field, which bindings will re-evaluate when it changes. */\n getBindingGraph(): Array<{ statePath: string; bindingIndices: number[] }>\n /** Current queued and in-flight effects. Each entry has { id, type, dispatchedAt, status, payload }. Use 'id' with llui_resolve_effect to manually resolve one. */\n getPendingEffects(): PendingEffect[]\n /** Phased log of effect events: dispatched -> in-flight -> resolved/cancelled/resolved-mocked. Each entry has { effectId, type, phase, timestamp, durationMs? }. Pass 'limit' to cap the tail. */\n getEffectTimeline(limit?: number): EffectTimelineEntry[]\n /** Register a mock for an effect matching 'match'. The next matching effect resolves with 'response' instead of running. Mocks are one-shot by default; pass { persist: true } to keep across matches. Returns { mockId } for later reference. */\n mockEffect(\n match: EffectMatch,\n response: unknown,\n opts?: { persist?: boolean },\n ): { mockId: string }\n /** Manually resolve a pending effect with a given response. The effect's onSuccess callback (if any) runs as if it had actually resolved. Pass effectId from llui_pending_effects. */\n resolveEffect(effectId: string, response: unknown): { resolved: boolean }\n /** Rewind state by replaying from init() with the last N messages excluded. mode='pure' suppresses effects; mode='live' re-fires them. Returns the new state and rewind depth. */\n stepBack(n: number, mode: 'pure' | 'live'): { state: unknown; rewindDepth: number }\n /** Per-Msg-variant coverage for the current session. Shows which message types have run and which haven't. */\n getCoverage(): CoverageSnapshot\n /** Run arbitrary JS in page context and return { result, sideEffects }. result is the expression's return value or { error }. sideEffects captures state diff, new history entries, new pending effects, and dirty binding indices. Phase 1 does not support async expressions. */\n evalInPage(code: string): {\n result: unknown | { error: string }\n sideEffects: {\n stateChanged: StateDiff | null\n newHistoryEntries: number\n newPendingEffects: PendingEffect[]\n dirtyBindingIndices: number[]\n }\n }\n}\n\nexport interface ElementReport {\n selector: string\n tagName: string\n attributes: Record<string, string>\n classes: string[]\n dataset: Record<string, string>\n text: string\n computed: {\n display: string\n visibility: string\n position: string\n width: number\n height: number\n }\n boundingBox: { x: number; y: number; width: number; height: number }\n bindings: Array<{\n bindingIndex: number\n kind: string\n mask: number\n lastValue: unknown\n relation: 'self' | 'text-child' | 'comment-child'\n }>\n}\n\nexport interface BindingLocation {\n bindingIndex: number\n kind: string\n key: string | undefined\n mask: number\n lastValue: unknown\n /** How the binding's node relates to the matched element: 'self' (binding on the element itself) or 'text-child' (text node inside). */\n relation: 'self' | 'text-child' | 'comment-child'\n}\n\nexport interface ComponentInfo {\n name: string\n file: string | null\n line: number | null\n}\n\nexport interface MessageSchemaInfo {\n discriminant: string\n variants: Record<string, Record<string, unknown>>\n}\n\nconst MAX_HISTORY = 1000\n\nfunction findLifetimeById(root: Lifetime, id: string): Lifetime | null {\n const n = Number(id)\n if (root.id === n) return root\n for (const c of root.children) {\n const found = findLifetimeById(c, id)\n if (found) return found\n }\n return null\n}\n\nfunction walkLifetime(s: Lifetime, depth: number, maxDepth: number): LifetimeNode {\n const node: LifetimeNode = {\n scopeId: String(s.id),\n kind: s._kind ?? 'root',\n active: true,\n children: [],\n }\n if (depth < maxDepth) {\n for (const c of s.children) node.children.push(walkLifetime(c, depth + 1, maxDepth))\n }\n return node\n}\n\nexport function installDevTools(inst: object): void {\n const ci = inst as ComponentInstance\n const history: MessageRecord[] = []\n let idx = 0\n let lastDirtyMask = 0\n\n // Tracker storage — populated by primitives when they detect dev-mode\n // is active (via `inst._eachDiffLog !== undefined` guard). Zero cost in\n // production where installDevTools never runs.\n ci._eachDiffLog = createRingBuffer(100)\n ci._updateCounter = 0\n // Disposer log — consumed by `llui_disposer_log` MCP tool. Stamped by\n // `disposeLifetime` via `findInstance(scope)` — which only works when the\n // rootLifetime carries an `instance` back-reference.\n ci._disposerLog = createDisposerBuffer(500)\n // Coverage tracker — consumed by `llui_coverage` MCP tool. Records the\n // discriminant of each dispatched message along with the message index\n // it fired at, allowing the tool to surface Msg variants that never\n // fired this session. Recorded inside the update interceptor below.\n ci._coverage = createCoverageTracker()\n // Effect timeline / pending / mocks — consumed by the\n // `llui_effect_timeline`, `llui_pending_effects`, `llui_mock_effect`,\n // and `llui_resolve_effect` MCP tools. Populated by the\n // `dispatchEffectDev` wrapper in `update-loop.ts`; zero cost in\n // production where `_effectTimeline` stays undefined.\n ci._effectTimeline = createTimelineBuffer(500)\n ci._effectMocks = createMockRegistry()\n ci._pendingEffects = createPendingEffectsList()\n ci.rootLifetime.instance = ci\n // Flip the scope-module flag so disposeLifetime starts walking the parent\n // chain to emit disposer events. Before the first installDevTools call\n // the flag stays false and disposeLifetime skips findInstance entirely.\n _markDisposerLogInstalled()\n\n const api: LluiDebugAPI = {\n getState: () => ci.state,\n send: (msg) => ci.send(msg as never),\n flush: () => flushInstance(ci),\n getMessageHistory: (opts) => {\n let result = history\n if (opts?.since !== undefined) {\n const since = opts.since\n result = result.filter((r) => r.index > since)\n }\n if (opts?.limit !== undefined && opts.limit > 0) {\n result = result.slice(-opts.limit)\n }\n return result.slice()\n },\n\n evalUpdate(msg) {\n const [state, effects] = ci.def.update(ci.state, msg as never)\n return { state, effects }\n },\n\n exportTrace() {\n return {\n lluiTrace: 1 as const,\n component: ci.def.name,\n generatedBy: 'devtools',\n timestamp: new Date().toISOString(),\n entries: history.map((h) => ({\n msg: h.msg,\n expectedState: h.stateAfter,\n expectedEffects: h.effects,\n })),\n }\n },\n\n clearLog() {\n history.length = 0\n idx = 0\n ci._updateCounter = 0\n ci._eachDiffLog?.clear()\n ci._disposerLog?.clear()\n ci._coverage?.clear()\n ci._effectTimeline?.clear()\n ci._effectMocks?.clear()\n // NB: `_pendingEffects` is intentionally NOT cleared — pending\n // entries represent in-flight effects that still have to land\n // resolution/cancellation phases. Dropping them here would leak\n // the ids that MCP tools hold onto for `llui_resolve_effect`.\n },\n\n validateMessage(msg: unknown): ValidationError[] | null {\n const schema = ci.def.__msgSchema as\n | { discriminant: string; variants: Record<string, Record<string, unknown>> }\n | undefined\n if (!schema) return null\n\n if (msg == null || typeof msg !== 'object') {\n return [\n {\n path: '',\n expected: 'object',\n received: typeof msg,\n message: 'Message must be an object',\n },\n ]\n }\n\n const msgObj = msg as Record<string, unknown>\n const discriminant = schema.discriminant\n const typeValue = msgObj[discriminant]\n\n if (typeValue === undefined) {\n return [\n {\n path: `.${discriminant}`,\n expected: `one of: ${Object.keys(schema.variants)\n .map((v) => `'${v}'`)\n .join(', ')}`,\n received: 'undefined',\n message: `Missing discriminant field '${discriminant}'`,\n },\n ]\n }\n\n if (typeof typeValue !== 'string') {\n return [\n {\n path: `.${discriminant}`,\n expected: 'string',\n received: typeof typeValue,\n message: `Discriminant field '${discriminant}' must be a string`,\n },\n ]\n }\n\n const variant = schema.variants[typeValue]\n if (!variant) {\n return [\n {\n path: `.${discriminant}`,\n expected: `one of: ${Object.keys(schema.variants)\n .map((v) => `'${v}'`)\n .join(', ')}`,\n received: `'${typeValue}'`,\n message: `Unknown message type '${typeValue}'`,\n },\n ]\n }\n\n // Validate fields of the matched variant\n const errors: ValidationError[] = []\n for (const [field, expectedType] of Object.entries(variant)) {\n if (field === discriminant) continue\n const value = msgObj[field]\n if (value === undefined) {\n errors.push({\n path: `.${field}`,\n expected: String(expectedType),\n received: 'undefined',\n message: `Missing required field '${field}'`,\n })\n } else if (typeof expectedType === 'string' && expectedType !== 'unknown') {\n if (typeof value !== expectedType) {\n errors.push({\n path: `.${field}`,\n expected: expectedType,\n received: typeof value,\n message: `Field '${field}' has wrong type`,\n })\n }\n }\n }\n\n return errors.length > 0 ? errors : null\n },\n\n getBindings(): BindingDebugInfo[] {\n const bindings: Binding[] = ci.allBindings ?? []\n return bindings.map((b, i) => ({\n index: i,\n mask: b.mask,\n lastValue: b.lastValue,\n kind: b.kind,\n key: b.key,\n dead: b.dead,\n perItem: b.perItem,\n }))\n },\n\n whyDidUpdate(bindingIndex: number): UpdateExplanation {\n const bindings: Binding[] = ci.allBindings ?? []\n const binding = bindings[bindingIndex]\n if (!binding) {\n return {\n bindingIndex,\n bindingMask: 0,\n lastDirtyMask: 0,\n matched: false,\n accessorResult: undefined,\n lastValue: undefined,\n changed: false,\n }\n }\n\n const matched = (binding.mask & lastDirtyMask) !== 0\n let accessorResult: unknown\n try {\n accessorResult = binding.accessor(ci.state)\n } catch {\n accessorResult = '<error>'\n }\n const changed = !Object.is(accessorResult, binding.lastValue)\n\n return {\n bindingIndex,\n bindingMask: binding.mask,\n lastDirtyMask,\n matched,\n accessorResult,\n lastValue: binding.lastValue,\n changed,\n }\n },\n\n searchState(query: string): unknown {\n const parts = query.split('.')\n let current: unknown = ci.state\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined\n current = (current as Record<string, unknown>)[part]\n }\n return current\n },\n\n getMessageSchema(): MessageSchemaInfo | null {\n return (ci.def.__msgSchema as MessageSchemaInfo | undefined) ?? null\n },\n\n getMaskLegend(): Record<string, number> | null {\n return ci.def.__maskLegend ?? null\n },\n\n decodeMask(mask: number): string[] {\n const legend = ci.def.__maskLegend\n if (!legend) return []\n const fields: string[] = []\n for (const [field, bit] of Object.entries(legend)) {\n if ((mask & bit) !== 0) fields.push(field)\n }\n return fields\n },\n\n getComponentInfo(): ComponentInfo {\n const meta = ci.def.__componentMeta\n return {\n name: ci.def.name,\n file: meta?.file ?? null,\n line: meta?.line ?? null,\n }\n },\n\n getStateSchema(): object | null {\n return (ci.def.__stateSchema as object | undefined) ?? null\n },\n\n getEffectSchema(): object | null {\n return (ci.def.__effectSchema as object | undefined) ?? null\n },\n\n snapshotState(): unknown {\n return JSON.parse(JSON.stringify(ci.state))\n },\n\n restoreState(snap: unknown): void {\n _forceState(ci, snap)\n },\n\n getBindingsFor(selector: string): BindingLocation[] {\n if (typeof document === 'undefined') return []\n const elements = Array.from(document.querySelectorAll(selector))\n if (elements.length === 0) return []\n const elementSet = new Set<Element>(elements)\n const results: BindingLocation[] = []\n for (let i = 0; i < ci.allBindings.length; i++) {\n const b = ci.allBindings[i]!\n if (b.dead) continue\n const node = b.node\n let relation: 'self' | 'text-child' | 'comment-child' | null = null\n if (node.nodeType === 1 && elementSet.has(node as Element)) {\n relation = 'self'\n } else if (\n (node.nodeType === 3 || node.nodeType === 8) &&\n node.parentElement &&\n elementSet.has(node.parentElement)\n ) {\n relation = node.nodeType === 3 ? 'text-child' : 'comment-child'\n }\n if (!relation) continue\n results.push({\n bindingIndex: i,\n kind: b.kind,\n key: b.key,\n mask: b.mask,\n lastValue: b.lastValue,\n relation,\n })\n }\n return results\n },\n\n inspectElement(selector: string): ElementReport | null {\n if (typeof document === 'undefined') return null\n const el = document.querySelector(selector)\n if (!el) return null\n\n const attributes: Record<string, string> = {}\n for (const attr of Array.from(el.attributes)) {\n attributes[attr.name] = attr.value\n }\n\n const classes = Array.from(el.classList)\n\n const dataset: Record<string, string> = {}\n if (el instanceof HTMLElement) {\n for (const [key, value] of Object.entries(el.dataset)) {\n if (typeof value === 'string') dataset[key] = value\n }\n }\n\n const rawText = el.textContent ?? ''\n const text = rawText.length > 1000 ? rawText.slice(0, 1000) : rawText\n\n const rect = el.getBoundingClientRect()\n const boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height }\n\n let computed: ElementReport['computed']\n try {\n const cs = window.getComputedStyle(el)\n computed = {\n display: cs.display,\n visibility: cs.visibility,\n position: cs.position,\n width: rect.width,\n height: rect.height,\n }\n } catch {\n computed = {\n display: 'unknown',\n visibility: 'unknown',\n position: 'unknown',\n width: 0,\n height: 0,\n }\n }\n\n const rawBindings = api.getBindingsFor(selector)\n const bindings = rawBindings.map((b) => ({\n bindingIndex: b.bindingIndex,\n kind: b.kind,\n mask: b.mask,\n lastValue: b.lastValue,\n relation: b.relation,\n }))\n\n return {\n selector,\n tagName: el.tagName.toLowerCase(),\n attributes,\n classes,\n dataset,\n text,\n computed,\n boundingBox,\n bindings,\n }\n },\n\n getRenderedHtml(selector?: string, maxLength?: number): string {\n if (typeof document === 'undefined') return ''\n const el = selector ? document.querySelector(selector) : document.body\n if (!(el instanceof Element)) return ''\n const html = el.outerHTML\n if (typeof maxLength === 'number' && html.length > maxLength) {\n return html.slice(0, maxLength) + `<!-- truncated; total ${html.length} chars -->`\n }\n return html\n },\n\n dispatchDomEvent(\n selector: string,\n type: string,\n init?: EventInit,\n ): {\n dispatched: boolean\n messagesProducedIndices: number[]\n resultingState: unknown | null\n } {\n const noOp = { dispatched: false, messagesProducedIndices: [], resultingState: null }\n if (typeof document === 'undefined') return noOp\n const el = document.querySelector(selector)\n if (!el) return noOp\n\n const preIndex = history.length > 0 ? history[history.length - 1]!.index : -1\n\n let event: Event\n if (type === 'click' || type === 'mousedown' || type === 'mouseup') {\n event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n ...(init as MouseEventInit),\n })\n } else if (type === 'keydown' || type === 'keyup' || type === 'keypress') {\n event = new KeyboardEvent(type, {\n bubbles: true,\n cancelable: true,\n ...(init as KeyboardEventInit),\n })\n } else {\n event = new Event(type, { bubbles: true, cancelable: true, ...init })\n }\n\n el.dispatchEvent(event)\n flushInstance(ci)\n\n const messagesProducedIndices = history.filter((r) => r.index > preIndex).map((r) => r.index)\n\n return {\n dispatched: true,\n messagesProducedIndices,\n resultingState: ci.state,\n }\n },\n\n getFocus() {\n if (typeof document === 'undefined') {\n return { selector: null, tagName: null, selectionStart: null, selectionEnd: null }\n }\n const el = document.activeElement\n if (!el || el === document.body) {\n return { selector: null, tagName: null, selectionStart: null, selectionEnd: null }\n }\n const id = el.id ? `#${el.id}` : null\n const tagName = el.tagName.toLowerCase()\n let selectionStart: number | null = null\n let selectionEnd: number | null = null\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n selectionStart = el.selectionStart ?? null\n selectionEnd = el.selectionEnd ?? null\n }\n return { selector: id, tagName, selectionStart, selectionEnd }\n },\n\n forceRerender(): { changedBindings: number[] } {\n const changed: number[] = []\n const allBindings = ci.allBindings\n for (let i = 0; i < allBindings.length; i++) {\n const b = allBindings[i]!\n if (b.dead) continue\n const next = b.accessor(ci.state)\n if (!Object.is(next, b.lastValue)) {\n changed.push(i)\n b.lastValue = next\n applyBinding(b, next)\n }\n }\n return { changedBindings: changed }\n },\n\n getEachDiff(sinceIndex?: number): EachDiff[] {\n const all = ci._eachDiffLog?.toArray() ?? []\n if (sinceIndex === undefined) return all\n return all.filter((e) => e.updateIndex >= sinceIndex)\n },\n\n getScopeTree(opts?: { depth?: number; scopeId?: string }): LifetimeNode {\n const maxDepth = opts?.depth ?? Infinity\n const startScope = opts?.scopeId\n ? findLifetimeById(ci.rootLifetime, opts.scopeId)\n : ci.rootLifetime\n if (!startScope) {\n return { scopeId: '0', kind: 'root', active: false, children: [] }\n }\n return walkLifetime(startScope, 0, maxDepth)\n },\n\n getDisposerLog(limit?: number): DisposerEvent[] {\n const all = ci._disposerLog?.toArray() ?? []\n if (limit === undefined) return all\n return all.slice(-Math.max(0, limit))\n },\n\n getBindingGraph(): Array<{ statePath: string; bindingIndices: number[] }> {\n const legend = ci.def.__maskLegend as Record<string, number> | undefined\n if (!legend) return []\n const result: Array<{ statePath: string; bindingIndices: number[] }> = []\n for (const [path, bit] of Object.entries(legend)) {\n const indices: number[] = []\n for (let i = 0; i < ci.allBindings.length; i++) {\n const b = ci.allBindings[i]!\n if ((b.mask & bit) !== 0) indices.push(i)\n }\n result.push({ statePath: path, bindingIndices: indices })\n }\n return result\n },\n\n getPendingEffects(): PendingEffect[] {\n return ci._pendingEffects?.list() ?? []\n },\n\n getEffectTimeline(limit?: number): EffectTimelineEntry[] {\n const all = ci._effectTimeline?.toArray() ?? []\n if (limit === undefined) return all\n return all.slice(-Math.max(0, limit))\n },\n\n mockEffect(match, response, opts) {\n if (!ci._effectMocks) return { mockId: '' }\n return { mockId: ci._effectMocks.add(match, response, Boolean(opts?.persist)) }\n },\n\n resolveEffect(effectId, response) {\n const pending = ci._pendingEffects?.findById(effectId)\n if (!pending) return { resolved: false }\n const payload = pending.payload as { onSuccess?: (d: unknown) => unknown } | undefined\n if (payload?.onSuccess) {\n const msg = payload.onSuccess(response)\n ci.send(msg as never)\n }\n ci._pendingEffects?.remove(effectId)\n ci._effectTimeline?.push({\n effectId,\n type: pending.type,\n phase: 'resolved',\n timestamp: Date.now(),\n durationMs: Date.now() - pending.dispatchedAt,\n })\n return { resolved: true }\n },\n\n stepBack(n: number, mode: 'pure' | 'live') {\n const rewindDepth = Math.min(Math.max(0, n), history.length)\n const keep = history.slice(0, history.length - rewindDepth)\n const [initialState] = ci.def.init(undefined) as [unknown, unknown[]]\n let state = initialState\n const collectedEffects: unknown[] = []\n for (const record of keep) {\n const [newState, newEffects] = (\n ci.def.update as unknown as (s: unknown, m: unknown) => [unknown, unknown[]]\n )(state, record.msg)\n state = newState\n if (mode === 'live') collectedEffects.push(...newEffects)\n }\n _forceState(ci, state)\n history.length = keep.length\n if (mode === 'live') {\n for (const eff of collectedEffects) {\n if (ci.def.onEffect)\n ci.def.onEffect({ effect: eff as never, send: ci.send, signal: ci.signal })\n }\n }\n return { state, rewindDepth }\n },\n\n getCoverage(): CoverageSnapshot {\n if (!ci._coverage) return { fired: {}, neverFired: [] }\n const schema = ci.def.__msgSchema as { variants?: Record<string, unknown> } | undefined\n const known = schema?.variants ? Object.keys(schema.variants) : undefined\n return ci._coverage.snapshot(known)\n },\n\n evalInPage(code: string) {\n const stateBefore = JSON.parse(JSON.stringify(ci.state))\n const historyLenBefore = history.length\n const pendingBefore = new Set((ci._pendingEffects?.list() ?? []).map((p) => p.id))\n const dirtyMaskBefore = lastDirtyMask\n\n let result: unknown | { error: string }\n try {\n const fn = new Function(`return (${code})`) as () => unknown\n const rv = fn()\n if (rv && typeof rv === 'object' && 'then' in (rv as object)) {\n result = {\n error:\n 'llui_eval does not support async expressions in Phase 1. Wrap awaits in an IIFE and expose the result synchronously via globalThis.',\n }\n } else {\n result = rv\n }\n } catch (err) {\n result = { error: err instanceof Error ? err.message : String(err) }\n }\n\n try {\n flushInstance(ci)\n } catch {\n // Best-effort; user's eval may have left the instance in a weird state\n }\n\n const stateAfter = ci.state\n const stateDiff = diffStateInternal(stateBefore, stateAfter)\n const stateChanged =\n Object.keys(stateDiff.added).length === 0 &&\n Object.keys(stateDiff.removed).length === 0 &&\n Object.keys(stateDiff.changed).length === 0\n ? null\n : stateDiff\n\n const newHistoryEntries = history.length - historyLenBefore\n const pendingNow = ci._pendingEffects?.list() ?? []\n const newPendingEffects = pendingNow.filter((p) => !pendingBefore.has(p.id))\n\n const dirtyBindingIndices: number[] = []\n const maskDiff = lastDirtyMask ^ dirtyMaskBefore\n for (let i = 0; i < ci.allBindings.length; i++) {\n const b = ci.allBindings[i]!\n if ((b.mask & maskDiff) !== 0) dirtyBindingIndices.push(i)\n }\n\n return {\n result,\n sideEffects: {\n stateChanged,\n newHistoryEntries,\n newPendingEffects,\n dirtyBindingIndices,\n },\n }\n },\n }\n\n // Intercept update to record transitions\n const originalUpdate = ci.def.update\n ci.def.update = ((state: unknown, msg: unknown) => {\n const [newState, effects] = (\n originalUpdate as (s: unknown, m: unknown) => [unknown, unknown[]]\n )(state, msg)\n const dirty = ci.def.__dirty\n ? (ci.def.__dirty as (o: unknown, n: unknown) => number)(state, newState)\n : -1\n\n lastDirtyMask = typeof dirty === 'number' ? dirty : -1\n\n const record: MessageRecord = {\n index: idx,\n timestamp: Date.now(),\n msg,\n stateBefore: state,\n stateAfter: newState,\n effects,\n dirtyMask: lastDirtyMask,\n }\n\n // _updateCounter and the history index track the same thing —\n // tie them so EachDiff entries emitted during the ensuing Phase 1\n // reconcile carry the same updateIndex as the message record that\n // caused the reconcile. `each.ts` reads `inst._updateCounter` when\n // stamping EachDiff entries.\n ci._updateCounter = idx\n\n // Coverage: record the discriminant of this message at the SAME\n // index stamped on the MessageRecord above, so tools can cross-\n // reference `getMessageHistory()[i]` with `coverage.fired[v].lastIndex`.\n const variant =\n msg && typeof msg === 'object' && 'type' in (msg as Record<string, unknown>)\n ? String((msg as Record<string, unknown>).type)\n : '<non-discriminant>'\n ci._coverage?.record(variant, idx)\n\n idx++\n\n if (history.length >= MAX_HISTORY) history.shift()\n history.push(record)\n\n return [newState, effects]\n }) as typeof ci.def.update\n\n // Register in the multi-component registry and point __lluiDebug at the\n // newest mount (so single-component apps keep working unchanged). Tools\n // can switch the active pointer via llui_select_component.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any\n if (!g.__lluiComponents) g.__lluiComponents = {} as Record<string, LluiDebugAPI>\n const componentKey = uniqueName(g.__lluiComponents, ci.def.name)\n g.__lluiComponents[componentKey] = api\n g.__lluiDebug = api\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(api as any).__componentKey = componentKey\n}\n\n// Generate a unique key for a component name if it's already taken\n// (e.g. same component mounted into multiple containers).\nfunction uniqueName(registry: Record<string, unknown>, name: string): string {\n if (!(name in registry)) return name\n let i = 2\n while (`${name}#${i}` in registry) i++\n return `${name}#${i}`\n}\n"]}
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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","sourcesContent":["import { flushInstance, _forceState, type ComponentInstance } from './update-loop.js'\nimport { _setDevToolsInstall } from './mount.js'\nimport { _markDisposerLogInstalled } from './lifetime.js'\nimport type { Binding, Lifetime, LifetimeNode } from './types.js'\nimport { applyBinding } from './binding.js'\nimport { createRingBuffer, type EachDiff } from './tracking/each-diff.js'\nimport {\n createRingBuffer as createDisposerBuffer,\n type DisposerEvent,\n} from './tracking/disposer-log.js'\nimport { createCoverageTracker, type CoverageSnapshot } from './tracking/coverage.js'\nimport {\n createRingBuffer as createTimelineBuffer,\n createMockRegistry,\n createPendingEffectsList,\n type PendingEffect,\n type EffectTimelineEntry,\n type EffectMatch,\n} from './tracking/effect-timeline.js'\n\nexport interface StateDiff {\n added: Record<string, unknown>\n removed: Record<string, unknown>\n changed: Record<string, { from: unknown; to: unknown }>\n}\n\nfunction diffStateInternal(a: unknown, b: unknown): StateDiff {\n const out: StateDiff = { added: {}, removed: {}, changed: {} }\n if (\n a == null ||\n b == null ||\n typeof a !== 'object' ||\n typeof b !== 'object' ||\n Array.isArray(a) !== Array.isArray(b)\n ) {\n if (a !== b) out.changed['<root>'] = { from: a, to: b }\n return out\n }\n const aObj = a as Record<string, unknown>\n const bObj = b as Record<string, unknown>\n const keys = new Set([...Object.keys(aObj), ...Object.keys(bObj)])\n for (const k of keys) {\n if (!(k in aObj)) out.added[k] = bObj[k]\n else if (!(k in bObj)) out.removed[k] = aObj[k]\n else if (!Object.is(aObj[k], bObj[k])) out.changed[k] = { from: aObj[k], to: bObj[k] }\n }\n return out\n}\n\n/**\n * Enable devtools auto-installation for every mountApp call. Called by\n * compiler-generated dev code — never imported in production builds.\n * Once enabled, every mounted component attaches `globalThis.__lluiDebug`\n * to the most recently mounted instance.\n */\nexport function enableDevTools(): void {\n _setDevToolsInstall(installDevTools)\n}\n\n// ── MCP WebSocket Relay ─────────────────────────────────────────────\n// Forwards method calls from an out-of-process MCP server to the\n// current __lluiDebug API. Dev-mode only — compiler injects startRelay(port).\n//\n// On-demand: tries a SINGLE connection on page load. If it succeeds\n// (MCP server is already running), the relay stays open and reconnects\n// on drop. If it fails, no retry loop — just registers\n// `window.__lluiConnect(port?)` so the developer can connect later\n// from the console or when the MCP server starts.\n\nlet relayPort = 5200\nlet relayConnected = false\n\ninterface RelayRequest {\n id: string\n method: keyof LluiDebugAPI | '__listComponents' | '__selectComponent'\n args: unknown[]\n}\n\nfunction handleMessage(ws: WebSocket, event: MessageEvent): void {\n let req: RelayRequest\n try {\n req = JSON.parse(String(event.data)) as RelayRequest\n } catch {\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any\n if (req.method === '__listComponents') {\n const keys = g.__lluiComponents ? Object.keys(g.__lluiComponents) : []\n const active =\n g.__lluiDebug && g.__lluiComponents\n ? (Object.entries(g.__lluiComponents).find(([, v]) => v === g.__lluiDebug)?.[0] ?? null)\n : null\n ws.send(JSON.stringify({ id: req.id, result: { components: keys, active } }))\n return\n }\n if (req.method === '__selectComponent') {\n const key = (req.args?.[0] as string | undefined) ?? ''\n const entry = g.__lluiComponents?.[key]\n if (!entry) {\n ws.send(JSON.stringify({ id: req.id, error: `unknown component: ${key}` }))\n return\n }\n g.__lluiDebug = entry\n ws.send(JSON.stringify({ id: req.id, result: { active: key } }))\n return\n }\n\n const api = g.__lluiDebug as LluiDebugAPI | undefined\n if (!api) {\n ws.send(JSON.stringify({ id: req.id, error: '__lluiDebug not available' }))\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (api as any)[req.method]\n if (typeof fn !== 'function') {\n ws.send(JSON.stringify({ id: req.id, error: `unknown method: ${req.method}` }))\n return\n }\n try {\n const result = fn.apply(api, req.args ?? [])\n ws.send(JSON.stringify({ id: req.id, result: result ?? null }))\n } catch (e) {\n ws.send(JSON.stringify({ id: req.id, error: e instanceof Error ? e.message : String(e) }))\n }\n}\n\nfunction connectRelay(port: number, isInitial: boolean): void {\n if (typeof WebSocket === 'undefined') return\n\n let ws: WebSocket\n try {\n ws = new WebSocket(`ws://127.0.0.1:${port}`)\n } catch {\n if (!isInitial) console.warn(`[LLui MCP] failed to connect to ws://127.0.0.1:${port}`)\n return\n }\n\n ws.onopen = () => {\n relayConnected = true\n console.log(`[LLui MCP] connected to ws://127.0.0.1:${port}`)\n }\n ws.onmessage = (event) => handleMessage(ws, event)\n ws.onclose = () => {\n if (relayConnected) {\n relayConnected = false\n console.log('[LLui MCP] disconnected — call __lluiConnect() to reconnect')\n }\n }\n ws.onerror = () => {\n // onclose fires after onerror — nothing to do here\n }\n}\n\n/**\n * Register the MCP relay for this page.\n *\n * Discovery happens in two phases:\n *\n * 1. **Status endpoint** (preferred): fetches `/__llui_mcp_status`,\n * which the Vite plugin serves from the active marker file written\n * by `@llui/mcp`. If the MCP server is running, the response gives\n * us the actual port — we connect immediately. This avoids the race\n * where HMR events fire before the listener registers, and handles\n * cases where MCP runs on a non-default port.\n * 2. **Compile-time fallback**: if the status endpoint is unavailable\n * (404, network error, non-Vite environment), we attempt a single\n * connection to the compiled-in `port` parameter as a best-effort.\n *\n * Either way: no retry loop. If both fail, `window.__lluiConnect(port?)`\n * is exposed so the developer can connect manually from the console\n * when the MCP server starts. The Vite plugin also dispatches an\n * `llui:mcp-ready` HMR custom event when the marker file appears later,\n * which the compiler-injected dev code forwards to `__lluiConnect`.\n */\nexport function startRelay(port = 5200): void {\n relayPort = port\n if (typeof WebSocket === 'undefined') return\n\n // Expose manual connect for on-demand use\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any\n g.__lluiConnect = (p?: number) => {\n connectRelay(p ?? relayPort, false)\n }\n\n // Try the Vite middleware first (knows the actual port from the marker file)\n if (typeof fetch !== 'undefined') {\n fetch('/__llui_mcp_status')\n .then((res) => (res.ok ? (res.json() as Promise<{ port: number }>) : null))\n .then((data) => {\n if (data && typeof data.port === 'number') {\n relayPort = data.port\n connectRelay(data.port, true)\n } else {\n // Endpoint replied 404 — MCP not running. Don't fall back to the\n // compile-time port; the HMR event will fire if MCP starts later.\n }\n })\n .catch(() => {\n // Network error or non-Vite environment — fall back to compile-time port\n connectRelay(port, true)\n })\n } else {\n // No fetch available — use the compile-time port directly\n connectRelay(port, true)\n }\n}\n\nexport interface MessageRecord {\n index: number\n timestamp: number\n msg: unknown\n stateBefore: unknown\n stateAfter: unknown\n effects: unknown[]\n dirtyMask: number\n}\n\nexport interface BindingDebugInfo {\n index: number\n mask: number\n lastValue: unknown\n kind: string\n key: string | undefined\n dead: boolean\n perItem: boolean\n}\n\nexport interface UpdateExplanation {\n bindingIndex: number\n bindingMask: number\n lastDirtyMask: number\n matched: boolean\n accessorResult: unknown\n lastValue: unknown\n changed: boolean\n}\n\nexport interface ValidationError {\n path: string\n expected: string\n received: string\n message: string\n}\n\nexport interface LluiDebugAPI {\n getState(): unknown\n send(msg: unknown): void\n flush(): void\n getMessageHistory(opts?: { since?: number; limit?: number }): MessageRecord[]\n evalUpdate(msg: unknown): { state: unknown; effects: unknown[] }\n exportTrace(): {\n lluiTrace: 1\n component: string\n generatedBy: string\n timestamp: string\n entries: Array<{ msg: unknown; expectedState: unknown; expectedEffects: unknown[] }>\n }\n clearLog(): void\n validateMessage(msg: unknown): ValidationError[] | null\n getBindings(): BindingDebugInfo[]\n whyDidUpdate(bindingIndex: number): UpdateExplanation\n searchState(query: string): unknown\n /** Returns the compiled Msg schema (discriminant + variant field types). */\n getMessageSchema(): MessageSchemaInfo | null\n /** Returns the bit→field map injected by the compiler. Lets tools decode dirty-mask values. */\n getMaskLegend(): Record<string, number> | null\n /** Given a dirty mask, return the list of top-level fields it represents. */\n decodeMask(mask: number): string[]\n /** Component name + source location (file/line from compiler-injected metadata). */\n getComponentInfo(): ComponentInfo\n /** Returns the compiled State type shape (from TypeScript `type State = { … }`). */\n getStateSchema(): object | null\n /** Returns the compiled Effect schema (from TypeScript `type Effect = { … }` union). */\n getEffectSchema(): object | null\n /** Deep-clone the current state. Pair with restoreState() to checkpoint before risky operations. */\n snapshotState(): unknown\n /** Overwrite the current state with a previously-captured snapshot. Triggers a full re-render. */\n restoreState(snap: unknown): void\n /** Find all bindings whose target node matches or is a child of the selector. */\n getBindingsFor(selector: string): BindingLocation[]\n /** Return a rich structural + style + binding report for the first element matching selector. Returns null if no element matches or document is unavailable. */\n inspectElement(selector: string): ElementReport | null\n /** Get the outerHTML of the mounted component or a specific element. Pass a selector for a specific node (defaults to the mount root). Pass maxLength to truncate output. */\n getRenderedHtml(selector?: string, maxLength?: number): string\n /** Synthesize and dispatch a browser event at a DOM element matched by selector. Returns dispatched status, the history indices of any Msgs the handler produced, and the resulting state. */\n dispatchDomEvent(\n selector: string,\n type: string,\n init?: EventInit,\n ): {\n dispatched: boolean\n messagesProducedIndices: number[]\n resultingState: unknown | null\n }\n /** Return info about the currently focused element: { selector (if it has an id), tagName, selectionStart, selectionEnd }. Useful for catching \"focus lost on re-render\" bugs. */\n getFocus(): {\n selector: string | null\n tagName: string | null\n selectionStart: number | null\n selectionEnd: number | null\n }\n /** Re-evaluate every binding's accessor against the current state, apply values that changed to the DOM, and return indices of bindings that changed. */\n forceRerender(): { changedBindings: number[] }\n /** Per-each-site reconciliation diffs (added/removed/moved/reused keys) from the dev-time diff log. Pass sinceIndex to filter to entries after a specific message history index. */\n getEachDiff(sinceIndex?: number): EachDiff[]\n /** Walk the component's scope tree and return a nested LifetimeNode with kind classification. Pass depth to limit traversal depth, scopeId to start from a specific scope. */\n getScopeTree(opts?: { depth?: number; scopeId?: string }): LifetimeNode\n /** Recent onDispose firings with scope id and cause. Pass 'limit' to cap results to the N most recent entries. Catches 'leak on branch swap' class bugs. */\n getDisposerLog(limit?: number): DisposerEvent[]\n /** Edge list: state path → binding indices that depend on it. Inverts the compiler-emitted mask legend to show, for each top-level state field, which bindings will re-evaluate when it changes. */\n getBindingGraph(): Array<{ statePath: string; bindingIndices: number[] }>\n /** Current queued and in-flight effects. Each entry has { id, type, dispatchedAt, status, payload }. Use 'id' with llui_resolve_effect to manually resolve one. */\n getPendingEffects(): PendingEffect[]\n /** Phased log of effect events: dispatched -> in-flight -> resolved/cancelled/resolved-mocked. Each entry has { effectId, type, phase, timestamp, durationMs? }. Pass 'limit' to cap the tail. */\n getEffectTimeline(limit?: number): EffectTimelineEntry[]\n /** Register a mock for an effect matching 'match'. The next matching effect resolves with 'response' instead of running. Mocks are one-shot by default; pass { persist: true } to keep across matches. Returns { mockId } for later reference. */\n mockEffect(\n match: EffectMatch,\n response: unknown,\n opts?: { persist?: boolean },\n ): { mockId: string }\n /** Manually resolve a pending effect with a given response. The effect's onSuccess callback (if any) runs as if it had actually resolved. Pass effectId from llui_pending_effects. */\n resolveEffect(effectId: string, response: unknown): { resolved: boolean }\n /** Rewind state by replaying from init() with the last N messages excluded. mode='pure' suppresses effects; mode='live' re-fires them. Returns the new state and rewind depth. */\n stepBack(n: number, mode: 'pure' | 'live'): { state: unknown; rewindDepth: number }\n /** Per-Msg-variant coverage for the current session. Shows which message types have run and which haven't. */\n getCoverage(): CoverageSnapshot\n /** Run arbitrary JS in page context and return { result, sideEffects }. result is the expression's return value or { error }. sideEffects captures state diff, new history entries, new pending effects, and dirty binding indices. Phase 1 does not support async expressions. */\n evalInPage(code: string): {\n result: unknown | { error: string }\n sideEffects: {\n stateChanged: StateDiff | null\n newHistoryEntries: number\n newPendingEffects: PendingEffect[]\n dirtyBindingIndices: number[]\n }\n }\n /** Returns the pre- and post-transform source of the view function injected by the compiler. Pass an optional viewFn name to select a specific view (currently unused — returns the component's view). Returns null if no source was injected. */\n getCompiledSource(_viewFn?: string): { pre: string; post: string } | null\n /** Returns the per-Msg-variant → dirty-mask map injected by the compiler. Lets tools explain which state fields a given message type will dirty. Returns null if not injected. */\n getMsgMaskMap(): Record<string, number> | null\n /** Returns the source location (file, line, column) for the binding at the given index, as recorded by the compiler. Returns null if the index is out of range or no source map was injected. */\n getBindingSource(bindingIndex: number): { file: string; line: number; column: number } | null\n /** Compare server-rendered HTML (stored in data-llui-ssr-html on the mount root) against the current client DOM. Returns an array of divergences — empty when hydration is clean. */\n getHydrationReport(): HydrationDivergence[]\n}\n\nexport interface ElementReport {\n selector: string\n tagName: string\n attributes: Record<string, string>\n classes: string[]\n dataset: Record<string, string>\n text: string\n computed: {\n display: string\n visibility: string\n position: string\n width: number\n height: number\n }\n boundingBox: { x: number; y: number; width: number; height: number }\n bindings: Array<{\n bindingIndex: number\n kind: string\n mask: number\n lastValue: unknown\n relation: 'self' | 'text-child' | 'comment-child'\n }>\n}\n\nexport interface BindingLocation {\n bindingIndex: number\n kind: string\n key: string | undefined\n mask: number\n lastValue: unknown\n /** How the binding's node relates to the matched element: 'self' (binding on the element itself) or 'text-child' (text node inside). */\n relation: 'self' | 'text-child' | 'comment-child'\n}\n\nexport interface ComponentInfo {\n name: string\n file: string | null\n line: number | null\n}\n\nexport interface MessageSchemaInfo {\n discriminant: string\n variants: Record<string, Record<string, unknown>>\n}\n\nexport interface HydrationDivergence {\n path: string\n kind: 'attribute' | 'text' | 'structural'\n server: unknown\n client: unknown\n}\n\nfunction diffNodes(\n client: Element,\n server: Element,\n path: string,\n out: HydrationDivergence[],\n): void {\n const clientAttrs = new Map(Array.from(client.attributes).map((a) => [a.name, a.value]))\n const serverAttrs = new Map(Array.from(server.attributes).map((a) => [a.name, a.value]))\n for (const [name, val] of serverAttrs) {\n if (clientAttrs.get(name) !== val) {\n out.push({\n path,\n kind: 'attribute',\n server: `${name}=\"${val}\"`,\n client: `${name}=\"${clientAttrs.get(name) ?? ''}\"`,\n })\n }\n }\n if (client.children.length === 0 && server.children.length === 0) {\n if (client.textContent !== server.textContent) {\n out.push({ path, kind: 'text', server: server.textContent, client: client.textContent })\n }\n return\n }\n if (client.children.length !== server.children.length) {\n out.push({\n path,\n kind: 'structural',\n server: server.children.length,\n client: client.children.length,\n })\n return\n }\n for (let i = 0; i < client.children.length; i++) {\n const tag = client.children[i]!.tagName.toLowerCase()\n diffNodes(\n client.children[i] as Element,\n server.children[i] as Element,\n `${path} > ${tag}:nth-child(${i + 1})`,\n out,\n )\n }\n}\n\nconst MAX_HISTORY = 1000\n\nfunction findLifetimeById(root: Lifetime, id: string): Lifetime | null {\n const n = Number(id)\n if (root.id === n) return root\n for (const c of root.children) {\n const found = findLifetimeById(c, id)\n if (found) return found\n }\n return null\n}\n\nfunction walkLifetime(s: Lifetime, depth: number, maxDepth: number): LifetimeNode {\n const node: LifetimeNode = {\n scopeId: String(s.id),\n kind: s._kind ?? 'root',\n active: true,\n children: [],\n }\n if (depth < maxDepth) {\n for (const c of s.children) node.children.push(walkLifetime(c, depth + 1, maxDepth))\n }\n return node\n}\n\nexport function installDevTools(inst: object): void {\n const ci = inst as ComponentInstance\n const history: MessageRecord[] = []\n let idx = 0\n let lastDirtyMask = 0\n\n // Tracker storage — populated by primitives when they detect dev-mode\n // is active (via `inst._eachDiffLog !== undefined` guard). Zero cost in\n // production where installDevTools never runs.\n ci._eachDiffLog = createRingBuffer(100)\n ci._updateCounter = 0\n // Disposer log — consumed by `llui_disposer_log` MCP tool. Stamped by\n // `disposeLifetime` via `findInstance(scope)` — which only works when the\n // rootLifetime carries an `instance` back-reference.\n ci._disposerLog = createDisposerBuffer(500)\n // Coverage tracker — consumed by `llui_coverage` MCP tool. Records the\n // discriminant of each dispatched message along with the message index\n // it fired at, allowing the tool to surface Msg variants that never\n // fired this session. Recorded inside the update interceptor below.\n ci._coverage = createCoverageTracker()\n // Effect timeline / pending / mocks — consumed by the\n // `llui_effect_timeline`, `llui_pending_effects`, `llui_mock_effect`,\n // and `llui_resolve_effect` MCP tools. Populated by the\n // `dispatchEffectDev` wrapper in `update-loop.ts`; zero cost in\n // production where `_effectTimeline` stays undefined.\n ci._effectTimeline = createTimelineBuffer(500)\n ci._effectMocks = createMockRegistry()\n ci._pendingEffects = createPendingEffectsList()\n ci.rootLifetime.instance = ci\n // Flip the scope-module flag so disposeLifetime starts walking the parent\n // chain to emit disposer events. Before the first installDevTools call\n // the flag stays false and disposeLifetime skips findInstance entirely.\n _markDisposerLogInstalled()\n\n const api: LluiDebugAPI = {\n getState: () => ci.state,\n send: (msg) => ci.send(msg as never),\n flush: () => flushInstance(ci),\n getMessageHistory: (opts) => {\n let result = history\n if (opts?.since !== undefined) {\n const since = opts.since\n result = result.filter((r) => r.index > since)\n }\n if (opts?.limit !== undefined && opts.limit > 0) {\n result = result.slice(-opts.limit)\n }\n return result.slice()\n },\n\n evalUpdate(msg) {\n const [state, effects] = ci.def.update(ci.state, msg as never)\n return { state, effects }\n },\n\n exportTrace() {\n return {\n lluiTrace: 1 as const,\n component: ci.def.name,\n generatedBy: 'devtools',\n timestamp: new Date().toISOString(),\n entries: history.map((h) => ({\n msg: h.msg,\n expectedState: h.stateAfter,\n expectedEffects: h.effects,\n })),\n }\n },\n\n clearLog() {\n history.length = 0\n idx = 0\n ci._updateCounter = 0\n ci._eachDiffLog?.clear()\n ci._disposerLog?.clear()\n ci._coverage?.clear()\n ci._effectTimeline?.clear()\n ci._effectMocks?.clear()\n // NB: `_pendingEffects` is intentionally NOT cleared — pending\n // entries represent in-flight effects that still have to land\n // resolution/cancellation phases. Dropping them here would leak\n // the ids that MCP tools hold onto for `llui_resolve_effect`.\n },\n\n validateMessage(msg: unknown): ValidationError[] | null {\n const schema = ci.def.__msgSchema as\n | { discriminant: string; variants: Record<string, Record<string, unknown>> }\n | undefined\n if (!schema) return null\n\n if (msg == null || typeof msg !== 'object') {\n return [\n {\n path: '',\n expected: 'object',\n received: typeof msg,\n message: 'Message must be an object',\n },\n ]\n }\n\n const msgObj = msg as Record<string, unknown>\n const discriminant = schema.discriminant\n const typeValue = msgObj[discriminant]\n\n if (typeValue === undefined) {\n return [\n {\n path: `.${discriminant}`,\n expected: `one of: ${Object.keys(schema.variants)\n .map((v) => `'${v}'`)\n .join(', ')}`,\n received: 'undefined',\n message: `Missing discriminant field '${discriminant}'`,\n },\n ]\n }\n\n if (typeof typeValue !== 'string') {\n return [\n {\n path: `.${discriminant}`,\n expected: 'string',\n received: typeof typeValue,\n message: `Discriminant field '${discriminant}' must be a string`,\n },\n ]\n }\n\n const variant = schema.variants[typeValue]\n if (!variant) {\n return [\n {\n path: `.${discriminant}`,\n expected: `one of: ${Object.keys(schema.variants)\n .map((v) => `'${v}'`)\n .join(', ')}`,\n received: `'${typeValue}'`,\n message: `Unknown message type '${typeValue}'`,\n },\n ]\n }\n\n // Validate fields of the matched variant\n const errors: ValidationError[] = []\n for (const [field, expectedType] of Object.entries(variant)) {\n if (field === discriminant) continue\n const value = msgObj[field]\n if (value === undefined) {\n errors.push({\n path: `.${field}`,\n expected: String(expectedType),\n received: 'undefined',\n message: `Missing required field '${field}'`,\n })\n } else if (typeof expectedType === 'string' && expectedType !== 'unknown') {\n if (typeof value !== expectedType) {\n errors.push({\n path: `.${field}`,\n expected: expectedType,\n received: typeof value,\n message: `Field '${field}' has wrong type`,\n })\n }\n }\n }\n\n return errors.length > 0 ? errors : null\n },\n\n getBindings(): BindingDebugInfo[] {\n const bindings: Binding[] = ci.allBindings ?? []\n return bindings.map((b, i) => ({\n index: i,\n mask: b.mask,\n lastValue: b.lastValue,\n kind: b.kind,\n key: b.key,\n dead: b.dead,\n perItem: b.perItem,\n }))\n },\n\n whyDidUpdate(bindingIndex: number): UpdateExplanation {\n const bindings: Binding[] = ci.allBindings ?? []\n const binding = bindings[bindingIndex]\n if (!binding) {\n return {\n bindingIndex,\n bindingMask: 0,\n lastDirtyMask: 0,\n matched: false,\n accessorResult: undefined,\n lastValue: undefined,\n changed: false,\n }\n }\n\n const matched = (binding.mask & lastDirtyMask) !== 0\n let accessorResult: unknown\n try {\n accessorResult = binding.accessor(ci.state)\n } catch {\n accessorResult = '<error>'\n }\n const changed = !Object.is(accessorResult, binding.lastValue)\n\n return {\n bindingIndex,\n bindingMask: binding.mask,\n lastDirtyMask,\n matched,\n accessorResult,\n lastValue: binding.lastValue,\n changed,\n }\n },\n\n searchState(query: string): unknown {\n const parts = query.split('.')\n let current: unknown = ci.state\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined\n current = (current as Record<string, unknown>)[part]\n }\n return current\n },\n\n getMessageSchema(): MessageSchemaInfo | null {\n return (ci.def.__msgSchema as MessageSchemaInfo | undefined) ?? null\n },\n\n getMaskLegend(): Record<string, number> | null {\n return ci.def.__maskLegend ?? null\n },\n\n decodeMask(mask: number): string[] {\n const legend = ci.def.__maskLegend\n if (!legend) return []\n const fields: string[] = []\n for (const [field, bit] of Object.entries(legend)) {\n if ((mask & bit) !== 0) fields.push(field)\n }\n return fields\n },\n\n getComponentInfo(): ComponentInfo {\n const meta = ci.def.__componentMeta\n return {\n name: ci.def.name,\n file: meta?.file ?? null,\n line: meta?.line ?? null,\n }\n },\n\n getStateSchema(): object | null {\n return (ci.def.__stateSchema as object | undefined) ?? null\n },\n\n getEffectSchema(): object | null {\n return (ci.def.__effectSchema as object | undefined) ?? null\n },\n\n snapshotState(): unknown {\n return JSON.parse(JSON.stringify(ci.state))\n },\n\n restoreState(snap: unknown): void {\n _forceState(ci, snap)\n },\n\n getBindingsFor(selector: string): BindingLocation[] {\n if (typeof document === 'undefined') return []\n const elements = Array.from(document.querySelectorAll(selector))\n if (elements.length === 0) return []\n const elementSet = new Set<Element>(elements)\n const results: BindingLocation[] = []\n for (let i = 0; i < ci.allBindings.length; i++) {\n const b = ci.allBindings[i]!\n if (b.dead) continue\n const node = b.node\n let relation: 'self' | 'text-child' | 'comment-child' | null = null\n if (node.nodeType === 1 && elementSet.has(node as Element)) {\n relation = 'self'\n } else if (\n (node.nodeType === 3 || node.nodeType === 8) &&\n node.parentElement &&\n elementSet.has(node.parentElement)\n ) {\n relation = node.nodeType === 3 ? 'text-child' : 'comment-child'\n }\n if (!relation) continue\n results.push({\n bindingIndex: i,\n kind: b.kind,\n key: b.key,\n mask: b.mask,\n lastValue: b.lastValue,\n relation,\n })\n }\n return results\n },\n\n inspectElement(selector: string): ElementReport | null {\n if (typeof document === 'undefined') return null\n const el = document.querySelector(selector)\n if (!el) return null\n\n const attributes: Record<string, string> = {}\n for (const attr of Array.from(el.attributes)) {\n attributes[attr.name] = attr.value\n }\n\n const classes = Array.from(el.classList)\n\n const dataset: Record<string, string> = {}\n if (el instanceof HTMLElement) {\n for (const [key, value] of Object.entries(el.dataset)) {\n if (typeof value === 'string') dataset[key] = value\n }\n }\n\n const rawText = el.textContent ?? ''\n const text = rawText.length > 1000 ? rawText.slice(0, 1000) : rawText\n\n const rect = el.getBoundingClientRect()\n const boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height }\n\n let computed: ElementReport['computed']\n try {\n const cs = window.getComputedStyle(el)\n computed = {\n display: cs.display,\n visibility: cs.visibility,\n position: cs.position,\n width: rect.width,\n height: rect.height,\n }\n } catch {\n computed = {\n display: 'unknown',\n visibility: 'unknown',\n position: 'unknown',\n width: 0,\n height: 0,\n }\n }\n\n const rawBindings = api.getBindingsFor(selector)\n const bindings = rawBindings.map((b) => ({\n bindingIndex: b.bindingIndex,\n kind: b.kind,\n mask: b.mask,\n lastValue: b.lastValue,\n relation: b.relation,\n }))\n\n return {\n selector,\n tagName: el.tagName.toLowerCase(),\n attributes,\n classes,\n dataset,\n text,\n computed,\n boundingBox,\n bindings,\n }\n },\n\n getRenderedHtml(selector?: string, maxLength?: number): string {\n if (typeof document === 'undefined') return ''\n const el = selector ? document.querySelector(selector) : document.body\n if (!(el instanceof Element)) return ''\n const html = el.outerHTML\n if (typeof maxLength === 'number' && html.length > maxLength) {\n return html.slice(0, maxLength) + `<!-- truncated; total ${html.length} chars -->`\n }\n return html\n },\n\n dispatchDomEvent(\n selector: string,\n type: string,\n init?: EventInit,\n ): {\n dispatched: boolean\n messagesProducedIndices: number[]\n resultingState: unknown | null\n } {\n const noOp = { dispatched: false, messagesProducedIndices: [], resultingState: null }\n if (typeof document === 'undefined') return noOp\n const el = document.querySelector(selector)\n if (!el) return noOp\n\n const preIndex = history.length > 0 ? history[history.length - 1]!.index : -1\n\n let event: Event\n if (type === 'click' || type === 'mousedown' || type === 'mouseup') {\n event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n ...(init as MouseEventInit),\n })\n } else if (type === 'keydown' || type === 'keyup' || type === 'keypress') {\n event = new KeyboardEvent(type, {\n bubbles: true,\n cancelable: true,\n ...(init as KeyboardEventInit),\n })\n } else {\n event = new Event(type, { bubbles: true, cancelable: true, ...init })\n }\n\n el.dispatchEvent(event)\n flushInstance(ci)\n\n const messagesProducedIndices = history.filter((r) => r.index > preIndex).map((r) => r.index)\n\n return {\n dispatched: true,\n messagesProducedIndices,\n resultingState: ci.state,\n }\n },\n\n getFocus() {\n if (typeof document === 'undefined') {\n return { selector: null, tagName: null, selectionStart: null, selectionEnd: null }\n }\n const el = document.activeElement\n if (!el || el === document.body) {\n return { selector: null, tagName: null, selectionStart: null, selectionEnd: null }\n }\n const id = el.id ? `#${el.id}` : null\n const tagName = el.tagName.toLowerCase()\n let selectionStart: number | null = null\n let selectionEnd: number | null = null\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n selectionStart = el.selectionStart ?? null\n selectionEnd = el.selectionEnd ?? null\n }\n return { selector: id, tagName, selectionStart, selectionEnd }\n },\n\n forceRerender(): { changedBindings: number[] } {\n const changed: number[] = []\n const allBindings = ci.allBindings\n for (let i = 0; i < allBindings.length; i++) {\n const b = allBindings[i]!\n if (b.dead) continue\n const next = b.accessor(ci.state)\n if (!Object.is(next, b.lastValue)) {\n changed.push(i)\n b.lastValue = next\n applyBinding(b, next)\n }\n }\n return { changedBindings: changed }\n },\n\n getEachDiff(sinceIndex?: number): EachDiff[] {\n const all = ci._eachDiffLog?.toArray() ?? []\n if (sinceIndex === undefined) return all\n return all.filter((e) => e.updateIndex >= sinceIndex)\n },\n\n getScopeTree(opts?: { depth?: number; scopeId?: string }): LifetimeNode {\n const maxDepth = opts?.depth ?? Infinity\n const startScope = opts?.scopeId\n ? findLifetimeById(ci.rootLifetime, opts.scopeId)\n : ci.rootLifetime\n if (!startScope) {\n return { scopeId: '0', kind: 'root', active: false, children: [] }\n }\n return walkLifetime(startScope, 0, maxDepth)\n },\n\n getDisposerLog(limit?: number): DisposerEvent[] {\n const all = ci._disposerLog?.toArray() ?? []\n if (limit === undefined) return all\n return all.slice(-Math.max(0, limit))\n },\n\n getBindingGraph(): Array<{ statePath: string; bindingIndices: number[] }> {\n const legend = ci.def.__maskLegend as Record<string, number> | undefined\n if (!legend) return []\n const result: Array<{ statePath: string; bindingIndices: number[] }> = []\n for (const [path, bit] of Object.entries(legend)) {\n const indices: number[] = []\n for (let i = 0; i < ci.allBindings.length; i++) {\n const b = ci.allBindings[i]!\n if ((b.mask & bit) !== 0) indices.push(i)\n }\n result.push({ statePath: path, bindingIndices: indices })\n }\n return result\n },\n\n getPendingEffects(): PendingEffect[] {\n return ci._pendingEffects?.list() ?? []\n },\n\n getEffectTimeline(limit?: number): EffectTimelineEntry[] {\n const all = ci._effectTimeline?.toArray() ?? []\n if (limit === undefined) return all\n return all.slice(-Math.max(0, limit))\n },\n\n mockEffect(match, response, opts) {\n if (!ci._effectMocks) return { mockId: '' }\n return { mockId: ci._effectMocks.add(match, response, Boolean(opts?.persist)) }\n },\n\n resolveEffect(effectId, response) {\n const pending = ci._pendingEffects?.findById(effectId)\n if (!pending) return { resolved: false }\n const payload = pending.payload as { onSuccess?: (d: unknown) => unknown } | undefined\n if (payload?.onSuccess) {\n const msg = payload.onSuccess(response)\n ci.send(msg as never)\n }\n ci._pendingEffects?.remove(effectId)\n ci._effectTimeline?.push({\n effectId,\n type: pending.type,\n phase: 'resolved',\n timestamp: Date.now(),\n durationMs: Date.now() - pending.dispatchedAt,\n })\n return { resolved: true }\n },\n\n stepBack(n: number, mode: 'pure' | 'live') {\n const rewindDepth = Math.min(Math.max(0, n), history.length)\n const keep = history.slice(0, history.length - rewindDepth)\n const [initialState] = ci.def.init(undefined) as [unknown, unknown[]]\n let state = initialState\n const collectedEffects: unknown[] = []\n for (const record of keep) {\n const [newState, newEffects] = (\n ci.def.update as unknown as (s: unknown, m: unknown) => [unknown, unknown[]]\n )(state, record.msg)\n state = newState\n if (mode === 'live') collectedEffects.push(...newEffects)\n }\n _forceState(ci, state)\n history.length = keep.length\n if (mode === 'live') {\n for (const eff of collectedEffects) {\n if (ci.def.onEffect)\n ci.def.onEffect({ effect: eff as never, send: ci.send, signal: ci.signal })\n }\n }\n return { state, rewindDepth }\n },\n\n getCoverage(): CoverageSnapshot {\n if (!ci._coverage) return { fired: {}, neverFired: [] }\n const schema = ci.def.__msgSchema as { variants?: Record<string, unknown> } | undefined\n const known = schema?.variants ? Object.keys(schema.variants) : undefined\n return ci._coverage.snapshot(known)\n },\n\n getCompiledSource(_viewFn?: string): { pre: string; post: string } | null {\n const def = ci.def as unknown as Record<string, unknown>\n const pre = def['__preSource']\n const post = def['__postSource']\n if (typeof pre !== 'string' || typeof post !== 'string') return null\n return { pre, post }\n },\n\n getMsgMaskMap(): Record<string, number> | null {\n const def = ci.def as unknown as Record<string, unknown>\n const map = def['__msgMaskMap']\n return map != null && typeof map === 'object' ? (map as Record<string, number>) : null\n },\n\n getBindingSource(bindingIndex: number): { file: string; line: number; column: number } | null {\n const def = ci.def as unknown as Record<string, unknown>\n const sources = def['__bindingSources']\n if (!Array.isArray(sources)) return null\n const entry = (\n sources as Array<{ bindingIndex: number; file: string; line: number; column: number }>\n ).find((s) => s.bindingIndex === bindingIndex)\n return entry ? { file: entry.file, line: entry.line, column: entry.column } : null\n },\n\n getHydrationReport(): HydrationDivergence[] {\n if (typeof document === 'undefined') return []\n // Find a mounted element that carries the server-rendered HTML attribute.\n // @llui/vike stamps this attribute during SSR so the client can compare.\n const root = document.querySelector('[data-llui-ssr-html]')\n if (!root) return []\n const serverHtml = root.getAttribute('data-llui-ssr-html')\n if (!serverHtml) return []\n const parser = new DOMParser()\n const serverDoc = parser.parseFromString(serverHtml, 'text/html')\n const serverRoot = serverDoc.body.firstChild as Element | null\n if (!serverRoot) return []\n const divergences: HydrationDivergence[] = []\n diffNodes(root, serverRoot, 'root', divergences)\n return divergences\n },\n\n evalInPage(code: string) {\n const stateBefore = JSON.parse(JSON.stringify(ci.state))\n const historyLenBefore = history.length\n const pendingBefore = new Set((ci._pendingEffects?.list() ?? []).map((p) => p.id))\n const dirtyMaskBefore = lastDirtyMask\n\n let result: unknown | { error: string }\n try {\n const fn = new Function(`return (${code})`) as () => unknown\n const rv = fn()\n if (rv && typeof rv === 'object' && 'then' in (rv as object)) {\n result = {\n error:\n 'llui_eval does not support async expressions in Phase 1. Wrap awaits in an IIFE and expose the result synchronously via globalThis.',\n }\n } else {\n result = rv\n }\n } catch (err) {\n result = { error: err instanceof Error ? err.message : String(err) }\n }\n\n try {\n flushInstance(ci)\n } catch {\n // Best-effort; user's eval may have left the instance in a weird state\n }\n\n const stateAfter = ci.state\n const stateDiff = diffStateInternal(stateBefore, stateAfter)\n const stateChanged =\n Object.keys(stateDiff.added).length === 0 &&\n Object.keys(stateDiff.removed).length === 0 &&\n Object.keys(stateDiff.changed).length === 0\n ? null\n : stateDiff\n\n const newHistoryEntries = history.length - historyLenBefore\n const pendingNow = ci._pendingEffects?.list() ?? []\n const newPendingEffects = pendingNow.filter((p) => !pendingBefore.has(p.id))\n\n const dirtyBindingIndices: number[] = []\n const maskDiff = lastDirtyMask ^ dirtyMaskBefore\n for (let i = 0; i < ci.allBindings.length; i++) {\n const b = ci.allBindings[i]!\n if ((b.mask & maskDiff) !== 0) dirtyBindingIndices.push(i)\n }\n\n return {\n result,\n sideEffects: {\n stateChanged,\n newHistoryEntries,\n newPendingEffects,\n dirtyBindingIndices,\n },\n }\n },\n }\n\n // Intercept update to record transitions\n const originalUpdate = ci.def.update\n ci.def.update = ((state: unknown, msg: unknown) => {\n const [newState, effects] = (\n originalUpdate as (s: unknown, m: unknown) => [unknown, unknown[]]\n )(state, msg)\n const dirty = ci.def.__dirty\n ? (ci.def.__dirty as (o: unknown, n: unknown) => number)(state, newState)\n : -1\n\n lastDirtyMask = typeof dirty === 'number' ? dirty : -1\n\n const record: MessageRecord = {\n index: idx,\n timestamp: Date.now(),\n msg,\n stateBefore: state,\n stateAfter: newState,\n effects,\n dirtyMask: lastDirtyMask,\n }\n\n // _updateCounter and the history index track the same thing —\n // tie them so EachDiff entries emitted during the ensuing Phase 1\n // reconcile carry the same updateIndex as the message record that\n // caused the reconcile. `each.ts` reads `inst._updateCounter` when\n // stamping EachDiff entries.\n ci._updateCounter = idx\n\n // Coverage: record the discriminant of this message at the SAME\n // index stamped on the MessageRecord above, so tools can cross-\n // reference `getMessageHistory()[i]` with `coverage.fired[v].lastIndex`.\n const variant =\n msg && typeof msg === 'object' && 'type' in (msg as Record<string, unknown>)\n ? String((msg as Record<string, unknown>).type)\n : '<non-discriminant>'\n ci._coverage?.record(variant, idx)\n\n idx++\n\n if (history.length >= MAX_HISTORY) history.shift()\n history.push(record)\n\n return [newState, effects]\n }) as typeof ci.def.update\n\n // Register in the multi-component registry and point __lluiDebug at the\n // newest mount (so single-component apps keep working unchanged). Tools\n // can switch the active pointer via llui_select_component.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any\n if (!g.__lluiComponents) g.__lluiComponents = {} as Record<string, LluiDebugAPI>\n const componentKey = uniqueName(g.__lluiComponents, ci.def.name)\n g.__lluiComponents[componentKey] = api\n g.__lluiDebug = api\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(api as any).__componentKey = componentKey\n}\n\n// Generate a unique key for a component name if it's already taken\n// (e.g. same component mounted into multiple containers).\nfunction uniqueName(registry: Record<string, unknown>, name: string): string {\n if (!(name in registry)) return name\n let i = 2\n while (`${name}#${i}` in registry) i++\n return `${name}#${i}`\n}\n"]}
package/dist/hmr.js CHANGED
@@ -116,8 +116,25 @@ export function replaceComponent(name, newDef) {
116
116
  return handle;
117
117
  }
118
118
  function makeReplacementHandle(name, entry, typedInst) {
119
+ const listeners = new Set();
120
+ typedInst._onCommit = (state) => {
121
+ for (const l of Array.from(listeners)) {
122
+ try {
123
+ l(state);
124
+ }
125
+ catch (err) {
126
+ console.error('[llui] listener threw:', err);
127
+ }
128
+ }
129
+ };
130
+ let disposed = false;
119
131
  return {
120
132
  dispose() {
133
+ if (disposed)
134
+ return;
135
+ disposed = true;
136
+ listeners.clear();
137
+ typedInst._onCommit = undefined;
121
138
  unregisterForHmr(name, entry.inst);
122
139
  entry.inst.abortController.abort();
123
140
  unregisterInstance(entry.inst);
@@ -145,6 +162,12 @@ function makeReplacementHandle(name, entry, typedInst) {
145
162
  getState() {
146
163
  return typedInst.state;
147
164
  },
165
+ subscribe(listener) {
166
+ if (disposed)
167
+ return () => { };
168
+ listeners.add(listener);
169
+ return () => listeners.delete(listener);
170
+ },
148
171
  };
149
172
  }
150
173
  //# sourceMappingURL=hmr.js.map
package/dist/hmr.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hmr.js","sourceRoot":"","sources":["../src/hmr.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentDef, AppHandle } from './types.js'\nimport type { ComponentInstance } from './update-loop.js'\nimport { flushInstance } from './update-loop.js'\nimport { createLifetime, disposeLifetime } from './lifetime.js'\nimport { setRenderContext, clearRenderContext } from './render-context.js'\nimport { setFlatBindings } from './binding.js'\nimport { unregisterInstance } from './runtime.js'\nimport { _setHmrModule } from './mount.js'\nimport { createView } from './view-helpers.js'\n\n/**\n * Enable HMR state preservation. Called by compiler-generated dev code.\n * Importing this module registers it with mountApp for hot-swapping.\n */\nexport function enableHmr(): void {\n _setHmrModule({\n enableHmr,\n registerForHmr,\n registerForAnchor,\n unregisterForHmr,\n replaceComponent,\n })\n}\n\n// ── HMR Registry ─────────────────────────────────────────────────\n\ntype HmrEntry =\n | {\n kind: 'container'\n inst: ComponentInstance\n container: HTMLElement\n }\n | {\n kind: 'anchor'\n inst: ComponentInstance\n anchor: Comment\n endSentinel: Comment\n }\n\nconst hmrRegistry = new Map<string, HmrEntry[]>()\n\nexport function registerForHmr(name: string, inst: object, container: HTMLElement): void {\n const entries = hmrRegistry.get(name) ?? []\n entries.push({ kind: 'container', inst: inst as ComponentInstance, container })\n hmrRegistry.set(name, entries)\n}\n\nexport function registerForAnchor(\n name: string,\n inst: object,\n anchor: Comment,\n endSentinel: Comment,\n): void {\n const entries = hmrRegistry.get(name) ?? []\n entries.push({ kind: 'anchor', inst: inst as ComponentInstance, anchor, endSentinel })\n hmrRegistry.set(name, entries)\n}\n\nexport function unregisterForHmr(name: string, inst: object): void {\n const entries = hmrRegistry.get(name)\n if (!entries) return\n const idx = entries.findIndex((e) => e.inst === inst)\n if (idx !== -1) entries.splice(idx, 1)\n if (entries.length === 0) hmrRegistry.delete(name)\n}\n\n/**\n * Hot-swap a component definition on all live instances.\n *\n * Preserves the current state. Replaces update, view, onEffect, and __dirty.\n * Disposes the old scope tree (removing old DOM and bindings),\n * re-runs view(currentState, send) to rebuild fresh DOM.\n *\n * Returns an AppHandle for the first instance (for mountApp compatibility),\n * or null if no instances are registered (first mount).\n */\nexport function replaceComponent<S, M, E, D = void>(\n name: string,\n newDef: ComponentDef<S, M, E, D>,\n): AppHandle | null {\n const entries = hmrRegistry.get(name)\n if (!entries || entries.length === 0) return null\n\n let handle: AppHandle | null = null\n\n for (const entry of entries) {\n const typedInst = entry.inst as ComponentInstance<S, M, E>\n\n typedInst.def = {\n ...typedInst.def,\n update: newDef.update,\n view: newDef.view,\n onEffect: newDef.onEffect,\n __dirty: newDef.__dirty,\n __update: newDef.__update,\n __handlers: newDef.__handlers,\n }\n\n disposeLifetime(typedInst.rootLifetime)\n\n // Clear the owned region per-kind.\n if (entry.kind === 'container') {\n entry.container.textContent = ''\n } else {\n // anchor kind — wipe siblings between anchor and endSentinel, keep the\n // anchor AND the end sentinel (they bracket the fresh render).\n let sib = entry.anchor.nextSibling\n while (sib !== null && sib !== entry.endSentinel) {\n const next = sib.nextSibling\n sib.parentNode!.removeChild(sib)\n sib = next\n }\n }\n\n typedInst.rootLifetime = createLifetime(null)\n typedInst.rootLifetime._kind = 'root'\n typedInst.allBindings = []\n typedInst.structuralBlocks = []\n\n setFlatBindings(typedInst.allBindings)\n setRenderContext({\n rootLifetime: typedInst.rootLifetime,\n state: typedInst.state,\n allBindings: typedInst.allBindings,\n structuralBlocks: typedInst.structuralBlocks,\n dom: typedInst.dom,\n container:\n entry.kind === 'container' ? entry.container : (entry.anchor.parentElement ?? undefined),\n send: typedInst.send as (msg: unknown) => void,\n instance: typedInst as ComponentInstance,\n })\n const nodes = typedInst.def.view(createView<S, M>(typedInst.send))\n clearRenderContext()\n setFlatBindings(null)\n\n if (entry.kind === 'container') {\n for (const node of nodes) {\n entry.container.appendChild(node)\n }\n } else {\n for (const node of nodes) {\n entry.anchor.parentNode!.insertBefore(node, entry.endSentinel)\n }\n }\n\n if (!handle) {\n handle = makeReplacementHandle(name, entry, typedInst)\n }\n }\n\n console.log(`[LLui HMR] ${name} updated — state preserved`)\n\n return handle\n}\n\nfunction makeReplacementHandle<S, M, E>(\n name: string,\n entry: HmrEntry,\n typedInst: ComponentInstance<S, M, E>,\n): AppHandle {\n return {\n dispose() {\n unregisterForHmr(name, entry.inst)\n entry.inst.abortController.abort()\n unregisterInstance(entry.inst)\n disposeLifetime(typedInst.rootLifetime)\n if (entry.kind === 'container') {\n entry.container.textContent = ''\n } else {\n let sib = entry.anchor.nextSibling\n while (sib !== null && sib !== entry.endSentinel) {\n const next = sib.nextSibling\n sib.parentNode!.removeChild(sib)\n sib = next\n }\n entry.endSentinel.parentNode?.removeChild(entry.endSentinel)\n }\n },\n flush() {\n flushInstance(entry.inst)\n },\n send(msg: unknown) {\n ;(typedInst.send as (m: unknown) => void)(msg)\n },\n getState() {\n return typedInst.state\n },\n }\n}\n"]}
1
+ {"version":3,"file":"hmr.js","sourceRoot":"","sources":["../src/hmr.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentDef, AppHandle } from './types.js'\nimport type { ComponentInstance } from './update-loop.js'\nimport { flushInstance } from './update-loop.js'\nimport { createLifetime, disposeLifetime } from './lifetime.js'\nimport { setRenderContext, clearRenderContext } from './render-context.js'\nimport { setFlatBindings } from './binding.js'\nimport { unregisterInstance } from './runtime.js'\nimport { _setHmrModule } from './mount.js'\nimport { createView } from './view-helpers.js'\n\n/**\n * Enable HMR state preservation. Called by compiler-generated dev code.\n * Importing this module registers it with mountApp for hot-swapping.\n */\nexport function enableHmr(): void {\n _setHmrModule({\n enableHmr,\n registerForHmr,\n registerForAnchor,\n unregisterForHmr,\n replaceComponent,\n })\n}\n\n// ── HMR Registry ─────────────────────────────────────────────────\n\ntype HmrEntry =\n | {\n kind: 'container'\n inst: ComponentInstance\n container: HTMLElement\n }\n | {\n kind: 'anchor'\n inst: ComponentInstance\n anchor: Comment\n endSentinel: Comment\n }\n\nconst hmrRegistry = new Map<string, HmrEntry[]>()\n\nexport function registerForHmr(name: string, inst: object, container: HTMLElement): void {\n const entries = hmrRegistry.get(name) ?? []\n entries.push({ kind: 'container', inst: inst as ComponentInstance, container })\n hmrRegistry.set(name, entries)\n}\n\nexport function registerForAnchor(\n name: string,\n inst: object,\n anchor: Comment,\n endSentinel: Comment,\n): void {\n const entries = hmrRegistry.get(name) ?? []\n entries.push({ kind: 'anchor', inst: inst as ComponentInstance, anchor, endSentinel })\n hmrRegistry.set(name, entries)\n}\n\nexport function unregisterForHmr(name: string, inst: object): void {\n const entries = hmrRegistry.get(name)\n if (!entries) return\n const idx = entries.findIndex((e) => e.inst === inst)\n if (idx !== -1) entries.splice(idx, 1)\n if (entries.length === 0) hmrRegistry.delete(name)\n}\n\n/**\n * Hot-swap a component definition on all live instances.\n *\n * Preserves the current state. Replaces update, view, onEffect, and __dirty.\n * Disposes the old scope tree (removing old DOM and bindings),\n * re-runs view(currentState, send) to rebuild fresh DOM.\n *\n * Returns an AppHandle for the first instance (for mountApp compatibility),\n * or null if no instances are registered (first mount).\n */\nexport function replaceComponent<S, M, E, D = void>(\n name: string,\n newDef: ComponentDef<S, M, E, D>,\n): AppHandle | null {\n const entries = hmrRegistry.get(name)\n if (!entries || entries.length === 0) return null\n\n let handle: AppHandle | null = null\n\n for (const entry of entries) {\n const typedInst = entry.inst as ComponentInstance<S, M, E>\n\n typedInst.def = {\n ...typedInst.def,\n update: newDef.update,\n view: newDef.view,\n onEffect: newDef.onEffect,\n __dirty: newDef.__dirty,\n __update: newDef.__update,\n __handlers: newDef.__handlers,\n }\n\n disposeLifetime(typedInst.rootLifetime)\n\n // Clear the owned region per-kind.\n if (entry.kind === 'container') {\n entry.container.textContent = ''\n } else {\n // anchor kind — wipe siblings between anchor and endSentinel, keep the\n // anchor AND the end sentinel (they bracket the fresh render).\n let sib = entry.anchor.nextSibling\n while (sib !== null && sib !== entry.endSentinel) {\n const next = sib.nextSibling\n sib.parentNode!.removeChild(sib)\n sib = next\n }\n }\n\n typedInst.rootLifetime = createLifetime(null)\n typedInst.rootLifetime._kind = 'root'\n typedInst.allBindings = []\n typedInst.structuralBlocks = []\n\n setFlatBindings(typedInst.allBindings)\n setRenderContext({\n rootLifetime: typedInst.rootLifetime,\n state: typedInst.state,\n allBindings: typedInst.allBindings,\n structuralBlocks: typedInst.structuralBlocks,\n dom: typedInst.dom,\n container:\n entry.kind === 'container' ? entry.container : (entry.anchor.parentElement ?? undefined),\n send: typedInst.send as (msg: unknown) => void,\n instance: typedInst as ComponentInstance,\n })\n const nodes = typedInst.def.view(createView<S, M>(typedInst.send))\n clearRenderContext()\n setFlatBindings(null)\n\n if (entry.kind === 'container') {\n for (const node of nodes) {\n entry.container.appendChild(node)\n }\n } else {\n for (const node of nodes) {\n entry.anchor.parentNode!.insertBefore(node, entry.endSentinel)\n }\n }\n\n if (!handle) {\n handle = makeReplacementHandle(name, entry, typedInst)\n }\n }\n\n console.log(`[LLui HMR] ${name} updated — state preserved`)\n\n return handle\n}\n\nfunction makeReplacementHandle<S, M, E>(\n name: string,\n entry: HmrEntry,\n typedInst: ComponentInstance<S, M, E>,\n): AppHandle {\n const listeners = new Set<(s: unknown) => void>()\n typedInst._onCommit = (state: unknown) => {\n for (const l of Array.from(listeners)) {\n try {\n l(state)\n } catch (err) {\n console.error('[llui] listener threw:', err)\n }\n }\n }\n let disposed = false\n return {\n dispose() {\n if (disposed) return\n disposed = true\n listeners.clear()\n typedInst._onCommit = undefined\n unregisterForHmr(name, entry.inst)\n entry.inst.abortController.abort()\n unregisterInstance(entry.inst)\n disposeLifetime(typedInst.rootLifetime)\n if (entry.kind === 'container') {\n entry.container.textContent = ''\n } else {\n let sib = entry.anchor.nextSibling\n while (sib !== null && sib !== entry.endSentinel) {\n const next = sib.nextSibling\n sib.parentNode!.removeChild(sib)\n sib = next\n }\n entry.endSentinel.parentNode?.removeChild(entry.endSentinel)\n }\n },\n flush() {\n flushInstance(entry.inst)\n },\n send(msg: unknown) {\n ;(typedInst.send as (m: unknown) => void)(msg)\n },\n getState() {\n return typedInst.state\n },\n subscribe(listener: (state: unknown) => void) {\n if (disposed) return () => {}\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAA;AA2CtD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KACxB;CACF;AAsBD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAA;IACzB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AACZ,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AAgKZ;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AACZ,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AA+GZ;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAC/C,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CA0FX;AAYD,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAC1C,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAgFX"}
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAA;AA2CtD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,GAAG,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KACxB;CACF;AAsBD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAA;IACzB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AACZ,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AAkLZ;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AACZ,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAAA;AAiIZ;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAC/C,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CA4GX;AAYD,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAC1C,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CAkGX"}