@llui/dom 0.0.40 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +22 -21
  2. package/dist/binding.d.ts +5 -0
  3. package/dist/binding.d.ts.map +1 -1
  4. package/dist/binding.js +1 -0
  5. package/dist/binding.js.map +1 -1
  6. package/dist/combine.d.ts +67 -0
  7. package/dist/combine.d.ts.map +1 -0
  8. package/dist/combine.js +76 -0
  9. package/dist/combine.js.map +1 -0
  10. package/dist/compose.d.ts +27 -21
  11. package/dist/compose.d.ts.map +1 -1
  12. package/dist/compose.js +19 -13
  13. package/dist/compose.js.map +1 -1
  14. package/dist/devtools.d.ts.map +1 -1
  15. package/dist/devtools.js +15 -5
  16. package/dist/devtools.js.map +1 -1
  17. package/dist/el-split.d.ts +1 -1
  18. package/dist/el-split.d.ts.map +1 -1
  19. package/dist/el-split.js +20 -2
  20. package/dist/el-split.js.map +1 -1
  21. package/dist/el-template.d.ts +8 -2
  22. package/dist/el-template.d.ts.map +1 -1
  23. package/dist/el-template.js +2 -1
  24. package/dist/el-template.js.map +1 -1
  25. package/dist/escape-hatch.d.ts +47 -0
  26. package/dist/escape-hatch.d.ts.map +1 -0
  27. package/dist/escape-hatch.js +63 -0
  28. package/dist/escape-hatch.js.map +1 -0
  29. package/dist/hmr.d.ts +2 -1
  30. package/dist/hmr.d.ts.map +1 -1
  31. package/dist/hmr.js +3 -2
  32. package/dist/hmr.js.map +1 -1
  33. package/dist/index.d.ts +3 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +2 -3
  36. package/dist/index.js.map +1 -1
  37. package/dist/primitives/branch.d.ts.map +1 -1
  38. package/dist/primitives/branch.js +1 -0
  39. package/dist/primitives/branch.js.map +1 -1
  40. package/dist/primitives/each.d.ts.map +1 -1
  41. package/dist/primitives/each.js +1 -0
  42. package/dist/primitives/each.js.map +1 -1
  43. package/dist/primitives/memo.d.ts +2 -2
  44. package/dist/primitives/memo.d.ts.map +1 -1
  45. package/dist/primitives/memo.js +13 -5
  46. package/dist/primitives/memo.js.map +1 -1
  47. package/dist/primitives/sample.d.ts +2 -2
  48. package/dist/primitives/sample.js +2 -2
  49. package/dist/primitives/sample.js.map +1 -1
  50. package/dist/primitives/unsafe-html.d.ts.map +1 -1
  51. package/dist/primitives/unsafe-html.js +1 -0
  52. package/dist/primitives/unsafe-html.js.map +1 -1
  53. package/dist/primitives/virtual-each.d.ts.map +1 -1
  54. package/dist/primitives/virtual-each.js +7 -4
  55. package/dist/primitives/virtual-each.js.map +1 -1
  56. package/dist/render-context.js +1 -1
  57. package/dist/render-context.js.map +1 -1
  58. package/dist/structural.d.ts +8 -4
  59. package/dist/structural.d.ts.map +1 -1
  60. package/dist/structural.js.map +1 -1
  61. package/dist/types.d.ts +27 -23
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js.map +1 -1
  64. package/dist/update-loop.d.ts +14 -6
  65. package/dist/update-loop.d.ts.map +1 -1
  66. package/dist/update-loop.js +130 -34
  67. package/dist/update-loop.js.map +1 -1
  68. package/package.json +5 -1
@@ -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. When the canonical\n * path is shadowed (e.g. `@cloudflare/vite-plugin` routes every\n * HTTP request to the worker), the client falls back to\n * `/cdn-cgi/llui_mcp_status` which the Vite plugin also registers\n * — Cloudflare lets `/cdn-cgi/*` paths through to the dev server.\n * 2. **Compile-time fallback**: if both endpoints are unavailable\n * (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 if (typeof fetch !== 'undefined') {\n void resolveMcpStatus().then((result) => {\n if (result.kind === 'found') {\n relayPort = result.port\n connectRelay(result.port, true)\n } else if (result.kind === 'network-error') {\n // No Vite server reachable (e.g., production build, test\n // harness without a server). Fall back to the compile-time\n // port; the WS connect will either succeed or quietly fail.\n connectRelay(port, true)\n }\n // result.kind === 'not-running' → both endpoints 404'd. MCP isn't\n // active. Don't fall back to the compile-time port; the HMR\n // `llui:mcp-ready` event fires if MCP starts later, and manual\n // `window.__lluiConnect()` is the escape hatch.\n })\n } else {\n // No fetch available — use the compile-time port directly\n connectRelay(port, true)\n }\n}\n\ntype McpStatusResult =\n | { kind: 'found'; port: number }\n | { kind: 'not-running' } // every path responded but with non-200/no port\n | { kind: 'network-error' } // every path threw — no server reachable\n\n/**\n * Try the canonical Vite middleware path; if it 404s (Cloudflare\n * plugin's catch-all routes everything to the worker), fall back to\n * `/cdn-cgi/llui_mcp_status` which the Vite plugin also registers.\n *\n * Distinguishes \"MCP not running\" (404 from a real Vite server) from\n * \"no Vite server\" (fetch threw). Callers handle these differently —\n * the former should NOT fall back to the compile-time port (avoids\n * spurious WS connection attempts), the latter SHOULD.\n */\nasync function resolveMcpStatus(): Promise<McpStatusResult> {\n let allThrew = true\n for (const path of ['/__llui_mcp_status', '/cdn-cgi/llui_mcp_status']) {\n try {\n const res = await fetch(path)\n // We got a response — even a 404 means a server is live; don't\n // treat this as a network error.\n allThrew = false\n if (!res.ok) continue\n const data = (await res.json()) as { port?: unknown }\n if (typeof data.port === 'number') return { kind: 'found', port: data.port }\n } catch {\n // Network error on this path — try the next.\n }\n }\n return allThrew ? { kind: 'network-error' } : { kind: 'not-running' }\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"]}
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../src/devtools.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n flushInstance,\n _forceState,\n computeDirtyFromPrefixes,\n type ComponentInstance,\n} 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. When the canonical\n * path is shadowed (e.g. `@cloudflare/vite-plugin` routes every\n * HTTP request to the worker), the client falls back to\n * `/cdn-cgi/llui_mcp_status` which the Vite plugin also registers\n * — Cloudflare lets `/cdn-cgi/*` paths through to the dev server.\n * 2. **Compile-time fallback**: if both endpoints are unavailable\n * (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 if (typeof fetch !== 'undefined') {\n void resolveMcpStatus().then((result) => {\n if (result.kind === 'found') {\n relayPort = result.port\n connectRelay(result.port, true)\n } else if (result.kind === 'network-error') {\n // No Vite server reachable (e.g., production build, test\n // harness without a server). Fall back to the compile-time\n // port; the WS connect will either succeed or quietly fail.\n connectRelay(port, true)\n }\n // result.kind === 'not-running' → both endpoints 404'd. MCP isn't\n // active. Don't fall back to the compile-time port; the HMR\n // `llui:mcp-ready` event fires if MCP starts later, and manual\n // `window.__lluiConnect()` is the escape hatch.\n })\n } else {\n // No fetch available — use the compile-time port directly\n connectRelay(port, true)\n }\n}\n\ntype McpStatusResult =\n | { kind: 'found'; port: number }\n | { kind: 'not-running' } // every path responded but with non-200/no port\n | { kind: 'network-error' } // every path threw — no server reachable\n\n/**\n * Try the canonical Vite middleware path; if it 404s (Cloudflare\n * plugin's catch-all routes everything to the worker), fall back to\n * `/cdn-cgi/llui_mcp_status` which the Vite plugin also registers.\n *\n * Distinguishes \"MCP not running\" (404 from a real Vite server) from\n * \"no Vite server\" (fetch threw). Callers handle these differently —\n * the former should NOT fall back to the compile-time port (avoids\n * spurious WS connection attempts), the latter SHOULD.\n */\nasync function resolveMcpStatus(): Promise<McpStatusResult> {\n let allThrew = true\n for (const path of ['/__llui_mcp_status', '/cdn-cgi/llui_mcp_status']) {\n try {\n const res = await fetch(path)\n // We got a response — even a 404 means a server is live; don't\n // treat this as a network error.\n allThrew = false\n if (!res.ok) continue\n const data = (await res.json()) as { port?: unknown }\n if (typeof data.port === 'number') return { kind: 'found', port: data.port }\n } catch {\n // Network error on this path — try the next.\n }\n }\n return allThrew ? { kind: 'network-error' } : { kind: 'not-running' }\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 // Compute the dirty mask from `__prefixes` (the supported reactivity\n // path). Devtools recording only surfaces the LOW word here for the\n // existing MessageRecord shape; high-word changes contribute to the\n // mask via the runtime's full two-word computation but are folded\n // into the `dirtyMask` field's display via FULL_MASK fallback when\n // they alone fire. A future devtools schema upgrade can surface both\n // words separately if needed.\n const prefixes = (ci.def as { __prefixes?: ReadonlyArray<(s: unknown) => unknown> }).__prefixes\n let dirty: number = -1\n if (prefixes) {\n const computed = computeDirtyFromPrefixes(prefixes, state, newState)\n dirty = typeof computed === 'number' ? computed : computed[0] | computed[1]\n }\n\n lastDirtyMask = dirty\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,3 +1,3 @@
1
1
  import type { BindingKind } from './types.js';
2
- export declare function elSplit(tag: string, staticFn: ((el: HTMLElement) => void) | null, events: Array<[string, EventListener]> | null, bindings: Array<[number, BindingKind, string, (state: never) => unknown]> | null, children: Array<Node | string | Array<Node | string>> | null): HTMLElement;
2
+ export declare function elSplit(tag: string, staticFn: ((el: HTMLElement) => void) | null, events: Array<[string, EventListener]> | null, bindings: Array<[number, BindingKind, string, (state: never) => unknown] | [number, BindingKind, string, (state: never) => unknown, number]> | null, children: Array<Node | string | Array<Node | string>> | null): HTMLElement;
3
3
  //# sourceMappingURL=el-split.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"el-split.d.ts","sourceRoot":"","sources":["../src/el-split.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM7C,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,IAAI,EAC5C,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,EAC7C,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,EAMhF,QAAQ,EAAE,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,GAC3D,WAAW,CAgFb"}
1
+ {"version":3,"file":"el-split.d.ts","sourceRoot":"","sources":["../src/el-split.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM7C,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,IAAI,EAC5C,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,EAO7C,QAAQ,EAAE,KAAK,CACX,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GACxD,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,EAAE,MAAM,CAAC,CACnE,GAAG,IAAI,EAMR,QAAQ,EAAE,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,GAC3D,WAAW,CA2Fb"}
package/dist/el-split.js CHANGED
@@ -2,7 +2,14 @@ import { getRenderContext } from './render-context.js';
2
2
  import { createBinding, applyBinding } from './binding.js';
3
3
  import { addCheckedItemUpdater } from './lifetime.js';
4
4
  import { registerBindingVariants } from './binding-descriptors.js';
5
- export function elSplit(tag, staticFn, events, bindings,
5
+ export function elSplit(tag, staticFn, events,
6
+ // Bindings are 4-tuples for low-word-only access (the common case)
7
+ // or 5-tuples when the binding's accessor reads a prefix at bit
8
+ // position 31..61, in which case the 5th slot carries the high-word
9
+ // mask. Stale compiled bundles emit only 4-tuples; new bundles emit
10
+ // the 5th slot when (and only when) needed, so the on-the-wire
11
+ // representation stays byte-identical for ≤31-prefix components.
12
+ bindings,
6
13
  // Accepts raw strings too (wrapped in Text nodes at append time so
7
14
  // user code like `button([], ['Sign in'])` works without an explicit
8
15
  // text() wrapper) and nested arrays (flattened one level to match the
@@ -31,7 +38,17 @@ children) {
31
38
  }
32
39
  }
33
40
  if (bindings) {
34
- for (const [mask, kind, key, accessor] of bindings) {
41
+ for (const b of bindings) {
42
+ const mask = b[0];
43
+ const kind = b[1];
44
+ const key = b[2];
45
+ const accessor = b[3];
46
+ // Tuple length 5 carries a high-word mask in slot 4 (when the
47
+ // accessor reads a path at bit position 31..61). Length 4 stays
48
+ // pure low-word — covers both ≤31-prefix components and
49
+ // 32..61-prefix components whose individual bindings only touch
50
+ // low-word paths.
51
+ const maskHi = b.length === 5 ? b[4] : 0;
35
52
  const perItem = accessor.length === 0;
36
53
  if (perItem) {
37
54
  const get = accessor;
@@ -42,6 +59,7 @@ children) {
42
59
  else {
43
60
  const binding = createBinding(ctx.rootLifetime, {
44
61
  mask,
62
+ maskHi,
45
63
  accessor,
46
64
  kind,
47
65
  node: el,
@@ -1 +1 @@
1
- {"version":3,"file":"el-split.js","sourceRoot":"","sources":["../src/el-split.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { addCheckedItemUpdater } from './lifetime.js'\nimport { registerBindingVariants } from './binding-descriptors.js'\n\nexport function elSplit(\n tag: string,\n staticFn: ((el: HTMLElement) => void) | null,\n events: Array<[string, EventListener]> | null,\n bindings: Array<[number, BindingKind, string, (state: never) => unknown]> | null,\n // Accepts raw strings too (wrapped in Text nodes at append time so\n // user code like `button([], ['Sign in'])` works without an explicit\n // text() wrapper) and nested arrays (flattened one level to match the\n // raw createElement path — supports patterns like `main([pageSlot()])`\n // where pageSlot() returns Node[]).\n children: Array<Node | string | Array<Node | string>> | null,\n): HTMLElement {\n const ctx = getRenderContext()\n const el = ctx.dom.createElement(tag) as HTMLElement\n\n if (staticFn) {\n staticFn(el)\n }\n\n if (events) {\n for (const [eventName, handler] of events) {\n // Compiler-tagged variants — same protocol as the raw\n // `createElement` path in `elements.ts`. The vite-plugin's\n // tagger wraps event-handler arrows containing literal\n // `send({type:'X'})` calls with `Object.assign(arrow,\n // {__lluiVariants: ['X', …]})`. Register those so the agent\n // layer's `list_actions` reflects the live UI affordances.\n const variants = (handler as { __lluiVariants?: readonly string[] } | null | undefined)\n ?.__lluiVariants\n if (variants && variants.length > 0 && ctx.instance) {\n registerBindingVariants(ctx.instance, ctx.rootLifetime, variants)\n }\n el.addEventListener(eventName, handler)\n }\n }\n\n if (bindings) {\n for (const [mask, kind, key, accessor] of bindings) {\n const perItem = accessor.length === 0\n if (perItem) {\n const get = accessor as unknown as () => unknown\n const target = { kind, node: el, key }\n const initial = addCheckedItemUpdater(ctx.rootLifetime, get, (v) => applyBinding(target, v))\n applyBinding(target, initial)\n } else {\n const binding = createBinding(ctx.rootLifetime, {\n mask,\n accessor,\n kind,\n node: el,\n key,\n perItem: false,\n })\n const initialValue = accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node: el, key }, initialValue)\n }\n }\n }\n\n if (children) {\n for (const child of children) {\n // Strings get wrapped in Text nodes — matches createElement's\n // behavior in elements.ts. Without this, user code that passes\n // raw strings as children (e.g. `button([], ['Sign in'])`) crashes\n // in jsdom with \"parameter 1 is not of type 'Node'\" during SSR\n // and throws a TypeError in strict browsers.\n if (typeof child === 'string') {\n el.appendChild(ctx.dom.createTextNode(child))\n } else if (Array.isArray(child)) {\n // Arrays-in-children are flattened one level. This matches\n // the raw createElement path in elements.ts and makes patterns\n // like `main([pageSlot()])` (where pageSlot() returns Node[])\n // work consistently between raw and compiled call paths.\n // Without this flattening, tests run via vitest pass (raw path\n // flattens) but SSR via the compiler transform crashes with\n // \"appendChild parameter is not of type Node\".\n for (const node of child) {\n if (typeof node === 'string') {\n el.appendChild(ctx.dom.createTextNode(node))\n } else {\n el.appendChild(node)\n }\n }\n } else {\n el.appendChild(child)\n }\n }\n }\n\n return el\n}\n"]}
1
+ {"version":3,"file":"el-split.js","sourceRoot":"","sources":["../src/el-split.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { addCheckedItemUpdater } from './lifetime.js'\nimport { registerBindingVariants } from './binding-descriptors.js'\n\nexport function elSplit(\n tag: string,\n staticFn: ((el: HTMLElement) => void) | null,\n events: Array<[string, EventListener]> | null,\n // Bindings are 4-tuples for low-word-only access (the common case)\n // or 5-tuples when the binding's accessor reads a prefix at bit\n // position 31..61, in which case the 5th slot carries the high-word\n // mask. Stale compiled bundles emit only 4-tuples; new bundles emit\n // the 5th slot when (and only when) needed, so the on-the-wire\n // representation stays byte-identical for ≤31-prefix components.\n bindings: Array<\n | [number, BindingKind, string, (state: never) => unknown]\n | [number, BindingKind, string, (state: never) => unknown, number]\n > | null,\n // Accepts raw strings too (wrapped in Text nodes at append time so\n // user code like `button([], ['Sign in'])` works without an explicit\n // text() wrapper) and nested arrays (flattened one level to match the\n // raw createElement path — supports patterns like `main([pageSlot()])`\n // where pageSlot() returns Node[]).\n children: Array<Node | string | Array<Node | string>> | null,\n): HTMLElement {\n const ctx = getRenderContext()\n const el = ctx.dom.createElement(tag) as HTMLElement\n\n if (staticFn) {\n staticFn(el)\n }\n\n if (events) {\n for (const [eventName, handler] of events) {\n // Compiler-tagged variants — same protocol as the raw\n // `createElement` path in `elements.ts`. The vite-plugin's\n // tagger wraps event-handler arrows containing literal\n // `send({type:'X'})` calls with `Object.assign(arrow,\n // {__lluiVariants: ['X', …]})`. Register those so the agent\n // layer's `list_actions` reflects the live UI affordances.\n const variants = (handler as { __lluiVariants?: readonly string[] } | null | undefined)\n ?.__lluiVariants\n if (variants && variants.length > 0 && ctx.instance) {\n registerBindingVariants(ctx.instance, ctx.rootLifetime, variants)\n }\n el.addEventListener(eventName, handler)\n }\n }\n\n if (bindings) {\n for (const b of bindings) {\n const mask = b[0]\n const kind = b[1]\n const key = b[2]\n const accessor = b[3]\n // Tuple length 5 carries a high-word mask in slot 4 (when the\n // accessor reads a path at bit position 31..61). Length 4 stays\n // pure low-word — covers both ≤31-prefix components and\n // 32..61-prefix components whose individual bindings only touch\n // low-word paths.\n const maskHi = b.length === 5 ? (b[4] as number) : 0\n const perItem = accessor.length === 0\n if (perItem) {\n const get = accessor as unknown as () => unknown\n const target = { kind, node: el, key }\n const initial = addCheckedItemUpdater(ctx.rootLifetime, get, (v) => applyBinding(target, v))\n applyBinding(target, initial)\n } else {\n const binding = createBinding(ctx.rootLifetime, {\n mask,\n maskHi,\n accessor,\n kind,\n node: el,\n key,\n perItem: false,\n })\n const initialValue = accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node: el, key }, initialValue)\n }\n }\n }\n\n if (children) {\n for (const child of children) {\n // Strings get wrapped in Text nodes — matches createElement's\n // behavior in elements.ts. Without this, user code that passes\n // raw strings as children (e.g. `button([], ['Sign in'])`) crashes\n // in jsdom with \"parameter 1 is not of type 'Node'\" during SSR\n // and throws a TypeError in strict browsers.\n if (typeof child === 'string') {\n el.appendChild(ctx.dom.createTextNode(child))\n } else if (Array.isArray(child)) {\n // Arrays-in-children are flattened one level. This matches\n // the raw createElement path in elements.ts and makes patterns\n // like `main([pageSlot()])` (where pageSlot() returns Node[])\n // work consistently between raw and compiled call paths.\n // Without this flattening, tests run via vitest pass (raw path\n // flattens) but SSR via the compiler transform crashes with\n // \"appendChild parameter is not of type Node\".\n for (const node of child) {\n if (typeof node === 'string') {\n el.appendChild(ctx.dom.createTextNode(node))\n } else {\n el.appendChild(node)\n }\n }\n } else {\n el.appendChild(child)\n }\n }\n }\n\n return el\n}\n"]}
@@ -1,7 +1,13 @@
1
1
  import type { BindingKind } from './types.js';
2
2
  import type { DomEnv } from './dom-env.js';
3
- /** Callback passed to patch functions — registers a reactive binding on a node. */
4
- export type TemplateBind = (node: Node, mask: number, kind: BindingKind, key: string | undefined, accessor: (s: never) => unknown) => void;
3
+ /** Callback passed to patch functions — registers a reactive binding on a node.
4
+ *
5
+ * `maskHi` (optional, defaults to 0) carries the high-word mask for
6
+ * accessors that read prefixes at bit positions 31..61. Stale
7
+ * compiled bundles emitted before multi-word support omit the
8
+ * parameter entirely; the defaulting keeps them correct under
9
+ * ≤31-prefix components. */
10
+ export type TemplateBind = (node: Node, mask: number, kind: BindingKind, key: string | undefined, accessor: (s: never) => unknown, maskHi?: number) => void;
5
11
  /**
6
12
  * Clone a cached HTML template and apply a patch function.
7
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"el-template.d.ts","sourceRoot":"","sources":["../src/el-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAmB1C,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,KAC5B,IAAI,CAAA;AAET;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GAC9D,OAAO,CAqCT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUxD"}
1
+ {"version":3,"file":"el-template.d.ts","sourceRoot":"","sources":["../src/el-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAmB1C;;;;;;6BAM6B;AAC7B,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,EAC/B,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAA;AAET;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GAC9D,OAAO,CAsCT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUxD"}
@@ -36,7 +36,7 @@ export function elTemplate(html, patch) {
36
36
  cache.set(html, tmpl);
37
37
  }
38
38
  const root = tmpl.content.firstElementChild.cloneNode(true);
39
- const bind = (node, mask, kind, key, accessor) => {
39
+ const bind = (node, mask, kind, key, accessor, maskHi = 0) => {
40
40
  const perItem = accessor.length === 0;
41
41
  if (perItem) {
42
42
  const get = accessor;
@@ -48,6 +48,7 @@ export function elTemplate(html, patch) {
48
48
  // State-level: use the binding system for Phase 2
49
49
  const binding = createBinding(ctx.rootLifetime, {
50
50
  mask,
51
+ maskHi,
51
52
  accessor,
52
53
  kind,
53
54
  node,
@@ -1 +1 @@
1
- {"version":3,"file":"el-template.js","sourceRoot":"","sources":["../src/el-template.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport type { DomEnv } from './dom-env.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { addCheckedItemUpdater } from './lifetime.js'\n\n// Per-env cache: each DomEnv owns its own HTMLTemplateElement cache so\n// concurrent SSR with different envs (jsdom + linkedom in one process)\n// never cross-polluates node instances. Keyed by env identity via\n// WeakMap so envs get GC'd with their caches.\nconst templateCacheByEnv = new WeakMap<DomEnv, Map<string, HTMLTemplateElement>>()\nfunction getTemplateCache(env: DomEnv): Map<string, HTMLTemplateElement> {\n let cache = templateCacheByEnv.get(env)\n if (!cache) {\n cache = new Map()\n templateCacheByEnv.set(env, cache)\n }\n return cache\n}\n\n/** Callback passed to patch functions — registers a reactive binding on a node. */\nexport type TemplateBind = (\n node: Node,\n mask: number,\n kind: BindingKind,\n key: string | undefined,\n accessor: (s: never) => unknown,\n) => void\n\n/**\n * Clone a cached HTML template and apply a patch function.\n *\n * The patch function receives the cloned root element and a `bind` helper\n * that registers reactive bindings in the current render context.\n *\n * Per-item bindings (accessor.length === 0) are registered as direct\n * updaters on the scope — called by each() when item changes, bypassing\n * the Phase 2 binding scan entirely.\n *\n * Fast path for each() rows — 1 cloneNode instead of N createElement.\n */\nexport function elTemplate(\n html: string,\n patch: (root: Element, bind: TemplateBind, dom: DomEnv) => void,\n): Element {\n const ctx = getRenderContext()\n const cache = getTemplateCache(ctx.dom)\n let tmpl = cache.get(html)\n if (!tmpl) {\n tmpl = ctx.dom.createElement('template') as HTMLTemplateElement\n tmpl.innerHTML = html\n cache.set(html, tmpl)\n }\n\n const root = tmpl.content.firstElementChild!.cloneNode(true) as Element\n\n const bind: TemplateBind = (node, mask, kind, key, accessor) => {\n const perItem = accessor.length === 0\n if (perItem) {\n const get = accessor as unknown as () => unknown\n const target = { kind, node, key }\n const initial = addCheckedItemUpdater(ctx.rootLifetime, get, (v) => applyBinding(target, v))\n applyBinding(target, initial)\n } else {\n // State-level: use the binding system for Phase 2\n const binding = createBinding(ctx.rootLifetime, {\n mask,\n accessor,\n kind,\n node,\n key,\n perItem: false,\n })\n const initialValue = accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node, key }, initialValue)\n }\n }\n\n patch(root, bind, ctx.dom)\n return root\n}\n\n/**\n * Emitted by `@llui/vite-plugin` for static-content template clones\n * (no bindings). Replaces the bare `document.createElement('template')`\n * IIFE the compiler used to emit, threading through `ctx.dom` so SSR\n * in non-browser envs (jsdom, linkedom) works without globalThis mutation.\n *\n * App authors should not call this directly — use `elTemplate` for\n * dynamic content and element helpers (`div`, `span`, …) for everything\n * else. The underscore prefix signals the compiler-only surface; the\n * export exists because the compiler emits import references to it.\n */\nexport function __cloneStaticTemplate(html: string): Node {\n const ctx = getRenderContext('cloneStaticTemplate')\n const cache = getTemplateCache(ctx.dom)\n let tmpl = cache.get(html)\n if (!tmpl) {\n tmpl = ctx.dom.createElement('template') as HTMLTemplateElement\n tmpl.innerHTML = html\n cache.set(html, tmpl)\n }\n return tmpl.content.cloneNode(true).firstChild!\n}\n"]}
1
+ {"version":3,"file":"el-template.js","sourceRoot":"","sources":["../src/el-template.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport type { DomEnv } from './dom-env.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { addCheckedItemUpdater } from './lifetime.js'\n\n// Per-env cache: each DomEnv owns its own HTMLTemplateElement cache so\n// concurrent SSR with different envs (jsdom + linkedom in one process)\n// never cross-polluates node instances. Keyed by env identity via\n// WeakMap so envs get GC'd with their caches.\nconst templateCacheByEnv = new WeakMap<DomEnv, Map<string, HTMLTemplateElement>>()\nfunction getTemplateCache(env: DomEnv): Map<string, HTMLTemplateElement> {\n let cache = templateCacheByEnv.get(env)\n if (!cache) {\n cache = new Map()\n templateCacheByEnv.set(env, cache)\n }\n return cache\n}\n\n/** Callback passed to patch functions — registers a reactive binding on a node.\n *\n * `maskHi` (optional, defaults to 0) carries the high-word mask for\n * accessors that read prefixes at bit positions 31..61. Stale\n * compiled bundles emitted before multi-word support omit the\n * parameter entirely; the defaulting keeps them correct under\n * ≤31-prefix components. */\nexport type TemplateBind = (\n node: Node,\n mask: number,\n kind: BindingKind,\n key: string | undefined,\n accessor: (s: never) => unknown,\n maskHi?: number,\n) => void\n\n/**\n * Clone a cached HTML template and apply a patch function.\n *\n * The patch function receives the cloned root element and a `bind` helper\n * that registers reactive bindings in the current render context.\n *\n * Per-item bindings (accessor.length === 0) are registered as direct\n * updaters on the scope — called by each() when item changes, bypassing\n * the Phase 2 binding scan entirely.\n *\n * Fast path for each() rows — 1 cloneNode instead of N createElement.\n */\nexport function elTemplate(\n html: string,\n patch: (root: Element, bind: TemplateBind, dom: DomEnv) => void,\n): Element {\n const ctx = getRenderContext()\n const cache = getTemplateCache(ctx.dom)\n let tmpl = cache.get(html)\n if (!tmpl) {\n tmpl = ctx.dom.createElement('template') as HTMLTemplateElement\n tmpl.innerHTML = html\n cache.set(html, tmpl)\n }\n\n const root = tmpl.content.firstElementChild!.cloneNode(true) as Element\n\n const bind: TemplateBind = (node, mask, kind, key, accessor, maskHi = 0) => {\n const perItem = accessor.length === 0\n if (perItem) {\n const get = accessor as unknown as () => unknown\n const target = { kind, node, key }\n const initial = addCheckedItemUpdater(ctx.rootLifetime, get, (v) => applyBinding(target, v))\n applyBinding(target, initial)\n } else {\n // State-level: use the binding system for Phase 2\n const binding = createBinding(ctx.rootLifetime, {\n mask,\n maskHi,\n accessor,\n kind,\n node,\n key,\n perItem: false,\n })\n const initialValue = accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node, key }, initialValue)\n }\n }\n\n patch(root, bind, ctx.dom)\n return root\n}\n\n/**\n * Emitted by `@llui/vite-plugin` for static-content template clones\n * (no bindings). Replaces the bare `document.createElement('template')`\n * IIFE the compiler used to emit, threading through `ctx.dom` so SSR\n * in non-browser envs (jsdom, linkedom) works without globalThis mutation.\n *\n * App authors should not call this directly — use `elTemplate` for\n * dynamic content and element helpers (`div`, `span`, …) for everything\n * else. The underscore prefix signals the compiler-only surface; the\n * export exists because the compiler emits import references to it.\n */\nexport function __cloneStaticTemplate(html: string): Node {\n const ctx = getRenderContext('cloneStaticTemplate')\n const cache = getTemplateCache(ctx.dom)\n let tmpl = cache.get(html)\n if (!tmpl) {\n tmpl = ctx.dom.createElement('template') as HTMLTemplateElement\n tmpl.innerHTML = html\n cache.set(html, tmpl)\n }\n return tmpl.content.cloneNode(true).firstChild!\n}\n"]}
@@ -0,0 +1,47 @@
1
+ import type { ComponentDef, AppHandle } from './types.js';
2
+ import { type MountOptions } from './mount.js';
3
+ export interface SubAppOptions<D = void> extends MountOptions {
4
+ /**
5
+ * Why a `subApp` boundary is needed here rather than a view function.
6
+ * Required, non-empty. Shown in devtools / MCP / agent introspection
7
+ * so a reviewer can audit isolation boundaries the way they'd audit
8
+ * `eslint-disable` comments. ESLint rule `llui/subapp-requires-reason`
9
+ * enforces that this is a non-empty string literal.
10
+ *
11
+ * Examples of good reasons:
12
+ * - "Monaco editor owns its own DOM + selection lifecycle"
13
+ * - "60fps drag layer — pumping every drag through the host reducer
14
+ * is too expensive"
15
+ * - "Lazy-loaded admin tools chunk; state is sealed off from main app"
16
+ *
17
+ * "code organization", "to break up this component", "I felt like it"
18
+ * are all wrong answers — they signal the call should be a view
19
+ * function instead.
20
+ */
21
+ reason: string;
22
+ /** Init data threaded into the sub-app's `def.init(data)`. */
23
+ data?: D;
24
+ }
25
+ /**
26
+ * Mount a fully isolated app-in-app at the current view position.
27
+ *
28
+ * The sub-app's lifecycle is tied to the parent scope: when the parent
29
+ * scope disposes (component unmount, branch arm replaced, `each` row
30
+ * removed, ...), the sub-app's handle is `dispose()`'d automatically.
31
+ *
32
+ * Returns the node array to splice into the parent's view. Internally
33
+ * synthesizes a wrapper container; the sub-app mounts inside it on the
34
+ * synchronous `onMount` cycle after the parent's DOM is in place.
35
+ *
36
+ * For host code that needs the `AppHandle` (to drive the sub-app from
37
+ * outside — typically a foreign integration), pass `onHandle` in the
38
+ * options; it receives the handle once mount completes.
39
+ */
40
+ export declare function subApp<S, M, E>(opts: SubAppOptions & {
41
+ def: ComponentDef<S, M, E>;
42
+ }): Node[];
43
+ export declare function subApp<S, M, E, D>(opts: SubAppOptions<D> & {
44
+ def: ComponentDef<S, M, E, D>;
45
+ onHandle?: (handle: AppHandle) => void;
46
+ }): Node[];
47
+ //# sourceMappingURL=escape-hatch.d.ts.map