@lokascript/compilation-service 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ODJIDVMN.js → chunk-JGAJAREK.js} +5 -118
- package/dist/chunk-JGAJAREK.js.map +1 -0
- package/dist/{chunk-JDOSUTCM.js → chunk-UQULNKOC.js} +2 -2
- package/dist/{core-parser-adapter-VCJB52SO-MDHRIVZ7.js → core-parser-adapter-VCJB52SO-5HK2TL6Q.js} +2 -2
- package/dist/{dist-JOIDNRL3.js → dist-KBC4YRQJ.js} +923 -253
- package/dist/dist-KBC4YRQJ.js.map +1 -0
- package/dist/{dist-ICUX26U7.js → dist-SWJWTU4Z.js} +550 -13
- package/dist/dist-SWJWTU4Z.js.map +1 -0
- package/dist/http.cjs +1473 -381
- package/dist/http.cjs.map +1 -1
- package/dist/http.d.cts +2 -1
- package/dist/http.d.ts +2 -1
- package/dist/http.js +1 -1
- package/dist/index.cjs +1478 -383
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -23
- package/dist/index.d.ts +4 -23
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/{service-891L1MYk.d.cts → service-qk1aChG9.d.cts} +6 -25
- package/dist/{service-891L1MYk.d.ts → service-qk1aChG9.d.ts} +6 -25
- package/package.json +3 -1
- package/dist/chunk-ODJIDVMN.js.map +0 -1
- package/dist/dist-ICUX26U7.js.map +0 -1
- package/dist/dist-JOIDNRL3.js.map +0 -1
- /package/dist/{chunk-JDOSUTCM.js.map → chunk-UQULNKOC.js.map} +0 -0
- /package/dist/{core-parser-adapter-VCJB52SO-MDHRIVZ7.js.map → core-parser-adapter-VCJB52SO-5HK2TL6Q.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../aot-compiler/src/scanner/html-scanner.ts","../../aot-compiler/src/compiler/analyzer.ts","../../aot-compiler/src/optimizations/class-batching.ts","../../aot-compiler/src/optimizations/index.ts","../../aot-compiler/src/optimizations/init-prerender.ts","../../aot-compiler/src/transforms/expression-transforms.ts","../../aot-compiler/src/transforms/command-transforms.ts","../../aot-compiler/src/transforms/event-transforms.ts","../../aot-compiler/src/compiler/aot-compiler.ts","../../aot-compiler/src/index.ts"],"sourcesContent":["/**\n * HTML Scanner\n *\n * Extracts hyperscript code from HTML files and other source formats.\n * Supports _ attributes, data-hs attributes, and script tags.\n */\n\nimport type { ExtractedScript, SourceLocation, ScannerOptions, ScanResult } from '../types/aot-types.js';\n\n// =============================================================================\n// DEFAULT OPTIONS\n// =============================================================================\n\nconst DEFAULT_OPTIONS: Required<ScannerOptions> = {\n attributeNames: ['_', 'data-hs', 'data-hyperscript'],\n includeScriptTags: true,\n defaultLanguage: 'en',\n};\n\n// =============================================================================\n// REGEX PATTERNS\n// =============================================================================\n\n/**\n * Match an HTML attribute with its value.\n * Handles: attr=\"value\", attr='value', attr=value\n */\nfunction createAttributeRegex(attrName: string): RegExp {\n const escaped = attrName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(\n `${escaped}\\\\s*=\\\\s*(?:\"([^\"]*?)\"|'([^']*?)'|([^\\\\s>]+))`,\n 'gi'\n );\n}\n\n/**\n * Match an HTML element with its attributes.\n */\nconst ELEMENT_REGEX = /<([a-z][a-z0-9-]*)\\s+([^>]*?)>/gi;\n\n/**\n * Match script tags with type=\"text/hyperscript\".\n */\nconst SCRIPT_TAG_REGEX = /<script\\s+[^>]*type\\s*=\\s*[\"']text\\/hyperscript[\"'][^>]*>([\\s\\S]*?)<\\/script>/gi;\n\n/**\n * Extract id attribute from element.\n */\nconst ID_REGEX = /\\bid\\s*=\\s*[\"']([^\"']+)[\"']/i;\n\n/**\n * Extract class attribute from element.\n */\nconst CLASS_REGEX = /\\bclass\\s*=\\s*[\"']([^\"']+)[\"']/i;\n\n/**\n * Extract lang attribute from element.\n */\nconst LANG_REGEX = /\\blang\\s*=\\s*[\"']([^\"']+)[\"']/i;\n\n// =============================================================================\n// HTML SCANNER CLASS\n// =============================================================================\n\n/**\n * Scanner for extracting hyperscript from HTML sources.\n */\nexport class HTMLScanner {\n private options: Required<ScannerOptions>;\n private attributeRegexes: Map<string, RegExp>;\n\n constructor(options: ScannerOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n this.attributeRegexes = new Map();\n\n for (const attr of this.options.attributeNames) {\n this.attributeRegexes.set(attr, createAttributeRegex(attr));\n }\n }\n\n /**\n * Extract hyperscript from HTML source code.\n */\n extract(source: string, filename: string): ExtractedScript[] {\n const scripts: ExtractedScript[] = [];\n\n // Extract from attributes\n scripts.push(...this.extractFromAttributes(source, filename));\n\n // Extract from script tags\n if (this.options.includeScriptTags) {\n scripts.push(...this.extractFromScriptTags(source, filename));\n }\n\n return scripts;\n }\n\n /**\n * Extract hyperscript from element attributes.\n */\n private extractFromAttributes(source: string, filename: string): ExtractedScript[] {\n const scripts: ExtractedScript[] = [];\n let elementMatch: RegExpExecArray | null;\n\n // Reset regex state\n ELEMENT_REGEX.lastIndex = 0;\n\n while ((elementMatch = ELEMENT_REGEX.exec(source)) !== null) {\n const tagName = elementMatch[1];\n const attributes = elementMatch[2];\n const elementStart = elementMatch.index;\n\n // Calculate line/column for this element\n const location = this.calculateLocation(source, elementStart, filename);\n\n // Check each hyperscript attribute\n for (const [attrName, regex] of this.attributeRegexes) {\n regex.lastIndex = 0;\n const attrMatch = regex.exec(attributes);\n\n if (attrMatch) {\n // Value can be in groups 1, 2, or 3 depending on quote style\n const code = attrMatch[1] ?? attrMatch[2] ?? attrMatch[3];\n\n if (code && code.trim()) {\n // Get element identifiers\n const elementId = this.extractId(attributes);\n const elementSelector = this.buildSelector(tagName, attributes, elementId);\n const language = this.extractLanguage(attributes) ?? this.options.defaultLanguage;\n\n // Decode HTML entities\n const decodedCode = this.decodeHTMLEntities(code);\n\n scripts.push({\n code: decodedCode,\n location: {\n ...location,\n column: location.column + attrMatch.index,\n },\n elementId,\n elementSelector,\n language,\n attributeName: attrName,\n });\n }\n }\n }\n }\n\n return scripts;\n }\n\n /**\n * Extract hyperscript from script tags.\n */\n private extractFromScriptTags(source: string, filename: string): ExtractedScript[] {\n const scripts: ExtractedScript[] = [];\n let match: RegExpExecArray | null;\n\n // Reset regex state\n SCRIPT_TAG_REGEX.lastIndex = 0;\n\n while ((match = SCRIPT_TAG_REGEX.exec(source)) !== null) {\n const code = match[1].trim();\n\n if (code) {\n const location = this.calculateLocation(source, match.index, filename);\n\n scripts.push({\n code,\n location,\n language: this.options.defaultLanguage,\n attributeName: 'script',\n });\n }\n }\n\n return scripts;\n }\n\n /**\n * Calculate line and column from character offset.\n */\n private calculateLocation(source: string, offset: number, filename: string): SourceLocation {\n const before = source.slice(0, offset);\n const lines = before.split('\\n');\n const line = lines.length;\n const column = (lines[lines.length - 1]?.length ?? 0) + 1;\n\n return { file: filename, line, column };\n }\n\n /**\n * Extract ID from attributes string.\n */\n private extractId(attributes: string): string | undefined {\n const match = ID_REGEX.exec(attributes);\n return match?.[1];\n }\n\n /**\n * Extract language from attributes string.\n */\n private extractLanguage(attributes: string): string | undefined {\n const match = LANG_REGEX.exec(attributes);\n return match?.[1];\n }\n\n /**\n * Build a CSS selector for an element.\n */\n private buildSelector(tagName: string, attributes: string, elementId?: string): string {\n // Prefer ID selector\n if (elementId) {\n return `#${elementId}`;\n }\n\n // Build selector from tag and classes\n let selector = tagName;\n\n const classMatch = CLASS_REGEX.exec(attributes);\n if (classMatch) {\n const classes = classMatch[1].split(/\\s+/).filter(Boolean);\n if (classes.length > 0) {\n selector += '.' + classes.join('.');\n }\n }\n\n // Add attribute selector as fallback\n for (const attrName of this.options.attributeNames) {\n if (attributes.includes(attrName + '=')) {\n selector += `[${attrName}]`;\n break;\n }\n }\n\n return selector;\n }\n\n /**\n * Decode HTML entities in attribute values.\n */\n private decodeHTMLEntities(text: string): string {\n return text\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/&#(\\d+);/g, (_, code) => String.fromCharCode(parseInt(code, 10)))\n .replace(/&#x([0-9a-f]+);/gi, (_, code) => String.fromCharCode(parseInt(code, 16)));\n }\n}\n\n// =============================================================================\n// VUE SCANNER\n// =============================================================================\n\n/**\n * Scanner for Vue Single File Components.\n */\nexport class VueScanner extends HTMLScanner {\n /**\n * Extract hyperscript from Vue SFC.\n */\n extract(source: string, filename: string): ExtractedScript[] {\n // Extract template section\n const templateMatch = /<template[^>]*>([\\s\\S]*?)<\\/template>/i.exec(source);\n\n if (!templateMatch) {\n return [];\n }\n\n const template = templateMatch[1];\n const templateOffset = templateMatch.index + templateMatch[0].indexOf('>') + 1;\n\n // Extract from template content\n const scripts = super.extract(template, filename);\n\n // Adjust line numbers for template offset\n const linesBefore = source.slice(0, templateOffset).split('\\n').length - 1;\n\n for (const script of scripts) {\n script.location.line += linesBefore;\n }\n\n return scripts;\n }\n}\n\n// =============================================================================\n// SVELTE SCANNER\n// =============================================================================\n\n/**\n * Scanner for Svelte components.\n */\nexport class SvelteScanner extends HTMLScanner {\n /**\n * Extract hyperscript from Svelte component.\n * Svelte components are HTML-like, so we can use the base scanner\n * but need to exclude script and style blocks.\n */\n extract(source: string, filename: string): ExtractedScript[] {\n // Remove script and style blocks\n let cleanedSource = source\n .replace(/<script[^>]*>[\\s\\S]*?<\\/script>/gi, match => ' '.repeat(match.length))\n .replace(/<style[^>]*>[\\s\\S]*?<\\/style>/gi, match => ' '.repeat(match.length));\n\n return super.extract(cleanedSource, filename);\n }\n}\n\n// =============================================================================\n// JSX SCANNER\n// =============================================================================\n\n/**\n * Scanner for JSX/TSX files.\n */\nexport class JSXScanner {\n private options: Required<ScannerOptions>;\n\n constructor(options: ScannerOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Extract hyperscript from JSX source.\n * Handles both regular attributes and spread attributes.\n */\n extract(source: string, filename: string): ExtractedScript[] {\n const scripts: ExtractedScript[] = [];\n\n // Match JSX hyperscript attributes: _=\"code\" or _={'code'} or _={`code`}\n for (const attrName of this.options.attributeNames) {\n const escaped = attrName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // String literal value: _=\"...\"\n const stringRegex = new RegExp(`${escaped}\\\\s*=\\\\s*[\"']([^\"']+)[\"']`, 'g');\n let match: RegExpExecArray | null;\n\n while ((match = stringRegex.exec(source)) !== null) {\n const code = match[1];\n if (code && code.trim()) {\n scripts.push({\n code,\n location: this.calculateLocation(source, match.index, filename),\n language: this.options.defaultLanguage,\n attributeName: attrName,\n });\n }\n }\n\n // Template literal value: _={`...`}\n const templateRegex = new RegExp(`${escaped}\\\\s*=\\\\s*\\\\{\\\\s*\\`([^\\`]+)\\`\\\\s*\\\\}`, 'g');\n\n while ((match = templateRegex.exec(source)) !== null) {\n const code = match[1];\n if (code && code.trim()) {\n scripts.push({\n code,\n location: this.calculateLocation(source, match.index, filename),\n language: this.options.defaultLanguage,\n attributeName: attrName,\n });\n }\n }\n\n // String expression value: _={'...'} or _={\"...\"}\n const exprRegex = new RegExp(`${escaped}\\\\s*=\\\\s*\\\\{\\\\s*[\"']([^\"']+)[\"']\\\\s*\\\\}`, 'g');\n\n while ((match = exprRegex.exec(source)) !== null) {\n const code = match[1];\n if (code && code.trim()) {\n scripts.push({\n code,\n location: this.calculateLocation(source, match.index, filename),\n language: this.options.defaultLanguage,\n attributeName: attrName,\n });\n }\n }\n }\n\n return scripts;\n }\n\n /**\n * Calculate line and column from character offset.\n */\n private calculateLocation(source: string, offset: number, filename: string): SourceLocation {\n const before = source.slice(0, offset);\n const lines = before.split('\\n');\n const line = lines.length;\n const column = (lines[lines.length - 1]?.length ?? 0) + 1;\n\n return { file: filename, line, column };\n }\n}\n\n// =============================================================================\n// MULTI-FILE SCANNER\n// =============================================================================\n\n/**\n * Scan multiple files for hyperscript.\n */\nexport async function scanFiles(\n files: string[],\n readFile: (path: string) => Promise<string>,\n options: ScannerOptions = {}\n): Promise<ScanResult> {\n const result: ScanResult = {\n scripts: [],\n files: [],\n errors: [],\n };\n\n const htmlScanner = new HTMLScanner(options);\n const vueScanner = new VueScanner(options);\n const svelteScanner = new SvelteScanner(options);\n const jsxScanner = new JSXScanner(options);\n\n for (const file of files) {\n try {\n const content = await readFile(file);\n let scripts: ExtractedScript[] = [];\n\n if (file.endsWith('.vue')) {\n scripts = vueScanner.extract(content, file);\n } else if (file.endsWith('.svelte')) {\n scripts = svelteScanner.extract(content, file);\n } else if (file.match(/\\.(jsx|tsx)$/)) {\n scripts = jsxScanner.extract(content, file);\n } else if (file.match(/\\.(html|htm)$/)) {\n scripts = htmlScanner.extract(content, file);\n }\n\n result.scripts.push(...scripts);\n result.files.push(file);\n } catch (error) {\n result.errors.push({\n file,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// CONVENIENCE EXPORTS\n// =============================================================================\n\n/**\n * Create a scanner for the appropriate file type.\n */\nexport function createScanner(filename: string, options?: ScannerOptions): HTMLScanner | JSXScanner {\n if (filename.endsWith('.vue')) {\n return new VueScanner(options);\n }\n if (filename.endsWith('.svelte')) {\n return new SvelteScanner(options);\n }\n if (filename.match(/\\.(jsx|tsx)$/)) {\n return new JSXScanner(options);\n }\n return new HTMLScanner(options);\n}\n\nexport default HTMLScanner;\n","/**\n * Static Analyzer\n *\n * Performs static analysis on hyperscript AST to gather information\n * for optimization and code generation.\n */\n\nimport type {\n ASTNode,\n AnalysisResult,\n VariableInfo,\n SelectorInfo,\n SourceLocation,\n CommandNode,\n EventHandlerNode,\n IdentifierNode,\n IfNode,\n RepeatNode,\n ForEachNode,\n WhileNode,\n VariableNode,\n SelectorNode,\n BinaryExpressionNode,\n CallExpressionNode,\n} from '../types/aot-types.js';\n\n// =============================================================================\n// ANALYZER CLASS\n// =============================================================================\n\n/**\n * Static analyzer for hyperscript AST.\n */\nexport class Analyzer {\n /**\n * Analyze an AST and return analysis results.\n */\n analyze(ast: ASTNode): AnalysisResult {\n const visitor = new AnalysisVisitor();\n visitor.visit(ast);\n return visitor.getResult();\n }\n}\n\n// =============================================================================\n// ANALYSIS VISITOR\n// =============================================================================\n\n/**\n * Visitor that walks the AST and collects analysis data.\n */\nclass AnalysisVisitor {\n private commandsUsed = new Set<string>();\n private localVars = new Map<string, VariableInfo>();\n private globalVars = new Map<string, VariableInfo>();\n private contextVars = new Set<string>();\n private pureExpressions: ASTNode[] = [];\n private dynamicExpressions: ASTNode[] = [];\n private selectors: SelectorInfo[] = [];\n private selectorMap = new Map<string, SelectorInfo>();\n private domQueries: string[] = [];\n private eventTypes: string[] = [];\n private behaviors: string[] = [];\n private runtimeHelpers = new Set<string>();\n private warnings: string[] = [];\n\n private hasAsync = false;\n private hasLoops = false;\n private hasConditionals = false;\n private canThrow = false;\n private currentNestingDepth = 0;\n private maxNestingDepth = 0;\n\n private currentLocation?: SourceLocation;\n\n /**\n * Visit an AST node and its children.\n */\n visit(node: ASTNode): void {\n if (!node) return;\n\n switch (node.type) {\n case 'event':\n this.visitEvent(node as EventHandlerNode);\n break;\n case 'command':\n this.visitCommand(node as CommandNode);\n break;\n case 'if':\n this.visitIf(node as IfNode);\n break;\n case 'repeat':\n this.visitRepeat(node as RepeatNode);\n break;\n case 'foreach':\n this.visitForEach(node as ForEachNode);\n break;\n case 'while':\n this.visitWhile(node as WhileNode);\n break;\n case 'variable':\n this.visitVariable(node as VariableNode, 'read');\n break;\n case 'selector':\n this.visitSelector(node as SelectorNode);\n break;\n case 'binary':\n this.visitBinary(node as BinaryExpressionNode);\n break;\n case 'call':\n this.visitCall(node as CallExpressionNode);\n break;\n case 'identifier':\n this.visitIdentifier(node as IdentifierNode);\n break;\n default:\n // Visit children for other node types\n this.visitChildren(node);\n }\n }\n\n /**\n * Get the analysis result.\n */\n getResult(): AnalysisResult {\n return {\n commandsUsed: this.commandsUsed,\n variables: {\n locals: this.localVars,\n globals: this.globalVars,\n contextVars: this.contextVars,\n },\n expressions: {\n pure: this.pureExpressions,\n dynamic: this.dynamicExpressions,\n selectors: this.selectors,\n },\n controlFlow: {\n hasAsync: this.hasAsync,\n hasLoops: this.hasLoops,\n hasConditionals: this.hasConditionals,\n canThrow: this.canThrow,\n maxNestingDepth: this.maxNestingDepth,\n },\n dependencies: {\n domQueries: [...new Set(this.domQueries)],\n eventTypes: [...new Set(this.eventTypes)],\n behaviors: [...new Set(this.behaviors)],\n runtimeHelpers: Array.from(this.runtimeHelpers),\n },\n warnings: this.warnings,\n };\n }\n\n // ===========================================================================\n // VISITOR METHODS\n // ===========================================================================\n\n private visitEvent(node: EventHandlerNode): void {\n this.eventTypes.push(node.event);\n\n // Check for event modifiers that need runtime helpers\n if (node.modifiers?.debounce) {\n this.runtimeHelpers.add('debounce');\n }\n if (node.modifiers?.throttle) {\n this.runtimeHelpers.add('throttle');\n }\n\n // Visit body\n if (node.body) {\n for (const child of node.body) {\n this.visit(child);\n }\n }\n }\n\n private visitCommand(node: CommandNode): void {\n this.commandsUsed.add(node.name);\n\n // Track commands that need runtime helpers\n switch (node.name) {\n case 'fetch':\n this.hasAsync = true;\n this.runtimeHelpers.add('fetchJSON');\n this.runtimeHelpers.add('fetchText');\n break;\n case 'wait':\n case 'settle':\n this.hasAsync = true;\n this.runtimeHelpers.add('wait');\n break;\n case 'toggle':\n this.runtimeHelpers.add('toggle');\n break;\n case 'set':\n this.runtimeHelpers.add('setProp');\n break;\n case 'put':\n this.runtimeHelpers.add('put');\n break;\n case 'increment':\n case 'decrement':\n this.runtimeHelpers.add('setProp');\n break;\n case 'send':\n case 'trigger':\n this.runtimeHelpers.add('send');\n break;\n case 'halt':\n case 'exit':\n this.canThrow = true;\n break;\n case 'throw':\n this.canThrow = true;\n break;\n case 'call':\n // May need behavior lookup\n if (node.args?.[0]?.type === 'identifier') {\n this.behaviors.push((node.args[0] as IdentifierNode).value);\n }\n break;\n }\n\n // Visit arguments and target\n if (node.args) {\n for (const arg of node.args) {\n this.visit(arg);\n }\n }\n if (node.target) {\n this.visit(node.target);\n }\n }\n\n private visitIf(node: IfNode): void {\n this.hasConditionals = true;\n this.enterNesting();\n\n this.visit(node.condition);\n\n for (const child of node.thenBranch) {\n this.visit(child);\n }\n\n if (node.elseIfBranches) {\n for (const branch of node.elseIfBranches) {\n this.visit(branch.condition);\n for (const child of branch.body) {\n this.visit(child);\n }\n }\n }\n\n if (node.elseBranch) {\n for (const child of node.elseBranch) {\n this.visit(child);\n }\n }\n\n this.exitNesting();\n }\n\n private visitRepeat(node: RepeatNode): void {\n this.hasLoops = true;\n this.enterNesting();\n\n if (node.count && typeof node.count !== 'number') {\n this.visit(node.count);\n }\n if (node.whileCondition) {\n this.visit(node.whileCondition);\n }\n\n for (const child of node.body) {\n this.visit(child);\n }\n\n this.exitNesting();\n }\n\n private visitForEach(node: ForEachNode): void {\n this.hasLoops = true;\n this.enterNesting();\n\n // Register loop variable as local\n this.registerVariable(node.itemName, 'local', 'write');\n if (node.indexName) {\n this.registerVariable(node.indexName, 'local', 'write');\n }\n\n this.visit(node.collection);\n\n for (const child of node.body) {\n this.visit(child);\n }\n\n this.exitNesting();\n }\n\n private visitWhile(node: WhileNode): void {\n this.hasLoops = true;\n this.enterNesting();\n\n this.visit(node.condition);\n\n for (const child of node.body) {\n this.visit(child);\n }\n\n this.exitNesting();\n }\n\n private visitVariable(node: VariableNode, access: 'read' | 'write'): void {\n const name =\n node.name.startsWith(':') || node.name.startsWith('$') ? node.name.slice(1) : node.name;\n\n this.registerVariable(name, node.scope, access);\n }\n\n private visitSelector(node: SelectorNode): void {\n const selector = node.value;\n\n // Track for selector caching optimization\n if (!this.selectorMap.has(selector)) {\n const info: SelectorInfo = {\n selector,\n usages: [],\n isId: selector.startsWith('#') && !selector.includes(' '),\n canCache: this.canCacheSelector(selector),\n };\n this.selectorMap.set(selector, info);\n this.selectors.push(info);\n }\n\n this.selectorMap\n .get(selector)!\n .usages.push(this.currentLocation ?? { file: '', line: 0, column: 0 });\n this.domQueries.push(selector);\n\n // Pure if it's a simple selector without pseudo-elements\n if (this.isPureSelector(selector)) {\n this.pureExpressions.push(node);\n } else {\n this.dynamicExpressions.push(node);\n }\n }\n\n private visitBinary(node: BinaryExpressionNode): void {\n this.visit(node.left);\n this.visit(node.right);\n\n // Check if this is a pure expression\n if (this.isPureExpression(node)) {\n this.pureExpressions.push(node);\n }\n\n // Some operators need runtime helpers\n switch (node.operator) {\n case 'contains':\n this.runtimeHelpers.add('contains');\n break;\n case 'matches':\n this.runtimeHelpers.add('matches');\n break;\n }\n }\n\n private visitCall(node: CallExpressionNode): void {\n this.visit(node.callee);\n if (node.args) {\n for (const arg of node.args) {\n this.visit(arg);\n }\n }\n\n // Mark as dynamic expression\n this.dynamicExpressions.push(node);\n }\n\n private visitIdentifier(node: IdentifierNode): void {\n const value = node.value ?? node.name;\n\n if (!value) return;\n\n // Track context variable usage\n switch (value) {\n case 'me':\n case 'my':\n this.contextVars.add('me');\n break;\n case 'you':\n case 'your':\n this.contextVars.add('you');\n break;\n case 'it':\n case 'result':\n this.contextVars.add('it');\n break;\n case 'event':\n this.contextVars.add('event');\n break;\n case 'body':\n case 'document':\n case 'window':\n // Global references - always available\n break;\n default:\n // Could be a behavior or external reference\n if (value.charAt(0) === value.charAt(0).toUpperCase()) {\n this.behaviors.push(value);\n }\n }\n }\n\n // ===========================================================================\n // HELPER METHODS\n // ===========================================================================\n\n private visitChildren(node: ASTNode): void {\n for (const key of Object.keys(node)) {\n const value = node[key];\n if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === 'object' && 'type' in item) {\n this.visit(item as ASTNode);\n }\n }\n } else if ('type' in value) {\n this.visit(value as ASTNode);\n }\n }\n }\n }\n\n private registerVariable(\n name: string,\n scope: 'local' | 'global' | 'element',\n access: 'read' | 'write'\n ): void {\n const map = scope === 'global' ? this.globalVars : this.localVars;\n\n if (!map.has(name)) {\n map.set(name, {\n name,\n scope,\n reads: [],\n writes: [],\n type: 'unknown',\n });\n }\n\n const info = map.get(name)!;\n const location = this.currentLocation ?? { file: '', line: 0, column: 0 };\n\n if (access === 'read') {\n info.reads.push(location);\n } else {\n info.writes.push(location);\n }\n }\n\n private enterNesting(): void {\n this.currentNestingDepth++;\n this.maxNestingDepth = Math.max(this.maxNestingDepth, this.currentNestingDepth);\n }\n\n private exitNesting(): void {\n this.currentNestingDepth--;\n }\n\n private canCacheSelector(selector: string): boolean {\n // Can cache simple selectors that don't change\n // Cannot cache if it uses :not(), :has(), or other dynamic pseudo-classes\n const dynamicPseudo =\n /:(not|has|is|where|nth-|first-|last-|only-|empty|focus|hover|active|visited)/i;\n return !dynamicPseudo.test(selector);\n }\n\n private isPureSelector(selector: string): boolean {\n // Pure selectors are static ID or class selectors\n return /^[#.][a-zA-Z_][a-zA-Z0-9_-]*$/.test(selector);\n }\n\n private isPureExpression(node: ASTNode): boolean {\n if (!node) return true;\n\n switch (node.type) {\n case 'literal':\n return true;\n case 'identifier': {\n const value = (node as IdentifierNode).value;\n // Context variables are not pure (they change per invocation)\n return !['me', 'you', 'it', 'result', 'event'].includes(value ?? '');\n }\n case 'binary': {\n const bin = node as BinaryExpressionNode;\n return this.isPureExpression(bin.left) && this.isPureExpression(bin.right);\n }\n default:\n return false;\n }\n }\n}\n\n// =============================================================================\n// CONVENIENCE FUNCTIONS\n// =============================================================================\n\n/**\n * Analyze an AST and return results.\n */\nexport function analyze(ast: ASTNode): AnalysisResult {\n const analyzer = new Analyzer();\n return analyzer.analyze(ast);\n}\n\n/**\n * Check if an AST contains async operations.\n */\nexport function hasAsyncOperations(ast: ASTNode): boolean {\n const result = analyze(ast);\n return result.controlFlow.hasAsync;\n}\n\n/**\n * Get all commands used in an AST.\n */\nexport function getCommandsUsed(ast: ASTNode): string[] {\n const result = analyze(ast);\n return Array.from(result.commandsUsed);\n}\n\n/**\n * Get required runtime helpers for an AST.\n */\nexport function getRequiredHelpers(ast: ASTNode): string[] {\n const result = analyze(ast);\n return result.dependencies.runtimeHelpers;\n}\n\nexport default Analyzer;\n","/**\n * Class Batching Optimization Pass\n *\n * Detects consecutive classList.add/remove/toggle commands targeting the same\n * element and merges them into a single BatchedClassOpsNode. This reduces DOM\n * mutations by leveraging the varargs form of classList.add() and classList.remove().\n *\n * Example:\n * add .active on me → then add .visible on me → then add .highlighted on me\n * Becomes:\n * _ctx.me.classList.add('active', 'visible', 'highlighted') // 1 mutation instead of 3\n */\n\nimport type {\n ASTNode,\n CommandNode,\n EventHandlerNode,\n SelectorNode,\n AnalysisResult,\n OptimizationPass,\n BatchedClassOpsNode,\n IfNode,\n RepeatNode,\n ForEachNode,\n WhileNode,\n} from '../types/aot-types.js';\n\n// Commands eligible for batching\nconst CLASS_COMMANDS = new Set(['add', 'remove', 'toggle']);\n\n/**\n * Extract a class name from a command node if it's a simple class operation.\n * Returns null if the command is not a simple class add/remove/toggle.\n */\nfunction extractClassOp(\n node: ASTNode\n): { command: 'add' | 'remove' | 'toggle'; className: string; hasExplicitTarget: boolean } | null {\n if (node.type !== 'command') return null;\n\n const cmd = node as CommandNode;\n if (!CLASS_COMMANDS.has(cmd.name)) return null;\n\n const args = cmd.args ?? [];\n if (args.length === 0) return null;\n\n const arg = args[0];\n if (arg.type !== 'selector') return null;\n\n const selector = (arg as SelectorNode).value;\n if (!selector.startsWith('.')) return null;\n\n const className = selector.slice(1);\n if (!className) return null;\n\n return {\n command: cmd.name as 'add' | 'remove' | 'toggle',\n className,\n hasExplicitTarget: !!cmd.target,\n };\n}\n\n/**\n * Check if two commands target the same element.\n * Batches when both use implicit `me`, or both have identical explicit targets.\n */\nfunction isSameTarget(a: ASTNode, b: ASTNode): boolean {\n if (a.type !== 'command' || b.type !== 'command') return false;\n const cmdA = a as CommandNode;\n const cmdB = b as CommandNode;\n\n // Both implicit me (no explicit target)\n if (!cmdA.target && !cmdB.target) return true;\n\n // Both have explicit targets — check structural equality\n if (cmdA.target && cmdB.target) {\n return getTargetKey(cmdA.target) === getTargetKey(cmdB.target);\n }\n\n // One has target, one doesn't — different\n return false;\n}\n\n/**\n * Get a string key for a target node for equality comparison.\n * Only supports selector and identifier targets (the common cases).\n */\nfunction getTargetKey(target: ASTNode): string | null {\n if (target.type === 'selector') {\n return `selector:${(target as SelectorNode).value}`;\n }\n if (target.type === 'identifier') {\n return `identifier:${(target as { value: string }).value}`;\n }\n return null;\n}\n\n/**\n * Resolve the target expression string for codegen.\n * Converts selector/identifier targets to JavaScript expressions.\n */\nfunction resolveTarget(cmd: CommandNode): string {\n if (!cmd.target) return '_ctx.me';\n\n if (cmd.target.type === 'selector') {\n const sel = (cmd.target as SelectorNode).value;\n if (sel.startsWith('#') && !sel.includes(' ') && !sel.includes('.')) {\n return `document.getElementById('${sel.slice(1)}')`;\n }\n return `document.querySelector('${sel}')`;\n }\n\n if (cmd.target.type === 'identifier') {\n const val = (cmd.target as { value: string }).value;\n if (val === 'me') return '_ctx.me';\n return val;\n }\n\n return '_ctx.me';\n}\n\n/**\n * Create a BatchedClassOpsNode from a run of class commands.\n */\nfunction createBatchNode(run: ASTNode[]): BatchedClassOpsNode {\n const adds: string[] = [];\n const removes: string[] = [];\n const toggles: string[] = [];\n\n for (const node of run) {\n const op = extractClassOp(node)!;\n switch (op.command) {\n case 'add':\n adds.push(op.className);\n break;\n case 'remove':\n removes.push(op.className);\n break;\n case 'toggle':\n toggles.push(op.className);\n break;\n }\n }\n\n // Resolve target from the first command (all commands in a run share the same target)\n const target = resolveTarget(run[0] as CommandNode);\n\n return {\n type: 'batchedClassOps',\n target,\n adds,\n removes,\n toggles,\n };\n}\n\n/**\n * Process a body array, batching consecutive class operations on the same target.\n */\nfunction batchBody(nodes: ASTNode[]): ASTNode[] {\n const result: ASTNode[] = [];\n let currentRun: ASTNode[] = [];\n\n function flushRun() {\n if (currentRun.length >= 2) {\n result.push(createBatchNode(currentRun));\n } else if (currentRun.length === 1) {\n result.push(currentRun[0]);\n }\n currentRun = [];\n }\n\n for (const node of nodes) {\n const op = extractClassOp(node);\n if (op) {\n // This is a class op — check if it matches the current run's target\n if (currentRun.length > 0 && isSameTarget(currentRun[0], node)) {\n currentRun.push(node);\n } else {\n flushRun();\n currentRun = [node];\n }\n } else {\n flushRun();\n result.push(node);\n }\n }\n\n flushRun();\n return result;\n}\n\n/**\n * Recursively walk the AST and batch class operations in all body arrays.\n */\nfunction walkAndBatch(node: ASTNode): ASTNode {\n switch (node.type) {\n case 'event': {\n const event = node as EventHandlerNode;\n if (event.body && event.body.length > 0) {\n return { ...event, body: batchBody(event.body).map(walkAndBatch) };\n }\n return node;\n }\n case 'if': {\n const ifNode = node as IfNode;\n const result: Record<string, unknown> = { ...ifNode };\n result.thenBranch = batchBody(ifNode.thenBranch).map(walkAndBatch);\n if (ifNode.elseBranch) {\n result.elseBranch = batchBody(ifNode.elseBranch).map(walkAndBatch);\n }\n if (ifNode.elseIfBranches) {\n result.elseIfBranches = ifNode.elseIfBranches.map(branch => ({\n condition: branch.condition,\n body: batchBody(branch.body).map(walkAndBatch),\n }));\n }\n return result as ASTNode;\n }\n case 'repeat': {\n const repeat = node as RepeatNode;\n return { ...repeat, body: batchBody(repeat.body).map(walkAndBatch) } as ASTNode;\n }\n case 'foreach': {\n const forEach = node as ForEachNode;\n return { ...forEach, body: batchBody(forEach.body).map(walkAndBatch) } as ASTNode;\n }\n case 'while': {\n const whileNode = node as WhileNode;\n return { ...whileNode, body: batchBody(whileNode.body).map(walkAndBatch) } as ASTNode;\n }\n default:\n return node;\n }\n}\n\n/**\n * Optimization pass that batches consecutive class manipulation commands\n * targeting the same element into single compound DOM operations.\n */\nexport class ClassBatchingPass implements OptimizationPass {\n readonly name = 'class-batching';\n\n shouldRun(analysis: AnalysisResult): boolean {\n // Only run if at least one class manipulation command is used\n return (\n analysis.commandsUsed.has('add') ||\n analysis.commandsUsed.has('remove') ||\n analysis.commandsUsed.has('toggle')\n );\n }\n\n transform(ast: ASTNode, _analysis: AnalysisResult): ASTNode {\n return walkAndBatch(ast);\n }\n}\n","/**\n * Optimization Passes\n *\n * AST optimization passes that run before code generation.\n */\n\nimport type {\n ASTNode,\n CommandNode,\n OptimizationPass,\n OptimizedAST,\n AnalysisResult,\n BinaryExpressionNode,\n LiteralNode,\n RepeatNode,\n SelectorNode,\n SequenceNode,\n} from '../types/aot-types.js';\nimport { ClassBatchingPass } from './class-batching.js';\n\n// =============================================================================\n// CONSTANT FOLDING PASS\n// =============================================================================\n\n/**\n * Evaluates constant expressions at compile time.\n *\n * Examples:\n * 5 + 3 → 8\n * \"hello\" & \" world\" → \"hello world\"\n * true and false → false\n */\nexport class ConstantFoldingPass implements OptimizationPass {\n readonly name = 'constant-folding';\n\n shouldRun(analysis: AnalysisResult): boolean {\n // Run if there are pure expressions\n return analysis.expressions.pure.length > 0;\n }\n\n transform(ast: ASTNode, _analysis: AnalysisResult): ASTNode {\n return this.foldNode(ast);\n }\n\n private foldNode(node: ASTNode): ASTNode {\n if (!node) return node;\n\n // Process children first (bottom-up)\n const processed = this.processChildren(node);\n\n // Try to fold binary expressions\n if (processed.type === 'binary') {\n return this.foldBinary(processed as BinaryExpressionNode);\n }\n\n return processed;\n }\n\n private processChildren(node: ASTNode): ASTNode {\n const result: Record<string, unknown> = { ...node };\n\n for (const key of Object.keys(node)) {\n const value = node[key];\n\n if (Array.isArray(value)) {\n result[key] = value.map(item =>\n item && typeof item === 'object' && 'type' in item ? this.foldNode(item as ASTNode) : item\n );\n } else if (value && typeof value === 'object' && 'type' in value) {\n result[key] = this.foldNode(value as ASTNode);\n }\n }\n\n return result as ASTNode;\n }\n\n private foldBinary(node: BinaryExpressionNode): ASTNode {\n const left = node.left;\n const right = node.right;\n\n // Both must be literals to fold\n if (left.type !== 'literal' || right.type !== 'literal') {\n return node;\n }\n\n const leftVal = (left as LiteralNode).value;\n const rightVal = (right as LiteralNode).value;\n\n let result: unknown;\n\n switch (node.operator) {\n // Arithmetic\n case '+':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal + rightVal;\n }\n break;\n case '-':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal - rightVal;\n }\n break;\n case '*':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal * rightVal;\n }\n break;\n case '/':\n if (typeof leftVal === 'number' && typeof rightVal === 'number' && rightVal !== 0) {\n result = leftVal / rightVal;\n }\n break;\n case '%':\n if (typeof leftVal === 'number' && typeof rightVal === 'number' && rightVal !== 0) {\n result = leftVal % rightVal;\n }\n break;\n\n // String concatenation\n case '&':\n result = String(leftVal) + String(rightVal);\n break;\n\n // Logical\n case 'and':\n case '&&':\n result = leftVal && rightVal;\n break;\n case 'or':\n case '||':\n result = leftVal || rightVal;\n break;\n\n // Comparison\n case 'is':\n case '==':\n result = leftVal === rightVal;\n break;\n case 'is not':\n case '!=':\n result = leftVal !== rightVal;\n break;\n case '<':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal < rightVal;\n }\n break;\n case '>':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal > rightVal;\n }\n break;\n case '<=':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal <= rightVal;\n }\n break;\n case '>=':\n if (typeof leftVal === 'number' && typeof rightVal === 'number') {\n result = leftVal >= rightVal;\n }\n break;\n }\n\n if (result !== undefined) {\n return {\n type: 'literal',\n value: result,\n } as LiteralNode;\n }\n\n return node;\n }\n}\n\n// =============================================================================\n// SELECTOR CACHING PASS\n// =============================================================================\n\n/**\n * Identifies selectors that are used multiple times and marks them for caching.\n *\n * This pass adds metadata to selector nodes that the code generator can use\n * to generate cached selector lookups.\n */\nexport class SelectorCachingPass implements OptimizationPass {\n readonly name = 'selector-caching';\n\n shouldRun(analysis: AnalysisResult): boolean {\n // Run if there are multiple selector usages\n return analysis.expressions.selectors.some(s => s.usages.length > 1 && s.canCache);\n }\n\n transform(ast: ASTNode, analysis: AnalysisResult): ASTNode {\n // Build set of selectors to cache\n const selectorsToCache = new Set<string>();\n\n for (const info of analysis.expressions.selectors) {\n if (info.usages.length > 1 && info.canCache) {\n selectorsToCache.add(info.selector);\n }\n }\n\n if (selectorsToCache.size === 0) {\n return ast;\n }\n\n // Mark selector nodes for caching\n return this.markSelectors(ast, selectorsToCache);\n }\n\n private markSelectors(node: ASTNode, toCache: Set<string>): ASTNode {\n if (!node) return node;\n\n // Mark selector nodes\n if (node.type === 'selector') {\n const selector = (node as SelectorNode).value;\n if (toCache.has(selector)) {\n return {\n ...node,\n _cached: true,\n _cacheKey: this.generateCacheKey(selector),\n };\n }\n return node;\n }\n\n // Process children\n const result: Record<string, unknown> = { ...node };\n\n for (const key of Object.keys(node)) {\n const value = node[key];\n\n if (Array.isArray(value)) {\n result[key] = value.map(item =>\n item && typeof item === 'object' && 'type' in item\n ? this.markSelectors(item as ASTNode, toCache)\n : item\n );\n } else if (value && typeof value === 'object' && 'type' in value) {\n result[key] = this.markSelectors(value as ASTNode, toCache);\n }\n }\n\n return result as ASTNode;\n }\n\n private generateCacheKey(selector: string): string {\n // Generate a short cache key from the selector\n return (\n '_sel_' +\n selector\n .replace(/[^a-zA-Z0-9]/g, '_')\n .replace(/_+/g, '_')\n .slice(0, 20)\n );\n }\n}\n\n// =============================================================================\n// DEAD CODE ELIMINATION PASS\n// =============================================================================\n\n/**\n * Removes unreachable code after halt, exit, return, or throw.\n */\nexport class DeadCodeEliminationPass implements OptimizationPass {\n readonly name = 'dead-code-elimination';\n\n shouldRun(analysis: AnalysisResult): boolean {\n // Run if there are control flow statements\n return analysis.controlFlow.canThrow;\n }\n\n transform(ast: ASTNode, _analysis: AnalysisResult): ASTNode {\n return this.eliminateDeadCode(ast) as ASTNode;\n }\n\n private eliminateDeadCode(node: ASTNode | ASTNode[]): ASTNode | ASTNode[] {\n if (!node) return node;\n\n // Process arrays (command sequences)\n if (Array.isArray(node)) {\n return this.eliminateFromArray(node);\n }\n\n // Process body arrays in nodes\n const result: Record<string, unknown> = { ...node };\n\n for (const key of ['body', 'thenBranch', 'elseBranch']) {\n const value = node[key];\n if (Array.isArray(value)) {\n result[key] = this.eliminateFromArray(value as ASTNode[]);\n }\n }\n\n // Process children\n for (const key of Object.keys(node)) {\n if (['body', 'thenBranch', 'elseBranch'].includes(key)) continue;\n\n const value = node[key];\n if (value && typeof value === 'object' && 'type' in value) {\n result[key] = this.eliminateDeadCode(value as ASTNode);\n }\n }\n\n return result as ASTNode;\n }\n\n private eliminateFromArray(nodes: ASTNode[]): ASTNode[] {\n const result: ASTNode[] = [];\n\n for (const node of nodes) {\n const processed = this.eliminateDeadCode(node);\n result.push(processed as ASTNode);\n\n // Check if this terminates execution\n if (this.isTerminator(node)) {\n // Everything after this is dead code\n break;\n }\n }\n\n return result;\n }\n\n private isTerminator(node: ASTNode): boolean {\n if (node.type === 'command') {\n return ['halt', 'exit', 'return', 'throw'].includes((node as CommandNode).name);\n }\n return false;\n }\n}\n\n// =============================================================================\n// LOOP UNROLLING PASS\n// =============================================================================\n\n/**\n * Unrolls small fixed-count loops.\n *\n * Example:\n * repeat 3 times add .active end\n * Becomes:\n * add .active\n * add .active\n * add .active\n */\nexport class LoopUnrollingPass implements OptimizationPass {\n readonly name = 'loop-unrolling';\n\n private maxUnrollCount = 5;\n\n shouldRun(analysis: AnalysisResult): boolean {\n return analysis.controlFlow.hasLoops;\n }\n\n transform(ast: ASTNode, _analysis: AnalysisResult): ASTNode {\n return this.unrollLoops(ast);\n }\n\n private unrollLoops(node: ASTNode): ASTNode {\n if (!node) return node;\n\n // Check if this is an unrollable repeat\n if (node.type === 'repeat') {\n const unrolled = this.tryUnroll(node);\n if (unrolled) {\n return unrolled;\n }\n }\n\n // Process children\n const result: Record<string, unknown> = { ...node };\n\n for (const key of Object.keys(node)) {\n const value = node[key];\n\n if (Array.isArray(value)) {\n result[key] = value.map(item =>\n item && typeof item === 'object' && 'type' in item\n ? this.unrollLoops(item as ASTNode)\n : item\n );\n } else if (value && typeof value === 'object' && 'type' in value) {\n result[key] = this.unrollLoops(value as ASTNode);\n }\n }\n\n return result as ASTNode;\n }\n\n private tryUnroll(node: ASTNode): ASTNode | null {\n const repeatNode = node as RepeatNode;\n\n // Must have a fixed numeric count\n if (typeof repeatNode.count !== 'number') {\n return null;\n }\n\n const count = repeatNode.count;\n const body = repeatNode.body ?? [];\n\n // Don't unroll if too many iterations\n if (count > this.maxUnrollCount) {\n return null;\n }\n\n // Don't unroll if body is too large\n if (body.length > 3) {\n return null;\n }\n\n // Don't unroll if body uses 'index' variable\n if (this.usesIndex(body)) {\n return null;\n }\n\n // Unroll: create sequence of body copies\n const unrolled: ASTNode[] = [];\n for (let i = 0; i < count; i++) {\n unrolled.push(...this.cloneBody(body));\n }\n\n return {\n type: 'sequence',\n commands: unrolled,\n _unrolled: true,\n } as SequenceNode;\n }\n\n private usesIndex(nodes: ASTNode[]): boolean {\n for (const node of nodes) {\n if (this.nodeUsesIndex(node)) {\n return true;\n }\n }\n return false;\n }\n\n private nodeUsesIndex(node: ASTNode): boolean {\n if (!node) return false;\n\n // Check identifiers\n if (node.type === 'identifier') {\n if (node.value === 'index' || node.value === ':index') {\n return true;\n }\n }\n if (node.type === 'variable') {\n if (node.name === 'index' || node.name === ':index') {\n return true;\n }\n }\n\n // Check children\n for (const key of Object.keys(node)) {\n const value = node[key];\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item && typeof item === 'object' && 'type' in item) {\n if (this.nodeUsesIndex(item as ASTNode)) {\n return true;\n }\n }\n }\n } else if (value && typeof value === 'object' && 'type' in value) {\n if (this.nodeUsesIndex(value as ASTNode)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private cloneBody(nodes: ASTNode[]): ASTNode[] {\n return JSON.parse(JSON.stringify(nodes));\n }\n}\n\n// =============================================================================\n// OPTIMIZATION PIPELINE\n// =============================================================================\n\n/**\n * Runs all optimization passes on an AST.\n */\nexport class OptimizationPipeline {\n private passes: OptimizationPass[] = [\n new ConstantFoldingPass(),\n new SelectorCachingPass(),\n new DeadCodeEliminationPass(),\n new ClassBatchingPass(),\n new LoopUnrollingPass(),\n ];\n\n /**\n * Run all applicable optimizations on the AST.\n */\n optimize(ast: ASTNode, analysis: AnalysisResult, level: 0 | 1 | 2 = 2): OptimizedAST {\n if (level === 0) {\n return ast as OptimizedAST;\n }\n\n let current = ast;\n const appliedOptimizations: string[] = [];\n\n const passesToRun =\n level === 1\n ? this.passes.slice(0, 2) // Basic: constant folding and selector caching\n : this.passes; // Full: all passes\n\n for (const pass of passesToRun) {\n if (pass.shouldRun(analysis)) {\n current = pass.transform(current, analysis);\n appliedOptimizations.push(pass.name);\n }\n }\n\n return {\n ...current,\n _optimizations: appliedOptimizations,\n } as OptimizedAST;\n }\n\n /**\n * Add a custom optimization pass.\n */\n addPass(pass: OptimizationPass): void {\n this.passes.push(pass);\n }\n}\n\n// =============================================================================\n// CONVENIENCE EXPORTS\n// =============================================================================\n\n/**\n * Create a default optimization pipeline.\n */\nexport function createOptimizer(): OptimizationPipeline {\n return /*#__PURE__*/ new OptimizationPipeline();\n}\n\n/**\n * Optimize an AST with default settings.\n */\nexport function optimize(\n ast: ASTNode,\n analysis: AnalysisResult,\n level: 0 | 1 | 2 = 2\n): OptimizedAST {\n const pipeline = new OptimizationPipeline();\n return pipeline.optimize(ast, analysis, level);\n}\n\nexport default OptimizationPipeline;\n","/**\n * Init Block Pre-Rendering\n *\n * Analyzes init blocks for pure/static DOM writes and applies them directly\n * to the HTML template at build time, eliminating flash-of-empty-content.\n *\n * Pure commands are those that:\n * - Write to the DOM (put, add class, remove class, set attribute)\n * - Target a statically-known #id selector\n * - Use literal values (not variables, expressions, or function calls)\n *\n * Pre-rendered commands are stripped from the init block in the output HTML.\n * Impure commands remain for normal runtime execution.\n */\n\nimport type {\n ASTNode,\n CommandNode,\n SelectorNode,\n LiteralNode,\n PreRenderResult,\n} from '../types/aot-types.js';\n\n// =============================================================================\n// PURITY ANALYSIS\n// =============================================================================\n\n/**\n * A command classified as pure and safe to pre-render.\n */\nexport interface PureCommand {\n type: 'addClass' | 'removeClass' | 'putContent' | 'setAttribute';\n /** CSS ID selector target (without #) */\n targetId: string;\n /** Value to apply */\n value: string;\n /** For setAttribute: attribute name */\n attrName?: string;\n}\n\n/**\n * Classify a command as pure (pre-renderable) or impure.\n * Only #id targets are supported — class/complex selectors are left for runtime.\n */\nexport function classifyCommand(node: ASTNode): PureCommand | null {\n if (node.type !== 'command') return null;\n const cmd = node as CommandNode;\n\n switch (cmd.name) {\n case 'add':\n return classifyAddCommand(cmd);\n case 'remove':\n return classifyRemoveCommand(cmd);\n case 'put':\n return classifyPutCommand(cmd);\n case 'set':\n return classifySetCommand(cmd);\n default:\n return null;\n }\n}\n\nfunction getIdTarget(cmd: CommandNode): string | null {\n if (!cmd.target) return null;\n if (cmd.target.type !== 'selector') return null;\n const sel = (cmd.target as SelectorNode).value;\n if (!sel.startsWith('#')) return null;\n return sel.slice(1);\n}\n\nfunction classifyAddCommand(cmd: CommandNode): PureCommand | null {\n const targetId = getIdTarget(cmd);\n if (!targetId) return null;\n\n const args = cmd.args ?? [];\n if (args.length === 0) return null;\n\n const arg = args[0];\n if (arg.type !== 'selector') return null;\n const val = (arg as SelectorNode).value;\n if (!val.startsWith('.')) return null;\n\n return { type: 'addClass', targetId, value: val.slice(1) };\n}\n\nfunction classifyRemoveCommand(cmd: CommandNode): PureCommand | null {\n const targetId = getIdTarget(cmd);\n if (!targetId) return null;\n\n const args = cmd.args ?? [];\n if (args.length === 0) return null;\n\n const arg = args[0];\n if (arg.type !== 'selector') return null;\n const val = (arg as SelectorNode).value;\n if (!val.startsWith('.')) return null;\n\n return { type: 'removeClass', targetId, value: val.slice(1) };\n}\n\nfunction classifyPutCommand(cmd: CommandNode): PureCommand | null {\n const targetId = getIdTarget(cmd);\n if (!targetId) return null;\n\n const args = cmd.args ?? [];\n if (args.length === 0) return null;\n\n const arg = args[0];\n if (arg.type !== 'literal') return null;\n const val = (arg as LiteralNode).value;\n if (typeof val !== 'string') return null;\n\n return { type: 'putContent', targetId, value: val };\n}\n\nfunction classifySetCommand(cmd: CommandNode): PureCommand | null {\n // Only support set @attr to 'value' form\n const targetId = getIdTarget(cmd);\n if (!targetId) return null;\n\n const args = cmd.args ?? [];\n if (args.length < 2) return null;\n\n // First arg should be identifier starting with @\n const attrArg = args[0];\n if (attrArg.type !== 'identifier') return null;\n const attrValue = (attrArg as { value?: string }).value;\n if (!attrValue || !attrValue.startsWith('@')) return null;\n const attrName = attrValue.slice(1);\n\n // Second arg should be literal value\n const valArg = args[1];\n if (valArg.type !== 'literal') return null;\n const val = (valArg as LiteralNode).value;\n if (typeof val !== 'string' && typeof val !== 'number') return null;\n\n return { type: 'setAttribute', targetId, value: String(val), attrName };\n}\n\n/**\n * Classify all commands in an init block as pure or impure.\n */\nexport function classifyInitCommands(commands: ASTNode[]): {\n pure: { index: number; command: PureCommand }[];\n impure: { index: number; node: ASTNode }[];\n} {\n const pure: { index: number; command: PureCommand }[] = [];\n const impure: { index: number; node: ASTNode }[] = [];\n\n for (let i = 0; i < commands.length; i++) {\n const classified = classifyCommand(commands[i]);\n if (classified) {\n pure.push({ index: i, command: classified });\n } else {\n impure.push({ index: i, node: commands[i] });\n }\n }\n\n return { pure, impure };\n}\n\n// =============================================================================\n// HTML MUTATION\n// =============================================================================\n\n/**\n * Apply a pure command to an HTML string, modifying the target element in-place.\n * Returns the modified HTML, or the original if the target element was not found.\n */\nexport function applyPureCommand(html: string, cmd: PureCommand): string {\n switch (cmd.type) {\n case 'addClass':\n return addClassToElement(html, cmd.targetId, cmd.value);\n case 'removeClass':\n return removeClassFromElement(html, cmd.targetId, cmd.value);\n case 'putContent':\n return putContentIntoElement(html, cmd.targetId, cmd.value);\n case 'setAttribute':\n return setAttributeOnElement(html, cmd.targetId, cmd.attrName!, cmd.value);\n default:\n return html;\n }\n}\n\n/**\n * Find an element by ID in HTML and apply a transform to its opening tag.\n * Returns original HTML if element not found.\n */\nfunction transformElementById(\n html: string,\n id: string,\n transform: (openingTag: string) => string\n): string {\n // Match opening tag containing id=\"<id>\"\n const idPattern = new RegExp(`(<[^>]*\\\\bid=[\"']${escapeRegExp(id)}[\"'][^>]*>)`, 'i');\n const match = html.match(idPattern);\n if (!match) return html;\n\n return html.replace(match[1], transform(match[1]));\n}\n\nfunction addClassToElement(html: string, id: string, className: string): string {\n return transformElementById(html, id, tag => {\n const classMatch = tag.match(/\\bclass=[\"']([^\"']*)[\"']/i);\n if (classMatch) {\n const existing = classMatch[1];\n const classes = existing.split(/\\s+/).filter(Boolean);\n if (!classes.includes(className)) {\n classes.push(className);\n }\n return tag.replace(classMatch[0], `class=\"${classes.join(' ')}\"`);\n }\n // No existing class attribute — add one before the closing >\n return tag.replace(/>$/, ` class=\"${className}\">`);\n });\n}\n\nfunction removeClassFromElement(html: string, id: string, className: string): string {\n return transformElementById(html, id, tag => {\n const classMatch = tag.match(/\\bclass=[\"']([^\"']*)[\"']/i);\n if (!classMatch) return tag;\n const classes = classMatch[1].split(/\\s+/).filter(c => c !== className);\n if (classes.length === 0) {\n return tag.replace(classMatch[0], '').replace(/\\s+>/, '>');\n }\n return tag.replace(classMatch[0], `class=\"${classes.join(' ')}\"`);\n });\n}\n\nfunction putContentIntoElement(html: string, id: string, content: string): string {\n // Match opening tag, then capture everything until matching closing tag\n const idPattern = new RegExp(\n `(<[a-zA-Z][^>]*\\\\bid=[\"']${escapeRegExp(id)}[\"'][^>]*>)((?:(?!<\\\\/[a-zA-Z]).)*?)(<\\\\/[a-zA-Z][^>]*>)`,\n 'is'\n );\n const match = html.match(idPattern);\n if (!match) return html;\n\n return html.replace(match[0], `${match[1]}${escapeHtml(content)}${match[3]}`);\n}\n\nfunction setAttributeOnElement(html: string, id: string, attrName: string, value: string): string {\n return transformElementById(html, id, tag => {\n const attrPattern = new RegExp(`\\\\b${escapeRegExp(attrName)}=[\"'][^\"']*[\"']`, 'i');\n const attrMatch = tag.match(attrPattern);\n if (attrMatch) {\n return tag.replace(attrMatch[0], `${attrName}=\"${escapeHtml(value)}\"`);\n }\n return tag.replace(/>$/, ` ${attrName}=\"${escapeHtml(value)}\">`);\n });\n}\n\n// =============================================================================\n// UTILITIES\n// =============================================================================\n\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n}\n\n// =============================================================================\n// PUBLIC API\n// =============================================================================\n\n/**\n * Pre-render pure init commands into an HTML template.\n *\n * @param html - The HTML template string\n * @param initCommands - Parsed commands from an init block\n * @returns Modified HTML, remaining impure commands, and count of pre-rendered commands\n */\nexport function preRenderInitBlock(html: string, initCommands: ASTNode[]): PreRenderResult {\n const { pure, impure } = classifyInitCommands(initCommands);\n\n let modifiedHtml = html;\n let preRenderedCount = 0;\n\n for (const { command } of pure) {\n const before = modifiedHtml;\n modifiedHtml = applyPureCommand(modifiedHtml, command);\n if (modifiedHtml !== before) {\n preRenderedCount++;\n }\n }\n\n return {\n html: modifiedHtml,\n remainingInitCommands: impure.map(i => i.node),\n preRenderedCount,\n };\n}\n","/**\n * Expression Transforms\n *\n * Transforms hyperscript expression AST nodes to JavaScript code.\n */\n\nimport type {\n ASTNode,\n CodegenContext,\n LiteralNode,\n IdentifierNode,\n SelectorNode,\n VariableNode,\n BinaryExpressionNode,\n UnaryExpressionNode,\n MemberExpressionNode,\n PossessiveNode,\n CallExpressionNode,\n PositionalNode,\n ConditionalNode,\n ArrayExpressionNode,\n ObjectExpressionNode,\n TemplateNode,\n} from '../types/aot-types.js';\n\n// =============================================================================\n// SANITIZATION UTILITIES\n// =============================================================================\n\n/**\n * Sanitize a class name for safe interpolation into JavaScript string literals.\n */\nexport function sanitizeClassName(name: string): string | null {\n // CSS class names: must start with letter, underscore, or hyphen\n // followed by letters, digits, underscores, or hyphens\n if (!/^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(name)) {\n return null;\n }\n return name;\n}\n\n/**\n * Sanitize a CSS selector for safe interpolation into JavaScript string literals.\n */\nexport function sanitizeSelector(selector: string): string {\n return selector\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\0/g, '');\n}\n\n/**\n * Sanitize an identifier for use as a JavaScript variable name.\n */\nexport function sanitizeIdentifier(name: string): string {\n // Replace invalid characters with underscores\n return name.replace(/[^a-zA-Z0-9_$]/g, '_');\n}\n\n// =============================================================================\n// EXPRESSION CODEGEN CLASS\n// =============================================================================\n\n/**\n * Code generator for expressions.\n */\nexport class ExpressionCodegen {\n private ctx: CodegenContext;\n\n constructor(ctx: CodegenContext) {\n this.ctx = ctx;\n }\n\n /**\n * Generate JavaScript code for an expression.\n */\n generate(node: ASTNode): string {\n if (!node) {\n return 'undefined';\n }\n\n switch (node.type) {\n case 'literal':\n return this.generateLiteral(node as LiteralNode);\n\n case 'identifier':\n return this.generateIdentifier(node as IdentifierNode);\n\n case 'selector':\n return this.generateSelector(node as SelectorNode);\n\n case 'variable':\n return this.generateVariable(node as VariableNode);\n\n case 'binary':\n return this.generateBinary(node as BinaryExpressionNode);\n\n case 'member':\n return this.generateMember(node as MemberExpressionNode);\n\n case 'possessive':\n return this.generatePossessive(node as PossessiveNode);\n\n case 'call':\n return this.generateCall(node as CallExpressionNode);\n\n case 'positional':\n return this.generatePositional(node as PositionalNode);\n\n case 'array':\n return this.generateArray(node);\n\n case 'object':\n return this.generateObject(node);\n\n case 'template':\n return this.generateTemplate(node);\n\n case 'unary':\n return this.generateUnary(node);\n\n case 'conditional':\n return this.generateConditional(node);\n\n case 'sequence':\n return 'undefined';\n\n default:\n // Unknown node type - return as-is if it has a value\n if ('value' in node) {\n return JSON.stringify(node.value);\n }\n throw new Error(`Unknown expression type: ${node.type}`);\n }\n }\n\n // ===========================================================================\n // LITERAL EXPRESSIONS\n // ===========================================================================\n\n private generateLiteral(node: LiteralNode): string {\n const value = node.value;\n\n if (value === null) {\n return 'null';\n }\n if (value === undefined) {\n return 'undefined';\n }\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'boolean') {\n return String(value);\n }\n\n return JSON.stringify(value);\n }\n\n // ===========================================================================\n // IDENTIFIER EXPRESSIONS\n // ===========================================================================\n\n private generateIdentifier(node: IdentifierNode): string {\n const name = node.value ?? node.name ?? '';\n\n // Context variables\n switch (name) {\n case 'me':\n case 'my':\n return '_ctx.me';\n case 'you':\n case 'your':\n return '_ctx.you';\n case 'it':\n case 'result':\n return '_ctx.it';\n case 'event':\n return '_ctx.event';\n case 'body':\n return 'document.body';\n case 'document':\n return 'document';\n case 'window':\n return 'window';\n case 'true':\n return 'true';\n case 'false':\n return 'false';\n case 'null':\n return 'null';\n case 'undefined':\n return 'undefined';\n default:\n // Check if it's a local variable reference\n if (name.startsWith(':')) {\n const varName = sanitizeIdentifier(name.slice(1));\n return `_ctx.locals.get('${varName}')`;\n }\n // Global variable reference\n if (name.startsWith('$') || name.startsWith('::')) {\n const varName = sanitizeIdentifier(name.replace(/^(\\$|::)/, ''));\n this.ctx.requireHelper('globals');\n return `_rt.globals.get('${varName}')`;\n }\n // Plain identifier - assume it's defined elsewhere\n return sanitizeIdentifier(name);\n }\n }\n\n // ===========================================================================\n // SELECTOR EXPRESSIONS\n // ===========================================================================\n\n private generateSelector(node: SelectorNode): string {\n const selector = node.value;\n const sanitized = sanitizeSelector(selector);\n\n // Check if we can use a cached selector\n if (this.ctx.canCacheSelector(selector)) {\n return this.ctx.getCachedSelector(selector);\n }\n\n // ID selector optimization\n if (selector.startsWith('#') && !selector.includes(' ') && !selector.includes('.')) {\n const id = selector.slice(1);\n return `document.getElementById('${sanitizeSelector(id)}')`;\n }\n\n // General selector\n return `document.querySelector('${sanitized}')`;\n }\n\n // ===========================================================================\n // VARIABLE EXPRESSIONS\n // ===========================================================================\n\n private generateVariable(node: VariableNode): string {\n const name = node.name;\n const varName = sanitizeIdentifier(\n name.startsWith(':') || name.startsWith('$') ? name.slice(1) : name\n );\n\n switch (node.scope) {\n case 'local':\n return `_ctx.locals.get('${varName}')`;\n case 'global':\n this.ctx.requireHelper('globals');\n return `_rt.globals.get('${varName}')`;\n case 'element':\n return `_ctx.me.${varName}`;\n default:\n return `_ctx.locals.get('${varName}')`;\n }\n }\n\n // ===========================================================================\n // BINARY EXPRESSIONS\n // ===========================================================================\n\n private generateBinary(node: BinaryExpressionNode): string {\n const left = this.generate(node.left);\n const right = this.generate(node.right);\n const op = node.operator;\n\n // Map hyperscript operators to JavaScript\n switch (op) {\n // Equality\n case 'is':\n case '==':\n return `(${left} === ${right})`;\n case 'is not':\n case '!=':\n return `(${left} !== ${right})`;\n\n // Comparison\n case '<':\n case '>':\n case '<=':\n case '>=':\n return `(${left} ${op} ${right})`;\n\n // Arithmetic\n case '+':\n case '-':\n case '*':\n case '/':\n case '%':\n return `(${left} ${op} ${right})`;\n\n // Logical\n case 'and':\n case '&&':\n return `(${left} && ${right})`;\n case 'or':\n case '||':\n return `(${left} || ${right})`;\n\n // String/collection operators\n case 'contains':\n this.ctx.requireHelper('contains');\n return `_rt.contains(${left}, ${right})`;\n\n case 'matches':\n this.ctx.requireHelper('matches');\n return `_rt.matches(${left}, ${right})`;\n\n case 'starts with':\n return `${left}.startsWith(${right})`;\n\n case 'ends with':\n return `${left}.endsWith(${right})`;\n\n // Class check\n case 'has':\n // \"element has .class\" pattern\n if (node.right.type === 'selector') {\n const sel = (node.right as SelectorNode).value;\n if (sel.startsWith('.')) {\n const className = sanitizeClassName(sel.slice(1));\n if (className) {\n return `${left}.classList.contains('${className}')`;\n }\n }\n }\n this.ctx.requireHelper('contains');\n return `_rt.contains(${left}, ${right})`;\n\n // Type check\n case 'is a':\n case 'is an':\n return `(typeof ${left} === ${right} || ${left} instanceof ${right})`;\n\n case 'is not a':\n case 'is not an':\n return `(typeof ${left} !== ${right} && !(${left} instanceof ${right}))`;\n\n // Concatenation\n case '&':\n return `(String(${left}) + String(${right}))`;\n\n default:\n // Unknown operator - use as-is\n return `(${left} ${op} ${right})`;\n }\n }\n\n // ===========================================================================\n // MEMBER EXPRESSIONS\n // ===========================================================================\n\n private generateMember(node: MemberExpressionNode): string {\n const object = this.generate(node.object);\n\n if (typeof node.property === 'string') {\n const prop = node.property;\n\n // Style property (*opacity, *color, etc.)\n if (prop.startsWith('*')) {\n const styleProp = prop.slice(1);\n return `${object}.style.${styleProp}`;\n }\n\n // Attribute (@disabled, @checked, etc.)\n if (prop.startsWith('@')) {\n const attrName = prop.slice(1);\n return `${object}.getAttribute('${sanitizeSelector(attrName)}')`;\n }\n\n // Computed property\n if (node.computed) {\n return `${object}[${JSON.stringify(prop)}]`;\n }\n\n return `${object}.${sanitizeIdentifier(prop)}`;\n }\n\n // Computed property with expression\n const propExpr = this.generate(node.property as ASTNode);\n return `${object}[${propExpr}]`;\n }\n\n // ===========================================================================\n // POSSESSIVE EXPRESSIONS\n // ===========================================================================\n\n private generatePossessive(node: PossessiveNode): string {\n const object = this.generate(node.object);\n const property = node.property;\n\n // Style property (*opacity, etc.)\n if (property.startsWith('*')) {\n const styleProp = property.slice(1);\n return `${object}.style.${styleProp}`;\n }\n\n // Attribute (@disabled, etc.)\n if (property.startsWith('@')) {\n const attrName = property.slice(1);\n return `${object}.getAttribute('${sanitizeSelector(attrName)}')`;\n }\n\n // Form values pseudo-property\n if (property === 'values') {\n this.ctx.requireHelper('getValues');\n return `_rt.getValues(${object})`;\n }\n\n // Common DOM properties\n const domProps = [\n 'value',\n 'textContent',\n 'innerHTML',\n 'innerText',\n 'outerHTML',\n 'checked',\n 'disabled',\n 'selected',\n 'hidden',\n 'src',\n 'href',\n 'id',\n 'className',\n 'classList',\n 'parentElement',\n 'parentNode',\n 'children',\n 'firstChild',\n 'lastChild',\n 'nextSibling',\n 'previousSibling',\n 'nextElementSibling',\n 'previousElementSibling',\n 'offsetWidth',\n 'offsetHeight',\n 'offsetTop',\n 'offsetLeft',\n 'clientWidth',\n 'clientHeight',\n 'scrollWidth',\n 'scrollHeight',\n 'scrollTop',\n 'scrollLeft',\n ];\n\n if (domProps.includes(property)) {\n return `${object}.${property}`;\n }\n\n // General property access - try property first, then attribute\n this.ctx.requireHelper('getProp');\n return `_rt.getProp(${object}, '${sanitizeSelector(property)}')`;\n }\n\n // ===========================================================================\n // CALL EXPRESSIONS\n // ===========================================================================\n\n private generateCall(node: CallExpressionNode): string {\n const args = (node.args ?? []).map(arg => this.generate(arg)).join(', ');\n\n // Method call\n if (node.callee.type === 'member' || node.callee.type === 'possessive') {\n const memberNode = node.callee as MemberExpressionNode | PossessiveNode;\n const object = this.generate(memberNode.object);\n const method =\n typeof memberNode.property === 'string'\n ? memberNode.property\n : this.generate(memberNode.property as ASTNode);\n\n if (typeof memberNode.property === 'string') {\n return `${object}.${sanitizeIdentifier(memberNode.property)}(${args})`;\n }\n return `${object}[${method}](${args})`;\n }\n\n // Direct function call\n const callee = this.generate(node.callee);\n return `${callee}(${args})`;\n }\n\n // ===========================================================================\n // POSITIONAL EXPRESSIONS\n // ===========================================================================\n\n private generatePositional(node: PositionalNode): string {\n const position = node.position;\n const target = node.target ? this.generate(node.target) : null;\n\n switch (position) {\n case 'first':\n if (target) {\n // first in collection\n if (node.target?.type === 'selector') {\n const sel = (node.target as SelectorNode).value;\n return `document.querySelector('${sanitizeSelector(sel)}')`;\n }\n this.ctx.requireHelper('first');\n return `_rt.first(${target})`;\n }\n return '_ctx.me';\n\n case 'last':\n if (target) {\n if (node.target?.type === 'selector') {\n const sel = (node.target as SelectorNode).value;\n const sanitized = sanitizeSelector(sel);\n return `(()=>{const _els=document.querySelectorAll('${sanitized}');return _els[_els.length-1]})()`;\n }\n this.ctx.requireHelper('last');\n return `_rt.last(${target})`;\n }\n return '_ctx.me';\n\n case 'random':\n if (target) {\n this.ctx.requireHelper('random');\n return `_rt.random(${target})`;\n }\n return '_ctx.me';\n\n case 'next':\n return '_ctx.me.nextElementSibling';\n\n case 'previous':\n return '_ctx.me.previousElementSibling';\n\n case 'closest':\n if (target && node.target?.type === 'selector') {\n const sel = (node.target as SelectorNode).value;\n return `_ctx.me.closest('${sanitizeSelector(sel)}')`;\n }\n if (target) {\n return `_ctx.me.closest(${target})`;\n }\n return '_ctx.me.parentElement';\n\n case 'parent':\n return '_ctx.me.parentElement';\n\n default:\n throw new Error(`Unknown positional: ${position}`);\n }\n }\n\n // ===========================================================================\n // ARRAY EXPRESSIONS\n // ===========================================================================\n\n private generateArray(node: ArrayExpressionNode): string {\n const elements = node.elements ?? [];\n const items = elements.map(el => this.generate(el)).join(', ');\n return `[${items}]`;\n }\n\n // ===========================================================================\n // OBJECT EXPRESSIONS\n // ===========================================================================\n\n private generateObject(node: ObjectExpressionNode): string {\n const properties = node.properties ?? [];\n const pairs = properties\n .map(prop => {\n const key =\n typeof prop.key === 'string' ? JSON.stringify(prop.key) : this.generate(prop.key);\n const value = this.generate(prop.value);\n return `${key}: ${value}`;\n })\n .join(', ');\n return `{${pairs}}`;\n }\n\n // ===========================================================================\n // TEMPLATE EXPRESSIONS\n // ===========================================================================\n\n private generateTemplate(node: TemplateNode): string {\n const parts = node.parts ?? [];\n const segments = parts\n .map(part => {\n if (typeof part === 'string') {\n return part.replace(/`/g, '\\\\`').replace(/\\$/g, '\\\\$');\n }\n return '${' + this.generate(part) + '}';\n })\n .join('');\n return '`' + segments + '`';\n }\n\n // ===========================================================================\n // UNARY EXPRESSIONS\n // ===========================================================================\n\n private generateUnary(node: UnaryExpressionNode): string {\n const operand = this.generate(node.operand);\n\n switch (node.operator) {\n case 'not':\n case '!':\n return `!${operand}`;\n case '-':\n return `-${operand}`;\n case '+':\n return `+${operand}`;\n case 'no':\n return `!${operand}`;\n default:\n return `${node.operator}${operand}`;\n }\n }\n\n // ===========================================================================\n // CONDITIONAL EXPRESSIONS\n // ===========================================================================\n\n private generateConditional(node: ConditionalNode): string {\n const condition = this.generate(node.condition);\n const consequent = this.generate(node.consequent);\n const alternate = this.generate(node.alternate);\n return `(${condition} ? ${consequent} : ${alternate})`;\n }\n}\n\n// =============================================================================\n// CONVENIENCE FUNCTION\n// =============================================================================\n\n/**\n * Generate JavaScript code for an expression.\n */\nexport function generateExpression(node: ASTNode, ctx: CodegenContext): string {\n const codegen = new ExpressionCodegen(ctx);\n return codegen.generate(node);\n}\n\nexport default ExpressionCodegen;\n","/**\n * Command Transforms\n *\n * Transforms hyperscript command AST nodes to JavaScript code.\n * Each command has a dedicated code generator.\n */\n\nimport type {\n ASTNode,\n CommandNode,\n CodegenContext,\n GeneratedExpression,\n HtmlLiteralNode,\n IdentifierNode,\n LiteralNode,\n SelectorNode,\n VariableNode,\n PossessiveNode,\n IfNode,\n RepeatNode,\n ForEachNode,\n WhileNode,\n} from '../types/aot-types.js';\nimport {\n ExpressionCodegen,\n sanitizeClassName,\n sanitizeSelector,\n sanitizeIdentifier,\n} from './expression-transforms.js';\n\n// =============================================================================\n// COMMAND CODEGEN INTERFACE\n// =============================================================================\n\n/**\n * Interface for command code generators.\n */\nexport interface CommandCodegen {\n /** Command name this generator handles */\n readonly command: string;\n\n /** Generate JavaScript for this command */\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null;\n}\n\n// =============================================================================\n// COMMAND GENERATOR IMPLEMENTATIONS\n// =============================================================================\n\n/**\n * Toggle command: toggle .class [on target]\n */\nclass ToggleCodegen implements CommandCodegen {\n readonly command = 'toggle';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n if (args.length === 0) return null;\n\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n const arg = args[0];\n\n // Class toggle: .active\n if (arg.type === 'selector') {\n const selector = (arg as SelectorNode).value;\n if (selector.startsWith('.')) {\n const className = sanitizeClassName(selector.slice(1));\n if (!className) return null;\n\n if (target === '_ctx.me') {\n return {\n code: `_ctx.me.classList.toggle('${className}')`,\n async: false,\n sideEffects: true,\n };\n }\n\n // Multiple elements\n return {\n code: `Array.from(document.querySelectorAll('${sanitizeSelector(selector.slice(1))}')).forEach(el => el.classList.toggle('${className}'))`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Attribute toggle: @disabled\n if (arg.type === 'identifier') {\n const value = (arg as { value?: string }).value ?? '';\n if (value.startsWith('@')) {\n const attrName = value.slice(1);\n ctx.requireHelper('toggleAttr');\n return {\n code: `_rt.toggleAttr(${target}, '${sanitizeSelector(attrName)}')`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Generic toggle\n ctx.requireHelper('toggle');\n return {\n code: `_rt.toggle(${ctx.generateExpression(arg)}, ${target})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Add command: add .class [to target]\n */\nclass AddCodegen implements CommandCodegen {\n readonly command = 'add';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n if (args.length === 0) return null;\n\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n const arg = args[0];\n\n // Class add: .active\n if (arg.type === 'selector') {\n const selector = (arg as SelectorNode).value;\n if (selector.startsWith('.')) {\n const className = sanitizeClassName(selector.slice(1));\n if (!className) return null;\n\n if (target === '_ctx.me') {\n return {\n code: `_ctx.me.classList.add('${className}')`,\n async: false,\n sideEffects: true,\n };\n }\n\n return {\n code: `${target}.classList.add('${className}')`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // HTML element creation: <div.class/>\n if (arg.type === 'htmlLiteral') {\n const tagNode = arg as HtmlLiteralNode;\n const tag = tagNode.tag ?? 'div';\n const classes = tagNode.classes ?? [];\n const id = tagNode.id;\n\n let code = `(() => { const _el = document.createElement('${tag}');`;\n if (classes.length > 0) {\n code += ` _el.className = '${classes.join(' ')}';`;\n }\n if (id) {\n code += ` _el.id = '${id}';`;\n }\n code += ` ${target}.appendChild(_el); return _el; })()`;\n\n return { code, async: false, sideEffects: true };\n }\n\n // Attribute add\n ctx.requireHelper('addClass');\n return {\n code: `_rt.addClass(${target}, ${ctx.generateExpression(arg)})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Remove command: remove .class [from target] or remove element\n */\nclass RemoveCodegen implements CommandCodegen {\n readonly command = 'remove';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n\n // No args = remove the element itself\n if (args.length === 0) {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n return {\n code: `${target}.remove()`,\n async: false,\n sideEffects: true,\n };\n }\n\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n const arg = args[0];\n\n // Class remove: .active\n if (arg.type === 'selector') {\n const selector = (arg as SelectorNode).value;\n if (selector.startsWith('.')) {\n const className = sanitizeClassName(selector.slice(1));\n if (!className) return null;\n\n return {\n code: `${target}.classList.remove('${className}')`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n ctx.requireHelper('removeClass');\n return {\n code: `_rt.removeClass(${target}, ${ctx.generateExpression(arg)})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Set command: set :var to value or set element's property to value\n */\nclass SetCodegen implements CommandCodegen {\n readonly command = 'set';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const modifiers = node.modifiers as Record<string, ASTNode> | undefined;\n const roles = node.roles;\n\n // Resolve target and value from roles, modifiers, or args\n const targetNode = roles?.destination ?? args[0];\n const valueNode = roles?.patient ?? (modifiers?.to as ASTNode) ?? args[1];\n\n if (!targetNode || !valueNode) return null;\n\n const value = ctx.generateExpression(valueNode);\n\n // Local variable: :varName\n if (targetNode.type === 'variable') {\n const varNode = targetNode as VariableNode;\n const name = varNode.name.startsWith(':') ? varNode.name.slice(1) : varNode.name;\n const safeName = sanitizeIdentifier(name);\n\n if (varNode.scope === 'local') {\n return {\n code: `_ctx.locals.set('${safeName}', ${value})`,\n async: false,\n sideEffects: true,\n };\n }\n\n if (varNode.scope === 'global') {\n ctx.requireHelper('globals');\n return {\n code: `_rt.globals.set('${safeName}', ${value})`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Property assignment: element's property\n if (targetNode.type === 'possessive') {\n const possessive = targetNode as PossessiveNode;\n const obj = ctx.generateExpression(possessive.object);\n const prop = possessive.property;\n\n // Style property\n if (prop.startsWith('*')) {\n const styleProp = prop.slice(1);\n return {\n code: `${obj}.style.${styleProp} = ${value}`,\n async: false,\n sideEffects: true,\n };\n }\n\n // Attribute\n if (prop.startsWith('@')) {\n const attrName = prop.slice(1);\n return {\n code: `${obj}.setAttribute('${sanitizeSelector(attrName)}', ${value})`,\n async: false,\n sideEffects: true,\n };\n }\n\n return {\n code: `${obj}.${sanitizeIdentifier(prop)} = ${value}`,\n async: false,\n sideEffects: true,\n };\n }\n\n // Member expression assignment\n if (targetNode.type === 'member') {\n const memberCode = ctx.generateExpression(targetNode);\n return {\n code: `${memberCode} = ${value}`,\n async: false,\n sideEffects: true,\n };\n }\n\n return null;\n }\n}\n\n/**\n * Put command: put value into/before/after target\n */\nclass PutCodegen implements CommandCodegen {\n readonly command = 'put';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const modifiers = node.modifiers as Record<string, unknown> | undefined;\n\n // Resolve content from roles or args\n const contentNode = roles?.patient ?? args[0];\n if (!contentNode) return null;\n\n const content = ctx.generateExpression(contentNode as ASTNode);\n\n // Resolve target: from roles, or from the modifier value, or from node.target\n let target = '_ctx.me';\n if (roles?.destination) {\n target = ctx.generateExpression(roles.destination);\n } else if (modifiers) {\n // Semantic parser uses modifier keys as position: modifiers.into = target, modifiers.before = target\n for (const key of ['into', 'before', 'after']) {\n if (modifiers[key] && typeof modifiers[key] === 'object') {\n target = ctx.generateExpression(modifiers[key] as ASTNode);\n break;\n }\n }\n }\n if (target === '_ctx.me' && node.target) {\n target = ctx.generateExpression(node.target);\n }\n\n // Detect position: from roles.method, modifier keys, or modifiers.position\n let modifier = 'into';\n if (roles?.method && (roles.method as { value?: unknown }).value) {\n modifier = String((roles.method as { value?: unknown }).value);\n } else if (modifiers) {\n if (modifiers.before) modifier = 'before';\n else if (modifiers.after) modifier = 'after';\n else if (typeof modifiers.position === 'string') modifier = modifiers.position;\n }\n\n switch (modifier) {\n case 'into':\n return {\n code: `${target}.innerHTML = ${content}`,\n async: false,\n sideEffects: true,\n };\n case 'before':\n return {\n code: `${target}.insertAdjacentHTML('beforebegin', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'after':\n return {\n code: `${target}.insertAdjacentHTML('afterend', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'at start of':\n case 'start':\n return {\n code: `${target}.insertAdjacentHTML('afterbegin', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'at end of':\n case 'end':\n return {\n code: `${target}.insertAdjacentHTML('beforeend', ${content})`,\n async: false,\n sideEffects: true,\n };\n default:\n return {\n code: `${target}.innerHTML = ${content}`,\n async: false,\n sideEffects: true,\n };\n }\n }\n}\n\n/**\n * Show command: show [target]\n */\nclass ShowCodegen implements CommandCodegen {\n readonly command = 'show';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n return {\n code: `${target}.style.display = ''`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Hide command: hide [target]\n */\nclass HideCodegen implements CommandCodegen {\n readonly command = 'hide';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n return {\n code: `${target}.style.display = 'none'`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Focus command: focus [target]\n */\nclass FocusCodegen implements CommandCodegen {\n readonly command = 'focus';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n return {\n code: `${target}.focus()`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Blur command: blur [target]\n */\nclass BlurCodegen implements CommandCodegen {\n readonly command = 'blur';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n return {\n code: `${target}.blur()`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Log command: log value [, value2, ...]\n */\nclass LogCodegen implements CommandCodegen {\n readonly command = 'log';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const args = node.args ?? [];\n const values = args.map(arg => ctx.generateExpression(arg)).join(', ');\n\n return {\n code: `console.log(${values || \"''\"})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Wait command: wait 100ms or wait for event\n */\nclass WaitCodegen implements CommandCodegen {\n readonly command = 'wait';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const arg = (roles?.duration ?? args[0]) as ASTNode | undefined;\n if (!arg) return null;\n\n // Duration wait: wait 100ms\n if (arg.type === 'literal') {\n const value = (arg as LiteralNode).value;\n if (typeof value === 'number') {\n ctx.requireHelper('wait');\n return {\n code: `await _rt.wait(${value})`,\n async: true,\n sideEffects: false,\n };\n }\n // String duration like \"100ms\"\n if (typeof value === 'string') {\n const ms = parseDuration(value);\n if (ms !== null) {\n ctx.requireHelper('wait');\n return {\n code: `await _rt.wait(${ms})`,\n async: true,\n sideEffects: false,\n };\n }\n }\n }\n\n // Expression duration\n const duration = ctx.generateExpression(arg);\n ctx.requireHelper('wait');\n return {\n code: `await _rt.wait(${duration})`,\n async: true,\n sideEffects: false,\n };\n }\n}\n\n/**\n * Fetch command: fetch url [as json/text/html]\n */\nclass FetchCodegen implements CommandCodegen {\n readonly command = 'fetch';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const modifiers = node.modifiers as Record<string, unknown> | undefined;\n\n // Resolve URL from roles or args\n const urlNode = roles?.source ?? args[0];\n if (!urlNode) return null;\n\n const url = ctx.generateExpression(urlNode as ASTNode);\n\n // Resolve response format from roles, modifiers (node or string)\n let format = 'text';\n if (roles?.responseType) {\n const rt = roles.responseType as { value?: unknown; name?: string };\n format = String(rt.name ?? rt.value ?? 'text');\n } else if (modifiers?.as) {\n const asVal = modifiers.as;\n if (typeof asVal === 'string') {\n format = asVal;\n } else if (typeof asVal === 'object' && asVal !== null) {\n format = String(\n (asVal as { name?: string; value?: unknown }).name ??\n (asVal as { value?: unknown }).value ??\n 'text'\n );\n }\n }\n\n switch (format) {\n case 'json':\n ctx.requireHelper('fetchJSON');\n return {\n code: `_ctx.it = await _rt.fetchJSON(${url})`,\n async: true,\n sideEffects: true,\n };\n case 'html':\n ctx.requireHelper('fetchHTML');\n return {\n code: `_ctx.it = await _rt.fetchHTML(${url})`,\n async: true,\n sideEffects: true,\n };\n case 'text':\n default:\n ctx.requireHelper('fetchText');\n return {\n code: `_ctx.it = await _rt.fetchText(${url})`,\n async: true,\n sideEffects: true,\n };\n }\n }\n}\n\n/**\n * Send/Trigger command: send eventName [to target]\n */\nclass SendCodegen implements CommandCodegen {\n readonly command = 'send';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n if (args.length === 0) return null;\n\n const eventName = ctx.generateExpression(args[0]);\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n const detail = args.length > 1 ? ctx.generateExpression(args[1]) : 'undefined';\n\n ctx.requireHelper('send');\n return {\n code: `_rt.send(${target}, ${eventName}, ${detail})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Increment command: increment :var [by amount]\n */\nclass IncrementCodegen implements CommandCodegen {\n readonly command = 'increment';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const modifiers = node.modifiers as Record<string, unknown> | undefined;\n\n const target = roles?.destination ?? roles?.patient ?? args[0];\n if (!target) return null;\n\n // Resolve amount from roles.quantity, modifiers.by, or args[1]\n const amountNode = roles?.quantity ?? (modifiers?.by as ASTNode) ?? args[1];\n const amount = amountNode ? ctx.generateExpression(amountNode as ASTNode) : '1';\n\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n const name = varNode.name.startsWith(':') ? varNode.name.slice(1) : varNode.name;\n const safeName = sanitizeIdentifier(name);\n\n if (varNode.scope === 'local') {\n return {\n code: `_ctx.locals.set('${safeName}', (_ctx.locals.get('${safeName}') || 0) + ${amount})`,\n async: false,\n sideEffects: true,\n };\n }\n\n if (varNode.scope === 'global') {\n ctx.requireHelper('globals');\n return {\n code: `_rt.globals.set('${safeName}', (_rt.globals.get('${safeName}') || 0) + ${amount})`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Element textContent\n const targetCode = ctx.generateExpression(target);\n return {\n code: `${targetCode}.textContent = (parseFloat(${targetCode}.textContent) || 0) + ${amount}`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Decrement command: decrement :var [by amount]\n */\nclass DecrementCodegen implements CommandCodegen {\n readonly command = 'decrement';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const modifiers = node.modifiers as Record<string, unknown> | undefined;\n\n const target = roles?.destination ?? roles?.patient ?? args[0];\n if (!target) return null;\n\n // Resolve amount from roles.quantity, modifiers.by, or args[1]\n const amountNode = roles?.quantity ?? (modifiers?.by as ASTNode) ?? args[1];\n const amount = amountNode ? ctx.generateExpression(amountNode as ASTNode) : '1';\n\n if (target.type === 'variable') {\n const varNode = target as VariableNode;\n const name = varNode.name.startsWith(':') ? varNode.name.slice(1) : varNode.name;\n const safeName = sanitizeIdentifier(name);\n\n if (varNode.scope === 'local') {\n return {\n code: `_ctx.locals.set('${safeName}', (_ctx.locals.get('${safeName}') || 0) - ${amount})`,\n async: false,\n sideEffects: true,\n };\n }\n\n if (varNode.scope === 'global') {\n ctx.requireHelper('globals');\n return {\n code: `_rt.globals.set('${safeName}', (_rt.globals.get('${safeName}') || 0) - ${amount})`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Element textContent\n const targetCode = ctx.generateExpression(target);\n return {\n code: `${targetCode}.textContent = (parseFloat(${targetCode}.textContent) || 0) - ${amount}`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Halt command: halt (prevents default and stops execution)\n */\nclass HaltCodegen implements CommandCodegen {\n readonly command = 'halt';\n\n generate(_node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n ctx.requireHelper('HALT');\n return {\n code: `throw _rt.HALT`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Exit command: exit (stops execution without preventing default)\n */\nclass ExitCodegen implements CommandCodegen {\n readonly command = 'exit';\n\n generate(_node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n ctx.requireHelper('EXIT');\n return {\n code: `throw _rt.EXIT`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Return command: return [value]\n */\nclass ReturnCodegen implements CommandCodegen {\n readonly command = 'return';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const args = node.args ?? [];\n const value = args.length > 0 ? ctx.generateExpression(args[0]) : 'undefined';\n\n return {\n code: `return ${value}`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Call command: call function() or call behavior\n */\nclass CallCodegen implements CommandCodegen {\n readonly command = 'call';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n if (args.length === 0) return null;\n\n const fn = ctx.generateExpression(args[0]);\n return {\n code: fn,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Scroll command: scroll [to target] or scroll target into view\n */\nclass ScrollCodegen implements CommandCodegen {\n readonly command = 'scroll';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n const behavior = (node.modifiers as { smooth?: boolean })?.smooth ? \"'smooth'\" : \"'auto'\";\n\n return {\n code: `${target}.scrollIntoView({ behavior: ${behavior} })`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Take command: take .class [from others]\n */\nclass TakeCodegen implements CommandCodegen {\n readonly command = 'take';\n\n generate(node: CommandNode, _ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n if (args.length === 0) return null;\n\n const arg = args[0];\n if (arg.type !== 'selector') return null;\n\n const selector = (arg as SelectorNode).value;\n if (!selector.startsWith('.')) return null;\n\n const className = sanitizeClassName(selector.slice(1));\n if (!className) return null;\n\n // Remove from siblings, add to me\n return {\n code: `(() => { const _me = _ctx.me; _me.parentElement?.querySelectorAll('.${className}').forEach(el => el.classList.remove('${className}')); _me.classList.add('${className}'); })()`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n// =============================================================================\n// CONTROL FLOW GENERATORS\n// =============================================================================\n\n/**\n * Generate code for if/else statements.\n */\nexport function generateIf(\n node: IfNode,\n ctx: CodegenContext,\n generateBody: (nodes: ASTNode[]) => string\n): string {\n const exprCodegen = new ExpressionCodegen(ctx);\n const condition = exprCodegen.generate(node.condition);\n const thenBody = generateBody(node.thenBranch);\n\n let code = `if (${condition}) {\\n${thenBody}\\n}`;\n\n // Handle else-if branches\n if (node.elseIfBranches) {\n for (const branch of node.elseIfBranches) {\n const branchCondition = exprCodegen.generate(branch.condition);\n const branchBody = generateBody(branch.body);\n code += ` else if (${branchCondition}) {\\n${branchBody}\\n}`;\n }\n }\n\n // Handle else branch\n if (node.elseBranch) {\n const elseBody = generateBody(node.elseBranch);\n code += ` else {\\n${elseBody}\\n}`;\n }\n\n return code;\n}\n\n/**\n * Generate code for repeat loops.\n */\nexport function generateRepeat(\n node: RepeatNode,\n ctx: CodegenContext,\n generateBody: (nodes: ASTNode[]) => string\n): string {\n const exprCodegen = new ExpressionCodegen(ctx);\n const body = generateBody(node.body);\n\n // Fixed count: repeat 5 times\n if (node.count !== undefined) {\n const count =\n typeof node.count === 'number' ? String(node.count) : exprCodegen.generate(node.count);\n\n return `for (let _i = 0; _i < ${count}; _i++) {\n _ctx.locals.set('index', _i);\n${body}\n}`;\n }\n\n // While condition: repeat while condition\n if (node.whileCondition) {\n const condition = exprCodegen.generate(node.whileCondition);\n return `while (${condition}) {\\n${body}\\n}`;\n }\n\n // Infinite loop (should have break inside)\n return `while (true) {\\n${body}\\n}`;\n}\n\n/**\n * Generate code for for-each loops.\n */\nexport function generateForEach(\n node: ForEachNode,\n ctx: CodegenContext,\n generateBody: (nodes: ASTNode[]) => string\n): string {\n const exprCodegen = new ExpressionCodegen(ctx);\n const collection = exprCodegen.generate(node.collection);\n const itemName = sanitizeIdentifier(node.itemName);\n const indexName = node.indexName ? sanitizeIdentifier(node.indexName) : 'index';\n const body = generateBody(node.body);\n\n return `{\n const _collection = ${collection};\n const _arr = Array.isArray(_collection) ? _collection : Array.from(_collection);\n for (let _i = 0; _i < _arr.length; _i++) {\n _ctx.locals.set('${itemName}', _arr[_i]);\n _ctx.locals.set('${indexName}', _i);\n${body}\n }\n}`;\n}\n\n/**\n * Generate code for while loops.\n */\nexport function generateWhile(\n node: WhileNode,\n ctx: CodegenContext,\n generateBody: (nodes: ASTNode[]) => string\n): string {\n const exprCodegen = new ExpressionCodegen(ctx);\n const condition = exprCodegen.generate(node.condition);\n const body = generateBody(node.body);\n\n return `while (${condition}) {\\n${body}\\n}`;\n}\n\n// =============================================================================\n// ADDITIONAL COMMAND IMPLEMENTATIONS\n// =============================================================================\n\n/**\n * Unless command: unless condition (negated if — generates guard check)\n */\nclass UnlessCodegen implements CommandCodegen {\n readonly command = 'unless';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n if (args.length === 0) return null;\n\n const condition = ctx.generateExpression(args[0]);\n return {\n code: `if (!(${condition}))`,\n async: false,\n sideEffects: false,\n };\n }\n}\n\n/**\n * Throw command: throw \"message\" or throw expression\n */\nclass ThrowCodegen implements CommandCodegen {\n readonly command = 'throw';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const args = node.args ?? [];\n const value = args.length > 0 ? ctx.generateExpression(args[0]) : \"'Error'\";\n\n return {\n code: `throw new Error(${value})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Default command: default :var to value (set if undefined/null)\n */\nclass DefaultCodegen implements CommandCodegen {\n readonly command = 'default';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const modifiers = node.modifiers as Record<string, ASTNode> | undefined;\n\n const targetNode = roles?.destination ?? args[0];\n const valueNode = roles?.patient ?? (modifiers?.to as ASTNode) ?? args[1];\n\n if (!targetNode || !valueNode) return null;\n\n const value = ctx.generateExpression(valueNode);\n\n if (targetNode.type === 'variable') {\n const varNode = targetNode as VariableNode;\n const name = varNode.name.startsWith(':') ? varNode.name.slice(1) : varNode.name;\n const safeName = sanitizeIdentifier(name);\n\n if (varNode.scope === 'local') {\n return {\n code: `if (_ctx.locals.get('${safeName}') == null) _ctx.locals.set('${safeName}', ${value})`,\n async: false,\n sideEffects: true,\n };\n }\n\n if (varNode.scope === 'global') {\n ctx.requireHelper('globals');\n return {\n code: `if (_rt.globals.get('${safeName}') == null) _rt.globals.set('${safeName}', ${value})`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n return null;\n }\n}\n\n/**\n * Go command: go to url, go back, go forward\n */\nclass GoCodegen implements CommandCodegen {\n readonly command = 'go';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const target = roles?.destination ?? args[0];\n if (!target) return null;\n\n // go back / go forward\n if (target.type === 'identifier') {\n const name = (target as IdentifierNode).value;\n if (name === 'back') {\n return { code: 'history.back()', async: false, sideEffects: true };\n }\n if (name === 'forward') {\n return { code: 'history.forward()', async: false, sideEffects: true };\n }\n }\n\n // go to url\n const url = ctx.generateExpression(target);\n return {\n code: `window.location.href = ${url}`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Append command: append content to target\n */\nclass AppendCodegen implements CommandCodegen {\n readonly command = 'append';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const contentNode = roles?.patient ?? args[0];\n if (!contentNode) return null;\n\n const content = ctx.generateExpression(contentNode);\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n return {\n code: `${target}.insertAdjacentHTML('beforeend', ${content})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Pick command: pick random item from collection\n */\nclass PickCodegen implements CommandCodegen {\n readonly command = 'pick';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const collection = roles?.source ?? args[0];\n if (!collection) return null;\n\n const arr = ctx.generateExpression(collection);\n return {\n code: `_ctx.it = (() => { const _a = ${arr}; return _a[Math.floor(Math.random() * _a.length)]; })()`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Push URL command: push url to browser history\n */\nclass PushUrlCodegen implements CommandCodegen {\n readonly command = 'push-url';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const urlNode = roles?.destination ?? args[0];\n if (!urlNode) return null;\n\n const url = ctx.generateExpression(urlNode);\n return {\n code: `history.pushState({}, '', ${url})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Replace URL command: replace url in browser history\n */\nclass ReplaceUrlCodegen implements CommandCodegen {\n readonly command = 'replace-url';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const urlNode = roles?.destination ?? args[0];\n if (!urlNode) return null;\n\n const url = ctx.generateExpression(urlNode);\n return {\n code: `history.replaceState({}, '', ${url})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Get command: get expression (evaluates and stores in `it`/`result`)\n */\nclass GetCodegen implements CommandCodegen {\n readonly command = 'get';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const expr = roles?.patient ?? args[0];\n if (!expr) return null;\n\n const value = ctx.generateExpression(expr);\n return {\n code: `_ctx.it = _ctx.result = ${value}`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Break command: break out of a loop\n */\nclass BreakCodegen implements CommandCodegen {\n readonly command = 'break';\n\n generate(_node: CommandNode, _ctx: CodegenContext): GeneratedExpression {\n return {\n code: 'break',\n async: false,\n sideEffects: false,\n };\n }\n}\n\n/**\n * Continue command: skip to next iteration of a loop\n */\nclass ContinueCodegen implements CommandCodegen {\n readonly command = 'continue';\n\n generate(_node: CommandNode, _ctx: CodegenContext): GeneratedExpression {\n return {\n code: 'continue',\n async: false,\n sideEffects: false,\n };\n }\n}\n\n/**\n * Beep command: debug helper — logs expression with formatting\n */\nclass BeepCodegen implements CommandCodegen {\n readonly command = 'beep';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const expr = roles?.patient ?? args[0];\n if (!expr) {\n return {\n code: `console.log('%c[beep]', 'color: orange; font-weight: bold')`,\n async: false,\n sideEffects: true,\n };\n }\n\n const value = ctx.generateExpression(expr);\n return {\n code: `console.log('%c[beep]', 'color: orange; font-weight: bold', ${value})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Js command: inline JavaScript block — passes through code string\n */\nclass JsCodegen implements CommandCodegen {\n readonly command = 'js';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n // The js command body is typically passed as a literal string or the first arg\n const bodyNode = roles?.patient ?? args[0];\n if (!bodyNode) return null;\n\n if (bodyNode.type === 'literal') {\n const code = (bodyNode as LiteralNode).value;\n if (typeof code === 'string') {\n // Inline the JS directly — it runs in handler scope with _ctx available\n return {\n code: `(function(_ctx) { ${code} })(_ctx)`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Expression form: evaluate and store result\n const value = ctx.generateExpression(bodyNode);\n return {\n code: `_ctx.it = _ctx.result = ${value}`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Copy command: copy text to clipboard\n */\nclass CopyCodegen implements CommandCodegen {\n readonly command = 'copy';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const contentNode = roles?.patient ?? args[0];\n if (!contentNode) return null;\n\n const content = ctx.generateExpression(contentNode);\n return {\n code: `await navigator.clipboard.writeText(String(${content}))`,\n async: true,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Make command: create a DOM element — `make <tag/> then ...`\n */\nclass MakeCodegen implements CommandCodegen {\n readonly command = 'make';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const targetNode = roles?.patient ?? args[0];\n if (!targetNode) return null;\n\n // HTML literal: make <div.foo#bar/>\n if (targetNode.type === 'htmlLiteral') {\n const tagNode = targetNode as HtmlLiteralNode;\n const tag = tagNode.tag ?? 'div';\n const classes = tagNode.classes ?? [];\n const id = tagNode.id;\n const attrs = tagNode.attributes ?? {};\n\n let code = `(() => { const _el = document.createElement('${tag}');`;\n if (classes.length > 0) {\n code += ` _el.className = '${classes.join(' ')}';`;\n }\n if (id) {\n code += ` _el.id = '${sanitizeIdentifier(id)}';`;\n }\n for (const [attr, val] of Object.entries(attrs)) {\n code += ` _el.setAttribute('${sanitizeSelector(attr)}', '${sanitizeSelector(val)}');`;\n }\n code += ` return _el; })()`;\n\n return {\n code: `_ctx.it = _ctx.result = ${code}`,\n async: false,\n sideEffects: true,\n };\n }\n\n // String tag name: make \"div\"\n if (targetNode.type === 'literal') {\n const tag = (targetNode as LiteralNode).value;\n if (typeof tag === 'string') {\n return {\n code: `_ctx.it = _ctx.result = document.createElement('${sanitizeSelector(tag)}')`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n // Dynamic: make expr\n const expr = ctx.generateExpression(targetNode);\n return {\n code: `_ctx.it = _ctx.result = document.createElement(${expr})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n// =============================================================================\n// SWAP / MORPH COMMANDS\n// =============================================================================\n\n/**\n * Swap command: swap [strategy] of target with content\n *\n * Strategies: innerHTML (default), outerHTML, beforeBegin, afterBegin, beforeEnd, afterEnd, delete, morph\n */\nclass SwapCodegen implements CommandCodegen {\n readonly command = 'swap';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n // delete strategy: swap delete target\n if (\n args.length > 0 &&\n args[0].type === 'identifier' &&\n (args[0] as IdentifierNode).value === 'delete'\n ) {\n const targetNode = args[1] ?? node.target;\n if (!targetNode) return null;\n const target = ctx.generateExpression(targetNode);\n return { code: `${target}.remove()`, async: false, sideEffects: true };\n }\n\n const contentNode = roles?.patient ?? args[args.length - 1];\n const targetNode = roles?.destination ?? node.target ?? args[0];\n\n if (!targetNode || !contentNode) return null;\n\n const target = ctx.generateExpression(targetNode);\n const content = ctx.generateExpression(contentNode);\n\n // Determine strategy from modifiers or args\n const strategy = this.resolveStrategy(node, args);\n\n switch (strategy) {\n case 'outerHTML':\n return { code: `${target}.outerHTML = ${content}`, async: false, sideEffects: true };\n case 'beforebegin':\n return {\n code: `${target}.insertAdjacentHTML('beforebegin', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'afterbegin':\n return {\n code: `${target}.insertAdjacentHTML('afterbegin', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'beforeend':\n return {\n code: `${target}.insertAdjacentHTML('beforeend', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'afterend':\n return {\n code: `${target}.insertAdjacentHTML('afterend', ${content})`,\n async: false,\n sideEffects: true,\n };\n case 'morph':\n ctx.requireHelper('morph');\n return { code: `_rt.morph(${target}, ${content})`, async: false, sideEffects: true };\n case 'innerHTML':\n default:\n return { code: `${target}.innerHTML = ${content}`, async: false, sideEffects: true };\n }\n }\n\n private resolveStrategy(node: CommandNode, args: ASTNode[]): string {\n // Check modifiers for strategy\n const mods = node.modifiers as Record<string, unknown> | undefined;\n if (mods?.strategy && typeof mods.strategy === 'string') return mods.strategy.toLowerCase();\n\n // Check first arg for strategy keyword\n if (args.length >= 2 && args[0].type === 'identifier') {\n const name = ((args[0] as IdentifierNode).value ?? '').toLowerCase();\n const strategies: Record<string, string> = {\n innerhtml: 'innerHTML',\n outerhtml: 'outerHTML',\n morph: 'morph',\n beforebegin: 'beforebegin',\n afterbegin: 'afterbegin',\n beforeend: 'beforeend',\n afterend: 'afterend',\n into: 'innerHTML',\n over: 'outerHTML',\n };\n if (strategies[name]) return strategies[name];\n }\n\n return 'innerHTML';\n }\n}\n\n/**\n * Morph command: morph target with content (intelligent DOM diffing)\n */\nclass MorphCodegen implements CommandCodegen {\n readonly command = 'morph';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const targetNode = roles?.destination ?? node.target ?? args[0];\n const contentNode = roles?.patient ?? args[args.length > 1 ? args.length - 1 : 0];\n\n if (!targetNode) return null;\n\n const target = ctx.generateExpression(targetNode);\n ctx.requireHelper('morph');\n\n if (!contentNode || contentNode === targetNode) {\n return { code: `_rt.morph(${target}, '')`, async: false, sideEffects: true };\n }\n\n const content = ctx.generateExpression(contentNode);\n return { code: `_rt.morph(${target}, ${content})`, async: false, sideEffects: true };\n }\n}\n\n// =============================================================================\n// ANIMATION COMMANDS (transition, measure, settle)\n// =============================================================================\n\n/**\n * Transition command: transition property to value [over duration] [with timing]\n *\n * Generates CSS transition setup + transitionend listener.\n */\nclass TransitionCodegen implements CommandCodegen {\n readonly command = 'transition';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const mods = node.modifiers as Record<string, ASTNode | unknown> | undefined;\n\n const propertyNode = roles?.patient ?? args[0];\n if (!propertyNode) return null;\n\n const property = ctx.generateExpression(propertyNode);\n\n // Get value from 'to' modifier or second arg\n const valueNode = (mods?.to as ASTNode | undefined) ?? args[1];\n if (!valueNode) return null;\n\n const value = ctx.generateExpression(valueNode);\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n // Duration from 'over' modifier\n const durationNode = mods?.over as ASTNode | undefined;\n const duration = durationNode ? ctx.generateExpression(durationNode) : '300';\n\n // Timing from 'with' modifier\n const timingNode = mods?.with as ASTNode | undefined;\n const timing = timingNode ? ctx.generateExpression(timingNode) : \"'ease'\";\n\n ctx.requireHelper('transition');\n return {\n code: `await _rt.transition(${target}, ${property}, ${value}, ${duration}, ${timing})`,\n async: true,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Measure command: measure [target] [property]\n *\n * Measures element dimensions and stores in `it`/`result`.\n */\nclass MeasureCodegen implements CommandCodegen {\n readonly command = 'measure';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n // Determine property to measure\n const propNode = roles?.patient ?? args[0];\n if (!propNode) {\n // No property — measure all (getBoundingClientRect)\n return {\n code: `_ctx.it = _ctx.result = ${target}.getBoundingClientRect()`,\n async: false,\n sideEffects: true,\n };\n }\n\n if (propNode.type === 'identifier') {\n const propName = (propNode as IdentifierNode).value ?? '';\n // Common measurement shortcuts\n const rectProps = ['width', 'height', 'top', 'left', 'right', 'bottom', 'x', 'y'];\n if (rectProps.includes(propName.toLowerCase())) {\n return {\n code: `_ctx.it = _ctx.result = ${target}.getBoundingClientRect().${propName.toLowerCase()}`,\n async: false,\n sideEffects: true,\n };\n }\n }\n\n const prop = ctx.generateExpression(propNode);\n ctx.requireHelper('measure');\n return {\n code: `_ctx.it = _ctx.result = _rt.measure(${target}, ${prop})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Settle command: settle [target] [for timeout]\n *\n * Waits for CSS transitions/animations to complete.\n */\nclass SettleCodegen implements CommandCodegen {\n readonly command = 'settle';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression {\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n const mods = node.modifiers as Record<string, ASTNode | unknown> | undefined;\n\n const timeoutNode = mods?.for as ASTNode | undefined;\n const timeout = timeoutNode ? ctx.generateExpression(timeoutNode) : '5000';\n\n ctx.requireHelper('settle');\n return {\n code: `await _rt.settle(${target}, ${timeout})`,\n async: true,\n sideEffects: true,\n };\n }\n}\n\n// =============================================================================\n// EXECUTION COMMANDS (tell, async)\n// =============================================================================\n\n/**\n * Tell command: tell target command [command ...]\n *\n * Executes body commands with `me` rebound to the target element.\n * In AOT, generates a scoped block.\n */\nclass TellCodegen implements CommandCodegen {\n readonly command = 'tell';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const targetNode = roles?.destination ?? args[0];\n if (!targetNode) return null;\n\n const target = ctx.generateExpression(targetNode);\n\n // Generate a scoped block that rebinds _ctx.me\n return {\n code: `{ const _prevMe = _ctx.me; _ctx.me = ${target}; _ctx.you = ${target};`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Async command: async command [command ...]\n *\n * Wraps body in a fire-and-forget async IIFE.\n */\nclass AsyncCodegen implements CommandCodegen {\n readonly command = 'async';\n\n generate(_node: CommandNode, _ctx: CodegenContext): GeneratedExpression {\n // The async command wraps its body in a fire-and-forget async IIFE.\n // The actual body commands are generated by the event handler codegen.\n // Here we just signal the start of the async block.\n return {\n code: `(async () => {`,\n async: false, // The outer handler doesn't await this\n sideEffects: true,\n };\n }\n}\n\n// =============================================================================\n// BEHAVIOR & TEMPLATE COMMANDS (install, render)\n// =============================================================================\n\n/**\n * Install command: install BehaviorName [(params)] [on target]\n *\n * Installs a named behavior on an element.\n */\nclass InstallCodegen implements CommandCodegen {\n readonly command = 'install';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n\n const behaviorNode = roles?.patient ?? args[0];\n if (!behaviorNode) return null;\n\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n // Extract behavior name\n let behaviorName: string;\n if (behaviorNode.type === 'identifier') {\n behaviorName = (behaviorNode as IdentifierNode).value ?? '';\n } else if (behaviorNode.type === 'literal') {\n behaviorName = String((behaviorNode as LiteralNode).value);\n } else {\n behaviorName = ctx.generateExpression(behaviorNode);\n ctx.requireHelper('installBehavior');\n return {\n code: `_rt.installBehavior(${target}, ${behaviorName})`,\n async: false,\n sideEffects: true,\n };\n }\n\n ctx.requireHelper('installBehavior');\n\n // Check for parameters (second arg could be an object)\n const paramsNode = args.length > 1 ? args[1] : undefined;\n if (paramsNode && paramsNode.type === 'object') {\n const params = ctx.generateExpression(paramsNode);\n return {\n code: `_rt.installBehavior(${target}, '${sanitizeIdentifier(behaviorName)}', ${params})`,\n async: false,\n sideEffects: true,\n };\n }\n\n return {\n code: `_rt.installBehavior(${target}, '${sanitizeIdentifier(behaviorName)}')`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n/**\n * Render command: render template [with variables]\n *\n * Renders a template with variable interpolation.\n */\nclass RenderCodegen implements CommandCodegen {\n readonly command = 'render';\n\n generate(node: CommandNode, ctx: CodegenContext): GeneratedExpression | null {\n const args = node.args ?? [];\n const roles = node.roles;\n const mods = node.modifiers as Record<string, ASTNode | unknown> | undefined;\n\n const templateNode = roles?.patient ?? args[0];\n if (!templateNode) return null;\n\n const template = ctx.generateExpression(templateNode);\n const target = node.target ? ctx.generateExpression(node.target) : '_ctx.me';\n\n // Check for 'with' modifier or second arg for variables\n const varsNode = (mods?.with as ASTNode | undefined) ?? (args.length > 1 ? args[1] : undefined);\n\n ctx.requireHelper('render');\n\n if (varsNode) {\n const vars = ctx.generateExpression(varsNode);\n return {\n code: `${target}.innerHTML = _rt.render(${template}, ${vars})`,\n async: false,\n sideEffects: true,\n };\n }\n\n return {\n code: `${target}.innerHTML = _rt.render(${template}, {})`,\n async: false,\n sideEffects: true,\n };\n }\n}\n\n// =============================================================================\n// COMMAND REGISTRY\n// =============================================================================\n\n/**\n * Registry of command code generators.\n */\nexport const commandCodegens = new Map<string, CommandCodegen>([\n ['toggle', new ToggleCodegen()],\n ['add', new AddCodegen()],\n ['remove', new RemoveCodegen()],\n ['set', new SetCodegen()],\n ['put', new PutCodegen()],\n ['show', new ShowCodegen()],\n ['hide', new HideCodegen()],\n ['focus', new FocusCodegen()],\n ['blur', new BlurCodegen()],\n ['log', new LogCodegen()],\n ['wait', new WaitCodegen()],\n ['fetch', new FetchCodegen()],\n ['send', new SendCodegen()],\n ['trigger', new SendCodegen()], // Alias\n ['increment', new IncrementCodegen()],\n ['decrement', new DecrementCodegen()],\n ['halt', new HaltCodegen()],\n ['exit', new ExitCodegen()],\n ['return', new ReturnCodegen()],\n ['call', new CallCodegen()],\n ['scroll', new ScrollCodegen()],\n ['take', new TakeCodegen()],\n ['unless', new UnlessCodegen()],\n ['throw', new ThrowCodegen()],\n ['default', new DefaultCodegen()],\n ['go', new GoCodegen()],\n ['append', new AppendCodegen()],\n ['pick', new PickCodegen()],\n ['push-url', new PushUrlCodegen()],\n ['replace-url', new ReplaceUrlCodegen()],\n ['get', new GetCodegen()],\n ['break', new BreakCodegen()],\n ['continue', new ContinueCodegen()],\n ['beep', new BeepCodegen()],\n ['js', new JsCodegen()],\n ['copy', new CopyCodegen()],\n ['make', new MakeCodegen()],\n // Phase 1 additions\n ['swap', new SwapCodegen()],\n ['morph', new MorphCodegen()],\n ['transition', new TransitionCodegen()],\n ['measure', new MeasureCodegen()],\n ['settle', new SettleCodegen()],\n ['tell', new TellCodegen()],\n ['async', new AsyncCodegen()],\n ['install', new InstallCodegen()],\n ['render', new RenderCodegen()],\n]);\n\n/**\n * Generate code for a command.\n */\nexport function generateCommand(\n node: CommandNode,\n ctx: CodegenContext\n): GeneratedExpression | null {\n const codegen = commandCodegens.get(node.name);\n if (!codegen) {\n return null;\n }\n return codegen.generate(node, ctx);\n}\n\n// =============================================================================\n// UTILITY FUNCTIONS\n// =============================================================================\n\n/**\n * Parse a duration string like \"100ms\" or \"2s\" to milliseconds.\n */\nfunction parseDuration(duration: string): number | null {\n const match = /^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)?$/i.exec(duration.trim());\n if (!match) return null;\n\n const value = parseFloat(match[1]);\n const unit = (match[2] ?? 'ms').toLowerCase();\n\n switch (unit) {\n case 'ms':\n return value;\n case 's':\n return value * 1000;\n case 'm':\n return value * 60000;\n case 'h':\n return value * 3600000;\n default:\n return value;\n }\n}\n\nexport default commandCodegens;\n","/**\n * Event Handler Transforms\n *\n * Generates complete event handler code including event binding,\n * modifier handling, and cleanup.\n */\n\nimport type {\n ASTNode,\n EventHandlerNode,\n CommandNode,\n BatchedClassOpsNode,\n CodegenContext,\n GeneratedHandler,\n AnalysisResult,\n EventModifiers,\n IfNode,\n RepeatNode,\n ForEachNode,\n WhileNode,\n} from '../types/aot-types.js';\nimport { sanitizeSelector } from './expression-transforms.js';\nimport {\n generateCommand,\n generateIf,\n generateRepeat,\n generateForEach,\n generateWhile,\n} from './command-transforms.js';\n\n// =============================================================================\n// EVENT HANDLER CODEGEN\n// =============================================================================\n\n/**\n * Code generator for event handlers.\n */\nexport class EventHandlerCodegen {\n private ctx: CodegenContext;\n private analysis: AnalysisResult;\n\n constructor(ctx: CodegenContext, analysis: AnalysisResult) {\n this.ctx = ctx;\n this.analysis = analysis;\n }\n\n /**\n * Generate complete code for an event handler.\n */\n generate(node: EventHandlerNode): GeneratedHandler {\n const eventName = node.event;\n const modifiers = node.modifiers ?? {};\n const body = node.body ?? [];\n\n // Generate the handler function body\n const bodyCode = this.generateBody(body);\n const isAsync = this.analysis.controlFlow.hasAsync;\n\n // Build event listener options\n const listenerOptions = this.buildListenerOptions(modifiers);\n\n // Generate modifier handling code\n const modifierCode = this.generateModifierCode(modifiers);\n\n // Generate the complete handler function\n const handlerCode = this.generateHandlerFunction(eventName, bodyCode, modifierCode, isAsync);\n\n // Generate binding code\n const bindingCode = this.generateBindingCode(eventName, modifiers, listenerOptions);\n\n // Generate cleanup code\n const cleanup = this.generateCleanupCode(eventName, modifiers);\n\n // Collect required imports\n const imports = this.collectImports();\n\n return {\n handlerCode,\n bindingCode,\n cleanup,\n async: isAsync,\n imports,\n };\n }\n\n // ===========================================================================\n // BODY GENERATION\n // ===========================================================================\n\n /**\n * Generate code for the handler body.\n */\n private generateBody(nodes: ASTNode[]): string {\n const statements: string[] = [];\n\n for (const node of nodes) {\n const code = this.generateNode(node);\n if (code) {\n statements.push(code);\n }\n }\n\n return statements.join('\\n');\n }\n\n /**\n * Generate code for a single AST node.\n */\n private generateNode(node: ASTNode): string | null {\n switch (node.type) {\n case 'command':\n return this.generateCommandCode(node as CommandNode);\n\n case 'if':\n return generateIf(node as IfNode, this.ctx, nodes => this.generateBody(nodes));\n\n case 'repeat':\n return generateRepeat(node as RepeatNode, this.ctx, nodes => this.generateBody(nodes));\n\n case 'foreach':\n return generateForEach(node as ForEachNode, this.ctx, nodes => this.generateBody(nodes));\n\n case 'while':\n return generateWhile(node as WhileNode, this.ctx, nodes => this.generateBody(nodes));\n\n case 'event': {\n // Nested event node (from CommandSequence conversion) — inline its body\n const nested = node as EventHandlerNode;\n return this.generateBody(nested.body ?? []);\n }\n\n case 'batchedClassOps': {\n const batch = node as BatchedClassOpsNode;\n const lines: string[] = [];\n if (batch.adds.length > 0) {\n lines.push(`${batch.target}.classList.add(${batch.adds.map(c => `'${c}'`).join(', ')})`);\n }\n if (batch.removes.length > 0) {\n lines.push(\n `${batch.target}.classList.remove(${batch.removes.map(c => `'${c}'`).join(', ')})`\n );\n }\n for (const t of batch.toggles) {\n lines.push(`${batch.target}.classList.toggle('${t}')`);\n }\n return lines.join(';\\n');\n }\n\n default:\n // Unknown node type\n return null;\n }\n }\n\n /**\n * Generate code for a command.\n */\n private generateCommandCode(node: CommandNode): string | null {\n const result = generateCommand(node, this.ctx);\n if (!result) {\n return null;\n }\n return result.code;\n }\n\n // ===========================================================================\n // MODIFIER HANDLING\n // ===========================================================================\n\n /**\n * Build AddEventListenerOptions from modifiers.\n */\n private buildListenerOptions(modifiers: EventModifiers): AddEventListenerOptions {\n const options: AddEventListenerOptions = {};\n\n if (modifiers.once) {\n options.once = true;\n }\n if (modifiers.passive) {\n options.passive = true;\n }\n if (modifiers.capture) {\n options.capture = true;\n }\n\n return options;\n }\n\n /**\n * Generate code for event modifiers (prevent, stop).\n */\n private generateModifierCode(modifiers: EventModifiers): string {\n const code: string[] = [];\n\n if (modifiers.prevent) {\n code.push('_event.preventDefault();');\n }\n if (modifiers.stop) {\n code.push('_event.stopPropagation();');\n }\n\n return code.join('\\n');\n }\n\n // ===========================================================================\n // HANDLER FUNCTION GENERATION\n // ===========================================================================\n\n /**\n * Generate the complete handler function.\n */\n private generateHandlerFunction(\n _eventName: string,\n bodyCode: string,\n modifierCode: string,\n isAsync: boolean\n ): string {\n const asyncKeyword = isAsync ? 'async ' : '';\n const handlerId = this.ctx.handlerId;\n\n // Build context initialization\n const contextInit = `const _ctx = _rt.createContext(_event, this);`;\n\n // Combine modifier code and body\n const combinedBody = [modifierCode, bodyCode].filter(Boolean).join('\\n');\n\n // Wrap in try-catch for halt/exit handling\n const needsTryCatch = this.analysis.controlFlow.canThrow;\n\n let functionBody: string;\n\n if (needsTryCatch) {\n functionBody = `${contextInit}\n try {\n ${combinedBody}\n } catch (_e) {\n if (_e === _rt.HALT) {\n _event.preventDefault();\n return;\n }\n if (_e === _rt.EXIT) {\n return;\n }\n throw _e;\n }`;\n } else {\n functionBody = `${contextInit}\n ${combinedBody}`;\n }\n\n return `${asyncKeyword}function _handler_${handlerId}(_event) {\n ${functionBody}\n}`;\n }\n\n // ===========================================================================\n // BINDING CODE GENERATION\n // ===========================================================================\n\n /**\n * Generate code to bind the handler to an element.\n */\n private generateBindingCode(\n eventName: string,\n modifiers: EventModifiers,\n options: AddEventListenerOptions\n ): string {\n const handlerId = this.ctx.handlerId;\n const event = JSON.stringify(eventName);\n\n // Build handler reference (may be wrapped)\n let handler = `_handler_${handlerId}`;\n\n // Apply debounce wrapper\n if (modifiers.debounce) {\n this.ctx.requireHelper('debounce');\n handler = `_rt.debounce(${handler}, ${modifiers.debounce})`;\n }\n\n // Apply throttle wrapper\n if (modifiers.throttle) {\n this.ctx.requireHelper('throttle');\n handler = `_rt.throttle(${handler}, ${modifiers.throttle})`;\n }\n\n // Build options argument\n const optionsKeys = Object.keys(options).filter(k => (options as Record<string, unknown>)[k]);\n const optionsArg =\n optionsKeys.length > 0 ? `, { ${optionsKeys.map(k => `${k}: true`).join(', ')} }` : '';\n\n // Event delegation\n if (modifiers.from) {\n const delegateSelector = JSON.stringify(modifiers.from);\n this.ctx.requireHelper('delegate');\n return `_rt.delegate(_el, ${event}, ${delegateSelector}, ${handler}${optionsArg});`;\n }\n\n return `_el.addEventListener(${event}, ${handler}${optionsArg});`;\n }\n\n // ===========================================================================\n // CLEANUP CODE GENERATION\n // ===========================================================================\n\n /**\n * Generate cleanup code for removing the handler.\n */\n private generateCleanupCode(eventName: string, modifiers: EventModifiers): string | null {\n // No cleanup needed for once handlers\n if (modifiers.once) {\n return null;\n }\n\n const handlerId = this.ctx.handlerId;\n const event = JSON.stringify(eventName);\n const capture = modifiers.capture ? ', true' : '';\n\n return `_el.removeEventListener(${event}, _handler_${handlerId}${capture});`;\n }\n\n // ===========================================================================\n // IMPORTS COLLECTION\n // ===========================================================================\n\n /**\n * Collect required runtime imports.\n */\n private collectImports(): string[] {\n const imports = ['createContext'];\n\n // Add helpers from context\n for (const helper of this.ctx.requiredHelpers) {\n if (!imports.includes(helper)) {\n imports.push(helper);\n }\n }\n\n // Add helpers from analysis\n for (const helper of this.analysis.dependencies.runtimeHelpers) {\n if (!imports.includes(helper)) {\n imports.push(helper);\n }\n }\n\n return imports;\n }\n}\n\n// =============================================================================\n// CONVENIENCE FUNCTIONS\n// =============================================================================\n\n/**\n * Generate a complete event handler.\n */\nexport function generateEventHandler(\n node: EventHandlerNode,\n ctx: CodegenContext,\n analysis: AnalysisResult\n): GeneratedHandler {\n const codegen = new EventHandlerCodegen(ctx, analysis);\n return codegen.generate(node);\n}\n\n/**\n * Generate binding code for multiple handlers.\n */\nexport function generateBindings(\n handlers: Array<{\n selector: string;\n eventName: string;\n handlerId: string;\n options?: AddEventListenerOptions;\n }>\n): string {\n const bindings: string[] = [];\n\n for (const { selector, eventName, handlerId, options } of handlers) {\n const sanitized = sanitizeSelector(selector);\n const event = JSON.stringify(eventName);\n\n const optionsKeys = options\n ? Object.keys(options).filter(k => (options as Record<string, unknown>)[k])\n : [];\n const optionsArg =\n optionsKeys.length > 0 ? `, { ${optionsKeys.map(k => `${k}: true`).join(', ')} }` : '';\n\n bindings.push(\n `document.querySelectorAll('${sanitized}').forEach(_el => _el.addEventListener(${event}, _handler_${handlerId}${optionsArg}));`\n );\n }\n\n return bindings.join('\\n');\n}\n\n/**\n * Generate initialization code that runs when DOM is ready.\n */\nexport function generateInitialization(\n handlers: Array<{\n selector: string;\n eventName: string;\n handlerId: string;\n options?: AddEventListenerOptions;\n }>\n): string {\n const bindings = generateBindings(handlers);\n\n return `_rt.ready(() => {\n${bindings}\n});`;\n}\n\nexport default EventHandlerCodegen;\n","/**\n * AOT Compiler\n *\n * Main orchestrator for the Ahead-of-Time compilation process.\n * Coordinates extraction, parsing, analysis, optimization, and code generation.\n */\n\nimport type {\n ASTNode,\n ExtractedScript,\n CompileOptions,\n CompilationResult,\n BatchCompilationResult,\n CodegenContext,\n CodegenOptions,\n AnalysisResult,\n CompiledHandler,\n FallbackScript,\n EventHandlerNode,\n CommandNode,\n PreRenderResult,\n} from '../types/aot-types.js';\nimport { HTMLScanner, VueScanner, SvelteScanner, JSXScanner } from '../scanner/html-scanner.js';\nimport { Analyzer } from './analyzer.js';\nimport { OptimizationPipeline } from '../optimizations/index.js';\nimport { preRenderInitBlock } from '../optimizations/init-prerender.js';\nimport { ExpressionCodegen, sanitizeIdentifier } from '../transforms/expression-transforms.js';\nimport { EventHandlerCodegen } from '../transforms/event-transforms.js';\nimport {\n isExplicitSyntax,\n parseExplicit,\n fromProtocolJSON,\n type SemanticNode,\n type EventHandlerSemanticNode,\n type SemanticValue,\n} from '@lokascript/framework';\n\n// =============================================================================\n// DEFAULT OPTIONS\n// =============================================================================\n\nconst DEFAULT_COMPILE_OPTIONS: Required<CompileOptions> = {\n language: 'en',\n confidenceThreshold: 0.7,\n debug: false,\n codegen: {\n target: 'es2020',\n mode: 'esm',\n minify: false,\n sourceMaps: true,\n runtimeImport: '@hyperfixi/aot-compiler/runtime',\n preserveComments: false,\n debugMode: false,\n },\n optimizationLevel: 2,\n};\n\nconst DEFAULT_CODEGEN_OPTIONS: CodegenOptions = {\n target: 'es2020',\n mode: 'esm',\n minify: false,\n sourceMaps: true,\n runtimeImport: '@hyperfixi/aot-compiler/runtime',\n preserveComments: false,\n debugMode: false,\n};\n\n// =============================================================================\n// PARSER INTERFACE\n// =============================================================================\n\n/**\n * Parser interface for parsing hyperscript.\n * Can be backed by traditional or semantic parser.\n */\ninterface Parser {\n parse(code: string, language?: string): ASTNode;\n}\n\n/**\n * Optional semantic parser integration.\n */\ninterface SemanticParser {\n analyze(\n code: string,\n language: string\n ): { node?: unknown; confidence: number; errors?: string[] };\n buildAST(node: unknown): { ast: ASTNode; warnings: string[] };\n supportsLanguage(language: string): boolean;\n}\n\n// =============================================================================\n// AOT COMPILER CLASS\n// =============================================================================\n\n/**\n * Main AOT compiler class.\n */\nexport class AOTCompiler {\n private parser: Parser | null = null;\n private semanticParser: SemanticParser | null = null;\n private analyzer = new Analyzer();\n private optimizer = new OptimizationPipeline();\n\n private usedIds = new Set<string>();\n\n /**\n * Set the traditional parser instance.\n */\n setParser(parser: Parser): void {\n this.parser = parser;\n }\n\n /**\n * Set the semantic parser for multilingual support.\n */\n setSemanticParser(parser: SemanticParser): void {\n this.semanticParser = parser;\n }\n\n /**\n * Reset compiler state between compilations.\n */\n reset(): void {\n this.usedIds.clear();\n }\n\n // ===========================================================================\n // EXTRACTION\n // ===========================================================================\n\n /**\n * Extract hyperscript from source code.\n */\n extract(source: string, filename: string): ExtractedScript[] {\n const scanner = this.createScanner(filename);\n return scanner.extract(source, filename);\n }\n\n /**\n * Create appropriate scanner for file type.\n */\n private createScanner(filename: string): HTMLScanner | JSXScanner {\n if (filename.endsWith('.vue')) {\n return new VueScanner();\n }\n if (filename.endsWith('.svelte')) {\n return new SvelteScanner();\n }\n if (filename.match(/\\.(jsx|tsx)$/)) {\n return new JSXScanner();\n }\n return new HTMLScanner();\n }\n\n // ===========================================================================\n // PARSING\n // ===========================================================================\n\n /**\n * Parse a hyperscript string to AST.\n * Supports natural language, explicit bracket syntax, and JSON input.\n */\n parse(code: string, options: CompileOptions = {}): ASTNode | null {\n const { language = 'en', confidenceThreshold = 0.7, debug = false } = options;\n\n let ast: ASTNode | null = null;\n\n // Try explicit bracket syntax (language-agnostic, no parsers needed)\n if (isExplicitSyntax(code)) {\n try {\n const node = parseExplicit(code);\n ast = this.semanticNodeToAOT(node);\n if (debug) {\n console.log(`[aot] Parsed explicit syntax: \"${code}\"`);\n }\n } catch (error) {\n if (debug) {\n console.log(`[aot] Explicit parse error for \"${code}\":`, error);\n }\n }\n if (ast) return this.ensureEventHandler(ast);\n }\n\n // Try JSON input\n if (this.looksLikeJSON(code)) {\n try {\n const json = JSON.parse(code.trim());\n const node = fromProtocolJSON(json);\n ast = this.semanticNodeToAOT(node);\n if (debug) {\n console.log(`[aot] Parsed JSON input: \"${code.slice(0, 80)}...\"`);\n }\n } catch (error) {\n if (debug) {\n console.log(`[aot] JSON parse error for \"${code.slice(0, 80)}\":`, error);\n }\n }\n if (ast) return this.ensureEventHandler(ast);\n }\n\n // Try semantic parser for non-English\n if (language !== 'en' && this.semanticParser?.supportsLanguage(language)) {\n const result = this.semanticParser.analyze(code, language);\n\n if (result.node && result.confidence >= confidenceThreshold) {\n const { ast: semanticAst, warnings } = this.semanticParser.buildAST(result.node);\n\n if (debug && warnings.length > 0) {\n console.log(`[aot] Semantic warnings for \"${code}\":`, warnings);\n }\n\n ast = semanticAst;\n } else if (debug) {\n console.log(\n `[aot] Semantic parse failed for \"${code}\": ${result.errors?.join(', ') || 'low confidence'}`\n );\n }\n }\n\n // Fall back to traditional parser\n if (!ast && this.parser) {\n try {\n ast = this.parser.parse(code, language);\n } catch (error) {\n if (debug) {\n console.log(`[aot] Parse error for \"${code}\":`, error);\n }\n }\n }\n\n // No parser available - create a simple AST wrapper\n if (!ast) {\n ast = this.createSimpleAST(code);\n }\n\n return this.ensureEventHandler(ast);\n }\n\n /**\n * Create a simple AST from code (for testing without full parser).\n */\n private createSimpleAST(code: string): ASTNode | null {\n // Try to detect basic patterns\n const eventMatch = /^on\\s+(\\w+)(?:\\.(\\w+))?\\s+(.+)$/i.exec(code.trim());\n\n if (eventMatch) {\n const [, eventName, modifier, body] = eventMatch;\n return {\n type: 'event',\n event: eventName,\n modifiers: modifier ? { [modifier]: true } : {},\n body: [this.parseSimpleCommand(body)].filter(Boolean),\n } as EventHandlerNode;\n }\n\n // Try as simple command\n const cmd = this.parseSimpleCommand(code);\n if (cmd) {\n return {\n type: 'event',\n event: 'click',\n body: [cmd],\n } as EventHandlerNode;\n }\n\n return null;\n }\n\n /**\n * Parse a simple command (for testing).\n */\n private parseSimpleCommand(code: string): ASTNode | null {\n const trimmed = code.trim();\n\n // toggle .class\n const toggleMatch = /^toggle\\s+\\.([a-zA-Z_][a-zA-Z0-9_-]*)$/i.exec(trimmed);\n if (toggleMatch) {\n return {\n type: 'command',\n name: 'toggle',\n args: [{ type: 'selector', value: '.' + toggleMatch[1] }],\n };\n }\n\n // add .class\n const addMatch = /^add\\s+\\.([a-zA-Z_][a-zA-Z0-9_-]*)$/i.exec(trimmed);\n if (addMatch) {\n return {\n type: 'command',\n name: 'add',\n args: [{ type: 'selector', value: '.' + addMatch[1] }],\n };\n }\n\n // remove .class\n const removeMatch = /^remove\\s+\\.([a-zA-Z_][a-zA-Z0-9_-]*)$/i.exec(trimmed);\n if (removeMatch) {\n return {\n type: 'command',\n name: 'remove',\n args: [{ type: 'selector', value: '.' + removeMatch[1] }],\n };\n }\n\n // show/hide/focus/blur\n if (/^show$/i.test(trimmed)) {\n return { type: 'command', name: 'show', args: [] };\n }\n if (/^hide$/i.test(trimmed)) {\n return { type: 'command', name: 'hide', args: [] };\n }\n if (/^focus$/i.test(trimmed)) {\n return { type: 'command', name: 'focus', args: [] };\n }\n if (/^blur$/i.test(trimmed)) {\n return { type: 'command', name: 'blur', args: [] };\n }\n\n // set :var to value\n const setMatch = /^set\\s+:(\\w+)\\s+to\\s+(.+)$/i.exec(trimmed);\n if (setMatch) {\n const [, varName, valueStr] = setMatch;\n return {\n type: 'command',\n name: 'set',\n args: [{ type: 'variable', name: ':' + varName, scope: 'local' }],\n modifiers: { to: this.parseSimpleValue(valueStr) },\n };\n }\n\n // increment/decrement :var\n const incrMatch = /^(increment|decrement)\\s+:(\\w+)$/i.exec(trimmed);\n if (incrMatch) {\n const [, cmd, varName] = incrMatch;\n return {\n type: 'command',\n name: cmd.toLowerCase(),\n args: [{ type: 'variable', name: ':' + varName, scope: 'local' }],\n };\n }\n\n // wait Nms / wait Ns\n const waitMatch = /^wait\\s+(\\d+(?:\\.\\d+)?)(ms|s)$/i.exec(trimmed);\n if (waitMatch) {\n const [, value, unit] = waitMatch;\n const ms = unit.toLowerCase() === 's' ? parseFloat(value) * 1000 : parseFloat(value);\n return {\n type: 'command',\n name: 'wait',\n args: [{ type: 'literal', value: ms }],\n };\n }\n\n // log \"string\" or log value\n const logMatch = /^log\\s+(.+)$/i.exec(trimmed);\n if (logMatch) {\n return {\n type: 'command',\n name: 'log',\n args: [this.parseSimpleValue(logMatch[1])],\n };\n }\n\n // send \"event\" [to target]\n const sendMatch = /^send\\s+\"([^\"]+)\"(?:\\s+to\\s+(\\w+))?$/i.exec(trimmed);\n if (sendMatch) {\n const [, eventName, target] = sendMatch;\n const node: ASTNode = {\n type: 'command',\n name: 'send',\n args: [{ type: 'literal', value: eventName }],\n };\n if (target) {\n (node as Record<string, unknown>).target = { type: 'identifier', value: target };\n }\n return node;\n }\n\n // fetch url [as json/text/html]\n const fetchMatch = /^fetch\\s+(\\S+)(?:\\s+as\\s+(\\w+))?$/i.exec(trimmed);\n if (fetchMatch) {\n const [, url, format] = fetchMatch;\n const node: ASTNode = {\n type: 'command',\n name: 'fetch',\n args: [{ type: 'literal', value: url }],\n };\n if (format) {\n (node as Record<string, unknown>).modifiers = { as: format };\n }\n return node;\n }\n\n // put value into target\n const putMatch = /^put\\s+\"([^\"]+)\"\\s+(into|before|after)\\s+(\\S+)$/i.exec(trimmed);\n if (putMatch) {\n const [, content, position, target] = putMatch;\n return {\n type: 'command',\n name: 'put',\n args: [{ type: 'literal', value: content }],\n modifiers: { position, [position]: this.parseSimpleValue(target) },\n };\n }\n\n return null;\n }\n\n /**\n * Parse a simple value string to an AST node.\n */\n private parseSimpleValue(valueStr: string): ASTNode {\n const trimmed = valueStr.trim();\n\n // Quoted string\n const strMatch = /^\"([^\"]*)\"$/.exec(trimmed) ?? /^'([^']*)'$/.exec(trimmed);\n if (strMatch) {\n return { type: 'literal', value: strMatch[1] };\n }\n\n // Number\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n return { type: 'literal', value: parseFloat(trimmed) };\n }\n\n // Boolean\n if (trimmed === 'true') return { type: 'literal', value: true };\n if (trimmed === 'false') return { type: 'literal', value: false };\n\n // Selector (#id or .class)\n if (/^[#.][a-zA-Z_]/.test(trimmed)) {\n return { type: 'selector', value: trimmed };\n }\n\n // Local variable\n if (trimmed.startsWith(':')) {\n return { type: 'variable', name: trimmed, scope: 'local' };\n }\n\n // Identifier\n return { type: 'identifier', value: trimmed };\n }\n\n // ===========================================================================\n // EXPLICIT / JSON INPUT HELPERS\n // ===========================================================================\n\n /**\n * Check if input looks like JSON (LLM JSON format).\n */\n private looksLikeJSON(code: string): boolean {\n const trimmed = code.trim();\n return trimmed.startsWith('{') && trimmed.includes('\"action\"');\n }\n\n /**\n * Ensure top-level node is always an event handler.\n * The codegen pipeline (EventHandlerCodegen) requires this.\n */\n private ensureEventHandler(ast: ASTNode | null): ASTNode | null {\n if (ast && ast.type !== 'event') {\n return {\n type: 'event',\n event: 'click',\n modifiers: {},\n body: [ast],\n } as EventHandlerNode;\n }\n return ast;\n }\n\n /**\n * Convert a framework SemanticNode to an AOT ASTNode.\n * Handles the simple cases produced by explicit/JSON parsing.\n */\n private semanticNodeToAOT(node: SemanticNode): ASTNode {\n if (node.kind === 'event-handler') {\n const eh = node as EventHandlerSemanticNode;\n const eventValue = eh.roles.get('event');\n const eventName = eventValue && 'value' in eventValue ? String(eventValue.value) : 'click';\n return {\n type: 'event',\n event: eventName,\n modifiers: {},\n body: (eh.body ?? []).map((child: SemanticNode) => this.semanticNodeToAOT(child)),\n } as EventHandlerNode;\n }\n\n // Command node\n const roles: Record<string, ASTNode> = {};\n const args: ASTNode[] = [];\n\n for (const [roleName, value] of node.roles) {\n const astValue = this.semanticValueToAOT(value);\n roles[roleName] = astValue;\n args.push(astValue);\n }\n\n return {\n type: 'command',\n name: node.action,\n args,\n roles,\n } as CommandNode;\n }\n\n /**\n * Convert a SemanticValue to an ASTNode.\n */\n private semanticValueToAOT(value: SemanticValue): ASTNode {\n switch (value.type) {\n case 'selector':\n return { type: 'selector', value: value.value as string };\n case 'reference':\n return { type: 'identifier', value: value.value as string };\n case 'literal': {\n const lit = value as { value: unknown; dataType?: string };\n if (lit.dataType === 'duration') {\n // Parse duration to ms\n const str = String(lit.value);\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s)$/.exec(str);\n if (match) {\n const ms = match[2] === 's' ? parseFloat(match[1]) * 1000 : parseFloat(match[1]);\n return { type: 'literal', value: ms };\n }\n }\n return { type: 'literal', value: lit.value as string | number | boolean | null };\n }\n default:\n return { type: 'literal', value: String((value as { value?: unknown }).value ?? '') };\n }\n }\n\n // ===========================================================================\n // ANALYSIS\n // ===========================================================================\n\n /**\n * Analyze an AST for optimization and code generation.\n */\n analyze(ast: ASTNode): AnalysisResult {\n return this.analyzer.analyze(ast);\n }\n\n // ===========================================================================\n // INIT PRE-RENDERING\n // ===========================================================================\n\n /**\n * Pre-render pure init block commands into an HTML template at build time.\n *\n * Analyzes init block commands for purity (static DOM writes with literal\n * values targeting #id selectors) and applies them directly to the HTML.\n * Impure commands are preserved for normal runtime execution.\n *\n * @param html - The HTML template string\n * @param initCommands - Parsed commands from an init block\n * @returns Modified HTML, remaining impure commands, and count of pre-rendered commands\n */\n preRenderInit(html: string, initCommands: ASTNode[]): PreRenderResult {\n return preRenderInitBlock(html, initCommands);\n }\n\n /**\n * Extract init blocks from HTML, pre-render pure commands, and return modified HTML.\n * This is a higher-level convenience that combines extraction, parsing, and pre-rendering.\n *\n * @param html - The HTML template string\n * @param options - Compile options (language, etc.)\n * @returns Modified HTML with pre-rendered init effects and compilation results\n */\n preRenderInitBlocks(\n html: string,\n options: CompileOptions = {}\n ): { html: string; preRenderedCount: number; remainingScripts: ExtractedScript[] } {\n const scripts = this.extract(html, 'template.html');\n let modifiedHtml = html;\n let totalPreRendered = 0;\n const remainingScripts: ExtractedScript[] = [];\n\n for (const script of scripts) {\n // Parse the script to AST\n const ast = this.parse(script.code, {\n ...options,\n language: script.language ?? options.language ?? 'en',\n });\n if (!ast) {\n remainingScripts.push(script);\n continue;\n }\n\n // Extract init block body (top-level event handler with 'init' event)\n const eventNode = ast as EventHandlerNode;\n if (eventNode.type === 'event' && eventNode.event === 'init' && eventNode.body) {\n const result = preRenderInitBlock(modifiedHtml, eventNode.body);\n modifiedHtml = result.html;\n totalPreRendered += result.preRenderedCount;\n\n // If there are remaining commands, keep a modified script\n if (result.remainingInitCommands.length > 0) {\n remainingScripts.push(script);\n }\n // If all commands were pre-rendered, the script is fully consumed\n } else {\n // Not an init block — keep as-is\n remainingScripts.push(script);\n }\n }\n\n return {\n html: modifiedHtml,\n preRenderedCount: totalPreRendered,\n remainingScripts,\n };\n }\n\n // ===========================================================================\n // COMPILATION\n // ===========================================================================\n\n /**\n * Compile a single hyperscript string to JavaScript.\n */\n compileScript(code: string, options: CompileOptions = {}): CompilationResult {\n const mergedOptions = { ...DEFAULT_COMPILE_OPTIONS, ...options };\n\n // Parse\n const ast = this.parse(code, mergedOptions);\n if (!ast) {\n return {\n success: false,\n errors: ['Failed to parse hyperscript'],\n warnings: [],\n metadata: {\n handlerId: '',\n parserUsed: 'traditional',\n commandsUsed: [],\n optimizationsApplied: [],\n needsRuntime: true,\n runtimeHelpers: [],\n },\n };\n }\n\n // Analyze\n const analysis = this.analyze(ast);\n\n // Optimize\n const optimized = this.optimizer.optimize(ast, analysis, mergedOptions.optimizationLevel ?? 2);\n\n // Generate handler ID\n const handlerId = this.generateHandlerId(ast, code);\n\n // Create codegen context\n const ctx = this.createCodegenContext(handlerId, analysis, mergedOptions);\n\n // Generate code\n const generated = this.generateCode(optimized, ctx, analysis);\n\n // Merge codegen-reported imports with context-required helpers\n const allHelpers = new Set([...ctx.requiredHelpers, ...generated.imports]);\n\n // Silent-failure detection: warn if event handler has body commands\n // but generated code has no actual command output\n if (optimized.type === 'event') {\n const eventNode = optimized as EventHandlerNode;\n const bodyLen = eventNode.body?.length ?? 0;\n if (bodyLen > 0 && generated.code) {\n const handlerMatch = /function\\s+_handler_\\w+\\(_event\\)\\s*\\{([\\s\\S]*)\\}\\s*$/.exec(\n generated.code\n );\n if (handlerMatch) {\n const bodyContent = handlerMatch[1]\n .replace(/const _ctx\\s*=\\s*[^;]*;/g, '')\n .replace(/const _el\\s*=\\s*[^;]*;/g, '')\n .trim();\n if (!bodyContent) {\n analysis.warnings.push(\n `Event handler body appears empty despite ${bodyLen} parsed command(s). ` +\n `This may indicate a code generation failure for: \"${code}\"`\n );\n }\n }\n }\n }\n\n return {\n success: true,\n code: generated.code,\n warnings: analysis.warnings,\n metadata: {\n handlerId,\n parserUsed: mergedOptions.language !== 'en' ? 'semantic' : 'traditional',\n language: mergedOptions.language,\n commandsUsed: Array.from(analysis.commandsUsed),\n optimizationsApplied: (optimized as { _optimizations?: string[] })._optimizations ?? [],\n needsRuntime: allHelpers.size > 0,\n runtimeHelpers: Array.from(allHelpers),\n },\n };\n }\n\n /**\n * Compile a pre-parsed AST to JavaScript.\n * Skips parsing entirely — accepts an interchange-format ASTNode directly.\n * Use this when the AST has already been produced by a semantic parser,\n * explicit syntax parser, or other external source.\n */\n compileAST(ast: ASTNode, options: CompileOptions = {}): CompilationResult {\n const mergedOptions = { ...DEFAULT_COMPILE_OPTIONS, ...options };\n\n // Normalize: ensure top-level node is an event handler\n let normalized = ast;\n if (normalized.type !== 'event') {\n normalized = {\n type: 'event',\n event: 'click',\n modifiers: {},\n body: [normalized],\n } as EventHandlerNode;\n }\n\n // Analyze\n const analysis = this.analyze(normalized);\n\n // Optimize\n const optimized = this.optimizer.optimize(\n normalized,\n analysis,\n mergedOptions.optimizationLevel ?? 2\n );\n\n // Generate handler ID (use JSON hash since we have no source string)\n const sourceHint = JSON.stringify(ast).slice(0, 200);\n const handlerId = this.generateHandlerId(optimized, sourceHint);\n\n // Create codegen context\n const ctx = this.createCodegenContext(handlerId, analysis, mergedOptions);\n\n // Generate code\n const generated = this.generateCode(optimized, ctx, analysis);\n\n // Merge helpers\n const allHelpers = new Set([...ctx.requiredHelpers, ...generated.imports]);\n\n // Silent-failure detection\n if (optimized.type === 'event') {\n const eventNode = optimized as EventHandlerNode;\n const bodyLen = eventNode.body?.length ?? 0;\n if (bodyLen > 0 && generated.code) {\n const handlerMatch = /function\\s+_handler_\\w+\\(_event\\)\\s*\\{([\\s\\S]*)\\}\\s*$/.exec(\n generated.code\n );\n if (handlerMatch) {\n const bodyContent = handlerMatch[1]\n .replace(/const _ctx\\s*=\\s*[^;]*;/g, '')\n .replace(/const _el\\s*=\\s*[^;]*;/g, '')\n .trim();\n if (!bodyContent) {\n analysis.warnings.push(\n `Event handler body appears empty despite ${bodyLen} parsed command(s). ` +\n `This may indicate a code generation failure for pre-parsed AST.`\n );\n }\n }\n }\n }\n\n return {\n success: true,\n code: generated.code,\n warnings: analysis.warnings,\n metadata: {\n handlerId,\n parserUsed: 'traditional', // pre-parsed, no parser involved\n language: mergedOptions.language,\n commandsUsed: Array.from(analysis.commandsUsed),\n optimizationsApplied: (optimized as { _optimizations?: string[] })._optimizations ?? [],\n needsRuntime: allHelpers.size > 0,\n runtimeHelpers: Array.from(allHelpers),\n },\n };\n }\n\n /**\n * Compile explicit bracket syntax or LLM JSON to JavaScript.\n * Uses the framework IR directly — no semantic or traditional parser needed.\n */\n compileExplicit(code: string, options: CompileOptions = {}): CompilationResult {\n try {\n const ast = isExplicitSyntax(code)\n ? this.semanticNodeToAOT(parseExplicit(code))\n : this.semanticNodeToAOT(fromProtocolJSON(JSON.parse(code.trim())));\n\n return this.compileAST(ast, options);\n } catch (error) {\n return {\n success: false,\n errors: [error instanceof Error ? error.message : String(error)],\n warnings: [],\n metadata: {\n handlerId: '',\n parserUsed: 'traditional',\n commandsUsed: [],\n optimizationsApplied: [],\n needsRuntime: false,\n runtimeHelpers: [],\n },\n };\n }\n }\n\n /**\n * Compile multiple extracted scripts.\n */\n compile(scripts: ExtractedScript[], options: CompileOptions = {}): BatchCompilationResult {\n const handlers: CompiledHandler[] = [];\n const fallbacks: FallbackScript[] = [];\n const allImports = new Set<string>();\n\n for (const script of scripts) {\n const scriptOptions = {\n ...options,\n language: script.language ?? options.language ?? 'en',\n };\n\n const result = this.compileScript(script.code, scriptOptions);\n\n if (result.success && result.code) {\n handlers.push({\n id: result.metadata.handlerId,\n source: script.code,\n events: this.extractEvents(result.code),\n code: result.code,\n binding: {\n elementId: script.elementId,\n elementSelector: script.elementSelector,\n },\n });\n\n for (const helper of result.metadata.runtimeHelpers) {\n allImports.add(helper);\n }\n } else {\n fallbacks.push({\n id: `fallback_${fallbacks.length}`,\n script: script.code,\n reason: result.errors?.join(', ') ?? 'Unknown error',\n location: script.location,\n });\n }\n }\n\n // Generate combined code\n const combinedCode = this.generateCombinedCode(handlers, Array.from(allImports), options);\n\n return {\n handlers,\n code: combinedCode,\n fallbacks,\n stats: {\n total: scripts.length,\n compiled: handlers.length,\n fallbacks: fallbacks.length,\n totalSize: combinedCode.length,\n runtimeSize: this.estimateRuntimeSize(allImports),\n },\n };\n }\n\n // ===========================================================================\n // CODE GENERATION\n // ===========================================================================\n\n /**\n * Generate JavaScript code from an optimized AST.\n */\n private generateCode(\n ast: ASTNode,\n ctx: CodegenContext,\n analysis: AnalysisResult\n ): { code: string; imports: string[] } {\n // Event handler\n if (ast.type === 'event') {\n const eventCodegen = new EventHandlerCodegen(ctx, analysis);\n const generated = eventCodegen.generate(ast as EventHandlerNode);\n return {\n code: generated.handlerCode,\n imports: generated.imports,\n };\n }\n\n // Command sequence or other\n const exprCodegen = new ExpressionCodegen(ctx);\n return {\n code: exprCodegen.generate(ast),\n imports: Array.from(ctx.requiredHelpers),\n };\n }\n\n /**\n * Generate combined code for multiple handlers.\n */\n private generateCombinedCode(\n handlers: CompiledHandler[],\n imports: string[],\n options: CompileOptions\n ): string {\n const codegenOptions = { ...DEFAULT_CODEGEN_OPTIONS, ...options.codegen };\n const lines: string[] = [];\n\n // Ensure 'ready' is always included (binding code requires it)\n const allImports = [...new Set([...imports, 'ready'])];\n\n // Import statement and runtime alias\n const importList = allImports.join(', ');\n if (codegenOptions.mode === 'iife') {\n lines.push('(function() {');\n lines.push(\"var _ls = typeof lokascriptRuntime !== 'undefined' ? lokascriptRuntime : {};\");\n lines.push('var _rt = { ' + allImports.map(i => `${i}: _ls.${i}`).join(', ') + ' };');\n } else {\n if (codegenOptions.mode === 'esm') {\n lines.push(`import { ${importList} } from '${codegenOptions.runtimeImport}';`);\n } else if (codegenOptions.mode === 'cjs') {\n lines.push(`const { ${importList} } = require('${codegenOptions.runtimeImport}');`);\n }\n lines.push('const _rt = { ' + allImports.map(i => `${i}: ${i}`).join(', ') + ' };');\n }\n lines.push('');\n\n // Handler functions\n for (const handler of handlers) {\n if (codegenOptions.preserveComments) {\n lines.push(`// Original: ${handler.source}`);\n }\n lines.push(handler.code);\n lines.push('');\n }\n\n // Binding code\n lines.push('// Bind handlers to elements');\n lines.push('_rt.ready(() => {');\n\n for (const handler of handlers) {\n const selector = handler.binding.elementId\n ? `#${handler.binding.elementId}`\n : (handler.binding.elementSelector ?? '[_]');\n\n for (const event of handler.events) {\n lines.push(` document.querySelectorAll('${selector}').forEach(_el => {`);\n lines.push(` _el.addEventListener('${event}', _handler_${handler.id});`);\n lines.push(' });');\n }\n }\n\n lines.push('});');\n\n // Close IIFE wrapper\n if (codegenOptions.mode === 'iife') {\n lines.push('})();');\n }\n\n return lines.join('\\n');\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n /**\n * Generate a unique handler ID.\n */\n private generateHandlerId(ast: ASTNode, code: string): string {\n // Get event name if available\n const event = (ast as EventHandlerNode).event ?? 'handler';\n\n // Get primary command\n const body = (ast as { body?: ASTNode[] }).body ?? [];\n const firstCmd = body[0] as { name?: string } | undefined;\n const command = firstCmd?.name ?? 'action';\n\n // Hash the code for uniqueness\n let hash = 5381;\n for (let i = 0; i < code.length; i++) {\n hash = ((hash << 5) + hash) ^ code.charCodeAt(i);\n }\n const hashStr = Math.abs(hash).toString(36).slice(0, 4);\n\n // Generate ID\n let id = `${event}_${command}_${hashStr}`;\n\n // Handle collisions\n let suffix = 0;\n while (this.usedIds.has(id)) {\n id = `${event}_${command}_${hashStr}${suffix++}`;\n }\n\n this.usedIds.add(id);\n return id;\n }\n\n /**\n * Create a codegen context.\n */\n private createCodegenContext(\n handlerId: string,\n analysis: AnalysisResult,\n options: CompileOptions\n ): CodegenContext {\n const selectorCache = new Map<string, string>();\n const requiredHelpers = new Set<string>();\n let idCounter = 0;\n\n // Pre-populate selector cache\n for (const info of analysis.expressions.selectors) {\n if (info.canCache && info.usages.length > 1) {\n const cacheKey =\n '_sel_' + sanitizeIdentifier(info.selector).slice(0, 20) + '_' + idCounter++;\n selectorCache.set(info.selector, cacheKey);\n }\n }\n\n const exprCodegenRef: { current: ExpressionCodegen | null } = { current: null };\n\n const ctx: CodegenContext = {\n handlerId,\n generateId: (prefix = '_id') => `${prefix}_${idCounter++}`,\n generateExpression: (node: ASTNode) => {\n if (!exprCodegenRef.current) {\n exprCodegenRef.current = new ExpressionCodegen(ctx);\n }\n return exprCodegenRef.current.generate(node);\n },\n implicitTarget: '_ctx.me',\n localVarDeclarations: '',\n canCacheSelector: (selector: string) => selectorCache.has(selector),\n getCachedSelector: (selector: string) =>\n selectorCache.get(selector) ?? `document.querySelector('${selector}')`,\n requireHelper: (name: string) => {\n requiredHelpers.add(name);\n },\n requiredHelpers,\n analysis,\n options: { ...DEFAULT_CODEGEN_OPTIONS, ...options.codegen },\n };\n\n return ctx;\n }\n\n /**\n * Extract event names from generated code.\n */\n private extractEvents(code: string): string[] {\n const events: string[] = [];\n const match = /function\\s+_handler_\\w+\\s*\\(\\s*_event\\s*\\)/.exec(code);\n if (match) {\n // Default to click if we can't determine\n events.push('click');\n }\n return events.length > 0 ? events : ['click'];\n }\n\n /**\n * Estimate runtime size based on required helpers.\n */\n private estimateRuntimeSize(imports: Set<string>): number {\n // Rough estimates in bytes\n const helperSizes: Record<string, number> = {\n createContext: 200,\n HALT: 50,\n EXIT: 50,\n globals: 100,\n toggle: 150,\n toggleAttr: 100,\n addClass: 80,\n removeClass: 80,\n getProp: 120,\n setProp: 120,\n getValues: 180,\n contains: 150,\n matches: 50,\n debounce: 150,\n throttle: 150,\n wait: 80,\n send: 150,\n delegate: 200,\n fetchJSON: 150,\n fetchText: 150,\n fetchHTML: 180,\n ready: 100,\n };\n\n let total = 500; // Base runtime overhead\n for (const helper of imports) {\n total += helperSizes[helper] ?? 100;\n }\n return total;\n }\n}\n\n// =============================================================================\n// CONVENIENCE EXPORTS\n// =============================================================================\n\n/**\n * Create a new AOT compiler instance.\n */\nexport function createCompiler(): AOTCompiler {\n return new AOTCompiler();\n}\n\n/**\n * Compile hyperscript code to JavaScript (convenience function).\n */\nexport async function compileHyperscript(code: string, options?: CompileOptions): Promise<string> {\n const compiler = new AOTCompiler();\n const result = compiler.compileScript(code, options);\n\n if (!result.success) {\n throw new Error(result.errors?.join(', ') ?? 'Compilation failed');\n }\n\n return result.code ?? '';\n}\n\n/**\n * Create an AOT compiler with both core and semantic parsers wired up.\n * Dynamically imports @hyperfixi/core and @lokascript/semantic if available.\n */\nexport async function createMultilingualCompiler(): Promise<AOTCompiler> {\n const compiler = new AOTCompiler();\n\n try {\n const { createCoreParserAdapter } = await import('./core-parser-adapter.js');\n compiler.setParser(await createCoreParserAdapter());\n } catch {\n /* @hyperfixi/core not available */\n }\n\n try {\n const { createSemanticAdapter } = await import('./semantic-adapter.js');\n compiler.setSemanticParser(await createSemanticAdapter());\n } catch {\n /* @lokascript/semantic not available */\n }\n\n return compiler;\n}\n\nexport default AOTCompiler;\n","/**\n * @hyperfixi/aot-compiler\n *\n * Ahead-of-Time compiler for LokaScript/hyperscript.\n * Transforms hyperscript to optimized JavaScript at build time.\n *\n * @example\n * ```typescript\n * import { AOTCompiler, compileHyperscript } from '@hyperfixi/aot-compiler';\n *\n * // Simple usage\n * const js = await compileHyperscript('on click toggle .active');\n *\n * // Full compiler usage\n * const compiler = new AOTCompiler();\n * const scripts = compiler.extract(htmlSource, 'index.html');\n * const result = compiler.compile(scripts, { language: 'en' });\n * console.log(result.code);\n * ```\n */\n\n// =============================================================================\n// MAIN EXPORTS\n// =============================================================================\n\nexport {\n AOTCompiler,\n createCompiler,\n compileHyperscript,\n createMultilingualCompiler,\n} from './compiler/aot-compiler.js';\n\nexport { Analyzer, analyze } from './compiler/analyzer.js';\n\nexport { SemanticParserAdapter, createSemanticAdapter } from './compiler/semantic-adapter.js';\n\nexport { CoreParserAdapter, createCoreParserAdapter } from './compiler/core-parser-adapter.js';\n\nexport {\n OptimizationPipeline,\n ConstantFoldingPass,\n SelectorCachingPass,\n DeadCodeEliminationPass,\n LoopUnrollingPass,\n createOptimizer,\n optimize,\n} from './optimizations/index.js';\n\n// =============================================================================\n// SCANNER EXPORTS\n// =============================================================================\n\nexport {\n HTMLScanner,\n VueScanner,\n SvelteScanner,\n JSXScanner,\n scanFiles,\n createScanner,\n} from './scanner/html-scanner.js';\n\n// =============================================================================\n// TRANSFORM EXPORTS\n// =============================================================================\n\nexport {\n ExpressionCodegen,\n generateExpression,\n sanitizeClassName,\n sanitizeSelector,\n sanitizeIdentifier,\n} from './transforms/expression-transforms.js';\n\nexport {\n commandCodegens,\n generateCommand,\n generateIf,\n generateRepeat,\n generateForEach,\n generateWhile,\n} from './transforms/command-transforms.js';\n\nexport {\n EventHandlerCodegen,\n generateEventHandler,\n generateBindings,\n generateInitialization,\n} from './transforms/event-transforms.js';\n\n// =============================================================================\n// TYPE EXPORTS\n// =============================================================================\n\nexport type {\n // Source extraction\n SourceLocation,\n ExtractedScript,\n ScannerOptions,\n ScanResult,\n\n // AST types\n ASTNode,\n EventHandlerNode,\n CommandNode,\n LiteralNode,\n IdentifierNode,\n SelectorNode,\n VariableNode,\n BinaryExpressionNode,\n UnaryExpressionNode,\n MemberExpressionNode,\n PossessiveNode,\n CallExpressionNode,\n PositionalNode,\n IfNode,\n RepeatNode,\n ForEachNode,\n WhileNode,\n\n // Event modifiers\n EventModifiers,\n\n // Analysis\n VariableInfo,\n SelectorInfo,\n AnalysisResult,\n\n // Code generation\n CodegenOptions,\n GeneratedExpression,\n GeneratedHandler,\n GeneratedCode,\n CodegenContext,\n SourceMap,\n\n // Optimization\n OptimizationPass,\n OptimizedAST,\n\n // Compilation\n CompileOptions,\n ParseResult,\n ParseError,\n CompilationResult,\n BatchCompilationResult,\n CompiledHandler,\n FallbackScript,\n\n // Runtime\n ExecutionContext,\n CompiledBehavior,\n\n // CLI\n CLICompileOptions,\n CLIAnalyzeOptions,\n} from './types/aot-types.js';\n\n// =============================================================================\n// VERSION\n// =============================================================================\n\nexport const VERSION = '1.0.0';\n"],"mappings":"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","names":["target","targetNode","createCoreParserAdapter","createSemanticAdapter"]}
|