@akashjs/compiler 0.1.10 → 0.1.12

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parse.ts","../src/template.ts","../src/style.ts","../src/transform.ts","../src/analyze.ts","../src/sourcemap.ts","../src/optimize.ts","../src/language-service.ts","../src/index.ts"],"names":["parse","source","parseBlock","content","attrs","start","end","extractAttr","_attrs","tag","factory","openPattern","closePattern","openMatch","contentStart","closeMatch","contentEnd","name","parseTemplate","nodes","pos","element","parseElement","expr","parseExpression","textEnd","findNextBoundary","text","tagMatch","directives","ws","attr","parseAttribute","isComponent","children","closeTag","closeIdx","findClosingTag","innerContent","parsedChildren","nameMatch","extractBraced","quote","endQuote","result","depth","ch","skipString","openIdx","afterTag","generateScopeId","filename","createHash","scopeStyles","css","scopeId","scopeBlock","insideKeyframes","wsMatch","endComment","braceIdx","prelude","trimmedPrelude","bodyStart","bodyEnd","findMatchingBrace","body","atRule","scopedSelector","scopeSelectorList","selectorList","s","trimmed","scopeSelector","selector","parts","i","part","isCombinator","before","after","colonIdx","transform","sfc","options","runtimeImports","script","template","detectAutoImports","isServer","templateCode","generateServerRenderBody","generateRenderBody","code","cleanScript","propsInterface","extractPropsInterface","userImports","bodyScript","extractUserImports","generics","indented","line","isAlreadyFunction","value","needsReactiveWrapper","imports","scriptApis","api","usagePattern","importPattern","templatePrimitives","lines","bodyLines","inMultiLineImport","match","generateNode","varName","node","indent","pad","generateElement","generateComponentCall","ifDirective","d","innerLines","innerNode","forDirective","keyDirective","forMatch","itemVar","listExpr","keyExpr","bindDirectives","bindDir","prop","signalExpr","eventName","valuePath","childVar","propParts","jsxContent","tryCompileJSXProp","childBody","generateChildrenBody","propsStr","compiled","tryCompileArrowJSX","meaningful","cVar","arrowMatch","params","jsxBody","arrowResult","generateServerNode","generateServerElement","SERVER_VOID_ELEMENTS","openTag","child","analyzeTemplate","analyzeNode","extractSignalReads","analyzeElement","analyzeAttributes","isDynamic","hasDynamicContent","dir","analyzeDirective","event","expression","context","KNOWN_NON_SIGNALS","callPattern","a","c","isStaticExpression","VLQ_CHARS","encodeVLQ","vlq","digit","SourceMapBuilder","idx","mapping","generatedStart","originalStart","lineCount","sourceIndex","outputFilename","sorted","b","encodeMappings","json","mappings","prevGeneratedLine","prevGeneratedColumn","prevOriginalLine","prevOriginalColumn","prevSource","segment","segments","createAkashSourceMap","originalSource","scriptStartLine","scriptLineCount","generatedScriptStartLine","builder","isStaticNode","staticNodeToHtml","html","extractHoistedTemplates","templates","counter","visit","generateHoistedDeclarations","t","getHoistedVar","getOptimizationStats","totalNodes","staticNodes","count","hoisted","RUNTIME_APIS","BUILT_IN_COMPONENTS","DIRECTIVES","HTML_EVENTS","createLanguageService","diagnostics","validateNodes","err","position","isInScript","isInTemplate","isInsideTag","word","getWordAt","comp","baseOffset","inScript","inTemplate","lastOpen","lastClose","col","compile"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * .akash SFC parser.\n *\n * Extracts <script>, <template>, and <style> blocks from\n * a single-file component. Lightweight regex-based approach —\n * the three top-level tags are well-defined so a full HTML\n * parser is unnecessary.\n */\n\nimport type { ParsedSFC, ScriptBlock, TemplateBlock, StyleBlock } from './types.js';\n\nexport function parse(source: string): ParsedSFC {\n return {\n script: parseBlock<ScriptBlock>(source, 'script', (content, attrs, start, end) => ({\n content,\n lang: extractAttr(attrs, 'lang') ?? 'ts',\n start,\n end,\n })),\n template: parseBlock<TemplateBlock>(source, 'template', (content, _attrs, start, end) => ({\n content,\n start,\n end,\n })),\n style: parseBlock<StyleBlock>(source, 'style', (content, attrs, start, end) => ({\n content,\n scoped: attrs.includes('scoped'),\n start,\n end,\n })),\n };\n}\n\nfunction parseBlock<T>(\n source: string,\n tag: string,\n factory: (content: string, attrs: string, start: number, end: number) => T,\n): T | null {\n // Match <tag ...> ... </tag> — handles attributes like lang=\"ts\" or scoped\n const openPattern = new RegExp(`<${tag}(\\\\b[^>]*)>`, 'i');\n const closePattern = new RegExp(`</${tag}>`, 'i');\n\n const openMatch = openPattern.exec(source);\n if (!openMatch) return null;\n\n const attrs = openMatch[1] ?? '';\n const contentStart = openMatch.index + openMatch[0].length;\n\n const closeMatch = closePattern.exec(source.slice(contentStart));\n if (!closeMatch) return null;\n\n const contentEnd = contentStart + closeMatch.index;\n const content = source.slice(contentStart, contentEnd);\n\n return factory(content.trim(), attrs, contentStart, contentEnd);\n}\n\nfunction extractAttr(attrs: string, name: string): string | null {\n const match = new RegExp(`${name}=[\"']([^\"']+)[\"']`).exec(attrs);\n return match?.[1] ?? null;\n}\n","/**\n * Template compiler.\n *\n * Transforms JSX-like template content from .akash files into\n * imperative DOM creation code that uses the AkashJS runtime.\n *\n * This is a simplified implementation that handles the core patterns.\n * A production version would use a proper AST parser.\n */\n\n/** Represents a parsed template node */\nexport interface TemplateNode {\n type: 'element' | 'text' | 'expression' | 'component';\n tag?: string;\n attrs?: Array<{ name: string; value: string; dynamic: boolean }>;\n children?: TemplateNode[];\n content?: string;\n directives?: Directive[];\n}\n\nexport interface Directive {\n name: string; // 'if', 'for', 'key', 'visible', 'else', 'else-if', 'bind'\n value: string;\n /** Argument for directives like bind:value (arg = 'value') */\n arg?: string;\n}\n\n/**\n * Parse template content into a simple AST.\n *\n * Handles:\n * - HTML elements: <div class=\"foo\">...</div>\n * - Self-closing: <input />\n * - Expressions: {count()}\n * - Dynamic attributes: class={expr}\n * - Directives: :if={expr}, :for={item of items()}\n * - Components: <MyComponent prop={value} />\n */\nexport function parseTemplate(content: string): TemplateNode[] {\n const nodes: TemplateNode[] = [];\n let pos = 0;\n\n while (pos < content.length) {\n if (content[pos] === '<') {\n // Closing tag — handled by parent parseElement call\n if (content[pos + 1] === '/') break;\n\n const element = parseElement(content, pos);\n if (element) {\n nodes.push(element.node);\n pos = element.end;\n continue;\n }\n }\n\n if (content[pos] === '{') {\n const expr = parseExpression(content, pos);\n if (expr) {\n nodes.push(expr.node);\n pos = expr.end;\n continue;\n }\n }\n\n // Text content\n const textEnd = findNextBoundary(content, pos);\n const text = content.slice(pos, textEnd).trim();\n if (text) {\n nodes.push({ type: 'text', content: text });\n }\n pos = textEnd;\n }\n\n return nodes;\n}\n\nfunction parseElement(\n content: string,\n start: number,\n): { node: TemplateNode; end: number } | null {\n // Match opening tag\n const tagMatch = /^<([a-zA-Z][a-zA-Z0-9-]*)/.exec(content.slice(start));\n if (!tagMatch) return null;\n\n const tag = tagMatch[1];\n let pos = start + tagMatch[0].length;\n\n // Parse attributes and directives\n const attrs: Array<{ name: string; value: string; dynamic: boolean }> = [];\n const directives: Directive[] = [];\n\n while (pos < content.length) {\n // Skip whitespace\n const ws = /^\\s+/.exec(content.slice(pos));\n if (ws) pos += ws[0].length;\n\n // End of opening tag\n if (content[pos] === '>' || content.slice(pos, pos + 2) === '/>') break;\n\n // Parse attribute\n const attr = parseAttribute(content, pos);\n if (attr) {\n if (attr.attr.name.startsWith('bind:')) {\n // bind:value={signal} — two-way binding directive\n directives.push({\n name: 'bind',\n arg: attr.attr.name.slice(5), // e.g., 'value'\n value: attr.attr.value,\n });\n } else if (attr.attr.name.startsWith(':')) {\n directives.push({\n name: attr.attr.name.slice(1), // remove ':'\n value: attr.attr.value,\n });\n } else {\n attrs.push(attr.attr);\n }\n pos = attr.end;\n } else {\n pos++; // skip unrecognized character\n }\n }\n\n const isComponent = tag[0] === tag[0].toUpperCase();\n\n // Self-closing\n if (content.slice(pos, pos + 2) === '/>') {\n return {\n node: {\n type: isComponent ? 'component' : 'element',\n tag,\n attrs,\n directives: directives.length > 0 ? directives : undefined,\n children: [],\n },\n end: pos + 2,\n };\n }\n\n // Skip >\n pos++;\n\n // Parse children\n const children = parseTemplate(content.slice(pos));\n const childContent = content.slice(pos);\n\n // Find closing tag\n const closeTag = `</${tag}>`;\n const closeIdx = findClosingTag(content, pos, tag);\n if (closeIdx === -1) {\n // No closing tag found — treat as self-closing\n return {\n node: {\n type: isComponent ? 'component' : 'element',\n tag,\n attrs,\n directives: directives.length > 0 ? directives : undefined,\n children,\n },\n end: content.length,\n };\n }\n\n // Re-parse children within the bounds of the closing tag\n const innerContent = content.slice(pos, closeIdx);\n const parsedChildren = parseTemplate(innerContent);\n\n return {\n node: {\n type: isComponent ? 'component' : 'element',\n tag,\n attrs,\n directives: directives.length > 0 ? directives : undefined,\n children: parsedChildren,\n },\n end: closeIdx + closeTag.length,\n };\n}\n\nfunction parseAttribute(\n content: string,\n start: number,\n): { attr: { name: string; value: string; dynamic: boolean }; end: number } | null {\n // Match attribute name (including : and bind: prefixes for directives)\n const nameMatch = /^(?:bind:|[:a-zA-Z_])[\\w:.-]*/.exec(content.slice(start));\n if (!nameMatch) return null;\n\n const name = nameMatch[0];\n let pos = start + name.length;\n\n // No value — boolean attribute\n if (content[pos] !== '=') {\n return { attr: { name, value: 'true', dynamic: false }, end: pos };\n }\n\n pos++; // skip =\n\n // Dynamic value: ={expression}\n if (content[pos] === '{') {\n const expr = extractBraced(content, pos);\n if (expr) {\n return {\n attr: { name, value: expr.content, dynamic: true },\n end: expr.end,\n };\n }\n }\n\n // String value: \"...\" or '...'\n const quote = content[pos];\n if (quote === '\"' || quote === \"'\") {\n const endQuote = content.indexOf(quote, pos + 1);\n if (endQuote === -1) return null;\n return {\n attr: { name, value: content.slice(pos + 1, endQuote), dynamic: false },\n end: endQuote + 1,\n };\n }\n\n return null;\n}\n\nfunction parseExpression(\n content: string,\n start: number,\n): { node: TemplateNode; end: number } | null {\n const result = extractBraced(content, start);\n if (!result) return null;\n return {\n node: { type: 'expression', content: result.content },\n end: result.end,\n };\n}\n\nfunction extractBraced(\n content: string,\n start: number,\n): { content: string; end: number } | null {\n if (content[start] !== '{') return null;\n\n let depth = 1;\n let pos = start + 1;\n\n while (pos < content.length && depth > 0) {\n const ch = content[pos];\n\n if (ch === '\"' || ch === \"'\" || ch === '`') {\n pos = skipString(content, pos) + 1;\n continue;\n }\n\n if (ch === '{') depth++;\n else if (ch === '}') depth--;\n\n pos++;\n }\n\n return {\n content: content.slice(start + 1, pos - 1).trim(),\n end: pos,\n };\n}\n\nfunction skipString(content: string, start: number): number {\n const quote = content[start];\n let pos = start + 1;\n while (pos < content.length) {\n if (content[pos] === '\\\\') {\n pos += 2;\n continue;\n }\n if (content[pos] === quote) return pos;\n pos++;\n }\n return pos;\n}\n\nfunction findNextBoundary(content: string, start: number): number {\n let pos = start;\n while (pos < content.length) {\n if (content[pos] === '<' || content[pos] === '{') return pos;\n pos++;\n }\n return pos;\n}\n\nfunction findClosingTag(content: string, start: number, tag: string): number {\n const closeTag = `</${tag}>`;\n let depth = 1;\n let pos = start;\n\n while (pos < content.length) {\n const openIdx = content.indexOf(`<${tag}`, pos);\n const closeIdx = content.indexOf(closeTag, pos);\n\n if (closeIdx === -1) return -1;\n\n if (openIdx !== -1 && openIdx < closeIdx) {\n // Check if this is a real open tag (not self-closing)\n const afterTag = content.indexOf('>', openIdx);\n if (afterTag !== -1 && content[afterTag - 1] !== '/') {\n depth++;\n }\n pos = openIdx + 1;\n } else {\n depth--;\n if (depth === 0) return closeIdx;\n pos = closeIdx + 1;\n }\n }\n\n return -1;\n}\n","/**\n * Scoped CSS processor.\n *\n * Adds a unique data attribute to selectors so styles are scoped\n * to the component. Same approach as Vue and Svelte.\n */\n\nimport { createHash } from 'crypto';\n\n/** Generate a scope ID from a filename */\nexport function generateScopeId(filename: string): string {\n const hash = createHash('md5').update(filename).digest('hex').slice(0, 6);\n return `data-a-${hash}`;\n}\n\n/**\n * Rewrite CSS selectors to include the scope attribute.\n *\n * .counter { } → .counter[data-a-x7k3f] { }\n *\n * Properly handles @-rules like @media, @supports, @keyframes —\n * only selectors inside rule blocks are scoped, never the at-rule itself.\n */\nexport function scopeStyles(css: string, scopeId: string): string {\n return scopeBlock(css, scopeId, false);\n}\n\n/**\n * Recursively scope a CSS block. Parses brace-delimited structure\n * so @media/at-rules are preserved and only selectors are scoped.\n */\nfunction scopeBlock(css: string, scopeId: string, insideKeyframes: boolean): string {\n let result = '';\n let pos = 0;\n\n while (pos < css.length) {\n // Skip whitespace\n const wsMatch = /^\\s+/.exec(css.slice(pos));\n if (wsMatch) {\n result += wsMatch[0];\n pos += wsMatch[0].length;\n if (pos >= css.length) break;\n }\n\n // Skip comments\n if (css.slice(pos, pos + 2) === '/*') {\n const endComment = css.indexOf('*/', pos + 2);\n if (endComment === -1) {\n result += css.slice(pos);\n break;\n }\n result += css.slice(pos, endComment + 2);\n pos = endComment + 2;\n continue;\n }\n\n // Closing brace — end of current block\n if (css[pos] === '}') {\n result += '}';\n pos++;\n continue;\n }\n\n // Find the next opening brace to get the selector/at-rule\n const braceIdx = css.indexOf('{', pos);\n if (braceIdx === -1) {\n // No more blocks — append remaining text\n result += css.slice(pos);\n break;\n }\n\n const prelude = css.slice(pos, braceIdx);\n const trimmedPrelude = prelude.trim();\n\n // Find the matching closing brace\n const bodyStart = braceIdx + 1;\n const bodyEnd = findMatchingBrace(css, braceIdx);\n const body = css.slice(bodyStart, bodyEnd);\n\n if (trimmedPrelude.startsWith('@')) {\n // At-rule\n const atRule = trimmedPrelude.split(/\\s/)[0]; // e.g. @media, @keyframes\n\n if (atRule === '@keyframes' || atRule === '@-webkit-keyframes') {\n // Don't scope inside keyframes — just pass through\n result += prelude + '{' + body + '}';\n } else if (atRule === '@font-face') {\n result += prelude + '{' + body + '}';\n } else {\n // @media, @supports, @layer, etc. — recurse into the body\n result += prelude + '{' + scopeBlock(body, scopeId, false) + '}';\n }\n } else if (insideKeyframes) {\n // Inside @keyframes — don't scope (from, to, percentages)\n result += prelude + '{' + body + '}';\n } else {\n // Regular selector — scope it\n const scopedSelector = scopeSelectorList(trimmedPrelude, scopeId);\n result += prelude.replace(trimmedPrelude, scopedSelector) + '{' + body + '}';\n }\n\n pos = bodyEnd + 1;\n }\n\n return result;\n}\n\n/** Find the index of the closing brace matching the opening brace at `openIdx`. */\nfunction findMatchingBrace(css: string, openIdx: number): number {\n let depth = 1;\n let pos = openIdx + 1;\n\n while (pos < css.length && depth > 0) {\n if (css[pos] === '{') depth++;\n else if (css[pos] === '}') depth--;\n if (depth > 0) pos++;\n }\n\n return pos;\n}\n\n/** Scope a comma-separated selector list. */\nfunction scopeSelectorList(selectorList: string, scopeId: string): string {\n return selectorList\n .split(',')\n .map((s: string) => {\n const trimmed = s.trim();\n if (!trimmed) return s;\n\n if (\n trimmed === ':root' ||\n trimmed === ':host' ||\n trimmed.includes(scopeId)\n ) {\n return s;\n }\n\n return scopeSelector(trimmed, scopeId);\n })\n .join(',');\n}\n\nfunction scopeSelector(selector: string, scopeId: string): string {\n // Split by combinators, scope the last simple selector\n const parts = selector.split(/(\\s*[>+~]\\s*|\\s+)/);\n\n // Find the last non-empty, non-combinator part\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i].trim();\n if (part && !isCombinator(part)) {\n // Add scope attribute after the selector\n if (part.includes('::')) {\n // For pseudo-elements, insert before ::\n const [before, after] = part.split('::');\n parts[i] = parts[i].replace(part, `${before}[${scopeId}]::${after}`);\n } else if (part.includes(':')) {\n // For pseudo-classes, insert before :\n const colonIdx = part.indexOf(':');\n const before = part.slice(0, colonIdx);\n const after = part.slice(colonIdx);\n parts[i] = parts[i].replace(part, `${before}[${scopeId}]${after}`);\n } else {\n parts[i] = parts[i].replace(part, `${part}[${scopeId}]`);\n }\n break;\n }\n }\n\n return parts.join('');\n}\n\nfunction isCombinator(s: string): boolean {\n return s === '>' || s === '+' || s === '~';\n}\n","/**\n * Code generator.\n *\n * Transforms a parsed .akash SFC into JavaScript that uses\n * the AkashJS runtime. The output is a defineComponent() call\n * with imperative DOM creation code.\n */\n\nimport type { ParsedSFC, CompileOptions, CompileResult } from './types.js';\nimport { parseTemplate, type TemplateNode } from './template.js';\nimport { scopeStyles, generateScopeId } from './style.js';\n\nexport function transform(sfc: ParsedSFC, options: CompileOptions = {}): CompileResult {\n const scopeId = options.scopeId ?? (options.filename ? generateScopeId(options.filename) : undefined);\n const imports = new Set<string>();\n const runtimeImports = new Set<string>();\n\n // Always need defineComponent\n runtimeImports.add('defineComponent');\n\n // Analyze script for auto-imports\n const script = sfc.script?.content ?? '';\n const template = sfc.template?.content ?? '';\n detectAutoImports(script, template, runtimeImports);\n\n const isServer = options.mode === 'server';\n\n // Parse template\n let templateCode = '';\n if (sfc.template) {\n const nodes = parseTemplate(sfc.template.content);\n if (isServer) {\n templateCode = generateServerRenderBody(nodes, runtimeImports, scopeId);\n } else {\n templateCode = generateRenderBody(nodes, runtimeImports, scopeId);\n }\n }\n\n // Build output\n let code = '';\n\n // Runtime imports\n if (runtimeImports.size > 0) {\n code += `import { ${[...runtimeImports].join(', ')} } from '@akashjs/runtime';\\n`;\n }\n\n // User script (with Props interface extracted)\n const { cleanScript, propsInterface } = extractPropsInterface(script);\n\n // Separate user imports from the rest of the script\n const { userImports, bodyScript } = extractUserImports(cleanScript);\n\n // Hoist user imports to top level\n if (userImports.length > 0) {\n code += userImports.join('\\n') + '\\n';\n }\n\n // Generate the component\n const generics = propsInterface ? `<${propsInterface}>` : '';\n\n code += '\\n';\n code += `export default defineComponent${generics}((ctx) => {\\n`;\n\n // Inject props destructuring if the script uses `props`\n if (script.includes('props')) {\n code += ` const props = ctx.props;\\n`;\n }\n\n // Include user script body (without imports, indented)\n if (bodyScript.trim()) {\n const indented = bodyScript\n .trim()\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n');\n code += `${indented}\\n`;\n }\n\n code += '\\n';\n code += ` return () => {\\n`;\n code += templateCode;\n code += ` };\\n`;\n code += `});\\n`;\n\n // Process CSS\n let css: string | undefined;\n if (sfc.style) {\n css = sfc.style.scoped && scopeId\n ? scopeStyles(sfc.style.content, scopeId)\n : sfc.style.content;\n }\n\n return { code, css };\n}\n\n/** Check if a value is already a function expression (arrow or function keyword) */\nfunction isAlreadyFunction(value: string): boolean {\n const trimmed = value.trim();\n // Arrow function: () => ..., (x) => ..., x => ...\n if (/^(?:\\([^)]*\\)|[a-zA-Z_$]\\w*)\\s*=>/.test(trimmed)) return true;\n // Function keyword\n if (/^function[\\s(]/.test(trimmed)) return true;\n return false;\n}\n\n/**\n * Check if a dynamic expression contains reactive reads (function calls)\n * that need getter wrapping for reactivity.\n *\n * Static values like [...], {...}, \"...\", 42, true, plain identifiers\n * should NOT be wrapped — only expressions containing () calls.\n */\nfunction needsReactiveWrapper(value: string): boolean {\n const trimmed = value.trim();\n\n // Literal array or object — static even if dynamic attribute\n if (/^\\[/.test(trimmed) && !trimmed.includes('(')) return false;\n if (/^\\{/.test(trimmed) && !trimmed.includes('(')) return false;\n\n // String/number/boolean literals\n if (/^[\"'`]/.test(trimmed)) return false;\n if (/^\\d/.test(trimmed)) return false;\n if (trimmed === 'true' || trimmed === 'false' || trimmed === 'null' || trimmed === 'undefined') return false;\n\n // Template literal without function calls\n if (trimmed.startsWith('`') && !trimmed.includes('(')) return false;\n\n // Contains a function call — needs wrapping for reactivity\n // Matches: foo(), foo.bar(), foo()?.bar, etc.\n if (/\\w\\(/.test(trimmed)) return true;\n\n // Plain identifier (variable reference) — no call, no reactivity needed\n if (/^[a-zA-Z_$][\\w$.]*$/.test(trimmed)) return false;\n\n // Property access without calls — static\n if (!trimmed.includes('(')) return false;\n\n return true;\n}\n\n/** Detect which runtime APIs are used in script/template and need auto-importing */\nfunction detectAutoImports(script: string, template: string, imports: Set<string>): void {\n // APIs that may appear in the script block\n const scriptApis = [\n 'signal', 'computed', 'effect', 'batch', 'untrack',\n 'onMount', 'onUnmount', 'onError', 'ref',\n 'createContext', 'provide', 'inject',\n 'Show', 'For',\n ];\n\n for (const api of scriptApis) {\n const usagePattern = new RegExp(`\\\\b${api}\\\\b`);\n const importPattern = new RegExp(`import\\\\s+.*\\\\b${api}\\\\b.*from`);\n if (usagePattern.test(script) && !importPattern.test(script)) {\n imports.add(api);\n }\n }\n\n // Template primitives — auto-import when used as tags in the template\n const templatePrimitives = ['Show', 'For'];\n for (const tag of templatePrimitives) {\n if (new RegExp(`<${tag}[\\\\s/>]`).test(template) && !imports.has(tag)) {\n imports.add(tag);\n }\n }\n}\n\n/** Separate import statements from the rest of the script */\nfunction extractUserImports(script: string): {\n userImports: string[];\n bodyScript: string;\n} {\n const lines = script.split('\\n');\n const userImports: string[] = [];\n const bodyLines: string[] = [];\n\n let inMultiLineImport = false;\n\n for (const line of lines) {\n if (inMultiLineImport) {\n userImports[userImports.length - 1] += '\\n' + line;\n if (line.includes('from ') || line.trimEnd().endsWith(';')) {\n inMultiLineImport = false;\n }\n continue;\n }\n\n const trimmed = line.trim();\n if (/^import\\s/.test(trimmed)) {\n userImports.push(line.trim());\n // Check if this import spans multiple lines (no `from` on this line)\n if (!trimmed.includes('from ') && !trimmed.endsWith(';')) {\n inMultiLineImport = true;\n }\n } else {\n bodyLines.push(line);\n }\n }\n\n return { userImports, bodyScript: bodyLines.join('\\n') };\n}\n\n/** Extract Props interface from script so we can use it as generic param */\nfunction extractPropsInterface(script: string): {\n cleanScript: string;\n propsInterface: string | null;\n} {\n const match = /interface\\s+Props\\s*\\{([^}]*)\\}/s.exec(script);\n if (!match) {\n return { cleanScript: script, propsInterface: null };\n }\n\n // Remove the interface declaration from the script\n const cleanScript = script.replace(match[0], '').trim();\n // Build inline type\n const propsInterface = `{${match[1].trim()}}`;\n\n return { cleanScript, propsInterface };\n}\n\n/** Generate the render body from template AST nodes */\nfunction generateRenderBody(\n nodes: TemplateNode[],\n imports: Set<string>,\n scopeId?: string,\n): string {\n if (nodes.length === 0) {\n return ` return null;\\n`;\n }\n\n // If there's a single root element, generate it directly\n if (nodes.length === 1) {\n const lines: string[] = [];\n generateNode(nodes[0], lines, imports, 4, 'root', scopeId);\n lines.push(` return root;`);\n return lines.join('\\n') + '\\n';\n }\n\n // Multiple root nodes — wrap in a fragment\n imports.add('createElement');\n const lines: string[] = [];\n lines.push(` const __fragment = document.createDocumentFragment();`);\n for (let i = 0; i < nodes.length; i++) {\n const varName = `__n${i}`;\n generateNode(nodes[i], lines, imports, 4, varName, scopeId);\n lines.push(` __fragment.appendChild(${varName});`);\n }\n lines.push(` return __fragment;`);\n return lines.join('\\n') + '\\n';\n}\n\nfunction generateNode(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n varName: string,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n\n switch (node.type) {\n case 'element':\n generateElement(node, lines, imports, indent, varName, scopeId);\n break;\n\n case 'component':\n generateComponentCall(node, lines, imports, indent, varName, scopeId);\n break;\n\n case 'text':\n lines.push(`${pad}const ${varName} = document.createTextNode(${JSON.stringify(node.content ?? '')});`);\n break;\n\n case 'expression':\n imports.add('effect');\n lines.push(`${pad}const ${varName} = document.createTextNode('');`);\n lines.push(`${pad}effect(() => { ${varName}.textContent = String(${node.content}); }, { render: true });`);\n break;\n }\n}\n\nfunction generateElement(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n varName: string,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n const tag = node.tag!;\n\n // Check for :if directive\n const ifDirective = node.directives?.find((d) => d.name === 'if');\n if (ifDirective) {\n imports.add('renderConditional');\n // Generate the conditional block\n lines.push(`${pad}const ${varName}_anchor = document.createComment('if');`);\n lines.push(`${pad}const ${varName} = document.createDocumentFragment();`);\n lines.push(`${pad}${varName}.appendChild(${varName}_anchor);`);\n lines.push(`${pad}renderConditional(${varName}, ${varName}_anchor, () => ${ifDirective.value}, () => {`);\n\n // Generate the element inside the true branch\n const innerLines: string[] = [];\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'if') };\n generateElement(innerNode, innerLines, imports, indent + 2, '__el', scopeId);\n innerLines.push(`${pad} return __el;`);\n lines.push(...innerLines);\n\n lines.push(`${pad}});`);\n return;\n }\n\n // Check for :for directive\n const forDirective = node.directives?.find((d) => d.name === 'for');\n if (forDirective) {\n imports.add('renderList');\n const keyDirective = node.directives?.find((d) => d.name === 'key');\n\n // Parse :for=\"item of items()\" or :for=\"(item, index) of items()\"\n const forMatch = /^(?:\\(([^)]+)\\)|(\\w+))\\s+of\\s+(.+)$/.exec(forDirective.value);\n if (forMatch) {\n const itemVar = forMatch[1] ?? forMatch[2];\n const listExpr = forMatch[3];\n const keyExpr = keyDirective?.value ?? `${itemVar}`;\n\n lines.push(`${pad}const ${varName}_anchor = document.createComment('for');`);\n lines.push(`${pad}const ${varName} = document.createDocumentFragment();`);\n lines.push(`${pad}${varName}.appendChild(${varName}_anchor);`);\n lines.push(`${pad}renderList(${varName}, ${varName}_anchor, () => ${listExpr}, (${itemVar}) => ${keyExpr}, (${itemVar}) => {`);\n\n // Generate the element inside the loop\n const innerLines: string[] = [];\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'for' && d.name !== 'key') };\n generateElement(innerNode, innerLines, imports, indent + 2, '__el', scopeId);\n innerLines.push(`${pad} return __el;`);\n lines.push(...innerLines);\n\n lines.push(`${pad}});`);\n }\n return;\n }\n\n // Check for bind: directives (two-way binding)\n const bindDirectives = node.directives?.filter((d) => d.name === 'bind') ?? [];\n // Remove bind directives from the list so they don't get processed again\n if (bindDirectives.length > 0 && node.directives) {\n node.directives = node.directives.filter((d) => d.name !== 'bind');\n }\n\n // Regular element creation\n lines.push(`${pad}const ${varName} = document.createElement('${tag}');`);\n\n // Add scope ID for scoped styles\n if (scopeId) {\n lines.push(`${pad}${varName}.setAttribute('${scopeId}', '');`);\n }\n\n // Set attributes\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.dynamic) {\n // Dynamic attribute — create effect\n imports.add('effect');\n if (attr.name.startsWith('on')) {\n lines.push(`${pad}${varName}.addEventListener('${attr.name.slice(2).toLowerCase()}', ${attr.value});`);\n } else {\n lines.push(`${pad}effect(() => {`);\n if (attr.name === 'class' || attr.name === 'className') {\n lines.push(`${pad} ${varName}.className = ${attr.value};`);\n } else {\n lines.push(`${pad} ${varName}.setAttribute('${attr.name}', String(${attr.value}));`);\n }\n lines.push(`${pad}}, { render: true });`);\n }\n } else {\n // Static attribute\n if (attr.name === 'class' || attr.name === 'className') {\n lines.push(`${pad}${varName}.className = ${JSON.stringify(attr.value)};`);\n } else if (attr.name.startsWith('on')) {\n // Static event handlers shouldn't exist, but handle gracefully\n lines.push(`${pad}${varName}.setAttribute('${attr.name}', ${JSON.stringify(attr.value)});`);\n } else {\n lines.push(`${pad}${varName}.setAttribute('${attr.name}', ${JSON.stringify(attr.value)});`);\n }\n }\n }\n }\n\n // Process bind: directives (two-way binding sugar)\n for (const bindDir of bindDirectives) {\n const prop = bindDir.arg ?? 'value';\n const signalExpr = bindDir.value;\n imports.add('effect');\n\n // Read: bind signal value to element property\n lines.push(`${pad}effect(() => { ${varName}.${prop} = ${signalExpr}(); }, { render: true });`);\n\n // Write: listen for input events and update the signal\n const eventName = prop === 'value' || prop === 'checked' ? 'input' : 'change';\n const valuePath = prop === 'checked' ? 'checked' : 'value';\n lines.push(`${pad}${varName}.addEventListener('${eventName}', (e) => { ${signalExpr}.set(e.target.${valuePath}); });`);\n }\n\n // Process children\n if (node.children && node.children.length > 0) {\n for (let i = 0; i < node.children.length; i++) {\n const childVar = `${varName}_c${i}`;\n generateNode(node.children[i], lines, imports, indent, childVar, scopeId);\n lines.push(`${pad}${varName}.appendChild(${childVar});`);\n }\n }\n}\n\nfunction generateComponentCall(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n varName: string,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n const tag = node.tag!;\n\n // Build props object\n const propParts: string[] = [];\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.dynamic) {\n // Check if the value contains JSX (starts with <Tag)\n const jsxContent = tryCompileJSXProp(attr.value, imports, indent, scopeId);\n if (jsxContent) {\n propParts.push(`${attr.name}: ${jsxContent}`);\n } else if (attr.name.startsWith('on') || isAlreadyFunction(attr.value)) {\n // Event handlers and function values — pass through as-is\n propParts.push(`${attr.name}: ${attr.value}`);\n } else if (needsReactiveWrapper(attr.value)) {\n // Contains signal reads — wrap in getter for reactivity\n propParts.push(`${attr.name}: () => ${attr.value}`);\n } else {\n // Static value (literal, identifier, etc.) — pass through\n propParts.push(`${attr.name}: ${attr.value}`);\n }\n } else {\n propParts.push(`${attr.name}: ${JSON.stringify(attr.value)}`);\n }\n }\n }\n\n // Children — compile into a render function that builds real DOM\n if (node.children && node.children.length > 0) {\n const childBody = generateChildrenBody(node.children, imports, indent + 2, scopeId);\n propParts.push(`children: ${childBody}`);\n }\n\n const propsStr = propParts.length > 0 ? `{ ${propParts.join(', ')} }` : '{}';\n lines.push(`${pad}const ${varName} = ${tag}(${propsStr});`);\n}\n\n/**\n * Compile children nodes into a render function body: () => { ... return node; }\n *\n * Handles special cases:\n * - A single expression child that is an arrow function with JSX:\n * {(value) => <div>...</div>} compiles the JSX and wraps it in (value) => { ... }\n * - Regular element/text/expression children: wrapped in () => { ... }\n */\nfunction generateChildrenBody(\n children: TemplateNode[],\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): string {\n // Single expression child — check for arrow function with JSX\n if (children.length === 1 && children[0].type === 'expression') {\n const compiled = tryCompileArrowJSX(children[0].content ?? '', imports, indent, scopeId);\n if (compiled) return compiled;\n }\n\n const pad = ' '.repeat(indent);\n const innerLines: string[] = [];\n\n // Filter out whitespace-only text nodes\n const meaningful = children.filter(\n (c) => !(c.type === 'text' && !(c.content ?? '').trim()),\n );\n\n if (meaningful.length === 1) {\n generateNode(meaningful[0], innerLines, imports, indent, '__child', scopeId);\n innerLines.push(`${pad}return __child;`);\n } else {\n innerLines.push(`${pad}const __frag = document.createDocumentFragment();`);\n for (let i = 0; i < meaningful.length; i++) {\n const cVar = `__child${i}`;\n generateNode(meaningful[i], innerLines, imports, indent, cVar, scopeId);\n innerLines.push(`${pad}__frag.appendChild(${cVar});`);\n }\n innerLines.push(`${pad}return __frag;`);\n }\n\n return `() => {\\n${innerLines.join('\\n')}\\n${' '.repeat(indent - 2)}}`;\n}\n\n/**\n * Detect arrow functions containing JSX and compile them:\n * (value) => <div>{value.name}</div>\n * () => <span>hello</span>\n *\n * Returns compiled function string, or null if not an arrow+JSX pattern.\n */\nfunction tryCompileArrowJSX(\n expr: string,\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): string | null {\n const trimmed = expr.trim();\n\n // Match arrow function: optional params => JSX body\n // Patterns: () => <Tag>, (x) => <Tag>, x => <Tag>, (x, i) => <Tag>\n const arrowMatch = /^(\\(?[^)]*\\)?)\\s*=>\\s*(<[a-zA-Z].*)$/s.exec(trimmed);\n if (!arrowMatch) return null;\n\n const params = arrowMatch[1];\n const jsxBody = arrowMatch[2];\n\n // Parse the JSX body as template content\n const nodes = parseTemplate(jsxBody);\n if (nodes.length === 0) return null;\n\n // Generate the DOM creation code for the JSX\n const pad = ' '.repeat(indent);\n const innerLines: string[] = [];\n\n if (nodes.length === 1) {\n generateNode(nodes[0], innerLines, imports, indent, '__child', scopeId);\n innerLines.push(`${pad}return __child;`);\n } else {\n innerLines.push(`${pad}const __frag = document.createDocumentFragment();`);\n for (let i = 0; i < nodes.length; i++) {\n const cVar = `__child${i}`;\n generateNode(nodes[i], innerLines, imports, indent, cVar, scopeId);\n innerLines.push(`${pad}__frag.appendChild(${cVar});`);\n }\n innerLines.push(`${pad}return __frag;`);\n }\n\n return `${params} => {\\n${innerLines.join('\\n')}\\n${' '.repeat(indent - 2)}}`;\n}\n\n/**\n * Detect if a dynamic prop value contains JSX and compile it into a render function.\n * Returns the compiled function string, or null if the value is not JSX.\n */\nfunction tryCompileJSXProp(\n value: string,\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): string | null {\n const trimmed = value.trim();\n\n // Check for arrow function with JSX: (x) => <Tag> or () => <Tag>\n const arrowResult = tryCompileArrowJSX(trimmed, imports, indent + 2, scopeId);\n if (arrowResult) return arrowResult;\n\n // Check if the value looks like JSX: starts with < followed by a tag name\n if (!/^<[a-zA-Z]/.test(trimmed)) return null;\n\n // Parse the JSX as template content\n const nodes = parseTemplate(trimmed);\n if (nodes.length === 0) return null;\n\n // Generate a render function\n return generateChildrenBody(nodes, imports, indent + 2, scopeId);\n}\n\n// --- Server-mode code generation (string concatenation) ---\n\n/** Generate server-mode render body that builds HTML strings */\nfunction generateServerRenderBody(\n nodes: TemplateNode[],\n imports: Set<string>,\n scopeId?: string,\n): string {\n if (nodes.length === 0) {\n return ` return '';\\n`;\n }\n\n const lines: string[] = [];\n lines.push(` let __html = '';`);\n\n for (const node of nodes) {\n generateServerNode(node, lines, imports, 4, scopeId);\n }\n\n lines.push(` return __html;`);\n return lines.join('\\n') + '\\n';\n}\n\nfunction generateServerNode(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n\n switch (node.type) {\n case 'text':\n lines.push(`${pad}__html += ${JSON.stringify(node.content ?? '')};`);\n break;\n\n case 'expression':\n // Import the escape helper\n imports.add('escapeHtml');\n lines.push(`${pad}__html += escapeHtml(String(${node.content}));`);\n break;\n\n case 'element':\n generateServerElement(node, lines, imports, indent, scopeId);\n break;\n\n case 'component':\n // Server-side component rendering — call the component's SSR render\n lines.push(`${pad}// TODO: SSR component rendering for ${node.tag}`);\n lines.push(`${pad}__html += '';`);\n break;\n }\n}\n\nconst SERVER_VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr',\n]);\n\nfunction generateServerElement(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n const tag = node.tag!;\n\n // Handle :if directive\n const ifDirective = node.directives?.find((d) => d.name === 'if');\n if (ifDirective) {\n lines.push(`${pad}if (${ifDirective.value}) {`);\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'if') };\n generateServerElement(innerNode, lines, imports, indent + 2, scopeId);\n lines.push(`${pad}}`);\n return;\n }\n\n // Handle :for directive\n const forDirective = node.directives?.find((d) => d.name === 'for');\n if (forDirective) {\n const forMatch = /^(?:\\(([^)]+)\\)|(\\w+))\\s+of\\s+(.+)$/.exec(forDirective.value);\n if (forMatch) {\n const itemVar = forMatch[1] ?? forMatch[2];\n const listExpr = forMatch[3];\n lines.push(`${pad}for (const ${itemVar} of ${listExpr}) {`);\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'for' && d.name !== 'key') };\n generateServerElement(innerNode, lines, imports, indent + 2, scopeId);\n lines.push(`${pad}}`);\n }\n return;\n }\n\n // Opening tag\n let openTag = `'<${tag}`;\n\n // Add scope ID\n if (scopeId) {\n openTag += ` ${scopeId}`;\n }\n\n // Static attributes\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.name.startsWith('on')) continue; // Skip event handlers on server\n\n if (attr.dynamic) {\n // Close the static string, add dynamic part\n lines.push(`${pad}__html += ${openTag}';`);\n openTag = \"'\";\n\n imports.add('escapeHtml');\n if (attr.name === 'class' || attr.name === 'className') {\n lines.push(`${pad}__html += ' class=\"' + escapeHtml(String(${attr.value})) + '\"';`);\n } else {\n lines.push(`${pad}__html += ' ${attr.name}=\"' + escapeHtml(String(${attr.value})) + '\"';`);\n }\n } else {\n if (attr.name === 'class' || attr.name === 'className') {\n openTag += ` class=\"${attr.value}\"`;\n } else {\n openTag += ` ${attr.name}=\"${attr.value}\"`;\n }\n }\n }\n }\n\n if (SERVER_VOID_ELEMENTS.has(tag)) {\n lines.push(`${pad}__html += ${openTag} />';`);\n return;\n }\n\n lines.push(`${pad}__html += ${openTag}>';`);\n\n // Children\n if (node.children) {\n for (const child of node.children) {\n generateServerNode(child, lines, imports, indent, scopeId);\n }\n }\n\n // Closing tag\n lines.push(`${pad}__html += '</${tag}>';`);\n}\n","/**\n * Static analysis for .akash templates.\n *\n * Analyzes the template AST to classify expressions as static or dynamic,\n * track signal dependencies, and identify optimization opportunities.\n */\n\nimport type { TemplateNode, Directive } from './template.js';\n\n// --- Analysis result types ---\n\nexport interface AnalysisResult {\n /** All signal reads found in the template */\n signalReads: SignalRead[];\n /** All event handlers found */\n eventHandlers: EventHandler[];\n /** Whether the template has any dynamic content */\n hasDynamicContent: boolean;\n /** Static elements that could use cloneNode optimization */\n staticSubtrees: TemplateNode[];\n /** Expressions that need reactive effects */\n reactiveExpressions: ReactiveExpression[];\n /** Components used in the template */\n componentRefs: string[];\n}\n\nexport interface SignalRead {\n /** The expression containing the signal read */\n expression: string;\n /** Where in the template this read occurs */\n context: 'text' | 'attribute' | 'directive' | 'event';\n /** The parent element's tag */\n parentTag?: string;\n}\n\nexport interface EventHandler {\n /** Event name (e.g., 'click') */\n event: string;\n /** Handler expression */\n handler: string;\n /** Element tag */\n tag: string;\n}\n\nexport interface ReactiveExpression {\n /** The expression source */\n expression: string;\n /** What kind of binding this is */\n kind: 'text' | 'attribute' | 'conditional' | 'list';\n /** Target attribute name (for attribute bindings) */\n attributeName?: string;\n}\n\n// --- Analysis ---\n\n/**\n * Analyze a template AST for signal reads, static/dynamic classification,\n * and optimization opportunities.\n */\nexport function analyzeTemplate(nodes: TemplateNode[]): AnalysisResult {\n const result: AnalysisResult = {\n signalReads: [],\n eventHandlers: [],\n hasDynamicContent: false,\n staticSubtrees: [],\n reactiveExpressions: [],\n componentRefs: [],\n };\n\n for (const node of nodes) {\n analyzeNode(node, result);\n }\n\n return result;\n}\n\nfunction analyzeNode(node: TemplateNode, result: AnalysisResult): void {\n switch (node.type) {\n case 'expression':\n result.hasDynamicContent = true;\n if (node.content) {\n result.reactiveExpressions.push({\n expression: node.content,\n kind: 'text',\n });\n extractSignalReads(node.content, 'text', result);\n }\n break;\n\n case 'element':\n analyzeElement(node, result);\n break;\n\n case 'component':\n if (node.tag) {\n result.componentRefs.push(node.tag);\n }\n result.hasDynamicContent = true;\n analyzeAttributes(node, result);\n if (node.children) {\n for (const child of node.children) {\n analyzeNode(child, result);\n }\n }\n break;\n\n case 'text':\n // Pure static — no analysis needed\n break;\n }\n}\n\nfunction analyzeElement(node: TemplateNode, result: AnalysisResult): void {\n const isDynamic = hasDynamicContent(node);\n\n // Check directives\n if (node.directives) {\n for (const dir of node.directives) {\n result.hasDynamicContent = true;\n analyzeDirective(dir, node, result);\n }\n }\n\n // Check attributes\n analyzeAttributes(node, result);\n\n // If fully static (no dynamic attrs, no directives, no dynamic children),\n // mark as a static subtree candidate\n if (!isDynamic && !node.directives?.length) {\n result.staticSubtrees.push(node);\n }\n\n // Recurse children\n if (node.children) {\n for (const child of node.children) {\n analyzeNode(child, result);\n }\n }\n}\n\nfunction analyzeAttributes(node: TemplateNode, result: AnalysisResult): void {\n if (!node.attrs) return;\n\n for (const attr of node.attrs) {\n if (attr.dynamic) {\n result.hasDynamicContent = true;\n\n if (attr.name.startsWith('on')) {\n // Event handler\n const event = attr.name.slice(2).toLowerCase();\n result.eventHandlers.push({\n event,\n handler: attr.value,\n tag: node.tag ?? 'unknown',\n });\n } else {\n // Dynamic attribute binding\n result.reactiveExpressions.push({\n expression: attr.value,\n kind: 'attribute',\n attributeName: attr.name,\n });\n extractSignalReads(attr.value, 'attribute', result);\n }\n }\n }\n}\n\nfunction analyzeDirective(\n dir: Directive,\n node: TemplateNode,\n result: AnalysisResult,\n): void {\n switch (dir.name) {\n case 'if':\n case 'else-if':\n case 'show':\n result.reactiveExpressions.push({\n expression: dir.value,\n kind: 'conditional',\n });\n extractSignalReads(dir.value, 'directive', result);\n break;\n\n case 'for': {\n // Parse \"item of items()\" — the list expression is the reactive part\n const match = /\\bof\\s+(.+)$/.exec(dir.value);\n if (match) {\n result.reactiveExpressions.push({\n expression: match[1],\n kind: 'list',\n });\n extractSignalReads(match[1], 'directive', result);\n }\n break;\n }\n\n case 'bind': {\n result.reactiveExpressions.push({\n expression: dir.value,\n kind: 'attribute',\n attributeName: dir.value,\n });\n extractSignalReads(dir.value, 'directive', result);\n break;\n }\n }\n}\n\n// --- Signal read detection ---\n\n/**\n * Heuristically detect signal reads in an expression.\n *\n * Looks for patterns like `foo()` where `foo` is likely a signal.\n * This is a heuristic — the actual tracking happens at runtime.\n */\nfunction extractSignalReads(\n expression: string,\n context: SignalRead['context'],\n result: AnalysisResult,\n): void {\n // Match function calls that look like signal reads: word()\n // Exclude known non-signals: console.log, Math.floor, etc.\n const KNOWN_NON_SIGNALS = new Set([\n 'console', 'Math', 'JSON', 'Object', 'Array', 'String', 'Number',\n 'Boolean', 'Date', 'RegExp', 'Error', 'Promise', 'parseInt', 'parseFloat',\n 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',\n 'document', 'window', 'navigator', 'fetch',\n ]);\n\n // Match identifier() patterns — likely signal reads\n const callPattern = /\\b([a-zA-Z_$][\\w$]*)\\s*\\(\\s*\\)/g;\n let match: RegExpExecArray | null;\n\n while ((match = callPattern.exec(expression)) !== null) {\n const name = match[1];\n if (!KNOWN_NON_SIGNALS.has(name)) {\n result.signalReads.push({\n expression: `${name}()`,\n context,\n });\n }\n }\n}\n\n// --- Helpers ---\n\n/** Check if a node has any dynamic content (attributes or children) */\nfunction hasDynamicContent(node: TemplateNode): boolean {\n if (node.attrs?.some((a) => a.dynamic)) return true;\n if (node.directives?.length) return true;\n if (node.children?.some((c) => c.type === 'expression' || c.type === 'component')) return true;\n if (node.children?.some((c) => hasDynamicContent(c))) return true;\n return false;\n}\n\n/**\n * Check if an expression is a pure static value (string literal, number, boolean).\n */\nexport function isStaticExpression(expr: string): boolean {\n const trimmed = expr.trim();\n // String literal\n if (/^['\"`].*['\"`]$/.test(trimmed)) return true;\n // Number\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return true;\n // Boolean\n if (trimmed === 'true' || trimmed === 'false') return true;\n // null/undefined\n if (trimmed === 'null' || trimmed === 'undefined') return true;\n return false;\n}\n","/**\n * Source map generation for .akash → .js transforms.\n *\n * Generates V3 source maps that map compiled output back to the\n * original .akash file positions (script, template, style blocks).\n */\n\n// --- VLQ encoding for source maps ---\n\nconst VLQ_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n/**\n * Encode a signed integer as a VLQ base64 string.\n */\nexport function encodeVLQ(value: number): string {\n let result = '';\n let vlq = value < 0 ? (-value << 1) | 1 : value << 1;\n\n do {\n let digit = vlq & 0x1f;\n vlq >>>= 5;\n if (vlq > 0) digit |= 0x20;\n result += VLQ_CHARS[digit];\n } while (vlq > 0);\n\n return result;\n}\n\n// --- Source map builder ---\n\nexport interface SourceMapping {\n /** Generated line (0-based) */\n generatedLine: number;\n /** Generated column (0-based) */\n generatedColumn: number;\n /** Original line (0-based) */\n originalLine: number;\n /** Original column (0-based) */\n originalColumn: number;\n /** Source file index */\n source?: number;\n}\n\nexport interface SourceMap {\n version: 3;\n file: string;\n sources: string[];\n sourcesContent: (string | null)[];\n names: string[];\n mappings: string;\n}\n\n/**\n * Build a V3 source map from a list of mappings.\n */\nexport class SourceMapBuilder {\n private mappings: SourceMapping[] = [];\n private sources: string[] = [];\n private sourcesContent: (string | null)[] = [];\n\n /**\n * Add a source file.\n * @returns The source index.\n */\n addSource(filename: string, content?: string): number {\n const idx = this.sources.length;\n this.sources.push(filename);\n this.sourcesContent.push(content ?? null);\n return idx;\n }\n\n /**\n * Add a mapping from generated position to original position.\n */\n addMapping(mapping: SourceMapping): void {\n this.mappings.push(mapping);\n }\n\n /**\n * Add a 1:1 mapping for a range of lines.\n * Useful for script blocks that are mostly copied verbatim.\n */\n addLineRange(\n generatedStart: number,\n originalStart: number,\n lineCount: number,\n sourceIndex = 0,\n ): void {\n for (let i = 0; i < lineCount; i++) {\n this.addMapping({\n generatedLine: generatedStart + i,\n generatedColumn: 0,\n originalLine: originalStart + i,\n originalColumn: 0,\n source: sourceIndex,\n });\n }\n }\n\n /**\n * Generate the V3 source map JSON.\n */\n build(outputFilename: string): SourceMap {\n // Sort mappings by generated position\n const sorted = [...this.mappings].sort((a, b) =>\n a.generatedLine - b.generatedLine || a.generatedColumn - b.generatedColumn,\n );\n\n return {\n version: 3,\n file: outputFilename,\n sources: this.sources,\n sourcesContent: this.sourcesContent,\n names: [],\n mappings: encodeMappings(sorted),\n };\n }\n\n /**\n * Generate the source map as a JSON string.\n */\n toJSON(outputFilename: string): string {\n return JSON.stringify(this.build(outputFilename));\n }\n\n /**\n * Generate a data URL for inline source maps.\n */\n toDataUrl(outputFilename: string): string {\n const json = this.toJSON(outputFilename);\n const base64 = typeof btoa === 'function'\n ? btoa(json)\n : Buffer.from(json).toString('base64');\n return `data:application/json;charset=utf-8;base64,${base64}`;\n }\n}\n\n/**\n * Encode sorted mappings into the V3 mappings string format.\n */\nfunction encodeMappings(mappings: SourceMapping[]): string {\n const lines: string[][] = [];\n let prevGeneratedLine = 0;\n let prevGeneratedColumn = 0;\n let prevOriginalLine = 0;\n let prevOriginalColumn = 0;\n let prevSource = 0;\n\n for (const mapping of mappings) {\n // Fill empty lines\n while (lines.length <= mapping.generatedLine) {\n lines.push([]);\n }\n\n // Reset column tracking at new lines\n if (mapping.generatedLine !== prevGeneratedLine) {\n prevGeneratedColumn = 0;\n prevGeneratedLine = mapping.generatedLine;\n }\n\n let segment = '';\n\n // Field 1: Generated column (relative)\n segment += encodeVLQ(mapping.generatedColumn - prevGeneratedColumn);\n prevGeneratedColumn = mapping.generatedColumn;\n\n // Fields 2-4: Source, original line, original column (all relative)\n const source = mapping.source ?? 0;\n segment += encodeVLQ(source - prevSource);\n prevSource = source;\n\n segment += encodeVLQ(mapping.originalLine - prevOriginalLine);\n prevOriginalLine = mapping.originalLine;\n\n segment += encodeVLQ(mapping.originalColumn - prevOriginalColumn);\n prevOriginalColumn = mapping.originalColumn;\n\n lines[mapping.generatedLine].push(segment);\n }\n\n return lines.map((segments) => segments.join(',')).join(';');\n}\n\n// --- Helper for .akash file source maps ---\n\n/**\n * Create a source map for a compiled .akash file.\n *\n * Maps the script block lines 1:1 and provides approximate\n * mappings for the generated template code.\n */\nexport function createAkashSourceMap(\n filename: string,\n originalSource: string,\n scriptStartLine: number,\n scriptLineCount: number,\n generatedScriptStartLine: number,\n): SourceMapBuilder {\n const builder = new SourceMapBuilder();\n builder.addSource(filename, originalSource);\n\n // Map script lines 1:1\n builder.addLineRange(\n generatedScriptStartLine,\n scriptStartLine,\n scriptLineCount,\n 0,\n );\n\n return builder;\n}\n","/**\n * Compiler optimizations — static hoisting.\n *\n * Detects fully static subtrees in templates and hoists them\n * into `<template>` + `cloneNode(true)` calls that execute once.\n * Dynamic parts are patched in after cloning.\n *\n * This is the key optimization that makes AkashJS competitive with\n * Svelte and Vue 3 on initial render performance.\n */\n\nimport type { TemplateNode } from './template.js';\nimport { analyzeTemplate } from './analyze.js';\n\n// --- Static analysis ---\n\n/**\n * Check if a node subtree is fully static (no signals, no directives,\n * no dynamic attributes, no components).\n */\nexport function isStaticNode(node: TemplateNode): boolean {\n if (node.type === 'expression') return false;\n if (node.type === 'component') return false;\n if (node.type === 'text') return true;\n\n // Element node\n if (node.directives && node.directives.length > 0) return false;\n if (node.attrs?.some((a) => a.dynamic)) return false;\n if (node.children?.some((c) => !isStaticNode(c))) return false;\n\n return true;\n}\n\n/**\n * Convert a static subtree to an HTML string for cloneNode.\n */\nexport function staticNodeToHtml(node: TemplateNode): string {\n switch (node.type) {\n case 'text':\n return node.content ?? '';\n\n case 'element': {\n let html = `<${node.tag}`;\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.name === 'class' || attr.name === 'className') {\n html += ` class=\"${attr.value}\"`;\n } else {\n html += ` ${attr.name}=\"${attr.value}\"`;\n }\n }\n }\n html += '>';\n if (node.children) {\n for (const child of node.children) {\n html += staticNodeToHtml(child);\n }\n }\n html += `</${node.tag}>`;\n return html;\n }\n\n default:\n return '';\n }\n}\n\n// --- Hoisting ---\n\nexport interface HoistedTemplate {\n /** Variable name for the template element */\n varName: string;\n /** HTML string for the template */\n html: string;\n}\n\n/**\n * Extract static subtrees from a template AST and return them\n * as hoisted templates. The original nodes are annotated with\n * a `hoisted` flag.\n */\nexport function extractHoistedTemplates(nodes: TemplateNode[]): HoistedTemplate[] {\n const templates: HoistedTemplate[] = [];\n let counter = 0;\n\n function visit(node: TemplateNode): void {\n if (node.type !== 'element') return;\n\n // Check if this entire subtree is static AND has children\n // (single text nodes aren't worth hoisting)\n if (isStaticNode(node) && node.children && node.children.length > 0) {\n const varName = `__hoisted_${counter++}`;\n templates.push({\n varName,\n html: staticNodeToHtml(node),\n });\n // Mark node as hoisted so code generator uses cloneNode\n (node as any)._hoisted = varName;\n return; // Don't descend into children\n }\n\n // Recurse into non-static children\n if (node.children) {\n for (const child of node.children) {\n visit(child);\n }\n }\n }\n\n for (const node of nodes) {\n visit(node);\n }\n\n return templates;\n}\n\n/**\n * Generate the hoisted template declarations.\n * These go at module scope (outside defineComponent) so they're\n * created once per module, not per component instance.\n */\nexport function generateHoistedDeclarations(templates: HoistedTemplate[]): string {\n if (templates.length === 0) return '';\n\n let code = '// Hoisted static templates (created once, cloned per instance)\\n';\n for (const t of templates) {\n code += `const ${t.varName} = /*#__PURE__*/ (() => {\\n`;\n code += ` const _t = document.createElement('template');\\n`;\n code += ` _t.innerHTML = ${JSON.stringify(t.html)};\\n`;\n code += ` return _t;\\n`;\n code += `})();\\n`;\n }\n return code;\n}\n\n/**\n * Check if a node was hoisted and return its variable name.\n */\nexport function getHoistedVar(node: TemplateNode): string | null {\n return (node as any)._hoisted ?? null;\n}\n\n// --- Statistics ---\n\nexport interface OptimizationStats {\n totalNodes: number;\n staticNodes: number;\n hoistedTemplates: number;\n staticRatio: number;\n}\n\n/**\n * Analyze a template and return optimization statistics.\n */\nexport function getOptimizationStats(nodes: TemplateNode[]): OptimizationStats {\n let totalNodes = 0;\n let staticNodes = 0;\n\n function count(node: TemplateNode): void {\n totalNodes++;\n if (isStaticNode(node)) staticNodes++;\n if (node.children) {\n for (const child of node.children) {\n count(child);\n }\n }\n }\n\n for (const node of nodes) {\n count(node);\n }\n\n const hoisted = extractHoistedTemplates(\n JSON.parse(JSON.stringify(nodes)), // clone to avoid mutation\n );\n\n return {\n totalNodes,\n staticNodes,\n hoistedTemplates: hoisted.length,\n staticRatio: totalNodes > 0 ? staticNodes / totalNodes : 0,\n };\n}\n","/**\n * Language service for .akash files.\n *\n * Provides IDE features: completion, diagnostics, hover info,\n * and go-to-definition for templates. Used by the VS Code extension\n * and any LSP-compatible editor.\n */\n\nimport { parse } from './parse.js';\nimport { parseTemplate } from './template.js';\nimport type { ParsedSFC } from './types.js';\nimport type { TemplateNode } from './template.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface Position {\n line: number;\n character: number;\n}\n\nexport interface Range {\n start: Position;\n end: Position;\n}\n\nexport interface Diagnostic {\n range: Range;\n message: string;\n severity: 'error' | 'warning' | 'info' | 'hint';\n code?: string;\n}\n\nexport interface CompletionItem {\n label: string;\n kind: 'component' | 'attribute' | 'directive' | 'event' | 'property' | 'value';\n detail?: string;\n documentation?: string;\n insertText?: string;\n}\n\nexport interface HoverInfo {\n contents: string;\n range?: Range;\n}\n\nexport interface Definition {\n file: string;\n range: Range;\n}\n\n// =========================================================================\n// Built-in completions database\n// =========================================================================\n\nconst RUNTIME_APIS: CompletionItem[] = [\n { label: 'signal', kind: 'property', detail: 'signal<T>(initial: T): Signal<T>', documentation: 'Create a reactive signal' },\n { label: 'computed', kind: 'property', detail: 'computed<T>(fn: () => T): ReadonlySignal<T>', documentation: 'Create a derived reactive value' },\n { label: 'effect', kind: 'property', detail: 'effect(fn: () => void): () => void', documentation: 'Run a side-effect when dependencies change' },\n { label: 'batch', kind: 'property', detail: 'batch(fn: () => void): void', documentation: 'Batch signal updates' },\n { label: 'untrack', kind: 'property', detail: 'untrack<T>(fn: () => T): T', documentation: 'Read signals without tracking' },\n { label: 'onMount', kind: 'property', detail: 'onMount(fn: () => void | (() => void)): void', documentation: 'Run after component mounts' },\n { label: 'onUnmount', kind: 'property', detail: 'onUnmount(fn: () => void): void', documentation: 'Run before component unmounts' },\n { label: 'provide', kind: 'property', detail: 'provide<T>(key: InjectionKey<T>, value: T): void', documentation: 'Provide a value to descendants' },\n { label: 'inject', kind: 'property', detail: 'inject<T>(key: InjectionKey<T>): T', documentation: 'Inject a value from ancestors' },\n { label: 'defineStore', kind: 'property', detail: 'defineStore(id, config): () => Store', documentation: 'Define a global store' },\n { label: 'useHead', kind: 'property', detail: 'useHead(config: HeadConfig): void', documentation: 'Manage document head tags' },\n { label: 'cx', kind: 'property', detail: 'cx(...inputs): string', documentation: 'Merge CSS class names' },\n { label: 'pipe', kind: 'property', detail: 'pipe(value, transform, ...args): any', documentation: 'Apply a pipe transform' },\n];\n\nconst BUILT_IN_COMPONENTS: CompletionItem[] = [\n { label: 'Show', kind: 'component', detail: '<Show when={condition}>{value => ...}</Show>', documentation: 'Conditional rendering with type narrowing' },\n { label: 'For', kind: 'component', detail: '<For each={items} key={fn}>{item => ...}</For>', documentation: 'List rendering with keyed reconciliation' },\n { label: 'Switch', kind: 'component', detail: '<Switch on={value} cases={...} />', documentation: 'Switch/case rendering' },\n { label: 'Portal', kind: 'component', detail: '<Portal target=\"selector\">...</Portal>', documentation: 'Render into different DOM node' },\n { label: 'Transition', kind: 'component', detail: '<Transition name=\"fade\" when={show}>...</Transition>', documentation: 'CSS enter/exit transitions' },\n { label: 'ErrorBoundary', kind: 'component', detail: '<ErrorBoundary fallback={fn}>...</ErrorBoundary>', documentation: 'Catch errors from children' },\n { label: 'Suspense', kind: 'component', detail: '<Suspense fallback={fn}>...</Suspense>', documentation: 'Show fallback during async loading' },\n { label: 'VirtualFor', kind: 'component', detail: '<VirtualFor each={items} itemHeight={40}>...</VirtualFor>', documentation: 'Virtual scrolling for large lists' },\n { label: 'Image', kind: 'component', detail: '<Image src=\"...\" alt=\"...\" />', documentation: 'Optimized image with lazy loading' },\n];\n\nconst DIRECTIVES: CompletionItem[] = [\n { label: ':if', kind: 'directive', detail: ':if={condition}', documentation: 'Conditional rendering' },\n { label: ':for', kind: 'directive', detail: ':for={item of items()}', documentation: 'List rendering' },\n { label: ':show', kind: 'directive', detail: ':show={condition}', documentation: 'Toggle visibility (display)' },\n { label: ':key', kind: 'directive', detail: ':key={uniqueId}', documentation: 'Reconciliation key for lists' },\n { label: 'bind:value', kind: 'directive', detail: 'bind:value={signal}', documentation: 'Two-way binding' },\n { label: 'bind:checked', kind: 'directive', detail: 'bind:checked={signal}', documentation: 'Two-way checkbox binding' },\n];\n\nconst HTML_EVENTS: CompletionItem[] = [\n 'onClick', 'onInput', 'onChange', 'onSubmit', 'onKeyDown', 'onKeyUp',\n 'onFocus', 'onBlur', 'onMouseEnter', 'onMouseLeave', 'onScroll',\n 'onLoad', 'onError', 'onResize', 'onPointerDown', 'onPointerUp',\n].map((name) => ({\n label: name,\n kind: 'event' as const,\n detail: `${name}={(e) => { ... }}`,\n documentation: `${name.slice(2)} event handler`,\n}));\n\n// =========================================================================\n// Language service implementation\n// =========================================================================\n\n/**\n * Create a language service instance for .akash files.\n */\nexport function createLanguageService() {\n return {\n /**\n * Get diagnostics for an .akash file.\n */\n getDiagnostics(source: string, filename?: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const sfc = parse(source);\n\n // Check for missing template\n if (!sfc.template) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: 'Missing <template> block',\n severity: 'warning',\n });\n }\n\n // Check template for common issues\n if (sfc.template) {\n const nodes = parseTemplate(sfc.template.content);\n validateNodes(nodes, diagnostics, sfc.template.start);\n }\n } catch (err) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: `Parse error: ${err instanceof Error ? err.message : String(err)}`,\n severity: 'error',\n });\n }\n\n return diagnostics;\n },\n\n /**\n * Get completion items at a position.\n */\n getCompletions(source: string, position: Position): CompletionItem[] {\n const line = source.split('\\n')[position.line] ?? '';\n const before = line.slice(0, position.character);\n\n // Inside <script> — suggest runtime APIs\n if (isInScript(source, position)) {\n return [...RUNTIME_APIS];\n }\n\n // Inside <template>\n if (isInTemplate(source, position)) {\n // After < — suggest components and HTML tags\n if (before.endsWith('<') || /^<[A-Z]/.test(before.trimStart())) {\n return [...BUILT_IN_COMPONENTS];\n }\n\n // After : — suggest directives\n if (before.endsWith(':') || before.includes(':')) {\n return [...DIRECTIVES];\n }\n\n // Inside a tag — suggest attributes and events\n if (isInsideTag(before)) {\n return [...DIRECTIVES, ...HTML_EVENTS];\n }\n\n return [...BUILT_IN_COMPONENTS, ...DIRECTIVES];\n }\n\n return [];\n },\n\n /**\n * Get hover information at a position.\n */\n getHoverInfo(source: string, position: Position): HoverInfo | null {\n const line = source.split('\\n')[position.line] ?? '';\n const word = getWordAt(line, position.character);\n\n // Check runtime APIs\n const api = RUNTIME_APIS.find((a) => a.label === word);\n if (api) {\n return { contents: `**${api.label}**\\n\\n${api.detail}\\n\\n${api.documentation}` };\n }\n\n // Check components\n const comp = BUILT_IN_COMPONENTS.find((c) => c.label === word);\n if (comp) {\n return { contents: `**${comp.label}**\\n\\n${comp.detail}\\n\\n${comp.documentation}` };\n }\n\n return null;\n },\n\n /**\n * Get all available completions (for external tooling).\n */\n getAllCompletions(): {\n apis: CompletionItem[];\n components: CompletionItem[];\n directives: CompletionItem[];\n events: CompletionItem[];\n } {\n return {\n apis: RUNTIME_APIS,\n components: BUILT_IN_COMPONENTS,\n directives: DIRECTIVES,\n events: HTML_EVENTS,\n };\n },\n };\n}\n\n// =========================================================================\n// Validation helpers\n// =========================================================================\n\nfunction validateNodes(nodes: TemplateNode[], diagnostics: Diagnostic[], baseOffset: number): void {\n for (const node of nodes) {\n // Check for img without alt\n if (node.type === 'element' && node.tag === 'img') {\n const hasAlt = node.attrs?.some((a) => a.name === 'alt');\n if (!hasAlt) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: '<img> element should have an alt attribute for accessibility',\n severity: 'warning',\n code: 'a11y-img-alt',\n });\n }\n }\n\n // Check for button without type\n if (node.type === 'element' && node.tag === 'button') {\n const hasType = node.attrs?.some((a) => a.name === 'type');\n if (!hasType) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: '<button> should have an explicit type attribute (type=\"button\" or type=\"submit\")',\n severity: 'hint',\n code: 'a11y-button-type',\n });\n }\n }\n\n // Recurse children\n if (node.children) {\n validateNodes(node.children, diagnostics, baseOffset);\n }\n }\n}\n\n// =========================================================================\n// Position helpers\n// =========================================================================\n\nfunction isInScript(source: string, pos: Position): boolean {\n const lines = source.split('\\n');\n let inScript = false;\n for (let i = 0; i <= pos.line && i < lines.length; i++) {\n if (lines[i].includes('<script')) inScript = true;\n if (lines[i].includes('</script>')) inScript = false;\n }\n return inScript;\n}\n\nfunction isInTemplate(source: string, pos: Position): boolean {\n const lines = source.split('\\n');\n let inTemplate = false;\n for (let i = 0; i <= pos.line && i < lines.length; i++) {\n if (lines[i].includes('<template>')) inTemplate = true;\n if (lines[i].includes('</template>')) inTemplate = false;\n }\n return inTemplate;\n}\n\nfunction isInsideTag(before: string): boolean {\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n return lastOpen > lastClose;\n}\n\nfunction getWordAt(line: string, col: number): string {\n let start = col;\n let end = col;\n while (start > 0 && /\\w/.test(line[start - 1])) start--;\n while (end < line.length && /\\w/.test(line[end])) end++;\n return line.slice(start, end);\n}\n","// @akashjs/compiler — Entry point\nexport { parse } from './parse.js';\nexport { transform } from './transform.js';\nexport { scopeStyles, generateScopeId } from './style.js';\nexport { parseTemplate } from './template.js';\nexport { analyzeTemplate, isStaticExpression } from './analyze.js';\nexport { SourceMapBuilder, encodeVLQ, createAkashSourceMap } from './sourcemap.js';\nexport type { ParsedSFC, CompileResult, CompileOptions } from './types.js';\nexport type { TemplateNode, Directive } from './template.js';\nexport type { AnalysisResult, SignalRead, EventHandler, ReactiveExpression } from './analyze.js';\nexport type { SourceMap, SourceMapping } from './sourcemap.js';\nexport {\n isStaticNode, staticNodeToHtml, extractHoistedTemplates,\n generateHoistedDeclarations, getHoistedVar, getOptimizationStats,\n} from './optimize.js';\nexport type { HoistedTemplate, OptimizationStats } from './optimize.js';\nexport { createLanguageService } from './language-service.js';\nexport type { Diagnostic, CompletionItem, HoverInfo, Position, Range, Definition } from './language-service.js';\n\nimport { parse } from './parse.js';\nimport { transform } from './transform.js';\nimport type { CompileOptions, CompileResult } from './types.js';\n\n/**\n * Compile an .akash single-file component to JavaScript + CSS.\n *\n * This is the main entry point for the compiler.\n */\nexport function compile(source: string, options: CompileOptions = {}): CompileResult {\n const sfc = parse(source);\n return transform(sfc, options);\n}\n"]}
1
+ {"version":3,"sources":["../src/parse.ts","../src/template.ts","../src/style.ts","../src/transform.ts","../src/analyze.ts","../src/sourcemap.ts","../src/optimize.ts","../src/language-service.ts","../src/index.ts"],"names":["parse","source","parseBlock","content","attrs","start","end","extractAttr","_attrs","tag","factory","openPattern","closePattern","openMatch","contentStart","closeMatch","contentEnd","name","parseTemplate","nodes","pos","element","parseElement","expr","parseExpression","textEnd","findNextBoundary","text","tagMatch","directives","ws","attr","parseAttribute","isComponent","children","closeTag","closeIdx","findClosingTag","innerContent","parsedChildren","nameMatch","extractBraced","quote","endQuote","result","depth","ch","skipString","maxIter","iter","openIdx","tagEnd","findTagEnd","tagStart","braceDepth","generateScopeId","filename","createHash","scopeStyles","css","scopeId","scopeBlock","insideKeyframes","wsMatch","endComment","braceIdx","prelude","trimmedPrelude","bodyStart","bodyEnd","findMatchingBrace","body","atRule","scopedSelector","scopeSelectorList","selectorList","s","trimmed","scopeSelector","selector","parts","i","part","isCombinator","before","after","colonIdx","transform","sfc","options","runtimeImports","script","template","detectAutoImports","isServer","templateCode","generateServerRenderBody","generateRenderBody","code","cleanScript","propsInterface","extractPropsInterface","userImports","bodyScript","extractUserImports","generics","indented","line","isAlreadyFunction","value","needsReactiveWrapper","imports","scriptApis","api","usagePattern","importPattern","templatePrimitives","lines","bodyLines","inMultiLineImport","match","generateNode","varName","node","indent","pad","generateElement","generateComponentCall","ifDirective","d","innerLines","innerNode","forDirective","keyDirective","forMatch","itemVar","listExpr","keyExpr","bindDirectives","bindDir","prop","signalExpr","eventName","valuePath","childVar","isReactivePrimitive","propParts","jsxContent","tryCompileJSXProp","childBody","generateChildrenBody","propsStr","compiled","tryCompileArrowJSX","meaningful","c","cVar","arrowMatch","params","jsxBody","arrowResult","generateServerNode","generateServerElement","SERVER_VOID_ELEMENTS","openTag","child","analyzeTemplate","analyzeNode","extractSignalReads","analyzeElement","analyzeAttributes","isDynamic","hasDynamicContent","dir","analyzeDirective","event","expression","context","KNOWN_NON_SIGNALS","callPattern","a","isStaticExpression","VLQ_CHARS","encodeVLQ","vlq","digit","SourceMapBuilder","idx","mapping","generatedStart","originalStart","lineCount","sourceIndex","outputFilename","sorted","b","encodeMappings","json","mappings","prevGeneratedLine","prevGeneratedColumn","prevOriginalLine","prevOriginalColumn","prevSource","segment","segments","createAkashSourceMap","originalSource","scriptStartLine","scriptLineCount","generatedScriptStartLine","builder","isStaticNode","staticNodeToHtml","html","extractHoistedTemplates","templates","counter","visit","generateHoistedDeclarations","t","getHoistedVar","getOptimizationStats","totalNodes","staticNodes","count","hoisted","RUNTIME_APIS","BUILT_IN_COMPONENTS","DIRECTIVES","HTML_EVENTS","createLanguageService","diagnostics","validateNodes","err","position","isInScript","isInTemplate","isInsideTag","word","getWordAt","comp","baseOffset","inScript","inTemplate","lastOpen","lastClose","col","compile"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * .akash SFC parser.\n *\n * Extracts <script>, <template>, and <style> blocks from\n * a single-file component. Lightweight regex-based approach —\n * the three top-level tags are well-defined so a full HTML\n * parser is unnecessary.\n */\n\nimport type { ParsedSFC, ScriptBlock, TemplateBlock, StyleBlock } from './types.js';\n\nexport function parse(source: string): ParsedSFC {\n return {\n script: parseBlock<ScriptBlock>(source, 'script', (content, attrs, start, end) => ({\n content,\n lang: extractAttr(attrs, 'lang') ?? 'ts',\n start,\n end,\n })),\n template: parseBlock<TemplateBlock>(source, 'template', (content, _attrs, start, end) => ({\n content,\n start,\n end,\n })),\n style: parseBlock<StyleBlock>(source, 'style', (content, attrs, start, end) => ({\n content,\n scoped: attrs.includes('scoped'),\n start,\n end,\n })),\n };\n}\n\nfunction parseBlock<T>(\n source: string,\n tag: string,\n factory: (content: string, attrs: string, start: number, end: number) => T,\n): T | null {\n // Match <tag ...> ... </tag> — handles attributes like lang=\"ts\" or scoped\n const openPattern = new RegExp(`<${tag}(\\\\b[^>]*)>`, 'i');\n const closePattern = new RegExp(`</${tag}>`, 'i');\n\n const openMatch = openPattern.exec(source);\n if (!openMatch) return null;\n\n const attrs = openMatch[1] ?? '';\n const contentStart = openMatch.index + openMatch[0].length;\n\n const closeMatch = closePattern.exec(source.slice(contentStart));\n if (!closeMatch) return null;\n\n const contentEnd = contentStart + closeMatch.index;\n const content = source.slice(contentStart, contentEnd);\n\n return factory(content.trim(), attrs, contentStart, contentEnd);\n}\n\nfunction extractAttr(attrs: string, name: string): string | null {\n const match = new RegExp(`${name}=[\"']([^\"']+)[\"']`).exec(attrs);\n return match?.[1] ?? null;\n}\n","/**\n * Template compiler.\n *\n * Transforms JSX-like template content from .akash files into\n * imperative DOM creation code that uses the AkashJS runtime.\n *\n * This is a simplified implementation that handles the core patterns.\n * A production version would use a proper AST parser.\n */\n\n/** Represents a parsed template node */\nexport interface TemplateNode {\n type: 'element' | 'text' | 'expression' | 'component';\n tag?: string;\n attrs?: Array<{ name: string; value: string; dynamic: boolean }>;\n children?: TemplateNode[];\n content?: string;\n directives?: Directive[];\n}\n\nexport interface Directive {\n name: string; // 'if', 'for', 'key', 'visible', 'else', 'else-if', 'bind'\n value: string;\n /** Argument for directives like bind:value (arg = 'value') */\n arg?: string;\n}\n\n/**\n * Parse template content into a simple AST.\n *\n * Handles:\n * - HTML elements: <div class=\"foo\">...</div>\n * - Self-closing: <input />\n * - Expressions: {count()}\n * - Dynamic attributes: class={expr}\n * - Directives: :if={expr}, :for={item of items()}\n * - Components: <MyComponent prop={value} />\n */\nexport function parseTemplate(content: string): TemplateNode[] {\n const nodes: TemplateNode[] = [];\n let pos = 0;\n\n while (pos < content.length) {\n if (content[pos] === '<') {\n // Closing tag — handled by parent parseElement call\n if (content[pos + 1] === '/') break;\n\n const element = parseElement(content, pos);\n if (element) {\n nodes.push(element.node);\n pos = element.end;\n continue;\n }\n }\n\n if (content[pos] === '{') {\n const expr = parseExpression(content, pos);\n if (expr) {\n nodes.push(expr.node);\n pos = expr.end;\n continue;\n }\n }\n\n // Text content\n const textEnd = findNextBoundary(content, pos);\n const text = content.slice(pos, textEnd).trim();\n if (text) {\n nodes.push({ type: 'text', content: text });\n }\n pos = textEnd;\n }\n\n return nodes;\n}\n\nfunction parseElement(\n content: string,\n start: number,\n): { node: TemplateNode; end: number } | null {\n // Match opening tag\n const tagMatch = /^<([a-zA-Z][a-zA-Z0-9-]*)/.exec(content.slice(start));\n if (!tagMatch) return null;\n\n const tag = tagMatch[1];\n let pos = start + tagMatch[0].length;\n\n // Parse attributes and directives\n const attrs: Array<{ name: string; value: string; dynamic: boolean }> = [];\n const directives: Directive[] = [];\n\n while (pos < content.length) {\n // Skip whitespace\n const ws = /^\\s+/.exec(content.slice(pos));\n if (ws) pos += ws[0].length;\n\n // End of opening tag\n if (content[pos] === '>' || content.slice(pos, pos + 2) === '/>') break;\n\n // Parse attribute\n const attr = parseAttribute(content, pos);\n if (attr) {\n if (attr.attr.name.startsWith('bind:')) {\n // bind:value={signal} — two-way binding directive\n directives.push({\n name: 'bind',\n arg: attr.attr.name.slice(5), // e.g., 'value'\n value: attr.attr.value,\n });\n } else if (attr.attr.name.startsWith(':')) {\n directives.push({\n name: attr.attr.name.slice(1), // remove ':'\n value: attr.attr.value,\n });\n } else {\n attrs.push(attr.attr);\n }\n pos = attr.end;\n } else {\n pos++; // skip unrecognized character\n }\n }\n\n const isComponent = tag[0] === tag[0].toUpperCase();\n\n // Self-closing\n if (content.slice(pos, pos + 2) === '/>') {\n return {\n node: {\n type: isComponent ? 'component' : 'element',\n tag,\n attrs,\n directives: directives.length > 0 ? directives : undefined,\n children: [],\n },\n end: pos + 2,\n };\n }\n\n // Skip >\n pos++;\n\n // Parse children\n const children = parseTemplate(content.slice(pos));\n const childContent = content.slice(pos);\n\n // Find closing tag\n const closeTag = `</${tag}>`;\n const closeIdx = findClosingTag(content, pos, tag);\n if (closeIdx === -1) {\n // No closing tag found — treat as self-closing\n return {\n node: {\n type: isComponent ? 'component' : 'element',\n tag,\n attrs,\n directives: directives.length > 0 ? directives : undefined,\n children,\n },\n end: content.length,\n };\n }\n\n // Re-parse children within the bounds of the closing tag\n const innerContent = content.slice(pos, closeIdx);\n const parsedChildren = parseTemplate(innerContent);\n\n return {\n node: {\n type: isComponent ? 'component' : 'element',\n tag,\n attrs,\n directives: directives.length > 0 ? directives : undefined,\n children: parsedChildren,\n },\n end: closeIdx + closeTag.length,\n };\n}\n\nfunction parseAttribute(\n content: string,\n start: number,\n): { attr: { name: string; value: string; dynamic: boolean }; end: number } | null {\n // Match attribute name (including : and bind: prefixes for directives)\n const nameMatch = /^(?:bind:|[:a-zA-Z_])[\\w:.-]*/.exec(content.slice(start));\n if (!nameMatch) return null;\n\n const name = nameMatch[0];\n let pos = start + name.length;\n\n // No value — boolean attribute\n if (content[pos] !== '=') {\n return { attr: { name, value: 'true', dynamic: false }, end: pos };\n }\n\n pos++; // skip =\n\n // Dynamic value: ={expression}\n if (content[pos] === '{') {\n const expr = extractBraced(content, pos);\n if (expr) {\n return {\n attr: { name, value: expr.content, dynamic: true },\n end: expr.end,\n };\n }\n }\n\n // String value: \"...\" or '...'\n const quote = content[pos];\n if (quote === '\"' || quote === \"'\") {\n const endQuote = content.indexOf(quote, pos + 1);\n if (endQuote === -1) return null;\n return {\n attr: { name, value: content.slice(pos + 1, endQuote), dynamic: false },\n end: endQuote + 1,\n };\n }\n\n return null;\n}\n\nfunction parseExpression(\n content: string,\n start: number,\n): { node: TemplateNode; end: number } | null {\n const result = extractBraced(content, start);\n if (!result) return null;\n return {\n node: { type: 'expression', content: result.content },\n end: result.end,\n };\n}\n\nfunction extractBraced(\n content: string,\n start: number,\n): { content: string; end: number } | null {\n if (content[start] !== '{') return null;\n\n let depth = 1;\n let pos = start + 1;\n\n while (pos < content.length && depth > 0) {\n const ch = content[pos];\n\n if (ch === '\"' || ch === \"'\" || ch === '`') {\n pos = skipString(content, pos) + 1;\n continue;\n }\n\n if (ch === '{') depth++;\n else if (ch === '}') depth--;\n\n pos++;\n }\n\n return {\n content: content.slice(start + 1, pos - 1).trim(),\n end: pos,\n };\n}\n\nfunction skipString(content: string, start: number): number {\n const quote = content[start];\n let pos = start + 1;\n while (pos < content.length) {\n if (content[pos] === '\\\\') {\n pos += 2;\n continue;\n }\n if (content[pos] === quote) return pos;\n pos++;\n }\n return pos;\n}\n\nfunction findNextBoundary(content: string, start: number): number {\n let pos = start;\n while (pos < content.length) {\n if (content[pos] === '<' || content[pos] === '{') return pos;\n pos++;\n }\n return pos;\n}\n\nfunction findClosingTag(content: string, start: number, tag: string): number {\n const closeTag = `</${tag}>`;\n let depth = 1;\n let pos = start;\n const maxIter = content.length * 2; // safety limit\n let iter = 0;\n\n while (pos < content.length && iter++ < maxIter) {\n const openIdx = content.indexOf(`<${tag}`, pos);\n const closeIdx = content.indexOf(closeTag, pos);\n\n if (closeIdx === -1) return -1;\n\n if (openIdx !== -1 && openIdx < closeIdx) {\n // Find the actual closing > of this open tag, skipping over { } blocks\n const tagEnd = findTagEnd(content, openIdx);\n if (tagEnd !== -1 && content[tagEnd - 1] === '/') {\n // Self-closing — don't increase depth, skip past it\n pos = tagEnd + 1;\n } else if (tagEnd !== -1) {\n depth++;\n pos = tagEnd + 1;\n } else {\n pos = openIdx + 1;\n }\n } else {\n depth--;\n if (depth === 0) return closeIdx;\n pos = closeIdx + 1;\n }\n }\n\n return -1;\n}\n\n/** Find the closing > of an opening tag, skipping over {...} attribute expressions */\nfunction findTagEnd(content: string, tagStart: number): number {\n let pos = tagStart;\n let braceDepth = 0;\n\n while (pos < content.length) {\n const ch = content[pos];\n\n if (ch === '{') {\n braceDepth++;\n } else if (ch === '}') {\n braceDepth--;\n } else if (ch === '>' && braceDepth === 0) {\n return pos;\n }\n\n pos++;\n }\n\n return -1;\n}\n","/**\n * Scoped CSS processor.\n *\n * Adds a unique data attribute to selectors so styles are scoped\n * to the component. Same approach as Vue and Svelte.\n */\n\nimport { createHash } from 'crypto';\n\n/** Generate a scope ID from a filename */\nexport function generateScopeId(filename: string): string {\n const hash = createHash('md5').update(filename).digest('hex').slice(0, 6);\n return `data-a-${hash}`;\n}\n\n/**\n * Rewrite CSS selectors to include the scope attribute.\n *\n * .counter { } → .counter[data-a-x7k3f] { }\n *\n * Properly handles @-rules like @media, @supports, @keyframes —\n * only selectors inside rule blocks are scoped, never the at-rule itself.\n */\nexport function scopeStyles(css: string, scopeId: string): string {\n return scopeBlock(css, scopeId, false);\n}\n\n/**\n * Recursively scope a CSS block. Parses brace-delimited structure\n * so @media/at-rules are preserved and only selectors are scoped.\n */\nfunction scopeBlock(css: string, scopeId: string, insideKeyframes: boolean): string {\n let result = '';\n let pos = 0;\n\n while (pos < css.length) {\n // Skip whitespace\n const wsMatch = /^\\s+/.exec(css.slice(pos));\n if (wsMatch) {\n result += wsMatch[0];\n pos += wsMatch[0].length;\n if (pos >= css.length) break;\n }\n\n // Skip comments\n if (css.slice(pos, pos + 2) === '/*') {\n const endComment = css.indexOf('*/', pos + 2);\n if (endComment === -1) {\n result += css.slice(pos);\n break;\n }\n result += css.slice(pos, endComment + 2);\n pos = endComment + 2;\n continue;\n }\n\n // Closing brace — end of current block\n if (css[pos] === '}') {\n result += '}';\n pos++;\n continue;\n }\n\n // Find the next opening brace to get the selector/at-rule\n const braceIdx = css.indexOf('{', pos);\n if (braceIdx === -1) {\n // No more blocks — append remaining text\n result += css.slice(pos);\n break;\n }\n\n const prelude = css.slice(pos, braceIdx);\n const trimmedPrelude = prelude.trim();\n\n // Find the matching closing brace\n const bodyStart = braceIdx + 1;\n const bodyEnd = findMatchingBrace(css, braceIdx);\n const body = css.slice(bodyStart, bodyEnd);\n\n if (trimmedPrelude.startsWith('@')) {\n // At-rule\n const atRule = trimmedPrelude.split(/\\s/)[0]; // e.g. @media, @keyframes\n\n if (atRule === '@keyframes' || atRule === '@-webkit-keyframes') {\n // Don't scope inside keyframes — just pass through\n result += prelude + '{' + body + '}';\n } else if (atRule === '@font-face') {\n result += prelude + '{' + body + '}';\n } else {\n // @media, @supports, @layer, etc. — recurse into the body\n result += prelude + '{' + scopeBlock(body, scopeId, false) + '}';\n }\n } else if (insideKeyframes) {\n // Inside @keyframes — don't scope (from, to, percentages)\n result += prelude + '{' + body + '}';\n } else {\n // Regular selector — scope it\n const scopedSelector = scopeSelectorList(trimmedPrelude, scopeId);\n result += prelude.replace(trimmedPrelude, scopedSelector) + '{' + body + '}';\n }\n\n pos = bodyEnd + 1;\n }\n\n return result;\n}\n\n/** Find the index of the closing brace matching the opening brace at `openIdx`. */\nfunction findMatchingBrace(css: string, openIdx: number): number {\n let depth = 1;\n let pos = openIdx + 1;\n\n while (pos < css.length && depth > 0) {\n if (css[pos] === '{') depth++;\n else if (css[pos] === '}') depth--;\n if (depth > 0) pos++;\n }\n\n return pos;\n}\n\n/** Scope a comma-separated selector list. */\nfunction scopeSelectorList(selectorList: string, scopeId: string): string {\n return selectorList\n .split(',')\n .map((s: string) => {\n const trimmed = s.trim();\n if (!trimmed) return s;\n\n if (\n trimmed === ':root' ||\n trimmed === ':host' ||\n trimmed.includes(scopeId)\n ) {\n return s;\n }\n\n return scopeSelector(trimmed, scopeId);\n })\n .join(',');\n}\n\nfunction scopeSelector(selector: string, scopeId: string): string {\n // Split by combinators, scope the last simple selector\n const parts = selector.split(/(\\s*[>+~]\\s*|\\s+)/);\n\n // Find the last non-empty, non-combinator part\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i].trim();\n if (part && !isCombinator(part)) {\n // Add scope attribute after the selector\n if (part.includes('::')) {\n // For pseudo-elements, insert before ::\n const [before, after] = part.split('::');\n parts[i] = parts[i].replace(part, `${before}[${scopeId}]::${after}`);\n } else if (part.includes(':')) {\n // For pseudo-classes, insert before :\n const colonIdx = part.indexOf(':');\n const before = part.slice(0, colonIdx);\n const after = part.slice(colonIdx);\n parts[i] = parts[i].replace(part, `${before}[${scopeId}]${after}`);\n } else {\n parts[i] = parts[i].replace(part, `${part}[${scopeId}]`);\n }\n break;\n }\n }\n\n return parts.join('');\n}\n\nfunction isCombinator(s: string): boolean {\n return s === '>' || s === '+' || s === '~';\n}\n","/**\n * Code generator.\n *\n * Transforms a parsed .akash SFC into JavaScript that uses\n * the AkashJS runtime. The output is a defineComponent() call\n * with imperative DOM creation code.\n */\n\nimport type { ParsedSFC, CompileOptions, CompileResult } from './types.js';\nimport { parseTemplate, type TemplateNode } from './template.js';\nimport { scopeStyles, generateScopeId } from './style.js';\n\nexport function transform(sfc: ParsedSFC, options: CompileOptions = {}): CompileResult {\n const scopeId = options.scopeId ?? (options.filename ? generateScopeId(options.filename) : undefined);\n const imports = new Set<string>();\n const runtimeImports = new Set<string>();\n\n // Always need defineComponent\n runtimeImports.add('defineComponent');\n\n // Analyze script for auto-imports\n const script = sfc.script?.content ?? '';\n const template = sfc.template?.content ?? '';\n detectAutoImports(script, template, runtimeImports);\n\n const isServer = options.mode === 'server';\n\n // Parse template\n let templateCode = '';\n if (sfc.template) {\n const nodes = parseTemplate(sfc.template.content);\n if (isServer) {\n templateCode = generateServerRenderBody(nodes, runtimeImports, scopeId);\n } else {\n templateCode = generateRenderBody(nodes, runtimeImports, scopeId);\n }\n }\n\n // Build output\n let code = '';\n\n // Runtime imports\n if (runtimeImports.size > 0) {\n code += `import { ${[...runtimeImports].join(', ')} } from '@akashjs/runtime';\\n`;\n }\n\n // User script (with Props interface extracted)\n const { cleanScript, propsInterface } = extractPropsInterface(script);\n\n // Separate user imports from the rest of the script\n const { userImports, bodyScript } = extractUserImports(cleanScript);\n\n // Hoist user imports to top level\n if (userImports.length > 0) {\n code += userImports.join('\\n') + '\\n';\n }\n\n // Generate the component\n const generics = propsInterface ? `<${propsInterface}>` : '';\n\n code += '\\n';\n code += `export default defineComponent${generics}((ctx) => {\\n`;\n\n // Inject props destructuring if the script uses `props`\n if (script.includes('props')) {\n code += ` const props = ctx.props;\\n`;\n }\n\n // Include user script body (without imports, indented)\n if (bodyScript.trim()) {\n const indented = bodyScript\n .trim()\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n');\n code += `${indented}\\n`;\n }\n\n code += '\\n';\n code += ` return () => {\\n`;\n code += templateCode;\n code += ` };\\n`;\n code += `});\\n`;\n\n // Process CSS\n let css: string | undefined;\n if (sfc.style) {\n css = sfc.style.scoped && scopeId\n ? scopeStyles(sfc.style.content, scopeId)\n : sfc.style.content;\n }\n\n return { code, css };\n}\n\n/** Check if a value is already a function expression (arrow or function keyword) */\nfunction isAlreadyFunction(value: string): boolean {\n const trimmed = value.trim();\n // Arrow function: () => ..., (x) => ..., x => ...\n if (/^(?:\\([^)]*\\)|[a-zA-Z_$]\\w*)\\s*=>/.test(trimmed)) return true;\n // Function keyword\n if (/^function[\\s(]/.test(trimmed)) return true;\n return false;\n}\n\n/**\n * Check if a dynamic expression contains reactive reads (function calls)\n * that need getter wrapping for reactivity.\n *\n * Static values like [...], {...}, \"...\", 42, true, plain identifiers\n * should NOT be wrapped — only expressions containing () calls.\n */\nfunction needsReactiveWrapper(value: string): boolean {\n const trimmed = value.trim();\n\n // Literal array or object — static even if dynamic attribute\n if (/^\\[/.test(trimmed) && !trimmed.includes('(')) return false;\n if (/^\\{/.test(trimmed) && !trimmed.includes('(')) return false;\n\n // String/number/boolean literals\n if (/^[\"'`]/.test(trimmed)) return false;\n if (/^\\d/.test(trimmed)) return false;\n if (trimmed === 'true' || trimmed === 'false' || trimmed === 'null' || trimmed === 'undefined') return false;\n\n // Template literal without function calls\n if (trimmed.startsWith('`') && !trimmed.includes('(')) return false;\n\n // Contains a function call — needs wrapping for reactivity\n // Matches: foo(), foo.bar(), foo()?.bar, etc.\n if (/\\w\\(/.test(trimmed)) return true;\n\n // Plain identifier (variable reference) — no call, no reactivity needed\n if (/^[a-zA-Z_$][\\w$.]*$/.test(trimmed)) return false;\n\n // Property access without calls — static\n if (!trimmed.includes('(')) return false;\n\n return true;\n}\n\n/** Detect which runtime APIs are used in script/template and need auto-importing */\nfunction detectAutoImports(script: string, template: string, imports: Set<string>): void {\n // APIs that may appear in the script block\n const scriptApis = [\n 'signal', 'computed', 'effect', 'batch', 'untrack',\n 'onMount', 'onUnmount', 'onError', 'ref',\n 'createContext', 'provide', 'inject',\n 'Show', 'For',\n ];\n\n for (const api of scriptApis) {\n const usagePattern = new RegExp(`\\\\b${api}\\\\b`);\n const importPattern = new RegExp(`import\\\\s+.*\\\\b${api}\\\\b.*from`);\n if (usagePattern.test(script) && !importPattern.test(script)) {\n imports.add(api);\n }\n }\n\n // Template primitives — auto-import when used as tags in the template\n const templatePrimitives = ['Show', 'For'];\n for (const tag of templatePrimitives) {\n if (new RegExp(`<${tag}[\\\\s/>]`).test(template) && !imports.has(tag)) {\n imports.add(tag);\n }\n }\n}\n\n/** Separate import statements from the rest of the script */\nfunction extractUserImports(script: string): {\n userImports: string[];\n bodyScript: string;\n} {\n const lines = script.split('\\n');\n const userImports: string[] = [];\n const bodyLines: string[] = [];\n\n let inMultiLineImport = false;\n\n for (const line of lines) {\n if (inMultiLineImport) {\n userImports[userImports.length - 1] += '\\n' + line;\n if (line.includes('from ') || line.trimEnd().endsWith(';')) {\n inMultiLineImport = false;\n }\n continue;\n }\n\n const trimmed = line.trim();\n if (/^import\\s/.test(trimmed)) {\n userImports.push(line.trim());\n // Check if this import spans multiple lines (no `from` on this line)\n if (!trimmed.includes('from ') && !trimmed.endsWith(';')) {\n inMultiLineImport = true;\n }\n } else {\n bodyLines.push(line);\n }\n }\n\n return { userImports, bodyScript: bodyLines.join('\\n') };\n}\n\n/** Extract Props interface from script so we can use it as generic param */\nfunction extractPropsInterface(script: string): {\n cleanScript: string;\n propsInterface: string | null;\n} {\n const match = /interface\\s+Props\\s*\\{([^}]*)\\}/s.exec(script);\n if (!match) {\n return { cleanScript: script, propsInterface: null };\n }\n\n // Remove the interface declaration from the script\n const cleanScript = script.replace(match[0], '').trim();\n // Build inline type\n const propsInterface = `{${match[1].trim()}}`;\n\n return { cleanScript, propsInterface };\n}\n\n/** Generate the render body from template AST nodes */\nfunction generateRenderBody(\n nodes: TemplateNode[],\n imports: Set<string>,\n scopeId?: string,\n): string {\n if (nodes.length === 0) {\n return ` return null;\\n`;\n }\n\n // If there's a single root element, generate it directly\n if (nodes.length === 1) {\n const lines: string[] = [];\n generateNode(nodes[0], lines, imports, 4, 'root', scopeId);\n lines.push(` return root;`);\n return lines.join('\\n') + '\\n';\n }\n\n // Multiple root nodes — wrap in a fragment\n imports.add('createElement');\n const lines: string[] = [];\n lines.push(` const __fragment = document.createDocumentFragment();`);\n for (let i = 0; i < nodes.length; i++) {\n const varName = `__n${i}`;\n generateNode(nodes[i], lines, imports, 4, varName, scopeId);\n lines.push(` __fragment.appendChild(${varName});`);\n }\n lines.push(` return __fragment;`);\n return lines.join('\\n') + '\\n';\n}\n\nfunction generateNode(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n varName: string,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n\n switch (node.type) {\n case 'element':\n generateElement(node, lines, imports, indent, varName, scopeId);\n break;\n\n case 'component':\n generateComponentCall(node, lines, imports, indent, varName, scopeId);\n break;\n\n case 'text':\n lines.push(`${pad}const ${varName} = document.createTextNode(${JSON.stringify(node.content ?? '')});`);\n break;\n\n case 'expression':\n imports.add('effect');\n lines.push(`${pad}const ${varName} = document.createTextNode('');`);\n lines.push(`${pad}effect(() => { ${varName}.textContent = String(${node.content}); }, { render: true });`);\n break;\n }\n}\n\nfunction generateElement(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n varName: string,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n const tag = node.tag!;\n\n // Check for :if directive\n const ifDirective = node.directives?.find((d) => d.name === 'if');\n if (ifDirective) {\n imports.add('renderConditional');\n // Generate the conditional block\n lines.push(`${pad}const ${varName}_anchor = document.createComment('if');`);\n lines.push(`${pad}const ${varName} = document.createDocumentFragment();`);\n lines.push(`${pad}${varName}.appendChild(${varName}_anchor);`);\n lines.push(`${pad}renderConditional(${varName}, ${varName}_anchor, () => ${ifDirective.value}, () => {`);\n\n // Generate the element inside the true branch\n const innerLines: string[] = [];\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'if') };\n generateElement(innerNode, innerLines, imports, indent + 2, '__el', scopeId);\n innerLines.push(`${pad} return __el;`);\n lines.push(...innerLines);\n\n lines.push(`${pad}});`);\n return;\n }\n\n // Check for :for directive\n const forDirective = node.directives?.find((d) => d.name === 'for');\n if (forDirective) {\n imports.add('renderList');\n const keyDirective = node.directives?.find((d) => d.name === 'key');\n\n // Parse :for=\"item of items()\" or :for=\"(item, index) of items()\"\n const forMatch = /^(?:\\(([^)]+)\\)|(\\w+))\\s+of\\s+(.+)$/.exec(forDirective.value);\n if (forMatch) {\n const itemVar = forMatch[1] ?? forMatch[2];\n const listExpr = forMatch[3];\n const keyExpr = keyDirective?.value ?? `${itemVar}`;\n\n lines.push(`${pad}const ${varName}_anchor = document.createComment('for');`);\n lines.push(`${pad}const ${varName} = document.createDocumentFragment();`);\n lines.push(`${pad}${varName}.appendChild(${varName}_anchor);`);\n lines.push(`${pad}renderList(${varName}, ${varName}_anchor, () => ${listExpr}, (${itemVar}) => ${keyExpr}, (${itemVar}) => {`);\n\n // Generate the element inside the loop\n const innerLines: string[] = [];\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'for' && d.name !== 'key') };\n generateElement(innerNode, innerLines, imports, indent + 2, '__el', scopeId);\n innerLines.push(`${pad} return __el;`);\n lines.push(...innerLines);\n\n lines.push(`${pad}});`);\n }\n return;\n }\n\n // Check for bind: directives (two-way binding)\n const bindDirectives = node.directives?.filter((d) => d.name === 'bind') ?? [];\n // Remove bind directives from the list so they don't get processed again\n if (bindDirectives.length > 0 && node.directives) {\n node.directives = node.directives.filter((d) => d.name !== 'bind');\n }\n\n // Regular element creation\n lines.push(`${pad}const ${varName} = document.createElement('${tag}');`);\n\n // Add scope ID for scoped styles\n if (scopeId) {\n lines.push(`${pad}${varName}.setAttribute('${scopeId}', '');`);\n }\n\n // Set attributes\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.dynamic) {\n // Dynamic attribute — create effect\n imports.add('effect');\n if (attr.name.startsWith('on')) {\n lines.push(`${pad}${varName}.addEventListener('${attr.name.slice(2).toLowerCase()}', ${attr.value});`);\n } else {\n lines.push(`${pad}effect(() => {`);\n if (attr.name === 'class' || attr.name === 'className') {\n lines.push(`${pad} ${varName}.className = ${attr.value};`);\n } else {\n lines.push(`${pad} ${varName}.setAttribute('${attr.name}', String(${attr.value}));`);\n }\n lines.push(`${pad}}, { render: true });`);\n }\n } else {\n // Static attribute\n if (attr.name === 'class' || attr.name === 'className') {\n lines.push(`${pad}${varName}.className = ${JSON.stringify(attr.value)};`);\n } else if (attr.name.startsWith('on')) {\n // Static event handlers shouldn't exist, but handle gracefully\n lines.push(`${pad}${varName}.setAttribute('${attr.name}', ${JSON.stringify(attr.value)});`);\n } else {\n lines.push(`${pad}${varName}.setAttribute('${attr.name}', ${JSON.stringify(attr.value)});`);\n }\n }\n }\n }\n\n // Process bind: directives (two-way binding sugar)\n for (const bindDir of bindDirectives) {\n const prop = bindDir.arg ?? 'value';\n const signalExpr = bindDir.value;\n imports.add('effect');\n\n // Read: bind signal value to element property\n lines.push(`${pad}effect(() => { ${varName}.${prop} = ${signalExpr}(); }, { render: true });`);\n\n // Write: listen for input events and update the signal\n const eventName = prop === 'value' || prop === 'checked' ? 'input' : 'change';\n const valuePath = prop === 'checked' ? 'checked' : 'value';\n lines.push(`${pad}${varName}.addEventListener('${eventName}', (e) => { ${signalExpr}.set(e.target.${valuePath}); });`);\n }\n\n // Process children\n if (node.children && node.children.length > 0) {\n for (let i = 0; i < node.children.length; i++) {\n const childVar = `${varName}_c${i}`;\n generateNode(node.children[i], lines, imports, indent, childVar, scopeId);\n lines.push(`${pad}${varName}.appendChild(${childVar});`);\n }\n }\n}\n\nfunction generateComponentCall(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n varName: string,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n const tag = node.tag!;\n\n // Only built-in reactive primitives understand getter-wrapped props\n const isReactivePrimitive = tag === 'Show' || tag === 'For' || tag === 'Switch';\n\n // Build props object\n const propParts: string[] = [];\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.dynamic) {\n // Check if the value contains JSX (starts with <Tag)\n const jsxContent = tryCompileJSXProp(attr.value, imports, indent, scopeId);\n if (jsxContent) {\n propParts.push(`${attr.name}: ${jsxContent}`);\n } else if (attr.name.startsWith('on') || isAlreadyFunction(attr.value)) {\n // Event handlers and function values — pass through as-is\n propParts.push(`${attr.name}: ${attr.value}`);\n } else if (isReactivePrimitive && needsReactiveWrapper(attr.value)) {\n // Built-in primitives (Show, For, Switch) — wrap in getter for reactivity\n propParts.push(`${attr.name}: () => ${attr.value}`);\n } else {\n // All other components — pass value directly\n propParts.push(`${attr.name}: ${attr.value}`);\n }\n } else {\n propParts.push(`${attr.name}: ${JSON.stringify(attr.value)}`);\n }\n }\n }\n\n // Children — compile into a render function that builds real DOM\n if (node.children && node.children.length > 0) {\n const childBody = generateChildrenBody(node.children, imports, indent + 2, scopeId);\n propParts.push(`children: ${childBody}`);\n }\n\n const propsStr = propParts.length > 0 ? `{ ${propParts.join(', ')} }` : '{}';\n lines.push(`${pad}const ${varName} = ${tag}(${propsStr});`);\n}\n\n/**\n * Compile children nodes into a render function body: () => { ... return node; }\n *\n * Handles special cases:\n * - A single expression child that is an arrow function with JSX:\n * {(value) => <div>...</div>} compiles the JSX and wraps it in (value) => { ... }\n * - Regular element/text/expression children: wrapped in () => { ... }\n */\nfunction generateChildrenBody(\n children: TemplateNode[],\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): string {\n // Single expression child — check for arrow function with JSX\n if (children.length === 1 && children[0].type === 'expression') {\n const compiled = tryCompileArrowJSX(children[0].content ?? '', imports, indent, scopeId);\n if (compiled) return compiled;\n }\n\n const pad = ' '.repeat(indent);\n const innerLines: string[] = [];\n\n // Filter out whitespace-only text nodes\n const meaningful = children.filter(\n (c) => !(c.type === 'text' && !(c.content ?? '').trim()),\n );\n\n if (meaningful.length === 1) {\n generateNode(meaningful[0], innerLines, imports, indent, '__child', scopeId);\n innerLines.push(`${pad}return __child;`);\n } else {\n innerLines.push(`${pad}const __frag = document.createDocumentFragment();`);\n for (let i = 0; i < meaningful.length; i++) {\n const cVar = `__child${i}`;\n generateNode(meaningful[i], innerLines, imports, indent, cVar, scopeId);\n innerLines.push(`${pad}__frag.appendChild(${cVar});`);\n }\n innerLines.push(`${pad}return __frag;`);\n }\n\n return `() => {\\n${innerLines.join('\\n')}\\n${' '.repeat(indent - 2)}}`;\n}\n\n/**\n * Detect arrow functions containing JSX and compile them:\n * (value) => <div>{value.name}</div>\n * () => <span>hello</span>\n *\n * Returns compiled function string, or null if not an arrow+JSX pattern.\n */\nfunction tryCompileArrowJSX(\n expr: string,\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): string | null {\n const trimmed = expr.trim();\n\n // Match arrow function: optional params => JSX body\n // Patterns: () => <Tag>, (x) => <Tag>, x => <Tag>, (x, i) => <Tag>\n const arrowMatch = /^(\\(?[^)]*\\)?)\\s*=>\\s*(<[a-zA-Z].*)$/s.exec(trimmed);\n if (!arrowMatch) return null;\n\n const params = arrowMatch[1];\n const jsxBody = arrowMatch[2];\n\n // Parse the JSX body as template content\n const nodes = parseTemplate(jsxBody);\n if (nodes.length === 0) return null;\n\n // Generate the DOM creation code for the JSX\n const pad = ' '.repeat(indent);\n const innerLines: string[] = [];\n\n if (nodes.length === 1) {\n generateNode(nodes[0], innerLines, imports, indent, '__child', scopeId);\n innerLines.push(`${pad}return __child;`);\n } else {\n innerLines.push(`${pad}const __frag = document.createDocumentFragment();`);\n for (let i = 0; i < nodes.length; i++) {\n const cVar = `__child${i}`;\n generateNode(nodes[i], innerLines, imports, indent, cVar, scopeId);\n innerLines.push(`${pad}__frag.appendChild(${cVar});`);\n }\n innerLines.push(`${pad}return __frag;`);\n }\n\n return `${params} => {\\n${innerLines.join('\\n')}\\n${' '.repeat(indent - 2)}}`;\n}\n\n/**\n * Detect if a dynamic prop value contains JSX and compile it into a render function.\n * Returns the compiled function string, or null if the value is not JSX.\n */\nfunction tryCompileJSXProp(\n value: string,\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): string | null {\n const trimmed = value.trim();\n\n // Check for arrow function with JSX: (x) => <Tag> or () => <Tag>\n const arrowResult = tryCompileArrowJSX(trimmed, imports, indent + 2, scopeId);\n if (arrowResult) return arrowResult;\n\n // Check if the value looks like JSX: starts with < followed by a tag name\n if (!/^<[a-zA-Z]/.test(trimmed)) return null;\n\n // Parse the JSX as template content\n const nodes = parseTemplate(trimmed);\n if (nodes.length === 0) return null;\n\n // Generate a render function\n return generateChildrenBody(nodes, imports, indent + 2, scopeId);\n}\n\n// --- Server-mode code generation (string concatenation) ---\n\n/** Generate server-mode render body that builds HTML strings */\nfunction generateServerRenderBody(\n nodes: TemplateNode[],\n imports: Set<string>,\n scopeId?: string,\n): string {\n if (nodes.length === 0) {\n return ` return '';\\n`;\n }\n\n const lines: string[] = [];\n lines.push(` let __html = '';`);\n\n for (const node of nodes) {\n generateServerNode(node, lines, imports, 4, scopeId);\n }\n\n lines.push(` return __html;`);\n return lines.join('\\n') + '\\n';\n}\n\nfunction generateServerNode(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n\n switch (node.type) {\n case 'text':\n lines.push(`${pad}__html += ${JSON.stringify(node.content ?? '')};`);\n break;\n\n case 'expression':\n // Import the escape helper\n imports.add('escapeHtml');\n lines.push(`${pad}__html += escapeHtml(String(${node.content}));`);\n break;\n\n case 'element':\n generateServerElement(node, lines, imports, indent, scopeId);\n break;\n\n case 'component':\n // Server-side component rendering — call the component's SSR render\n lines.push(`${pad}// TODO: SSR component rendering for ${node.tag}`);\n lines.push(`${pad}__html += '';`);\n break;\n }\n}\n\nconst SERVER_VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr',\n]);\n\nfunction generateServerElement(\n node: TemplateNode,\n lines: string[],\n imports: Set<string>,\n indent: number,\n scopeId?: string,\n): void {\n const pad = ' '.repeat(indent);\n const tag = node.tag!;\n\n // Handle :if directive\n const ifDirective = node.directives?.find((d) => d.name === 'if');\n if (ifDirective) {\n lines.push(`${pad}if (${ifDirective.value}) {`);\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'if') };\n generateServerElement(innerNode, lines, imports, indent + 2, scopeId);\n lines.push(`${pad}}`);\n return;\n }\n\n // Handle :for directive\n const forDirective = node.directives?.find((d) => d.name === 'for');\n if (forDirective) {\n const forMatch = /^(?:\\(([^)]+)\\)|(\\w+))\\s+of\\s+(.+)$/.exec(forDirective.value);\n if (forMatch) {\n const itemVar = forMatch[1] ?? forMatch[2];\n const listExpr = forMatch[3];\n lines.push(`${pad}for (const ${itemVar} of ${listExpr}) {`);\n const innerNode = { ...node, directives: node.directives?.filter((d) => d.name !== 'for' && d.name !== 'key') };\n generateServerElement(innerNode, lines, imports, indent + 2, scopeId);\n lines.push(`${pad}}`);\n }\n return;\n }\n\n // Opening tag\n let openTag = `'<${tag}`;\n\n // Add scope ID\n if (scopeId) {\n openTag += ` ${scopeId}`;\n }\n\n // Static attributes\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.name.startsWith('on')) continue; // Skip event handlers on server\n\n if (attr.dynamic) {\n // Close the static string, add dynamic part\n lines.push(`${pad}__html += ${openTag}';`);\n openTag = \"'\";\n\n imports.add('escapeHtml');\n if (attr.name === 'class' || attr.name === 'className') {\n lines.push(`${pad}__html += ' class=\"' + escapeHtml(String(${attr.value})) + '\"';`);\n } else {\n lines.push(`${pad}__html += ' ${attr.name}=\"' + escapeHtml(String(${attr.value})) + '\"';`);\n }\n } else {\n if (attr.name === 'class' || attr.name === 'className') {\n openTag += ` class=\"${attr.value}\"`;\n } else {\n openTag += ` ${attr.name}=\"${attr.value}\"`;\n }\n }\n }\n }\n\n if (SERVER_VOID_ELEMENTS.has(tag)) {\n lines.push(`${pad}__html += ${openTag} />';`);\n return;\n }\n\n lines.push(`${pad}__html += ${openTag}>';`);\n\n // Children\n if (node.children) {\n for (const child of node.children) {\n generateServerNode(child, lines, imports, indent, scopeId);\n }\n }\n\n // Closing tag\n lines.push(`${pad}__html += '</${tag}>';`);\n}\n","/**\n * Static analysis for .akash templates.\n *\n * Analyzes the template AST to classify expressions as static or dynamic,\n * track signal dependencies, and identify optimization opportunities.\n */\n\nimport type { TemplateNode, Directive } from './template.js';\n\n// --- Analysis result types ---\n\nexport interface AnalysisResult {\n /** All signal reads found in the template */\n signalReads: SignalRead[];\n /** All event handlers found */\n eventHandlers: EventHandler[];\n /** Whether the template has any dynamic content */\n hasDynamicContent: boolean;\n /** Static elements that could use cloneNode optimization */\n staticSubtrees: TemplateNode[];\n /** Expressions that need reactive effects */\n reactiveExpressions: ReactiveExpression[];\n /** Components used in the template */\n componentRefs: string[];\n}\n\nexport interface SignalRead {\n /** The expression containing the signal read */\n expression: string;\n /** Where in the template this read occurs */\n context: 'text' | 'attribute' | 'directive' | 'event';\n /** The parent element's tag */\n parentTag?: string;\n}\n\nexport interface EventHandler {\n /** Event name (e.g., 'click') */\n event: string;\n /** Handler expression */\n handler: string;\n /** Element tag */\n tag: string;\n}\n\nexport interface ReactiveExpression {\n /** The expression source */\n expression: string;\n /** What kind of binding this is */\n kind: 'text' | 'attribute' | 'conditional' | 'list';\n /** Target attribute name (for attribute bindings) */\n attributeName?: string;\n}\n\n// --- Analysis ---\n\n/**\n * Analyze a template AST for signal reads, static/dynamic classification,\n * and optimization opportunities.\n */\nexport function analyzeTemplate(nodes: TemplateNode[]): AnalysisResult {\n const result: AnalysisResult = {\n signalReads: [],\n eventHandlers: [],\n hasDynamicContent: false,\n staticSubtrees: [],\n reactiveExpressions: [],\n componentRefs: [],\n };\n\n for (const node of nodes) {\n analyzeNode(node, result);\n }\n\n return result;\n}\n\nfunction analyzeNode(node: TemplateNode, result: AnalysisResult): void {\n switch (node.type) {\n case 'expression':\n result.hasDynamicContent = true;\n if (node.content) {\n result.reactiveExpressions.push({\n expression: node.content,\n kind: 'text',\n });\n extractSignalReads(node.content, 'text', result);\n }\n break;\n\n case 'element':\n analyzeElement(node, result);\n break;\n\n case 'component':\n if (node.tag) {\n result.componentRefs.push(node.tag);\n }\n result.hasDynamicContent = true;\n analyzeAttributes(node, result);\n if (node.children) {\n for (const child of node.children) {\n analyzeNode(child, result);\n }\n }\n break;\n\n case 'text':\n // Pure static — no analysis needed\n break;\n }\n}\n\nfunction analyzeElement(node: TemplateNode, result: AnalysisResult): void {\n const isDynamic = hasDynamicContent(node);\n\n // Check directives\n if (node.directives) {\n for (const dir of node.directives) {\n result.hasDynamicContent = true;\n analyzeDirective(dir, node, result);\n }\n }\n\n // Check attributes\n analyzeAttributes(node, result);\n\n // If fully static (no dynamic attrs, no directives, no dynamic children),\n // mark as a static subtree candidate\n if (!isDynamic && !node.directives?.length) {\n result.staticSubtrees.push(node);\n }\n\n // Recurse children\n if (node.children) {\n for (const child of node.children) {\n analyzeNode(child, result);\n }\n }\n}\n\nfunction analyzeAttributes(node: TemplateNode, result: AnalysisResult): void {\n if (!node.attrs) return;\n\n for (const attr of node.attrs) {\n if (attr.dynamic) {\n result.hasDynamicContent = true;\n\n if (attr.name.startsWith('on')) {\n // Event handler\n const event = attr.name.slice(2).toLowerCase();\n result.eventHandlers.push({\n event,\n handler: attr.value,\n tag: node.tag ?? 'unknown',\n });\n } else {\n // Dynamic attribute binding\n result.reactiveExpressions.push({\n expression: attr.value,\n kind: 'attribute',\n attributeName: attr.name,\n });\n extractSignalReads(attr.value, 'attribute', result);\n }\n }\n }\n}\n\nfunction analyzeDirective(\n dir: Directive,\n node: TemplateNode,\n result: AnalysisResult,\n): void {\n switch (dir.name) {\n case 'if':\n case 'else-if':\n case 'show':\n result.reactiveExpressions.push({\n expression: dir.value,\n kind: 'conditional',\n });\n extractSignalReads(dir.value, 'directive', result);\n break;\n\n case 'for': {\n // Parse \"item of items()\" — the list expression is the reactive part\n const match = /\\bof\\s+(.+)$/.exec(dir.value);\n if (match) {\n result.reactiveExpressions.push({\n expression: match[1],\n kind: 'list',\n });\n extractSignalReads(match[1], 'directive', result);\n }\n break;\n }\n\n case 'bind': {\n result.reactiveExpressions.push({\n expression: dir.value,\n kind: 'attribute',\n attributeName: dir.value,\n });\n extractSignalReads(dir.value, 'directive', result);\n break;\n }\n }\n}\n\n// --- Signal read detection ---\n\n/**\n * Heuristically detect signal reads in an expression.\n *\n * Looks for patterns like `foo()` where `foo` is likely a signal.\n * This is a heuristic — the actual tracking happens at runtime.\n */\nfunction extractSignalReads(\n expression: string,\n context: SignalRead['context'],\n result: AnalysisResult,\n): void {\n // Match function calls that look like signal reads: word()\n // Exclude known non-signals: console.log, Math.floor, etc.\n const KNOWN_NON_SIGNALS = new Set([\n 'console', 'Math', 'JSON', 'Object', 'Array', 'String', 'Number',\n 'Boolean', 'Date', 'RegExp', 'Error', 'Promise', 'parseInt', 'parseFloat',\n 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',\n 'document', 'window', 'navigator', 'fetch',\n ]);\n\n // Match identifier() patterns — likely signal reads\n const callPattern = /\\b([a-zA-Z_$][\\w$]*)\\s*\\(\\s*\\)/g;\n let match: RegExpExecArray | null;\n\n while ((match = callPattern.exec(expression)) !== null) {\n const name = match[1];\n if (!KNOWN_NON_SIGNALS.has(name)) {\n result.signalReads.push({\n expression: `${name}()`,\n context,\n });\n }\n }\n}\n\n// --- Helpers ---\n\n/** Check if a node has any dynamic content (attributes or children) */\nfunction hasDynamicContent(node: TemplateNode): boolean {\n if (node.attrs?.some((a) => a.dynamic)) return true;\n if (node.directives?.length) return true;\n if (node.children?.some((c) => c.type === 'expression' || c.type === 'component')) return true;\n if (node.children?.some((c) => hasDynamicContent(c))) return true;\n return false;\n}\n\n/**\n * Check if an expression is a pure static value (string literal, number, boolean).\n */\nexport function isStaticExpression(expr: string): boolean {\n const trimmed = expr.trim();\n // String literal\n if (/^['\"`].*['\"`]$/.test(trimmed)) return true;\n // Number\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return true;\n // Boolean\n if (trimmed === 'true' || trimmed === 'false') return true;\n // null/undefined\n if (trimmed === 'null' || trimmed === 'undefined') return true;\n return false;\n}\n","/**\n * Source map generation for .akash → .js transforms.\n *\n * Generates V3 source maps that map compiled output back to the\n * original .akash file positions (script, template, style blocks).\n */\n\n// --- VLQ encoding for source maps ---\n\nconst VLQ_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n/**\n * Encode a signed integer as a VLQ base64 string.\n */\nexport function encodeVLQ(value: number): string {\n let result = '';\n let vlq = value < 0 ? (-value << 1) | 1 : value << 1;\n\n do {\n let digit = vlq & 0x1f;\n vlq >>>= 5;\n if (vlq > 0) digit |= 0x20;\n result += VLQ_CHARS[digit];\n } while (vlq > 0);\n\n return result;\n}\n\n// --- Source map builder ---\n\nexport interface SourceMapping {\n /** Generated line (0-based) */\n generatedLine: number;\n /** Generated column (0-based) */\n generatedColumn: number;\n /** Original line (0-based) */\n originalLine: number;\n /** Original column (0-based) */\n originalColumn: number;\n /** Source file index */\n source?: number;\n}\n\nexport interface SourceMap {\n version: 3;\n file: string;\n sources: string[];\n sourcesContent: (string | null)[];\n names: string[];\n mappings: string;\n}\n\n/**\n * Build a V3 source map from a list of mappings.\n */\nexport class SourceMapBuilder {\n private mappings: SourceMapping[] = [];\n private sources: string[] = [];\n private sourcesContent: (string | null)[] = [];\n\n /**\n * Add a source file.\n * @returns The source index.\n */\n addSource(filename: string, content?: string): number {\n const idx = this.sources.length;\n this.sources.push(filename);\n this.sourcesContent.push(content ?? null);\n return idx;\n }\n\n /**\n * Add a mapping from generated position to original position.\n */\n addMapping(mapping: SourceMapping): void {\n this.mappings.push(mapping);\n }\n\n /**\n * Add a 1:1 mapping for a range of lines.\n * Useful for script blocks that are mostly copied verbatim.\n */\n addLineRange(\n generatedStart: number,\n originalStart: number,\n lineCount: number,\n sourceIndex = 0,\n ): void {\n for (let i = 0; i < lineCount; i++) {\n this.addMapping({\n generatedLine: generatedStart + i,\n generatedColumn: 0,\n originalLine: originalStart + i,\n originalColumn: 0,\n source: sourceIndex,\n });\n }\n }\n\n /**\n * Generate the V3 source map JSON.\n */\n build(outputFilename: string): SourceMap {\n // Sort mappings by generated position\n const sorted = [...this.mappings].sort((a, b) =>\n a.generatedLine - b.generatedLine || a.generatedColumn - b.generatedColumn,\n );\n\n return {\n version: 3,\n file: outputFilename,\n sources: this.sources,\n sourcesContent: this.sourcesContent,\n names: [],\n mappings: encodeMappings(sorted),\n };\n }\n\n /**\n * Generate the source map as a JSON string.\n */\n toJSON(outputFilename: string): string {\n return JSON.stringify(this.build(outputFilename));\n }\n\n /**\n * Generate a data URL for inline source maps.\n */\n toDataUrl(outputFilename: string): string {\n const json = this.toJSON(outputFilename);\n const base64 = typeof btoa === 'function'\n ? btoa(json)\n : Buffer.from(json).toString('base64');\n return `data:application/json;charset=utf-8;base64,${base64}`;\n }\n}\n\n/**\n * Encode sorted mappings into the V3 mappings string format.\n */\nfunction encodeMappings(mappings: SourceMapping[]): string {\n const lines: string[][] = [];\n let prevGeneratedLine = 0;\n let prevGeneratedColumn = 0;\n let prevOriginalLine = 0;\n let prevOriginalColumn = 0;\n let prevSource = 0;\n\n for (const mapping of mappings) {\n // Fill empty lines\n while (lines.length <= mapping.generatedLine) {\n lines.push([]);\n }\n\n // Reset column tracking at new lines\n if (mapping.generatedLine !== prevGeneratedLine) {\n prevGeneratedColumn = 0;\n prevGeneratedLine = mapping.generatedLine;\n }\n\n let segment = '';\n\n // Field 1: Generated column (relative)\n segment += encodeVLQ(mapping.generatedColumn - prevGeneratedColumn);\n prevGeneratedColumn = mapping.generatedColumn;\n\n // Fields 2-4: Source, original line, original column (all relative)\n const source = mapping.source ?? 0;\n segment += encodeVLQ(source - prevSource);\n prevSource = source;\n\n segment += encodeVLQ(mapping.originalLine - prevOriginalLine);\n prevOriginalLine = mapping.originalLine;\n\n segment += encodeVLQ(mapping.originalColumn - prevOriginalColumn);\n prevOriginalColumn = mapping.originalColumn;\n\n lines[mapping.generatedLine].push(segment);\n }\n\n return lines.map((segments) => segments.join(',')).join(';');\n}\n\n// --- Helper for .akash file source maps ---\n\n/**\n * Create a source map for a compiled .akash file.\n *\n * Maps the script block lines 1:1 and provides approximate\n * mappings for the generated template code.\n */\nexport function createAkashSourceMap(\n filename: string,\n originalSource: string,\n scriptStartLine: number,\n scriptLineCount: number,\n generatedScriptStartLine: number,\n): SourceMapBuilder {\n const builder = new SourceMapBuilder();\n builder.addSource(filename, originalSource);\n\n // Map script lines 1:1\n builder.addLineRange(\n generatedScriptStartLine,\n scriptStartLine,\n scriptLineCount,\n 0,\n );\n\n return builder;\n}\n","/**\n * Compiler optimizations — static hoisting.\n *\n * Detects fully static subtrees in templates and hoists them\n * into `<template>` + `cloneNode(true)` calls that execute once.\n * Dynamic parts are patched in after cloning.\n *\n * This is the key optimization that makes AkashJS competitive with\n * Svelte and Vue 3 on initial render performance.\n */\n\nimport type { TemplateNode } from './template.js';\nimport { analyzeTemplate } from './analyze.js';\n\n// --- Static analysis ---\n\n/**\n * Check if a node subtree is fully static (no signals, no directives,\n * no dynamic attributes, no components).\n */\nexport function isStaticNode(node: TemplateNode): boolean {\n if (node.type === 'expression') return false;\n if (node.type === 'component') return false;\n if (node.type === 'text') return true;\n\n // Element node\n if (node.directives && node.directives.length > 0) return false;\n if (node.attrs?.some((a) => a.dynamic)) return false;\n if (node.children?.some((c) => !isStaticNode(c))) return false;\n\n return true;\n}\n\n/**\n * Convert a static subtree to an HTML string for cloneNode.\n */\nexport function staticNodeToHtml(node: TemplateNode): string {\n switch (node.type) {\n case 'text':\n return node.content ?? '';\n\n case 'element': {\n let html = `<${node.tag}`;\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (attr.name === 'class' || attr.name === 'className') {\n html += ` class=\"${attr.value}\"`;\n } else {\n html += ` ${attr.name}=\"${attr.value}\"`;\n }\n }\n }\n html += '>';\n if (node.children) {\n for (const child of node.children) {\n html += staticNodeToHtml(child);\n }\n }\n html += `</${node.tag}>`;\n return html;\n }\n\n default:\n return '';\n }\n}\n\n// --- Hoisting ---\n\nexport interface HoistedTemplate {\n /** Variable name for the template element */\n varName: string;\n /** HTML string for the template */\n html: string;\n}\n\n/**\n * Extract static subtrees from a template AST and return them\n * as hoisted templates. The original nodes are annotated with\n * a `hoisted` flag.\n */\nexport function extractHoistedTemplates(nodes: TemplateNode[]): HoistedTemplate[] {\n const templates: HoistedTemplate[] = [];\n let counter = 0;\n\n function visit(node: TemplateNode): void {\n if (node.type !== 'element') return;\n\n // Check if this entire subtree is static AND has children\n // (single text nodes aren't worth hoisting)\n if (isStaticNode(node) && node.children && node.children.length > 0) {\n const varName = `__hoisted_${counter++}`;\n templates.push({\n varName,\n html: staticNodeToHtml(node),\n });\n // Mark node as hoisted so code generator uses cloneNode\n (node as any)._hoisted = varName;\n return; // Don't descend into children\n }\n\n // Recurse into non-static children\n if (node.children) {\n for (const child of node.children) {\n visit(child);\n }\n }\n }\n\n for (const node of nodes) {\n visit(node);\n }\n\n return templates;\n}\n\n/**\n * Generate the hoisted template declarations.\n * These go at module scope (outside defineComponent) so they're\n * created once per module, not per component instance.\n */\nexport function generateHoistedDeclarations(templates: HoistedTemplate[]): string {\n if (templates.length === 0) return '';\n\n let code = '// Hoisted static templates (created once, cloned per instance)\\n';\n for (const t of templates) {\n code += `const ${t.varName} = /*#__PURE__*/ (() => {\\n`;\n code += ` const _t = document.createElement('template');\\n`;\n code += ` _t.innerHTML = ${JSON.stringify(t.html)};\\n`;\n code += ` return _t;\\n`;\n code += `})();\\n`;\n }\n return code;\n}\n\n/**\n * Check if a node was hoisted and return its variable name.\n */\nexport function getHoistedVar(node: TemplateNode): string | null {\n return (node as any)._hoisted ?? null;\n}\n\n// --- Statistics ---\n\nexport interface OptimizationStats {\n totalNodes: number;\n staticNodes: number;\n hoistedTemplates: number;\n staticRatio: number;\n}\n\n/**\n * Analyze a template and return optimization statistics.\n */\nexport function getOptimizationStats(nodes: TemplateNode[]): OptimizationStats {\n let totalNodes = 0;\n let staticNodes = 0;\n\n function count(node: TemplateNode): void {\n totalNodes++;\n if (isStaticNode(node)) staticNodes++;\n if (node.children) {\n for (const child of node.children) {\n count(child);\n }\n }\n }\n\n for (const node of nodes) {\n count(node);\n }\n\n const hoisted = extractHoistedTemplates(\n JSON.parse(JSON.stringify(nodes)), // clone to avoid mutation\n );\n\n return {\n totalNodes,\n staticNodes,\n hoistedTemplates: hoisted.length,\n staticRatio: totalNodes > 0 ? staticNodes / totalNodes : 0,\n };\n}\n","/**\n * Language service for .akash files.\n *\n * Provides IDE features: completion, diagnostics, hover info,\n * and go-to-definition for templates. Used by the VS Code extension\n * and any LSP-compatible editor.\n */\n\nimport { parse } from './parse.js';\nimport { parseTemplate } from './template.js';\nimport type { ParsedSFC } from './types.js';\nimport type { TemplateNode } from './template.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface Position {\n line: number;\n character: number;\n}\n\nexport interface Range {\n start: Position;\n end: Position;\n}\n\nexport interface Diagnostic {\n range: Range;\n message: string;\n severity: 'error' | 'warning' | 'info' | 'hint';\n code?: string;\n}\n\nexport interface CompletionItem {\n label: string;\n kind: 'component' | 'attribute' | 'directive' | 'event' | 'property' | 'value';\n detail?: string;\n documentation?: string;\n insertText?: string;\n}\n\nexport interface HoverInfo {\n contents: string;\n range?: Range;\n}\n\nexport interface Definition {\n file: string;\n range: Range;\n}\n\n// =========================================================================\n// Built-in completions database\n// =========================================================================\n\nconst RUNTIME_APIS: CompletionItem[] = [\n { label: 'signal', kind: 'property', detail: 'signal<T>(initial: T): Signal<T>', documentation: 'Create a reactive signal' },\n { label: 'computed', kind: 'property', detail: 'computed<T>(fn: () => T): ReadonlySignal<T>', documentation: 'Create a derived reactive value' },\n { label: 'effect', kind: 'property', detail: 'effect(fn: () => void): () => void', documentation: 'Run a side-effect when dependencies change' },\n { label: 'batch', kind: 'property', detail: 'batch(fn: () => void): void', documentation: 'Batch signal updates' },\n { label: 'untrack', kind: 'property', detail: 'untrack<T>(fn: () => T): T', documentation: 'Read signals without tracking' },\n { label: 'onMount', kind: 'property', detail: 'onMount(fn: () => void | (() => void)): void', documentation: 'Run after component mounts' },\n { label: 'onUnmount', kind: 'property', detail: 'onUnmount(fn: () => void): void', documentation: 'Run before component unmounts' },\n { label: 'provide', kind: 'property', detail: 'provide<T>(key: InjectionKey<T>, value: T): void', documentation: 'Provide a value to descendants' },\n { label: 'inject', kind: 'property', detail: 'inject<T>(key: InjectionKey<T>): T', documentation: 'Inject a value from ancestors' },\n { label: 'defineStore', kind: 'property', detail: 'defineStore(id, config): () => Store', documentation: 'Define a global store' },\n { label: 'useHead', kind: 'property', detail: 'useHead(config: HeadConfig): void', documentation: 'Manage document head tags' },\n { label: 'cx', kind: 'property', detail: 'cx(...inputs): string', documentation: 'Merge CSS class names' },\n { label: 'pipe', kind: 'property', detail: 'pipe(value, transform, ...args): any', documentation: 'Apply a pipe transform' },\n];\n\nconst BUILT_IN_COMPONENTS: CompletionItem[] = [\n { label: 'Show', kind: 'component', detail: '<Show when={condition}>{value => ...}</Show>', documentation: 'Conditional rendering with type narrowing' },\n { label: 'For', kind: 'component', detail: '<For each={items} key={fn}>{item => ...}</For>', documentation: 'List rendering with keyed reconciliation' },\n { label: 'Switch', kind: 'component', detail: '<Switch on={value} cases={...} />', documentation: 'Switch/case rendering' },\n { label: 'Portal', kind: 'component', detail: '<Portal target=\"selector\">...</Portal>', documentation: 'Render into different DOM node' },\n { label: 'Transition', kind: 'component', detail: '<Transition name=\"fade\" when={show}>...</Transition>', documentation: 'CSS enter/exit transitions' },\n { label: 'ErrorBoundary', kind: 'component', detail: '<ErrorBoundary fallback={fn}>...</ErrorBoundary>', documentation: 'Catch errors from children' },\n { label: 'Suspense', kind: 'component', detail: '<Suspense fallback={fn}>...</Suspense>', documentation: 'Show fallback during async loading' },\n { label: 'VirtualFor', kind: 'component', detail: '<VirtualFor each={items} itemHeight={40}>...</VirtualFor>', documentation: 'Virtual scrolling for large lists' },\n { label: 'Image', kind: 'component', detail: '<Image src=\"...\" alt=\"...\" />', documentation: 'Optimized image with lazy loading' },\n];\n\nconst DIRECTIVES: CompletionItem[] = [\n { label: ':if', kind: 'directive', detail: ':if={condition}', documentation: 'Conditional rendering' },\n { label: ':for', kind: 'directive', detail: ':for={item of items()}', documentation: 'List rendering' },\n { label: ':show', kind: 'directive', detail: ':show={condition}', documentation: 'Toggle visibility (display)' },\n { label: ':key', kind: 'directive', detail: ':key={uniqueId}', documentation: 'Reconciliation key for lists' },\n { label: 'bind:value', kind: 'directive', detail: 'bind:value={signal}', documentation: 'Two-way binding' },\n { label: 'bind:checked', kind: 'directive', detail: 'bind:checked={signal}', documentation: 'Two-way checkbox binding' },\n];\n\nconst HTML_EVENTS: CompletionItem[] = [\n 'onClick', 'onInput', 'onChange', 'onSubmit', 'onKeyDown', 'onKeyUp',\n 'onFocus', 'onBlur', 'onMouseEnter', 'onMouseLeave', 'onScroll',\n 'onLoad', 'onError', 'onResize', 'onPointerDown', 'onPointerUp',\n].map((name) => ({\n label: name,\n kind: 'event' as const,\n detail: `${name}={(e) => { ... }}`,\n documentation: `${name.slice(2)} event handler`,\n}));\n\n// =========================================================================\n// Language service implementation\n// =========================================================================\n\n/**\n * Create a language service instance for .akash files.\n */\nexport function createLanguageService() {\n return {\n /**\n * Get diagnostics for an .akash file.\n */\n getDiagnostics(source: string, filename?: string): Diagnostic[] {\n const diagnostics: Diagnostic[] = [];\n\n try {\n const sfc = parse(source);\n\n // Check for missing template\n if (!sfc.template) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: 'Missing <template> block',\n severity: 'warning',\n });\n }\n\n // Check template for common issues\n if (sfc.template) {\n const nodes = parseTemplate(sfc.template.content);\n validateNodes(nodes, diagnostics, sfc.template.start);\n }\n } catch (err) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: `Parse error: ${err instanceof Error ? err.message : String(err)}`,\n severity: 'error',\n });\n }\n\n return diagnostics;\n },\n\n /**\n * Get completion items at a position.\n */\n getCompletions(source: string, position: Position): CompletionItem[] {\n const line = source.split('\\n')[position.line] ?? '';\n const before = line.slice(0, position.character);\n\n // Inside <script> — suggest runtime APIs\n if (isInScript(source, position)) {\n return [...RUNTIME_APIS];\n }\n\n // Inside <template>\n if (isInTemplate(source, position)) {\n // After < — suggest components and HTML tags\n if (before.endsWith('<') || /^<[A-Z]/.test(before.trimStart())) {\n return [...BUILT_IN_COMPONENTS];\n }\n\n // After : — suggest directives\n if (before.endsWith(':') || before.includes(':')) {\n return [...DIRECTIVES];\n }\n\n // Inside a tag — suggest attributes and events\n if (isInsideTag(before)) {\n return [...DIRECTIVES, ...HTML_EVENTS];\n }\n\n return [...BUILT_IN_COMPONENTS, ...DIRECTIVES];\n }\n\n return [];\n },\n\n /**\n * Get hover information at a position.\n */\n getHoverInfo(source: string, position: Position): HoverInfo | null {\n const line = source.split('\\n')[position.line] ?? '';\n const word = getWordAt(line, position.character);\n\n // Check runtime APIs\n const api = RUNTIME_APIS.find((a) => a.label === word);\n if (api) {\n return { contents: `**${api.label}**\\n\\n${api.detail}\\n\\n${api.documentation}` };\n }\n\n // Check components\n const comp = BUILT_IN_COMPONENTS.find((c) => c.label === word);\n if (comp) {\n return { contents: `**${comp.label}**\\n\\n${comp.detail}\\n\\n${comp.documentation}` };\n }\n\n return null;\n },\n\n /**\n * Get all available completions (for external tooling).\n */\n getAllCompletions(): {\n apis: CompletionItem[];\n components: CompletionItem[];\n directives: CompletionItem[];\n events: CompletionItem[];\n } {\n return {\n apis: RUNTIME_APIS,\n components: BUILT_IN_COMPONENTS,\n directives: DIRECTIVES,\n events: HTML_EVENTS,\n };\n },\n };\n}\n\n// =========================================================================\n// Validation helpers\n// =========================================================================\n\nfunction validateNodes(nodes: TemplateNode[], diagnostics: Diagnostic[], baseOffset: number): void {\n for (const node of nodes) {\n // Check for img without alt\n if (node.type === 'element' && node.tag === 'img') {\n const hasAlt = node.attrs?.some((a) => a.name === 'alt');\n if (!hasAlt) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: '<img> element should have an alt attribute for accessibility',\n severity: 'warning',\n code: 'a11y-img-alt',\n });\n }\n }\n\n // Check for button without type\n if (node.type === 'element' && node.tag === 'button') {\n const hasType = node.attrs?.some((a) => a.name === 'type');\n if (!hasType) {\n diagnostics.push({\n range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },\n message: '<button> should have an explicit type attribute (type=\"button\" or type=\"submit\")',\n severity: 'hint',\n code: 'a11y-button-type',\n });\n }\n }\n\n // Recurse children\n if (node.children) {\n validateNodes(node.children, diagnostics, baseOffset);\n }\n }\n}\n\n// =========================================================================\n// Position helpers\n// =========================================================================\n\nfunction isInScript(source: string, pos: Position): boolean {\n const lines = source.split('\\n');\n let inScript = false;\n for (let i = 0; i <= pos.line && i < lines.length; i++) {\n if (lines[i].includes('<script')) inScript = true;\n if (lines[i].includes('</script>')) inScript = false;\n }\n return inScript;\n}\n\nfunction isInTemplate(source: string, pos: Position): boolean {\n const lines = source.split('\\n');\n let inTemplate = false;\n for (let i = 0; i <= pos.line && i < lines.length; i++) {\n if (lines[i].includes('<template>')) inTemplate = true;\n if (lines[i].includes('</template>')) inTemplate = false;\n }\n return inTemplate;\n}\n\nfunction isInsideTag(before: string): boolean {\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n return lastOpen > lastClose;\n}\n\nfunction getWordAt(line: string, col: number): string {\n let start = col;\n let end = col;\n while (start > 0 && /\\w/.test(line[start - 1])) start--;\n while (end < line.length && /\\w/.test(line[end])) end++;\n return line.slice(start, end);\n}\n","// @akashjs/compiler — Entry point\nexport { parse } from './parse.js';\nexport { transform } from './transform.js';\nexport { scopeStyles, generateScopeId } from './style.js';\nexport { parseTemplate } from './template.js';\nexport { analyzeTemplate, isStaticExpression } from './analyze.js';\nexport { SourceMapBuilder, encodeVLQ, createAkashSourceMap } from './sourcemap.js';\nexport type { ParsedSFC, CompileResult, CompileOptions } from './types.js';\nexport type { TemplateNode, Directive } from './template.js';\nexport type { AnalysisResult, SignalRead, EventHandler, ReactiveExpression } from './analyze.js';\nexport type { SourceMap, SourceMapping } from './sourcemap.js';\nexport {\n isStaticNode, staticNodeToHtml, extractHoistedTemplates,\n generateHoistedDeclarations, getHoistedVar, getOptimizationStats,\n} from './optimize.js';\nexport type { HoistedTemplate, OptimizationStats } from './optimize.js';\nexport { createLanguageService } from './language-service.js';\nexport type { Diagnostic, CompletionItem, HoverInfo, Position, Range, Definition } from './language-service.js';\n\nimport { parse } from './parse.js';\nimport { transform } from './transform.js';\nimport type { CompileOptions, CompileResult } from './types.js';\n\n/**\n * Compile an .akash single-file component to JavaScript + CSS.\n *\n * This is the main entry point for the compiler.\n */\nexport function compile(source: string, options: CompileOptions = {}): CompileResult {\n const sfc = parse(source);\n return transform(sfc, options);\n}\n"]}