elit 3.5.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +80 -2
  2. package/dist/build.d.mts +1 -1
  3. package/dist/cli.js +178 -54
  4. package/dist/config.d.mts +1 -1
  5. package/dist/coverage.d.mts +1 -1
  6. package/dist/http.d.ts.map +1 -1
  7. package/dist/http.js +5 -4
  8. package/dist/http.js.map +1 -1
  9. package/dist/http.mjs +5 -4
  10. package/dist/http.mjs.map +1 -1
  11. package/dist/https.js +5 -4
  12. package/dist/https.js.map +1 -1
  13. package/dist/https.mjs +5 -4
  14. package/dist/https.mjs.map +1 -1
  15. package/dist/index.d.mts +1 -1
  16. package/dist/index.js +20 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.mjs +20 -1
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/native.js +20 -1
  21. package/dist/native.js.map +1 -1
  22. package/dist/native.mjs +20 -1
  23. package/dist/native.mjs.map +1 -1
  24. package/dist/{server-DpnTyF7I.d.mts → server--YFoC6ln.d.mts} +27 -0
  25. package/dist/{server-BU71N4fk.d.ts → server-DacsdjFJ.d.ts} +27 -0
  26. package/dist/server.d.mts +1 -1
  27. package/dist/server.d.ts.map +1 -1
  28. package/dist/server.js +141 -52
  29. package/dist/server.js.map +1 -1
  30. package/dist/server.mjs +141 -52
  31. package/dist/server.mjs.map +1 -1
  32. package/dist/state.d.ts.map +1 -1
  33. package/dist/state.js +20 -1
  34. package/dist/state.js.map +1 -1
  35. package/dist/state.mjs +20 -1
  36. package/dist/state.mjs.map +1 -1
  37. package/dist/types.d.mts +28 -1
  38. package/dist/types.d.ts +27 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/types.js.map +1 -1
  41. package/dist/ws.d.mts +1 -1
  42. package/dist/ws.d.ts +1 -1
  43. package/dist/ws.d.ts.map +1 -1
  44. package/dist/ws.js +9 -4
  45. package/dist/ws.js.map +1 -1
  46. package/dist/ws.mjs +9 -4
  47. package/dist/ws.mjs.map +1 -1
  48. package/dist/wss.js +14 -8
  49. package/dist/wss.js.map +1 -1
  50. package/dist/wss.mjs +14 -8
  51. package/dist/wss.mjs.map +1 -1
  52. package/package.json +1 -1
  53. package/src/cli.ts +18 -0
  54. package/src/http.ts +5 -4
  55. package/src/server.ts +182 -56
  56. package/src/state.ts +25 -1
  57. package/src/types.ts +30 -0
  58. package/src/ws.ts +12 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render-context.ts","../src/dom.ts","../src/state.ts"],"sourcesContent":["import type { VNode } from './types';\n\nexport type RenderRuntimeTarget = 'web' | 'desktop' | 'mobile' | 'unknown';\n\nexport interface DesktopInteractionOutputOptions {\n file?: string;\n stdout?: boolean;\n emitReady?: boolean;\n}\n\nexport interface DesktopRenderOptions {\n title?: string;\n width?: number;\n height?: number;\n center?: boolean;\n icon?: string;\n autoClose?: boolean;\n interactionOutput?: DesktopInteractionOutputOptions;\n}\n\nexport interface CapturedRenderState {\n rootElement: string | unknown;\n target: RenderRuntimeTarget;\n vNode: VNode;\n}\n\nconst RUNTIME_TARGET_KEY = '__ELIT_RUNTIME_TARGET__';\nconst CAPTURED_RENDER_KEY = '__ELIT_CAPTURED_RENDER__';\nconst DESKTOP_RENDER_OPTIONS_KEY = '__ELIT_DESKTOP_RENDER_OPTIONS__';\nconst RUNTIME_TARGET_ENV = 'ELIT_RUNTIME_TARGET';\n\ntype GlobalRenderScope = typeof globalThis & {\n [RUNTIME_TARGET_KEY]?: RenderRuntimeTarget;\n [CAPTURED_RENDER_KEY]?: CapturedRenderState;\n [DESKTOP_RENDER_OPTIONS_KEY]?: DesktopRenderOptions;\n createWindow?: unknown;\n document?: Document;\n process?: {\n argv?: string[];\n env?: Record<string, string | undefined>;\n };\n window?: Window & typeof globalThis;\n};\n\nfunction getGlobalRenderScope(): GlobalRenderScope {\n return globalThis as GlobalRenderScope;\n}\n\nfunction isRenderRuntimeTarget(value: unknown): value is RenderRuntimeTarget {\n return value === 'web' || value === 'desktop' || value === 'mobile' || value === 'unknown';\n}\n\nexport function detectRenderRuntimeTarget(): RenderRuntimeTarget {\n const globalScope = getGlobalRenderScope();\n const explicitTarget = globalScope[RUNTIME_TARGET_KEY] ?? globalScope.process?.env?.[RUNTIME_TARGET_ENV];\n\n if (isRenderRuntimeTarget(explicitTarget)) {\n return explicitTarget;\n }\n\n if (typeof globalScope.document !== 'undefined' && typeof globalScope.window !== 'undefined') {\n return 'web';\n }\n\n if (typeof globalScope.createWindow === 'function') {\n return 'desktop';\n }\n\n const argv = Array.isArray(globalScope.process?.argv)\n ? globalScope.process!.argv!.join(' ')\n : '';\n\n if (/\\bdesktop\\b/i.test(argv)) {\n return 'desktop';\n }\n\n if (/\\b(mobile|native)\\b/i.test(argv)) {\n return 'mobile';\n }\n\n return 'unknown';\n}\n\nexport function setRenderRuntimeTarget(target: RenderRuntimeTarget): RenderRuntimeTarget | undefined {\n const globalScope = getGlobalRenderScope();\n const previousTarget = globalScope[RUNTIME_TARGET_KEY];\n globalScope[RUNTIME_TARGET_KEY] = target;\n return previousTarget;\n}\n\nexport function restoreRenderRuntimeTarget(target?: RenderRuntimeTarget): void {\n const globalScope = getGlobalRenderScope();\n\n if (target === undefined) {\n delete globalScope[RUNTIME_TARGET_KEY];\n return;\n }\n\n globalScope[RUNTIME_TARGET_KEY] = target;\n}\n\nexport function captureRenderedVNode(\n rootElement: string | unknown,\n vNode: VNode,\n target = detectRenderRuntimeTarget(),\n): void {\n const globalScope = getGlobalRenderScope();\n globalScope[RUNTIME_TARGET_KEY] = target;\n globalScope[CAPTURED_RENDER_KEY] = {\n rootElement,\n target,\n vNode,\n };\n}\n\nexport function getCapturedRenderedVNode(): CapturedRenderState | undefined {\n return getGlobalRenderScope()[CAPTURED_RENDER_KEY];\n}\n\nexport function clearCapturedRenderedVNode(): void {\n delete getGlobalRenderScope()[CAPTURED_RENDER_KEY];\n}\n\nexport function setDesktopRenderOptions(options: DesktopRenderOptions): void {\n const globalScope = getGlobalRenderScope();\n globalScope[DESKTOP_RENDER_OPTIONS_KEY] = {\n ...(globalScope[DESKTOP_RENDER_OPTIONS_KEY] ?? {}),\n ...options,\n };\n}\n\nexport function getDesktopRenderOptions(): DesktopRenderOptions | undefined {\n return getGlobalRenderScope()[DESKTOP_RENDER_OPTIONS_KEY];\n}\n\nexport function clearDesktopRenderOptions(): void {\n delete getGlobalRenderScope()[DESKTOP_RENDER_OPTIONS_KEY];\n}","/**\n * Elit - DomNode Core Class\n */\n\nimport { captureRenderedVNode, detectRenderRuntimeTarget } from './render-context';\nimport type { VNode, Child, Children, Props, State, StateOptions, VirtualListController, JsonNode, VNodeJson } from './types';\n\n/**\n * Helper: Resolve element from string ID or HTMLElement (eliminates duplication in render methods)\n */\nfunction resolveElement(rootElement: string | HTMLElement): HTMLElement | null {\n return typeof rootElement === 'string'\n ? document.getElementById(rootElement.replace('#', ''))\n : rootElement;\n}\n\n/**\n * Helper: Ensure element exists or throw error (eliminates duplication in validation)\n */\nfunction ensureElement(el: HTMLElement | null, rootElement: string | HTMLElement): HTMLElement {\n if (!el) {\n throw new Error(`Element not found: ${rootElement}`);\n }\n return el;\n}\n\n/**\n * Helper: Check if child should be skipped (eliminates duplication in child rendering)\n */\nfunction shouldSkipChild(child: any): boolean {\n return child == null || child === false;\n}\n\n/**\n * Helper: Check if value is primitive JSON type (eliminates duplication in JSON conversion)\n */\nfunction isPrimitiveJson(json: any): json is string | number | boolean | null | undefined {\n return json == null || typeof json === 'boolean' || typeof json === 'string' || typeof json === 'number';\n}\n\nfunction normalizeFormControlValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map((entry) => String(entry)).join(',');\n }\n\n return value == null ? '' : String(value);\n}\n\nfunction resolveTextareaValue(tagName: string, props: Props): string | undefined {\n return tagName === 'textarea' && props.value != null\n ? normalizeFormControlValue(props.value)\n : undefined;\n}\n\nfunction hasDocumentApi(): boolean {\n return typeof document !== 'undefined';\n}\n\nexport class DomNode {\n private elementCache = new WeakMap<Element, boolean>();\n\n createElement(tagName: string, props: Props = {}, children: Children = []): VNode {\n return { tagName, props, children };\n }\n\n renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {\n if (vNode == null || vNode === false) return;\n\n // Handle primitive values (strings, numbers)\n if (typeof vNode !== 'object') {\n parent.appendChild(document.createTextNode(String(vNode)));\n return;\n }\n\n if (this.isState(vNode)) {\n const textNode = document.createTextNode(String(vNode.value ?? ''));\n parent.appendChild(textNode);\n vNode.subscribe((newValue) => {\n textNode.textContent = String(newValue ?? '');\n });\n return;\n }\n\n // Handle arrays (Child[])\n if (Array.isArray(vNode)) {\n for (const child of vNode) {\n this.renderToDOM(child, parent);\n }\n return;\n }\n\n // Handle VNode\n const { tagName, props, children } = vNode;\n const textareaValue = resolveTextareaValue(tagName, props);\n\n // Handle fragment (empty tagName) - render children directly to parent\n if (!tagName) {\n // Fragments don't have their own element, so skip ref handling\n // The ref will be handled by the wrapper element created by reactive()\n // Render children directly to parent\n for (const child of children) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n !shouldSkipChild(c) && this.renderToDOM(c, parent);\n }\n } else {\n this.renderToDOM(child, parent);\n }\n }\n return;\n }\n\n const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||\n (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';\n\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', tagName.replace('svg', '').toLowerCase() || tagName)\n : document.createElement(tagName);\n\n for (const key in props) {\n const value = props[key];\n if (value == null || value === false) continue;\n\n const c = key.charCodeAt(0);\n // class or className (c=99)\n if (c === 99 && (key.length < 6 || key[5] === 'N')) {\n const classValue = Array.isArray(value) ? value.join(' ') : value;\n isSVG ? (el as SVGElement).setAttribute('class', classValue) : (el as HTMLElement).className = classValue;\n }\n // style (s=115)\n else if (c === 115 && key.length === 5) {\n if (typeof value === 'string') {\n (el as HTMLElement).style.cssText = value;\n } else {\n const s = (el as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n }\n }\n // on* events (o=111, n=110)\n else if (c === 111 && key.charCodeAt(1) === 110) {\n (el as any)[key.toLowerCase()] = value;\n }\n // dangerouslySetInnerHTML (d=100)\n else if (c === 100 && key.length > 20) {\n (el as HTMLElement).innerHTML = value.__html;\n }\n // ref (r=114)\n else if (c === 114 && key === 'ref') {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else if (textareaValue !== undefined && key === 'value') {\n continue;\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const renderableChildren = textareaValue === undefined ? children : [];\n const len = renderableChildren.length;\n if (!len) {\n if (textareaValue !== undefined) {\n (el as HTMLTextAreaElement).value = textareaValue;\n }\n parent.appendChild(el);\n return;\n }\n\n const renderChildren = (target: HTMLElement | SVGElement | DocumentFragment) => {\n for (let i = 0; i < len; i++) {\n const child = renderableChildren[i];\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n !shouldSkipChild(c) && this.renderToDOM(c, target);\n }\n } else {\n this.renderToDOM(child, target);\n }\n }\n };\n\n if (len > 30) {\n const fragment = document.createDocumentFragment();\n renderChildren(fragment);\n el.appendChild(fragment);\n } else {\n renderChildren(el);\n }\n\n parent.appendChild(el);\n }\n\n render(rootElement: string | HTMLElement, vNode: VNode): HTMLElement {\n if (!hasDocumentApi()) {\n const runtimeTarget = detectRenderRuntimeTarget();\n\n if (runtimeTarget === 'desktop' || runtimeTarget === 'mobile') {\n captureRenderedVNode(rootElement, vNode, runtimeTarget);\n return {} as HTMLElement;\n }\n\n throw new Error('render() requires a DOM or an Elit desktop/mobile runtime target.');\n }\n\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n // Clear existing content before rendering\n el.innerHTML = '';\n\n if (vNode.children && vNode.children.length > 500) {\n const fragment = document.createDocumentFragment();\n this.renderToDOM(vNode, fragment);\n el.appendChild(fragment);\n } else {\n this.renderToDOM(vNode, el);\n }\n return el;\n }\n\n batchRender(rootElement: string | HTMLElement, vNodes: VNode[]): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n\n if (len > 3000) {\n const fragment = document.createDocumentFragment();\n let processed = 0;\n const chunkSize = 1500;\n\n const processChunk = (): void => {\n const end = Math.min(processed + chunkSize, len);\n for (let i = processed; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n processed = end;\n\n if (processed >= len) {\n el.appendChild(fragment);\n } else {\n requestAnimationFrame(processChunk);\n }\n };\n\n processChunk();\n } else {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < len; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n el.appendChild(fragment);\n }\n return el;\n }\n\n renderChunked(\n rootElement: string | HTMLElement,\n vNodes: VNode[],\n chunkSize = 5000,\n onProgress?: (current: number, total: number) => void\n ): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n let index = 0;\n\n const renderChunk = (): void => {\n const end = Math.min(index + chunkSize, len);\n const fragment = document.createDocumentFragment();\n\n for (let i = index; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n\n el.appendChild(fragment);\n index = end;\n\n if (onProgress) onProgress(index, len);\n\n if (index < len) {\n requestAnimationFrame(renderChunk);\n }\n };\n\n requestAnimationFrame(renderChunk);\n return el;\n }\n\n renderToHead(...vNodes: Array<VNode | VNode[]>): HTMLHeadElement | null {\n const head = document.head;\n if (head) {\n for (const vNode of vNodes.flat()) {\n vNode && this.renderToDOM(vNode, head);\n }\n }\n return head;\n }\n\n addStyle(cssText: string): HTMLStyleElement {\n const el = document.createElement('style');\n el.textContent = cssText;\n return document.head.appendChild(el);\n }\n\n addMeta(attrs: Record<string, string>): HTMLMetaElement {\n const el = document.createElement('meta');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n addLink(attrs: Record<string, string>): HTMLLinkElement {\n const el = document.createElement('link');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n setTitle(text: string): string {\n return document.title = text;\n }\n\n // Reactive State Management\n createState<T>(initialValue: T, options: StateOptions = {}): State<T> {\n let value = initialValue;\n const listeners = new Set<(value: T) => void>();\n let updateTimer: NodeJS.Timeout | null = null;\n const { throttle = 0, deep = false } = options;\n\n const notify = () => listeners.forEach(fn => fn(value));\n\n const scheduleUpdate = () => {\n if (throttle > 0) {\n if (!updateTimer) {\n updateTimer = setTimeout(() => {\n updateTimer = null;\n notify();\n }, throttle);\n }\n } else {\n notify();\n }\n };\n\n return {\n get value() { return value; },\n set value(newValue: T) {\n const changed = deep ? JSON.stringify(value) !== JSON.stringify(newValue) : value !== newValue;\n if (changed) {\n value = newValue;\n scheduleUpdate();\n }\n },\n subscribe(fn: (value: T) => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n destroy() {\n listeners.clear();\n updateTimer && clearTimeout(updateTimer);\n }\n };\n }\n\n computed<T extends any[], R>(states: { [K in keyof T]: State<T[K]> }, computeFn: (...values: T) => R): State<R> {\n const values = states.map(s => s.value) as unknown as T;\n const result = this.createState(computeFn(...values));\n\n states.forEach((state, index) => {\n state.subscribe((newValue: any) => {\n values[index] = newValue;\n result.value = computeFn(...values);\n });\n });\n\n return result;\n }\n\n effect(stateFn: () => void): void {\n stateFn();\n }\n\n // Virtual scrolling helper for large lists\n createVirtualList<T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight = 50,\n bufferSize = 5\n ): VirtualListController {\n const viewportHeight = container.clientHeight;\n const totalHeight = items.length * itemHeight;\n let scrollTop = 0;\n\n const getVisibleRange = (): { start: number; end: number } => {\n const start = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);\n const end = Math.min(items.length, Math.ceil((scrollTop + viewportHeight) / itemHeight) + bufferSize);\n return { start, end };\n };\n\n const render = (): void => {\n const { start, end } = getVisibleRange();\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `height:${totalHeight}px;position:relative`;\n\n for (let i = start; i < end; i++) {\n const itemEl = document.createElement('div');\n itemEl.style.cssText = `position:absolute;top:${i * itemHeight}px;height:${itemHeight}px;width:100%`;\n this.renderToDOM(renderItem(items[i], i), itemEl);\n wrapper.appendChild(itemEl);\n }\n\n container.innerHTML = '';\n container.appendChild(wrapper);\n };\n\n const scrollHandler = (): void => {\n scrollTop = container.scrollTop;\n requestAnimationFrame(render);\n };\n\n container.addEventListener('scroll', scrollHandler);\n\n render();\n return {\n render,\n destroy: () => {\n container.removeEventListener('scroll', scrollHandler);\n container.innerHTML = '';\n }\n };\n }\n\n // Lazy load components\n lazy<T extends any[], R>(loadFn: () => Promise<(...args: T) => R>): (...args: T) => Promise<R | VNode> {\n let component: ((...args: T) => R) | null = null;\n let loading = false;\n\n return async (...args: T): Promise<R | VNode> => {\n if (!component && !loading) {\n loading = true;\n component = await loadFn();\n loading = false;\n }\n return component ? component(...args) : { tagName: 'div', props: { class: 'loading' }, children: ['Loading...'] };\n };\n }\n\n // Memory management - cleanup unused elements\n cleanupUnusedElements(root: HTMLElement): number {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n const toRemove: Element[] = [];\n\n while (walker.nextNode()) {\n const node = walker.currentNode as Element;\n if (node.id && node.id.startsWith('r') && !this.elementCache.has(node)) {\n toRemove.push(node);\n }\n }\n\n toRemove.forEach(el => el.remove());\n return toRemove.length;\n }\n\n // Server-Side Rendering - convert VNode to HTML string\n renderToString(vNode: Child, options: { pretty?: boolean; indent?: number } = {}): string {\n const { pretty = false, indent = 0 } = options;\n const indentStr = pretty ? ' '.repeat(indent) : '';\n const newLine = pretty ? '\\n' : '';\n\n let resolvedVNode = this.resolveStateValue(vNode);\n resolvedVNode = this.unwrapReactive(resolvedVNode);\n\n if (Array.isArray(resolvedVNode)) {\n return resolvedVNode.map(child => this.renderToString(child, options)).join('');\n }\n\n if (typeof resolvedVNode !== 'object' || resolvedVNode === null) {\n if (resolvedVNode === null || resolvedVNode === undefined || resolvedVNode === false) {\n return '';\n }\n return this.escapeHtml(String(resolvedVNode));\n }\n\n const { tagName, props, children } = resolvedVNode;\n const textareaValue = resolveTextareaValue(tagName, props);\n const isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props, tagName);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\n\n if (textareaValue !== undefined) {\n html += this.escapeHtml(textareaValue);\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (props.dangerouslySetInnerHTML) {\n html += props.dangerouslySetInnerHTML.__html;\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (children && children.length > 0) {\n const resolvedChildren = children.map((c: Child) => {\n const resolved = this.resolveStateValue(c);\n return this.unwrapReactive(resolved);\n });\n\n const hasComplexChildren = resolvedChildren.some(\n (c: any) => typeof c === 'object' && c !== null && !Array.isArray(c) && 'tagName' in c\n );\n\n if (pretty && hasComplexChildren) {\n html += newLine;\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty, indent: indent + 1 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty, indent: indent + 1 });\n }\n }\n html += indentStr;\n } else {\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty: false, indent: 0 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty: false, indent: 0 });\n }\n }\n }\n }\n\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n private resolveStateValue(value: any): any {\n if (value && typeof value === 'object' && 'value' in value && 'subscribe' in value) {\n return value.value;\n }\n return value;\n }\n\n private isReactiveWrapper(vNode: any): boolean {\n if (!vNode || typeof vNode !== 'object' || !vNode.tagName) {\n return false;\n }\n return vNode.tagName === 'span' &&\n vNode.props?.id &&\n typeof vNode.props.id === 'string' &&\n vNode.props.id.match(/^r[a-z0-9]{9}$/);\n }\n\n private unwrapReactive(vNode: any): Child {\n if (!this.isReactiveWrapper(vNode)) {\n return vNode;\n }\n\n const children = vNode.children;\n if (!children || children.length === 0) {\n return '';\n }\n\n if (children.length === 1) {\n const child = children[0];\n\n if (child && typeof child === 'object' && child.tagName === 'span') {\n const props = child.props;\n const hasNoProps = !props || Object.keys(props).length === 0;\n const hasSingleStringChild = child.children &&\n child.children.length === 1 &&\n typeof child.children[0] === 'string';\n\n if (hasNoProps && hasSingleStringChild) {\n return child.children[0];\n }\n }\n\n return this.unwrapReactive(child);\n }\n\n return children.map((c: Child) => this.unwrapReactive(c));\n }\n\n private escapeHtml(text: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;'\n };\n return text.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]);\n return selfClosingTags.has(tagName.toLowerCase());\n }\n\n private propsToAttributes(props: Props, tagName?: string): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref' || (tagName === 'textarea' && key === 'value')) {\n continue;\n }\n\n let value = props[key];\n value = this.resolveStateValue(value);\n\n if (value == null || value === false) continue;\n\n if (key.startsWith('on') && typeof value === 'function') {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n const className = Array.isArray(value) ? value.join(' ') : value;\n if (className) {\n attrs.push(`class=\"${this.escapeHtml(String(className))}\"`);\n }\n continue;\n }\n\n if (key === 'style') {\n const styleStr = this.styleToString(value);\n if (styleStr) {\n attrs.push(`style=\"${this.escapeHtml(styleStr)}\"`);\n }\n continue;\n }\n\n if (value === true) {\n attrs.push(key);\n continue;\n }\n\n attrs.push(`${key}=\"${this.escapeHtml(String(value))}\"`);\n }\n\n return attrs.join(' ');\n }\n\n private styleToString(style: any): string {\n if (typeof style === 'string') {\n return style;\n }\n\n if (typeof style === 'object' && style !== null) {\n const styles: string[] = [];\n for (const key in style) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n styles.push(`${cssKey}:${style[key]}`);\n }\n return styles.join(';');\n }\n\n return '';\n }\n\n private isState(value: any): value is State<any> {\n return value && typeof value === 'object' && 'value' in value && 'subscribe' in value && typeof value.subscribe === 'function';\n }\n\n private reactiveNodes = new Map<State<any>, { node: Text | null, renderFn: (v: any) => Child }>();\n\n private createReactiveChild(state: State<any>, renderFn: (value: any) => Child): Child {\n const currentValue = renderFn(state.value);\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const entry = { node: null as Text | null, renderFn };\n this.reactiveNodes.set(state, entry);\n\n state.subscribe(() => {\n if (entry.node && entry.node.parentNode) {\n const newValue = renderFn(state.value);\n entry.node.textContent = String(newValue ?? '');\n }\n });\n }\n\n return currentValue;\n }\n\n jsonToVNode(json: JsonNode | string | number | boolean | null | undefined | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tag, attributes = {}, children } = json;\n\n const props: Props = {};\n for (const key in attributes) {\n const value = attributes[key];\n if (key === 'class') {\n props.className = this.isState(value) ? value.value : value;\n } else {\n props[key] = this.isState(value) ? value.value : value;\n }\n }\n\n const childrenArray: Children = [];\n if (children != null) {\n if (Array.isArray(children)) {\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.jsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n } else if (this.isState(children)) {\n childrenArray.push(this.createReactiveChild(children, (v: any) => v));\n } else if (typeof children === 'object' && 'tag' in children) {\n const converted = this.jsonToVNode(children);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n } else {\n childrenArray.push(children as Child);\n }\n }\n\n return { tagName: tag, props, children: childrenArray };\n }\n\n vNodeJsonToVNode(json: VNodeJson | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tagName, props = {}, children = [] } = json;\n\n const resolvedProps: Props = {};\n for (const key in props) {\n const value = props[key];\n resolvedProps[key] = this.isState(value) ? value.value : value;\n }\n\n const childrenArray: Children = [];\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.vNodeJsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n\n return { tagName, props: resolvedProps, children: childrenArray };\n }\n\n renderJson(rootElement: string | HTMLElement, json: JsonNode): HTMLElement {\n const vNode = this.jsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderVNode(rootElement: string | HTMLElement, json: VNodeJson): HTMLElement {\n const vNode = this.vNodeJsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid VNode JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderJsonToString(json: JsonNode, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.jsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n renderVNodeToString(json: VNodeJson, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.vNodeJsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n\n // Generate complete HTML document as string (for SSR)\n renderToHTMLDocument(vNode: Child, options: {\n title?: string;\n meta?: Array<Record<string, string>>;\n links?: Array<Record<string, string>>;\n scripts?: Array<{ src?: string; content?: string; async?: boolean; defer?: boolean; type?: string }>;\n styles?: Array<{ href?: string; content?: string }>;\n lang?: string;\n head?: string;\n bodyAttrs?: Record<string, string>;\n pretty?: boolean;\n } = {}): string {\n const { title = '', meta = [], links = [], scripts = [], styles = [], lang = 'en', head = '', bodyAttrs = {}, pretty = false } = options;\n const nl = pretty ? '\\n' : '';\n const indent = pretty ? ' ' : '';\n const indent2 = pretty ? ' ' : '';\n\n let html = `<!DOCTYPE html>${nl}<html lang=\"${lang}\">${nl}${indent}<head>${nl}${indent2}<meta charset=\"UTF-8\">${nl}${indent2}<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">${nl}`;\n if (title) html += `${indent2}<title>${this.escapeHtml(title)}</title>${nl}`;\n\n for (const m of meta) {\n html += `${indent2}<meta`;\n for (const k in m) html += ` ${k}=\"${this.escapeHtml(m[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const l of links) {\n html += `${indent2}<link`;\n for (const k in l) html += ` ${k}=\"${this.escapeHtml(l[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const s of styles) {\n if (s.href) {\n html += `${indent2}<link rel=\"stylesheet\" href=\"${this.escapeHtml(s.href)}\">${nl}`;\n } else if (s.content) {\n html += `${indent2}<style>${s.content}</style>${nl}`;\n }\n }\n\n if (head) html += head + nl;\n html += `${indent}</head>${nl}${indent}<body`;\n for (const k in bodyAttrs) html += ` ${k}=\"${this.escapeHtml(bodyAttrs[k])}\"`;\n html += `>${nl}`;\n html += this.renderToString(vNode, { pretty, indent: 2 });\n\n for (const script of scripts) {\n html += `${indent2}<script`;\n if (script.type) html += ` type=\"${this.escapeHtml(script.type)}\"`;\n if (script.async) html += ` async`;\n if (script.defer) html += ` defer`;\n if (script.src) {\n html += ` src=\"${this.escapeHtml(script.src)}\"></script>${nl}`;\n } else if (script.content) {\n html += `>${script.content}</script>${nl}`;\n } else {\n html += `></script>${nl}`;\n }\n }\n\n html += `${indent}</body>${nl}</html>`;\n return html;\n }\n\n // Expose elementCache for reactive updates\n getElementCache(): WeakMap<Element, boolean> {\n return this.elementCache;\n }\n}\n\nexport const dom = new DomNode();\n\n// Export helper functions for convenience\nexport const render = dom.render.bind(dom);\nexport const renderToString = dom.renderToString.bind(dom);\nexport const mount = render; // alias for render\n","/**\n * Elit - State Management\n */\n\nimport type { State, StateOptions, VNode, VirtualListController, Child, Props } from './types';\nimport { dom } from './dom';\n\nexport type NativeBindingKind = 'value' | 'checked';\n\nexport interface NativeBindingMetadata<T = unknown> {\n kind: NativeBindingKind;\n state: State<T>;\n}\n\nexport const ELIT_NATIVE_BINDING = Symbol.for('elit.native.binding');\n\n// State management helpers\nexport const createState = <T>(initial: T, options?: StateOptions): State<T> =>\n dom.createState(initial, options);\n\nexport const computed = <T extends any[], R>(\n states: { [K in keyof T]: State<T[K]> },\n fn: (...values: T) => R\n): State<R> => dom.computed(states, fn);\n\nexport const effect = (fn: () => void): void => dom.effect(fn);\n\n// Performance helpers\nexport const batchRender = (container: string | HTMLElement, vNodes: VNode[]): HTMLElement =>\n dom.batchRender(container, vNodes);\n\nexport const renderChunked = (\n container: string | HTMLElement,\n vNodes: VNode[],\n chunkSize?: number,\n onProgress?: (current: number, total: number) => void\n): HTMLElement => dom.renderChunked(container, vNodes, chunkSize, onProgress);\n\nexport const createVirtualList = <T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight?: number,\n bufferSize?: number\n): VirtualListController => dom.createVirtualList(container, items, renderItem, itemHeight, bufferSize);\n\nexport const lazy = <T extends any[], R>(loadFn: () => Promise<(...args: T) => R>) =>\n dom.lazy(loadFn);\n\nexport const cleanupUnused = (root: HTMLElement): number =>\n dom.cleanupUnusedElements(root);\n\n// Throttle helper\nexport const throttle = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, delay);\n }\n };\n};\n\n// Debounce helper\nexport const debounce = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n timer && clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n};\n\nexport function bindValue<T extends string | number | string[]>(state: State<T>): Props {\n const props = {\n value: state.value,\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null;\n if (!target) {\n return;\n }\n\n if (target instanceof HTMLSelectElement && target.multiple) {\n state.value = Array.from(target.selectedOptions).map((option) => option.value) as T;\n return;\n }\n\n const nextValue = typeof state.value === 'number'\n ? Number(target.value)\n : target.value;\n\n state.value = (typeof state.value === 'number' && Number.isNaN(nextValue))\n ? state.value\n : nextValue as T;\n },\n } as Props & { [ELIT_NATIVE_BINDING]: NativeBindingMetadata<T> };\n\n props[ELIT_NATIVE_BINDING] = {\n kind: 'value',\n state,\n };\n\n return props;\n}\n\nexport function bindChecked(state: State<boolean>): Props {\n const props = {\n checked: state.value,\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement | null;\n if (!target) {\n return;\n }\n\n state.value = Boolean(target.checked);\n },\n } as Props & { [ELIT_NATIVE_BINDING]: NativeBindingMetadata<boolean> };\n\n props[ELIT_NATIVE_BINDING] = {\n kind: 'checked',\n state,\n };\n\n return props;\n}\n\n// ===== Shared State - syncs with elit-server =====\n\ntype StateChangeCallback<T = any> = (value: T, oldValue: T) => void;\n\ninterface StateMessage {\n type: 'state:init' | 'state:update' | 'state:subscribe' | 'state:unsubscribe' | 'state:change';\n key: string;\n value?: any;\n timestamp?: number;\n}\n\n/**\n * Shared State - syncs with elit-server\n */\nexport class SharedState<T = any> {\n private localState: State<T>;\n private ws: WebSocket | null = null;\n private pendingUpdates: T[] = [];\n private previousValue: T;\n\n constructor(\n public readonly key: string,\n defaultValue: T,\n private wsUrl?: string\n ) {\n this.localState = createState(defaultValue);\n this.previousValue = defaultValue;\n this.connect();\n }\n\n /**\n * Get current value\n */\n get value(): T {\n return this.localState.value;\n }\n\n /**\n * Set new value and sync to server\n */\n set value(newValue: T) {\n this.previousValue = this.localState.value;\n this.localState.value = newValue;\n this.sendToServer(newValue);\n }\n\n /**\n * Get the underlying Elit State (for reactive binding)\n */\n get state(): State<T> {\n return this.localState;\n }\n\n /**\n * Subscribe to changes (returns Elit State for reactive)\n */\n onChange(callback: StateChangeCallback<T>): () => void {\n return this.localState.subscribe((newValue) => {\n const oldValue = this.previousValue;\n this.previousValue = newValue;\n callback(newValue, oldValue);\n });\n }\n\n /**\n * Update value using a function\n */\n update(updater: (current: T) => T): void {\n this.value = updater(this.value);\n }\n\n /**\n * Connect to WebSocket\n */\n private connect(): void {\n if (typeof window === 'undefined') return;\n\n const url = this.wsUrl || `ws://${location.host}`;\n this.ws = new WebSocket(url);\n\n this.ws.addEventListener('open', () => {\n this.subscribe();\n\n // Send pending updates\n while (this.pendingUpdates.length > 0) {\n const value = this.pendingUpdates.shift();\n this.sendToServer(value!);\n }\n });\n\n this.ws.addEventListener('message', (event) => {\n this.handleMessage(event.data);\n });\n\n this.ws.addEventListener('close', () => {\n // Reconnect after delay\n setTimeout(() => this.connect(), 1000);\n });\n\n this.ws.addEventListener('error', (error) => {\n console.error('[SharedState] WebSocket error:', error);\n });\n }\n\n /**\n * Subscribe to server state\n */\n private subscribe(): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n\n this.ws.send(JSON.stringify({\n type: 'state:subscribe',\n key: this.key\n }));\n }\n\n /**\n * Handle message from server\n */\n private handleMessage(data: string): void {\n try {\n const msg = JSON.parse(data) as StateMessage;\n\n if (msg.key !== this.key) return;\n\n if (msg.type === 'state:init' || msg.type === 'state:update') {\n // Update local state without sending back to server\n this.localState.value = msg.value;\n }\n } catch (error) {\n // Ignore parse errors (could be HMR messages)\n }\n }\n\n /**\n * Send value to server\n */\n private sendToServer(value: T): void {\n if (!this.ws) return;\n\n if (this.ws.readyState !== WebSocket.OPEN) {\n // Queue update for when connection is ready\n this.pendingUpdates.push(value);\n return;\n }\n\n this.ws.send(JSON.stringify({\n type: 'state:change',\n key: this.key,\n value\n }));\n }\n\n /**\n * Disconnect\n */\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n /**\n * Destroy state and cleanup\n */\n destroy(): void {\n this.disconnect();\n this.localState.destroy();\n }\n}\n\n/**\n * Create a shared state that syncs with elit-server\n */\nexport function createSharedState<T>(\n key: string,\n defaultValue: T,\n wsUrl?: string\n): SharedState<T> {\n return new SharedState(key, defaultValue, wsUrl);\n}\n\n/**\n * Shared State Manager for managing multiple shared states\n */\nclass SharedStateManager {\n private states = new Map<string, SharedState<any>>();\n\n /**\n * Create or get a shared state\n */\n create<T>(key: string, defaultValue: T, wsUrl?: string): SharedState<T> {\n if (this.states.has(key)) {\n return this.states.get(key) as SharedState<T>;\n }\n\n const state = new SharedState<T>(key, defaultValue, wsUrl);\n this.states.set(key, state);\n return state;\n }\n\n /**\n * Get existing state\n */\n get<T>(key: string): SharedState<T> | undefined {\n return this.states.get(key) as SharedState<T>;\n }\n\n /**\n * Delete a state\n */\n delete(key: string): boolean {\n const state = this.states.get(key);\n if (state) {\n state.destroy();\n return this.states.delete(key);\n }\n return false;\n }\n\n /**\n * Clear all states\n */\n clear(): void {\n this.states.forEach(state => state.destroy());\n this.states.clear();\n }\n}\n\n// Export singleton instance\nexport const sharedStateManager = new SharedStateManager();\n\n// ===== Reactive Rendering Helpers =====\n\n// Helper function to schedule RAF updates (reused in reactive and reactiveAs)\nconst scheduleRAFUpdate = (rafId: number | null, updateFn: () => void): number => {\n rafId && cancelAnimationFrame(rafId);\n return requestAnimationFrame(() => {\n updateFn();\n });\n};\n\n// Helper function to render content to fragment (reused in reactive and reactiveAs)\nconst renderToFragment = (content: VNode | Child | Child[], isVNode?: boolean): DocumentFragment => {\n const fragment = document.createDocumentFragment();\n\n if (Array.isArray(content)) {\n // Handle array of children\n for (const child of content) {\n dom.renderToDOM(child, fragment);\n }\n } else if (isVNode && content && typeof content === 'object' && 'tagName' in content) {\n const { children } = content as VNode;\n for (const child of children) {\n dom.renderToDOM(child, fragment);\n }\n } else {\n dom.renderToDOM(content, fragment);\n }\n\n return fragment;\n};\n\n// Helper function to update element props (reused in reactive)\nconst updateElementProps = (element: HTMLElement | SVGElement, props: Props): void => {\n for (const key in props) {\n const value = props[key];\n if (key === 'ref') continue;\n\n if (key === 'class' || key === 'className') {\n (element as HTMLElement).className = Array.isArray(value) ? value.join(' ') : (value || '');\n } else if (key === 'style' && typeof value === 'object') {\n const s = (element as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n } else if (key.startsWith('on')) {\n (element as any)[key.toLowerCase()] = value;\n } else if (value != null && value !== false) {\n element.setAttribute(key, String(value === true ? '' : value));\n } else {\n element.removeAttribute(key);\n }\n }\n};\n\n// Reactive element helpers\nexport const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n let placeholder: Comment | null = null;\n let isInDOM = true;\n\n const initialResult = renderFn(state.value);\n const isVNodeResult = initialResult && typeof initialResult === 'object' && 'tagName' in initialResult;\n const initialIsNull = initialResult == null || initialResult === false;\n\n const updateElement = () => {\n if (!elementRef && !placeholder) return;\n\n const newResult = renderFn(state.value);\n const resultIsNull = newResult == null || newResult === false;\n\n if (resultIsNull) {\n if (isInDOM && elementRef) {\n placeholder = document.createComment('reactive');\n elementRef.parentNode?.replaceChild(placeholder, elementRef);\n isInDOM = false;\n }\n } else {\n if (!isInDOM && placeholder && elementRef) {\n placeholder.parentNode?.replaceChild(elementRef, placeholder);\n placeholder = null;\n isInDOM = true;\n }\n\n if (elementRef) {\n const isCurrentVNode = !!(isVNodeResult && newResult && typeof newResult === 'object' && 'tagName' in newResult);\n if (isCurrentVNode) {\n const { props } = newResult as VNode;\n updateElementProps(elementRef, props);\n }\n const fragment = renderToFragment(newResult as any, isCurrentVNode);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n dom.getElementCache().set(elementRef, true);\n }\n }\n };\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n updateElement();\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n if (initialIsNull && el.parentNode) {\n placeholder = document.createComment('reactive');\n el.parentNode.replaceChild(placeholder, el);\n isInDOM = false;\n }\n };\n\n if (isVNodeResult) {\n const vnode = initialResult as VNode;\n return {\n tagName: vnode.tagName,\n props: { ...vnode.props, ref: refCallback },\n children: vnode.children\n };\n }\n\n // Handle array result - wrap in fragment-like VNode\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n // Use span with display: contents as wrapper (doesn't affect layout)\n return { tagName: 'span', props: { ref: refCallback, style: { display: 'contents' } }, children: initialChildren };\n};\n\n// Reactive element with custom wrapper tag\nexport const reactiveAs = <T>(\n tagName: string,\n state: State<T>,\n renderFn: (value: T) => VNode | Child | Child[],\n props: Props = {}\n): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n if (elementRef) {\n const newResult = renderFn(state.value);\n\n if (newResult == null || newResult === false) {\n (elementRef as HTMLElement).style.display = 'none';\n elementRef.textContent = '';\n } else {\n (elementRef as HTMLElement).style.display = '';\n const fragment = renderToFragment(newResult as any, false);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n }\n dom.getElementCache().set(elementRef, true);\n }\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n };\n\n const initialResult = renderFn(state.value);\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };\n};\n\nexport const text = (state: State<any> | any): VNode | string =>\n (state && state.value !== undefined)\n ? reactive(state, v => ({ tagName: 'span', props: {}, children: [String(v)] }))\n : String(state);\n"],"mappings":"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","names":["text","throttle","render"]}
1
+ {"version":3,"sources":["../src/render-context.ts","../src/dom.ts","../src/state.ts"],"sourcesContent":["import type { VNode } from './types';\n\nexport type RenderRuntimeTarget = 'web' | 'desktop' | 'mobile' | 'unknown';\n\nexport interface DesktopInteractionOutputOptions {\n file?: string;\n stdout?: boolean;\n emitReady?: boolean;\n}\n\nexport interface DesktopRenderOptions {\n title?: string;\n width?: number;\n height?: number;\n center?: boolean;\n icon?: string;\n autoClose?: boolean;\n interactionOutput?: DesktopInteractionOutputOptions;\n}\n\nexport interface CapturedRenderState {\n rootElement: string | unknown;\n target: RenderRuntimeTarget;\n vNode: VNode;\n}\n\nconst RUNTIME_TARGET_KEY = '__ELIT_RUNTIME_TARGET__';\nconst CAPTURED_RENDER_KEY = '__ELIT_CAPTURED_RENDER__';\nconst DESKTOP_RENDER_OPTIONS_KEY = '__ELIT_DESKTOP_RENDER_OPTIONS__';\nconst RUNTIME_TARGET_ENV = 'ELIT_RUNTIME_TARGET';\n\ntype GlobalRenderScope = typeof globalThis & {\n [RUNTIME_TARGET_KEY]?: RenderRuntimeTarget;\n [CAPTURED_RENDER_KEY]?: CapturedRenderState;\n [DESKTOP_RENDER_OPTIONS_KEY]?: DesktopRenderOptions;\n createWindow?: unknown;\n document?: Document;\n process?: {\n argv?: string[];\n env?: Record<string, string | undefined>;\n };\n window?: Window & typeof globalThis;\n};\n\nfunction getGlobalRenderScope(): GlobalRenderScope {\n return globalThis as GlobalRenderScope;\n}\n\nfunction isRenderRuntimeTarget(value: unknown): value is RenderRuntimeTarget {\n return value === 'web' || value === 'desktop' || value === 'mobile' || value === 'unknown';\n}\n\nexport function detectRenderRuntimeTarget(): RenderRuntimeTarget {\n const globalScope = getGlobalRenderScope();\n const explicitTarget = globalScope[RUNTIME_TARGET_KEY] ?? globalScope.process?.env?.[RUNTIME_TARGET_ENV];\n\n if (isRenderRuntimeTarget(explicitTarget)) {\n return explicitTarget;\n }\n\n if (typeof globalScope.document !== 'undefined' && typeof globalScope.window !== 'undefined') {\n return 'web';\n }\n\n if (typeof globalScope.createWindow === 'function') {\n return 'desktop';\n }\n\n const argv = Array.isArray(globalScope.process?.argv)\n ? globalScope.process!.argv!.join(' ')\n : '';\n\n if (/\\bdesktop\\b/i.test(argv)) {\n return 'desktop';\n }\n\n if (/\\b(mobile|native)\\b/i.test(argv)) {\n return 'mobile';\n }\n\n return 'unknown';\n}\n\nexport function setRenderRuntimeTarget(target: RenderRuntimeTarget): RenderRuntimeTarget | undefined {\n const globalScope = getGlobalRenderScope();\n const previousTarget = globalScope[RUNTIME_TARGET_KEY];\n globalScope[RUNTIME_TARGET_KEY] = target;\n return previousTarget;\n}\n\nexport function restoreRenderRuntimeTarget(target?: RenderRuntimeTarget): void {\n const globalScope = getGlobalRenderScope();\n\n if (target === undefined) {\n delete globalScope[RUNTIME_TARGET_KEY];\n return;\n }\n\n globalScope[RUNTIME_TARGET_KEY] = target;\n}\n\nexport function captureRenderedVNode(\n rootElement: string | unknown,\n vNode: VNode,\n target = detectRenderRuntimeTarget(),\n): void {\n const globalScope = getGlobalRenderScope();\n globalScope[RUNTIME_TARGET_KEY] = target;\n globalScope[CAPTURED_RENDER_KEY] = {\n rootElement,\n target,\n vNode,\n };\n}\n\nexport function getCapturedRenderedVNode(): CapturedRenderState | undefined {\n return getGlobalRenderScope()[CAPTURED_RENDER_KEY];\n}\n\nexport function clearCapturedRenderedVNode(): void {\n delete getGlobalRenderScope()[CAPTURED_RENDER_KEY];\n}\n\nexport function setDesktopRenderOptions(options: DesktopRenderOptions): void {\n const globalScope = getGlobalRenderScope();\n globalScope[DESKTOP_RENDER_OPTIONS_KEY] = {\n ...(globalScope[DESKTOP_RENDER_OPTIONS_KEY] ?? {}),\n ...options,\n };\n}\n\nexport function getDesktopRenderOptions(): DesktopRenderOptions | undefined {\n return getGlobalRenderScope()[DESKTOP_RENDER_OPTIONS_KEY];\n}\n\nexport function clearDesktopRenderOptions(): void {\n delete getGlobalRenderScope()[DESKTOP_RENDER_OPTIONS_KEY];\n}","/**\n * Elit - DomNode Core Class\n */\n\nimport { captureRenderedVNode, detectRenderRuntimeTarget } from './render-context';\nimport type { VNode, Child, Children, Props, State, StateOptions, VirtualListController, JsonNode, VNodeJson } from './types';\n\n/**\n * Helper: Resolve element from string ID or HTMLElement (eliminates duplication in render methods)\n */\nfunction resolveElement(rootElement: string | HTMLElement): HTMLElement | null {\n return typeof rootElement === 'string'\n ? document.getElementById(rootElement.replace('#', ''))\n : rootElement;\n}\n\n/**\n * Helper: Ensure element exists or throw error (eliminates duplication in validation)\n */\nfunction ensureElement(el: HTMLElement | null, rootElement: string | HTMLElement): HTMLElement {\n if (!el) {\n throw new Error(`Element not found: ${rootElement}`);\n }\n return el;\n}\n\n/**\n * Helper: Check if child should be skipped (eliminates duplication in child rendering)\n */\nfunction shouldSkipChild(child: any): boolean {\n return child == null || child === false;\n}\n\n/**\n * Helper: Check if value is primitive JSON type (eliminates duplication in JSON conversion)\n */\nfunction isPrimitiveJson(json: any): json is string | number | boolean | null | undefined {\n return json == null || typeof json === 'boolean' || typeof json === 'string' || typeof json === 'number';\n}\n\nfunction normalizeFormControlValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map((entry) => String(entry)).join(',');\n }\n\n return value == null ? '' : String(value);\n}\n\nfunction resolveTextareaValue(tagName: string, props: Props): string | undefined {\n return tagName === 'textarea' && props.value != null\n ? normalizeFormControlValue(props.value)\n : undefined;\n}\n\nfunction hasDocumentApi(): boolean {\n return typeof document !== 'undefined';\n}\n\nexport class DomNode {\n private elementCache = new WeakMap<Element, boolean>();\n\n createElement(tagName: string, props: Props = {}, children: Children = []): VNode {\n return { tagName, props, children };\n }\n\n renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {\n if (vNode == null || vNode === false) return;\n\n // Handle primitive values (strings, numbers)\n if (typeof vNode !== 'object') {\n parent.appendChild(document.createTextNode(String(vNode)));\n return;\n }\n\n if (this.isState(vNode)) {\n const textNode = document.createTextNode(String(vNode.value ?? ''));\n parent.appendChild(textNode);\n vNode.subscribe((newValue) => {\n textNode.textContent = String(newValue ?? '');\n });\n return;\n }\n\n // Handle arrays (Child[])\n if (Array.isArray(vNode)) {\n for (const child of vNode) {\n this.renderToDOM(child, parent);\n }\n return;\n }\n\n // Handle VNode\n const { tagName, props, children } = vNode;\n const textareaValue = resolveTextareaValue(tagName, props);\n\n // Handle fragment (empty tagName) - render children directly to parent\n if (!tagName) {\n // Fragments don't have their own element, so skip ref handling\n // The ref will be handled by the wrapper element created by reactive()\n // Render children directly to parent\n for (const child of children) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n !shouldSkipChild(c) && this.renderToDOM(c, parent);\n }\n } else {\n this.renderToDOM(child, parent);\n }\n }\n return;\n }\n\n const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||\n (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';\n\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', tagName.replace('svg', '').toLowerCase() || tagName)\n : document.createElement(tagName);\n\n for (const key in props) {\n const value = props[key];\n if (value == null || value === false) continue;\n\n const c = key.charCodeAt(0);\n // class or className (c=99)\n if (c === 99 && (key.length < 6 || key[5] === 'N')) {\n const classValue = Array.isArray(value) ? value.join(' ') : value;\n isSVG ? (el as SVGElement).setAttribute('class', classValue) : (el as HTMLElement).className = classValue;\n }\n // style (s=115)\n else if (c === 115 && key.length === 5) {\n if (typeof value === 'string') {\n (el as HTMLElement).style.cssText = value;\n } else {\n const s = (el as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n }\n }\n // on* events (o=111, n=110)\n else if (c === 111 && key.charCodeAt(1) === 110) {\n (el as any)[key.toLowerCase()] = value;\n }\n // dangerouslySetInnerHTML (d=100)\n else if (c === 100 && key.length > 20) {\n (el as HTMLElement).innerHTML = value.__html;\n }\n // ref (r=114)\n else if (c === 114 && key === 'ref') {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else if (textareaValue !== undefined && key === 'value') {\n continue;\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const renderableChildren = textareaValue === undefined ? children : [];\n const len = renderableChildren.length;\n if (!len) {\n if (textareaValue !== undefined) {\n (el as HTMLTextAreaElement).value = textareaValue;\n }\n parent.appendChild(el);\n return;\n }\n\n const renderChildren = (target: HTMLElement | SVGElement | DocumentFragment) => {\n for (let i = 0; i < len; i++) {\n const child = renderableChildren[i];\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n !shouldSkipChild(c) && this.renderToDOM(c, target);\n }\n } else {\n this.renderToDOM(child, target);\n }\n }\n };\n\n if (len > 30) {\n const fragment = document.createDocumentFragment();\n renderChildren(fragment);\n el.appendChild(fragment);\n } else {\n renderChildren(el);\n }\n\n parent.appendChild(el);\n }\n\n render(rootElement: string | HTMLElement, vNode: VNode): HTMLElement {\n if (!hasDocumentApi()) {\n const runtimeTarget = detectRenderRuntimeTarget();\n\n if (runtimeTarget === 'desktop' || runtimeTarget === 'mobile') {\n captureRenderedVNode(rootElement, vNode, runtimeTarget);\n return {} as HTMLElement;\n }\n\n throw new Error('render() requires a DOM or an Elit desktop/mobile runtime target.');\n }\n\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n // Clear existing content before rendering\n el.innerHTML = '';\n\n if (vNode.children && vNode.children.length > 500) {\n const fragment = document.createDocumentFragment();\n this.renderToDOM(vNode, fragment);\n el.appendChild(fragment);\n } else {\n this.renderToDOM(vNode, el);\n }\n return el;\n }\n\n batchRender(rootElement: string | HTMLElement, vNodes: VNode[]): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n\n if (len > 3000) {\n const fragment = document.createDocumentFragment();\n let processed = 0;\n const chunkSize = 1500;\n\n const processChunk = (): void => {\n const end = Math.min(processed + chunkSize, len);\n for (let i = processed; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n processed = end;\n\n if (processed >= len) {\n el.appendChild(fragment);\n } else {\n requestAnimationFrame(processChunk);\n }\n };\n\n processChunk();\n } else {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < len; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n el.appendChild(fragment);\n }\n return el;\n }\n\n renderChunked(\n rootElement: string | HTMLElement,\n vNodes: VNode[],\n chunkSize = 5000,\n onProgress?: (current: number, total: number) => void\n ): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n let index = 0;\n\n const renderChunk = (): void => {\n const end = Math.min(index + chunkSize, len);\n const fragment = document.createDocumentFragment();\n\n for (let i = index; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n\n el.appendChild(fragment);\n index = end;\n\n if (onProgress) onProgress(index, len);\n\n if (index < len) {\n requestAnimationFrame(renderChunk);\n }\n };\n\n requestAnimationFrame(renderChunk);\n return el;\n }\n\n renderToHead(...vNodes: Array<VNode | VNode[]>): HTMLHeadElement | null {\n const head = document.head;\n if (head) {\n for (const vNode of vNodes.flat()) {\n vNode && this.renderToDOM(vNode, head);\n }\n }\n return head;\n }\n\n addStyle(cssText: string): HTMLStyleElement {\n const el = document.createElement('style');\n el.textContent = cssText;\n return document.head.appendChild(el);\n }\n\n addMeta(attrs: Record<string, string>): HTMLMetaElement {\n const el = document.createElement('meta');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n addLink(attrs: Record<string, string>): HTMLLinkElement {\n const el = document.createElement('link');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n setTitle(text: string): string {\n return document.title = text;\n }\n\n // Reactive State Management\n createState<T>(initialValue: T, options: StateOptions = {}): State<T> {\n let value = initialValue;\n const listeners = new Set<(value: T) => void>();\n let updateTimer: NodeJS.Timeout | null = null;\n const { throttle = 0, deep = false } = options;\n\n const notify = () => listeners.forEach(fn => fn(value));\n\n const scheduleUpdate = () => {\n if (throttle > 0) {\n if (!updateTimer) {\n updateTimer = setTimeout(() => {\n updateTimer = null;\n notify();\n }, throttle);\n }\n } else {\n notify();\n }\n };\n\n return {\n get value() { return value; },\n set value(newValue: T) {\n const changed = deep ? JSON.stringify(value) !== JSON.stringify(newValue) : value !== newValue;\n if (changed) {\n value = newValue;\n scheduleUpdate();\n }\n },\n subscribe(fn: (value: T) => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n destroy() {\n listeners.clear();\n updateTimer && clearTimeout(updateTimer);\n }\n };\n }\n\n computed<T extends any[], R>(states: { [K in keyof T]: State<T[K]> }, computeFn: (...values: T) => R): State<R> {\n const values = states.map(s => s.value) as unknown as T;\n const result = this.createState(computeFn(...values));\n\n states.forEach((state, index) => {\n state.subscribe((newValue: any) => {\n values[index] = newValue;\n result.value = computeFn(...values);\n });\n });\n\n return result;\n }\n\n effect(stateFn: () => void): void {\n stateFn();\n }\n\n // Virtual scrolling helper for large lists\n createVirtualList<T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight = 50,\n bufferSize = 5\n ): VirtualListController {\n const viewportHeight = container.clientHeight;\n const totalHeight = items.length * itemHeight;\n let scrollTop = 0;\n\n const getVisibleRange = (): { start: number; end: number } => {\n const start = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);\n const end = Math.min(items.length, Math.ceil((scrollTop + viewportHeight) / itemHeight) + bufferSize);\n return { start, end };\n };\n\n const render = (): void => {\n const { start, end } = getVisibleRange();\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `height:${totalHeight}px;position:relative`;\n\n for (let i = start; i < end; i++) {\n const itemEl = document.createElement('div');\n itemEl.style.cssText = `position:absolute;top:${i * itemHeight}px;height:${itemHeight}px;width:100%`;\n this.renderToDOM(renderItem(items[i], i), itemEl);\n wrapper.appendChild(itemEl);\n }\n\n container.innerHTML = '';\n container.appendChild(wrapper);\n };\n\n const scrollHandler = (): void => {\n scrollTop = container.scrollTop;\n requestAnimationFrame(render);\n };\n\n container.addEventListener('scroll', scrollHandler);\n\n render();\n return {\n render,\n destroy: () => {\n container.removeEventListener('scroll', scrollHandler);\n container.innerHTML = '';\n }\n };\n }\n\n // Lazy load components\n lazy<T extends any[], R>(loadFn: () => Promise<(...args: T) => R>): (...args: T) => Promise<R | VNode> {\n let component: ((...args: T) => R) | null = null;\n let loading = false;\n\n return async (...args: T): Promise<R | VNode> => {\n if (!component && !loading) {\n loading = true;\n component = await loadFn();\n loading = false;\n }\n return component ? component(...args) : { tagName: 'div', props: { class: 'loading' }, children: ['Loading...'] };\n };\n }\n\n // Memory management - cleanup unused elements\n cleanupUnusedElements(root: HTMLElement): number {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n const toRemove: Element[] = [];\n\n while (walker.nextNode()) {\n const node = walker.currentNode as Element;\n if (node.id && node.id.startsWith('r') && !this.elementCache.has(node)) {\n toRemove.push(node);\n }\n }\n\n toRemove.forEach(el => el.remove());\n return toRemove.length;\n }\n\n // Server-Side Rendering - convert VNode to HTML string\n renderToString(vNode: Child, options: { pretty?: boolean; indent?: number } = {}): string {\n const { pretty = false, indent = 0 } = options;\n const indentStr = pretty ? ' '.repeat(indent) : '';\n const newLine = pretty ? '\\n' : '';\n\n let resolvedVNode = this.resolveStateValue(vNode);\n resolvedVNode = this.unwrapReactive(resolvedVNode);\n\n if (Array.isArray(resolvedVNode)) {\n return resolvedVNode.map(child => this.renderToString(child, options)).join('');\n }\n\n if (typeof resolvedVNode !== 'object' || resolvedVNode === null) {\n if (resolvedVNode === null || resolvedVNode === undefined || resolvedVNode === false) {\n return '';\n }\n return this.escapeHtml(String(resolvedVNode));\n }\n\n const { tagName, props, children } = resolvedVNode;\n const textareaValue = resolveTextareaValue(tagName, props);\n const isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props, tagName);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\n\n if (textareaValue !== undefined) {\n html += this.escapeHtml(textareaValue);\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (props.dangerouslySetInnerHTML) {\n html += props.dangerouslySetInnerHTML.__html;\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (children && children.length > 0) {\n const resolvedChildren = children.map((c: Child) => {\n const resolved = this.resolveStateValue(c);\n return this.unwrapReactive(resolved);\n });\n\n const hasComplexChildren = resolvedChildren.some(\n (c: any) => typeof c === 'object' && c !== null && !Array.isArray(c) && 'tagName' in c\n );\n\n if (pretty && hasComplexChildren) {\n html += newLine;\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty, indent: indent + 1 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty, indent: indent + 1 });\n }\n }\n html += indentStr;\n } else {\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty: false, indent: 0 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty: false, indent: 0 });\n }\n }\n }\n }\n\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n private resolveStateValue(value: any): any {\n if (value && typeof value === 'object' && 'value' in value && 'subscribe' in value) {\n return value.value;\n }\n return value;\n }\n\n private isReactiveWrapper(vNode: any): boolean {\n if (!vNode || typeof vNode !== 'object' || !vNode.tagName) {\n return false;\n }\n return vNode.tagName === 'span' &&\n vNode.props?.id &&\n typeof vNode.props.id === 'string' &&\n vNode.props.id.match(/^r[a-z0-9]{9}$/);\n }\n\n private unwrapReactive(vNode: any): Child {\n if (!this.isReactiveWrapper(vNode)) {\n return vNode;\n }\n\n const children = vNode.children;\n if (!children || children.length === 0) {\n return '';\n }\n\n if (children.length === 1) {\n const child = children[0];\n\n if (child && typeof child === 'object' && child.tagName === 'span') {\n const props = child.props;\n const hasNoProps = !props || Object.keys(props).length === 0;\n const hasSingleStringChild = child.children &&\n child.children.length === 1 &&\n typeof child.children[0] === 'string';\n\n if (hasNoProps && hasSingleStringChild) {\n return child.children[0];\n }\n }\n\n return this.unwrapReactive(child);\n }\n\n return children.map((c: Child) => this.unwrapReactive(c));\n }\n\n private escapeHtml(text: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;'\n };\n return text.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]);\n return selfClosingTags.has(tagName.toLowerCase());\n }\n\n private propsToAttributes(props: Props, tagName?: string): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref' || (tagName === 'textarea' && key === 'value')) {\n continue;\n }\n\n let value = props[key];\n value = this.resolveStateValue(value);\n\n if (value == null || value === false) continue;\n\n if (key.startsWith('on') && typeof value === 'function') {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n const className = Array.isArray(value) ? value.join(' ') : value;\n if (className) {\n attrs.push(`class=\"${this.escapeHtml(String(className))}\"`);\n }\n continue;\n }\n\n if (key === 'style') {\n const styleStr = this.styleToString(value);\n if (styleStr) {\n attrs.push(`style=\"${this.escapeHtml(styleStr)}\"`);\n }\n continue;\n }\n\n if (value === true) {\n attrs.push(key);\n continue;\n }\n\n attrs.push(`${key}=\"${this.escapeHtml(String(value))}\"`);\n }\n\n return attrs.join(' ');\n }\n\n private styleToString(style: any): string {\n if (typeof style === 'string') {\n return style;\n }\n\n if (typeof style === 'object' && style !== null) {\n const styles: string[] = [];\n for (const key in style) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n styles.push(`${cssKey}:${style[key]}`);\n }\n return styles.join(';');\n }\n\n return '';\n }\n\n private isState(value: any): value is State<any> {\n return value && typeof value === 'object' && 'value' in value && 'subscribe' in value && typeof value.subscribe === 'function';\n }\n\n private reactiveNodes = new Map<State<any>, { node: Text | null, renderFn: (v: any) => Child }>();\n\n private createReactiveChild(state: State<any>, renderFn: (value: any) => Child): Child {\n const currentValue = renderFn(state.value);\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const entry = { node: null as Text | null, renderFn };\n this.reactiveNodes.set(state, entry);\n\n state.subscribe(() => {\n if (entry.node && entry.node.parentNode) {\n const newValue = renderFn(state.value);\n entry.node.textContent = String(newValue ?? '');\n }\n });\n }\n\n return currentValue;\n }\n\n jsonToVNode(json: JsonNode | string | number | boolean | null | undefined | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tag, attributes = {}, children } = json;\n\n const props: Props = {};\n for (const key in attributes) {\n const value = attributes[key];\n if (key === 'class') {\n props.className = this.isState(value) ? value.value : value;\n } else {\n props[key] = this.isState(value) ? value.value : value;\n }\n }\n\n const childrenArray: Children = [];\n if (children != null) {\n if (Array.isArray(children)) {\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.jsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n } else if (this.isState(children)) {\n childrenArray.push(this.createReactiveChild(children, (v: any) => v));\n } else if (typeof children === 'object' && 'tag' in children) {\n const converted = this.jsonToVNode(children);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n } else {\n childrenArray.push(children as Child);\n }\n }\n\n return { tagName: tag, props, children: childrenArray };\n }\n\n vNodeJsonToVNode(json: VNodeJson | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tagName, props = {}, children = [] } = json;\n\n const resolvedProps: Props = {};\n for (const key in props) {\n const value = props[key];\n resolvedProps[key] = this.isState(value) ? value.value : value;\n }\n\n const childrenArray: Children = [];\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.vNodeJsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n\n return { tagName, props: resolvedProps, children: childrenArray };\n }\n\n renderJson(rootElement: string | HTMLElement, json: JsonNode): HTMLElement {\n const vNode = this.jsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderVNode(rootElement: string | HTMLElement, json: VNodeJson): HTMLElement {\n const vNode = this.vNodeJsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid VNode JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderJsonToString(json: JsonNode, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.jsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n renderVNodeToString(json: VNodeJson, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.vNodeJsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n\n // Generate complete HTML document as string (for SSR)\n renderToHTMLDocument(vNode: Child, options: {\n title?: string;\n meta?: Array<Record<string, string>>;\n links?: Array<Record<string, string>>;\n scripts?: Array<{ src?: string; content?: string; async?: boolean; defer?: boolean; type?: string }>;\n styles?: Array<{ href?: string; content?: string }>;\n lang?: string;\n head?: string;\n bodyAttrs?: Record<string, string>;\n pretty?: boolean;\n } = {}): string {\n const { title = '', meta = [], links = [], scripts = [], styles = [], lang = 'en', head = '', bodyAttrs = {}, pretty = false } = options;\n const nl = pretty ? '\\n' : '';\n const indent = pretty ? ' ' : '';\n const indent2 = pretty ? ' ' : '';\n\n let html = `<!DOCTYPE html>${nl}<html lang=\"${lang}\">${nl}${indent}<head>${nl}${indent2}<meta charset=\"UTF-8\">${nl}${indent2}<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">${nl}`;\n if (title) html += `${indent2}<title>${this.escapeHtml(title)}</title>${nl}`;\n\n for (const m of meta) {\n html += `${indent2}<meta`;\n for (const k in m) html += ` ${k}=\"${this.escapeHtml(m[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const l of links) {\n html += `${indent2}<link`;\n for (const k in l) html += ` ${k}=\"${this.escapeHtml(l[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const s of styles) {\n if (s.href) {\n html += `${indent2}<link rel=\"stylesheet\" href=\"${this.escapeHtml(s.href)}\">${nl}`;\n } else if (s.content) {\n html += `${indent2}<style>${s.content}</style>${nl}`;\n }\n }\n\n if (head) html += head + nl;\n html += `${indent}</head>${nl}${indent}<body`;\n for (const k in bodyAttrs) html += ` ${k}=\"${this.escapeHtml(bodyAttrs[k])}\"`;\n html += `>${nl}`;\n html += this.renderToString(vNode, { pretty, indent: 2 });\n\n for (const script of scripts) {\n html += `${indent2}<script`;\n if (script.type) html += ` type=\"${this.escapeHtml(script.type)}\"`;\n if (script.async) html += ` async`;\n if (script.defer) html += ` defer`;\n if (script.src) {\n html += ` src=\"${this.escapeHtml(script.src)}\"></script>${nl}`;\n } else if (script.content) {\n html += `>${script.content}</script>${nl}`;\n } else {\n html += `></script>${nl}`;\n }\n }\n\n html += `${indent}</body>${nl}</html>`;\n return html;\n }\n\n // Expose elementCache for reactive updates\n getElementCache(): WeakMap<Element, boolean> {\n return this.elementCache;\n }\n}\n\nexport const dom = new DomNode();\n\n// Export helper functions for convenience\nexport const render = dom.render.bind(dom);\nexport const renderToString = dom.renderToString.bind(dom);\nexport const mount = render; // alias for render\n","/**\n * Elit - State Management\n */\n\nimport type { State, StateOptions, VNode, VirtualListController, Child, Props } from './types';\nimport { dom } from './dom';\n\nexport type NativeBindingKind = 'value' | 'checked';\n\nexport interface NativeBindingMetadata<T = unknown> {\n kind: NativeBindingKind;\n state: State<T>;\n}\n\nexport const ELIT_NATIVE_BINDING = Symbol.for('elit.native.binding');\nconst ELIT_INTERNAL_WS_PATH = '/__elit_ws';\n\n// State management helpers\nexport const createState = <T>(initial: T, options?: StateOptions): State<T> =>\n dom.createState(initial, options);\n\nexport const computed = <T extends any[], R>(\n states: { [K in keyof T]: State<T[K]> },\n fn: (...values: T) => R\n): State<R> => dom.computed(states, fn);\n\nexport const effect = (fn: () => void): void => dom.effect(fn);\n\n// Performance helpers\nexport const batchRender = (container: string | HTMLElement, vNodes: VNode[]): HTMLElement =>\n dom.batchRender(container, vNodes);\n\nexport const renderChunked = (\n container: string | HTMLElement,\n vNodes: VNode[],\n chunkSize?: number,\n onProgress?: (current: number, total: number) => void\n): HTMLElement => dom.renderChunked(container, vNodes, chunkSize, onProgress);\n\nexport const createVirtualList = <T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight?: number,\n bufferSize?: number\n): VirtualListController => dom.createVirtualList(container, items, renderItem, itemHeight, bufferSize);\n\nexport const lazy = <T extends any[], R>(loadFn: () => Promise<(...args: T) => R>) =>\n dom.lazy(loadFn);\n\nexport const cleanupUnused = (root: HTMLElement): number =>\n dom.cleanupUnusedElements(root);\n\n// Throttle helper\nexport const throttle = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, delay);\n }\n };\n};\n\n// Debounce helper\nexport const debounce = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n timer && clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n};\n\nexport function bindValue<T extends string | number | string[]>(state: State<T>): Props {\n const props = {\n value: state.value,\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null;\n if (!target) {\n return;\n }\n\n if (target instanceof HTMLSelectElement && target.multiple) {\n state.value = Array.from(target.selectedOptions).map((option) => option.value) as T;\n return;\n }\n\n const nextValue = typeof state.value === 'number'\n ? Number(target.value)\n : target.value;\n\n state.value = (typeof state.value === 'number' && Number.isNaN(nextValue))\n ? state.value\n : nextValue as T;\n },\n } as Props & { [ELIT_NATIVE_BINDING]: NativeBindingMetadata<T> };\n\n props[ELIT_NATIVE_BINDING] = {\n kind: 'value',\n state,\n };\n\n return props;\n}\n\nexport function bindChecked(state: State<boolean>): Props {\n const props = {\n checked: state.value,\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement | null;\n if (!target) {\n return;\n }\n\n state.value = Boolean(target.checked);\n },\n } as Props & { [ELIT_NATIVE_BINDING]: NativeBindingMetadata<boolean> };\n\n props[ELIT_NATIVE_BINDING] = {\n kind: 'checked',\n state,\n };\n\n return props;\n}\n\n// ===== Shared State - syncs with elit-server =====\n\ntype StateChangeCallback<T = any> = (value: T, oldValue: T) => void;\n\ninterface StateMessage {\n type: 'state:init' | 'state:update' | 'state:subscribe' | 'state:unsubscribe' | 'state:change';\n key: string;\n value?: any;\n timestamp?: number;\n}\n\nfunction resolveSharedStateWebSocketUrl(wsUrl?: string): string {\n const protocol = typeof location !== 'undefined' && location.protocol === 'https:' ? 'wss:' : 'ws:';\n const origin = typeof location !== 'undefined' ? `${protocol}//${location.host}` : `${protocol}//localhost`;\n\n if (!wsUrl) {\n return `${origin}${ELIT_INTERNAL_WS_PATH}`;\n }\n\n if (/^wss?:\\/\\//i.test(wsUrl)) {\n const parsedUrl = new URL(wsUrl);\n if (!parsedUrl.pathname || parsedUrl.pathname === '/') {\n parsedUrl.pathname = ELIT_INTERNAL_WS_PATH;\n }\n return parsedUrl.toString();\n }\n\n if (wsUrl.startsWith('/')) {\n return `${origin}${wsUrl}`;\n }\n\n return wsUrl;\n}\n\n/**\n * Shared State - syncs with elit-server\n */\nexport class SharedState<T = any> {\n private localState: State<T>;\n private ws: WebSocket | null = null;\n private pendingUpdates: T[] = [];\n private previousValue: T;\n\n constructor(\n public readonly key: string,\n defaultValue: T,\n private wsUrl?: string\n ) {\n this.localState = createState(defaultValue);\n this.previousValue = defaultValue;\n this.connect();\n }\n\n /**\n * Get current value\n */\n get value(): T {\n return this.localState.value;\n }\n\n /**\n * Set new value and sync to server\n */\n set value(newValue: T) {\n this.previousValue = this.localState.value;\n this.localState.value = newValue;\n this.sendToServer(newValue);\n }\n\n /**\n * Get the underlying Elit State (for reactive binding)\n */\n get state(): State<T> {\n return this.localState;\n }\n\n /**\n * Subscribe to changes (returns Elit State for reactive)\n */\n onChange(callback: StateChangeCallback<T>): () => void {\n return this.localState.subscribe((newValue) => {\n const oldValue = this.previousValue;\n this.previousValue = newValue;\n callback(newValue, oldValue);\n });\n }\n\n /**\n * Update value using a function\n */\n update(updater: (current: T) => T): void {\n this.value = updater(this.value);\n }\n\n /**\n * Connect to WebSocket\n */\n private connect(): void {\n if (typeof window === 'undefined') return;\n\n const url = resolveSharedStateWebSocketUrl(this.wsUrl);\n this.ws = new WebSocket(url);\n\n this.ws.addEventListener('open', () => {\n this.subscribe();\n\n // Send pending updates\n while (this.pendingUpdates.length > 0) {\n const value = this.pendingUpdates.shift();\n this.sendToServer(value!);\n }\n });\n\n this.ws.addEventListener('message', (event) => {\n this.handleMessage(event.data);\n });\n\n this.ws.addEventListener('close', () => {\n // Reconnect after delay\n setTimeout(() => this.connect(), 1000);\n });\n\n this.ws.addEventListener('error', (error) => {\n console.error('[SharedState] WebSocket error:', error);\n });\n }\n\n /**\n * Subscribe to server state\n */\n private subscribe(): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n\n this.ws.send(JSON.stringify({\n type: 'state:subscribe',\n key: this.key\n }));\n }\n\n /**\n * Handle message from server\n */\n private handleMessage(data: string): void {\n try {\n const msg = JSON.parse(data) as StateMessage;\n\n if (msg.key !== this.key) return;\n\n if (msg.type === 'state:init' || msg.type === 'state:update') {\n // Update local state without sending back to server\n this.localState.value = msg.value;\n }\n } catch (error) {\n // Ignore parse errors (could be HMR messages)\n }\n }\n\n /**\n * Send value to server\n */\n private sendToServer(value: T): void {\n if (!this.ws) return;\n\n if (this.ws.readyState !== WebSocket.OPEN) {\n // Queue update for when connection is ready\n this.pendingUpdates.push(value);\n return;\n }\n\n this.ws.send(JSON.stringify({\n type: 'state:change',\n key: this.key,\n value\n }));\n }\n\n /**\n * Disconnect\n */\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n /**\n * Destroy state and cleanup\n */\n destroy(): void {\n this.disconnect();\n this.localState.destroy();\n }\n}\n\n/**\n * Create a shared state that syncs with elit-server\n */\nexport function createSharedState<T>(\n key: string,\n defaultValue: T,\n wsUrl?: string\n): SharedState<T> {\n return new SharedState(key, defaultValue, wsUrl);\n}\n\n/**\n * Shared State Manager for managing multiple shared states\n */\nclass SharedStateManager {\n private states = new Map<string, SharedState<any>>();\n\n /**\n * Create or get a shared state\n */\n create<T>(key: string, defaultValue: T, wsUrl?: string): SharedState<T> {\n if (this.states.has(key)) {\n return this.states.get(key) as SharedState<T>;\n }\n\n const state = new SharedState<T>(key, defaultValue, wsUrl);\n this.states.set(key, state);\n return state;\n }\n\n /**\n * Get existing state\n */\n get<T>(key: string): SharedState<T> | undefined {\n return this.states.get(key) as SharedState<T>;\n }\n\n /**\n * Delete a state\n */\n delete(key: string): boolean {\n const state = this.states.get(key);\n if (state) {\n state.destroy();\n return this.states.delete(key);\n }\n return false;\n }\n\n /**\n * Clear all states\n */\n clear(): void {\n this.states.forEach(state => state.destroy());\n this.states.clear();\n }\n}\n\n// Export singleton instance\nexport const sharedStateManager = new SharedStateManager();\n\n// ===== Reactive Rendering Helpers =====\n\n// Helper function to schedule RAF updates (reused in reactive and reactiveAs)\nconst scheduleRAFUpdate = (rafId: number | null, updateFn: () => void): number => {\n rafId && cancelAnimationFrame(rafId);\n return requestAnimationFrame(() => {\n updateFn();\n });\n};\n\n// Helper function to render content to fragment (reused in reactive and reactiveAs)\nconst renderToFragment = (content: VNode | Child | Child[], isVNode?: boolean): DocumentFragment => {\n const fragment = document.createDocumentFragment();\n\n if (Array.isArray(content)) {\n // Handle array of children\n for (const child of content) {\n dom.renderToDOM(child, fragment);\n }\n } else if (isVNode && content && typeof content === 'object' && 'tagName' in content) {\n const { children } = content as VNode;\n for (const child of children) {\n dom.renderToDOM(child, fragment);\n }\n } else {\n dom.renderToDOM(content, fragment);\n }\n\n return fragment;\n};\n\n// Helper function to update element props (reused in reactive)\nconst updateElementProps = (element: HTMLElement | SVGElement, props: Props): void => {\n for (const key in props) {\n const value = props[key];\n if (key === 'ref') continue;\n\n if (key === 'class' || key === 'className') {\n (element as HTMLElement).className = Array.isArray(value) ? value.join(' ') : (value || '');\n } else if (key === 'style' && typeof value === 'object') {\n const s = (element as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n } else if (key.startsWith('on')) {\n (element as any)[key.toLowerCase()] = value;\n } else if (value != null && value !== false) {\n element.setAttribute(key, String(value === true ? '' : value));\n } else {\n element.removeAttribute(key);\n }\n }\n};\n\n// Reactive element helpers\nexport const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n let placeholder: Comment | null = null;\n let isInDOM = true;\n\n const initialResult = renderFn(state.value);\n const isVNodeResult = initialResult && typeof initialResult === 'object' && 'tagName' in initialResult;\n const initialIsNull = initialResult == null || initialResult === false;\n\n const updateElement = () => {\n if (!elementRef && !placeholder) return;\n\n const newResult = renderFn(state.value);\n const resultIsNull = newResult == null || newResult === false;\n\n if (resultIsNull) {\n if (isInDOM && elementRef) {\n placeholder = document.createComment('reactive');\n elementRef.parentNode?.replaceChild(placeholder, elementRef);\n isInDOM = false;\n }\n } else {\n if (!isInDOM && placeholder && elementRef) {\n placeholder.parentNode?.replaceChild(elementRef, placeholder);\n placeholder = null;\n isInDOM = true;\n }\n\n if (elementRef) {\n const isCurrentVNode = !!(isVNodeResult && newResult && typeof newResult === 'object' && 'tagName' in newResult);\n if (isCurrentVNode) {\n const { props } = newResult as VNode;\n updateElementProps(elementRef, props);\n }\n const fragment = renderToFragment(newResult as any, isCurrentVNode);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n dom.getElementCache().set(elementRef, true);\n }\n }\n };\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n updateElement();\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n if (initialIsNull && el.parentNode) {\n placeholder = document.createComment('reactive');\n el.parentNode.replaceChild(placeholder, el);\n isInDOM = false;\n }\n };\n\n if (isVNodeResult) {\n const vnode = initialResult as VNode;\n return {\n tagName: vnode.tagName,\n props: { ...vnode.props, ref: refCallback },\n children: vnode.children\n };\n }\n\n // Handle array result - wrap in fragment-like VNode\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n // Use span with display: contents as wrapper (doesn't affect layout)\n return { tagName: 'span', props: { ref: refCallback, style: { display: 'contents' } }, children: initialChildren };\n};\n\n// Reactive element with custom wrapper tag\nexport const reactiveAs = <T>(\n tagName: string,\n state: State<T>,\n renderFn: (value: T) => VNode | Child | Child[],\n props: Props = {}\n): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n if (elementRef) {\n const newResult = renderFn(state.value);\n\n if (newResult == null || newResult === false) {\n (elementRef as HTMLElement).style.display = 'none';\n elementRef.textContent = '';\n } else {\n (elementRef as HTMLElement).style.display = '';\n const fragment = renderToFragment(newResult as any, false);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n }\n dom.getElementCache().set(elementRef, true);\n }\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n };\n\n const initialResult = renderFn(state.value);\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };\n};\n\nexport const text = (state: State<any> | any): VNode | string =>\n (state && state.value !== undefined)\n ? reactive(state, v => ({ tagName: 'span', props: {}, children: [String(v)] }))\n : String(state);\n"],"mappings":"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","names":["text","throttle","render"]}
package/dist/types.d.mts CHANGED
@@ -298,6 +298,27 @@ type ElementFactory = {
298
298
 
299
299
  type Router = ServerRouter;
300
300
  type StateManager = StateManager$1;
301
+ type WebSocketConnection = WebSocket;
302
+ type WebSocketRequest = IncomingMessage;
303
+ interface WebSocketEndpointContext {
304
+ /** Accepted WebSocket connection */
305
+ ws: WebSocketConnection;
306
+ /** Upgrade request metadata */
307
+ req: WebSocketRequest;
308
+ /** Matched request path without query string */
309
+ path: string;
310
+ /** Parsed query string values */
311
+ query: Record<string, string>;
312
+ /** Request headers */
313
+ headers: Record<string, string | string[] | undefined>;
314
+ }
315
+ type WebSocketEndpointHandler = (ctx: WebSocketEndpointContext) => void | Promise<void>;
316
+ interface WebSocketEndpointConfig {
317
+ /** Path to listen for WebSocket upgrades (e.g., '/ws', '/chat') */
318
+ path: string;
319
+ /** Connection handler invoked after a successful WebSocket upgrade */
320
+ handler: WebSocketEndpointHandler;
321
+ }
301
322
  interface ClientConfig {
302
323
  /** Root directory to serve files from */
303
324
  root: string;
@@ -317,6 +338,8 @@ interface ClientConfig {
317
338
  worker?: WorkerConfig[];
318
339
  /** API router for REST endpoints specific to this client */
319
340
  api?: Router;
341
+ /** WebSocket endpoints specific to this client */
342
+ ws?: WebSocketEndpointConfig[];
320
343
  /** Server mode: 'dev' uses source files, 'preview' uses built files (default: 'dev') */
321
344
  mode?: 'dev' | 'preview';
322
345
  }
@@ -371,6 +394,8 @@ interface DevServerOptions {
371
394
  logging?: boolean;
372
395
  /** API router for REST endpoints */
373
396
  api?: Router;
397
+ /** WebSocket endpoints */
398
+ ws?: WebSocketEndpointConfig[];
374
399
  /** SSR render function - returns HTML VNode or string */
375
400
  ssr?: () => Child | string;
376
401
  /** Proxy configuration for API requests */
@@ -472,6 +497,8 @@ interface PreviewOptions {
472
497
  logging?: boolean;
473
498
  /** API router for REST endpoints */
474
499
  api?: Router;
500
+ /** WebSocket endpoints */
501
+ ws?: WebSocketEndpointConfig[];
475
502
  /** SSR render function - returns HTML VNode or string */
476
503
  ssr?: () => Child | string;
477
504
  /** Proxy configuration for API requests */
@@ -534,4 +561,4 @@ interface TestOptions {
534
561
  env?: Record<string, string>;
535
562
  }
536
563
 
537
- export type { BuildOptions, BuildResult, Child, Children, ClientConfig, DevServer, DevServerOptions, ElementFactory, HMRMessage, JsonNode, PreviewOptions, Props, ProxyConfig, RefCallback, RefObject, Router, State, StateManager, StateOptions, TestCoverageOptions, TestCoverageProvider, TestCoverageReporter, TestEnvironment, TestOptions, VNode, VNodeJson, VirtualListController, WorkerConfig };
564
+ export type { BuildOptions, BuildResult, Child, Children, ClientConfig, DevServer, DevServerOptions, ElementFactory, HMRMessage, JsonNode, PreviewOptions, Props, ProxyConfig, RefCallback, RefObject, Router, State, StateManager, StateOptions, TestCoverageOptions, TestCoverageProvider, TestCoverageReporter, TestEnvironment, TestOptions, VNode, VNodeJson, VirtualListController, WebSocketConnection, WebSocketEndpointConfig, WebSocketEndpointContext, WebSocketEndpointHandler, WebSocketRequest, WorkerConfig };
package/dist/types.d.ts CHANGED
@@ -59,6 +59,27 @@ import type { Server } from 'http';
59
59
  import type { WebSocketServer } from 'ws';
60
60
  export type Router = import('./server').ServerRouter;
61
61
  export type StateManager = import('./server').StateManager;
62
+ export type WebSocketConnection = import('./ws').WebSocket;
63
+ export type WebSocketRequest = import('./http').IncomingMessage;
64
+ export interface WebSocketEndpointContext {
65
+ /** Accepted WebSocket connection */
66
+ ws: WebSocketConnection;
67
+ /** Upgrade request metadata */
68
+ req: WebSocketRequest;
69
+ /** Matched request path without query string */
70
+ path: string;
71
+ /** Parsed query string values */
72
+ query: Record<string, string>;
73
+ /** Request headers */
74
+ headers: Record<string, string | string[] | undefined>;
75
+ }
76
+ export type WebSocketEndpointHandler = (ctx: WebSocketEndpointContext) => void | Promise<void>;
77
+ export interface WebSocketEndpointConfig {
78
+ /** Path to listen for WebSocket upgrades (e.g., '/ws', '/chat') */
79
+ path: string;
80
+ /** Connection handler invoked after a successful WebSocket upgrade */
81
+ handler: WebSocketEndpointHandler;
82
+ }
62
83
  export interface ClientConfig {
63
84
  /** Root directory to serve files from */
64
85
  root: string;
@@ -78,6 +99,8 @@ export interface ClientConfig {
78
99
  worker?: WorkerConfig[];
79
100
  /** API router for REST endpoints specific to this client */
80
101
  api?: Router;
102
+ /** WebSocket endpoints specific to this client */
103
+ ws?: WebSocketEndpointConfig[];
81
104
  /** Server mode: 'dev' uses source files, 'preview' uses built files (default: 'dev') */
82
105
  mode?: 'dev' | 'preview';
83
106
  }
@@ -132,6 +155,8 @@ export interface DevServerOptions {
132
155
  logging?: boolean;
133
156
  /** API router for REST endpoints */
134
157
  api?: Router;
158
+ /** WebSocket endpoints */
159
+ ws?: WebSocketEndpointConfig[];
135
160
  /** SSR render function - returns HTML VNode or string */
136
161
  ssr?: () => Child | string;
137
162
  /** Proxy configuration for API requests */
@@ -233,6 +258,8 @@ export interface PreviewOptions {
233
258
  logging?: boolean;
234
259
  /** API router for REST endpoints */
235
260
  api?: Router;
261
+ /** WebSocket endpoints */
262
+ ws?: WebSocketEndpointConfig[];
236
263
  /** SSR render function - returns HTML VNode or string */
237
264
  ssr?: () => Child | string;
238
265
  /** Proxy configuration for API requests */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}