@lokascript/compilation-service 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diff/diff.ts","../src/input/detect.ts","../src/input/json-schema.ts","../src/compile/cache.ts","../src/operations/extract.ts","../src/renderers/html-fixture.ts","../src/renderers/playwright.ts","../src/renderers/renderer-helpers.ts","../src/renderers/react.ts","../src/renderers/vue.ts","../src/renderers/svelte.ts","../src/input/normalize.ts","../src/validation/gates.ts","../src/compile/bridge.ts","../src/service.ts"],"sourcesContent":["/**\n * Semantic Diff Engine\n *\n * Compares two BehaviorSpecs at the abstract operation level.\n * Uses LCS (longest common subsequence) for operation-level diffing\n * and post-processes to detect reorderings.\n */\n\nimport type { AbstractOperation, BehaviorSpec } from '../operations/types.js';\nimport type { TriggerDiff, OperationDiff, OperationChangeKind } from './types.js';\n\n// =============================================================================\n// Public API\n// =============================================================================\n\nexport interface DiffResult {\n identical: boolean;\n trigger: TriggerDiff | null;\n operations: OperationDiff[];\n summary: string;\n}\n\n/**\n * Compare two BehaviorSpecs and produce a structured diff.\n */\nexport function diffBehaviors(a: BehaviorSpec, b: BehaviorSpec): DiffResult {\n const triggerDiff = diffTrigger(a, b);\n const opDiffs = diffOperations(a.operations, b.operations);\n\n const identical = triggerDiff === null && opDiffs.every(d => d.kind === 'unchanged');\n const summary = generateSummary(triggerDiff, opDiffs);\n\n return { identical, trigger: triggerDiff, operations: opDiffs, summary };\n}\n\n// =============================================================================\n// Trigger Comparison\n// =============================================================================\n\nfunction diffTrigger(a: BehaviorSpec, b: BehaviorSpec): TriggerDiff | null {\n const changes: string[] = [];\n\n if (a.trigger.event !== b.trigger.event) {\n changes.push(`event: ${a.trigger.event} → ${b.trigger.event}`);\n }\n\n // Compare modifiers\n const aModKeys = Object.keys(a.trigger.modifiers ?? {}).sort();\n const bModKeys = Object.keys(b.trigger.modifiers ?? {}).sort();\n const aMods = a.trigger.modifiers ?? {};\n const bMods = b.trigger.modifiers ?? {};\n\n for (const key of new Set([...aModKeys, ...bModKeys])) {\n const aVal = aMods[key];\n const bVal = bMods[key];\n if (aVal === undefined) {\n changes.push(`added modifier: ${key}`);\n } else if (bVal === undefined) {\n changes.push(`removed modifier: ${key}`);\n } else if (JSON.stringify(aVal) !== JSON.stringify(bVal)) {\n changes.push(`modifier ${key}: ${JSON.stringify(aVal)} → ${JSON.stringify(bVal)}`);\n }\n }\n\n if (changes.length === 0) return null;\n\n return {\n a: { event: a.trigger.event, modifiers: a.trigger.modifiers },\n b: { event: b.trigger.event, modifiers: b.trigger.modifiers },\n changes,\n };\n}\n\n// =============================================================================\n// Operation Comparison (LCS-based)\n// =============================================================================\n\nfunction diffOperations(a: AbstractOperation[], b: AbstractOperation[]): OperationDiff[] {\n const aKeys = a.map(canonicalizeOp);\n const bKeys = b.map(canonicalizeOp);\n\n // Build LCS table\n const lcs = computeLCS(aKeys, bKeys);\n\n // Walk the LCS to produce diffs\n const rawDiffs = buildDiffFromLCS(a, b, aKeys, bKeys, lcs);\n\n // Post-process: detect reorderings among added/removed pairs\n return detectReorderings(rawDiffs);\n}\n\n/**\n * Compute LCS length table.\n */\nfunction computeLCS(a: string[], b: string[]): number[][] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n return dp;\n}\n\n/**\n * Walk the LCS table backwards to produce raw diffs.\n */\nfunction buildDiffFromLCS(\n a: AbstractOperation[],\n b: AbstractOperation[],\n aKeys: string[],\n bKeys: string[],\n dp: number[][]\n): OperationDiff[] {\n const diffs: OperationDiff[] = [];\n let i = a.length;\n let j = b.length;\n\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && aKeys[i - 1] === bKeys[j - 1]) {\n // Match — unchanged\n diffs.push({\n kind: 'unchanged',\n index: { a: i - 1, b: j - 1 },\n a: a[i - 1],\n b: b[j - 1],\n });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Added in b\n diffs.push({\n kind: 'added',\n index: { b: j - 1 },\n b: b[j - 1],\n });\n j--;\n } else {\n // Removed from a\n diffs.push({\n kind: 'removed',\n index: { a: i - 1 },\n a: a[i - 1],\n });\n i--;\n }\n }\n\n return diffs.reverse();\n}\n\n/**\n * Post-process raw diffs to detect reorderings and field-level changes.\n *\n * A reordering is when an operation appears in both sides but at different\n * positions (shows as removed+added pair with the same canonical key).\n *\n * A change is when an operation at the same position has the same op type\n * but different fields (shows as removed+added pair with the same op type).\n */\nfunction detectReorderings(diffs: OperationDiff[]): OperationDiff[] {\n const removed: OperationDiff[] = [];\n const added: OperationDiff[] = [];\n const result: OperationDiff[] = [];\n\n // Separate removed and added\n for (const d of diffs) {\n if (d.kind === 'removed') removed.push(d);\n else if (d.kind === 'added') added.push(d);\n else result.push(d);\n }\n\n // Match removed/added pairs\n const usedRemoved = new Set<number>();\n const usedAdded = new Set<number>();\n\n // First pass: exact matches (reorderings)\n for (let ri = 0; ri < removed.length; ri++) {\n if (usedRemoved.has(ri)) continue;\n const rKey = canonicalizeOp(removed[ri].a!);\n for (let ai = 0; ai < added.length; ai++) {\n if (usedAdded.has(ai)) continue;\n const aKey = canonicalizeOp(added[ai].b!);\n if (rKey === aKey) {\n usedRemoved.add(ri);\n usedAdded.add(ai);\n result.push({\n kind: 'reordered',\n index: { a: removed[ri].index.a, b: added[ai].index.b },\n a: removed[ri].a,\n b: added[ai].b,\n });\n break;\n }\n }\n }\n\n // Second pass: same op type → changed\n for (let ri = 0; ri < removed.length; ri++) {\n if (usedRemoved.has(ri)) continue;\n for (let ai = 0; ai < added.length; ai++) {\n if (usedAdded.has(ai)) continue;\n if (removed[ri].a!.op === added[ai].b!.op) {\n usedRemoved.add(ri);\n usedAdded.add(ai);\n result.push({\n kind: 'changed',\n index: { a: removed[ri].index.a, b: added[ai].index.b },\n a: removed[ri].a,\n b: added[ai].b,\n changes: describeChanges(removed[ri].a!, added[ai].b!),\n });\n break;\n }\n }\n }\n\n // Remaining unmatched\n for (let ri = 0; ri < removed.length; ri++) {\n if (!usedRemoved.has(ri)) result.push(removed[ri]);\n }\n for (let ai = 0; ai < added.length; ai++) {\n if (!usedAdded.has(ai)) result.push(added[ai]);\n }\n\n // Sort by position for stable output\n result.sort((x, y) => {\n const xPos = x.index.a ?? x.index.b ?? 0;\n const yPos = y.index.a ?? y.index.b ?? 0;\n return xPos - yPos;\n });\n\n return result;\n}\n\n// =============================================================================\n// Canonicalization\n// =============================================================================\n\n/**\n * Produce a deterministic string key for an AbstractOperation.\n * Two operations with the same key are semantically identical.\n */\nexport function canonicalizeOp(op: AbstractOperation): string {\n const parts: string[] = [op.op];\n\n switch (op.op) {\n case 'toggleClass':\n case 'addClass':\n case 'removeClass':\n parts.push(op.className, canonicalizeTarget(op.target));\n break;\n case 'setContent':\n parts.push(op.content, canonicalizeTarget(op.target), op.position);\n break;\n case 'appendContent':\n parts.push(op.content, canonicalizeTarget(op.target));\n break;\n case 'show':\n case 'hide':\n case 'focus':\n case 'blur':\n parts.push(canonicalizeTarget(op.target));\n break;\n case 'setVariable':\n parts.push(op.name, op.value, op.scope);\n break;\n case 'increment':\n case 'decrement':\n parts.push(canonicalizeTarget(op.target), String(op.amount));\n break;\n case 'navigate':\n parts.push(op.url);\n break;\n case 'historyBack':\n case 'historyForward':\n break;\n case 'fetch':\n parts.push(op.url, op.format, op.target ? canonicalizeTarget(op.target) : '');\n break;\n case 'wait':\n parts.push(String(op.durationMs));\n break;\n case 'triggerEvent':\n parts.push(op.eventName, canonicalizeTarget(op.target), op.detail ?? '');\n break;\n case 'log':\n parts.push(...op.values);\n break;\n }\n\n return parts.join('|');\n}\n\nfunction canonicalizeTarget(t: { kind: string; value?: string }): string {\n return t.kind === 'self' ? 'self' : `${t.kind}:${(t as { value?: string }).value ?? ''}`;\n}\n\n// =============================================================================\n// Change Description\n// =============================================================================\n\nfunction describeChanges(a: AbstractOperation, b: AbstractOperation): string[] {\n const changes: string[] = [];\n const aObj = a as unknown as Record<string, unknown>;\n const bObj = b as unknown as Record<string, unknown>;\n\n // Compare all fields except 'op'\n const allKeys = new Set([...Object.keys(aObj), ...Object.keys(bObj)]);\n for (const key of allKeys) {\n if (key === 'op') continue;\n const aVal = JSON.stringify(aObj[key]);\n const bVal = JSON.stringify(bObj[key]);\n if (aVal !== bVal) {\n changes.push(`${key}: ${formatValue(aObj[key])} → ${formatValue(bObj[key])}`);\n }\n }\n\n return changes;\n}\n\nfunction formatValue(v: unknown): string {\n if (v === undefined) return '(none)';\n if (typeof v === 'object' && v !== null) {\n const obj = v as Record<string, unknown>;\n if ('kind' in obj) return obj.kind === 'self' ? 'self' : `${obj.kind}:${obj.value ?? ''}`;\n return JSON.stringify(v);\n }\n return String(v);\n}\n\n// =============================================================================\n// Summary Generation\n// =============================================================================\n\nfunction generateSummary(trigger: TriggerDiff | null, opDiffs: OperationDiff[]): string {\n const parts: string[] = [];\n\n if (!trigger && opDiffs.every(d => d.kind === 'unchanged')) {\n return 'No semantic change';\n }\n\n if (trigger) {\n parts.push(`Trigger: ${trigger.changes.join(', ')}`);\n }\n\n const counts: Record<OperationChangeKind, number> = {\n added: 0,\n removed: 0,\n changed: 0,\n reordered: 0,\n unchanged: 0,\n };\n for (const d of opDiffs) counts[d.kind]++;\n\n const opParts: string[] = [];\n if (counts.added > 0) opParts.push(`${counts.added} added`);\n if (counts.removed > 0) opParts.push(`${counts.removed} removed`);\n if (counts.changed > 0) opParts.push(`${counts.changed} changed`);\n if (counts.reordered > 0) opParts.push(`${counts.reordered} reordered`);\n\n if (opParts.length > 0) {\n parts.push(`Operations: ${opParts.join(', ')}`);\n }\n\n return parts.join('. ');\n}\n","/**\n * Input format detection.\n *\n * Determines whether input is natural language, explicit syntax, or LLM JSON.\n */\n\nimport type { InputFormat } from '../types.js';\n\n/**\n * Detect the input format from a string.\n */\nexport function detectFormat(input: string): InputFormat {\n const trimmed = input.trim();\n\n // Explicit syntax: [command role:value ...]\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n return 'explicit';\n }\n\n // LLM JSON: { \"action\": \"...\", ... }\n if (trimmed.startsWith('{')) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object' && typeof parsed.action === 'string') {\n return 'json';\n }\n } catch {\n // Not valid JSON — fall through to natural language\n }\n }\n\n return 'natural';\n}\n","/**\n * LLM JSON input validation.\n *\n * Validates structured semantic JSON from LLM output and converts\n * it to a SemanticNode compatible with the semantic package.\n */\n\nimport type { SemanticJSON, SemanticJSONValue, Diagnostic } from '../types.js';\n\n// =============================================================================\n// Validation\n// =============================================================================\n\nconst VALID_VALUE_TYPES = new Set(['selector', 'literal', 'reference', 'expression']);\n\n/**\n * Validate LLM JSON input structure.\n * Returns diagnostics (empty = valid).\n */\nexport function validateSemanticJSON(input: SemanticJSON): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n\n // Action is required and must be a string\n if (!input.action || typeof input.action !== 'string') {\n diagnostics.push({\n severity: 'error',\n code: 'INVALID_ACTION',\n message: 'Field \"action\" is required and must be a string.',\n suggestion: 'Provide a command name like \"toggle\", \"add\", \"set\", etc.',\n });\n return diagnostics; // Can't proceed without action\n }\n\n // Roles validation\n if (input.roles && typeof input.roles === 'object') {\n for (const [role, value] of Object.entries(input.roles)) {\n if (!value || typeof value !== 'object') {\n diagnostics.push({\n severity: 'error',\n code: 'INVALID_ROLE_VALUE',\n message: `Role \"${role}\" must be an object with \"type\" and \"value\" fields.`,\n suggestion: `Use: { \"type\": \"selector\", \"value\": \".active\" }`,\n });\n continue;\n }\n\n const v = value as SemanticJSONValue;\n if (!VALID_VALUE_TYPES.has(v.type)) {\n diagnostics.push({\n severity: 'error',\n code: 'INVALID_VALUE_TYPE',\n message: `Role \"${role}\" has invalid type \"${v.type}\".`,\n suggestion: `Valid types: selector, literal, reference, expression.`,\n });\n }\n\n if (v.value === undefined || v.value === null) {\n diagnostics.push({\n severity: 'error',\n code: 'MISSING_VALUE',\n message: `Role \"${role}\" is missing the \"value\" field.`,\n });\n }\n }\n }\n\n // Trigger validation (optional)\n if (input.trigger) {\n if (!input.trigger.event || typeof input.trigger.event !== 'string') {\n diagnostics.push({\n severity: 'error',\n code: 'INVALID_TRIGGER',\n message: 'Trigger \"event\" is required and must be a string.',\n suggestion: 'Use an event name like \"click\", \"mouseover\", \"keydown\".',\n });\n }\n }\n\n return diagnostics;\n}\n\n// =============================================================================\n// Conversion to SemanticNode\n// =============================================================================\n\n/**\n * Convert validated SemanticJSON to a SemanticNode-compatible object.\n *\n * Returns a plain object matching the SemanticNode interface from\n * @lokascript/semantic, using ReadonlyMap for roles.\n */\nexport function jsonToSemanticNode(input: SemanticJSON): unknown {\n const roles = new Map<string, unknown>();\n\n if (input.roles) {\n for (const [role, value] of Object.entries(input.roles)) {\n roles.set(role, convertJSONValue(value));\n }\n }\n\n // Event handler wrapping\n if (input.trigger) {\n // Set the event role\n roles.set('event', { type: 'literal', value: input.trigger.event, dataType: 'string' });\n\n // Build body as a single command node\n const bodyNode = {\n kind: 'command' as const,\n action: input.action,\n roles: new Map(roles),\n };\n // Remove event from body roles\n bodyNode.roles.delete('event');\n\n return {\n kind: 'event-handler',\n action: 'on',\n roles,\n body: [bodyNode],\n eventModifiers: input.trigger.modifiers ?? {},\n };\n }\n\n return {\n kind: 'command',\n action: input.action,\n roles,\n };\n}\n\n/**\n * Convert a SemanticJSONValue to a SemanticValue-compatible object.\n */\nfunction convertJSONValue(value: SemanticJSONValue): unknown {\n switch (value.type) {\n case 'selector':\n return {\n type: 'selector',\n value: String(value.value),\n selectorKind: detectSelectorKind(String(value.value)),\n };\n case 'literal':\n return {\n type: 'literal',\n value: value.value,\n dataType:\n typeof value.value === 'number'\n ? 'number'\n : typeof value.value === 'boolean'\n ? 'boolean'\n : 'string',\n };\n case 'reference':\n return { type: 'reference', value: String(value.value) };\n case 'expression':\n return { type: 'expression', raw: String(value.value) };\n default:\n return { type: 'literal', value: String(value.value), dataType: 'string' };\n }\n}\n\nfunction detectSelectorKind(selector: string): string {\n if (selector.startsWith('#')) return 'id';\n if (selector.startsWith('.')) return 'class';\n if (selector.startsWith('[')) return 'attribute';\n return 'complex';\n}\n","/**\n * Semantic-keyed LRU cache.\n *\n * Caches compilation results keyed by canonical semantic representation.\n * Different input languages that produce the same semantics hit the same cache.\n */\n\nimport type { CompileResponse } from '../types.js';\n\n/**\n * Simple LRU cache using Map insertion order.\n */\nexport class SemanticCache {\n private cache: Map<string, CompileResponse>;\n private readonly maxSize: number;\n\n /** Cache hit/miss statistics */\n hits = 0;\n misses = 0;\n\n constructor(maxSize = 500) {\n this.maxSize = maxSize;\n this.cache = new Map();\n }\n\n /**\n * Get a cached response, or undefined if not cached.\n */\n get(key: string): CompileResponse | undefined {\n const entry = this.cache.get(key);\n if (entry) {\n this.hits++;\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, entry);\n return entry;\n }\n this.misses++;\n return undefined;\n }\n\n /**\n * Store a response in the cache.\n */\n set(key: string, value: CompileResponse): void {\n // Delete first to reset insertion order\n this.cache.delete(key);\n\n // Evict oldest if at capacity\n if (this.cache.size >= this.maxSize) {\n const oldest = this.cache.keys().next().value;\n if (oldest !== undefined) {\n this.cache.delete(oldest);\n }\n }\n\n this.cache.set(key, value);\n }\n\n /** Current cache size */\n get size(): number {\n return this.cache.size;\n }\n\n /** Clear all entries */\n clear(): void {\n this.cache.clear();\n this.hits = 0;\n this.misses = 0;\n }\n}\n\n// =============================================================================\n// Cache Key Generation\n// =============================================================================\n\n/**\n * Generate a canonical cache key from a semantic node and compilation options.\n *\n * The key is based on semantic identity, not syntax — so the same behavior\n * described in English, Japanese, or explicit syntax produces the same key.\n */\nexport function generateCacheKey(\n node: unknown,\n options: { optimization?: number; target?: string; minify?: boolean }\n): string {\n const canonical = canonicalize(node);\n const optKey = `${options.optimization ?? 2}:${options.target ?? 'esm'}:${options.minify ?? false}`;\n return `${canonical}|${optKey}`;\n}\n\n/**\n * Canonicalize a SemanticNode to a deterministic string.\n */\nfunction canonicalize(node: unknown): string {\n if (!node || typeof node !== 'object') return String(node);\n\n const n = node as Record<string, unknown>;\n const parts: string[] = [];\n\n // Action\n if (n.action) parts.push(`a:${n.action}`);\n if (n.kind) parts.push(`k:${n.kind}`);\n\n // Roles (sorted for determinism)\n if (n.roles && typeof (n.roles as Map<string, unknown>).entries === 'function') {\n const roles = n.roles as ReadonlyMap<string, unknown>;\n const sortedRoles = [...roles.entries()].sort(([a], [b]) => a.localeCompare(b));\n for (const [role, value] of sortedRoles) {\n parts.push(`r:${role}=${canonicalizeValue(value)}`);\n }\n }\n\n // Body (for event handlers)\n if (Array.isArray(n.body)) {\n parts.push(`b:[${n.body.map(canonicalize).join(',')}]`);\n }\n\n // Trigger/event modifiers\n if (n.eventModifiers && typeof n.eventModifiers === 'object') {\n const mods = Object.entries(n.eventModifiers as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join(',');\n if (mods) parts.push(`m:${mods}`);\n }\n\n return parts.join(';');\n}\n\nfunction canonicalizeValue(value: unknown): string {\n if (!value || typeof value !== 'object') return String(value);\n const v = value as Record<string, unknown>;\n return `${v.type}:${v.value ?? v.raw ?? ''}`;\n}\n","/**\n * Operation Extraction\n *\n * Converts a SemanticNode (from the parsing pipeline) into a BehaviorSpec\n * containing abstract operations. This is the bridge between semantic roles\n * and framework-agnostic behavior descriptions.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from './types.js';\n\n// =============================================================================\n// Internal Types (mirrors SemanticNode shape without importing semantic types)\n// =============================================================================\n\ninterface RoleValue {\n type?: string;\n value?: unknown;\n raw?: string;\n selectorKind?: string;\n dataType?: string;\n scope?: string;\n}\n\ninterface NodeLike {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, RoleValue>;\n body?: NodeLike[];\n eventModifiers?: Record<string, unknown>;\n metadata?: { sourceText?: string };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Extract abstract operations from a semantic node.\n *\n * Handles event handlers (extracts trigger + recurses into body)\n * and standalone commands.\n */\nexport function extractOperations(node: unknown): BehaviorSpec {\n const n = node as NodeLike;\n if (!n || typeof n !== 'object') {\n return emptySpec();\n }\n\n // Event handler: extract trigger and recurse into body\n if (n.kind === 'event-handler' || n.action === 'on') {\n return extractEventHandler(n);\n }\n\n // Standalone command: wrap with default trigger\n const ops = extractCommand(n);\n return {\n trigger: { event: 'click' },\n triggerTarget: { kind: 'self' },\n operations: ops,\n async: ops.some(isAsyncOp),\n source: n.metadata?.sourceText,\n };\n}\n\n// =============================================================================\n// Event Handler Extraction\n// =============================================================================\n\nfunction extractEventHandler(n: NodeLike): BehaviorSpec {\n const eventRole = n.roles?.get('event') as RoleValue | undefined;\n const eventName = String(eventRole?.value ?? 'click');\n\n const operations: AbstractOperation[] = [];\n\n if (n.body && Array.isArray(n.body)) {\n for (const child of n.body) {\n operations.push(...extractCommand(child));\n }\n }\n\n return {\n trigger: {\n event: eventName,\n modifiers: n.eventModifiers,\n },\n triggerTarget: { kind: 'self' },\n operations,\n async: operations.some(isAsyncOp),\n source: n.metadata?.sourceText,\n };\n}\n\n// =============================================================================\n// Command Extraction\n// =============================================================================\n\nfunction extractCommand(n: NodeLike): AbstractOperation[] {\n const action = n.action;\n if (!action || action === 'on') return [];\n\n const roles = n.roles;\n\n switch (action) {\n // --- DOM Class ---\n case 'toggle':\n return extractClassOp('toggleClass', roles);\n case 'add':\n return extractClassOp('addClass', roles);\n case 'remove':\n return extractClassOp('removeClass', roles);\n\n // --- DOM Content ---\n case 'put':\n return extractPut(roles);\n case 'append':\n return extractAppend(roles);\n\n // --- DOM Visibility ---\n case 'show':\n return extractVisibility('show', roles);\n case 'hide':\n return extractVisibility('hide', roles);\n\n // --- Variables ---\n case 'set':\n return extractSet(roles);\n case 'increment':\n return extractIncrDecr('increment', roles);\n case 'decrement':\n return extractIncrDecr('decrement', roles);\n\n // --- Navigation ---\n case 'go':\n return extractGo(roles);\n\n // --- Async ---\n case 'fetch':\n return extractFetch(roles);\n case 'wait':\n return extractWait(roles);\n\n // --- Events ---\n case 'send':\n case 'trigger':\n return extractTriggerEvent(roles);\n\n // --- Focus ---\n case 'focus':\n return [{ op: 'focus', target: resolveTarget(roles, 'patient') }];\n case 'blur':\n return [{ op: 'blur', target: resolveTarget(roles, 'patient') }];\n\n // --- Utility ---\n case 'log':\n return extractLog(roles);\n\n default:\n return [];\n }\n}\n\n// =============================================================================\n// Per-Command Extractors\n// =============================================================================\n\nfunction extractClassOp(\n op: 'toggleClass' | 'addClass' | 'removeClass',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const value = String(patient.value ?? '');\n const className = value.startsWith('.') ? value.slice(1) : value;\n if (!className) return [];\n\n const target = resolveTarget(roles, op === 'removeClass' ? 'source' : 'destination');\n\n return [{ op, className, target }];\n}\n\nfunction extractPut(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const content = String(patient.value ?? patient.raw ?? '');\n const target = resolveTarget(roles, 'destination');\n\n // Determine position from method role\n const method = roles?.get('method');\n let position: 'into' | 'before' | 'after' | 'start' | 'end' = 'into';\n if (method?.value) {\n const m = String(method.value);\n if (m === 'before') position = 'before';\n else if (m === 'after') position = 'after';\n else if (m === 'start' || m === 'at start of') position = 'start';\n else if (m === 'end' || m === 'at end of') position = 'end';\n }\n\n return [{ op: 'setContent', content, target, position }];\n}\n\nfunction extractAppend(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const content = String(patient.value ?? patient.raw ?? '');\n const target = resolveTarget(roles, 'destination');\n\n return [{ op: 'appendContent', content, target }];\n}\n\nfunction extractVisibility(\n op: 'show' | 'hide',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const target = resolveTarget(roles, 'patient');\n return [{ op, target }];\n}\n\nfunction extractSet(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const destination = roles?.get('destination');\n const patient = roles?.get('patient');\n\n if (!destination && !patient) return [];\n\n // Variable assignment: set :count to 5\n const targetRole = destination ?? patient;\n const valueRole = destination ? patient : undefined;\n\n const name = String(targetRole?.value ?? '');\n const value = valueRole ? String(valueRole.value ?? '') : '';\n const scope = (targetRole?.scope ?? 'local') as 'local' | 'element' | 'global';\n\n return [{ op: 'setVariable', name, value, scope }];\n}\n\nfunction extractIncrDecr(\n op: 'increment' | 'decrement',\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const target = resolveTarget(roles, 'patient');\n\n // Amount from quantity role\n const quantity = roles?.get('quantity');\n const amount = quantity?.value ? Number(quantity.value) : 1;\n\n return [{ op, target, amount }];\n}\n\nfunction extractGo(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const destination = roles?.get('destination');\n if (!destination) return [];\n\n const url = String(destination.value ?? '');\n\n if (url === 'back') return [{ op: 'historyBack' }];\n if (url === 'forward') return [{ op: 'historyForward' }];\n\n return [{ op: 'navigate', url }];\n}\n\nfunction extractFetch(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const source = roles?.get('source');\n if (!source) return [];\n\n const url = String(source.value ?? source.raw ?? '');\n\n const responseType = roles?.get('responseType');\n let format: 'json' | 'text' | 'html' = 'text';\n if (responseType?.value) {\n const f = String(responseType.value);\n if (f === 'json') format = 'json';\n else if (f === 'html') format = 'html';\n }\n\n const destRole = roles?.get('destination');\n const target = destRole ? resolveTargetFromRole(destRole) : undefined;\n\n return [{ op: 'fetch', url, format, target }];\n}\n\nfunction extractWait(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const duration = roles?.get('duration') ?? roles?.get('patient');\n if (!duration) return [];\n\n let ms = 0;\n const val = duration.value;\n if (typeof val === 'number') {\n ms = val;\n } else if (typeof val === 'string') {\n ms = parseDurationMs(val);\n }\n\n return [{ op: 'wait', durationMs: ms }];\n}\n\nfunction extractTriggerEvent(\n roles: ReadonlyMap<string, RoleValue> | undefined\n): AbstractOperation[] {\n const patient = roles?.get('patient');\n if (!patient) return [];\n\n const eventName = String(patient.value ?? '');\n const target = resolveTarget(roles, 'destination');\n\n return [{ op: 'triggerEvent', eventName, target }];\n}\n\nfunction extractLog(roles: ReadonlyMap<string, RoleValue> | undefined): AbstractOperation[] {\n const patient = roles?.get('patient');\n const values: string[] = [];\n\n if (patient) {\n values.push(String(patient.value ?? patient.raw ?? ''));\n }\n\n return [{ op: 'log', values }];\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Resolve a target reference from the roles map.\n * Falls back to { kind: 'self' } if the role is missing or defaults to 'me'.\n */\nfunction resolveTarget(\n roles: ReadonlyMap<string, RoleValue> | undefined,\n roleName: string\n): TargetRef {\n const role = roles?.get(roleName);\n if (!role) return { kind: 'self' };\n return resolveTargetFromRole(role);\n}\n\nfunction resolveTargetFromRole(role: RoleValue): TargetRef {\n const value = String(role.value ?? '');\n\n // Reference to self\n if (role.type === 'reference' && (value === 'me' || value === 'it')) {\n return { kind: 'self' };\n }\n\n // Variable reference\n if (value.startsWith(':') || role.scope) {\n return { kind: 'variable', value };\n }\n\n // CSS selector\n if (\n role.type === 'selector' ||\n value.startsWith('#') ||\n value.startsWith('.') ||\n value.startsWith('[')\n ) {\n return { kind: 'selector', value };\n }\n\n // Literal URL or other value — treat as selector if it looks like one\n if (value) {\n return { kind: 'selector', value };\n }\n\n return { kind: 'self' };\n}\n\nfunction isAsyncOp(op: AbstractOperation): boolean {\n return op.op === 'fetch' || op.op === 'wait';\n}\n\nfunction parseDurationMs(value: string): number {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/);\n if (!match) return 0;\n\n const num = parseFloat(match[1]);\n const unit = match[2] ?? 'ms';\n\n switch (unit) {\n case 'ms':\n return num;\n case 's':\n return num * 1000;\n case 'm':\n return num * 60000;\n case 'h':\n return num * 3600000;\n default:\n return num;\n }\n}\n\nfunction emptySpec(): BehaviorSpec {\n return {\n trigger: { event: 'click' },\n triggerTarget: { kind: 'self' },\n operations: [],\n async: false,\n };\n}\n","/**\n * HTML Fixture Generator\n *\n * Generates minimal HTML pages that contain all elements referenced\n * by a BehaviorSpec. Used by test renderers to create test fixtures.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Generate a minimal HTML fixture for a behavior spec.\n *\n * @param spec - The behavior to create a fixture for\n * @param hyperscript - Original hyperscript source to embed as `_=\"...\"` attribute\n */\nexport function generateFixture(spec: BehaviorSpec, hyperscript?: string): string {\n const elements = collectElements(spec);\n const triggerSelector = targetToSelector(spec.triggerTarget);\n\n // When trigger is 'self', the hyperscript attribute goes on the first\n // operation target (since 'self' means the element the script is on).\n // When trigger is a specific selector, check if it matches an operation target.\n const triggerIsSeparate =\n triggerSelector !== null && !elements.some(e => e.selector === triggerSelector);\n\n // Track whether the _= attribute has been placed on an element\n let hyperscriptPlaced = false;\n\n const lines: string[] = [];\n\n // Add initial styles for visibility tests\n if (needsInitialStyles(spec.operations)) {\n lines.push('<style>');\n for (const op of spec.operations) {\n if (op.op === 'hide') {\n const sel = targetToSelector(op.target);\n if (sel) lines.push(` ${sel} { display: block; }`);\n }\n if (op.op === 'show') {\n const sel = targetToSelector(op.target);\n if (sel) lines.push(` ${sel} { display: none; }`);\n }\n }\n lines.push('</style>');\n }\n\n // Generate elements\n if (triggerIsSeparate) {\n // Trigger element is separate from targets\n const triggerEl = createTriggerElement(triggerSelector!, hyperscript);\n lines.push(triggerEl);\n hyperscriptPlaced = true;\n }\n\n for (const el of elements) {\n // Place _= attribute on this element if:\n // 1. It matches the trigger selector, OR\n // 2. Trigger is 'self' and this is the first element (hasn't been placed yet)\n const isTrigger =\n (!triggerIsSeparate && el.selector === triggerSelector) ||\n (triggerSelector === null && !hyperscriptPlaced);\n const attrs = isTrigger && hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n if (isTrigger && hyperscript) hyperscriptPlaced = true;\n const extraClasses = getInitialClasses(el.selector, spec.operations);\n\n let tag = el.tag;\n let className = el.className;\n if (extraClasses.length > 0) {\n className = className ? `${className} ${extraClasses.join(' ')}` : extraClasses.join(' ');\n }\n\n const classAttr = className ? ` class=\"${className}\"` : '';\n const idAttr = el.id ? ` id=\"${el.id}\"` : '';\n\n if (tag === 'input') {\n lines.push(`<${tag}${idAttr}${classAttr}${attrs} />`);\n } else {\n const content = el.defaultContent ?? '';\n lines.push(`<${tag}${idAttr}${classAttr}${attrs}>${content}</${tag}>`);\n }\n }\n\n // If trigger is self and no explicit elements, create a self-targeting button\n if (elements.length === 0 && spec.triggerTarget.kind === 'self') {\n const attr = hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n lines.push(`<button id=\"trigger\"${attr}>Click me</button>`);\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// Element Collection\n// =============================================================================\n\ninterface FixtureElement {\n selector: string;\n id?: string;\n className?: string;\n tag: string;\n defaultContent?: string;\n}\n\nfunction collectElements(spec: BehaviorSpec): FixtureElement[] {\n const seen = new Set<string>();\n const elements: FixtureElement[] = [];\n\n for (const op of spec.operations) {\n for (const ref of getTargetRefs(op)) {\n if (ref.kind !== 'selector') continue;\n if (seen.has(ref.value)) continue;\n seen.add(ref.value);\n\n elements.push(selectorToElement(ref.value));\n }\n }\n\n return elements;\n}\n\nfunction getTargetRefs(op: AbstractOperation): TargetRef[] {\n const refs: TargetRef[] = [];\n\n if ('target' in op && op.target) {\n refs.push(op.target as TargetRef);\n }\n\n return refs;\n}\n\nfunction selectorToElement(selector: string): FixtureElement {\n // ID selector: #foo\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return {\n selector,\n id,\n tag: inferTagFromId(id),\n defaultContent: inferContent(id),\n };\n }\n\n // Class selector: .foo\n if (selector.startsWith('.')) {\n const className = selector.slice(1);\n return {\n selector,\n className,\n tag: 'div',\n defaultContent: className,\n };\n }\n\n // Attribute or complex selector — use div\n return {\n selector,\n tag: 'div',\n defaultContent: '',\n };\n}\n\n// =============================================================================\n// Smart Element Type Inference\n// =============================================================================\n\nconst BUTTON_IDS = new Set(['btn', 'button', 'submit', 'trigger', 'action']);\nconst INPUT_IDS = new Set(['input', 'search', 'email', 'text', 'field', 'query']);\nconst FORM_IDS = new Set(['form', 'signup', 'login']);\nconst DIALOG_IDS = new Set(['modal', 'dialog', 'popup', 'overlay']);\nconst LIST_IDS = new Set(['list', 'items', 'results', 'options']);\n\nfunction inferTagFromId(id: string): string {\n const lower = id.toLowerCase();\n if (BUTTON_IDS.has(lower)) return 'button';\n if (INPUT_IDS.has(lower)) return 'input';\n if (FORM_IDS.has(lower)) return 'form';\n if (DIALOG_IDS.has(lower)) return 'div';\n if (LIST_IDS.has(lower)) return 'ul';\n return 'div';\n}\n\nfunction inferContent(id: string): string {\n const lower = id.toLowerCase();\n if (BUTTON_IDS.has(lower)) return 'Click';\n if (INPUT_IDS.has(lower)) return '';\n if (LIST_IDS.has(lower)) return '';\n // Capitalize first letter\n return id.charAt(0).toUpperCase() + id.slice(1);\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction createTriggerElement(selector: string, hyperscript?: string): string {\n const attr = hyperscript ? ` _=\"${escapeAttr(hyperscript)}\"` : '';\n // If the trigger selector refers to an existing element type, use it\n if (selector.startsWith('#')) {\n const id = selector.slice(1);\n return `<button id=\"${id}\"${attr}>Click</button>`;\n }\n return `<button id=\"trigger\"${attr}>Click</button>`;\n}\n\nfunction targetToSelector(ref: TargetRef): string | null {\n if (ref.kind === 'selector') return ref.value;\n if (ref.kind === 'self') return null;\n return null;\n}\n\nfunction needsInitialStyles(ops: AbstractOperation[]): boolean {\n return ops.some(op => op.op === 'hide' || op.op === 'show');\n}\n\nfunction getInitialClasses(selector: string, ops: AbstractOperation[]): string[] {\n const classes: string[] = [];\n for (const op of ops) {\n if (op.op === 'removeClass' && 'target' in op) {\n const targetSel = targetToSelector(op.target);\n if (targetSel === selector || (op.target.kind === 'self' && selector === null)) {\n classes.push(op.className);\n }\n }\n }\n return classes;\n}\n\nfunction escapeAttr(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n","/**\n * Playwright Test Renderer\n *\n * Generates complete Playwright test files from BehaviorSpecs.\n * Each generated test creates an HTML fixture, triggers the behavior,\n * and asserts the expected DOM changes.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type { TestRenderer, TestRenderOptions, GeneratedTest } from './types.js';\nimport { generateFixture } from './html-fixture.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class PlaywrightRenderer implements TestRenderer {\n readonly framework = 'playwright';\n\n render(spec: BehaviorSpec, options: TestRenderOptions = {}): GeneratedTest {\n const testName = options.testName ?? generateTestName(spec);\n const html = generateFixture(spec, options.hyperscript);\n\n const lines: string[] = [];\n\n // Import\n lines.push(\"import { test, expect } from '@playwright/test';\");\n lines.push('');\n\n // Test\n lines.push(`test('${escapeString(testName)}', async ({ page }) => {`);\n\n // Setup fixture\n lines.push(` await page.setContent(\\`${escapeTemplate(wrapHtml(html))}\\`);`);\n\n // Load runtime or compiled JS\n if (options.executionMode === 'compiled' && options.compiledJs) {\n lines.push(\n ` await page.addScriptTag({ content: \\`${escapeTemplate(options.compiledJs)}\\` });`\n );\n } else {\n const bundlePath =\n options.bundlePath ?? './node_modules/@hyperfixi/core/dist/lokascript-browser.js';\n lines.push(` await page.addScriptTag({ path: '${escapeString(bundlePath)}' });`);\n lines.push(\" await page.waitForFunction(() => document.querySelector('[_]') !== null);\");\n // Wait for LokaScript to process attributes\n lines.push(' await page.waitForTimeout(100);');\n }\n lines.push('');\n\n // Determine trigger locator\n const triggerLocator = getTriggerLocator(spec);\n\n // Generate assertions for each operation\n for (const op of spec.operations) {\n const assertions = generateAssertions(op, spec, triggerLocator);\n lines.push(...assertions.map(l => ` ${l}`));\n }\n\n lines.push('});');\n lines.push('');\n\n return {\n name: testName,\n code: lines.join('\\n'),\n html,\n framework: 'playwright',\n operations: spec.operations,\n };\n }\n}\n\n// =============================================================================\n// Assertion Generation\n// =============================================================================\n\nfunction generateAssertions(\n op: AbstractOperation,\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n switch (op.op) {\n case 'toggleClass':\n return generateToggleClassAssertions(op, spec, triggerLocator);\n case 'addClass':\n return generateAddClassAssertions(op, spec, triggerLocator);\n case 'removeClass':\n return generateRemoveClassAssertions(op, spec, triggerLocator);\n case 'setContent':\n return generateSetContentAssertions(op, spec, triggerLocator);\n case 'appendContent':\n return generateAppendContentAssertions(op, spec, triggerLocator);\n case 'show':\n return generateShowAssertions(op, spec, triggerLocator);\n case 'hide':\n return generateHideAssertions(op, spec, triggerLocator);\n case 'navigate':\n return generateNavigateAssertions(op, spec, triggerLocator);\n case 'focus':\n return generateFocusAssertions(op, spec, triggerLocator);\n case 'blur':\n return generateBlurAssertions(op, spec, triggerLocator);\n case 'triggerEvent':\n return generateTriggerEventAssertions(op, spec, triggerLocator);\n case 'fetch':\n return generateFetchAssertions(op, spec, triggerLocator);\n case 'wait':\n return generateWaitAssertions(op);\n case 'setVariable':\n case 'increment':\n case 'decrement':\n return generateVariableAssertions(op, spec, triggerLocator);\n case 'log':\n return generateLogAssertions(op, spec, triggerLocator);\n default:\n return [`// Unsupported operation: ${(op as AbstractOperation).op}`];\n }\n}\n\n// --- DOM Class ---\n\nfunction generateToggleClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n const lines: string[] = [];\n\n lines.push(`// Toggle .${op.className}`);\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n if (spec.async) lines.push('await page.waitForTimeout(100);');\n lines.push(`await expect(${locator}).toHaveClass(/${op.className}/);`);\n lines.push('');\n lines.push(`// Toggle back`);\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n if (spec.async) lines.push('await page.waitForTimeout(100);');\n lines.push(`await expect(${locator}).not.toHaveClass(/${op.className}/);`);\n\n return lines;\n}\n\nfunction generateAddClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Add .${op.className}`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toHaveClass(/${op.className}/);`,\n ];\n}\n\nfunction generateRemoveClassAssertions(\n op: { className: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Remove .${op.className} (should have it initially)`,\n `await expect(${locator}).toHaveClass(/${op.className}/);`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toHaveClass(/${op.className}/);`,\n ];\n}\n\n// --- DOM Content ---\n\nfunction generateSetContentAssertions(\n op: { content: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Put \"${op.content}\" into element`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toContainText('${escapeString(op.content)}');`,\n ];\n}\n\nfunction generateAppendContentAssertions(\n op: { content: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n `// Append \"${op.content}\"`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toContainText('${escapeString(op.content)}');`,\n ];\n}\n\n// --- DOM Visibility ---\n\nfunction generateShowAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Show element (initially hidden)',\n `await expect(${locator}).not.toBeVisible();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toBeVisible();`,\n ];\n}\n\nfunction generateHideAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Hide element (initially visible)',\n `await expect(${locator}).toBeVisible();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toBeVisible();`,\n ];\n}\n\n// --- Navigation ---\n\nfunction generateNavigateAssertions(\n op: { url: string },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Navigate to ${op.url}`,\n `// Note: Navigation will change the page URL`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n `await page.waitForURL('**${op.url}**');`,\n ];\n}\n\n// --- Focus ---\n\nfunction generateFocusAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Focus element',\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).toBeFocused();`,\n ];\n}\n\nfunction generateBlurAssertions(\n op: { target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const locator = targetToLocator(op.target, spec);\n return [\n '// Blur element',\n `await ${locator}.focus();`,\n `await expect(${locator}).toBeFocused();`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n `await expect(${locator}).not.toBeFocused();`,\n ];\n}\n\n// --- Events ---\n\nfunction generateTriggerEventAssertions(\n op: { eventName: string; target: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Trigger '${op.eventName}' event`,\n `const eventReceived = page.evaluate((sel) => {`,\n ` return new Promise<boolean>((resolve) => {`,\n ` const el = document.querySelector(sel) ?? document.body;`,\n ` el.addEventListener('${escapeString(op.eventName)}', () => resolve(true), { once: true });`,\n ` setTimeout(() => resolve(false), 2000);`,\n ` });`,\n `}, '${escapeString(targetToCssSelector(op.target))}');`,\n `await ${triggerLocator}.${triggerAction(spec)};`,\n `expect(await eventReceived).toBe(true);`,\n ];\n}\n\n// --- Async ---\n\nfunction generateFetchAssertions(\n op: { url: string; format: string; target?: TargetRef },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n const lines: string[] = [];\n\n lines.push(`// Fetch ${op.url} as ${op.format}`);\n\n // Mock the network request\n if (op.format === 'json') {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'application/json',`);\n lines.push(` body: JSON.stringify({ data: 'mock' }),`);\n lines.push(` });`);\n lines.push(`});`);\n } else if (op.format === 'html') {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'text/html',`);\n lines.push(` body: '<div>Mock HTML</div>',`);\n lines.push(` });`);\n lines.push(`});`);\n } else {\n lines.push(`await page.route('**${op.url}**', route => {`);\n lines.push(` route.fulfill({`);\n lines.push(` contentType: 'text/plain',`);\n lines.push(` body: 'Mock response',`);\n lines.push(` });`);\n lines.push(`});`);\n }\n\n lines.push(`await ${triggerLocator}.${triggerAction(spec)};`);\n lines.push('await page.waitForTimeout(500);');\n\n // If there's a target, verify content was placed\n if (op.target) {\n const locator = targetToLocator(op.target, spec);\n lines.push(`await expect(${locator}).not.toBeEmpty();`);\n }\n\n return lines;\n}\n\nfunction generateWaitAssertions(op: { durationMs: number }): string[] {\n return [`// Wait ${op.durationMs}ms`, `// (no assertion — wait is a timing operation)`];\n}\n\n// --- Variables ---\n\nfunction generateVariableAssertions(\n op: AbstractOperation,\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n // Variable operations don't have direct DOM assertions\n // but we can verify the behavior executed without errors\n return [\n `// ${op.op} (variable operation — verify no errors)`,\n 'const errors: string[] = [];',\n \"page.on('pageerror', (err) => errors.push(err.message));\",\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n 'expect(errors).toHaveLength(0);',\n ];\n}\n\n// --- Utility ---\n\nfunction generateLogAssertions(\n op: { values: string[] },\n spec: BehaviorSpec,\n triggerLocator: string\n): string[] {\n return [\n `// Log: ${op.values.join(', ')}`,\n 'const logs: string[] = [];',\n \"page.on('console', msg => { if (msg.type() === 'log') logs.push(msg.text()); });\",\n `await ${triggerLocator}.${triggerAction(spec)};`,\n ...(spec.async ? ['await page.waitForTimeout(100);'] : []),\n 'expect(logs.length).toBeGreaterThan(0);',\n ];\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction generateTestName(spec: BehaviorSpec): string {\n if (spec.source) return spec.source;\n\n const parts: string[] = [];\n parts.push(`on ${spec.trigger.event}`);\n\n for (const op of spec.operations) {\n parts.push(describeOp(op));\n }\n\n return parts.join(' ');\n}\n\nfunction describeOp(op: AbstractOperation): string {\n switch (op.op) {\n case 'toggleClass':\n return `toggle .${op.className}${describeTarget(op.target)}`;\n case 'addClass':\n return `add .${op.className}${describeTarget(op.target)}`;\n case 'removeClass':\n return `remove .${op.className}${describeTarget(op.target)}`;\n case 'setContent':\n return `put \"${op.content}\"${describeTarget(op.target)}`;\n case 'appendContent':\n return `append \"${op.content}\"${describeTarget(op.target)}`;\n case 'show':\n return `show${describeTarget(op.target)}`;\n case 'hide':\n return `hide${describeTarget(op.target)}`;\n case 'navigate':\n return `go to ${op.url}`;\n case 'focus':\n return `focus${describeTarget(op.target)}`;\n case 'blur':\n return `blur${describeTarget(op.target)}`;\n case 'fetch':\n return `fetch ${op.url} as ${op.format}`;\n case 'wait':\n return `wait ${op.durationMs}ms`;\n case 'setVariable':\n return `set ${op.name} to ${op.value}`;\n case 'increment':\n return `increment${describeTarget(op.target)}`;\n case 'decrement':\n return `decrement${describeTarget(op.target)}`;\n case 'triggerEvent':\n return `trigger ${op.eventName}${describeTarget(op.target)}`;\n case 'log':\n return `log ${op.values.join(', ')}`;\n case 'historyBack':\n return 'go back';\n case 'historyForward':\n return 'go forward';\n default:\n return (op as AbstractOperation).op;\n }\n}\n\nfunction describeTarget(target: TargetRef): string {\n if (target.kind === 'self') return '';\n if (target.kind === 'selector') return ` on ${target.value}`;\n if (target.kind === 'variable') return ` on ${target.value}`;\n return '';\n}\n\nfunction getTriggerLocator(spec: BehaviorSpec): string {\n if (spec.triggerTarget.kind === 'selector') {\n return `page.locator('${escapeString(spec.triggerTarget.value)}')`;\n }\n\n // Self — find the element with the _=\"...\" attribute\n // If operations have a target, use that; otherwise use a generic trigger\n for (const op of spec.operations) {\n if ('target' in op && (op as { target: TargetRef }).target.kind === 'selector') {\n const t = (op as { target: TargetRef }).target;\n if (t.kind === 'selector') {\n return `page.locator('${escapeString(t.value)}')`;\n }\n }\n }\n\n return \"page.locator('[_]')\";\n}\n\nfunction targetToLocator(target: TargetRef, spec: BehaviorSpec): string {\n if (target.kind === 'selector') {\n return `page.locator('${escapeString(target.value)}')`;\n }\n if (target.kind === 'self') {\n return getTriggerLocator(spec);\n }\n // Variable target — fall back to trigger\n return getTriggerLocator(spec);\n}\n\nfunction targetToCssSelector(target: TargetRef): string {\n if (target.kind === 'selector') return target.value;\n if (target.kind === 'self') return '[_]';\n return 'body';\n}\n\nfunction triggerAction(spec: BehaviorSpec): string {\n const event = spec.trigger.event;\n switch (event) {\n case 'click':\n return 'click()';\n case 'dblclick':\n return 'dblclick()';\n case 'mouseenter':\n return 'hover()';\n case 'mouseover':\n return 'hover()';\n case 'focus':\n return 'focus()';\n case 'blur':\n return 'blur()';\n case 'keydown':\n case 'keyup':\n case 'keypress':\n return \"press('Enter')\";\n case 'input':\n case 'change':\n return \"fill('test')\";\n case 'submit':\n return 'click()';\n default:\n return `dispatchEvent(new Event('${escapeString(event)}'))`;\n }\n}\n\nfunction wrapHtml(body: string): string {\n return `<!DOCTYPE html>\\n<html>\\n<body>\\n${body}\\n</body>\\n</html>`;\n}\n\nfunction escapeString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction escapeTemplate(s: string): string {\n return s.replace(/`/g, '\\\\`').replace(/\\$\\{/g, '\\\\${');\n}\n","/**\n * Shared Renderer Helpers\n *\n * Pure utility functions used by React, Vue, and Svelte component renderers.\n * Framework-agnostic: naming, type inference, tag inference, string escaping.\n */\n\nimport type { BehaviorSpec, TargetRef } from '../operations/types.js';\n\n// =============================================================================\n// String Utilities\n// =============================================================================\n\nexport function capitalize(s: string): string {\n if (!s) return s;\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function escapeString(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nexport function isNumeric(s: string): boolean {\n return /^-?\\d+(\\.\\d+)?$/.test(s);\n}\n\nexport function cleanVarName(name: string): string {\n return name.replace(/^:/, '').replace(/[^a-zA-Z0-9]/g, '');\n}\n\n// =============================================================================\n// Target Helpers\n// =============================================================================\n\nexport function targetKey(target: TargetRef): string {\n if (target.kind === 'self') return 'self';\n return target.value;\n}\n\nexport function stateKey(prefix: string, name: string, target: TargetRef): string {\n return `${prefix}:${name}:${targetKey(target)}`;\n}\n\nexport function targetStateName(target: TargetRef, suffix: string): string {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n return clean + suffix;\n }\n return suffix.toLowerCase();\n}\n\nexport function targetRefName(target: TargetRef): string {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n return clean + 'Ref';\n }\n return 'elementRef';\n}\n\n// =============================================================================\n// Type Inference\n// =============================================================================\n\nexport function inferType(value: string): string {\n if (isNumeric(value)) return '<number>';\n if (value === 'true' || value === 'false') return '<boolean>';\n return '<string>';\n}\n\nexport function inferInitial(value: string, typeAnn: string): string {\n if (typeAnn === '<number>') return isNumeric(value) ? value : '0';\n if (typeAnn === '<boolean>') return value === 'true' ? 'true' : 'false';\n return `'${escapeString(value)}'`;\n}\n\n// =============================================================================\n// Tag and Selector Inference\n// =============================================================================\n\nexport function selectorToTag(selector: string): string {\n if (selector.startsWith('#')) {\n const id = selector.slice(1).toLowerCase();\n if (['btn', 'button', 'submit', 'trigger'].includes(id)) return 'button';\n if (['input', 'search', 'email', 'text', 'field'].includes(id)) return 'input';\n if (['form', 'signup', 'login'].includes(id)) return 'form';\n return 'div';\n }\n return 'div';\n}\n\nexport function inferTriggerTag(spec: BehaviorSpec): string {\n if (spec.triggerTarget.kind === 'selector') {\n return selectorToTag(spec.triggerTarget.value);\n }\n if (spec.trigger.event === 'submit') return 'form';\n if (spec.trigger.event === 'input' || spec.trigger.event === 'change') return 'input';\n return 'button';\n}\n\nexport function inferTriggerContent(spec: BehaviorSpec): string {\n const tag = inferTriggerTag(spec);\n if (tag === 'input' || tag === 'form') return '';\n if (spec.triggerTarget.kind === 'selector') {\n const id = spec.triggerTarget.value.replace(/^[#.]/, '');\n return capitalize(id);\n }\n return 'Click';\n}\n\n// =============================================================================\n// Component Naming\n// =============================================================================\n\nexport function generateComponentName(spec: BehaviorSpec): string {\n if (spec.operations.length === 0) return 'Component';\n\n const parts: string[] = [];\n const firstOp = spec.operations[0];\n\n switch (firstOp.op) {\n case 'toggleClass':\n parts.push('Toggle', capitalize(firstOp.className));\n break;\n case 'addClass':\n parts.push('Add', capitalize(firstOp.className));\n break;\n case 'removeClass':\n parts.push('Remove', capitalize(firstOp.className));\n break;\n case 'show':\n parts.push('Show');\n appendTargetName(parts, firstOp.target);\n break;\n case 'hide':\n parts.push('Hide');\n appendTargetName(parts, firstOp.target);\n break;\n case 'setContent':\n parts.push('SetContent');\n appendTargetName(parts, firstOp.target);\n break;\n case 'navigate':\n parts.push('NavigateTo');\n parts.push(capitalize(firstOp.url.replace(/[^a-zA-Z0-9]/g, '')));\n break;\n case 'fetch':\n parts.push('FetchData');\n break;\n case 'increment':\n parts.push('Increment');\n appendTargetName(parts, firstOp.target);\n break;\n case 'decrement':\n parts.push('Decrement');\n appendTargetName(parts, firstOp.target);\n break;\n case 'focus':\n parts.push('Focus');\n appendTargetName(parts, firstOp.target);\n break;\n default:\n parts.push('Component');\n }\n\n if (spec.trigger.event !== 'click') {\n parts.push('On', capitalize(spec.trigger.event));\n }\n\n return parts.join('') || 'Component';\n}\n\nfunction appendTargetName(parts: string[], target: TargetRef): void {\n if (target.kind === 'selector') {\n const clean = target.value.replace(/^[#.]/, '');\n parts.push(capitalize(clean));\n }\n}\n\n// =============================================================================\n// Class State Extraction\n// =============================================================================\n\n/**\n * Find class operations on the trigger element ('self') and look up their state variable names.\n * Works with any renderer's stateMap as long as keys follow the `target:class:className` pattern.\n */\nexport function getSelfClassStates(\n spec: BehaviorSpec,\n stateMap: Map<string, string>\n): { stateName: string; className: string }[] {\n const result: { stateName: string; className: string }[] = [];\n for (const op of spec.operations) {\n if (\n (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') &&\n op.target.kind === 'self'\n ) {\n const stateVar = stateMap.get('self:class:' + op.className);\n if (stateVar) {\n result.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n return result;\n}\n","/**\n * React Component Renderer\n *\n * Generates complete React functional components from BehaviorSpecs.\n * Maps abstract operations to React hooks (useState, useRef, useCallback) and JSX.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class ReactRenderer implements ComponentRenderer {\n readonly framework = 'react';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n // Pre-pass: analyze what hooks and state we need\n const analysis = analyzeOperations(spec);\n\n const lines: string[] = [];\n\n // Imports\n const hooksList = [...analysis.hooks];\n if (hooksList.length > 0) {\n lines.push(`import { ${hooksList.join(', ')} } from 'react';`);\n }\n lines.push('');\n\n // Component function\n const propsType = ts ? '()' : '()';\n lines.push(`export function ${componentName}${propsType} {`);\n\n // State declarations\n for (const state of analysis.states) {\n const typeAnn = ts ? state.typeAnnotation : '';\n lines.push(\n ` const [${state.name}, ${state.setter}] = useState${typeAnn}(${state.initialValue});`\n );\n }\n\n // Ref declarations\n for (const ref of analysis.refs) {\n const typeAnn = ts ? ref.typeAnnotation : '';\n lines.push(` const ${ref.name} = useRef${typeAnn}(null);`);\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n lines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n lines.push(` const ${handlerName} = useCallback(${asyncPrefix}() => {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n lines.push(` ${l}`);\n }\n }\n\n lines.push(' }, []);');\n lines.push('');\n\n // JSX return\n lines.push(' return (');\n const jsx = generateJSX(spec, analysis, handlerName);\n for (const l of jsx) {\n lines.push(` ${l}`);\n }\n lines.push(' );');\n lines.push('}');\n lines.push('');\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'react',\n operations: spec.operations,\n hooks: hooksList,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis (pre-pass)\n// =============================================================================\n\ninterface StateDecl {\n name: string;\n setter: string;\n typeAnnotation: string;\n initialValue: string;\n /** The target selector this state is associated with */\n targetKey: string;\n}\n\ninterface RefDecl {\n name: string;\n typeAnnotation: string;\n targetKey: string;\n}\n\ninterface OperationAnalysis {\n hooks: Set<string>;\n states: StateDecl[];\n refs: RefDecl[];\n /** Map from target key → state variable name */\n stateMap: Map<string, string>;\n /** Map from target key → ref variable name */\n refMap: Map<string, string>;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec): OperationAnalysis {\n const hooks = new Set<string>();\n const states: StateDecl[] = [];\n const refs: RefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n // Always need useCallback for the handler\n hooks.add('useCallback');\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = `has${capitalize(op.className)}`;\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: 'false',\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: initial,\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<boolean>',\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: typeAnn,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Count');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<number>',\n initialValue: '0',\n targetKey: tk,\n });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n // Need state for the fetched data\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n hooks.add('useState');\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n setter: `set${capitalize(name)}`,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n hooks.add('useRef');\n const name = targetRefName(op.target);\n refs.push({\n name,\n typeAnnotation: '<HTMLElement>',\n targetKey: tk,\n });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n hooks.add('useRef');\n const name = targetRefName(op.target);\n refs.push({\n name,\n typeAnnotation: '<HTMLElement>',\n targetKey: tk,\n });\n refMap.set(tk, name);\n }\n break;\n }\n\n // navigate, historyBack, historyForward, wait, log — no state/refs needed\n }\n }\n\n return { hooks, states, refs, stateMap, refMap };\n}\n\n// =============================================================================\n// Operation Code Generation\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: OperationAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(prev => !prev);`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(true);`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setState';\n return [`${setter}(false);`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setVisible';\n return [`${setter}(true);`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setVisible';\n return [`${setter}(false);`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n return [`${setter}('${escapeString(op.content)}');`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n return [`${setter}(prev => prev + '${escapeString(op.content)}');`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setValue';\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${setter}(${val});`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setCount';\n return [`${setter}(prev => prev + ${op.amount});`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setCount';\n return [`${setter}(prev => prev - ${op.amount});`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}';`];\n\n case 'historyBack':\n return ['window.history.back();'];\n\n case 'historyForward':\n return ['window.history.forward();'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}');`);\n if (op.format === 'json') {\n lines.push('const data = await response.json();');\n } else if (op.format === 'html') {\n lines.push('const data = await response.text();');\n } else {\n lines.push('const data = await response.text();');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n const setter = stateVar ? `set${capitalize(stateVar)}` : 'setContent';\n if (op.format === 'json') {\n lines.push(`${setter}(JSON.stringify(data));`);\n } else {\n lines.push(`${setter}(data);`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}));`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.current?.focus();`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.current?.blur();`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}?.current?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }));`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')});`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// JSX Generation\n// =============================================================================\n\nfunction generateJSX(\n spec: BehaviorSpec,\n analysis: OperationAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectJSXElements(spec, analysis);\n const eventProp = eventToReactProp(spec.trigger.event);\n\n const needsFragment = elements.length > 1 || elements.length === 0;\n\n if (needsFragment) lines.push('<>');\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventProp}={${handlerName}}`];\n\n // If trigger is 'self' and there are class operations on self, add className\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n if (selfClassStates.length > 0) {\n const classExpr = selfClassStates\n .map(s => `\\${${s.stateName} ? '${s.className}' : ''}`)\n .join(' ')\n .trim();\n triggerAttrs.push(`className={\\`${classExpr}\\`.trim()}`);\n }\n\n const indent = needsFragment ? ' ' : '';\n lines.push(\n `${indent}<${triggerTag} ${triggerAttrs.join(' ')}>${inferTriggerContent(spec)}</${triggerTag}>`\n );\n\n // Target elements (that aren't the trigger)\n for (const el of elements) {\n const elLines = renderJSXElement(el, analysis);\n for (const l of elLines) {\n lines.push(`${indent}${l}`);\n }\n }\n\n if (needsFragment) lines.push('</>');\n\n return lines;\n}\n\ninterface JSXElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n content?: string;\n /** Operations targeting this element */\n ops: AbstractOperation[];\n}\n\nfunction collectJSXElements(spec: BehaviorSpec, _analysis: OperationAnalysis): JSXElement[] {\n const seen = new Set<string>();\n const elements: JSXElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n // Skip if this is the trigger element (it's rendered separately)\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n // Add op to existing element\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({\n selector: sel,\n tag,\n id,\n className: cls,\n ops: [op],\n });\n }\n\n return elements;\n}\n\nfunction renderJSXElement(el: JSXElement, analysis: OperationAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Check for class state on this element\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (classStates.length > 0) {\n const parts = classStates.map(s => `\\${${s.stateName} ? '${s.className}' : ''}`);\n if (el.className) {\n attrs.push(`className={\\`${el.className} ${parts.join(' ')}\\`.trim()}`);\n } else {\n attrs.push(`className={\\`${parts.join(' ')}\\`.trim()}`);\n }\n } else if (el.className) {\n attrs.push(`className=\"${el.className}\"`);\n }\n\n // Check for ref on this element\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`ref={${refName}}`);\n }\n\n // Check for visibility state\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Check for content state\n const contentState = analysis.stateMap.get(el.selector + ':content');\n\n // Check for numeric state\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState\n ? `{${contentState}}`\n : numState\n ? `{${numState}}`\n : (el.content ?? el.id ?? '');\n\n const elementLine = `<${el.tag}${attrStr}>${content}</${el.tag}>`;\n\n if (visState) {\n lines.push(`{${visState} && ${elementLine}}`);\n } else {\n lines.push(elementLine);\n }\n\n return lines;\n}\n\n// =============================================================================\n// React-specific Helpers\n// =============================================================================\n\nfunction eventToReactProp(event: string): string {\n switch (event) {\n case 'click':\n return 'onClick';\n case 'dblclick':\n return 'onDoubleClick';\n case 'mouseenter':\n return 'onMouseEnter';\n case 'mouseover':\n return 'onMouseOver';\n case 'mouseleave':\n return 'onMouseLeave';\n case 'focus':\n return 'onFocus';\n case 'blur':\n return 'onBlur';\n case 'keydown':\n return 'onKeyDown';\n case 'keyup':\n return 'onKeyUp';\n case 'keypress':\n return 'onKeyPress';\n case 'input':\n return 'onInput';\n case 'change':\n return 'onChange';\n case 'submit':\n return 'onSubmit';\n default:\n return `on${capitalize(event)}`;\n }\n}\n","/**\n * Vue 3 Component Renderer\n *\n * Generates Vue 3 Single File Components (SFC) with Composition API\n * (<script setup>) from BehaviorSpecs.\n * Maps abstract operations to Vue refs and template directives.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class VueRenderer implements ComponentRenderer {\n readonly framework = 'vue';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n const analysis = analyzeOperations(spec);\n\n // -- <script setup> block --\n const scriptLines: string[] = [];\n\n // Imports\n const vueImports: string[] = [];\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n vueImports.push('ref');\n }\n if (vueImports.length > 0) {\n scriptLines.push(`import { ${vueImports.join(', ')} } from 'vue'`);\n scriptLines.push('');\n }\n\n // State declarations\n for (const state of analysis.states) {\n if (ts) {\n scriptLines.push(`const ${state.name} = ref${state.typeAnnotation}(${state.initialValue})`);\n } else {\n scriptLines.push(`const ${state.name} = ref(${state.initialValue})`);\n }\n }\n\n // Ref declarations\n for (const r of analysis.refs) {\n if (ts) {\n scriptLines.push(`const ${r.name} = ref<HTMLElement | null>(null)`);\n } else {\n scriptLines.push(`const ${r.name} = ref(null)`);\n }\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n scriptLines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n scriptLines.push(`${asyncPrefix}function ${handlerName}() {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n scriptLines.push(` ${l}`);\n }\n }\n\n scriptLines.push('}');\n\n // -- <template> block --\n const templateLines = generateTemplate(spec, analysis, handlerName);\n\n // -- Combine SFC --\n const langAttr = ts ? ' lang=\"ts\"' : '';\n const lines: string[] = [];\n lines.push(`<script setup${langAttr}>`);\n for (const l of scriptLines) {\n lines.push(l);\n }\n lines.push('</script>');\n lines.push('');\n lines.push('<template>');\n for (const l of templateLines) {\n lines.push(` ${l}`);\n }\n lines.push('</template>');\n lines.push('');\n\n const hooks = vueImports.length > 0 ? [...vueImports] : [];\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'vue',\n operations: spec.operations,\n hooks,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis\n// =============================================================================\n\ninterface VueStateDecl {\n name: string;\n typeAnnotation: string;\n initialValue: string;\n targetKey: string;\n}\n\ninterface VueRefDecl {\n name: string;\n targetKey: string;\n}\n\ninterface VueAnalysis {\n states: VueStateDecl[];\n refs: VueRefDecl[];\n stateMap: Map<string, string>;\n refMap: Map<string, string>;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec): VueAnalysis {\n const states: VueStateDecl[] = [];\n const refs: VueRefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: 'false',\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: initial,\n targetKey: targetKey(op.target),\n });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n typeAnnotation: '<boolean>',\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n typeAnnotation: typeAnn,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Count');\n states.push({\n name,\n typeAnnotation: '<number>',\n initialValue: '0',\n targetKey: tk,\n });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({\n name,\n typeAnnotation: '<string>',\n initialValue: \"''\",\n targetKey: tk,\n });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n }\n }\n\n return { states, refs, stateMap, refMap };\n}\n\n// =============================================================================\n// Operation Code Generation (Vue: .value mutation)\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: VueAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = !${stateVar ?? 'state'}.value`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = true`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'}.value = false`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'}.value = true`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'}.value = false`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'}.value = '${escapeString(op.content)}'`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'}.value += '${escapeString(op.content)}'`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${stateVar ?? 'value'}.value = ${val}`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'}.value += ${op.amount}`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'}.value -= ${op.amount}`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}'`];\n\n case 'historyBack':\n return ['window.history.back()'];\n\n case 'historyForward':\n return ['window.history.forward()'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}')`);\n if (op.format === 'json') {\n lines.push('const data = await response.json()');\n } else {\n lines.push('const data = await response.text()');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n if (op.format === 'json') {\n lines.push(`${stateVar ?? 'content'}.value = JSON.stringify(data)`);\n } else {\n lines.push(`${stateVar ?? 'content'}.value = data`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}))`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}.value?.focus()`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}.value?.blur()`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}.value?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }))`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')})`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// Template Generation\n// =============================================================================\n\nfunction generateTemplate(\n spec: BehaviorSpec,\n analysis: VueAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectTargetElements(spec);\n const eventDirective = `@${spec.trigger.event}`;\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventDirective}=\"${handlerName}\"`];\n\n // Class bindings on trigger\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n if (selfClassStates.length > 0) {\n const classObj = selfClassStates.map(s => `${s.className}: ${s.stateName}`).join(', ');\n triggerAttrs.push(`:class=\"{ ${classObj} }\"`);\n }\n\n const triggerContent = inferTriggerContent(spec);\n lines.push(`<${triggerTag} ${triggerAttrs.join(' ')}>${triggerContent}</${triggerTag}>`);\n\n // Target elements\n for (const el of elements) {\n const elLines = renderVueElement(el, analysis);\n for (const l of elLines) {\n lines.push(l);\n }\n }\n\n return lines;\n}\n\ninterface TemplateElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n ops: AbstractOperation[];\n}\n\nfunction collectTargetElements(spec: BehaviorSpec): TemplateElement[] {\n const seen = new Set<string>();\n const elements: TemplateElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({ selector: sel, tag, id, className: cls, ops: [op] });\n }\n\n return elements;\n}\n\nfunction renderVueElement(el: TemplateElement, analysis: VueAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Class bindings\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (classStates.length > 0) {\n const classObj = classStates.map(s => `${s.className}: ${s.stateName}`).join(', ');\n if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n attrs.push(`:class=\"{ ${classObj} }\"`);\n } else {\n attrs.push(`:class=\"{ ${classObj} }\"`);\n }\n } else if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n }\n\n // Ref binding\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`ref=\"${refName}\"`);\n }\n\n // Visibility\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Content\n const contentState = analysis.stateMap.get(el.selector + ':content');\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState\n ? `{{ ${contentState} }}`\n : numState\n ? `{{ ${numState} }}`\n : (el.id ?? '');\n\n if (visState) {\n lines.push(`<${el.tag}${attrStr} v-if=\"${visState}\">${content}</${el.tag}>`);\n } else {\n lines.push(`<${el.tag}${attrStr}>${content}</${el.tag}>`);\n }\n\n return lines;\n}\n","/**\n * Svelte 5 Component Renderer\n *\n * Generates Svelte 5 components with runes ($state, $derived, $effect)\n * from BehaviorSpecs.\n * Maps abstract operations to direct state mutation and Svelte template syntax.\n */\n\nimport type { AbstractOperation, BehaviorSpec, TargetRef } from '../operations/types.js';\nimport type {\n ComponentRenderer,\n ComponentRenderOptions,\n GeneratedComponent,\n} from './component-types.js';\nimport {\n capitalize,\n cleanVarName,\n escapeString,\n generateComponentName,\n getSelfClassStates,\n inferInitial,\n inferTriggerContent,\n inferTriggerTag,\n inferType,\n isNumeric,\n selectorToTag,\n stateKey,\n targetKey,\n targetRefName,\n targetStateName,\n} from './renderer-helpers.js';\n\n// =============================================================================\n// Renderer\n// =============================================================================\n\nexport class SvelteRenderer implements ComponentRenderer {\n readonly framework = 'svelte';\n\n render(spec: BehaviorSpec, options: ComponentRenderOptions = {}): GeneratedComponent {\n const componentName = options.componentName ?? generateComponentName(spec);\n const ts = options.typescript !== false;\n\n const analysis = analyzeOperations(spec, ts);\n\n // -- <script> block --\n const scriptLines: string[] = [];\n\n // State declarations ($state runes — no imports needed)\n for (const state of analysis.states) {\n scriptLines.push(`let ${state.name} = $state(${state.initialValue})`);\n }\n\n // Ref declarations (plain variables, bound via bind:this)\n for (const r of analysis.refs) {\n if (ts) {\n scriptLines.push(`let ${r.name}: HTMLElement`);\n } else {\n scriptLines.push(`let ${r.name}`);\n }\n }\n\n if (analysis.states.length > 0 || analysis.refs.length > 0) {\n scriptLines.push('');\n }\n\n // Event handler\n const handlerName = `handle${capitalize(spec.trigger.event)}`;\n const asyncPrefix = spec.async ? 'async ' : '';\n scriptLines.push(`${asyncPrefix}function ${handlerName}() {`);\n\n for (const op of spec.operations) {\n const opLines = generateOperationCode(op, analysis);\n for (const l of opLines) {\n scriptLines.push(` ${l}`);\n }\n }\n\n scriptLines.push('}');\n\n // -- Template --\n const templateLines = generateTemplate(spec, analysis, handlerName);\n\n // -- Combine --\n const langAttr = ts ? ' lang=\"ts\"' : '';\n const lines: string[] = [];\n lines.push(`<script${langAttr}>`);\n for (const l of scriptLines) {\n lines.push(` ${l}`);\n }\n lines.push('</script>');\n lines.push('');\n for (const l of templateLines) {\n lines.push(l);\n }\n lines.push('');\n\n // Track which runes are used\n const hooks: string[] = [];\n if (analysis.states.length > 0) hooks.push('$state');\n\n return {\n name: componentName,\n code: lines.join('\\n'),\n framework: 'svelte',\n operations: spec.operations,\n hooks,\n };\n }\n}\n\n// =============================================================================\n// Operation Analysis\n// =============================================================================\n\ninterface SvelteStateDecl {\n name: string;\n initialValue: string;\n targetKey: string;\n}\n\ninterface SvelteRefDecl {\n name: string;\n targetKey: string;\n}\n\ninterface SvelteAnalysis {\n states: SvelteStateDecl[];\n refs: SvelteRefDecl[];\n stateMap: Map<string, string>;\n refMap: Map<string, string>;\n ts: boolean;\n}\n\nfunction analyzeOperations(spec: BehaviorSpec, ts: boolean): SvelteAnalysis {\n const states: SvelteStateDecl[] = [];\n const refs: SvelteRefDecl[] = [];\n const stateMap = new Map<string, string>();\n const refMap = new Map<string, string>();\n const seenStates = new Set<string>();\n\n for (const op of spec.operations) {\n switch (op.op) {\n case 'toggleClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n states.push({ name, initialValue: 'false', targetKey: targetKey(op.target) });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'addClass':\n case 'removeClass': {\n const key = stateKey('has', op.className, op.target);\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = `has${capitalize(op.className)}`;\n const initial = op.op === 'removeClass' ? 'true' : 'false';\n states.push({ name, initialValue: initial, targetKey: targetKey(op.target) });\n stateMap.set(targetKey(op.target) + ':class:' + op.className, name);\n }\n break;\n }\n\n case 'show':\n case 'hide': {\n const tk = targetKey(op.target);\n const key = 'visible:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Visible');\n states.push({\n name,\n initialValue: op.op === 'hide' ? 'true' : 'false',\n targetKey: tk,\n });\n stateMap.set(tk + ':visible', name);\n }\n break;\n }\n\n case 'setContent':\n case 'appendContent': {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({ name, initialValue: \"''\", targetKey: tk });\n stateMap.set(tk + ':content', name);\n }\n break;\n }\n\n case 'setVariable': {\n const key = 'var:' + op.name;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = cleanVarName(op.name);\n const typeAnn = inferType(op.value);\n states.push({\n name,\n initialValue: inferInitial(op.value, typeAnn),\n targetKey: 'var:' + op.name,\n });\n stateMap.set('var:' + op.name, name);\n }\n break;\n }\n\n case 'increment':\n case 'decrement': {\n const tk = targetKey(op.target);\n const key = 'num:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Count');\n states.push({ name, initialValue: '0', targetKey: tk });\n stateMap.set(tk + ':num', name);\n }\n break;\n }\n\n case 'fetch': {\n if (op.target) {\n const tk = targetKey(op.target);\n const key = 'content:' + tk;\n if (!seenStates.has(key)) {\n seenStates.add(key);\n const name = targetStateName(op.target, 'Content');\n states.push({ name, initialValue: \"''\", targetKey: tk });\n stateMap.set(tk + ':content', name);\n }\n }\n break;\n }\n\n case 'focus':\n case 'blur': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n\n case 'triggerEvent': {\n const tk = targetKey(op.target);\n if (!refMap.has(tk)) {\n const name = targetRefName(op.target);\n refs.push({ name, targetKey: tk });\n refMap.set(tk, name);\n }\n break;\n }\n }\n }\n\n return { states, refs, stateMap, refMap, ts };\n}\n\n// =============================================================================\n// Operation Code Generation (Svelte: direct mutation)\n// =============================================================================\n\nfunction generateOperationCode(op: AbstractOperation, analysis: SvelteAnalysis): string[] {\n switch (op.op) {\n case 'toggleClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = !${stateVar ?? 'state'}`];\n }\n\n case 'addClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = true`];\n }\n\n case 'removeClass': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':class:' + op.className);\n return [`${stateVar ?? 'state'} = false`];\n }\n\n case 'show': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'} = true`];\n }\n\n case 'hide': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':visible');\n return [`${stateVar ?? 'visible'} = false`];\n }\n\n case 'setContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'} = '${escapeString(op.content)}'`];\n }\n\n case 'appendContent': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n return [`${stateVar ?? 'content'} += '${escapeString(op.content)}'`];\n }\n\n case 'setVariable': {\n const stateVar = analysis.stateMap.get('var:' + op.name);\n const val = isNumeric(op.value) ? op.value : `'${escapeString(op.value)}'`;\n return [`${stateVar ?? 'value'} = ${val}`];\n }\n\n case 'increment': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'} += ${op.amount}`];\n }\n\n case 'decrement': {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':num');\n return [`${stateVar ?? 'count'} -= ${op.amount}`];\n }\n\n case 'navigate':\n return [`window.location.href = '${escapeString(op.url)}'`];\n\n case 'historyBack':\n return ['window.history.back()'];\n\n case 'historyForward':\n return ['window.history.forward()'];\n\n case 'fetch': {\n const lines: string[] = [];\n lines.push(`const response = await fetch('${escapeString(op.url)}')`);\n if (op.format === 'json') {\n lines.push('const data = await response.json()');\n } else {\n lines.push('const data = await response.text()');\n }\n if (op.target) {\n const stateVar = analysis.stateMap.get(targetKey(op.target) + ':content');\n if (op.format === 'json') {\n lines.push(`${stateVar ?? 'content'} = JSON.stringify(data)`);\n } else {\n lines.push(`${stateVar ?? 'content'} = data`);\n }\n }\n return lines;\n }\n\n case 'wait':\n return [`await new Promise(resolve => setTimeout(resolve, ${op.durationMs}))`];\n\n case 'focus': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.focus()`];\n }\n\n case 'blur': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [`${refName ?? 'ref'}?.blur()`];\n }\n\n case 'triggerEvent': {\n const refName = analysis.refMap.get(targetKey(op.target));\n return [\n `${refName ?? 'ref'}?.dispatchEvent(new CustomEvent('${escapeString(op.eventName)}', { bubbles: true }))`,\n ];\n }\n\n case 'log':\n return [`console.log(${op.values.map(v => `'${escapeString(v)}'`).join(', ')})`];\n\n default:\n return [`// Unsupported: ${(op as AbstractOperation).op}`];\n }\n}\n\n// =============================================================================\n// Template Generation\n// =============================================================================\n\nfunction generateTemplate(\n spec: BehaviorSpec,\n analysis: SvelteAnalysis,\n handlerName: string\n): string[] {\n const lines: string[] = [];\n const elements = collectTargetElements(spec);\n const eventAttr = `on${spec.trigger.event}`;\n\n // Trigger element\n const triggerTag = inferTriggerTag(spec);\n const triggerAttrs: string[] = [`${eventAttr}={${handlerName}}`];\n\n // Class directives on trigger\n const selfClassStates = getSelfClassStates(spec, analysis.stateMap);\n for (const s of selfClassStates) {\n triggerAttrs.push(`class:${s.className}={${s.stateName}}`);\n }\n\n const triggerContent = inferTriggerContent(spec);\n lines.push(`<${triggerTag} ${triggerAttrs.join(' ')}>${triggerContent}</${triggerTag}>`);\n\n // Target elements\n for (const el of elements) {\n const elLines = renderSvelteElement(el, analysis);\n for (const l of elLines) {\n lines.push(l);\n }\n }\n\n return lines;\n}\n\ninterface TemplateElement {\n selector: string;\n tag: string;\n id?: string;\n className?: string;\n ops: AbstractOperation[];\n}\n\nfunction collectTargetElements(spec: BehaviorSpec): TemplateElement[] {\n const seen = new Set<string>();\n const elements: TemplateElement[] = [];\n\n for (const op of spec.operations) {\n if (!('target' in op)) continue;\n const target = (op as { target: TargetRef }).target;\n if (target.kind !== 'selector') continue;\n\n if (spec.triggerTarget.kind === 'selector' && spec.triggerTarget.value === target.value)\n continue;\n\n const sel = target.value;\n if (seen.has(sel)) {\n const existing = elements.find(e => e.selector === sel);\n if (existing) existing.ops.push(op);\n continue;\n }\n seen.add(sel);\n\n const tag = selectorToTag(sel);\n const id = sel.startsWith('#') ? sel.slice(1) : undefined;\n const cls = sel.startsWith('.') ? sel.slice(1) : undefined;\n\n elements.push({ selector: sel, tag, id, className: cls, ops: [op] });\n }\n\n return elements;\n}\n\nfunction renderSvelteElement(el: TemplateElement, analysis: SvelteAnalysis): string[] {\n const lines: string[] = [];\n const attrs: string[] = [];\n\n if (el.id) attrs.push(`id=\"${el.id}\"`);\n\n // Class directives\n const classStates: { stateName: string; className: string }[] = [];\n for (const op of el.ops) {\n if (op.op === 'toggleClass' || op.op === 'addClass' || op.op === 'removeClass') {\n const stateVar = analysis.stateMap.get(el.selector + ':class:' + op.className);\n if (stateVar) {\n classStates.push({ stateName: stateVar, className: op.className });\n }\n }\n }\n\n if (el.className) {\n attrs.push(`class=\"${el.className}\"`);\n }\n for (const s of classStates) {\n attrs.push(`class:${s.className}={${s.stateName}}`);\n }\n\n // Ref binding\n const refName = analysis.refMap.get(el.selector);\n if (refName) {\n attrs.push(`bind:this={${refName}}`);\n }\n\n // Visibility\n const visState = analysis.stateMap.get(el.selector + ':visible');\n\n // Content\n const contentState = analysis.stateMap.get(el.selector + ':content');\n const numState = analysis.stateMap.get(el.selector + ':num');\n\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n const content = contentState ? `{${contentState}}` : numState ? `{${numState}}` : (el.id ?? '');\n\n const elementLine = `<${el.tag}${attrStr}>${content}</${el.tag}>`;\n\n if (visState) {\n lines.push(`{#if ${visState}}`);\n lines.push(` ${elementLine}`);\n lines.push('{/if}');\n } else {\n lines.push(elementLine);\n }\n\n return lines;\n}\n","/**\n * Input normalization.\n *\n * Converts any input format (natural language, explicit syntax, LLM JSON)\n * to a SemanticNode for downstream validation and compilation.\n */\n\nimport type { CompileRequest, NormalizeResult, SemanticJSON, Diagnostic } from '../types.js';\nimport { detectFormat } from './detect.js';\nimport { validateSemanticJSON, jsonToSemanticNode } from './json-schema.js';\n\n// =============================================================================\n// Dynamic imports (resolved at service creation time)\n// =============================================================================\n\n/** Semantic package functions, injected by CompilationService.create() */\nexport interface SemanticFunctions {\n parseSemantic: (\n code: string,\n language: string\n ) => { node: unknown; confidence: number; error?: string };\n parseExplicit: (input: string) => unknown;\n isExplicitSyntax: (input: string) => boolean;\n}\n\nlet _semantic: SemanticFunctions | null = null;\n\n/** Initialize with semantic package functions. */\nexport function initNormalizer(semantic: SemanticFunctions): void {\n _semantic = semantic;\n}\n\n// =============================================================================\n// Normalization\n// =============================================================================\n\n/**\n * Normalize any input format to a SemanticNode.\n */\nexport function normalize(request: CompileRequest): NormalizeResult {\n if (!_semantic) {\n throw new Error('Normalizer not initialized. Call initNormalizer() first.');\n }\n\n // Determine which input format we're working with\n if (request.semantic) {\n return normalizeJSON(request.semantic);\n }\n\n const input = request.code ?? request.explicit;\n if (!input) {\n return {\n node: null,\n confidence: 0,\n format: 'natural',\n diagnostics: [\n {\n severity: 'error',\n code: 'NO_INPUT',\n message: 'No input provided. Supply one of: code, explicit, or semantic.',\n },\n ],\n };\n }\n\n const format = request.explicit ? 'explicit' : detectFormat(input);\n\n switch (format) {\n case 'explicit':\n return normalizeExplicit(input);\n case 'json':\n return normalizeJSON(JSON.parse(input.trim()) as SemanticJSON);\n case 'natural':\n return normalizeNatural(input, request.language ?? 'en');\n }\n}\n\n// =============================================================================\n// Format-Specific Normalization\n// =============================================================================\n\nfunction normalizeNatural(code: string, language: string): NormalizeResult {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const result = _semantic!.parseSemantic(code, language);\n\n if (result.error) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_ERROR',\n message: result.error,\n });\n }\n\n if (!result.node) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_FAILED',\n message: `Failed to parse \"${code}\" as ${language} hyperscript.`,\n suggestion: 'Check syntax or try explicit syntax: [command role:value ...]',\n });\n return { node: null, confidence: result.confidence, format: 'natural', diagnostics };\n }\n\n return {\n node: result.node,\n confidence: result.confidence,\n format: 'natural',\n diagnostics,\n };\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_EXCEPTION',\n message: error instanceof Error ? error.message : String(error),\n });\n return { node: null, confidence: 0, format: 'natural', diagnostics };\n }\n}\n\nfunction normalizeExplicit(input: string): NormalizeResult {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const node = _semantic!.parseExplicit(input);\n return {\n node,\n confidence: 1.0,\n format: 'explicit',\n diagnostics,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const hasRoleGuidance =\n message.includes('Valid roles') || message.includes('Missing required role');\n diagnostics.push({\n severity: 'error',\n code: 'EXPLICIT_PARSE_ERROR',\n message,\n suggestion: hasRoleGuidance\n ? undefined\n : 'Use format: [command role:value ...] e.g. [toggle patient:.active]. Use get_command_docs(command) to see valid roles.',\n });\n return { node: null, confidence: 0, format: 'explicit', diagnostics };\n }\n}\n\nfunction normalizeJSON(input: SemanticJSON): NormalizeResult {\n // Validate structure\n const validationErrors = validateSemanticJSON(input);\n if (validationErrors.some(d => d.severity === 'error')) {\n return {\n node: null,\n confidence: 0,\n format: 'json',\n diagnostics: validationErrors,\n };\n }\n\n // Convert to SemanticNode\n const node = jsonToSemanticNode(input);\n return {\n node,\n confidence: 1.0,\n format: 'json',\n diagnostics: validationErrors, // May contain warnings\n };\n}\n","/**\n * Validation pipeline.\n *\n * Sequential gates that validate a parsed SemanticNode before compilation.\n * Each gate can add diagnostics; errors block compilation.\n */\n\nimport type { Diagnostic } from '../types.js';\n\n// =============================================================================\n// Dynamic imports\n// =============================================================================\n\n/** Semantic validation functions, injected by CompilationService.create() */\nexport interface ValidationFunctions {\n validateSemanticResult: (result: unknown) => {\n valid: boolean;\n errors: Array<{ code: string; message: string; role?: string; severity: string }>;\n warnings: Array<{ code: string; message: string; role?: string; severity: string }>;\n confidenceAdjustment: number;\n suggestions: string[];\n };\n}\n\nlet _validators: ValidationFunctions | null = null;\n\n/** Initialize with validation functions. */\nexport function initValidation(validators: ValidationFunctions): void {\n _validators = validators;\n}\n\n// =============================================================================\n// Validation Pipeline\n// =============================================================================\n\nexport interface GateResult {\n pass: boolean;\n diagnostics: Diagnostic[];\n adjustedConfidence: number;\n}\n\n/**\n * Run all validation gates on a parsed semantic node.\n */\nexport function runValidationGates(\n node: unknown,\n confidence: number,\n confidenceThreshold: number\n): GateResult {\n const diagnostics: Diagnostic[] = [];\n let adjustedConfidence = confidence;\n\n // Gate 1: Parse success\n if (!node) {\n diagnostics.push({\n severity: 'error',\n code: 'PARSE_FAILED',\n message: 'No semantic node produced from input.',\n });\n return { pass: false, diagnostics, adjustedConfidence: 0 };\n }\n\n // Gate 2: Confidence threshold\n if (confidence < confidenceThreshold) {\n diagnostics.push({\n severity: 'error',\n code: 'LOW_CONFIDENCE',\n message: `Parse confidence ${confidence.toFixed(2)} is below threshold ${confidenceThreshold.toFixed(2)}.`,\n suggestion: 'Try explicit syntax [command role:value ...] for unambiguous input.',\n });\n return { pass: false, diagnostics, adjustedConfidence: confidence };\n }\n\n // Gate 3: Schema validation\n if (_validators) {\n const semanticResult = nodeToParseResult(node);\n if (semanticResult) {\n const validation = _validators.validateSemanticResult(semanticResult);\n\n // Convert errors\n for (const err of validation.errors) {\n diagnostics.push({\n severity: 'error',\n code: err.code,\n message: err.message,\n });\n }\n\n // Convert warnings\n for (const warn of validation.warnings) {\n diagnostics.push({\n severity: 'warning',\n code: warn.code,\n message: warn.message,\n });\n }\n\n // Add suggestions\n for (const suggestion of validation.suggestions) {\n diagnostics.push({\n severity: 'info',\n code: 'SUGGESTION',\n message: suggestion,\n });\n }\n\n // Adjust confidence\n adjustedConfidence = Math.max(0, Math.min(1, confidence + validation.confidenceAdjustment));\n\n if (!validation.valid) {\n return { pass: false, diagnostics, adjustedConfidence };\n }\n }\n }\n\n return { pass: true, diagnostics, adjustedConfidence };\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Convert a SemanticNode to the SemanticParseResult format expected by\n * validateSemanticResult(). The validator expects { action, arguments, confidence }.\n */\nfunction nodeToParseResult(node: unknown): unknown {\n const n = node as {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n };\n\n if (!n.action) return null;\n\n // For event handlers, validate the body commands instead\n const action = n.action === 'on' ? null : n.action;\n if (!action) return null;\n\n // Convert roles map to arguments array\n const args: unknown[] = [];\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, value] of n.roles.entries()) {\n args.push({ role, ...(value as Record<string, unknown>) });\n }\n }\n\n return {\n action,\n arguments: args,\n confidence: 1.0,\n };\n}\n","/**\n * Compilation bridge.\n *\n * Converts a validated SemanticNode to AOT-compatible ASTNode\n * and compiles it to JavaScript.\n */\n\n// =============================================================================\n// Dynamic imports\n// =============================================================================\n\n/** AST building functions, injected by CompilationService.create() */\nexport interface BridgeFunctions {\n ASTBuilder: new () => { build(node: unknown): unknown; warnings: string[] };\n fromSemanticAST: (node: unknown) => unknown;\n}\n\n/** AOT compiler interface */\nexport interface AOTCompilerLike {\n compileAST(\n ast: unknown,\n options?: Record<string, unknown>\n ): {\n success: boolean;\n code?: string;\n warnings: string[];\n metadata: {\n handlerId: string;\n parserUsed: string;\n language?: string;\n commandsUsed: string[];\n optimizationsApplied: string[];\n needsRuntime: boolean;\n runtimeHelpers: string[];\n };\n errors?: string[];\n };\n}\n\nlet _bridge: BridgeFunctions | null = null;\nlet _compiler: AOTCompilerLike | null = null;\n\n/** Initialize with AST building functions and compiler. */\nexport function initBridge(bridge: BridgeFunctions, compiler: AOTCompilerLike): void {\n _bridge = bridge;\n _compiler = compiler;\n}\n\n// =============================================================================\n// Bridge\n// =============================================================================\n\nexport interface BridgeResult {\n success: boolean;\n code?: string;\n helpers: string[];\n warnings: string[];\n errors: string[];\n}\n\n/**\n * Compile a SemanticNode to JavaScript via the AOT pipeline.\n *\n * SemanticNode → ASTBuilder.build() → fromSemanticAST() → compiler.compileAST()\n */\nexport function compileSemanticNode(\n node: unknown,\n options: {\n language?: string;\n optimization?: 0 | 1 | 2;\n target?: 'esm' | 'iife';\n minify?: boolean;\n } = {}\n): BridgeResult {\n if (!_bridge || !_compiler) {\n throw new Error('Bridge not initialized. Call initBridge() first.');\n }\n\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Step 1: Build semantic AST\n let semanticAST: unknown;\n try {\n const builder = new _bridge.ASTBuilder();\n semanticAST = builder.build(node);\n warnings.push(...builder.warnings);\n } catch (error) {\n errors.push(`AST build failed: ${error instanceof Error ? error.message : String(error)}`);\n return { success: false, helpers: [], warnings, errors };\n }\n\n // Step 2: Convert to interchange format\n let interchangeAST: unknown;\n try {\n interchangeAST = _bridge.fromSemanticAST(semanticAST);\n } catch (error) {\n errors.push(\n `Interchange conversion failed: ${error instanceof Error ? error.message : String(error)}`\n );\n return { success: false, helpers: [], warnings, errors };\n }\n\n // Step 3: Compile via AOT\n try {\n const result = _compiler.compileAST(interchangeAST, {\n language: options.language ?? 'en',\n optimizationLevel: options.optimization ?? 2,\n codegen: {\n mode: options.target ?? 'esm',\n minify: options.minify ?? false,\n },\n });\n\n if (!result.success) {\n return {\n success: false,\n helpers: [],\n warnings: [...warnings, ...result.warnings],\n errors: [...errors, ...(result.errors ?? ['Compilation failed'])],\n };\n }\n\n return {\n success: true,\n code: result.code,\n helpers: result.metadata.runtimeHelpers,\n warnings: [...warnings, ...result.warnings],\n errors,\n };\n } catch (error) {\n errors.push(\n `AOT compilation failed: ${error instanceof Error ? error.message : String(error)}`\n );\n return { success: false, helpers: [], warnings, errors };\n }\n}\n","/**\n * CompilationService — the main orchestrator.\n *\n * Accepts hyperscript in three formats (natural language, explicit syntax, LLM JSON),\n * validates through semantic schemas, and compiles to optimized JavaScript.\n */\n\nimport type {\n CompileRequest,\n CompileResponse,\n ValidationResponse,\n TranslateRequest,\n TranslateResponse,\n TestRequest,\n TestResponse,\n ComponentRequest,\n ComponentResponse,\n DiffRequest,\n DiffResponse,\n ServiceOptions,\n SemanticJSON,\n SemanticJSONValue,\n Diagnostic,\n} from './types.js';\nimport { diffBehaviors } from './diff/diff.js';\nimport { normalize, initNormalizer } from './input/normalize.js';\nimport {\n runValidationGates,\n initValidation,\n type ValidationFunctions,\n} from './validation/gates.js';\nimport {\n compileSemanticNode,\n initBridge,\n type BridgeFunctions,\n type AOTCompilerLike,\n} from './compile/bridge.js';\nimport { SemanticCache, generateCacheKey } from './compile/cache.js';\nimport { extractOperations } from './operations/extract.js';\nimport { PlaywrightRenderer } from './renderers/playwright.js';\nimport { ReactRenderer } from './renderers/react.js';\nimport { VueRenderer } from './renderers/vue.js';\nimport { SvelteRenderer } from './renderers/svelte.js';\nimport type { TestRenderer } from './renderers/types.js';\nimport type { ComponentRenderer } from './renderers/component-types.js';\n\n// =============================================================================\n// Service\n// =============================================================================\n\nexport class CompilationService {\n private cache: SemanticCache;\n private confidenceThreshold: number;\n private translateFn: ((code: string, from: string, to: string) => string) | null = null;\n private testRenderers: Map<string, TestRenderer>;\n private componentRenderers: Map<string, ComponentRenderer>;\n\n private constructor(options: ServiceOptions = {}) {\n this.confidenceThreshold = options.confidenceThreshold ?? 0.7;\n this.cache = new SemanticCache(options.cacheSize ?? 500);\n\n // Initialize renderer registries with defaults\n this.testRenderers = new Map<string, TestRenderer>(\n Object.entries(options.testRenderers ?? { playwright: new PlaywrightRenderer() })\n );\n this.componentRenderers = new Map<string, ComponentRenderer>(\n Object.entries(\n options.componentRenderers ?? {\n react: new ReactRenderer(),\n vue: new VueRenderer(),\n svelte: new SvelteRenderer(),\n }\n )\n );\n }\n\n /**\n * Register a test renderer for a given framework.\n */\n registerTestRenderer(framework: string, renderer: TestRenderer): void {\n this.testRenderers.set(framework, renderer);\n }\n\n /**\n * Register a component renderer for a given framework.\n */\n registerComponentRenderer(framework: string, renderer: ComponentRenderer): void {\n this.componentRenderers.set(framework, renderer);\n }\n\n /**\n * Create a CompilationService by dynamically importing dependencies.\n *\n * This async factory resolves @lokascript/semantic and @hyperfixi/aot-compiler\n * at runtime, following the same pattern as createMultilingualCompiler().\n */\n static async create(options: ServiceOptions = {}): Promise<CompilationService> {\n const service = new CompilationService(options);\n\n // Import semantic package\n const semantic = await import('@lokascript/semantic');\n\n // Initialize normalizer with semantic parsing functions\n initNormalizer({\n parseSemantic: semantic.parseSemantic,\n parseExplicit: semantic.parseExplicit,\n isExplicitSyntax: semantic.isExplicitSyntax,\n });\n\n // Initialize validation with schema validator\n // Cast needed: our interface uses `unknown` to avoid importing semantic types\n initValidation({\n validateSemanticResult:\n semantic.validateSemanticResult as ValidationFunctions['validateSemanticResult'],\n });\n\n // Import AOT compiler\n const aot = await import('@hyperfixi/aot-compiler');\n const compiler = aot.createCompiler();\n\n // Initialize bridge with AST builder and compiler\n // Cast needed: our interfaces use `unknown` to avoid direct type dependencies\n initBridge(\n {\n ASTBuilder: semantic.ASTBuilder as unknown as BridgeFunctions['ASTBuilder'],\n fromSemanticAST: semantic.fromSemanticAST as unknown as BridgeFunctions['fromSemanticAST'],\n },\n compiler as unknown as AOTCompilerLike\n );\n\n // Store translate function\n service.translateFn = semantic.translate;\n\n return service;\n }\n\n // ===========================================================================\n // Public API\n // ===========================================================================\n\n /**\n * Compile hyperscript to JavaScript.\n *\n * Accepts any of three input formats:\n * - `code` + `language`: Natural language hyperscript\n * - `explicit`: Bracket syntax [command role:value ...]\n * - `semantic`: LLM JSON { action, roles, trigger }\n *\n * Returns compiled JS, semantic representation, and diagnostics.\n */\n compile(request: CompileRequest): CompileResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode\n const normalized = normalize(request);\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return {\n ok: false,\n confidence: gateResult.adjustedConfidence,\n diagnostics,\n };\n }\n\n // Step 3: Check cache\n const cacheKey = generateCacheKey(normalized.node, {\n optimization: request.optimization,\n target: request.target,\n minify: request.minify,\n });\n\n const cached = this.cache.get(cacheKey);\n if (cached) {\n // Merge current diagnostics with cached (warnings may differ)\n return {\n ...cached,\n confidence: gateResult.adjustedConfidence,\n diagnostics: [...diagnostics, ...cached.diagnostics.filter(d => d.severity !== 'error')],\n };\n }\n\n // Step 4: Compile\n const result = compileSemanticNode(normalized.node, {\n language: request.language,\n optimization: request.optimization,\n target: request.target,\n minify: request.minify,\n });\n\n // Convert bridge warnings/errors to diagnostics\n for (const warning of result.warnings) {\n diagnostics.push({ severity: 'warning', code: 'COMPILE_WARNING', message: warning });\n }\n for (const error of result.errors) {\n diagnostics.push({ severity: 'error', code: 'COMPILE_ERROR', message: error });\n }\n\n if (!result.success) {\n return { ok: false, diagnostics };\n }\n\n // Step 5: Assemble response\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n const response: CompileResponse = {\n ok: true,\n js: result.code,\n helpers: result.helpers,\n size: result.code ? new TextEncoder().encode(result.code).length : 0,\n semantic: semanticJSON,\n confidence: gateResult.adjustedConfidence,\n diagnostics,\n };\n\n // Step 6: Cache\n this.cache.set(cacheKey, response);\n\n return response;\n }\n\n /**\n * Validate input without compiling.\n * Returns semantic representation and diagnostics.\n */\n validate(request: CompileRequest): ValidationResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Normalize\n const normalized = normalize(request);\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, diagnostics };\n }\n\n // Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n const semanticJSON = gateResult.pass ? nodeToSemanticJSON(normalized.node) : undefined;\n\n return {\n ok: gateResult.pass,\n semantic: semanticJSON,\n confidence: gateResult.adjustedConfidence,\n diagnostics,\n };\n }\n\n /**\n * Translate hyperscript between languages.\n */\n translate(request: TranslateRequest): TranslateResponse {\n if (!this.translateFn) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'NOT_INITIALIZED',\n message: 'Translation not available.',\n },\n ],\n };\n }\n\n try {\n const result = this.translateFn(request.code, request.from, request.to);\n return {\n ok: true,\n code: result,\n diagnostics: [],\n };\n } catch (error) {\n return {\n ok: false,\n diagnostics: [\n {\n severity: 'error',\n code: 'TRANSLATE_ERROR',\n message: error instanceof Error ? error.message : String(error),\n },\n ],\n };\n }\n }\n\n /**\n * Generate behavior-level tests from hyperscript.\n *\n * Parses the input, extracts abstract operations (what the behavior does),\n * and renders them as test code in the requested framework.\n */\n generateTests(request: TestRequest): TestResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode (reuse existing pipeline)\n const normalized = normalize({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Step 3: Extract abstract operations\n const spec = extractOperations(normalized.node);\n\n if (spec.operations.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'NO_OPERATIONS',\n message: 'No testable operations extracted from the input.',\n });\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Attach source hyperscript for test naming\n if (!spec.source && request.code) {\n spec.source = request.code;\n }\n\n // Step 4: Render tests\n const frameworkName = request.framework ?? 'playwright';\n const renderer = this.testRenderers.get(frameworkName);\n if (!renderer) {\n diagnostics.push({\n severity: 'error',\n code: 'UNKNOWN_FRAMEWORK',\n message: `No test renderer registered for framework '${frameworkName}'. Available: ${[...this.testRenderers.keys()].join(', ')}`,\n });\n return { ok: false, tests: [], operations: [], diagnostics };\n }\n\n // Optionally compile for 'compiled' execution mode\n let compiledJs: string | undefined;\n if (request.executionMode === 'compiled') {\n const compileResult = this.compile({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n });\n if (compileResult.ok && compileResult.js) {\n compiledJs = compileResult.js;\n }\n }\n\n const generated = renderer.render(spec, {\n testName: request.testName,\n executionMode: request.executionMode,\n bundlePath: request.bundlePath,\n hyperscript: request.code ?? request.explicit,\n compiledJs,\n });\n\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n\n return {\n ok: true,\n tests: [\n {\n name: generated.name,\n code: generated.code,\n html: generated.html,\n framework: generated.framework,\n },\n ],\n operations: spec.operations,\n semantic: semanticJSON,\n diagnostics,\n };\n }\n\n /**\n * Generate a framework component from hyperscript.\n *\n * Parses the input, extracts abstract operations, and renders\n * them as a framework-specific component (React, Vue, or Svelte).\n */\n generateComponent(request: ComponentRequest): ComponentResponse {\n const diagnostics: Diagnostic[] = [];\n\n // Step 1: Normalize input to SemanticNode\n const normalized = normalize({\n code: request.code,\n explicit: request.explicit,\n semantic: request.semantic,\n language: request.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normalized.diagnostics);\n\n if (!normalized.node) {\n return { ok: false, operations: [], diagnostics };\n }\n\n // Step 2: Validate\n const threshold = request.confidence ?? this.confidenceThreshold;\n const gateResult = runValidationGates(normalized.node, normalized.confidence, threshold);\n diagnostics.push(...gateResult.diagnostics);\n\n if (!gateResult.pass) {\n return { ok: false, operations: [], diagnostics };\n }\n\n // Step 3: Extract abstract operations\n const spec = extractOperations(normalized.node);\n\n if (spec.operations.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'NO_OPERATIONS',\n message: 'No operations extracted from the input.',\n });\n return { ok: false, operations: [], diagnostics };\n }\n\n if (!spec.source && request.code) {\n spec.source = request.code;\n }\n\n // Step 4: Render component\n const frameworkName = request.framework ?? 'react';\n const renderer = this.componentRenderers.get(frameworkName);\n if (!renderer) {\n diagnostics.push({\n severity: 'error',\n code: 'UNKNOWN_FRAMEWORK',\n message: `No component renderer registered for framework '${frameworkName}'. Available: ${[...this.componentRenderers.keys()].join(', ')}`,\n });\n return { ok: false, operations: [], diagnostics };\n }\n const generated = renderer.render(spec, {\n componentName: request.componentName,\n typescript: request.typescript,\n });\n\n const semanticJSON = nodeToSemanticJSON(normalized.node);\n\n return {\n ok: true,\n component: {\n name: generated.name,\n code: generated.code,\n hooks: generated.hooks,\n framework: generated.framework,\n },\n operations: spec.operations,\n semantic: semanticJSON,\n diagnostics,\n };\n }\n\n /**\n * Compare two hyperscript inputs at the behavior level.\n *\n * Both sides are independently normalized and validated, then compared\n * as abstract operations. Same behavior in different languages → identical.\n */\n diff(request: DiffRequest): DiffResponse {\n const diagnostics: Diagnostic[] = [];\n const threshold = request.confidence ?? this.confidenceThreshold;\n\n // Normalize both sides independently\n const normA = normalize({\n code: request.a.code,\n explicit: request.a.explicit,\n semantic: request.a.semantic,\n language: request.a.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normA.diagnostics.map(d => ({ ...d, message: `[a] ${d.message}` })));\n\n const normB = normalize({\n code: request.b.code,\n explicit: request.b.explicit,\n semantic: request.b.semantic,\n language: request.b.language,\n confidence: request.confidence,\n });\n diagnostics.push(...normB.diagnostics.map(d => ({ ...d, message: `[b] ${d.message}` })));\n\n if (!normA.node || !normB.node) {\n return {\n ok: false,\n identical: false,\n trigger: null,\n operations: [],\n summary: 'Parse failed',\n diagnostics,\n };\n }\n\n // Validate both sides\n const gateA = runValidationGates(normA.node, normA.confidence, threshold);\n diagnostics.push(...gateA.diagnostics.map(d => ({ ...d, message: `[a] ${d.message}` })));\n\n const gateB = runValidationGates(normB.node, normB.confidence, threshold);\n diagnostics.push(...gateB.diagnostics.map(d => ({ ...d, message: `[b] ${d.message}` })));\n\n if (!gateA.pass || !gateB.pass) {\n return {\n ok: false,\n identical: false,\n trigger: null,\n operations: [],\n summary: 'Validation failed',\n diagnostics,\n };\n }\n\n // Extract operations from both\n const specA = extractOperations(normA.node);\n const specB = extractOperations(normB.node);\n\n // Diff\n const result = diffBehaviors(specA, specB);\n\n return {\n ok: true,\n identical: result.identical,\n trigger: result.trigger,\n operations: result.operations,\n summary: result.summary,\n diagnostics,\n };\n }\n\n /**\n * Get cache statistics.\n */\n getCacheStats(): { size: number; hits: number; misses: number; hitRate: number } {\n const total = this.cache.hits + this.cache.misses;\n return {\n size: this.cache.size,\n hits: this.cache.hits,\n misses: this.cache.misses,\n hitRate: total > 0 ? this.cache.hits / total : 0,\n };\n }\n\n /**\n * Clear the compilation cache.\n */\n clearCache(): void {\n this.cache.clear();\n }\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Flatten a SemanticValue (possibly nested property-path) to a string.\n */\nfunction extractSemanticValueString(v: unknown): string {\n if (!v || typeof v !== 'object') return '';\n const sv = v as {\n type?: string;\n value?: unknown;\n raw?: string;\n object?: unknown;\n property?: string;\n };\n if (sv.type === 'property-path') {\n return `${extractSemanticValueString(sv.object)}.${sv.property ?? ''}`;\n }\n return String(sv.value ?? sv.raw ?? '');\n}\n\n/**\n * Convert a SemanticNode to SemanticJSON for the response.\n */\nfunction nodeToSemanticJSON(node: unknown): SemanticJSON | undefined {\n if (!node || typeof node !== 'object') return undefined;\n\n const n = node as {\n kind?: string;\n action?: string;\n roles?: ReadonlyMap<string, unknown>;\n body?: unknown[];\n eventModifiers?: Record<string, unknown>;\n };\n\n if (!n.action) return undefined;\n\n const roles: Record<string, SemanticJSONValue> = {};\n\n if (n.roles && typeof n.roles.entries === 'function') {\n for (const [role, value] of n.roles.entries()) {\n if (role === 'event') continue; // Handled via trigger\n const v = value as { type?: string; value?: unknown; raw?: string };\n if (v && v.type) {\n if (v.type === 'property-path') {\n roles[role] = {\n type: 'property-path',\n value: extractSemanticValueString(v),\n };\n } else {\n const valueType = v.type as SemanticJSONValue['type'];\n roles[role] = {\n type: (['selector', 'literal', 'reference', 'expression'].includes(valueType)\n ? valueType\n : 'literal') as SemanticJSONValue['type'],\n value: (v.value ?? v.raw ?? '') as string | number | boolean,\n };\n }\n }\n }\n }\n\n // Handle event handlers\n if (n.kind === 'event-handler' || n.action === 'on') {\n const eventRole =\n n.roles && typeof n.roles.get === 'function'\n ? (n.roles.get('event') as { value?: string } | undefined)\n : undefined;\n\n // For event handlers, return the body command's semantic JSON\n if (n.body && n.body.length > 0) {\n const bodyJSON = nodeToSemanticJSON(n.body[0]);\n if (bodyJSON) {\n bodyJSON.trigger = {\n event: eventRole?.value ?? 'click',\n modifiers: n.eventModifiers,\n };\n return bodyJSON;\n }\n }\n\n return {\n action: n.action,\n roles,\n trigger: {\n event: eventRole?.value ?? 'click',\n modifiers: n.eventModifiers,\n },\n };\n }\n\n return { action: n.action, roles };\n}\n"],"mappings":"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","names":["escapeString","escapeString","analyzeOperations","generateOperationCode","escapeString","analyzeOperations","generateOperationCode","generateTemplate","escapeString","collectTargetElements"]}
@@ -0,0 +1,12 @@
1
+ import {
2
+ CoreParserAdapter,
3
+ convertCoreASTToAOT,
4
+ createCoreParserAdapter
5
+ } from "./chunk-JDOSUTCM.js";
6
+ import "./chunk-HMLY7DHA.js";
7
+ export {
8
+ CoreParserAdapter,
9
+ convertCoreASTToAOT,
10
+ createCoreParserAdapter
11
+ };
12
+ //# sourceMappingURL=core-parser-adapter-VCJB52SO-MDHRIVZ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}