olova 2.0.71 → 2.0.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compiler.js +14 -8
- package/dist/compiler.js.map +1 -1
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/vite.js +14 -8
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
package/dist/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../compiler/css-scope.ts","../compiler/diagnostics.ts","../compiler/parse.ts","../compiler/html-parser.ts","../compiler/dom-generator.ts","../compiler/compile.ts"],"names":["generate","parse","statement","childExpr","walk","char","prev","id","css"],"mappings":"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","file":"compiler.js","sourcesContent":["import * as csstree from \"css-tree\";\nimport type { Rule, StyleSheet } from \"css-tree\";\nimport type { StyleBlock } from \"./parse\";\n\nexport function createScopeAttr(scopeId?: string): string | null {\n return scopeId ? `data-o-scope-${scopeId}` : null;\n}\n\nfunction scopeSelectorList(selectorList: string, scopeAttr: string): string {\n const applyScopeToSegment = (segment: string): string => {\n const trimmed = segment.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n if (trimmed.includes(scopeAttr)) {\n return trimmed;\n }\n\n const globalPattern = /:global\\(([^()]+)\\)/g;\n const localCandidate = trimmed.replace(globalPattern, \"\").trim();\n const normalized = trimmed.replace(globalPattern, \"$1\");\n\n if (!localCandidate) {\n return normalized;\n }\n\n if (normalized === \":root\") {\n return `[${scopeAttr}]`;\n }\n\n const pseudoIndex = normalized.search(/(?<!:):(?!:)/);\n if (pseudoIndex === -1) {\n return `${normalized}[${scopeAttr}]`;\n }\n\n return `${normalized.slice(0, pseudoIndex)}[${scopeAttr}]${normalized.slice(pseudoIndex)}`;\n };\n\n return selectorList\n .split(\",\")\n .map((selector) => selector.trim())\n .filter(Boolean)\n .map((selector) => {\n if (selector.startsWith(\"@\") || selector.includes(scopeAttr)) {\n return selector;\n }\n\n return selector\n .split(/(\\s+|[>+~])/)\n .map((part) => {\n if (!part || /^(\\s+|[>+~])$/.test(part)) {\n return part;\n }\n\n return applyScopeToSegment(part);\n })\n .join(\"\");\n })\n .join(\", \");\n}\n\nfunction scopeCss(css: string, scopeAttr: string): string {\n const ast = csstree.parse(css, {\n context: \"stylesheet\",\n positions: false,\n }) as StyleSheet;\n\n csstree.walk(ast, {\n visit: \"Rule\",\n enter(node) {\n const rule = node as Rule;\n if (!rule.prelude || rule.prelude.type !== \"SelectorList\") {\n return;\n }\n\n rule.prelude = csstree.parse(\n scopeSelectorList(csstree.generate(rule.prelude), scopeAttr),\n {\n context: \"selectorList\",\n positions: false,\n },\n ) as Rule[\"prelude\"];\n },\n });\n\n return csstree.generate(ast);\n}\n\nexport function hashScopeSeed(input: string): string {\n let hash = 2166136261;\n for (let index = 0; index < input.length; index += 1) {\n hash ^= input.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n\n return Math.abs(hash >>> 0).toString(36);\n}\n\nexport function collectCss(blocks: StyleBlock[], scopeId?: string): string {\n const scopeAttr = createScopeAttr(scopeId);\n return blocks\n .map((block) => {\n const content = block.content.trim();\n if (!content) {\n return \"\";\n }\n\n if (!(\"global\" in block.attrs) && scopeAttr) {\n return scopeCss(content, scopeAttr);\n }\n\n return content;\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n","export type CompilePhase =\n | \"parse-file\"\n | \"parse-script\"\n | \"analyze-script\"\n | \"transform-template\"\n | \"generate-module\"\n | \"transpile\";\n\nexport type CompileDiagnostic = {\n message: string;\n filename?: string;\n phase?: CompilePhase;\n line?: number;\n column?: number;\n index?: number;\n frame?: string;\n hint?: string;\n};\n\nexport type CompileErrorLike = Error & {\n loc?: {\n line?: number;\r\n column?: number;\r\n index?: number;\r\n start?: {\r\n line: number;\r\n column: number;\r\n index?: number;\r\n };\r\n };\n frame?: string;\n diagnostic?: CompileDiagnostic;\n phase?: CompilePhase;\n hint?: string;\n};\n\r\nfunction indexToLocation(source: string, index: number): {\r\n line: number;\r\n column: number;\r\n index: number;\r\n} {\r\n const safeIndex = Math.max(0, Math.min(index, source.length));\r\n const lines = source.slice(0, safeIndex).split(\"\\n\");\r\n return {\r\n line: lines.length,\r\n column: lines[lines.length - 1]?.length ?? 0,\r\n index: safeIndex,\r\n };\r\n}\r\n\r\nfunction createCodeFrame(\r\n source: string,\r\n line: number,\r\n column: number,\r\n contextLines = 2,\r\n): string {\r\n const lines = source.split(\"\\n\");\r\n const start = Math.max(0, line - 1 - contextLines);\r\n const end = Math.min(lines.length, line + contextLines);\r\n return lines\r\n .slice(start, end)\r\n .map((content, offset) => {\r\n const lineNumber = start + offset + 1;\r\n const prefix = `${String(lineNumber).padStart(4, \" \")} | `;\r\n if (lineNumber !== line) {\r\n return `${prefix}${content}`;\r\n }\r\n return `${prefix}${content}\\n | ${\" \".repeat(Math.max(column, 0))}^`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n\r\nexport function createCompileError(\n message: string,\n source: string,\n index: number,\n options?: {\n filename?: string;\n phase?: CompilePhase;\n hint?: string;\n },\n): CompileErrorLike {\n const loc = indexToLocation(source, index);\n const error = new Error(message) as CompileErrorLike;\n error.loc = { start: loc };\n error.frame = createCodeFrame(source, loc.line, loc.column);\n error.phase = options?.phase;\n error.hint = options?.hint;\n error.diagnostic = {\n message,\n filename: options?.filename,\n phase: options?.phase,\n line: loc.line,\n column: loc.column + 1,\n index: loc.index,\n frame: error.frame,\n hint: options?.hint,\n };\n return error;\n}\n\nexport function normalizeCompileError(\n error: unknown,\n source: string,\n filename = \"component.olova\",\n): never {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as CompileErrorLike;\n const start = compileError.loc?.start ?? compileError.loc;\n const line = start?.line;\n const column = start?.column;\n const phasePrefix = compileError.phase ? ` [${compileError.phase}]` : \"\";\n const locationSuffix =\n line === undefined || column === undefined\n ? \"\"\n : ` (${filename}:${line}:${column + 1})`;\n const normalizedMessage = compileError.message.replace(/^\\[olova\\]\\s*/, \"\");\n compileError.message = `[olova]${phasePrefix} ${normalizedMessage}${locationSuffix}`;\n if (line !== undefined && column !== undefined && !compileError.frame) {\n compileError.frame = createCodeFrame(source, line, column);\n }\n compileError.diagnostic = {\n message: normalizedMessage,\n filename,\n phase: compileError.phase,\n line,\n column: column === undefined ? undefined : column + 1,\n index: start?.index,\n frame: compileError.frame,\n hint: compileError.hint,\n };\n throw compileError;\n}\n","export type StyleBlock = {\r\n content: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nexport type ParsedOlovaFile = {\r\n script: string;\r\n template: string;\r\n styles: StyleBlock[];\r\n};\r\n\r\ntype TagMatch = {\r\n fullStart: number;\r\n openEnd: number;\r\n closeStart: number;\r\n closeEnd: number;\r\n inner: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nfunction isWhitespace(char: string): boolean {\r\n return /\\s/.test(char);\r\n}\r\n\r\nfunction skipQuoted(source: string, start: number, quote: string): number {\r\n let index = start + 1;\r\n while (index < source.length) {\r\n if (source[index] === \"\\\\\" && index + 1 < source.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n if (source[index] === quote) {\r\n return index + 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return source.length;\r\n}\r\n\r\nfunction findTagEnd(source: string, start: number): number {\r\n let index = start;\r\n while (index < source.length) {\r\n const char = source[index];\r\n if (char === '\"' || char === \"'\") {\r\n index = skipQuoted(source, index, char);\r\n continue;\r\n }\r\n\r\n if (char === \">\") {\r\n return index;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction parseAttributes(source: string): Record<string, string | true> {\r\n const attrs: Record<string, string | true> = {};\r\n const attrRegex =\r\n /([:@A-Za-z_][-A-Za-z0-9_:.@]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+)))?/g;\r\n\r\n let match: RegExpExecArray | null;\r\n while ((match = attrRegex.exec(source)) !== null) {\r\n const [, name, doubleQuoted, singleQuoted, bare] = match;\r\n const value = doubleQuoted ?? singleQuoted ?? bare ?? true;\r\n attrs[name] = value;\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\nfunction readOpeningTag(\r\n source: string,\r\n start: number,\r\n): { tag: string; openEnd: number; attrs: Record<string, string | true> } | null {\r\n if (source[start] !== \"<\") {\r\n return null;\r\n }\r\n\r\n const tagEnd = findTagEnd(source, start + 1);\r\n if (tagEnd < 0) {\r\n return null;\r\n }\r\n\r\n const raw = source.slice(start + 1, tagEnd).trim();\r\n if (!raw || raw.startsWith(\"/\") || raw.startsWith(\"!\")) {\r\n return null;\r\n }\r\n\r\n let splitIndex = 0;\r\n while (splitIndex < raw.length && !isWhitespace(raw[splitIndex]) && raw[splitIndex] !== \"/\") {\r\n splitIndex += 1;\r\n }\r\n\r\n const tag = raw.slice(0, splitIndex);\r\n const attrsSource = raw.slice(splitIndex).replace(/\\/\\s*$/, \"\").trim();\r\n return {\r\n tag,\r\n openEnd: tagEnd + 1,\r\n attrs: parseAttributes(attrsSource),\r\n };\r\n}\r\n\r\nfunction findMatchingTag(\r\n source: string,\r\n start: number,\r\n tagName: string,\r\n): TagMatch | null {\r\n const opening = readOpeningTag(source, start);\r\n if (!opening || opening.tag.toLowerCase() !== tagName.toLowerCase()) {\r\n return null;\r\n }\r\n\r\n const selfClosing = /\\/\\s*>$/.test(source.slice(start, opening.openEnd));\r\n if (selfClosing) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: opening.openEnd,\r\n closeEnd: opening.openEnd,\r\n inner: \"\",\r\n attrs: opening.attrs,\r\n };\r\n }\r\n\r\n let depth = 1;\r\n let index = opening.openEnd;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(\"<\", index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n if (source.startsWith(\"<!--\", next)) {\r\n const commentEnd = source.indexOf(\"-->\", next + 4);\r\n index = commentEnd >= 0 ? commentEnd + 3 : source.length;\r\n continue;\r\n }\r\n\r\n if (source[next + 1] === \"/\") {\r\n const closeEnd = findTagEnd(source, next + 2);\r\n if (closeEnd < 0) {\r\n break;\r\n }\r\n\r\n const closeTag = source.slice(next + 2, closeEnd).trim();\r\n if (closeTag.toLowerCase() === tagName.toLowerCase()) {\r\n depth -= 1;\r\n if (depth === 0) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: next,\r\n closeEnd: closeEnd + 1,\r\n inner: source.slice(opening.openEnd, next),\r\n attrs: opening.attrs,\r\n };\r\n }\r\n }\r\n\r\n index = closeEnd + 1;\r\n continue;\r\n }\r\n\r\n const nested = readOpeningTag(source, next);\r\n if (!nested) {\r\n index = next + 1;\r\n continue;\r\n }\r\n\r\n if (nested.tag.toLowerCase() === tagName.toLowerCase()) {\r\n const nestedSelfClosing = /\\/\\s*>$/.test(source.slice(next, nested.openEnd));\r\n if (!nestedSelfClosing) {\r\n depth += 1;\r\n }\r\n }\r\n\r\n index = nested.openEnd;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction collectTopLevelBlocks(source: string, tagName: string): TagMatch[] {\r\n const blocks: TagMatch[] = [];\r\n let index = 0;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(`<${tagName}`, index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n const previous = next > 0 ? source[next - 1] : \"\";\r\n if (previous && /[A-Za-z0-9_:-]/.test(previous)) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n const block = findMatchingTag(source, next, tagName);\r\n if (!block) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n blocks.push(block);\r\n index = block.closeEnd;\r\n }\r\n\r\n return blocks;\r\n}\r\n\r\nfunction removeRanges(source: string, ranges: Array<{ start: number; end: number }>): string {\r\n if (ranges.length === 0) {\r\n return source.trim();\r\n }\r\n\r\n const ordered = [...ranges].sort((a, b) => a.start - b.start);\r\n let cursor = 0;\r\n let output = \"\";\r\n\r\n for (const range of ordered) {\r\n output += source.slice(cursor, range.start);\r\n cursor = range.end;\r\n }\r\n\r\n output += source.slice(cursor);\r\n return output.trim();\r\n}\r\n\r\nexport function parseOlovaFile(source: string): ParsedOlovaFile {\r\n const scriptBlocks = collectTopLevelBlocks(source, \"script\");\r\n const styleBlocks = collectTopLevelBlocks(source, \"style\");\r\n\r\n const ranges = styleBlocks.map((block) => ({\r\n start: block.fullStart,\r\n end: block.closeEnd,\r\n }));\r\n\r\n for (const scriptBlock of scriptBlocks) {\r\n ranges.push({ start: scriptBlock.fullStart, end: scriptBlock.closeEnd });\r\n }\r\n\r\n return {\r\n script: scriptBlocks.map((block) => block.inner.trim()).filter(Boolean).join(\"\\n\\n\"),\r\n template: removeRanges(source, ranges),\r\n styles: styleBlocks.map((block) => ({\r\n content: block.inner.trim(),\r\n attrs: block.attrs,\r\n })),\r\n };\r\n}\r\n","import {\n type ChildNode,\n type Comment,\n type DataNode,\n type Document,\n type Element,\n} from \"domhandler\";\nimport { parseDocument } from \"htmlparser2\";\n\nexport type ASTNode = ASTElement | ASTText | ASTComment;\n\nexport interface ASTElement {\n type: \"element\";\n tag: string;\n attrs: Record<string, string | true>;\n children: ASTNode[];\n isSelfClosing: boolean;\n}\n\nexport interface ASTText {\n type: \"text\";\n content: string;\n}\n\nexport interface ASTComment {\n type: \"comment\";\n content: string;\n}\n\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nfunction normalizeNewlines(value: string): string {\n return value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction readBracedValue(\n source: string,\n start: number,\n): { value: string; end: number } {\n let index = start + 1;\n let depth = 1;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n let value = \"{\";\n\n while (index < source.length && depth > 0) {\n const char = source[index];\n const prev = source[index - 1];\n value += char;\n\n if (quote) {\n if (char === quote && prev !== \"\\\\\") {\n quote = null;\n }\n index += 1;\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n } else if (char === \"}\") {\n depth -= 1;\n }\n\n index += 1;\n }\n\n return { value, end: index };\n}\n\nfunction protectOlovaAttrExpressions(html: string): {\n html: string;\n placeholders: Map<string, string>;\n} {\n const placeholders = new Map<string, string>();\n let output = \"\";\n let index = 0;\n let count = 0;\n\n while (index < html.length) {\n const char = html[index];\n output += char;\n\n if (char !== \"=\" || html[index + 1] !== \"{\") {\n index += 1;\n continue;\n }\n\n const braced = readBracedValue(html, index + 1);\n const key = `__OLOVA_ATTR_EXPR_${count++}__`;\n placeholders.set(key, braced.value);\n output += `\"${key}\"`;\n index = braced.end;\n continue;\n }\n\n return { html: output, placeholders };\n}\n\nfunction normalizeAttrs(attribs: Record<string, string>): Record<string, string | true> {\n const output: Record<string, string | true> = {};\n\n for (const [name, value] of Object.entries(attribs)) {\n output[name] = value === \"\" ? true : value;\n }\n\n return output;\n}\n\nfunction isSelfClosingElement(node: Element): boolean {\n return VOID_TAGS.has(node.name.toLowerCase());\n}\n\nfunction toAstNode(node: ChildNode): ASTNode | null {\n if (node.type === \"text\") {\n return {\n type: \"text\",\n content: normalizeNewlines((node as DataNode).data),\n };\n }\n\n if (node.type === \"comment\") {\n return {\n type: \"comment\",\n content: normalizeNewlines((node as Comment).data),\n };\n }\n\n if (node.type === \"tag\" || node.type === \"script\" || node.type === \"style\") {\n const element = node as Element;\n return {\n type: \"element\",\n tag: element.name,\n attrs: normalizeAttrs(element.attribs ?? {}),\n children: toAstNodes(element.children ?? []),\n isSelfClosing: isSelfClosingElement(element),\n };\n }\n\n return null;\n}\n\nfunction toAstNodes(nodes: ChildNode[]): ASTNode[] {\n const output: ASTNode[] = [];\n\n for (const node of nodes) {\n const normalized = toAstNode(node);\n if (normalized) {\n output.push(normalized);\n }\n }\n\n return output;\n}\n\nexport function parseHTML(html: string): ASTNode[] {\n const protectedHtml = protectOlovaAttrExpressions(html);\n const document = parseDocument(protectedHtml.html, {\n decodeEntities: false,\n recognizeSelfClosing: true,\n lowerCaseAttributeNames: false,\n lowerCaseTags: false,\n });\n\n const rootNodes = (document as Document).children.filter((node) => {\n if (node.type === \"directive\" || node.type === \"cdata\") {\n return false;\n }\n return true;\n }) as ChildNode[];\n\n const ast = toAstNodes(rootNodes);\n const restorePlaceholders = (nodes: ASTNode[]): void => {\n for (const node of nodes) {\n if (node.type !== \"element\") {\n continue;\n }\n\n for (const [name, value] of Object.entries(node.attrs)) {\n if (typeof value !== \"string\") {\n continue;\n }\n\n const restored = protectedHtml.placeholders.get(value);\n if (restored) {\n node.attrs[name] = restored;\n }\n }\n\n restorePlaceholders(node.children);\n }\n };\n\n restorePlaceholders(ast);\n return ast;\n}\n","import { ASTNode, parseHTML } from \"./html-parser\";\r\n\r\nexport type TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n};\r\n\r\ntype BuildContext = {\r\n statements: string[];\r\n nodes: string[];\r\n localCount: number;\r\n};\r\n\r\ntype TextFragment =\r\n | { type: \"static\"; value: string }\r\n | { type: \"dynamic\"; tokenType: string; id: string };\r\n\r\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\r\n\r\nfunction splitTextFragments(text: string): TextFragment[] {\r\n const parts: TextFragment[] = [];\r\n const tokenRe = /__O_(TEXT|HTML|SLOT|COMP|IF)_([a-zA-Z0-9_]+)__/g;\r\n\r\n let lastIndex = 0;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = tokenRe.exec(text)) !== null) {\r\n if (match.index > lastIndex) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex, match.index) });\r\n }\r\n parts.push({ type: \"dynamic\", tokenType: match[1], id: match[2] });\r\n lastIndex = match.index + match[0].length;\r\n }\r\n\r\n if (lastIndex < text.length) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex) });\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nfunction isSvgContext(tag: string, inSvg: boolean): boolean {\r\n if (tag === \"foreignObject\") {\r\n return false;\r\n }\r\n\r\n return inSvg || tag === \"svg\";\r\n}\r\n\r\nfunction processNode(\r\n node: ASTNode,\r\n parentVar: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n buildCtx: BuildContext,\r\n componentNames: Set<string>,\r\n inSvg = false,\r\n) {\r\n if (node.type === \"comment\") {\r\n return;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n const parts = splitTextFragments(node.content);\r\n for (const part of parts) {\r\n if (part.type === \"static\") {\r\n if (!part.value) continue;\r\n const varName = `_t${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode(${JSON.stringify(part.value)});`,\r\n );\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n } else {\r\n const varName = `_d${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode('');`,\r\n );\r\n buildCtx.nodes.push(`'${part.id}': ${varName}`);\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (node.type === \"element\") {\r\n const tag = node.tag;\r\n const varName = `_el${buildCtx.localCount++}`;\r\n const useSvgNamespace = isSvgContext(tag, inSvg);\r\n buildCtx.statements.push(\r\n useSvgNamespace\r\n ? `const ${varName} = document.createElementNS(${JSON.stringify(SVG_NAMESPACE)}, ${JSON.stringify(tag)});`\r\n : `const ${varName} = document.createElement(${JSON.stringify(tag)});`,\r\n );\r\n\r\n for (const [attr, val] of Object.entries(node.attrs)) {\r\n if (attr.startsWith(\"data-o-on-\")) {\r\n if (typeof val === \"string\") {\r\n buildCtx.nodes.push(`'${val}': ${varName}`);\r\n }\r\n } else if (typeof val === \"string\" && val.includes(\"__O_ATTR_\")) {\r\n const match = val.match(/__O_ATTR_([a-zA-Z0-9_]+)__/);\r\n if (match) {\r\n buildCtx.nodes.push(`'${match[1]}': ${varName}`);\r\n }\r\n } else {\r\n if (val === true) {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, \"\");`,\r\n );\r\n } else {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, ${JSON.stringify(val)});`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n for (const child of node.children) {\r\n processNode(\r\n child,\r\n varName,\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n useSvgNamespace,\r\n );\r\n }\r\n\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n}\r\n\r\nexport function generateBuildFunction(\r\n html: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n componentNames: Set<string>,\r\n): string {\r\n const ast = parseHTML(html);\r\n\r\n const buildCtx: BuildContext = {\r\n statements: [],\r\n nodes: [],\r\n localCount: 0,\r\n };\r\n\r\n buildCtx.statements.push(\"const _f = document.createDocumentFragment();\");\r\n\r\n for (const child of ast) {\r\n processNode(\r\n child,\r\n \"_f\",\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n );\r\n }\r\n\r\n return `function() {\r\n ${buildCtx.statements.join(\"\\n \")}\r\n return { fragment: _f, nodes: { ${buildCtx.nodes.join(\", \")} } };\r\n }`;\r\n}\r\n","import { parse } from \"@babel/parser\";\r\nimport generatorModule from \"@babel/generator\";\r\nimport traverseModule from \"@babel/traverse\";\r\nimport type { NodePath } from \"@babel/traverse\";\r\nimport * as t from \"@babel/types\";\r\nimport ts from \"typescript\";\r\nimport { collectCss, createScopeAttr, hashScopeSeed } from \"./css-scope\";\r\nimport {\n type CompilePhase,\n createCompileError,\n normalizeCompileError,\n} from \"./diagnostics\";\nimport {\r\n parseOlovaFile,\r\n type ParsedOlovaFile,\r\n} from \"./parse\";\r\nimport { parseHTML, type ASTElement, type ASTNode } from \"./html-parser\";\r\nimport { generateBuildFunction } from \"./dom-generator\";\r\n\r\nconst generate =\r\n (generatorModule as unknown as { default?: typeof generatorModule })\r\n .default ?? generatorModule;\r\nconst traverse =\r\n (traverseModule as unknown as { default?: typeof traverseModule }).default ??\r\n traverseModule;\r\n\r\nconst CORE_KNOWN_IMPORTS = new Set([\r\n \"Signal\",\r\n \"computed\",\r\n \"createApp\",\r\n \"createErrorBoundary\",\r\n \"dangerouslySetHtml\",\r\n \"defineComponent\",\r\n \"derived\",\r\n \"effect\",\r\n \"getContext\",\r\n \"global\",\r\n \"hasContext\",\r\n \"mount\",\r\n \"onCleanup\",\r\n \"onMount\",\r\n \"replaceComponent\",\r\n \"setContext\",\r\n \"state\",\r\n \"Suspense\",\r\n]);\r\n\r\ntype CompileResult = {\r\n code: string;\r\n css?: string;\r\n map?: unknown;\r\n};\r\n\r\ntype TextBinding = { id: string; expr: string };\r\ntype HtmlBinding = { id: string; expr: string };\r\ntype AttrBinding = { id: string; attr: string; expr: string };\r\ntype EventBinding = { id: string; event: string; expr: string };\r\ntype SlotBinding = { id: string; name: string };\r\ntype SlotFactoryDef = {\r\n varName: string;\r\n name: string;\r\n descriptor: TemplateTransformResult;\r\n};\r\ntype ComponentBinding = {\r\n id: string;\r\n component: string;\r\n propsExpr: string;\r\n slotFactories: SlotFactoryDef[];\r\n};\r\ntype IfBinding = {\r\n id: string;\r\n expr: string;\r\n trueBranch: TemplateTransformResult;\r\n falseBranch?: TemplateTransformResult;\r\n};\r\n\r\ntype TemplateTransformResult = {\r\n html: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings: IfBinding[];\r\n buildFnStr?: string;\r\n};\r\n\r\ntype TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n if: number;\r\n};\r\n\r\nfunction escapeTemplate(source: string): string {\r\n return source.replace(/\\\\/g, \"\\\\\\\\\").replace(/`/g, \"\\\\`\");\r\n}\r\n\r\nfunction emitDevWarnings(warnings: Set<string>): void {\r\n for (const warning of warnings) {\r\n console.warn(warning);\r\n }\r\n}\r\n\r\nfunction parseModule(code: string): t.File {\n return parse(code, {\n sourceType: \"module\",\r\n plugins: [\"typescript\", \"jsx\"],\r\n });\n}\n\nfunction runCompilePhase<T>(\n phase: CompilePhase,\n fn: () => T,\n): T {\n try {\n return fn();\n } catch (error) {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as Error & {\n phase?: CompilePhase;\n };\n if (!compileError.phase) {\n compileError.phase = phase;\n }\n throw compileError;\n }\n}\n\r\nfunction transpileTypeScript(code: string, filename = \"component.ts\"): CompileResult {\r\n const result = ts.transpileModule(code, {\r\n fileName: filename,\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2022,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: ts.JsxEmit.Preserve,\r\n importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove,\r\n verbatimModuleSyntax: false,\r\n sourceMap: true,\r\n inlineSources: true,\r\n },\r\n });\r\n\r\n return {\r\n code: result.outputText.trim(),\r\n map: result.sourceMapText ? JSON.parse(result.sourceMapText) : null,\r\n };\r\n}\r\n\r\nfunction compileModuleScript(script: string, filename = \"module.olova.ts\"): CompileResult {\n return runCompilePhase(\"analyze-script\", () => {\n const scriptInfo = collectScriptInfo(script);\n return runCompilePhase(\"transpile\", () =>\n transpileTypeScript(\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\n filename,\n ),\n );\n });\n}\n\r\nfunction isModuleOnlyScript(script: string): boolean {\r\n if (!script.trim()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction isStateInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n ((t.isIdentifier(node.callee) && node.callee.name === \"state\") ||\r\n (t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n node.callee.object.name === \"__olovaGlobal\" &&\r\n t.isIdentifier(node.callee.property) &&\r\n (node.callee.property.name === \"state\" ||\r\n node.callee.property.name === \"get\")))\r\n );\r\n}\r\n\r\nfunction isComputedInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n t.isIdentifier(node.callee) &&\r\n (node.callee.name === \"computed\" || node.callee.name === \"derived\")\r\n );\r\n}\r\n\r\nfunction appendHmrStateKey(\r\n node: t.Node | null | undefined,\r\n key: string,\r\n): void {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n if (t.isCallExpression(node) && t.isIdentifier(node.callee) && node.callee.name === \"state\") {\r\n const existingKey = node.arguments[1];\r\n if (!existingKey || !t.isStringLiteral(existingKey)) {\r\n node.arguments = [node.arguments[0] ?? t.identifier(\"undefined\"), t.stringLiteral(key)];\r\n }\r\n return;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n appendHmrStateKey(node.consequent, `${key}:then`);\r\n appendHmrStateKey(node.alternate, `${key}:else`);\r\n return;\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n appendHmrStateKey(node.left, `${key}:left`);\r\n appendHmrStateKey(node.right, `${key}:right`);\r\n }\r\n}\r\n\r\nfunction containsStateInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsStateInit(node.consequent) || containsStateInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsStateInit(node.left) || containsStateInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction containsSignalInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node) || isComputedInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsSignalInit(node.consequent) || containsSignalInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsSignalInit(node.left) || containsSignalInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isGlobalStateCall(node: t.CallExpression): boolean {\r\n return (\r\n t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n (node.callee.object.name === \"global\" ||\r\n node.callee.object.name === \"__olovaGlobal\") &&\r\n t.isIdentifier(node.callee.property) &&\r\n node.callee.property.name === \"state\"\r\n );\r\n}\r\n\r\nfunction shouldSkipIdentifierTransform(path: NodePath<t.Identifier>): boolean {\r\n if (\r\n path.parentPath?.isVariableDeclarator() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isAssignmentExpression() &&\r\n path.parentPath.node.left === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (path.parentPath?.isUpdateExpression()) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isCallExpression() &&\r\n t.isIdentifier(path.parentPath.node.callee) &&\r\n path.parentPath.node.callee.name === \"setContext\" &&\r\n path.parentPath.node.arguments.includes(path.node as t.Expression)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.property === path.node &&\r\n !path.parentPath.node.computed\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.object === path.node &&\r\n t.isIdentifier(path.parentPath.node.property) &&\r\n (path.parentPath.node.property.name === \"value\" ||\r\n path.parentPath.node.property.name === \"notify\")\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isImportSpecifier() ||\r\n path.parentPath?.isExportSpecifier()\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isObjectProperty() &&\r\n path.parentPath.node.key === path.node &&\r\n !path.parentPath.node.computed &&\r\n !(path.parentPath.node as t.ObjectProperty).shorthand\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isFunctionDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isClassDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction addNestedMutationNotify(ast: t.File, stateNames: Set<string>): void {\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n const left = path.node.left;\r\n if (!t.isMemberExpression(left)) {\r\n return;\r\n }\r\n\r\n let root: t.MemberExpression = left;\r\n while (t.isMemberExpression(root.object)) {\r\n root = root.object as t.MemberExpression;\r\n }\r\n\r\n if (!t.isIdentifier(root.object)) {\r\n return;\r\n }\r\n\r\n if (!t.isIdentifier(root.property) || root.property.name !== \"value\") {\r\n return;\r\n }\r\n\r\n const stateName = root.object.name;\r\n if (!stateNames.has(stateName)) {\r\n return;\r\n }\r\n\r\n if (left === root) {\r\n return;\r\n }\r\n\r\n if (path.parentPath?.isSequenceExpression()) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.sequenceExpression([\r\n path.node,\r\n t.callExpression(\r\n t.memberExpression(t.identifier(stateName), t.identifier(\"notify\")),\r\n [],\r\n ),\r\n ]),\r\n );\r\n path.skip();\r\n },\r\n });\r\n}\r\n\r\nfunction collectScriptInfo(script: string): {\r\n importsCode: string;\r\n scriptBodyCode: string;\r\n stateNames: Set<string>;\r\n allSignalNames: Set<string>;\r\n componentNames: Set<string>;\r\n jsxFunctionNames: Set<string>;\r\n} {\r\n const ast = parseModule(script || \"\");\r\n const stateNames = new Set<string>();\r\n const allSignalNames = new Set<string>();\r\n const componentNames = new Set<string>();\r\n const jsxFunctionNames = new Set<string>();\r\n let needsGlobalRuntime = false;\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n componentNames.add(specifier.local.name);\r\n }\r\n }\r\n\r\n const rewrittenBody: t.Statement[] = [];\r\n for (const node of ast.program.body) {\r\n if (\r\n t.isImportDeclaration(node) &&\r\n t.isStringLiteral(node.source) &&\r\n (node.source.value === \"olova/global\" || node.source.value === \"olova/core\")\r\n ) {\r\n if (node.source.value === \"olova/global\") {\r\n needsGlobalRuntime = true;\r\n const declarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n throw new Error(\r\n \"[olova] Use named imports with 'olova/global' (e.g. import { user } from 'olova/global').\",\r\n );\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n declarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (declarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", declarators));\r\n }\r\n continue;\r\n }\r\n\r\n const keptSpecifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n const globalDeclarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (CORE_KNOWN_IMPORTS.has(imported)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n globalDeclarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (keptSpecifiers.length > 0) {\r\n rewrittenBody.push(\r\n t.importDeclaration(keptSpecifiers, t.stringLiteral(\"olova/core\")),\r\n );\r\n }\r\n\r\n if (globalDeclarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", globalDeclarators));\r\n }\r\n\r\n continue;\r\n }\r\n\r\n rewrittenBody.push(node);\r\n }\r\n ast.program.body = rewrittenBody;\r\n\r\n traverse(ast, {\r\n CallExpression(path: NodePath<t.CallExpression>) {\r\n if (!isGlobalStateCall(path.node)) {\r\n return;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n path.node.callee = t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"state\"),\r\n );\r\n\r\n if (\r\n path.parentPath &&\r\n path.parentPath.isVariableDeclarator() &&\r\n t.isIdentifier(path.parentPath.node.id)\r\n ) {\r\n const firstArg = path.node.arguments[0];\r\n const alreadyNamed =\r\n !!firstArg &&\r\n t.isStringLiteral(firstArg as t.Expression) &&\r\n (firstArg as t.StringLiteral).value.length > 0;\r\n\r\n if (!alreadyNamed) {\r\n path.node.arguments = [\r\n t.stringLiteral(path.parentPath.node.id.name),\r\n ...path.node.arguments,\r\n ];\r\n }\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (!t.isIdentifier(path.node.id)) {\r\n return;\r\n }\r\n\r\n if (containsStateInit(path.node.init)) {\r\n stateNames.add(path.node.id.name);\r\n appendHmrStateKey(path.node.init, path.node.id.name);\r\n }\r\n\r\n if (containsSignalInit(path.node.init)) {\r\n allSignalNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsSignalInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const nodeContainsJsx = (node: t.Node | null | undefined): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(node).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n traverse(ast, {\r\n FunctionDeclaration(path: NodePath<t.FunctionDeclaration>) {\r\n if (path.node.id && nodeContainsJsx(path.node.body)) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (\r\n t.isIdentifier(path.node.id) &&\r\n nodeContainsJsx(path.node.init)\r\n ) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n JSXElement(path: NodePath<t.JSXElement>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n JSXFragment(path: NodePath<t.JSXFragment>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n });\r\n\r\n if (needsGlobalRuntime) {\r\n ast.program.body.unshift(\r\n t.importDeclaration(\r\n [\r\n t.importSpecifier(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"global\"),\r\n ),\r\n ],\r\n t.stringLiteral(\"olova/global\"),\r\n ),\r\n );\r\n }\r\n\r\n const importNodes = ast.program.body.filter(\r\n (node): node is t.ImportDeclaration => t.isImportDeclaration(node),\r\n );\r\n const bodyNodes = ast.program.body.filter(\r\n (node) => !t.isImportDeclaration(node),\r\n );\r\n\r\n const importsCode = importNodes.map((node) => generate(node).code).join(\"\\n\");\r\n const scriptBodyCode = bodyNodes\r\n .map((node) => generate(node).code)\r\n .join(\"\\n\");\r\n\r\n return {\r\n importsCode,\r\n scriptBodyCode,\r\n stateNames,\r\n allSignalNames,\r\n componentNames,\r\n jsxFunctionNames,\r\n };\r\n}\r\n\r\ntype TransformedExpression = {\r\n code: string;\r\n containsJsx: boolean;\r\n};\r\n\r\nfunction transformExpression(\n expr: string,\n stateNames: Set<string>,\n allSignalNames: Set<string>,\n jsxFunctionNames: Set<string> = new Set<string>(),\r\n scopeId?: string,\r\n): TransformedExpression {\r\n const ast = parseModule(`(${expr})`);\r\n let containsJsx = false;\r\n const jsxScopeAttr = createScopeAttr(scopeId);\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const toStringCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaToString\"), [input]);\r\n const escapeCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaEscape\"), [input]);\r\n\r\n const expressionContainsJsx = (input: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n const expressionProducesHtml = (input: t.Node | null | undefined): boolean => {\r\n if (!input) {\r\n return false;\r\n }\r\n\r\n if (expressionContainsJsx(input)) {\r\n return true;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n CallExpression(path) {\r\n if (\r\n t.isIdentifier(path.node.callee) &&\r\n jsxFunctionNames.has(path.node.callee.name)\r\n ) {\r\n found = true;\r\n path.stop();\r\n return;\r\n }\r\n\r\n if (\r\n t.isMemberExpression(path.node.callee) &&\r\n t.isIdentifier(path.node.callee.property) &&\r\n (path.node.callee.property.name === \"map\" ||\r\n path.node.callee.property.name === \"flatMap\")\r\n ) {\r\n const [firstArg] = path.node.arguments;\r\n if (\r\n (t.isIdentifier(firstArg) && jsxFunctionNames.has(firstArg.name)) ||\r\n nodeContainsRenderableFunction(firstArg, jsxFunctionNames)\r\n ) {\r\n found = true;\r\n path.stop();\r\n }\r\n }\r\n },\r\n });\r\n\r\n return found;\r\n };\r\n\r\n const nodeContainsRenderableFunction = (\r\n node: t.Node | null | undefined,\r\n knownJsxFunctions: Set<string>,\r\n ): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\r\n return (\r\n expressionContainsJsx(node.body) || expressionProducesHtml(node.body)\r\n );\r\n }\r\n\r\n if (t.isIdentifier(node)) {\r\n return knownJsxFunctions.has(node.name);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const concatExpressions = (parts: t.Expression[]): t.Expression => {\r\n if (parts.length === 0) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return parts\r\n .slice(1)\r\n .reduce<t.Expression>(\r\n (acc, current) => t.binaryExpression(\"+\", acc, current),\r\n parts[0],\r\n );\r\n };\r\n\r\n const jsxNameToString = (\r\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\r\n ): string => {\r\n if (t.isJSXIdentifier(name)) {\r\n return name.name;\r\n }\r\n\r\n if (t.isJSXNamespacedName(name)) {\r\n return `${name.namespace.name}:${name.name.name}`;\r\n }\r\n\r\n const walkMember = (\r\n node: t.JSXIdentifier | t.JSXMemberExpression,\r\n ): string => {\r\n if (t.isJSXIdentifier(node)) {\r\n return node.name;\r\n }\r\n\r\n return `${walkMember(node.object)}.${node.property.name}`;\r\n };\r\n\r\n return walkMember(name);\r\n };\r\n\r\n const transformEmbeddedJsxExpression = (\r\n input: t.Expression,\r\n ): { expression: t.Expression; containsJsx: boolean } => {\r\n const wrapped = parseModule(`(${generate(input).code})`);\r\n let containsNestedJsx = false;\r\n\r\n traverse(wrapped, {\r\n JSXElement(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = wrapped.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { expression: input, containsJsx: containsNestedJsx };\r\n }\r\n\r\n return {\r\n expression: statement.expression,\r\n containsJsx: containsNestedJsx,\r\n };\r\n };\r\n\r\n const jsxAttrToExpression = (\r\n attr: t.JSXAttribute | t.JSXSpreadAttribute,\r\n ): t.Expression => {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n attr.argument as t.Expression,\r\n );\r\n return t.callExpression(t.identifier(\"__olovaSpreadAttrs\"), [\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const name = jsxNameToString(attr.name);\r\n if (name === \"key\") {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const normalizedName = name === \"className\" ? \"class\" : name;\r\n const eventMatch = name.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (!attr.value) {\r\n return t.stringLiteral(` ${normalizedName}`);\r\n }\r\n\r\n if (t.isStringLiteral(attr.value)) {\r\n return t.stringLiteral(` ${normalizedName}=\"${attr.value.value}\"`);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(attr.value)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n (attr.value.expression as t.Expression) ?? t.stringLiteral(\"\"),\r\n );\r\n\r\n if (eventMatch) {\r\n return t.callExpression(t.identifier(\"__olovaRegisterJsxEvent\"), [\r\n t.stringLiteral(eventMatch[1].toLowerCase()),\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const valueExpression =\r\n normalizedName === \"class\"\r\n ? t.callExpression(t.identifier(\"__olovaNormalizeClassValue\"), [\r\n transformed.expression,\r\n ])\r\n : transformed.expression;\r\n\r\n return concatExpressions([\r\n t.stringLiteral(` ${normalizedName}=\"`),\r\n escapeCall(valueExpression),\r\n t.stringLiteral('\"'),\r\n ]);\r\n }\r\n\r\n return t.stringLiteral(\"\");\r\n };\r\n\r\n const jsxChildToExpression = (\r\n child:\r\n | t.JSXText\r\n | t.JSXExpressionContainer\r\n | t.JSXElement\r\n | t.JSXFragment\r\n | t.JSXSpreadChild,\r\n ): t.Expression => {\r\n if (t.isJSXText(child)) {\r\n return t.stringLiteral(child.value);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(child)) {\r\n if (t.isJSXEmptyExpression(child.expression)) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const rawExpression = child.expression as t.Expression;\r\n const transformed = transformEmbeddedJsxExpression(rawExpression);\r\n return transformed.containsJsx || expressionProducesHtml(rawExpression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXSpreadChild(child)) {\r\n const transformed = transformEmbeddedJsxExpression(child.expression);\r\n return transformed.containsJsx || expressionProducesHtml(child.expression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXElement(child)) {\r\n return jsxElementToExpression(child);\r\n }\r\n\r\n return jsxFragmentToExpression(child);\r\n };\r\n\r\n const jsxFragmentToExpression = (fragment: t.JSXFragment): t.Expression => {\r\n const parts = fragment.children.map((child) => jsxChildToExpression(child));\r\n return concatExpressions(parts);\r\n };\r\n\r\n const jsxElementToExpression = (element: t.JSXElement): t.Expression => {\r\n const opening = element.openingElement;\r\n const tag = jsxNameToString(opening.name);\r\n\r\n if (tag === \"For\") {\r\n let eachExpr: t.Expression = t.arrayExpression([]);\r\n for (const attr of opening.attributes) {\r\n if (\r\n t.isJSXAttribute(attr) &&\r\n jsxNameToString(attr.name) === \"each\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n eachExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childRenderer = element.children.find(\r\n (child): child is t.JSXExpressionContainer =>\r\n t.isJSXExpressionContainer(child) &&\r\n !t.isJSXEmptyExpression(child.expression),\r\n );\r\n if (!childRenderer) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return t.callExpression(t.identifier(\"__olovaFor\"), [\r\n eachExpr,\r\n transformEmbeddedJsxExpression(\r\n childRenderer.expression as t.Expression,\r\n ).expression,\r\n ]);\r\n }\r\n\r\n if (tag === \"Show\") {\r\n let whenExpr: t.Expression = t.booleanLiteral(false);\r\n let fallbackExpr: t.Expression = t.stringLiteral(\"\");\r\n for (const attr of opening.attributes) {\r\n if (!t.isJSXAttribute(attr)) {\r\n continue;\r\n }\r\n\r\n const attrName = jsxNameToString(attr.name);\r\n if (\r\n attrName === \"when\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n whenExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n\r\n if (\r\n attrName === \"fallback\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n fallbackExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n return t.callExpression(t.identifier(\"__olovaShow\"), [\r\n whenExpr,\r\n t.arrowFunctionExpression(\r\n [t.identifier(\"__value\")],\r\n childExpr,\r\n ),\r\n fallbackExpr,\r\n ]);\r\n }\r\n\r\n const attrExpr = concatExpressions(\r\n [\r\n ...(jsxScopeAttr ? [t.stringLiteral(` ${jsxScopeAttr}`)] : []),\r\n ...opening.attributes.map((attr) => jsxAttrToExpression(attr)),\r\n ],\r\n );\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n if (opening.selfClosing) {\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\"/>\"),\r\n ]);\r\n }\r\n\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\">\"),\r\n childExpr,\r\n t.stringLiteral(`</${tag}>`),\r\n ]);\r\n };\r\n\r\n traverse(ast, {\r\n JSXElement(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = ast.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { code: expr.trim(), containsJsx };\r\n }\r\n\r\n containsJsx = containsJsx || expressionProducesHtml(statement.expression);\r\n\n return { code: generate(statement.expression).code, containsJsx };\n}\n\nfunction parseExpressionNode(expr: string): t.Expression | null {\n try {\n const ast = parseModule(`(${expr})`);\n const statement = ast.program.body[0];\n return statement && t.isExpressionStatement(statement)\n ? statement.expression\n : null;\n } catch {\n return null;\n }\n}\n\nfunction isDirectEventHandlerExpression(node: t.Expression | null): boolean {\n return !!(\n node &&\n (t.isIdentifier(node) ||\n t.isMemberExpression(node) ||\n t.isOptionalMemberExpression(node) ||\n t.isArrowFunctionExpression(node) ||\n t.isFunctionExpression(node))\n );\n}\n\nfunction transformEventHandlerExpression(\n expr: string,\n stateNames: Set<string>,\n allSignalNames: Set<string>,\n jsxFunctionNames: Set<string>,\n): string {\n const expressionNode = parseExpressionNode(expr);\n const transformed = transformExpression(\n expr,\n stateNames,\n allSignalNames,\n jsxFunctionNames,\n ).code;\n\n if (isDirectEventHandlerExpression(expressionNode)) {\n return transformed;\n }\n\n return `($event) => (${transformed})`;\n}\n\r\nfunction jsxToTemplateHtml(node: t.Node): string {\r\n if (t.isJSXElement(node)) {\r\n const opening = node.openingElement;\r\n let tag = \"\";\r\n if (t.isJSXIdentifier(opening.name)) {\r\n tag = opening.name.name;\r\n } else if (t.isJSXMemberExpression(opening.name)) {\r\n const walk = (n: t.JSXIdentifier | t.JSXMemberExpression): string =>\r\n t.isJSXIdentifier(n) ? n.name : `${walk(n.object)}.${n.property.name}`;\r\n tag = walk(opening.name);\r\n } else if (t.isJSXNamespacedName(opening.name)) {\r\n tag = `${opening.name.namespace.name}:${opening.name.name.name}`;\r\n }\r\n\r\n let attrsStr = \"\";\r\n for (const attr of opening.attributes) {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n attrsStr += ` {...${generate(attr.argument).code}}`;\r\n } else {\r\n let attrName = \"\";\r\n if (t.isJSXIdentifier(attr.name)) attrName = attr.name.name;\r\n else attrName = `${attr.name.namespace.name}:${attr.name.name.name}`;\r\n\r\n if (!attr.value) attrsStr += ` ${attrName}`;\r\n else if (t.isStringLiteral(attr.value))\r\n attrsStr += ` ${attrName}=\"${attr.value.value}\"`;\r\n else if (t.isJSXExpressionContainer(attr.value)) {\r\n if (!t.isJSXEmptyExpression(attr.value.expression)) {\r\n attrsStr += ` ${attrName}={${generate(attr.value.expression).code}}`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const childrenStr = node.children.map(jsxToTemplateHtml).join(\"\");\r\n if (opening.selfClosing) {\r\n return `<${tag}${attrsStr} />`;\r\n }\r\n return `<${tag}${attrsStr}>${childrenStr}</${tag}>`;\r\n }\r\n if (t.isJSXText(node)) {\r\n return node.value;\r\n }\r\n if (t.isJSXExpressionContainer(node)) {\r\n if (t.isJSXEmptyExpression(node.expression)) return \"\";\r\n return `{${generate(node.expression).code}}`;\r\n }\r\n if (t.isJSXFragment(node)) {\r\n return node.children.map(jsxToTemplateHtml).join(\"\");\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction replaceTemplateExpressions(\r\n input: string,\r\n replacer: (expression: string) => string,\r\n): string {\r\n let output = \"\";\r\n let index = 0;\r\n let inTag = false;\r\n let tagQuote: \"'\" | '\"' | \"`\" | null = null;\r\n let tagBraceDepth = 0;\r\n\r\n while (index < input.length) {\r\n const char = input[index];\r\n const prev = index > 0 ? input[index - 1] : \"\";\r\n\r\n if (inTag) {\r\n output += char;\r\n\r\n if (tagQuote) {\r\n if (char === tagQuote && prev !== \"\\\\\") {\r\n tagQuote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n tagQuote = char;\r\n } else if (char === \"{\") {\r\n tagBraceDepth += 1;\r\n } else if (char === \"}\" && tagBraceDepth > 0) {\r\n tagBraceDepth -= 1;\r\n } else if (char === \">\" && tagBraceDepth === 0) {\r\n inTag = false;\r\n }\r\n\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"<\") {\r\n inTag = true;\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char !== \"{\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (prev === \"$\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n let depth = 1;\r\n let cursor = index + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, index);\r\n }\r\n\r\n const expression = input.slice(index + 1, cursor - 1);\r\n output += replacer(expression);\r\n index = cursor;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseProps(\r\n attrSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n let index = 0;\r\n\r\n const skipWhitespace = () => {\r\n while (index < attrSource.length && /\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n };\r\n\r\n const readValue = (): string => {\r\n const start = index;\r\n const first = attrSource[index];\r\n\r\n if (first === '\"' || first === \"'\") {\r\n index += 1;\r\n while (index < attrSource.length) {\r\n const char = attrSource[index];\r\n if (char === \"\\\\\" && index + 1 < attrSource.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n index += 1;\r\n if (char === first) {\r\n break;\r\n }\r\n }\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n if (first === \"{\") {\r\n let depth = 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n index += 1;\r\n\r\n while (index < attrSource.length && depth > 0) {\r\n const char = attrSource[index];\r\n const prev = attrSource[index - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n while (index < attrSource.length && !/\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n };\r\n\r\n while (index < attrSource.length) {\r\n skipWhitespace();\r\n if (index >= attrSource.length) {\r\n break;\r\n }\r\n\r\n const keyStart = index;\r\n while (\r\n index < attrSource.length &&\r\n !/\\s/.test(attrSource[index]) &&\r\n attrSource[index] !== \"=\"\r\n ) {\r\n index += 1;\r\n }\r\n\r\n const key = attrSource.slice(keyStart, index);\r\n if (!key) {\r\n index += 1;\r\n continue;\r\n }\r\n\r\n skipWhitespace();\r\n let rawValue: string | undefined;\r\n if (attrSource[index] === \"=\") {\r\n index += 1;\r\n skipWhitespace();\r\n if (index < attrSource.length) {\r\n rawValue = readValue();\r\n }\r\n }\r\n\r\n if (key === \"slot\") {\r\n continue;\r\n }\r\n\r\n if (!rawValue) {\r\n props.push(`${JSON.stringify(key)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n props.push(\r\n `${JSON.stringify(key)}: (${transformExpression(expr, stateNames, allSignalNames).code})`,\r\n );\r\n continue;\r\n }\r\n\r\n const quote = rawValue[0];\r\n const literal = rawValue.slice(1, -1);\r\n if (quote === '\"' || quote === \"'\") {\r\n props.push(`${JSON.stringify(key)}: ${JSON.stringify(literal)}`);\r\n }\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction parsePropsFromAttrs(\r\n attrs: Record<string, string | true>,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n\r\n for (const [key, rawValue] of Object.entries(attrs)) {\r\n if (key === \"slot\" || key === \"key\") {\r\n continue;\r\n }\r\n\r\n const propName = key === \"className\" ? \"class\" : key;\r\n\r\n if (rawValue === true) {\r\n props.push(`${JSON.stringify(propName)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const valueExpr = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ).code;\r\n props.push(\r\n `${JSON.stringify(propName)}: (${propName === \"class\" ? `__olovaNormalizeClassValue(${valueExpr})` : valueExpr})`,\r\n );\r\n continue;\r\n }\r\n\r\n props.push(`${JSON.stringify(propName)}: ${JSON.stringify(rawValue)}`);\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction findMatchingComponentClose(\r\n source: string,\r\n name: string,\r\n afterStartTag: number,\r\n): { closeStart: number; closeEnd: number } | null {\r\n const tagRe = new RegExp(`<\\\\/?${name}\\\\b[^>]*>`, \"g\");\r\n tagRe.lastIndex = afterStartTag;\r\n\r\n let depth = 0;\r\n let match = tagRe.exec(source);\r\n while (match) {\r\n const rawTag = match[0];\r\n const isClose = rawTag.startsWith(\"</\");\r\n const selfClosing = /\\/>\\s*$/.test(rawTag);\r\n\r\n if (isClose) {\r\n if (depth === 0) {\r\n return {\r\n closeStart: match.index,\r\n closeEnd: match.index + rawTag.length,\r\n };\r\n }\r\n\r\n depth -= 1;\r\n } else if (!selfClosing) {\r\n depth += 1;\r\n }\r\n\r\n match = tagRe.exec(source);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction extractNamedSlotTemplates(\r\n childrenSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n): Map<string, TemplateTransformResult> {\r\n const slots = new Map<string, TemplateTransformResult>();\r\n const slotTemplateRe =\r\n /<template\\s+slot=(\"([^\"]+)\"|'([^']+)')\\s*>([\\s\\S]*?)<\\/template>/g;\r\n\r\n let remainder = childrenSource;\r\n let match = slotTemplateRe.exec(childrenSource);\r\n while (match) {\r\n const full = match[0];\r\n const name = match[2] || match[3] || \"default\";\r\n const body = match[4] ?? \"\";\r\n slots.set(\r\n name,\r\n transformTemplate(\r\n body,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n remainder = remainder.replace(full, \"\");\r\n match = slotTemplateRe.exec(childrenSource);\r\n }\r\n\r\n if (remainder.trim()) {\r\n slots.set(\r\n \"default\",\r\n transformTemplate(\r\n remainder,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n }\r\n\r\n return slots;\r\n}\r\n\r\nfunction transformTemplate(\r\n template: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n scopeId?: string,\r\n devWarnings?: Set<string>,\r\n filename = \"component.olova\",\r\n): TemplateTransformResult {\r\n let html = template;\r\n const textBindings: TextBinding[] = [];\r\n const htmlBindings: HtmlBinding[] = [];\r\n const attrBindings: AttrBinding[] = [];\r\n const eventBindings: EventBinding[] = [];\r\n const slotBindings: SlotBinding[] = [];\r\n const componentBindings: ComponentBinding[] = [];\r\n const ifBindings: IfBinding[] = [];\r\n\r\n // PASS 1: Extract JSX conditionals BEFORE slot/event/attr regex passes\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n try {\r\n const ast = parseModule(`(${expr})`);\r\n const exprNode = ast.program.body[0];\r\n if (t.isExpressionStatement(exprNode)) {\r\n const node = exprNode.expression;\r\n const containsJsxNode = (n: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(n).code})`), {\r\n JSXElement() { found = true; },\r\n JSXFragment() { found = true; },\r\n });\r\n return found;\r\n };\r\n\r\n if (t.isLogicalExpression(node) && node.operator === \"&&\") {\r\n if (containsJsxNode(node.right)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.left).code;\r\n const trueBranchHtml = jsxToTemplateHtml(node.right);\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n } else if (t.isConditionalExpression(node)) {\r\n if (containsJsxNode(node.consequent) || containsJsxNode(node.alternate)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.test).code;\r\n const trueBranchHtml = containsJsxNode(node.consequent)\r\n ? jsxToTemplateHtml(node.consequent)\r\n : `{${generate(node.consequent).code}}`;\r\n const falseBranchHtml = containsJsxNode(node.alternate)\r\n ? jsxToTemplateHtml(node.alternate)\r\n : `{${generate(node.alternate).code}}`;\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n falseBranch: transformTemplate(\r\n falseBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n }\r\n }\r\n } catch {\r\n // ignore parse errors\r\n }\r\n\r\n return `{${expr}}`;\r\n });\r\n\r\n const rawExpressions: Array<{ id: string; expression: string }> = [];\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n const id = `raw_${rawExpressions.length}`;\r\n rawExpressions.push({ id, expression: expr });\r\n return `__O_RAW_EXPR_${id}__`;\r\n });\r\n\r\n const renderTextContent = (content: string): string => {\r\n return content.replace(\r\n /__O_RAW_EXPR_([a-zA-Z0-9_]+)__/g,\r\n (_full, exprId: string) => {\r\n const found = rawExpressions.find((entry) => entry.id === exprId);\r\n const expr = found ? found.expression : \"\";\r\n const transformed = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n if (transformed.containsJsx) {\r\n const id = `h${counters.text++}`;\r\n htmlBindings.push({\r\n id,\r\n expr: `__olovaDangerouslySetHtml(${transformed.code})`,\r\n });\r\n return `__O_HTML_${id}__`;\r\n }\r\n\r\n const id = `t${counters.text++}`;\r\n textBindings.push({ id, expr: transformed.code });\r\n return `__O_TEXT_${id}__`;\r\n },\r\n );\r\n };\r\n\r\n const renderAttrs = (element: ASTElement): string => {\r\n let output = \"\";\r\n const scopeAttr = createScopeAttr(scopeId);\r\n\r\n if (scopeAttr) {\r\n output += ` ${scopeAttr}`;\r\n }\r\n\r\n for (const [attrName, rawValue] of Object.entries(element.attrs)) {\r\n if (attrName === \"key\") {\r\n continue;\r\n }\r\n\r\n const normalizedAttrName = attrName === \"className\" ? \"class\" : attrName;\r\n const lowerAttrName = normalizedAttrName.toLowerCase();\r\n if (rawValue === true) {\r\n output += ` ${normalizedAttrName}`;\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const eventMatch = normalizedAttrName.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (eventMatch) {\n const id = `e${counters.event++}`;\n const event = eventMatch[1].toLowerCase();\n eventBindings.push({\n id,\n event,\n expr: transformEventHandlerExpression(\n expr,\n stateNames,\n allSignalNames,\n jsxFunctionNames,\n ),\n });\n output += ` data-o-on-${event}=\"${id}\"`;\n continue;\n }\n\r\n const id = `a${counters.attr++}`;\r\n attrBindings.push({\r\n id,\r\n attr: normalizedAttrName,\r\n expr:\r\n normalizedAttrName === \"class\"\r\n ? `__olovaNormalizeClassValue(${transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code})`\r\n : transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code,\r\n });\r\n output += ` ${normalizedAttrName}=\"__O_ATTR_${id}__\"`;\r\n continue;\r\n }\r\n\r\n if (devWarnings && lowerAttrName.startsWith(\"on\")) {\r\n devWarnings.add(\r\n `[olova] Avoid static inline event attributes like \"${normalizedAttrName}\" in templates (${filename}). Prefer ${normalizedAttrName}={handler}.`,\r\n );\r\n }\r\n\r\n if (\r\n devWarnings &&\r\n (lowerAttrName === \"href\" || lowerAttrName === \"src\" || lowerAttrName === \"xlink:href\") &&\r\n /^\\s*javascript:/i.test(rawValue)\r\n ) {\r\n devWarnings.add(\r\n `[olova] Suspicious javascript: URL found in static \"${normalizedAttrName}\" attribute (${filename}).`,\r\n );\r\n }\r\n\r\n output += ` ${normalizedAttrName}=\"${rawValue.replace(/\"/g, \""\")}\"`;\r\n }\r\n\r\n return output;\r\n };\r\n\r\n const serializeRawNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return node.content;\r\n }\r\n\r\n const attrs = Object.entries(node.attrs)\r\n .map(([name, value]) => {\r\n if (value === true) {\r\n return ` ${name}`;\r\n }\r\n\r\n return ` ${name}=\"${String(value).replace(/\"/g, \""\")}\"`;\r\n })\r\n .join(\"\");\r\n const children = serializeRawNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n const renderNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return renderTextContent(node.content);\r\n }\r\n\r\n if (node.tag === \"slot\") {\r\n const id = `s${counters.slot++}`;\r\n const slotName =\r\n typeof node.attrs.name === \"string\" ? node.attrs.name : \"default\";\r\n slotBindings.push({ id, name: slotName });\r\n return `__O_SLOT_${id}__`;\r\n }\r\n\r\n if (componentNames.has(node.tag)) {\r\n const id = `c${counters.comp++}`;\r\n const namedSlotNodes = new Map<string, ASTNode[]>();\r\n const defaultNodes: ASTNode[] = [];\r\n\r\n for (const child of node.children) {\r\n if (\r\n child.type === \"element\" &&\r\n child.tag === \"template\" &&\r\n typeof child.attrs.slot === \"string\"\r\n ) {\r\n namedSlotNodes.set(child.attrs.slot, child.children);\r\n continue;\r\n }\r\n\r\n defaultNodes.push(child);\r\n }\r\n\r\n const slotFactories: SlotFactoryDef[] = [];\r\n if (node.tag === \"Suspense\" && typeof node.attrs.fallback === \"string\") {\r\n const rawValue = node.attrs.fallback;\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const fallbackExpression = rawValue.slice(1, -1).trim();\r\n const fallbackAst = parseModule(`(${fallbackExpression})`);\r\n const fallbackStatement = fallbackAst.program.body[0];\r\n const fallbackNode =\r\n fallbackStatement && t.isExpressionStatement(fallbackStatement)\r\n ? fallbackStatement.expression\r\n : null;\r\n\r\n if (fallbackNode && (t.isJSXElement(fallbackNode) || t.isJSXFragment(fallbackNode))) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: transformTemplate(\r\n jsxToTemplateHtml(fallbackNode),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n } else {\r\n const transformedFallback = transformExpression(\r\n fallbackExpression,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const fallbackBindingId = `fallback_${id}`;\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: {\r\n html: `__O_HTML_${fallbackBindingId}__`,\r\n textBindings: [],\r\n htmlBindings: [\r\n {\r\n id: fallbackBindingId,\r\n expr: transformedFallback.containsJsx\r\n ? `__olovaDangerouslySetHtml(${transformedFallback.code})`\r\n : transformedFallback.code,\r\n },\r\n ],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n ifBindings: [],\r\n buildFnStr: generateBuildFunction(\r\n `__O_HTML_${fallbackBindingId}__`,\r\n stateNames,\r\n (expr) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ),\r\n counters,\r\n componentNames,\r\n ),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (defaultNodes.length > 0) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_default`,\r\n name: \"default\",\r\n descriptor: transformTemplate(\r\n serializeRawNodes(defaultNodes),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n }\r\n\r\n for (const [slotName, slotChildren] of namedSlotNodes.entries()) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_${slotName.replace(/[^A-Za-z0-9_$]/g, \"_\")}`,\r\n name: slotName,\r\n descriptor: transformTemplate(\r\n serializeRawNodes(slotChildren),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n ),\r\n });\r\n }\r\n\r\n componentBindings.push({\r\n id,\r\n component: node.tag,\r\n propsExpr: parsePropsFromAttrs(\r\n node.tag === \"Suspense\"\r\n ? Object.fromEntries(\r\n Object.entries(node.attrs).filter(([key]) => key !== \"fallback\"),\r\n )\r\n : node.attrs,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ),\r\n slotFactories,\r\n });\r\n return `__O_COMP_${id}__`;\r\n }\r\n\r\n const attrs = renderAttrs(node);\r\n const children = renderNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n html = renderNodes(parseHTML(html));\r\n\r\n const resolveExpr = (expr: string) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const buildFnStr = generateBuildFunction(\r\n html,\r\n stateNames,\r\n resolveExpr,\r\n counters,\r\n componentNames,\r\n );\r\n\r\n return {\r\n html: escapeTemplate(html),\r\n textBindings,\r\n htmlBindings,\r\n attrBindings,\r\n eventBindings,\r\n slotBindings,\r\n componentBindings,\r\n ifBindings,\r\n buildFnStr,\r\n };\r\n}\r\n\r\nfunction indentBlock(code: string, spaces = 2): string {\r\n const pad = \" \".repeat(spaces);\r\n if (!code.trim()) {\r\n return \"\";\r\n }\r\n\r\n return code\r\n .split(\"\\n\")\r\n .map((line) => `${pad}${line}`)\r\n .join(\"\\n\");\r\n}\r\n\r\nfunction renderDescriptorLiteral(\r\n descriptor: TemplateTransformResult,\r\n indent = \" \",\r\n): string {\r\n const slotFactoryDecls = descriptor.componentBindings.flatMap((binding) =>\r\n binding.slotFactories.map(\r\n (slot) =>\r\n `${indent}const ${slot.varName} = () => (${renderDescriptorLiteral(slot.descriptor, indent + \" \")});`,\r\n ),\r\n );\r\n\r\n const componentBindingsCode = descriptor.componentBindings\r\n .map((binding) => {\r\n const slotsObject =\r\n binding.slotFactories.length === 0\r\n ? \"{}\"\r\n : `{ ${binding.slotFactories.map((slot) => `${JSON.stringify(slot.name)}: ${slot.varName}`).join(\", \")} }`;\r\n\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, getComponent: () => ${binding.component}, getProps: () => (${binding.propsExpr}), getSlots: () => (${slotsObject}) }`;\r\n })\r\n .join(\",\\n\");\r\n\r\n const buildLines = descriptor.buildFnStr\r\n ? `${indent}build: ${descriptor.buildFnStr.replace(/\\n /g, \"\\n\" + indent)},`\r\n : \"\";\r\n\r\n const objectLiteral = `{\r\n${buildLines}\r\n${indent}textBindings: [\r\n${descriptor.textBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}htmlBindings: [\r\n${descriptor.htmlBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}attrBindings: [\r\n${descriptor.attrBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, attr: ${JSON.stringify(binding.attr)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}eventBindings: [\r\n${descriptor.eventBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, event: ${JSON.stringify(binding.event)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}slotBindings: [\r\n${descriptor.slotBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, name: ${JSON.stringify(binding.name)} }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}componentBindings: [\r\n${componentBindingsCode}\r\n${indent}],\r\n${indent}ifBindings: [\r\n${descriptor.ifBindings\r\n .map((binding) => {\r\n const trueFactory = `() => (${renderDescriptorLiteral(binding.trueBranch, indent + \" \")})`;\r\n const falseFactory = binding.falseBranch\r\n ? `() => (${renderDescriptorLiteral(binding.falseBranch, indent + \" \")})`\r\n : \"undefined\";\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}), trueBranch: ${trueFactory}, falseBranch: ${falseFactory} }`;\r\n })\r\n .join(\",\\n\")}\r\n${indent}]\r\n${indent}}`;\r\n\r\n if (slotFactoryDecls.length === 0) {\r\n return objectLiteral;\r\n }\r\n\r\n const outerIndent = indent.length >= 2 ? indent.slice(2) : \"\";\r\n return `(() => {\\n${slotFactoryDecls.join(\"\\n\")}\\n${indent}return ${objectLiteral};\\n${outerIndent}})()`;\r\n}\r\n\r\nfunction collectImportLines(importsCode: string): string[] {\r\n return importsCode\r\n .split(\"\\n\")\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction uniqueLines(lines: string[]): string[] {\r\n const seen = new Set<string>();\r\n const output: string[] = [];\r\n\r\n for (const line of lines) {\r\n if (seen.has(line)) {\r\n continue;\r\n }\r\n\r\n seen.add(line);\r\n output.push(line);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction extractTemplateExpressions(input: string): {\r\n output: string;\r\n expressions: Array<{ id: string; expression: string }>;\r\n} {\r\n const expressions: Array<{ id: string; expression: string }> = [];\r\n let output = \"\";\r\n let index = 0;\r\n let count = 0;\r\n\r\n while (index < input.length) {\r\n const start = input.indexOf(\"{\", index);\r\n if (start < 0) {\r\n output += input.slice(index);\r\n break;\r\n }\r\n\r\n let prevIndex = start - 1;\r\n while (prevIndex >= 0 && /\\s/.test(input[prevIndex])) {\r\n prevIndex -= 1;\r\n }\r\n\r\n if (prevIndex >= 0 && input[prevIndex] === \"=\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n if (start > 0 && input[start - 1] === \"$\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n output += input.slice(index, start);\r\n\r\n let depth = 1;\r\n let cursor = start + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, start);\r\n }\r\n\r\n const id = `x${count++}`;\r\n expressions.push({\r\n id,\r\n expression: input.slice(start + 1, cursor - 1),\r\n });\r\n output += `__O_EXPR_${id}__`;\r\n index = cursor;\r\n }\r\n\r\n return { output, expressions };\r\n}\r\n\r\nfunction mergeImportLines(lines: string[]): string {\r\n const merged = new Map<\r\n string,\r\n {\r\n defaultImport?: string;\r\n namespaceImport?: string;\r\n namedImports: Map<string, string>;\r\n sideEffectOnly: boolean;\r\n }\r\n >();\r\n\r\n for (const line of uniqueLines(lines)) {\r\n const ast = parseModule(line);\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n const source = node.source.value;\r\n const entry =\r\n merged.get(source) ??\r\n {\r\n namedImports: new Map<string, string>(),\r\n sideEffectOnly: true,\r\n };\r\n\r\n if (node.specifiers.length > 0) {\r\n entry.sideEffectOnly = false;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n if (t.isImportDefaultSpecifier(specifier)) {\r\n entry.defaultImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n if (t.isImportNamespaceSpecifier(specifier)) {\r\n entry.namespaceImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (!entry.namedImports.has(imported)) {\r\n entry.namedImports.set(imported, specifier.local.name);\r\n }\r\n }\r\n\r\n merged.set(source, entry);\r\n }\r\n }\r\n\r\n const output: string[] = [];\r\n\r\n for (const [source, entry] of merged.entries()) {\r\n if (entry.sideEffectOnly) {\r\n output.push(generate(t.importDeclaration([], t.stringLiteral(source))).code);\r\n continue;\r\n }\r\n\r\n const specifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n\r\n if (entry.defaultImport) {\r\n specifiers.push(t.importDefaultSpecifier(t.identifier(entry.defaultImport)));\r\n }\r\n\r\n if (entry.namespaceImport) {\r\n specifiers.push(\r\n t.importNamespaceSpecifier(t.identifier(entry.namespaceImport)),\r\n );\r\n }\r\n\r\n for (const [imported, local] of entry.namedImports.entries()) {\r\n specifiers.push(\r\n t.importSpecifier(\r\n t.identifier(local),\r\n t.identifier(imported),\r\n ),\r\n );\r\n }\r\n\r\n output.push(\r\n generate(t.importDeclaration(specifiers, t.stringLiteral(source))).code,\r\n );\r\n }\r\n\r\n return output.join(\"\\n\");\r\n}\r\n\r\nfunction buildComponentCode(\n parsed: ParsedOlovaFile,\n options?: { exportName?: string; scopeId?: string; hmrId?: string; dev?: boolean },\n): { importsCode: string; code: string } {\n const scriptInfo = collectScriptInfo(parsed.script);\n const counters: TransformContext = {\n text: 0,\n attr: 0,\n event: 0,\n comp: 0,\n slot: 0,\n if: 0,\n };\n const warnings = options?.dev ? new Set<string>() : undefined;\n\n const transformed = runCompilePhase(\"transform-template\", () =>\n transformTemplate(\n parsed.template,\n scriptInfo.stateNames,\n scriptInfo.allSignalNames,\n scriptInfo.jsxFunctionNames,\n scriptInfo.componentNames,\n counters,\n options?.scopeId,\n warnings,\n options?.hmrId ?? \"component.olova\",\n ),\n );\n\r\n const exportHead = options?.exportName\r\n ? `export const ${options.exportName} = __defineComponent((__props, __slots) => {`\r\n : `const __olovaComponent = __defineComponent((__props, __slots) => {`;\r\n const exportTail = options?.exportName\r\n ? `}, ${JSON.stringify(options?.hmrId)});`\r\n : `}, ${JSON.stringify(options?.hmrId)});\\nexport default __olovaComponent;`;\r\n const hmrCode =\r\n options?.dev && !options?.exportName && options?.hmrId\r\n ? `\r\nif (import.meta.hot) {\r\n import.meta.hot.accept((nextModule) => {\r\n if (nextModule?.default) {\r\n __replaceComponent(__olovaComponent, nextModule.default);\r\n }\r\n });\r\n}\r\n`\r\n : \"\";\r\n\r\n if (warnings) {\r\n emitDevWarnings(warnings);\r\n }\r\n\r\n const code = `\r\n${exportHead}\r\n const props = __props;\r\n const slots = __slots;\r\n const __olovaGlobalObj = globalThis;\r\n const __olovaJsxHandlers =\r\n __olovaGlobalObj.__olovaJsxHandlers ?? (__olovaGlobalObj.__olovaJsxHandlers = new Map());\r\n const __olovaNextJsxEventId = () => {\r\n __olovaGlobalObj.__olovaJsxEventId = (__olovaGlobalObj.__olovaJsxEventId ?? 0) + 1;\r\n return String(__olovaGlobalObj.__olovaJsxEventId);\r\n };\r\n if (typeof __olovaGlobalObj.__olovaDispatchJsxEvent !== 'function') {\r\n __olovaGlobalObj.__olovaDispatchJsxEvent = (event, element) => {\r\n const key = element?.getAttribute?.('data-o-jsx-' + event.type);\r\n if (!key) {\r\n return;\r\n }\r\n\r\n const handler = __olovaJsxHandlers.get(key);\r\n if (typeof handler === 'function') {\r\n handler(event);\r\n }\r\n };\r\n }\r\n const __olovaRegisterJsxEvent = (eventName, handler) => {\r\n if (typeof handler !== 'function') {\r\n return '';\r\n }\r\n\r\n const id = __olovaNextJsxEventId();\r\n __olovaJsxHandlers.set(id, handler);\r\n return ' data-o-jsx-' + eventName + '=\"' + id + '\" on' + eventName + '=\"window.__olovaDispatchJsxEvent(event, this)\"';\r\n };\r\n const __olovaToString = (value) =>\r\n Array.isArray(value)\r\n ? value.map(__olovaToString).join('')\r\n : value == null || value === false || value === true\r\n ? ''\r\n : String(value);\r\n const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });\r\n const __olovaNormalizeClassValue = (value) => {\r\n if (value == null || value === false) {\r\n return '';\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(__olovaNormalizeClassValue).filter(Boolean).join(' ');\r\n }\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([key]) => key)\r\n .join(' ');\r\n }\r\n return String(value);\r\n };\r\n const __olovaEscape = (value) =>\r\n __olovaToString(value)\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\\\"/g, '"')\r\n .replace(/'/g, ''');\r\n const __olovaSpreadAttrs = (input) => {\r\n if (input == null || input === false) {\r\n return '';\r\n }\r\n if (Array.isArray(input)) {\r\n return input.map(__olovaSpreadAttrs).join('');\r\n }\r\n if (typeof input !== 'object') {\r\n return '';\r\n }\r\n\r\n return Object.entries(input).reduce((acc, [key, value]) => {\r\n if (value == null || value === false) {\r\n return acc;\r\n }\r\n const attrKey = key === 'className' ? 'class' : key;\r\n const normalizedValue = attrKey === 'class'\r\n ? __olovaNormalizeClassValue(value)\r\n : value;\r\n if (attrKey === 'key') {\r\n return acc;\r\n }\r\n if (normalizedValue == null || normalizedValue === false || normalizedValue === '') {\r\n return acc;\r\n }\r\n if (normalizedValue === true) {\r\n return acc + ' ' + attrKey;\r\n }\r\n return acc + ' ' + attrKey + '=\"' + __olovaEscape(normalizedValue) + '\"';\r\n }, '');\r\n };\r\n const __olovaFor = (each, render) => {\r\n if (!Array.isArray(each) || typeof render !== 'function') {\r\n return '';\r\n }\r\n return each.map((item, index) => render(item, index));\r\n };\r\n const __olovaShow = (when, render, fallback = '') => {\r\n if (!when) {\r\n return fallback;\r\n }\r\n return typeof render === 'function' ? render(when) : render;\r\n };\r\n${indentBlock(scriptInfo.scriptBodyCode, 2)}\r\n\r\n return ${renderDescriptorLiteral(transformed, \" \")};\r\n${exportTail}\r\n${hmrCode}\r\n`;\r\n\r\n return { importsCode: scriptInfo.importsCode, code };\r\n}\r\n\r\nexport interface CompileOptions {\n filename?: string;\n dev?: boolean;\n exportName?: string;\n}\n\nexport type CompilePhasesResult = {\n parsed: ParsedOlovaFile;\n script: ReturnType<typeof collectScriptInfo>;\n template: TemplateTransformResult;\n scopeId?: string;\n};\n\nexport function analyzeOlovaPhases(\n source: string,\n options?: CompileOptions,\n): CompilePhasesResult {\n const filename = options?.filename ?? \"component.olova\";\n try {\n const parsed = runCompilePhase(\"parse-file\", () =>\n parseOlovaFile(source),\n );\n const script = runCompilePhase(\"analyze-script\", () =>\n collectScriptInfo(parsed.script),\n );\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\n : undefined;\n const template = runCompilePhase(\"transform-template\", () =>\n transformTemplate(\n parsed.template,\n script.stateNames,\n script.allSignalNames,\n script.jsxFunctionNames,\n script.componentNames,\n {\n text: 0,\n attr: 0,\n event: 0,\n comp: 0,\n slot: 0,\n if: 0,\n },\n scopeId,\n options?.dev ? new Set<string>() : undefined,\n filename,\n ),\n );\n\n return {\n parsed,\n script,\n template,\n scopeId,\n };\n } catch (error) {\n return normalizeCompileError(error, source, filename);\n }\n}\n\nexport function compileOlovaScriptModule(\n source: string,\n options?: CompileOptions,\n): CompileResult {\n try {\n return runCompilePhase(\"analyze-script\", () => {\n const scriptInfo = collectScriptInfo(source);\n return runCompilePhase(\"transpile\", () =>\n transpileTypeScript(\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\n options?.filename ?? \"module.ts\",\n ),\n );\n });\n } catch (error) {\n return normalizeCompileError(error, source, options?.filename ?? \"module.ts\");\n }\n}\n\nexport function compileOlova(source: string, options?: CompileOptions): CompileResult {\n const filename = options?.filename ?? \"component.olova\";\n try {\n return runCompilePhase(\"parse-file\", () => {\n const parsed = parseOlovaFile(source);\n\n if (!parsed.template.trim() && isModuleOnlyScript(parsed.script)) {\n const moduleResult = compileModuleScript(parsed.script, `${filename}.ts`);\n const css = runCompilePhase(\"generate-module\", () =>\n collectCss(parsed.styles),\n );\n return {\n ...moduleResult,\n css,\n };\n }\n\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\n : undefined;\n const compiled = runCompilePhase(\"generate-module\", () =>\n buildComponentCode(parsed, {\n scopeId,\n hmrId: filename,\n dev: options?.dev,\n }),\n );\n const runtimeImport = options?.dev\n ? `import { defineComponent as __defineComponent, replaceComponent as __replaceComponent } from 'olova/runtime';`\n : `import { defineComponent as __defineComponent } from 'olova/runtime';`;\n const result = runCompilePhase(\"transpile\", () => transpileTypeScript(`\n${runtimeImport}\n${compiled.importsCode}\n${compiled.code}\n`, `${filename}.ts`));\n const css = runCompilePhase(\"generate-module\", () =>\n collectCss(parsed.styles, scopeId),\n );\n return {\n ...result,\n css,\n };\n });\n } catch (error) {\n return normalizeCompileError(error, source, filename);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../compiler/css-scope.ts","../compiler/diagnostics.ts","../compiler/parse.ts","../compiler/html-parser.ts","../compiler/dom-generator.ts","../compiler/compile.ts"],"names":["generate","parse","statement","childExpr","walk","char","prev","id","css"],"mappings":"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","file":"compiler.js","sourcesContent":["import * as csstree from \"css-tree\";\nimport type { Rule, StyleSheet } from \"css-tree\";\nimport type { StyleBlock } from \"./parse\";\n\nexport function createScopeAttr(scopeId?: string): string | null {\n return scopeId ? `data-o-scope-${scopeId}` : null;\n}\n\nfunction scopeSelectorList(selectorList: string, scopeAttr: string): string {\n const applyScopeToSegment = (segment: string): string => {\n const trimmed = segment.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n if (trimmed.includes(scopeAttr)) {\n return trimmed;\n }\n\n const globalPattern = /:global\\(([^()]+)\\)/g;\n const localCandidate = trimmed.replace(globalPattern, \"\").trim();\n const normalized = trimmed.replace(globalPattern, \"$1\");\n\n if (!localCandidate) {\n return normalized;\n }\n\n if (normalized === \":root\") {\n return `[${scopeAttr}]`;\n }\n\n const pseudoIndex = normalized.search(/(?<!:):(?!:)/);\n if (pseudoIndex === -1) {\n return `${normalized}[${scopeAttr}]`;\n }\n\n return `${normalized.slice(0, pseudoIndex)}[${scopeAttr}]${normalized.slice(pseudoIndex)}`;\n };\n\n return selectorList\n .split(\",\")\n .map((selector) => selector.trim())\n .filter(Boolean)\n .map((selector) => {\n if (selector.startsWith(\"@\") || selector.includes(scopeAttr)) {\n return selector;\n }\n\n return selector\n .split(/(\\s+|[>+~])/)\n .map((part) => {\n if (!part || /^(\\s+|[>+~])$/.test(part)) {\n return part;\n }\n\n return applyScopeToSegment(part);\n })\n .join(\"\");\n })\n .join(\", \");\n}\n\nfunction scopeCss(css: string, scopeAttr: string): string {\n const ast = csstree.parse(css, {\n context: \"stylesheet\",\n positions: false,\n }) as StyleSheet;\n\n csstree.walk(ast, {\n visit: \"Rule\",\n enter(node) {\n const rule = node as Rule;\n if (!rule.prelude || rule.prelude.type !== \"SelectorList\") {\n return;\n }\n\n rule.prelude = csstree.parse(\n scopeSelectorList(csstree.generate(rule.prelude), scopeAttr),\n {\n context: \"selectorList\",\n positions: false,\n },\n ) as Rule[\"prelude\"];\n },\n });\n\n return csstree.generate(ast);\n}\n\nexport function hashScopeSeed(input: string): string {\n let hash = 2166136261;\n for (let index = 0; index < input.length; index += 1) {\n hash ^= input.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n\n return Math.abs(hash >>> 0).toString(36);\n}\n\nexport function collectCss(blocks: StyleBlock[], scopeId?: string): string {\n const scopeAttr = createScopeAttr(scopeId);\n return blocks\n .map((block) => {\n const content = block.content.trim();\n if (!content) {\n return \"\";\n }\n\n if (!(\"global\" in block.attrs) && scopeAttr) {\n return scopeCss(content, scopeAttr);\n }\n\n return content;\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n","export type CompilePhase =\n | \"parse-file\"\n | \"parse-script\"\n | \"analyze-script\"\n | \"transform-template\"\n | \"generate-module\"\n | \"transpile\";\n\nexport type CompileDiagnostic = {\n message: string;\n filename?: string;\n phase?: CompilePhase;\n line?: number;\n column?: number;\n index?: number;\n frame?: string;\n hint?: string;\n};\n\nexport type CompileErrorLike = Error & {\n loc?: {\n line?: number;\r\n column?: number;\r\n index?: number;\r\n start?: {\r\n line: number;\r\n column: number;\r\n index?: number;\r\n };\r\n };\n frame?: string;\n diagnostic?: CompileDiagnostic;\n phase?: CompilePhase;\n hint?: string;\n};\n\r\nfunction indexToLocation(source: string, index: number): {\r\n line: number;\r\n column: number;\r\n index: number;\r\n} {\r\n const safeIndex = Math.max(0, Math.min(index, source.length));\r\n const lines = source.slice(0, safeIndex).split(\"\\n\");\r\n return {\r\n line: lines.length,\r\n column: lines[lines.length - 1]?.length ?? 0,\r\n index: safeIndex,\r\n };\r\n}\r\n\r\nfunction createCodeFrame(\r\n source: string,\r\n line: number,\r\n column: number,\r\n contextLines = 2,\r\n): string {\r\n const lines = source.split(\"\\n\");\r\n const start = Math.max(0, line - 1 - contextLines);\r\n const end = Math.min(lines.length, line + contextLines);\r\n return lines\r\n .slice(start, end)\r\n .map((content, offset) => {\r\n const lineNumber = start + offset + 1;\r\n const prefix = `${String(lineNumber).padStart(4, \" \")} | `;\r\n if (lineNumber !== line) {\r\n return `${prefix}${content}`;\r\n }\r\n return `${prefix}${content}\\n | ${\" \".repeat(Math.max(column, 0))}^`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n\r\nexport function createCompileError(\n message: string,\n source: string,\n index: number,\n options?: {\n filename?: string;\n phase?: CompilePhase;\n hint?: string;\n },\n): CompileErrorLike {\n const loc = indexToLocation(source, index);\n const error = new Error(message) as CompileErrorLike;\n error.loc = { start: loc };\n error.frame = createCodeFrame(source, loc.line, loc.column);\n error.phase = options?.phase;\n error.hint = options?.hint;\n error.diagnostic = {\n message,\n filename: options?.filename,\n phase: options?.phase,\n line: loc.line,\n column: loc.column + 1,\n index: loc.index,\n frame: error.frame,\n hint: options?.hint,\n };\n return error;\n}\n\nexport function normalizeCompileError(\n error: unknown,\n source: string,\n filename = \"component.olova\",\n): never {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as CompileErrorLike;\n const start = compileError.loc?.start ?? compileError.loc;\n const line = start?.line;\n const column = start?.column;\n const phasePrefix = compileError.phase ? ` [${compileError.phase}]` : \"\";\n const locationSuffix =\n line === undefined || column === undefined\n ? \"\"\n : ` (${filename}:${line}:${column + 1})`;\n const normalizedMessage = compileError.message.replace(/^\\[olova\\]\\s*/, \"\");\n compileError.message = `[olova]${phasePrefix} ${normalizedMessage}${locationSuffix}`;\n if (line !== undefined && column !== undefined && !compileError.frame) {\n compileError.frame = createCodeFrame(source, line, column);\n }\n compileError.diagnostic = {\n message: normalizedMessage,\n filename,\n phase: compileError.phase,\n line,\n column: column === undefined ? undefined : column + 1,\n index: start?.index,\n frame: compileError.frame,\n hint: compileError.hint,\n };\n throw compileError;\n}\n","export type StyleBlock = {\r\n content: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nexport type ParsedOlovaFile = {\r\n script: string;\r\n template: string;\r\n styles: StyleBlock[];\r\n};\r\n\r\ntype TagMatch = {\r\n fullStart: number;\r\n openEnd: number;\r\n closeStart: number;\r\n closeEnd: number;\r\n inner: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nfunction isWhitespace(char: string): boolean {\r\n return /\\s/.test(char);\r\n}\r\n\r\nfunction skipQuoted(source: string, start: number, quote: string): number {\r\n let index = start + 1;\r\n while (index < source.length) {\r\n if (source[index] === \"\\\\\" && index + 1 < source.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n if (source[index] === quote) {\r\n return index + 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return source.length;\r\n}\r\n\r\nfunction findTagEnd(source: string, start: number): number {\r\n let index = start;\r\n while (index < source.length) {\r\n const char = source[index];\r\n if (char === '\"' || char === \"'\") {\r\n index = skipQuoted(source, index, char);\r\n continue;\r\n }\r\n\r\n if (char === \">\") {\r\n return index;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction parseAttributes(source: string): Record<string, string | true> {\r\n const attrs: Record<string, string | true> = {};\r\n const attrRegex =\r\n /([:@A-Za-z_][-A-Za-z0-9_:.@]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+)))?/g;\r\n\r\n let match: RegExpExecArray | null;\r\n while ((match = attrRegex.exec(source)) !== null) {\r\n const [, name, doubleQuoted, singleQuoted, bare] = match;\r\n const value = doubleQuoted ?? singleQuoted ?? bare ?? true;\r\n attrs[name] = value;\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\nfunction readOpeningTag(\r\n source: string,\r\n start: number,\r\n): { tag: string; openEnd: number; attrs: Record<string, string | true> } | null {\r\n if (source[start] !== \"<\") {\r\n return null;\r\n }\r\n\r\n const tagEnd = findTagEnd(source, start + 1);\r\n if (tagEnd < 0) {\r\n return null;\r\n }\r\n\r\n const raw = source.slice(start + 1, tagEnd).trim();\r\n if (!raw || raw.startsWith(\"/\") || raw.startsWith(\"!\")) {\r\n return null;\r\n }\r\n\r\n let splitIndex = 0;\r\n while (splitIndex < raw.length && !isWhitespace(raw[splitIndex]) && raw[splitIndex] !== \"/\") {\r\n splitIndex += 1;\r\n }\r\n\r\n const tag = raw.slice(0, splitIndex);\r\n const attrsSource = raw.slice(splitIndex).replace(/\\/\\s*$/, \"\").trim();\r\n return {\r\n tag,\r\n openEnd: tagEnd + 1,\r\n attrs: parseAttributes(attrsSource),\r\n };\r\n}\r\n\r\nfunction findMatchingTag(\r\n source: string,\r\n start: number,\r\n tagName: string,\r\n): TagMatch | null {\r\n const opening = readOpeningTag(source, start);\r\n if (!opening || opening.tag.toLowerCase() !== tagName.toLowerCase()) {\r\n return null;\r\n }\r\n\r\n const selfClosing = /\\/\\s*>$/.test(source.slice(start, opening.openEnd));\r\n if (selfClosing) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: opening.openEnd,\r\n closeEnd: opening.openEnd,\r\n inner: \"\",\r\n attrs: opening.attrs,\r\n };\r\n }\r\n\r\n let depth = 1;\r\n let index = opening.openEnd;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(\"<\", index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n if (source.startsWith(\"<!--\", next)) {\r\n const commentEnd = source.indexOf(\"-->\", next + 4);\r\n index = commentEnd >= 0 ? commentEnd + 3 : source.length;\r\n continue;\r\n }\r\n\r\n if (source[next + 1] === \"/\") {\r\n const closeEnd = findTagEnd(source, next + 2);\r\n if (closeEnd < 0) {\r\n break;\r\n }\r\n\r\n const closeTag = source.slice(next + 2, closeEnd).trim();\r\n if (closeTag.toLowerCase() === tagName.toLowerCase()) {\r\n depth -= 1;\r\n if (depth === 0) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: next,\r\n closeEnd: closeEnd + 1,\r\n inner: source.slice(opening.openEnd, next),\r\n attrs: opening.attrs,\r\n };\r\n }\r\n }\r\n\r\n index = closeEnd + 1;\r\n continue;\r\n }\r\n\r\n const nested = readOpeningTag(source, next);\r\n if (!nested) {\r\n index = next + 1;\r\n continue;\r\n }\r\n\r\n if (nested.tag.toLowerCase() === tagName.toLowerCase()) {\r\n const nestedSelfClosing = /\\/\\s*>$/.test(source.slice(next, nested.openEnd));\r\n if (!nestedSelfClosing) {\r\n depth += 1;\r\n }\r\n }\r\n\r\n index = nested.openEnd;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction collectTopLevelBlocks(source: string, tagName: string): TagMatch[] {\r\n const blocks: TagMatch[] = [];\r\n let index = 0;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(`<${tagName}`, index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n const previous = next > 0 ? source[next - 1] : \"\";\r\n if (previous && /[A-Za-z0-9_:-]/.test(previous)) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n const block = findMatchingTag(source, next, tagName);\r\n if (!block) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n blocks.push(block);\r\n index = block.closeEnd;\r\n }\r\n\r\n return blocks;\r\n}\r\n\r\nfunction removeRanges(source: string, ranges: Array<{ start: number; end: number }>): string {\r\n if (ranges.length === 0) {\r\n return source.trim();\r\n }\r\n\r\n const ordered = [...ranges].sort((a, b) => a.start - b.start);\r\n let cursor = 0;\r\n let output = \"\";\r\n\r\n for (const range of ordered) {\r\n output += source.slice(cursor, range.start);\r\n cursor = range.end;\r\n }\r\n\r\n output += source.slice(cursor);\r\n return output.trim();\r\n}\r\n\r\nexport function parseOlovaFile(source: string): ParsedOlovaFile {\r\n const scriptBlocks = collectTopLevelBlocks(source, \"script\");\r\n const styleBlocks = collectTopLevelBlocks(source, \"style\");\r\n\r\n const ranges = styleBlocks.map((block) => ({\r\n start: block.fullStart,\r\n end: block.closeEnd,\r\n }));\r\n\r\n for (const scriptBlock of scriptBlocks) {\r\n ranges.push({ start: scriptBlock.fullStart, end: scriptBlock.closeEnd });\r\n }\r\n\r\n return {\r\n script: scriptBlocks.map((block) => block.inner.trim()).filter(Boolean).join(\"\\n\\n\"),\r\n template: removeRanges(source, ranges),\r\n styles: styleBlocks.map((block) => ({\r\n content: block.inner.trim(),\r\n attrs: block.attrs,\r\n })),\r\n };\r\n}\r\n","import {\n type ChildNode,\n type Comment,\n type DataNode,\n type Document,\n type Element,\n} from \"domhandler\";\nimport { parseDocument } from \"htmlparser2\";\n\nexport type ASTNode = ASTElement | ASTText | ASTComment;\n\nexport interface ASTElement {\n type: \"element\";\n tag: string;\n attrs: Record<string, string | true>;\n children: ASTNode[];\n isSelfClosing: boolean;\n}\n\nexport interface ASTText {\n type: \"text\";\n content: string;\n}\n\nexport interface ASTComment {\n type: \"comment\";\n content: string;\n}\n\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nfunction normalizeNewlines(value: string): string {\n return value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction readBracedValue(\n source: string,\n start: number,\n): { value: string; end: number } {\n let index = start + 1;\n let depth = 1;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n let value = \"{\";\n\n while (index < source.length && depth > 0) {\n const char = source[index];\n const prev = source[index - 1];\n value += char;\n\n if (quote) {\n if (char === quote && prev !== \"\\\\\") {\n quote = null;\n }\n index += 1;\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n } else if (char === \"}\") {\n depth -= 1;\n }\n\n index += 1;\n }\n\n return { value, end: index };\n}\n\nfunction protectOlovaAttrExpressions(html: string): {\n html: string;\n placeholders: Map<string, string>;\n} {\n const placeholders = new Map<string, string>();\n let output = \"\";\n let index = 0;\n let count = 0;\n\n while (index < html.length) {\n const char = html[index];\n output += char;\n\n if (char !== \"=\" || html[index + 1] !== \"{\") {\n index += 1;\n continue;\n }\n\n const braced = readBracedValue(html, index + 1);\n const key = `__OLOVA_ATTR_EXPR_${count++}__`;\n placeholders.set(key, braced.value);\n output += `\"${key}\"`;\n index = braced.end;\n continue;\n }\n\n return { html: output, placeholders };\n}\n\nfunction normalizeAttrs(attribs: Record<string, string>): Record<string, string | true> {\n const output: Record<string, string | true> = {};\n\n for (const [name, value] of Object.entries(attribs)) {\n output[name] = value === \"\" ? true : value;\n }\n\n return output;\n}\n\nfunction isSelfClosingElement(node: Element): boolean {\n return VOID_TAGS.has(node.name.toLowerCase());\n}\n\nfunction toAstNode(node: ChildNode): ASTNode | null {\n if (node.type === \"text\") {\n return {\n type: \"text\",\n content: normalizeNewlines((node as DataNode).data),\n };\n }\n\n if (node.type === \"comment\") {\n return {\n type: \"comment\",\n content: normalizeNewlines((node as Comment).data),\n };\n }\n\n if (node.type === \"tag\" || node.type === \"script\" || node.type === \"style\") {\n const element = node as Element;\n return {\n type: \"element\",\n tag: element.name,\n attrs: normalizeAttrs(element.attribs ?? {}),\n children: toAstNodes(element.children ?? []),\n isSelfClosing: isSelfClosingElement(element),\n };\n }\n\n return null;\n}\n\nfunction toAstNodes(nodes: ChildNode[]): ASTNode[] {\n const output: ASTNode[] = [];\n\n for (const node of nodes) {\n const normalized = toAstNode(node);\n if (normalized) {\n output.push(normalized);\n }\n }\n\n return output;\n}\n\nexport function parseHTML(html: string): ASTNode[] {\n const protectedHtml = protectOlovaAttrExpressions(html);\n const document = parseDocument(protectedHtml.html, {\n decodeEntities: false,\n recognizeSelfClosing: true,\n lowerCaseAttributeNames: false,\n lowerCaseTags: false,\n });\n\n const rootNodes = (document as Document).children.filter((node) => {\n if (node.type === \"directive\" || node.type === \"cdata\") {\n return false;\n }\n return true;\n }) as ChildNode[];\n\n const ast = toAstNodes(rootNodes);\n const restorePlaceholders = (nodes: ASTNode[]): void => {\n for (const node of nodes) {\n if (node.type !== \"element\") {\n continue;\n }\n\n for (const [name, value] of Object.entries(node.attrs)) {\n if (typeof value !== \"string\") {\n continue;\n }\n\n const restored = protectedHtml.placeholders.get(value);\n if (restored) {\n node.attrs[name] = restored;\n }\n }\n\n restorePlaceholders(node.children);\n }\n };\n\n restorePlaceholders(ast);\n return ast;\n}\n","import { ASTNode, parseHTML } from \"./html-parser\";\r\n\r\nexport type TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n};\r\n\r\ntype BuildContext = {\r\n statements: string[];\r\n nodes: string[];\r\n localCount: number;\r\n};\r\n\r\ntype TextFragment =\r\n | { type: \"static\"; value: string }\r\n | { type: \"dynamic\"; tokenType: string; id: string };\r\n\r\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\r\n\r\nfunction splitTextFragments(text: string): TextFragment[] {\r\n const parts: TextFragment[] = [];\r\n const tokenRe = /__O_(TEXT|HTML|SLOT|COMP|IF)_([a-zA-Z0-9_]+)__/g;\r\n\r\n let lastIndex = 0;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = tokenRe.exec(text)) !== null) {\r\n if (match.index > lastIndex) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex, match.index) });\r\n }\r\n parts.push({ type: \"dynamic\", tokenType: match[1], id: match[2] });\r\n lastIndex = match.index + match[0].length;\r\n }\r\n\r\n if (lastIndex < text.length) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex) });\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nfunction isSvgContext(tag: string, inSvg: boolean): boolean {\r\n if (tag === \"foreignObject\") {\r\n return false;\r\n }\r\n\r\n return inSvg || tag === \"svg\";\r\n}\r\n\r\nfunction processNode(\r\n node: ASTNode,\r\n parentVar: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n buildCtx: BuildContext,\r\n componentNames: Set<string>,\r\n inSvg = false,\r\n) {\r\n if (node.type === \"comment\") {\r\n return;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n const parts = splitTextFragments(node.content);\r\n for (const part of parts) {\r\n if (part.type === \"static\") {\r\n if (!part.value) continue;\r\n const varName = `_t${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode(${JSON.stringify(part.value)});`,\r\n );\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n } else {\r\n const varName = `_d${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode('');`,\r\n );\r\n buildCtx.nodes.push(`'${part.id}': ${varName}`);\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (node.type === \"element\") {\r\n const tag = node.tag;\r\n const varName = `_el${buildCtx.localCount++}`;\r\n const useSvgNamespace = isSvgContext(tag, inSvg);\r\n buildCtx.statements.push(\r\n useSvgNamespace\r\n ? `const ${varName} = document.createElementNS(${JSON.stringify(SVG_NAMESPACE)}, ${JSON.stringify(tag)});`\r\n : `const ${varName} = document.createElement(${JSON.stringify(tag)});`,\r\n );\r\n\r\n for (const [attr, val] of Object.entries(node.attrs)) {\r\n if (attr.startsWith(\"data-o-on-\")) {\r\n if (typeof val === \"string\") {\r\n buildCtx.nodes.push(`'${val}': ${varName}`);\r\n }\r\n } else if (typeof val === \"string\" && val.includes(\"__O_ATTR_\")) {\r\n const match = val.match(/__O_ATTR_([a-zA-Z0-9_]+)__/);\r\n if (match) {\r\n buildCtx.nodes.push(`'${match[1]}': ${varName}`);\r\n }\r\n } else {\r\n if (val === true) {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, \"\");`,\r\n );\r\n } else {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, ${JSON.stringify(val)});`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n for (const child of node.children) {\r\n processNode(\r\n child,\r\n varName,\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n useSvgNamespace,\r\n );\r\n }\r\n\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n}\r\n\r\nexport function generateBuildFunction(\r\n html: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n componentNames: Set<string>,\r\n): string {\r\n const ast = parseHTML(html);\r\n\r\n const buildCtx: BuildContext = {\r\n statements: [],\r\n nodes: [],\r\n localCount: 0,\r\n };\r\n\r\n buildCtx.statements.push(\"const _f = document.createDocumentFragment();\");\r\n\r\n for (const child of ast) {\r\n processNode(\r\n child,\r\n \"_f\",\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n );\r\n }\r\n\r\n return `function() {\r\n ${buildCtx.statements.join(\"\\n \")}\r\n return { fragment: _f, nodes: { ${buildCtx.nodes.join(\", \")} } };\r\n }`;\r\n}\r\n","import { parse } from \"@babel/parser\";\r\nimport generatorModule from \"@babel/generator\";\r\nimport traverseModule from \"@babel/traverse\";\r\nimport type { NodePath } from \"@babel/traverse\";\r\nimport * as t from \"@babel/types\";\r\nimport ts from \"typescript\";\r\nimport { collectCss, createScopeAttr, hashScopeSeed } from \"./css-scope\";\r\nimport {\r\n type CompilePhase,\r\n createCompileError,\r\n normalizeCompileError,\r\n} from \"./diagnostics\";\r\nimport {\r\n parseOlovaFile,\r\n type ParsedOlovaFile,\r\n} from \"./parse\";\r\nimport { parseHTML, type ASTElement, type ASTNode } from \"./html-parser\";\r\nimport { generateBuildFunction } from \"./dom-generator\";\r\n\r\nconst generate =\r\n (generatorModule as unknown as { default?: typeof generatorModule })\r\n .default ?? generatorModule;\r\nconst traverse =\r\n (traverseModule as unknown as { default?: typeof traverseModule }).default ??\r\n traverseModule;\r\n\r\nconst CORE_KNOWN_IMPORTS = new Set([\r\n \"Signal\",\r\n \"computed\",\r\n \"createApp\",\r\n \"createErrorBoundary\",\r\n \"dangerouslySetHtml\",\r\n \"defineComponent\",\r\n \"derived\",\r\n \"effect\",\r\n \"getContext\",\r\n \"global\",\r\n \"hasContext\",\r\n \"mount\",\r\n \"onCleanup\",\r\n \"onMount\",\r\n \"replaceComponent\",\r\n \"setContext\",\r\n \"state\",\r\n \"Suspense\",\r\n]);\r\n\r\ntype CompileResult = {\r\n code: string;\r\n css?: string;\r\n map?: unknown;\r\n};\r\n\r\ntype TextBinding = { id: string; expr: string };\r\ntype HtmlBinding = { id: string; expr: string };\r\ntype AttrBinding = { id: string; attr: string; expr: string };\r\ntype EventBinding = { id: string; event: string; expr: string };\r\ntype SlotBinding = { id: string; name: string };\r\ntype SlotFactoryDef = {\r\n varName: string;\r\n name: string;\r\n descriptor: TemplateTransformResult;\r\n};\r\ntype ComponentBinding = {\r\n id: string;\r\n component: string;\r\n propsExpr: string;\r\n slotFactories: SlotFactoryDef[];\r\n};\r\ntype IfBinding = {\r\n id: string;\r\n expr: string;\r\n trueBranch: TemplateTransformResult;\r\n falseBranch?: TemplateTransformResult;\r\n};\r\n\r\ntype TemplateTransformResult = {\r\n html: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings: IfBinding[];\r\n buildFnStr?: string;\r\n};\r\n\r\ntype TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n if: number;\r\n};\r\n\r\nfunction escapeTemplate(source: string): string {\r\n return source.replace(/\\\\/g, \"\\\\\\\\\").replace(/`/g, \"\\\\`\");\r\n}\r\n\r\nfunction emitDevWarnings(warnings: Set<string>): void {\r\n for (const warning of warnings) {\r\n console.warn(warning);\r\n }\r\n}\r\n\r\nfunction parseModule(code: string): t.File {\r\n return parse(code, {\r\n sourceType: \"module\",\r\n plugins: [\"typescript\", \"jsx\"],\r\n });\r\n}\r\n\r\nfunction runCompilePhase<T>(\r\n phase: CompilePhase,\r\n fn: () => T,\r\n): T {\r\n try {\r\n return fn();\r\n } catch (error) {\r\n const compileError =\r\n (error instanceof Error ? error : new Error(String(error))) as Error & {\r\n phase?: CompilePhase;\r\n };\r\n if (!compileError.phase) {\r\n compileError.phase = phase;\r\n }\r\n throw compileError;\r\n }\r\n}\r\n\r\nfunction transpileTypeScript(code: string, filename = \"component.ts\"): CompileResult {\r\n const result = ts.transpileModule(code, {\r\n fileName: filename,\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2022,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: ts.JsxEmit.Preserve,\r\n importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove,\r\n verbatimModuleSyntax: false,\r\n sourceMap: true,\r\n inlineSources: true,\r\n },\r\n });\r\n\r\n return {\r\n code: result.outputText.trim(),\r\n map: result.sourceMapText ? JSON.parse(result.sourceMapText) : null,\r\n };\r\n}\r\n\r\nfunction compileModuleScript(script: string, filename = \"module.olova.ts\"): CompileResult {\r\n return runCompilePhase(\"analyze-script\", () => {\r\n const scriptInfo = collectScriptInfo(script);\r\n return runCompilePhase(\"transpile\", () =>\r\n transpileTypeScript(\r\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\r\n filename,\r\n ),\r\n );\r\n });\r\n}\r\n\r\nfunction isModuleOnlyScript(script: string): boolean {\r\n if (!script.trim()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction isStateInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n ((t.isIdentifier(node.callee) && node.callee.name === \"state\") ||\r\n (t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n node.callee.object.name === \"__olovaGlobal\" &&\r\n t.isIdentifier(node.callee.property) &&\r\n (node.callee.property.name === \"state\" ||\r\n node.callee.property.name === \"get\")))\r\n );\r\n}\r\n\r\nfunction isComputedInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n t.isIdentifier(node.callee) &&\r\n (node.callee.name === \"computed\" || node.callee.name === \"derived\")\r\n );\r\n}\r\n\r\nfunction appendHmrStateKey(\r\n node: t.Node | null | undefined,\r\n key: string,\r\n): void {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n if (t.isCallExpression(node) && t.isIdentifier(node.callee) && node.callee.name === \"state\") {\r\n const existingKey = node.arguments[1];\r\n if (!existingKey || !t.isStringLiteral(existingKey)) {\r\n node.arguments = [node.arguments[0] ?? t.identifier(\"undefined\"), t.stringLiteral(key)];\r\n }\r\n return;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n appendHmrStateKey(node.consequent, `${key}:then`);\r\n appendHmrStateKey(node.alternate, `${key}:else`);\r\n return;\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n appendHmrStateKey(node.left, `${key}:left`);\r\n appendHmrStateKey(node.right, `${key}:right`);\r\n }\r\n}\r\n\r\nfunction containsStateInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsStateInit(node.consequent) || containsStateInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsStateInit(node.left) || containsStateInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction containsSignalInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node) || isComputedInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsSignalInit(node.consequent) || containsSignalInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsSignalInit(node.left) || containsSignalInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isGlobalStateCall(node: t.CallExpression): boolean {\r\n return (\r\n t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n (node.callee.object.name === \"global\" ||\r\n node.callee.object.name === \"__olovaGlobal\") &&\r\n t.isIdentifier(node.callee.property) &&\r\n node.callee.property.name === \"state\"\r\n );\r\n}\r\n\r\nfunction shouldSkipIdentifierTransform(path: NodePath<t.Identifier>): boolean {\r\n if (\r\n path.parentPath?.isVariableDeclarator() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isAssignmentExpression() &&\r\n path.parentPath.node.left === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (path.parentPath?.isUpdateExpression()) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isCallExpression() &&\r\n t.isIdentifier(path.parentPath.node.callee) &&\r\n path.parentPath.node.callee.name === \"setContext\" &&\r\n path.parentPath.node.arguments.includes(path.node as t.Expression)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.property === path.node &&\r\n !path.parentPath.node.computed\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.object === path.node &&\r\n t.isIdentifier(path.parentPath.node.property) &&\r\n (path.parentPath.node.property.name === \"value\" ||\r\n path.parentPath.node.property.name === \"notify\")\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isImportSpecifier() ||\r\n path.parentPath?.isExportSpecifier()\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isObjectProperty() &&\r\n path.parentPath.node.key === path.node &&\r\n !path.parentPath.node.computed &&\r\n !(path.parentPath.node as t.ObjectProperty).shorthand\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isFunctionDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isClassDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction addNestedMutationNotify(ast: t.File, stateNames: Set<string>): void {\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n const left = path.node.left;\r\n if (!t.isMemberExpression(left)) {\r\n return;\r\n }\r\n\r\n let root: t.MemberExpression = left;\r\n while (t.isMemberExpression(root.object)) {\r\n root = root.object as t.MemberExpression;\r\n }\r\n\r\n if (!t.isIdentifier(root.object)) {\r\n return;\r\n }\r\n\r\n if (!t.isIdentifier(root.property) || root.property.name !== \"value\") {\r\n return;\r\n }\r\n\r\n const stateName = root.object.name;\r\n if (!stateNames.has(stateName)) {\r\n return;\r\n }\r\n\r\n if (left === root) {\r\n return;\r\n }\r\n\r\n if (path.parentPath?.isSequenceExpression()) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.sequenceExpression([\r\n path.node,\r\n t.callExpression(\r\n t.memberExpression(t.identifier(stateName), t.identifier(\"notify\")),\r\n [],\r\n ),\r\n ]),\r\n );\r\n path.skip();\r\n },\r\n });\r\n}\r\n\r\nfunction collectScriptInfo(script: string): {\r\n importsCode: string;\r\n scriptBodyCode: string;\r\n stateNames: Set<string>;\r\n allSignalNames: Set<string>;\r\n componentNames: Set<string>;\r\n jsxFunctionNames: Set<string>;\r\n} {\r\n const ast = parseModule(script || \"\");\r\n const stateNames = new Set<string>();\r\n const allSignalNames = new Set<string>();\r\n const componentNames = new Set<string>();\r\n const jsxFunctionNames = new Set<string>();\r\n let needsGlobalRuntime = false;\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n componentNames.add(specifier.local.name);\r\n }\r\n }\r\n\r\n const rewrittenBody: t.Statement[] = [];\r\n for (const node of ast.program.body) {\r\n if (\r\n t.isImportDeclaration(node) &&\r\n t.isStringLiteral(node.source) &&\r\n (node.source.value === \"olova/global\" || node.source.value === \"olova/core\")\r\n ) {\r\n if (node.source.value === \"olova/global\") {\r\n needsGlobalRuntime = true;\r\n const declarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n throw new Error(\r\n \"[olova] Use named imports with 'olova/global' (e.g. import { user } from 'olova/global').\",\r\n );\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n declarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (declarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", declarators));\r\n }\r\n continue;\r\n }\r\n\r\n const keptSpecifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n const globalDeclarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (CORE_KNOWN_IMPORTS.has(imported)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n globalDeclarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (keptSpecifiers.length > 0) {\r\n rewrittenBody.push(\r\n t.importDeclaration(keptSpecifiers, t.stringLiteral(\"olova/core\")),\r\n );\r\n }\r\n\r\n if (globalDeclarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", globalDeclarators));\r\n }\r\n\r\n continue;\r\n }\r\n\r\n rewrittenBody.push(node);\r\n }\r\n ast.program.body = rewrittenBody;\r\n\r\n traverse(ast, {\r\n CallExpression(path: NodePath<t.CallExpression>) {\r\n if (!isGlobalStateCall(path.node)) {\r\n return;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n path.node.callee = t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"state\"),\r\n );\r\n\r\n if (\r\n path.parentPath &&\r\n path.parentPath.isVariableDeclarator() &&\r\n t.isIdentifier(path.parentPath.node.id)\r\n ) {\r\n const firstArg = path.node.arguments[0];\r\n const alreadyNamed =\r\n !!firstArg &&\r\n t.isStringLiteral(firstArg as t.Expression) &&\r\n (firstArg as t.StringLiteral).value.length > 0;\r\n\r\n if (!alreadyNamed) {\r\n path.node.arguments = [\r\n t.stringLiteral(path.parentPath.node.id.name),\r\n ...path.node.arguments,\r\n ];\r\n }\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (!t.isIdentifier(path.node.id)) {\r\n return;\r\n }\r\n\r\n if (containsStateInit(path.node.init)) {\r\n stateNames.add(path.node.id.name);\r\n appendHmrStateKey(path.node.init, path.node.id.name);\r\n }\r\n\r\n if (containsSignalInit(path.node.init)) {\r\n allSignalNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsSignalInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const nodeContainsJsx = (node: t.Node | null | undefined): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n let found = false;\r\n try {\r\n const generated = generate(node).code;\r\n // If it's a block statement, wrap it in a function to make it parseable\r\n const code = t.isBlockStatement(node)\r\n ? `(() => ${generated})`\r\n : `(${generated})`;\r\n traverse(parseModule(code), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n } catch {\r\n // If parsing fails, assume no JSX\r\n found = false;\r\n }\r\n return found;\r\n };\r\n\r\n traverse(ast, {\r\n FunctionDeclaration(path: NodePath<t.FunctionDeclaration>) {\r\n if (path.node.id && nodeContainsJsx(path.node.body)) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (\r\n t.isIdentifier(path.node.id) &&\r\n nodeContainsJsx(path.node.init)\r\n ) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n JSXElement(path: NodePath<t.JSXElement>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n JSXFragment(path: NodePath<t.JSXFragment>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n });\r\n\r\n if (needsGlobalRuntime) {\r\n ast.program.body.unshift(\r\n t.importDeclaration(\r\n [\r\n t.importSpecifier(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"global\"),\r\n ),\r\n ],\r\n t.stringLiteral(\"olova/global\"),\r\n ),\r\n );\r\n }\r\n\r\n const importNodes = ast.program.body.filter(\r\n (node): node is t.ImportDeclaration => t.isImportDeclaration(node),\r\n );\r\n const bodyNodes = ast.program.body.filter(\r\n (node) => !t.isImportDeclaration(node),\r\n );\r\n\r\n const importsCode = importNodes.map((node) => generate(node).code).join(\"\\n\");\r\n const scriptBodyCode = bodyNodes\r\n .map((node) => generate(node).code)\r\n .join(\"\\n\");\r\n\r\n return {\r\n importsCode,\r\n scriptBodyCode,\r\n stateNames,\r\n allSignalNames,\r\n componentNames,\r\n jsxFunctionNames,\r\n };\r\n}\r\n\r\ntype TransformedExpression = {\r\n code: string;\r\n containsJsx: boolean;\r\n};\r\n\r\nfunction transformExpression(\r\n expr: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string> = new Set<string>(),\r\n scopeId?: string,\r\n): TransformedExpression {\r\n const ast = parseModule(`(${expr})`);\r\n let containsJsx = false;\r\n const jsxScopeAttr = createScopeAttr(scopeId);\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const toStringCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaToString\"), [input]);\r\n const escapeCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaEscape\"), [input]);\r\n\r\n const expressionContainsJsx = (input: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n const expressionProducesHtml = (input: t.Node | null | undefined): boolean => {\r\n if (!input) {\r\n return false;\r\n }\r\n\r\n if (expressionContainsJsx(input)) {\r\n return true;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n CallExpression(path) {\r\n if (\r\n t.isIdentifier(path.node.callee) &&\r\n jsxFunctionNames.has(path.node.callee.name)\r\n ) {\r\n found = true;\r\n path.stop();\r\n return;\r\n }\r\n\r\n if (\r\n t.isMemberExpression(path.node.callee) &&\r\n t.isIdentifier(path.node.callee.property) &&\r\n (path.node.callee.property.name === \"map\" ||\r\n path.node.callee.property.name === \"flatMap\")\r\n ) {\r\n const [firstArg] = path.node.arguments;\r\n if (\r\n (t.isIdentifier(firstArg) && jsxFunctionNames.has(firstArg.name)) ||\r\n nodeContainsRenderableFunction(firstArg, jsxFunctionNames)\r\n ) {\r\n found = true;\r\n path.stop();\r\n }\r\n }\r\n },\r\n });\r\n\r\n return found;\r\n };\r\n\r\n const nodeContainsRenderableFunction = (\r\n node: t.Node | null | undefined,\r\n knownJsxFunctions: Set<string>,\r\n ): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\r\n return (\r\n expressionContainsJsx(node.body) || expressionProducesHtml(node.body)\r\n );\r\n }\r\n\r\n if (t.isIdentifier(node)) {\r\n return knownJsxFunctions.has(node.name);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const concatExpressions = (parts: t.Expression[]): t.Expression => {\r\n if (parts.length === 0) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return parts\r\n .slice(1)\r\n .reduce<t.Expression>(\r\n (acc, current) => t.binaryExpression(\"+\", acc, current),\r\n parts[0],\r\n );\r\n };\r\n\r\n const jsxNameToString = (\r\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\r\n ): string => {\r\n if (t.isJSXIdentifier(name)) {\r\n return name.name;\r\n }\r\n\r\n if (t.isJSXNamespacedName(name)) {\r\n return `${name.namespace.name}:${name.name.name}`;\r\n }\r\n\r\n const walkMember = (\r\n node: t.JSXIdentifier | t.JSXMemberExpression,\r\n ): string => {\r\n if (t.isJSXIdentifier(node)) {\r\n return node.name;\r\n }\r\n\r\n return `${walkMember(node.object)}.${node.property.name}`;\r\n };\r\n\r\n return walkMember(name);\r\n };\r\n\r\n const transformEmbeddedJsxExpression = (\r\n input: t.Expression,\r\n ): { expression: t.Expression; containsJsx: boolean } => {\r\n const wrapped = parseModule(`(${generate(input).code})`);\r\n let containsNestedJsx = false;\r\n\r\n traverse(wrapped, {\r\n JSXElement(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = wrapped.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { expression: input, containsJsx: containsNestedJsx };\r\n }\r\n\r\n return {\r\n expression: statement.expression,\r\n containsJsx: containsNestedJsx,\r\n };\r\n };\r\n\r\n const jsxAttrToExpression = (\r\n attr: t.JSXAttribute | t.JSXSpreadAttribute,\r\n ): t.Expression => {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n attr.argument as t.Expression,\r\n );\r\n return t.callExpression(t.identifier(\"__olovaSpreadAttrs\"), [\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const name = jsxNameToString(attr.name);\r\n if (name === \"key\") {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const normalizedName = name === \"className\" ? \"class\" : name;\r\n const eventMatch = name.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (!attr.value) {\r\n return t.stringLiteral(` ${normalizedName}`);\r\n }\r\n\r\n if (t.isStringLiteral(attr.value)) {\r\n return t.stringLiteral(` ${normalizedName}=\"${attr.value.value}\"`);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(attr.value)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n (attr.value.expression as t.Expression) ?? t.stringLiteral(\"\"),\r\n );\r\n\r\n if (eventMatch) {\r\n return t.callExpression(t.identifier(\"__olovaRegisterJsxEvent\"), [\r\n t.stringLiteral(eventMatch[1].toLowerCase()),\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const valueExpression =\r\n normalizedName === \"class\"\r\n ? t.callExpression(t.identifier(\"__olovaNormalizeClassValue\"), [\r\n transformed.expression,\r\n ])\r\n : transformed.expression;\r\n\r\n return concatExpressions([\r\n t.stringLiteral(` ${normalizedName}=\"`),\r\n escapeCall(valueExpression),\r\n t.stringLiteral('\"'),\r\n ]);\r\n }\r\n\r\n return t.stringLiteral(\"\");\r\n };\r\n\r\n const jsxChildToExpression = (\r\n child:\r\n | t.JSXText\r\n | t.JSXExpressionContainer\r\n | t.JSXElement\r\n | t.JSXFragment\r\n | t.JSXSpreadChild,\r\n ): t.Expression => {\r\n if (t.isJSXText(child)) {\r\n return t.stringLiteral(child.value);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(child)) {\r\n if (t.isJSXEmptyExpression(child.expression)) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const rawExpression = child.expression as t.Expression;\r\n const transformed = transformEmbeddedJsxExpression(rawExpression);\r\n return transformed.containsJsx || expressionProducesHtml(rawExpression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXSpreadChild(child)) {\r\n const transformed = transformEmbeddedJsxExpression(child.expression);\r\n return transformed.containsJsx || expressionProducesHtml(child.expression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXElement(child)) {\r\n return jsxElementToExpression(child);\r\n }\r\n\r\n return jsxFragmentToExpression(child);\r\n };\r\n\r\n const jsxFragmentToExpression = (fragment: t.JSXFragment): t.Expression => {\r\n const parts = fragment.children.map((child) => jsxChildToExpression(child));\r\n return concatExpressions(parts);\r\n };\r\n\r\n const jsxElementToExpression = (element: t.JSXElement): t.Expression => {\r\n const opening = element.openingElement;\r\n const tag = jsxNameToString(opening.name);\r\n\r\n if (tag === \"For\") {\r\n let eachExpr: t.Expression = t.arrayExpression([]);\r\n for (const attr of opening.attributes) {\r\n if (\r\n t.isJSXAttribute(attr) &&\r\n jsxNameToString(attr.name) === \"each\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n eachExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childRenderer = element.children.find(\r\n (child): child is t.JSXExpressionContainer =>\r\n t.isJSXExpressionContainer(child) &&\r\n !t.isJSXEmptyExpression(child.expression),\r\n );\r\n if (!childRenderer) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return t.callExpression(t.identifier(\"__olovaFor\"), [\r\n eachExpr,\r\n transformEmbeddedJsxExpression(\r\n childRenderer.expression as t.Expression,\r\n ).expression,\r\n ]);\r\n }\r\n\r\n if (tag === \"Show\") {\r\n let whenExpr: t.Expression = t.booleanLiteral(false);\r\n let fallbackExpr: t.Expression = t.stringLiteral(\"\");\r\n for (const attr of opening.attributes) {\r\n if (!t.isJSXAttribute(attr)) {\r\n continue;\r\n }\r\n\r\n const attrName = jsxNameToString(attr.name);\r\n if (\r\n attrName === \"when\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n whenExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n\r\n if (\r\n attrName === \"fallback\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n fallbackExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n return t.callExpression(t.identifier(\"__olovaShow\"), [\r\n whenExpr,\r\n t.arrowFunctionExpression(\r\n [t.identifier(\"__value\")],\r\n childExpr,\r\n ),\r\n fallbackExpr,\r\n ]);\r\n }\r\n\r\n const attrExpr = concatExpressions(\r\n [\r\n ...(jsxScopeAttr ? [t.stringLiteral(` ${jsxScopeAttr}`)] : []),\r\n ...opening.attributes.map((attr) => jsxAttrToExpression(attr)),\r\n ],\r\n );\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n if (opening.selfClosing) {\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\"/>\"),\r\n ]);\r\n }\r\n\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\">\"),\r\n childExpr,\r\n t.stringLiteral(`</${tag}>`),\r\n ]);\r\n };\r\n\r\n traverse(ast, {\r\n JSXElement(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = ast.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { code: expr.trim(), containsJsx };\r\n }\r\n\r\n containsJsx = containsJsx || expressionProducesHtml(statement.expression);\r\n\r\n return { code: generate(statement.expression).code, containsJsx };\r\n}\r\n\r\nfunction parseExpressionNode(expr: string): t.Expression | null {\r\n try {\r\n const ast = parseModule(`(${expr})`);\r\n const statement = ast.program.body[0];\r\n return statement && t.isExpressionStatement(statement)\r\n ? statement.expression\r\n : null;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction isDirectEventHandlerExpression(node: t.Expression | null): boolean {\r\n return !!(\r\n node &&\r\n (t.isIdentifier(node) ||\r\n t.isMemberExpression(node) ||\r\n t.isOptionalMemberExpression(node) ||\r\n t.isArrowFunctionExpression(node) ||\r\n t.isFunctionExpression(node))\r\n );\r\n}\r\n\r\nfunction transformEventHandlerExpression(\r\n expr: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n): string {\r\n const expressionNode = parseExpressionNode(expr);\r\n const transformed = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ).code;\r\n\r\n if (isDirectEventHandlerExpression(expressionNode)) {\r\n return transformed;\r\n }\r\n\r\n return `($event) => (${transformed})`;\r\n}\r\n\r\nfunction jsxToTemplateHtml(node: t.Node): string {\r\n if (t.isJSXElement(node)) {\r\n const opening = node.openingElement;\r\n let tag = \"\";\r\n if (t.isJSXIdentifier(opening.name)) {\r\n tag = opening.name.name;\r\n } else if (t.isJSXMemberExpression(opening.name)) {\r\n const walk = (n: t.JSXIdentifier | t.JSXMemberExpression): string =>\r\n t.isJSXIdentifier(n) ? n.name : `${walk(n.object)}.${n.property.name}`;\r\n tag = walk(opening.name);\r\n } else if (t.isJSXNamespacedName(opening.name)) {\r\n tag = `${opening.name.namespace.name}:${opening.name.name.name}`;\r\n }\r\n\r\n let attrsStr = \"\";\r\n for (const attr of opening.attributes) {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n attrsStr += ` {...${generate(attr.argument).code}}`;\r\n } else {\r\n let attrName = \"\";\r\n if (t.isJSXIdentifier(attr.name)) attrName = attr.name.name;\r\n else attrName = `${attr.name.namespace.name}:${attr.name.name.name}`;\r\n\r\n if (!attr.value) attrsStr += ` ${attrName}`;\r\n else if (t.isStringLiteral(attr.value))\r\n attrsStr += ` ${attrName}=\"${attr.value.value}\"`;\r\n else if (t.isJSXExpressionContainer(attr.value)) {\r\n if (!t.isJSXEmptyExpression(attr.value.expression)) {\r\n attrsStr += ` ${attrName}={${generate(attr.value.expression).code}}`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const childrenStr = node.children.map(jsxToTemplateHtml).join(\"\");\r\n if (opening.selfClosing) {\r\n return `<${tag}${attrsStr} />`;\r\n }\r\n return `<${tag}${attrsStr}>${childrenStr}</${tag}>`;\r\n }\r\n if (t.isJSXText(node)) {\r\n return node.value;\r\n }\r\n if (t.isJSXExpressionContainer(node)) {\r\n if (t.isJSXEmptyExpression(node.expression)) return \"\";\r\n return `{${generate(node.expression).code}}`;\r\n }\r\n if (t.isJSXFragment(node)) {\r\n return node.children.map(jsxToTemplateHtml).join(\"\");\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction replaceTemplateExpressions(\r\n input: string,\r\n replacer: (expression: string) => string,\r\n): string {\r\n let output = \"\";\r\n let index = 0;\r\n let inTag = false;\r\n let tagQuote: \"'\" | '\"' | \"`\" | null = null;\r\n let tagBraceDepth = 0;\r\n\r\n while (index < input.length) {\r\n const char = input[index];\r\n const prev = index > 0 ? input[index - 1] : \"\";\r\n\r\n if (inTag) {\r\n output += char;\r\n\r\n if (tagQuote) {\r\n if (char === tagQuote && prev !== \"\\\\\") {\r\n tagQuote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n tagQuote = char;\r\n } else if (char === \"{\") {\r\n tagBraceDepth += 1;\r\n } else if (char === \"}\" && tagBraceDepth > 0) {\r\n tagBraceDepth -= 1;\r\n } else if (char === \">\" && tagBraceDepth === 0) {\r\n inTag = false;\r\n }\r\n\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"<\") {\r\n inTag = true;\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char !== \"{\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (prev === \"$\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n let depth = 1;\r\n let cursor = index + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, index);\r\n }\r\n\r\n const expression = input.slice(index + 1, cursor - 1);\r\n output += replacer(expression);\r\n index = cursor;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseProps(\r\n attrSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n let index = 0;\r\n\r\n const skipWhitespace = () => {\r\n while (index < attrSource.length && /\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n };\r\n\r\n const readValue = (): string => {\r\n const start = index;\r\n const first = attrSource[index];\r\n\r\n if (first === '\"' || first === \"'\") {\r\n index += 1;\r\n while (index < attrSource.length) {\r\n const char = attrSource[index];\r\n if (char === \"\\\\\" && index + 1 < attrSource.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n index += 1;\r\n if (char === first) {\r\n break;\r\n }\r\n }\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n if (first === \"{\") {\r\n let depth = 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n index += 1;\r\n\r\n while (index < attrSource.length && depth > 0) {\r\n const char = attrSource[index];\r\n const prev = attrSource[index - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n while (index < attrSource.length && !/\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n };\r\n\r\n while (index < attrSource.length) {\r\n skipWhitespace();\r\n if (index >= attrSource.length) {\r\n break;\r\n }\r\n\r\n const keyStart = index;\r\n while (\r\n index < attrSource.length &&\r\n !/\\s/.test(attrSource[index]) &&\r\n attrSource[index] !== \"=\"\r\n ) {\r\n index += 1;\r\n }\r\n\r\n const key = attrSource.slice(keyStart, index);\r\n if (!key) {\r\n index += 1;\r\n continue;\r\n }\r\n\r\n skipWhitespace();\r\n let rawValue: string | undefined;\r\n if (attrSource[index] === \"=\") {\r\n index += 1;\r\n skipWhitespace();\r\n if (index < attrSource.length) {\r\n rawValue = readValue();\r\n }\r\n }\r\n\r\n if (key === \"slot\") {\r\n continue;\r\n }\r\n\r\n if (!rawValue) {\r\n props.push(`${JSON.stringify(key)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n props.push(\r\n `${JSON.stringify(key)}: (${transformExpression(expr, stateNames, allSignalNames).code})`,\r\n );\r\n continue;\r\n }\r\n\r\n const quote = rawValue[0];\r\n const literal = rawValue.slice(1, -1);\r\n if (quote === '\"' || quote === \"'\") {\r\n props.push(`${JSON.stringify(key)}: ${JSON.stringify(literal)}`);\r\n }\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction parsePropsFromAttrs(\r\n attrs: Record<string, string | true>,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n\r\n for (const [key, rawValue] of Object.entries(attrs)) {\r\n if (key === \"slot\" || key === \"key\") {\r\n continue;\r\n }\r\n\r\n const propName = key === \"className\" ? \"class\" : key;\r\n\r\n if (rawValue === true) {\r\n props.push(`${JSON.stringify(propName)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const valueExpr = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ).code;\r\n props.push(\r\n `${JSON.stringify(propName)}: (${propName === \"class\" ? `__olovaNormalizeClassValue(${valueExpr})` : valueExpr})`,\r\n );\r\n continue;\r\n }\r\n\r\n props.push(`${JSON.stringify(propName)}: ${JSON.stringify(rawValue)}`);\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction findMatchingComponentClose(\r\n source: string,\r\n name: string,\r\n afterStartTag: number,\r\n): { closeStart: number; closeEnd: number } | null {\r\n const tagRe = new RegExp(`<\\\\/?${name}\\\\b[^>]*>`, \"g\");\r\n tagRe.lastIndex = afterStartTag;\r\n\r\n let depth = 0;\r\n let match = tagRe.exec(source);\r\n while (match) {\r\n const rawTag = match[0];\r\n const isClose = rawTag.startsWith(\"</\");\r\n const selfClosing = /\\/>\\s*$/.test(rawTag);\r\n\r\n if (isClose) {\r\n if (depth === 0) {\r\n return {\r\n closeStart: match.index,\r\n closeEnd: match.index + rawTag.length,\r\n };\r\n }\r\n\r\n depth -= 1;\r\n } else if (!selfClosing) {\r\n depth += 1;\r\n }\r\n\r\n match = tagRe.exec(source);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction extractNamedSlotTemplates(\r\n childrenSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n): Map<string, TemplateTransformResult> {\r\n const slots = new Map<string, TemplateTransformResult>();\r\n const slotTemplateRe =\r\n /<template\\s+slot=(\"([^\"]+)\"|'([^']+)')\\s*>([\\s\\S]*?)<\\/template>/g;\r\n\r\n let remainder = childrenSource;\r\n let match = slotTemplateRe.exec(childrenSource);\r\n while (match) {\r\n const full = match[0];\r\n const name = match[2] || match[3] || \"default\";\r\n const body = match[4] ?? \"\";\r\n slots.set(\r\n name,\r\n transformTemplate(\r\n body,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n remainder = remainder.replace(full, \"\");\r\n match = slotTemplateRe.exec(childrenSource);\r\n }\r\n\r\n if (remainder.trim()) {\r\n slots.set(\r\n \"default\",\r\n transformTemplate(\r\n remainder,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n }\r\n\r\n return slots;\r\n}\r\n\r\nfunction transformTemplate(\r\n template: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n scopeId?: string,\r\n devWarnings?: Set<string>,\r\n filename = \"component.olova\",\r\n): TemplateTransformResult {\r\n let html = template;\r\n const textBindings: TextBinding[] = [];\r\n const htmlBindings: HtmlBinding[] = [];\r\n const attrBindings: AttrBinding[] = [];\r\n const eventBindings: EventBinding[] = [];\r\n const slotBindings: SlotBinding[] = [];\r\n const componentBindings: ComponentBinding[] = [];\r\n const ifBindings: IfBinding[] = [];\r\n\r\n // PASS 1: Extract JSX conditionals BEFORE slot/event/attr regex passes\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n try {\r\n const ast = parseModule(`(${expr})`);\r\n const exprNode = ast.program.body[0];\r\n if (t.isExpressionStatement(exprNode)) {\r\n const node = exprNode.expression;\r\n const containsJsxNode = (n: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(n).code})`), {\r\n JSXElement() { found = true; },\r\n JSXFragment() { found = true; },\r\n });\r\n return found;\r\n };\r\n\r\n if (t.isLogicalExpression(node) && node.operator === \"&&\") {\r\n if (containsJsxNode(node.right)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.left).code;\r\n const trueBranchHtml = jsxToTemplateHtml(node.right);\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n } else if (t.isConditionalExpression(node)) {\r\n if (containsJsxNode(node.consequent) || containsJsxNode(node.alternate)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.test).code;\r\n const trueBranchHtml = containsJsxNode(node.consequent)\r\n ? jsxToTemplateHtml(node.consequent)\r\n : `{${generate(node.consequent).code}}`;\r\n const falseBranchHtml = containsJsxNode(node.alternate)\r\n ? jsxToTemplateHtml(node.alternate)\r\n : `{${generate(node.alternate).code}}`;\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n falseBranch: transformTemplate(\r\n falseBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n }\r\n }\r\n } catch {\r\n // ignore parse errors\r\n }\r\n\r\n return `{${expr}}`;\r\n });\r\n\r\n const rawExpressions: Array<{ id: string; expression: string }> = [];\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n const id = `raw_${rawExpressions.length}`;\r\n rawExpressions.push({ id, expression: expr });\r\n return `__O_RAW_EXPR_${id}__`;\r\n });\r\n\r\n const renderTextContent = (content: string): string => {\r\n return content.replace(\r\n /__O_RAW_EXPR_([a-zA-Z0-9_]+)__/g,\r\n (_full, exprId: string) => {\r\n const found = rawExpressions.find((entry) => entry.id === exprId);\r\n const expr = found ? found.expression : \"\";\r\n const transformed = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n if (transformed.containsJsx) {\r\n const id = `h${counters.text++}`;\r\n htmlBindings.push({\r\n id,\r\n expr: `__olovaDangerouslySetHtml(${transformed.code})`,\r\n });\r\n return `__O_HTML_${id}__`;\r\n }\r\n\r\n const id = `t${counters.text++}`;\r\n textBindings.push({ id, expr: transformed.code });\r\n return `__O_TEXT_${id}__`;\r\n },\r\n );\r\n };\r\n\r\n const renderAttrs = (element: ASTElement): string => {\r\n let output = \"\";\r\n const scopeAttr = createScopeAttr(scopeId);\r\n\r\n if (scopeAttr) {\r\n output += ` ${scopeAttr}`;\r\n }\r\n\r\n for (const [attrName, rawValue] of Object.entries(element.attrs)) {\r\n if (attrName === \"key\") {\r\n continue;\r\n }\r\n\r\n const normalizedAttrName = attrName === \"className\" ? \"class\" : attrName;\r\n const lowerAttrName = normalizedAttrName.toLowerCase();\r\n if (rawValue === true) {\r\n output += ` ${normalizedAttrName}`;\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const eventMatch = normalizedAttrName.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (eventMatch) {\r\n const id = `e${counters.event++}`;\r\n const event = eventMatch[1].toLowerCase();\r\n eventBindings.push({\r\n id,\r\n event,\r\n expr: transformEventHandlerExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ),\r\n });\r\n output += ` data-o-on-${event}=\"${id}\"`;\r\n continue;\r\n }\r\n\r\n const id = `a${counters.attr++}`;\r\n attrBindings.push({\r\n id,\r\n attr: normalizedAttrName,\r\n expr:\r\n normalizedAttrName === \"class\"\r\n ? `__olovaNormalizeClassValue(${transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code})`\r\n : transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code,\r\n });\r\n output += ` ${normalizedAttrName}=\"__O_ATTR_${id}__\"`;\r\n continue;\r\n }\r\n\r\n if (devWarnings && lowerAttrName.startsWith(\"on\")) {\r\n devWarnings.add(\r\n `[olova] Avoid static inline event attributes like \"${normalizedAttrName}\" in templates (${filename}). Prefer ${normalizedAttrName}={handler}.`,\r\n );\r\n }\r\n\r\n if (\r\n devWarnings &&\r\n (lowerAttrName === \"href\" || lowerAttrName === \"src\" || lowerAttrName === \"xlink:href\") &&\r\n /^\\s*javascript:/i.test(rawValue)\r\n ) {\r\n devWarnings.add(\r\n `[olova] Suspicious javascript: URL found in static \"${normalizedAttrName}\" attribute (${filename}).`,\r\n );\r\n }\r\n\r\n output += ` ${normalizedAttrName}=\"${rawValue.replace(/\"/g, \""\")}\"`;\r\n }\r\n\r\n return output;\r\n };\r\n\r\n const serializeRawNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return node.content;\r\n }\r\n\r\n const attrs = Object.entries(node.attrs)\r\n .map(([name, value]) => {\r\n if (value === true) {\r\n return ` ${name}`;\r\n }\r\n\r\n return ` ${name}=\"${String(value).replace(/\"/g, \""\")}\"`;\r\n })\r\n .join(\"\");\r\n const children = serializeRawNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n const renderNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return renderTextContent(node.content);\r\n }\r\n\r\n if (node.tag === \"slot\") {\r\n const id = `s${counters.slot++}`;\r\n const slotName =\r\n typeof node.attrs.name === \"string\" ? node.attrs.name : \"default\";\r\n slotBindings.push({ id, name: slotName });\r\n return `__O_SLOT_${id}__`;\r\n }\r\n\r\n if (componentNames.has(node.tag)) {\r\n const id = `c${counters.comp++}`;\r\n const namedSlotNodes = new Map<string, ASTNode[]>();\r\n const defaultNodes: ASTNode[] = [];\r\n\r\n for (const child of node.children) {\r\n if (\r\n child.type === \"element\" &&\r\n child.tag === \"template\" &&\r\n typeof child.attrs.slot === \"string\"\r\n ) {\r\n namedSlotNodes.set(child.attrs.slot, child.children);\r\n continue;\r\n }\r\n\r\n defaultNodes.push(child);\r\n }\r\n\r\n const slotFactories: SlotFactoryDef[] = [];\r\n if (node.tag === \"Suspense\" && typeof node.attrs.fallback === \"string\") {\r\n const rawValue = node.attrs.fallback;\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const fallbackExpression = rawValue.slice(1, -1).trim();\r\n const fallbackAst = parseModule(`(${fallbackExpression})`);\r\n const fallbackStatement = fallbackAst.program.body[0];\r\n const fallbackNode =\r\n fallbackStatement && t.isExpressionStatement(fallbackStatement)\r\n ? fallbackStatement.expression\r\n : null;\r\n\r\n if (fallbackNode && (t.isJSXElement(fallbackNode) || t.isJSXFragment(fallbackNode))) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: transformTemplate(\r\n jsxToTemplateHtml(fallbackNode),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n } else {\r\n const transformedFallback = transformExpression(\r\n fallbackExpression,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const fallbackBindingId = `fallback_${id}`;\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: {\r\n html: `__O_HTML_${fallbackBindingId}__`,\r\n textBindings: [],\r\n htmlBindings: [\r\n {\r\n id: fallbackBindingId,\r\n expr: transformedFallback.containsJsx\r\n ? `__olovaDangerouslySetHtml(${transformedFallback.code})`\r\n : transformedFallback.code,\r\n },\r\n ],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n ifBindings: [],\r\n buildFnStr: generateBuildFunction(\r\n `__O_HTML_${fallbackBindingId}__`,\r\n stateNames,\r\n (expr) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ),\r\n counters,\r\n componentNames,\r\n ),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (defaultNodes.length > 0) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_default`,\r\n name: \"default\",\r\n descriptor: transformTemplate(\r\n serializeRawNodes(defaultNodes),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n }\r\n\r\n for (const [slotName, slotChildren] of namedSlotNodes.entries()) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_${slotName.replace(/[^A-Za-z0-9_$]/g, \"_\")}`,\r\n name: slotName,\r\n descriptor: transformTemplate(\r\n serializeRawNodes(slotChildren),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n ),\r\n });\r\n }\r\n\r\n componentBindings.push({\r\n id,\r\n component: node.tag,\r\n propsExpr: parsePropsFromAttrs(\r\n node.tag === \"Suspense\"\r\n ? Object.fromEntries(\r\n Object.entries(node.attrs).filter(([key]) => key !== \"fallback\"),\r\n )\r\n : node.attrs,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ),\r\n slotFactories,\r\n });\r\n return `__O_COMP_${id}__`;\r\n }\r\n\r\n const attrs = renderAttrs(node);\r\n const children = renderNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n html = renderNodes(parseHTML(html));\r\n\r\n const resolveExpr = (expr: string) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const buildFnStr = generateBuildFunction(\r\n html,\r\n stateNames,\r\n resolveExpr,\r\n counters,\r\n componentNames,\r\n );\r\n\r\n return {\r\n html: escapeTemplate(html),\r\n textBindings,\r\n htmlBindings,\r\n attrBindings,\r\n eventBindings,\r\n slotBindings,\r\n componentBindings,\r\n ifBindings,\r\n buildFnStr,\r\n };\r\n}\r\n\r\nfunction indentBlock(code: string, spaces = 2): string {\r\n const pad = \" \".repeat(spaces);\r\n if (!code.trim()) {\r\n return \"\";\r\n }\r\n\r\n return code\r\n .split(\"\\n\")\r\n .map((line) => `${pad}${line}`)\r\n .join(\"\\n\");\r\n}\r\n\r\nfunction renderDescriptorLiteral(\r\n descriptor: TemplateTransformResult,\r\n indent = \" \",\r\n): string {\r\n const slotFactoryDecls = descriptor.componentBindings.flatMap((binding) =>\r\n binding.slotFactories.map(\r\n (slot) =>\r\n `${indent}const ${slot.varName} = () => (${renderDescriptorLiteral(slot.descriptor, indent + \" \")});`,\r\n ),\r\n );\r\n\r\n const componentBindingsCode = descriptor.componentBindings\r\n .map((binding) => {\r\n const slotsObject =\r\n binding.slotFactories.length === 0\r\n ? \"{}\"\r\n : `{ ${binding.slotFactories.map((slot) => `${JSON.stringify(slot.name)}: ${slot.varName}`).join(\", \")} }`;\r\n\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, getComponent: () => ${binding.component}, getProps: () => (${binding.propsExpr}), getSlots: () => (${slotsObject}) }`;\r\n })\r\n .join(\",\\n\");\r\n\r\n const buildLines = descriptor.buildFnStr\r\n ? `${indent}build: ${descriptor.buildFnStr.replace(/\\n /g, \"\\n\" + indent)},`\r\n : \"\";\r\n\r\n const objectLiteral = `{\r\n${buildLines}\r\n${indent}textBindings: [\r\n${descriptor.textBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}htmlBindings: [\r\n${descriptor.htmlBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}attrBindings: [\r\n${descriptor.attrBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, attr: ${JSON.stringify(binding.attr)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}eventBindings: [\r\n${descriptor.eventBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, event: ${JSON.stringify(binding.event)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}slotBindings: [\r\n${descriptor.slotBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, name: ${JSON.stringify(binding.name)} }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}componentBindings: [\r\n${componentBindingsCode}\r\n${indent}],\r\n${indent}ifBindings: [\r\n${descriptor.ifBindings\r\n .map((binding) => {\r\n const trueFactory = `() => (${renderDescriptorLiteral(binding.trueBranch, indent + \" \")})`;\r\n const falseFactory = binding.falseBranch\r\n ? `() => (${renderDescriptorLiteral(binding.falseBranch, indent + \" \")})`\r\n : \"undefined\";\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}), trueBranch: ${trueFactory}, falseBranch: ${falseFactory} }`;\r\n })\r\n .join(\",\\n\")}\r\n${indent}]\r\n${indent}}`;\r\n\r\n if (slotFactoryDecls.length === 0) {\r\n return objectLiteral;\r\n }\r\n\r\n const outerIndent = indent.length >= 2 ? indent.slice(2) : \"\";\r\n return `(() => {\\n${slotFactoryDecls.join(\"\\n\")}\\n${indent}return ${objectLiteral};\\n${outerIndent}})()`;\r\n}\r\n\r\nfunction collectImportLines(importsCode: string): string[] {\r\n return importsCode\r\n .split(\"\\n\")\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction uniqueLines(lines: string[]): string[] {\r\n const seen = new Set<string>();\r\n const output: string[] = [];\r\n\r\n for (const line of lines) {\r\n if (seen.has(line)) {\r\n continue;\r\n }\r\n\r\n seen.add(line);\r\n output.push(line);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction extractTemplateExpressions(input: string): {\r\n output: string;\r\n expressions: Array<{ id: string; expression: string }>;\r\n} {\r\n const expressions: Array<{ id: string; expression: string }> = [];\r\n let output = \"\";\r\n let index = 0;\r\n let count = 0;\r\n\r\n while (index < input.length) {\r\n const start = input.indexOf(\"{\", index);\r\n if (start < 0) {\r\n output += input.slice(index);\r\n break;\r\n }\r\n\r\n let prevIndex = start - 1;\r\n while (prevIndex >= 0 && /\\s/.test(input[prevIndex])) {\r\n prevIndex -= 1;\r\n }\r\n\r\n if (prevIndex >= 0 && input[prevIndex] === \"=\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n if (start > 0 && input[start - 1] === \"$\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n output += input.slice(index, start);\r\n\r\n let depth = 1;\r\n let cursor = start + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, start);\r\n }\r\n\r\n const id = `x${count++}`;\r\n expressions.push({\r\n id,\r\n expression: input.slice(start + 1, cursor - 1),\r\n });\r\n output += `__O_EXPR_${id}__`;\r\n index = cursor;\r\n }\r\n\r\n return { output, expressions };\r\n}\r\n\r\nfunction mergeImportLines(lines: string[]): string {\r\n const merged = new Map<\r\n string,\r\n {\r\n defaultImport?: string;\r\n namespaceImport?: string;\r\n namedImports: Map<string, string>;\r\n sideEffectOnly: boolean;\r\n }\r\n >();\r\n\r\n for (const line of uniqueLines(lines)) {\r\n const ast = parseModule(line);\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n const source = node.source.value;\r\n const entry =\r\n merged.get(source) ??\r\n {\r\n namedImports: new Map<string, string>(),\r\n sideEffectOnly: true,\r\n };\r\n\r\n if (node.specifiers.length > 0) {\r\n entry.sideEffectOnly = false;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n if (t.isImportDefaultSpecifier(specifier)) {\r\n entry.defaultImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n if (t.isImportNamespaceSpecifier(specifier)) {\r\n entry.namespaceImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (!entry.namedImports.has(imported)) {\r\n entry.namedImports.set(imported, specifier.local.name);\r\n }\r\n }\r\n\r\n merged.set(source, entry);\r\n }\r\n }\r\n\r\n const output: string[] = [];\r\n\r\n for (const [source, entry] of merged.entries()) {\r\n if (entry.sideEffectOnly) {\r\n output.push(generate(t.importDeclaration([], t.stringLiteral(source))).code);\r\n continue;\r\n }\r\n\r\n const specifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n\r\n if (entry.defaultImport) {\r\n specifiers.push(t.importDefaultSpecifier(t.identifier(entry.defaultImport)));\r\n }\r\n\r\n if (entry.namespaceImport) {\r\n specifiers.push(\r\n t.importNamespaceSpecifier(t.identifier(entry.namespaceImport)),\r\n );\r\n }\r\n\r\n for (const [imported, local] of entry.namedImports.entries()) {\r\n specifiers.push(\r\n t.importSpecifier(\r\n t.identifier(local),\r\n t.identifier(imported),\r\n ),\r\n );\r\n }\r\n\r\n output.push(\r\n generate(t.importDeclaration(specifiers, t.stringLiteral(source))).code,\r\n );\r\n }\r\n\r\n return output.join(\"\\n\");\r\n}\r\n\r\nfunction buildComponentCode(\r\n parsed: ParsedOlovaFile,\r\n options?: { exportName?: string; scopeId?: string; hmrId?: string; dev?: boolean },\r\n): { importsCode: string; code: string } {\r\n const scriptInfo = collectScriptInfo(parsed.script);\r\n const counters: TransformContext = {\r\n text: 0,\r\n attr: 0,\r\n event: 0,\r\n comp: 0,\r\n slot: 0,\r\n if: 0,\r\n };\r\n const warnings = options?.dev ? new Set<string>() : undefined;\r\n\r\n const transformed = runCompilePhase(\"transform-template\", () =>\r\n transformTemplate(\r\n parsed.template,\r\n scriptInfo.stateNames,\r\n scriptInfo.allSignalNames,\r\n scriptInfo.jsxFunctionNames,\r\n scriptInfo.componentNames,\r\n counters,\r\n options?.scopeId,\r\n warnings,\r\n options?.hmrId ?? \"component.olova\",\r\n ),\r\n );\r\n\r\n const exportHead = options?.exportName\r\n ? `export const ${options.exportName} = __defineComponent((__props, __slots) => {`\r\n : `const __olovaComponent = __defineComponent((__props, __slots) => {`;\r\n const exportTail = options?.exportName\r\n ? `}, ${JSON.stringify(options?.hmrId)});`\r\n : `}, ${JSON.stringify(options?.hmrId)});\\nexport default __olovaComponent;`;\r\n const hmrCode =\r\n options?.dev && !options?.exportName && options?.hmrId\r\n ? `\r\nif (import.meta.hot) {\r\n import.meta.hot.accept((nextModule) => {\r\n if (nextModule?.default) {\r\n __replaceComponent(__olovaComponent, nextModule.default);\r\n }\r\n });\r\n}\r\n`\r\n : \"\";\r\n\r\n if (warnings) {\r\n emitDevWarnings(warnings);\r\n }\r\n\r\n const code = `\r\n${exportHead}\r\n const props = __props;\r\n const slots = __slots;\r\n const __olovaGlobalObj = globalThis;\r\n const __olovaJsxHandlers =\r\n __olovaGlobalObj.__olovaJsxHandlers ?? (__olovaGlobalObj.__olovaJsxHandlers = new Map());\r\n const __olovaNextJsxEventId = () => {\r\n __olovaGlobalObj.__olovaJsxEventId = (__olovaGlobalObj.__olovaJsxEventId ?? 0) + 1;\r\n return String(__olovaGlobalObj.__olovaJsxEventId);\r\n };\r\n if (typeof __olovaGlobalObj.__olovaDispatchJsxEvent !== 'function') {\r\n __olovaGlobalObj.__olovaDispatchJsxEvent = (event, element) => {\r\n const key = element?.getAttribute?.('data-o-jsx-' + event.type);\r\n if (!key) {\r\n return;\r\n }\r\n\r\n const handler = __olovaJsxHandlers.get(key);\r\n if (typeof handler === 'function') {\r\n handler(event);\r\n }\r\n };\r\n }\r\n const __olovaRegisterJsxEvent = (eventName, handler) => {\r\n if (typeof handler !== 'function') {\r\n return '';\r\n }\r\n\r\n const id = __olovaNextJsxEventId();\r\n __olovaJsxHandlers.set(id, handler);\r\n return ' data-o-jsx-' + eventName + '=\"' + id + '\" on' + eventName + '=\"window.__olovaDispatchJsxEvent(event, this)\"';\r\n };\r\n const __olovaToString = (value) =>\r\n Array.isArray(value)\r\n ? value.map(__olovaToString).join('')\r\n : value == null || value === false || value === true\r\n ? ''\r\n : String(value);\r\n const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });\r\n const __olovaNormalizeClassValue = (value) => {\r\n if (value == null || value === false) {\r\n return '';\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(__olovaNormalizeClassValue).filter(Boolean).join(' ');\r\n }\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([key]) => key)\r\n .join(' ');\r\n }\r\n return String(value);\r\n };\r\n const __olovaEscape = (value) =>\r\n __olovaToString(value)\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\\\"/g, '"')\r\n .replace(/'/g, ''');\r\n const __olovaSpreadAttrs = (input) => {\r\n if (input == null || input === false) {\r\n return '';\r\n }\r\n if (Array.isArray(input)) {\r\n return input.map(__olovaSpreadAttrs).join('');\r\n }\r\n if (typeof input !== 'object') {\r\n return '';\r\n }\r\n\r\n return Object.entries(input).reduce((acc, [key, value]) => {\r\n if (value == null || value === false) {\r\n return acc;\r\n }\r\n const attrKey = key === 'className' ? 'class' : key;\r\n const normalizedValue = attrKey === 'class'\r\n ? __olovaNormalizeClassValue(value)\r\n : value;\r\n if (attrKey === 'key') {\r\n return acc;\r\n }\r\n if (normalizedValue == null || normalizedValue === false || normalizedValue === '') {\r\n return acc;\r\n }\r\n if (normalizedValue === true) {\r\n return acc + ' ' + attrKey;\r\n }\r\n return acc + ' ' + attrKey + '=\"' + __olovaEscape(normalizedValue) + '\"';\r\n }, '');\r\n };\r\n const __olovaFor = (each, render) => {\r\n if (!Array.isArray(each) || typeof render !== 'function') {\r\n return '';\r\n }\r\n return each.map((item, index) => render(item, index));\r\n };\r\n const __olovaShow = (when, render, fallback = '') => {\r\n if (!when) {\r\n return fallback;\r\n }\r\n return typeof render === 'function' ? render(when) : render;\r\n };\r\n${indentBlock(scriptInfo.scriptBodyCode, 2)}\r\n\r\n return ${renderDescriptorLiteral(transformed, \" \")};\r\n${exportTail}\r\n${hmrCode}\r\n`;\r\n\r\n return { importsCode: scriptInfo.importsCode, code };\r\n}\r\n\r\nexport interface CompileOptions {\r\n filename?: string;\r\n dev?: boolean;\r\n exportName?: string;\r\n}\r\n\r\nexport type CompilePhasesResult = {\r\n parsed: ParsedOlovaFile;\r\n script: ReturnType<typeof collectScriptInfo>;\r\n template: TemplateTransformResult;\r\n scopeId?: string;\r\n};\r\n\r\nexport function analyzeOlovaPhases(\r\n source: string,\r\n options?: CompileOptions,\r\n): CompilePhasesResult {\r\n const filename = options?.filename ?? \"component.olova\";\r\n try {\r\n const parsed = runCompilePhase(\"parse-file\", () =>\r\n parseOlovaFile(source),\r\n );\r\n const script = runCompilePhase(\"analyze-script\", () =>\r\n collectScriptInfo(parsed.script),\r\n );\r\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\r\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\r\n : undefined;\r\n const template = runCompilePhase(\"transform-template\", () =>\r\n transformTemplate(\r\n parsed.template,\r\n script.stateNames,\r\n script.allSignalNames,\r\n script.jsxFunctionNames,\r\n script.componentNames,\r\n {\r\n text: 0,\r\n attr: 0,\r\n event: 0,\r\n comp: 0,\r\n slot: 0,\r\n if: 0,\r\n },\r\n scopeId,\r\n options?.dev ? new Set<string>() : undefined,\r\n filename,\r\n ),\r\n );\r\n\r\n return {\r\n parsed,\r\n script,\r\n template,\r\n scopeId,\r\n };\r\n } catch (error) {\r\n return normalizeCompileError(error, source, filename);\r\n }\r\n}\r\n\r\nexport function compileOlovaScriptModule(\r\n source: string,\r\n options?: CompileOptions,\r\n): CompileResult {\r\n try {\r\n return runCompilePhase(\"analyze-script\", () => {\r\n const scriptInfo = collectScriptInfo(source);\r\n return runCompilePhase(\"transpile\", () =>\r\n transpileTypeScript(\r\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\r\n options?.filename ?? \"module.ts\",\r\n ),\r\n );\r\n });\r\n } catch (error) {\r\n return normalizeCompileError(error, source, options?.filename ?? \"module.ts\");\r\n }\r\n}\r\n\r\nexport function compileOlova(source: string, options?: CompileOptions): CompileResult {\r\n const filename = options?.filename ?? \"component.olova\";\r\n try {\r\n return runCompilePhase(\"parse-file\", () => {\r\n const parsed = parseOlovaFile(source);\r\n\r\n if (!parsed.template.trim() && isModuleOnlyScript(parsed.script)) {\r\n const moduleResult = compileModuleScript(parsed.script, `${filename}.ts`);\r\n const css = runCompilePhase(\"generate-module\", () =>\r\n collectCss(parsed.styles),\r\n );\r\n return {\r\n ...moduleResult,\r\n css,\r\n };\r\n }\r\n\r\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\r\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\r\n : undefined;\r\n const compiled = runCompilePhase(\"generate-module\", () =>\r\n buildComponentCode(parsed, {\r\n scopeId,\r\n hmrId: filename,\r\n dev: options?.dev,\r\n }),\r\n );\r\n const runtimeImport = options?.dev\r\n ? `import { defineComponent as __defineComponent, replaceComponent as __replaceComponent } from 'olova/runtime';`\r\n : `import { defineComponent as __defineComponent } from 'olova/runtime';`;\r\n const result = runCompilePhase(\"transpile\", () => transpileTypeScript(`\r\n${runtimeImport}\r\n${compiled.importsCode}\r\n${compiled.code}\r\n`, `${filename}.ts`));\r\n const css = runCompilePhase(\"generate-module\", () =>\r\n collectCss(parsed.styles, scopeId),\r\n );\r\n return {\r\n ...result,\r\n css,\r\n };\r\n });\r\n } catch (error) {\r\n return normalizeCompileError(error, source, filename);\r\n }\r\n}\r\n"]}
|