@qorejs/qore 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/signal.ts","../src/render.ts","../src/stream.ts","../src/ssr.ts","../src/virtual-list.ts","../src/error.ts","../src/utils.ts"],"sourcesContent":["/**\n * Qore Signal System - Fine-grained Reactivity\n */\n\ntype EffectFn = () => void | (() => void);\n\nlet activeEffect: EffectNode | null = null;\nlet batchDepth = 0;\nconst pendingEffects = new Set<EffectNode>();\n\nclass EffectNode {\n deps = new Set<SignalNode<any>>();\n fn: EffectFn;\n cleanup?: () => void;\n \n constructor(fn: EffectFn) {\n this.fn = fn;\n }\n \n run(): void {\n // Clean up old dependencies\n for (const dep of this.deps) {\n dep.subs.delete(this);\n }\n this.deps.clear();\n \n // Call cleanup before execution\n if (this.cleanup) {\n this.cleanup();\n this.cleanup = undefined;\n }\n \n const prevEffect = activeEffect;\n activeEffect = this;\n try {\n const result = this.fn();\n // Save new cleanup function\n if (typeof result === 'function') {\n this.cleanup = result;\n }\n } finally {\n activeEffect = prevEffect;\n }\n }\n}\n\nclass SignalNode<T> {\n private value: T;\n subs = new Set<EffectNode>();\n \n constructor(initial: T) {\n this.value = initial;\n }\n \n get(): T {\n if (activeEffect) {\n this.subs.add(activeEffect);\n activeEffect.deps.add(this);\n }\n return this.value;\n }\n \n set(newValue: T): void {\n if (this.value === newValue) return;\n this.value = newValue;\n this.notify();\n }\n \n private notify(): void {\n const effectsToRun = Array.from(this.subs);\n \n if (batchDepth > 0) {\n effectsToRun.forEach(sub => pendingEffects.add(sub));\n return;\n }\n \n for (const effect of effectsToRun) {\n effect.run();\n }\n }\n}\n\nexport interface Signal<T> {\n (value?: T): T;\n peek(): T;\n}\n\nexport function signal<T>(initial: T): Signal<T> {\n const node = new SignalNode(initial);\n \n const sig = (value?: T): T => {\n if (value !== undefined) {\n node.set(value);\n return value;\n }\n return node.get();\n };\n \n sig.peek = () => {\n const prev = activeEffect;\n activeEffect = null; // Temporarily disable dependency tracking\n try {\n return node.get();\n } finally {\n activeEffect = prev;\n }\n };\n return sig;\n}\n\nexport function computed<T>(fn: () => T): Signal<T> {\n let value: T;\n let depsVersion = 0;\n let lastReadVersion = 0;\n const subs = new Set<EffectNode>();\n \n // Create effect node to track dependencies\n const effectNode = new EffectNode(() => {\n depsVersion++;\n // Notify all subscribers when dependencies change\n for (const sub of subs) {\n if (batchDepth > 0) {\n pendingEffects.add(sub);\n } else {\n sub.run();\n }\n }\n });\n \n // Initial dependency collection - must be after creating effectNode\n const prevEffect = activeEffect;\n activeEffect = effectNode;\n try {\n value = fn();\n } finally {\n activeEffect = prevEffect;\n }\n lastReadVersion = depsVersion;\n \n const sig = (val?: T): T => {\n if (val !== undefined) {\n throw new Error('Computed signals are read-only');\n }\n \n // Let current effect subscribe to this computed\n if (activeEffect) {\n subs.add(activeEffect);\n }\n \n // Recalculate if dependencies have changed\n if (depsVersion > lastReadVersion) {\n const prev = activeEffect;\n activeEffect = effectNode;\n try {\n value = fn();\n } finally {\n activeEffect = prev;\n }\n lastReadVersion = depsVersion;\n }\n \n return value;\n };\n \n sig.peek = () => {\n if (depsVersion > lastReadVersion) {\n const prev = activeEffect;\n activeEffect = null; // Temporarily disable dependency tracking\n try {\n value = fn();\n } finally {\n activeEffect = prev;\n }\n lastReadVersion = depsVersion;\n }\n return value;\n };\n \n return sig;\n}\n\nexport function effect(fn: EffectFn): () => void {\n const node = new EffectNode(fn);\n node.run();\n return () => {\n // Call cleanup\n if (node.cleanup) {\n node.cleanup();\n node.cleanup = undefined;\n }\n // Clean up dependencies\n for (const dep of node.deps) {\n dep.subs.delete(node);\n }\n node.deps.clear();\n };\n}\n\nexport function batch<T>(fn: () => T): T {\n batchDepth++;\n try {\n return fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n const effects = Array.from(pendingEffects);\n pendingEffects.clear();\n for (const eff of effects) {\n eff.run();\n }\n }\n }\n}\n","/**\n * Qore Renderer - Fine-grained DOM Updates\n * No VDOM, No Diff - Direct signal binding\n * \n * Extended with Server-Side Streaming Support\n */\n\nimport { effect, signal } from './signal';\nimport { StreamRenderer } from './stream';\n\nexport type VNode = string | number | Node | Component | VNode[];\nexport type Component = () => VNode;\n\n/**\n * Portal - Render children to a different DOM node\n */\nexport function Portal({ children, target }: { children: VNode; target: HTMLElement | string }): null {\n const container = typeof target === 'string' ? document.querySelector(target) : target;\n \n if (!container) {\n console.warn('Portal target not found:', String(target));\n return null;\n }\n \n const renderToPortal = () => {\n container.innerHTML = '';\n const vnode = typeof children === 'function' ? children() : children;\n \n if (Array.isArray(vnode)) {\n vnode.forEach(node => {\n if (node instanceof Node) {\n container.appendChild(node);\n } else if (typeof node === 'string' || typeof node === 'number') {\n container.appendChild(document.createTextNode(String(node)));\n }\n });\n } else if (vnode instanceof Node) {\n container.appendChild(vnode);\n } else if (vnode != null) {\n container.appendChild(document.createTextNode(String(vnode)));\n }\n };\n \n if (typeof children === 'function') {\n effect(renderToPortal);\n } else {\n renderToPortal();\n }\n \n return null;\n}\n\nexport function h(\n type: string | Component,\n props: Record<string, any> | null = null,\n ...children: any[]\n): VNode {\n if (typeof type === 'function') {\n // Component function - pass props and children\n return type({ ...props, children: children.length > 0 ? children.flat() : undefined });\n }\n \n const el = document.createElement(type);\n \n if (props) {\n for (const [key, value] of Object.entries(props)) {\n if (key.startsWith('on') && typeof value === 'function') {\n el.addEventListener(key.slice(2).toLowerCase(), value);\n } else if (key === 'className') {\n el.className = value;\n } else if (key === 'style' && typeof value === 'object') {\n Object.assign(el.style, value);\n } else if (key === 'ref' && typeof value === 'function') {\n value(el);\n } else if (typeof value !== 'function') {\n el.setAttribute(key, value);\n }\n }\n }\n \n const flatChildren = children.flat(Infinity);\n for (const child of flatChildren) {\n if (child != null) {\n if (typeof child === 'string' || typeof child === 'number') {\n el.appendChild(document.createTextNode(String(child)));\n } else if (child instanceof Node) {\n el.appendChild(child);\n }\n }\n }\n \n return el;\n}\n\nexport function text(signalOrValue: (() => string | number) | string | number): Text {\n const node = document.createTextNode('');\n \n if (typeof signalOrValue === 'function') {\n effect(() => {\n node.textContent = String(signalOrValue());\n });\n } else {\n node.textContent = String(signalOrValue);\n }\n \n return node;\n}\n\nexport function render(root: HTMLElement, fn: () => VNode): () => void {\n let cleanup: (() => void) | undefined;\n \n const run = (): void => {\n cleanup?.();\n root.innerHTML = '';\n const vnode = fn();\n \n if (vnode instanceof Node) {\n root.appendChild(vnode);\n } else {\n root.appendChild(document.createTextNode(String(vnode)));\n }\n };\n \n const stop = effect(run);\n cleanup = stop;\n return stop;\n}\n\nexport function show<T>(condition: () => boolean, fn: () => T): T | null {\n return condition() ? fn() : null;\n}\n\nexport function For<T, U>(\n items: () => T[],\n fn: (item: T, index: () => number) => U\n): U[] {\n const list = items();\n return list.map((item, i) => fn(item, () => i));\n}\n\nexport const Fragment = ({ children }: { children: any[] }) => children;\n\n// Common tag helpers\nconst tag = (name: string) => (props: any = null, ...children: any[]) => h(name, props, ...children);\n\nexport const div = tag('div');\nexport const span = tag('span');\nexport const button = tag('button');\nexport const input = tag('input');\nexport const p = tag('p');\nexport const h1 = tag('h1');\nexport const h2 = tag('h2');\nexport const h3 = tag('h3');\n\n// ============== Server-Side Rendering ==============\n\n/**\n * Convert VNode to HTML string (SSR)\n * Pure string concatenation, no DOM API dependency, runs in Node.js environment\n */\nexport function renderToString(vnode: VNode): string {\n if (vnode == null) return '';\n \n if (typeof vnode === 'string' || typeof vnode === 'number') {\n return String(vnode);\n }\n \n if (Array.isArray(vnode)) {\n return vnode.map(v => renderToString(v)).join('');\n }\n \n if (typeof vnode === 'function') {\n // Component function\n return renderToString(vnode());\n }\n \n // Handle DOM nodes (in jsdom/browser environment)\n // Use nodeType detection instead of instanceof to avoid environment dependency\n if (typeof vnode === 'object' && 'nodeType' in vnode) {\n const node = vnode as unknown as { nodeType: number; outerHTML?: string; textContent?: string };\n // Element node\n if (node.nodeType === 1) {\n return node.outerHTML || '';\n }\n // Text/Comment node\n return node.textContent || '';\n }\n \n // Other object types\n if (typeof vnode === 'object') {\n return '';\n }\n \n return String(vnode);\n}\n\n/**\n * Render component to HTML string (SSR)\n */\nexport function renderComponentToString(component: Component): string {\n return renderToString(component());\n}\n\n/**\n * Stream render to StreamRenderer\n * Support chunked output for large components\n */\nexport function renderToStream(\n root: StreamRenderer,\n fn: () => VNode,\n options?: { chunkSize?: number; onChunk?: (chunk: string) => void }\n): { abort: () => void } {\n const { chunkSize = 1000, onChunk } = options || {};\n let aborted = false;\n \n const processChunk = (html: string) => {\n if (aborted) return;\n root.write(html);\n onChunk?.(html);\n };\n \n // Process large content in chunks\n const vnode = fn();\n const html = renderToString(vnode);\n \n if (html.length <= chunkSize) {\n processChunk(html);\n } else {\n // Output in chunks\n for (let i = 0; i < html.length; i += chunkSize) {\n if (aborted) break;\n processChunk(html.slice(i, i + chunkSize));\n }\n }\n \n return {\n abort: () => { aborted = true; }\n };\n}\n\n/**\n * Async VNode parsing\n * Support components returning Promise\n */\nexport async function renderAsync(vnode: VNode | Promise<VNode>): Promise<string> {\n const resolved = await vnode;\n \n if (resolved == null) return '';\n \n if (typeof resolved === 'string' || typeof resolved === 'number') {\n return String(resolved);\n }\n \n if (Array.isArray(resolved)) {\n const results = await Promise.all(resolved.map(v => renderAsync(v)));\n return results.join('');\n }\n \n if (resolved instanceof Node) {\n return resolved instanceof Element ? resolved.outerHTML : resolved.textContent || '';\n }\n \n if (typeof resolved === 'function') {\n return renderAsync(resolved());\n }\n \n return '';\n}\n\n/**\n * Async stream rendering\n * Support streaming output for async components\n */\nexport async function renderToStreamAsync(\n renderer: StreamRenderer,\n fn: () => VNode | Promise<VNode>\n): Promise<void> {\n try {\n const vnode = await fn();\n const html = await renderAsync(vnode);\n renderer.write(html);\n renderer.end();\n } catch (err) {\n renderer.fail(err as Error);\n }\n}\n","/**\n * Qore Stream - AI Streaming & Server-Side Streaming Support\n * Minimal API for AI responses and SSR streaming\n */\n\nimport { signal, effect, computed } from './signal';\nimport { VNode, Component } from './render';\n\nexport interface StreamWriter {\n (chunk: string): void;\n clear(): void;\n done(): void;\n}\n\nexport interface StreamOptions {\n container: HTMLElement;\n parseMarkdown?: boolean;\n onComplete?: () => void;\n onError?: (error: Error) => void;\n}\n\n/**\n * AI streaming response (client-side)\n */\nexport function stream(\n fn: (write: StreamWriter) => Promise<void>,\n options: StreamOptions\n): { abort: () => void } {\n const { container, parseMarkdown = false, onComplete, onError } = options;\n \n let aborted = false;\n let content = '';\n \n container.innerHTML = '';\n const output = document.createElement('div');\n output.className = 'stream-output';\n container.appendChild(output);\n \n const update = () => {\n output.innerHTML = parseMarkdown ? doParseMarkdown(content) : content;\n };\n \n const write: StreamWriter = (chunk: string) => {\n if (aborted) return;\n content += chunk;\n update();\n };\n \n write.clear = () => { content = ''; update(); };\n write.done = () => { if (!aborted) onComplete?.(); };\n \n Promise.resolve().then(() => fn(write))\n .catch((err: Error) => { if (!aborted) onError?.(err); });\n \n return {\n abort: () => { aborted = true; }\n };\n}\n\n/**\n * Simple Markdown parser\n */\nfunction doParseMarkdown(text: string): string {\n return text\n .replace(/^### (.*$)/gim, '<h3>$1</h3>')\n .replace(/^## (.*$)/gim, '<h2>$1</h2>')\n .replace(/^# (.*$)/gim, '<h1>$1</h1>')\n .replace(/\\*\\*(.*)\\*\\*/gim, '<strong>$1</strong>')\n .replace(/\\*(.*)\\*/gim, '<em>$1</em>')\n .replace(/`([^`]+)`/gim, '<code>$1</code>')\n .replace(/\\n/gim, '<br>');\n}\n\n/**\n * Typewriter effect\n */\nexport function streamText(\n text: string,\n options: { container: HTMLElement; speed?: number; onComplete?: () => void }\n): { abort: () => void } {\n const { container, speed = 30, onComplete } = options;\n \n return stream(async (write) => {\n for (let i = 0; i < text.length; i++) {\n await new Promise(r => setTimeout(r, speed));\n write(text[i]);\n }\n write.done();\n }, { container, onComplete });\n}\n\n// ============== Server-Side Streaming ==============\n\n/**\n * Server-side stream renderer\n * Support chunked HTML fragment output\n */\nexport class StreamRenderer {\n private chunks: string[] = [];\n private callbacks: ((chunk: string) => void)[] = [];\n private resolved = false;\n private error: Error | null = null;\n\n /**\n * Write an HTML chunk\n */\n write(chunk: string): void {\n this.chunks.push(chunk);\n this.callbacks.forEach(cb => cb(chunk));\n }\n\n /**\n * Complete stream rendering\n */\n end(): void {\n this.resolved = true;\n }\n\n /**\n * Throw error\n */\n fail(err: Error): void {\n this.error = err;\n this.resolved = true;\n }\n\n /**\n * Subscribe to stream output\n */\n subscribe(callback: (chunk: string) => void): () => void {\n this.callbacks.push(callback);\n // Immediately send existing chunks\n this.chunks.forEach(chunk => callback(chunk));\n \n return () => {\n const idx = this.callbacks.indexOf(callback);\n if (idx !== -1) this.callbacks.splice(idx, 1);\n };\n }\n\n /**\n * Get complete HTML\n */\n getHTML(): string {\n return this.chunks.join('');\n }\n\n /**\n * Async iterator - for use with for await...of\n */\n async *[Symbol.asyncIterator](): AsyncGenerator<string, void, unknown> {\n let index = 0;\n \n while (index < this.chunks.length || !this.resolved) {\n if (index < this.chunks.length) {\n yield this.chunks[index++];\n } else {\n await new Promise(resolve => {\n const check = () => {\n if (index < this.chunks.length || this.resolved) {\n resolve(undefined);\n } else {\n setTimeout(check, 10);\n }\n };\n check();\n });\n }\n }\n\n if (this.error) {\n throw this.error;\n }\n }\n}\n\n/**\n * Stream HTML fragment generator\n */\nexport function createStreamHTML(): {\n renderer: StreamRenderer;\n html: () => string;\n stream: () => AsyncGenerator<string>;\n} {\n const renderer = new StreamRenderer();\n \n return {\n renderer,\n html: () => renderer.getHTML(),\n stream: () => renderer[Symbol.asyncIterator]()\n };\n}\n\n// ============== Suspense & Lazy Loading ==============\n\n/**\n * Suspense state\n */\nexport type SuspenseState = 'pending' | 'resolved' | 'error';\n\n/**\n * Suspense component props\n */\nexport interface SuspenseProps {\n fallback: VNode;\n children: () => VNode;\n onError?: (error: Error) => void;\n}\n\n/**\n * Suspense boundary component\n * Wraps asynchronously loaded components - each instance has independent state\n */\nexport function Suspense({ fallback, children, onError }: SuspenseProps): Component {\n // State sinks to component instance level, avoiding global singleton issues\n const state = signal<SuspenseState>('pending');\n const errorSig = signal<Error | null>(null);\n\n return () => {\n const s = state();\n const err = errorSig();\n\n if (s === 'error') {\n onError?.(err!);\n return fallback;\n }\n\n if (s === 'pending') {\n return fallback;\n }\n\n return children();\n };\n}\n\n/**\n * Create Suspense component with state\n * Allow external control of loading state\n */\nexport function createSuspense({ fallback, children, onError }: SuspenseProps): {\n component: Component;\n setState: (state: SuspenseState, error?: Error) => void;\n getState: () => SuspenseState;\n} {\n const state = signal<SuspenseState>('pending');\n const errorSig = signal<Error | null>(null);\n\n const component: Component = () => {\n const s = state();\n const err = errorSig();\n\n if (s === 'error') {\n onError?.(err!);\n return fallback;\n }\n\n if (s === 'pending') {\n return fallback;\n }\n\n return children();\n };\n\n return {\n component,\n setState: (newState: SuspenseState, error?: Error) => {\n state(newState);\n if (error) errorSig(error);\n },\n getState: () => state()\n };\n}\n\n/**\n * lazy() - lazy load component\n * Returns a wrapped component that displays Suspense fallback on first render\n */\nexport function lazy<T extends Component>(\n importFn: () => Promise<{ default: T }>\n): () => { load: () => Promise<T>; component: T | null } {\n let loadedComponent: T | null = null;\n let loadPromise: Promise<T> | null = null;\n\n const load = async (): Promise<T> => {\n if (loadedComponent) return loadedComponent;\n if (loadPromise) return loadPromise;\n\n loadPromise = importFn().then(mod => {\n loadedComponent = mod.default;\n return loadedComponent;\n });\n\n return loadPromise;\n };\n\n return () => {\n return {\n load,\n component: loadedComponent\n };\n };\n}\n\n/**\n * Async component wrapper\n */\nexport function asyncComponent<T extends Component>(\n importFn: () => Promise<{ default: T }>,\n fallback: VNode\n): Component {\n const lazyFactory = lazy(importFn);\n const state = signal<SuspenseState>('pending');\n const component = signal<T | null>(null);\n\n // 触发加载\n lazyFactory().load()\n .then(comp => {\n component(comp);\n state('resolved');\n })\n .catch(err => {\n console.error('Async component load failed:', err);\n state('error');\n });\n\n return () => {\n if (state() === 'pending') {\n return fallback;\n }\n \n if (state() === 'error') {\n return fallback;\n }\n\n const comp = component();\n return comp ? comp() : fallback;\n };\n}\n\n// ============== Incremental DOM Updates ==============\n\n/**\n * Incremental update chunk\n */\nexport interface IncrementalUpdate {\n id: string;\n html: string;\n type: 'replace' | 'append' | 'prepend' | 'remove';\n}\n\n/**\n * Create incremental update message\n */\nexport function createUpdate(id: string, html: string, type: IncrementalUpdate['type'] = 'replace'): IncrementalUpdate {\n return { id, html, type };\n}\n\n/**\n * Apply incremental update to DOM\n */\nexport function applyUpdate(container: HTMLElement, update: IncrementalUpdate): void {\n const { id, html, type } = update;\n const element = container.querySelector(`[data-stream-id=\"${id}\"]`);\n\n switch (type) {\n case 'replace':\n if (element) {\n element.outerHTML = html;\n } else {\n const temp = document.createElement('div');\n temp.innerHTML = html;\n const newEl = temp.firstElementChild;\n if (newEl) {\n newEl.setAttribute('data-stream-id', id);\n container.appendChild(newEl);\n }\n }\n break;\n\n case 'append':\n if (element) {\n element.insertAdjacentHTML('beforeend', html);\n }\n break;\n\n case 'prepend':\n if (element) {\n element.insertAdjacentHTML('afterbegin', html);\n }\n break;\n\n case 'remove':\n if (element) {\n element.remove();\n }\n break;\n }\n}\n\n/**\n * Stream render to target element\n * Support server-push incremental updates\n */\nexport function renderToStream(\n container: HTMLElement,\n stream: AsyncGenerator<string, void, unknown>\n): { abort: () => void } {\n let aborted = false;\n\n (async () => {\n try {\n for await (const chunk of stream) {\n if (aborted) break;\n \n // Parse incremental update\n try {\n const update: IncrementalUpdate = JSON.parse(chunk);\n applyUpdate(container, update);\n } catch {\n // If not JSON, directly append HTML\n container.insertAdjacentHTML('beforeend', chunk);\n }\n }\n } catch (err) {\n console.error('Stream rendering error:', err);\n }\n })();\n\n return {\n abort: () => { aborted = true; }\n };\n}\n","/**\n * Qore SSR - Server-Side Rendering\n * Complete SSR support with streaming, suspense, and data prefetching\n */\n\nimport { StreamRenderer } from './stream';\nimport type { VNode, Component } from './render';\n\n// HTML escaping\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\n\n/**\n * Convert VNode to HTML string (SSR)\n */\nexport function renderToString(vnode: VNode): string {\n if (vnode == null || vnode === false) return '';\n \n if (typeof vnode === 'string') {\n return escapeHtml(vnode);\n }\n \n if (typeof vnode === 'number') {\n return String(vnode);\n }\n \n if (Array.isArray(vnode)) {\n return vnode.map(v => renderToString(v)).join('');\n }\n \n if (typeof vnode === 'function') {\n // Component function\n try {\n const result = vnode();\n return renderToString(result);\n } catch (err) {\n console.error('Component render error:', err);\n return '<!-- Error -->';\n }\n }\n \n // Already a rendered node (shouldn't happen in SSR)\n return '';\n}\n\n/**\n * Render component to HTML string (SSR)\n */\nexport function renderComponentToString(component: Component): string {\n return renderToString(component());\n}\n\n/**\n * Render props object to HTML attributes string\n */\nexport function renderProps(props: Record<string, any> | null): string {\n if (!props) return '';\n \n const attrs: string[] = [];\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children' || key === 'key' || value == null) continue;\n \n if (key.startsWith('on')) continue; // Skip event handlers\n \n if (key === 'className') {\n attrs.push(`class=\"${escapeHtml(String(value))}\"`);\n } else if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(([k, v]) => `${k.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`)}: ${v}`)\n .join('; ');\n attrs.push(`style=\"${escapeHtml(styleStr)}\"`);\n } else if (typeof value !== 'function') {\n attrs.push(`${key}=\"${escapeHtml(String(value))}\"`);\n }\n }\n \n return attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n}\n\n/**\n * Create HTML element string\n */\nexport function renderElement(\n type: string,\n props: Record<string, any> | null,\n children: VNode[]\n): string {\n const propsStr = renderProps(props);\n const childrenStr = children.map(c => renderToString(c)).join('');\n \n // Self-closing tags\n const selfClosing = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n \n if (selfClosing.includes(type)) {\n return `<${type}${propsStr} />`;\n }\n \n return `<${type}${propsStr}>${childrenStr}</${type}>`;\n}\n\n/**\n * StreamRenderer for SSR - renders to a stream\n */\nexport function renderToStream(\n component: Component,\n options?: {\n chunkSize?: number;\n onChunk?: (chunk: string) => void;\n }\n): {\n renderer: StreamRenderer;\n promise: Promise<void>;\n abort: () => void;\n} {\n const { chunkSize = 1000, onChunk } = options || {};\n const renderer = new StreamRenderer();\n let aborted = false;\n \n const promise = Promise.resolve().then(() => {\n if (aborted) return;\n \n const vnode = component();\n const html = renderToString(vnode);\n \n if (html.length <= chunkSize) {\n renderer.write(html);\n onChunk?.(html);\n } else {\n // Chunk large content\n for (let i = 0; i < html.length; i += chunkSize) {\n if (aborted) break;\n const chunk = html.slice(i, i + chunkSize);\n renderer.write(chunk);\n onChunk?.(chunk);\n }\n }\n \n renderer.end();\n });\n \n return {\n renderer,\n promise,\n abort: () => { aborted = true; }\n };\n}\n\n/**\n * Async VNode rendering - supports Promise-based components\n */\nexport async function renderAsync(vnode: VNode | Promise<VNode>): Promise<string> {\n const resolved = await vnode;\n \n if (resolved == null || resolved === false) return '';\n \n if (typeof resolved === 'string') {\n return escapeHtml(resolved);\n }\n \n if (typeof resolved === 'number') {\n return String(resolved);\n }\n \n if (Array.isArray(resolved)) {\n const results = await Promise.all(resolved.map(v => renderAsync(v)));\n return results.join('');\n }\n \n if (typeof resolved === 'function') {\n try {\n const result = await resolved();\n return renderAsync(result);\n } catch (err) {\n console.error('Async component error:', err);\n return '<!-- Async Error -->';\n }\n }\n \n return '';\n}\n\n/**\n * Async stream rendering - supports async components with streaming output\n */\nexport async function renderToStreamAsync(\n component: Component,\n renderer: StreamRenderer,\n options?: {\n onChunk?: (chunk: string) => void;\n }\n): Promise<void> {\n const { onChunk } = options || {};\n \n try {\n const vnode = await Promise.resolve(component());\n const html = await renderAsync(vnode);\n renderer.write(html);\n onChunk?.(html);\n renderer.end();\n } catch (err) {\n console.error('Async stream render error:', err);\n renderer.fail(err as Error);\n }\n}\n\n/**\n * Data prefetching context\n */\nexport interface PrefetchContext {\n promises: Promise<any>[];\n errors: Error[];\n add: (promise: Promise<any>) => void;\n waitAll: () => Promise<void>;\n}\n\n/**\n * Create prefetch context\n */\nexport function createPrefetchContext(): PrefetchContext {\n const promises: Promise<any>[] = [];\n const errors: Error[] = [];\n \n return {\n promises,\n errors,\n add: (promise: Promise<any>) => {\n promises.push(\n promise.catch((err: Error) => {\n errors.push(err);\n return null;\n })\n );\n },\n waitAll: async () => {\n await Promise.all(promises);\n }\n };\n}\n\n/**\n * Prefetch data before rendering\n * Returns a component that can be rendered after data is loaded\n */\nexport async function prefetchAndRender<T>(\n prefetchFn: () => Promise<T>,\n renderFn: (data: T) => Component\n): Promise<string> {\n const ctx = createPrefetchContext();\n ctx.add(prefetchFn());\n await ctx.waitAll();\n \n if (ctx.errors.length > 0) {\n console.error('Prefetch errors:', ctx.errors);\n return '<!-- Prefetch Error -->';\n }\n \n // Get the data from the first promise\n const data = await ctx.promises[0];\n const component = renderFn(data);\n return renderToString(component());\n}\n\n/**\n * Suspense boundary for SSR\n * Waits for async components to resolve\n */\nexport async function renderWithSuspense(\n component: Component,\n options?: {\n fallback?: string;\n timeoutMs?: number;\n }\n): Promise<string> {\n const { fallback = '<!-- Loading -->', timeoutMs = 30000 } = options || {};\n \n const timeout = new Promise<string>((_, reject) => {\n setTimeout(() => reject(new Error('SSR timeout')), timeoutMs);\n });\n \n const render = Promise.resolve().then(() => {\n try {\n return renderToString(component());\n } catch (err) {\n console.error('Suspense render error:', err);\n return fallback;\n }\n });\n \n try {\n return await Promise.race([render, timeout]);\n } catch (err) {\n console.error('Suspense timeout:', err);\n return fallback;\n }\n}\n\n/**\n * Complete SSR render with all features\n */\nexport interface SSRResult {\n html: string;\n state?: string; // Hydration state\n errors: Error[];\n}\n\nexport async function renderSSR(\n component: Component,\n options?: {\n includeState?: boolean;\n state?: any;\n timeoutMs?: number;\n }\n): Promise<SSRResult> {\n const { includeState = false, state, timeoutMs } = options || {};\n const errors: Error[] = [];\n \n let html: string;\n try {\n html = await renderWithSuspense(component, { timeoutMs });\n } catch (err) {\n errors.push(err as Error);\n html = '<!-- SSR Error -->';\n }\n \n const result: SSRResult = {\n html,\n errors\n };\n \n if (includeState && state) {\n result.state = `<script>window.__QORE_STATE__ = ${JSON.stringify(state)}</script>`;\n }\n \n return result;\n}\n","/**\n * Qore Virtual List - High-performance list rendering\n * Windowed rendering for large lists\n */\n\nimport { signal, computed, effect } from './signal';\nimport { h, render, VNode, Component, For } from './render';\n\nexport interface VirtualListItem<T> {\n id: string | number;\n data: T;\n height?: number;\n}\n\nexport interface VirtualListProps<T> {\n items: T[];\n itemHeight: number | ((item: T, index: number) => number);\n containerHeight: number;\n renderItem: (item: T, index: number) => VNode;\n overscan?: number; // Number of items to render outside visible area\n onScroll?: (scrollTop: number) => void;\n onRangeChange?: (startIndex: number, endIndex: number) => void;\n className?: string;\n getKey?: (item: T, index: number) => string | number;\n}\n\nexport interface VirtualListState {\n scrollTop: number;\n containerHeight: number;\n totalHeight: number;\n visibleStartIndex: number;\n visibleEndIndex: number;\n}\n\n/**\n * Virtual List Component\n * Only renders visible items for better performance\n */\nexport function VirtualList<T>(props: VirtualListProps<T>): Component {\n const {\n items,\n itemHeight,\n containerHeight,\n renderItem,\n overscan = 5,\n onScroll,\n onRangeChange,\n className = 'virtual-list',\n getKey = (item, index) => index\n } = props;\n \n const isDynamicHeight = typeof itemHeight === 'function';\n \n // Scroll position\n const scrollTop = signal(0);\n \n // Calculate total height\n const totalHeight = computed(() => {\n if (!isDynamicHeight) {\n return items.length * itemHeight;\n }\n \n let height = 0;\n for (let i = 0; i < items.length; i++) {\n height += itemHeight(items[i], i);\n }\n return height;\n });\n \n // Get item height at index\n const getItemHeight = (index: number): number => {\n if (!isDynamicHeight) {\n return itemHeight as number;\n }\n return itemHeight(items[index], index);\n };\n \n // Calculate item position (offset from top)\n const getItemOffset = (index: number): number => {\n if (!isDynamicHeight) {\n return index * (itemHeight as number);\n }\n \n let offset = 0;\n for (let i = 0; i < index; i++) {\n offset += getItemHeight(i);\n }\n return offset;\n };\n \n // Find the first visible item index\n const findStartIndex = (scrollPos: number): number => {\n if (!isDynamicHeight) {\n return Math.max(0, Math.floor(scrollPos / (itemHeight as number)));\n }\n \n let offset = 0;\n for (let i = 0; i < items.length; i++) {\n const height = getItemHeight(i);\n if (offset + height > scrollPos) {\n return i;\n }\n offset += height;\n }\n return items.length - 1;\n };\n \n // Find the last visible item index\n const findEndIndex = (startIndex: number, scrollPos: number): number => {\n const viewportEnd = scrollPos + containerHeight;\n \n if (!isDynamicHeight) {\n return Math.min(\n items.length - 1,\n Math.ceil(viewportEnd / (itemHeight as number))\n );\n }\n \n let offset = getItemOffset(startIndex);\n for (let i = startIndex; i < items.length; i++) {\n const height = getItemHeight(i);\n if (offset > viewportEnd) {\n return i;\n }\n offset += height;\n }\n return items.length - 1;\n };\n \n // Visible range\n const visibleRange = computed(() => {\n const scrollPos = scrollTop();\n let startIndex = findStartIndex(scrollPos);\n let endIndex = findEndIndex(startIndex, scrollPos);\n \n // Add overscan\n startIndex = Math.max(0, startIndex - overscan);\n endIndex = Math.min(items.length - 1, endIndex + overscan);\n \n return { startIndex, endIndex };\n });\n \n // Notify range change\n effect(() => {\n const { startIndex, endIndex } = visibleRange();\n onRangeChange?.(startIndex, endIndex);\n });\n \n // Handle scroll\n const handleScroll = (e: Event) => {\n const target = e.target as HTMLElement;\n const newScrollTop = target.scrollTop;\n scrollTop(newScrollTop);\n onScroll?.(newScrollTop);\n };\n \n // Render\n return () => {\n const { startIndex, endIndex } = visibleRange();\n const visibleItems = items.slice(startIndex, endIndex + 1);\n \n // Calculate spacer heights\n const topSpacerHeight = getItemOffset(startIndex);\n const bottomSpacerHeight = totalHeight() - getItemOffset(endIndex + 1);\n \n return h('div', { \n class: className,\n style: {\n height: containerHeight + 'px',\n overflowY: 'auto',\n position: 'relative'\n },\n onscroll: handleScroll\n }, [\n // Top spacer\n h('div', {\n style: {\n height: topSpacerHeight + 'px',\n flexShrink: 0\n }\n }),\n \n // Visible items\n ...visibleItems.map((item, i) => {\n const index = startIndex + i;\n const key = getKey(item, index);\n const height = getItemHeight(index);\n \n return h('div', {\n key: key,\n 'data-index': index,\n style: {\n height: height + 'px',\n flexShrink: 0\n }\n }, [\n renderItem(item, index)\n ]);\n }),\n \n // Bottom spacer\n h('div', {\n style: {\n height: Math.max(0, bottomSpacerHeight) + 'px',\n flexShrink: 0\n }\n })\n ]);\n };\n}\n\n/**\n * Infinite Scroll Virtual List\n * Supports loading more items as user scrolls\n */\nexport interface InfiniteListProps<T> extends VirtualListProps<T> {\n onLoadMore: () => Promise<T[]>;\n hasMore: boolean;\n loading?: boolean;\n loadingComponent?: VNode;\n endComponent?: VNode;\n}\n\nexport function InfiniteList<T>(props: InfiniteListProps<T>): Component {\n const {\n items,\n itemHeight,\n containerHeight,\n renderItem,\n onLoadMore,\n hasMore,\n loading = false,\n loadingComponent = h('div', { class: 'loading' }, 'Loading...'),\n endComponent = h('div', { class: 'end' }, 'No more items'),\n ...listProps\n } = props;\n \n const isLoading = signal(loading);\n const nearEnd = signal(false);\n \n // Load more when near end\n effect(() => {\n if (nearEnd() && hasMore && !isLoading()) {\n isLoading(true);\n onLoadMore().finally(() => {\n isLoading(false);\n });\n }\n });\n \n return () => {\n const allItems = [...items];\n \n // Add loading indicator\n if (isLoading()) {\n allItems.push({ __loading: true } as any);\n }\n \n // Add end message\n if (!hasMore && !isLoading()) {\n allItems.push({ __end: true } as any);\n }\n \n const augmentedRenderItem = (item: any, index: number): VNode => {\n if ((item as any).__loading) {\n return loadingComponent;\n }\n if ((item as any).__end) {\n return endComponent;\n }\n return renderItem(item, index);\n };\n \n return h(VirtualList, {\n ...listProps,\n items: allItems,\n itemHeight,\n containerHeight,\n renderItem: augmentedRenderItem,\n onRangeChange: (start, end) => {\n // Trigger load more when near end\n const threshold = Math.floor(allItems.length * 0.8);\n nearEnd(end >= threshold);\n listProps.onRangeChange?.(start, end);\n }\n });\n };\n}\n\n/**\n * Fixed-height virtual list (optimized for uniform item heights)\n */\nexport function FixedVirtualList<T>(props: Omit<VirtualListProps<T>, 'itemHeight'> & {\n itemHeight: number;\n}): Component {\n return VirtualList(props);\n}\n\n/**\n * Grid-based virtual list for 2D layouts\n */\nexport interface VirtualGridProps<T> {\n items: T[];\n itemWidth: number;\n itemHeight: number;\n containerWidth: number;\n containerHeight: number;\n renderItem: (item: T, index: number) => VNode;\n gap?: number;\n overscan?: number;\n className?: string;\n}\n\nexport function VirtualGrid<T>(props: VirtualGridProps<T>): Component {\n const {\n items,\n itemWidth,\n itemHeight,\n containerWidth,\n containerHeight,\n renderItem,\n gap = 0,\n overscan = 2,\n className = 'virtual-grid'\n } = props;\n \n const columns = Math.floor(containerWidth / (itemWidth + gap));\n const rows = Math.ceil(items.length / columns);\n \n const scrollTop = signal(0);\n \n const visibleRows = Math.ceil(containerHeight / itemHeight);\n \n const visibleRange = computed(() => {\n const scrollPos = scrollTop();\n const startRow = Math.max(0, Math.floor(scrollPos / itemHeight) - overscan);\n const endRow = Math.min(rows - 1, Math.ceil((scrollPos + containerHeight) / itemHeight) + overscan);\n \n return {\n startRow,\n endRow,\n startIndex: startRow * columns,\n endIndex: Math.min(items.length - 1, (endRow + 1) * columns - 1)\n };\n });\n \n const handleScroll = (e: Event) => {\n const target = e.target as HTMLElement;\n scrollTop(target.scrollTop);\n };\n \n return () => {\n const { startRow, startIndex, endIndex } = visibleRange();\n const visibleItems = items.slice(startIndex, endIndex + 1);\n \n const topSpacerHeight = startRow * itemHeight;\n const bottomSpacerHeight = (rows - startRow - Math.ceil(visibleItems.length / columns)) * itemHeight;\n \n return h('div', {\n class: className,\n style: {\n width: containerWidth + 'px',\n height: containerHeight + 'px',\n overflowY: 'auto',\n position: 'relative'\n },\n onscroll: handleScroll\n }, [\n h('div', {\n style: {\n height: topSpacerHeight + 'px'\n }\n }),\n \n h('div', {\n style: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: gap + 'px'\n }\n }, [\n ...visibleItems.map((item, i) => {\n const index = startIndex + i;\n return h('div', {\n key: index,\n 'data-index': index,\n style: {\n width: itemWidth + 'px',\n height: itemHeight + 'px',\n flexShrink: 0\n }\n }, [\n renderItem(item, index)\n ]);\n })\n ]),\n \n h('div', {\n style: {\n height: Math.max(0, bottomSpacerHeight) + 'px'\n }\n })\n ]);\n };\n}\n","/**\n * Qore Error Handling - Error Boundaries and Error Recovery\n */\n\nimport { signal, effect, computed } from './signal';\n\nexport interface ErrorBoundaryProps {\n fallback?: (error: Error, reset: () => void) => any;\n onError?: (error: Error) => void;\n children: any;\n}\n\ninterface ErrorState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * Error boundary state - can be used within components\n */\nexport function createErrorBoundary() {\n const state = signal<ErrorState>({ hasError: false, error: null });\n \n const handleError = (error: Error) => {\n state({ hasError: true, error });\n };\n \n const reset = () => {\n state({ hasError: false, error: null });\n };\n \n return {\n state,\n handleError,\n reset,\n hasError: () => state().hasError,\n error: () => state().error,\n };\n}\n\n/**\n * Global error handler for uncaught errors\n */\nexport function setupGlobalErrorHandler(onError: (error: Error) => void): () => void {\n const handler = (event: ErrorEvent | PromiseRejectionEvent) => {\n const error = event instanceof ErrorEvent \n ? event.error || new Error(event.message)\n : event.reason || new Error('Unhandled promise rejection');\n \n onError(error);\n };\n \n window.addEventListener('error', handler as EventListener);\n window.addEventListener('unhandledrejection', handler as EventListener);\n \n return () => {\n window.removeEventListener('error', handler as EventListener);\n window.removeEventListener('unhandledrejection', handler as EventListener);\n };\n}\n\n/**\n * Try-catch wrapper for async operations\n */\nexport async function tryCatch<T>(\n fn: () => Promise<T>,\n onError?: (error: Error) => void\n): Promise<T | null> {\n try {\n return await fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n onError?.(err);\n return null;\n }\n}\n\n/**\n * Retry utility with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: {\n maxRetries?: number;\n delay?: number;\n backoff?: number;\n onError?: (error: Error, attempt: number) => void;\n } = {}\n): Promise<T> {\n const {\n maxRetries = 3,\n delay = 1000,\n backoff = 2,\n onError,\n } = options;\n \n let lastError: Error | null = null;\n let currentDelay = delay;\n \n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n onError?.(lastError, attempt);\n \n if (attempt < maxRetries) {\n await new Promise(resolve => setTimeout(resolve, currentDelay));\n currentDelay *= backoff;\n }\n }\n }\n \n throw lastError;\n}\n\n/**\n * Error boundary component wrapper\n */\nexport function withErrorBoundary<T extends Record<string, any>>(\n Component: (props: T) => any,\n options: {\n fallback?: (error: Error, reset: () => void) => any;\n onError?: (error: Error) => void;\n } = {}\n): (props: T) => any {\n return (props: T) => {\n const boundary = createErrorBoundary();\n \n try {\n return Component(props);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n boundary.handleError(err);\n options.onError?.(err);\n \n if (options.fallback) {\n return options.fallback(err, boundary.reset);\n }\n \n return null;\n }\n };\n}\n","/**\n * Qore Utilities\n */\n\nexport function debounce<T extends (...args: any[]) => any>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | null = null;\n return (...args) => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport function throttle<T extends (...args: any[]) => any>(\n fn: T,\n interval: number\n): (...args: Parameters<T>) => void {\n let last = 0;\n return (...args) => {\n const now = Date.now();\n if (now - last >= interval) {\n last = now;\n fn(...args);\n }\n };\n}\n\n/**\n * Class name utility - conditional classes\n */\nexport function cx(...classes: (string | false | null | undefined | Record<string, boolean>)[]): string {\n const result: string[] = [];\n \n for (const cls of classes) {\n if (!cls) continue;\n \n if (typeof cls === 'string') {\n result.push(cls);\n } else if (typeof cls === 'object') {\n for (const [key, value] of Object.entries(cls)) {\n if (value) result.push(key);\n }\n }\n }\n \n return result.join(' ');\n}\n\n/**\n * Style merging utility - merge multiple style objects\n */\nexport function style(...styles: (Record<string, string | number> | false | null | undefined)[]): Record<string, string | number> {\n const result: Record<string, string | number> = {};\n \n for (const s of styles) {\n if (!s) continue;\n Object.assign(result, s);\n }\n \n return result;\n}\n\n/**\n * Event listener utility with cleanup\n */\nexport function on<K extends keyof HTMLElementEventMap>(\n el: HTMLElement,\n type: K,\n handler: (e: HTMLElementEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions\n): () => void {\n el.addEventListener(type, handler as EventListener, options);\n return () => el.removeEventListener(type, handler as EventListener, options);\n}\n\n/**\n * Event handler creators for common events\n */\nexport const onEvent = {\n click: (handler: (e: MouseEvent) => void) => ({ onClick: handler }),\n change: (handler: (e: Event) => void) => ({ onChange: handler }),\n input: (handler: (e: Event) => void) => ({ onInput: handler }),\n submit: (handler: (e: SubmitEvent) => void) => ({ onSubmit: handler }),\n keydown: (handler: (e: KeyboardEvent) => void) => ({ onKeyDown: handler }),\n keyup: (handler: (e: KeyboardEvent) => void) => ({ onKeyUp: handler }),\n focus: (handler: (e: FocusEvent) => void) => ({ onFocus: handler }),\n blur: (handler: (e: FocusEvent) => void) => ({ onBlur: handler }),\n mouseenter: (handler: (e: MouseEvent) => void) => ({ onMouseEnter: handler }),\n mouseleave: (handler: (e: MouseEvent) => void) => ({ onMouseLeave: handler }),\n};\n\n/**\n * Create event handler with prevent default\n */\nexport function preventDefault<T extends Event>(handler: (e: T) => void): (e: T) => void {\n return (e: T) => {\n e.preventDefault();\n handler(e);\n };\n}\n\n/**\n * Create event handler with stop propagation\n */\nexport function stopPropagation<T extends Event>(handler: (e: T) => void): (e: T) => void {\n return (e: T) => {\n e.stopPropagation();\n handler(e);\n };\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n"],"names":["effect","renderToString","renderToStream","html","text","stream","render"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@qorejs/qore",
3
+ "version": "0.6.0",
4
+ "description": "Qore - AI-Native Frontend Framework (<3kb gzip)",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./ssr": {
15
+ "import": "./dist/ssr.js",
16
+ "types": "./dist/ssr.d.ts"
17
+ },
18
+ "./virtual-list": {
19
+ "import": "./dist/virtual-list.js",
20
+ "types": "./dist/virtual-list.d.ts"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "src",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "sideEffects": false,
30
+ "scripts": {
31
+ "dev": "vite build --watch",
32
+ "build": "vite build",
33
+ "build:types": "tsc --emitDeclarationOnly",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest",
36
+ "test:coverage": "vitest run --coverage",
37
+ "prepublishOnly": "pnpm run build && pnpm run test",
38
+ "publish:npm": "npm publish --access public"
39
+ },
40
+ "keywords": [
41
+ "qore",
42
+ "frontend",
43
+ "framework",
44
+ "ai-native",
45
+ "reactive",
46
+ "signals",
47
+ "streaming",
48
+ "ssr",
49
+ "virtual-list",
50
+ "lightweight",
51
+ "performance",
52
+ "typescript"
53
+ ],
54
+ "author": "Qore Team",
55
+ "license": "MIT",
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "https://github.com/qorejs/qore.git",
59
+ "directory": "packages/core"
60
+ },
61
+ "homepage": "https://github.com/qorejs/qore#readme",
62
+ "bugs": {
63
+ "url": "https://github.com/qorejs/qore/issues"
64
+ },
65
+ "devDependencies": {
66
+ "@types/node": "^20.11.0",
67
+ "jsdom": "^29.0.2",
68
+ "typescript": "^5.4.0",
69
+ "vite": "^5.2.0",
70
+ "vite-plugin-dts": "^3.7.0",
71
+ "vitest": "^1.4.0"
72
+ },
73
+ "engines": {
74
+ "node": ">=18.0.0"
75
+ }
76
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Qore Components - Minimal abstraction
3
+ */
4
+
5
+ import { signal, Signal } from './signal';
6
+ import { VNode } from './render';
7
+
8
+ export type Props = Record<string, any>;
9
+
10
+ export function createComponent<P extends Props>(
11
+ name: string,
12
+ renderFn: (props: P, state: <T>(key: string, initial: T) => Signal<T>) => VNode
13
+ ): (props: P) => VNode {
14
+ return (props: P) => {
15
+ const stateMap = new Map<string, Signal<any>>();
16
+
17
+ const state = <T>(key: string, initial: T): Signal<T> => {
18
+ if (!stateMap.has(key)) {
19
+ stateMap.set(key, signal(initial));
20
+ }
21
+ return stateMap.get(key)!;
22
+ };
23
+
24
+ return renderFn(props, state);
25
+ };
26
+ }
package/src/error.ts ADDED
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Qore Error Handling - Error Boundaries and Error Recovery
3
+ */
4
+
5
+ import { signal, effect, computed } from './signal';
6
+
7
+ export interface ErrorBoundaryProps {
8
+ fallback?: (error: Error, reset: () => void) => any;
9
+ onError?: (error: Error) => void;
10
+ children: any;
11
+ }
12
+
13
+ interface ErrorState {
14
+ hasError: boolean;
15
+ error: Error | null;
16
+ }
17
+
18
+ /**
19
+ * Error boundary state - can be used within components
20
+ */
21
+ export function createErrorBoundary() {
22
+ const state = signal<ErrorState>({ hasError: false, error: null });
23
+
24
+ const handleError = (error: Error) => {
25
+ state({ hasError: true, error });
26
+ };
27
+
28
+ const reset = () => {
29
+ state({ hasError: false, error: null });
30
+ };
31
+
32
+ return {
33
+ state,
34
+ handleError,
35
+ reset,
36
+ hasError: () => state().hasError,
37
+ error: () => state().error,
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Global error handler for uncaught errors
43
+ */
44
+ export function setupGlobalErrorHandler(onError: (error: Error) => void): () => void {
45
+ const handler = (event: ErrorEvent | PromiseRejectionEvent) => {
46
+ const error = event instanceof ErrorEvent
47
+ ? event.error || new Error(event.message)
48
+ : event.reason || new Error('Unhandled promise rejection');
49
+
50
+ onError(error);
51
+ };
52
+
53
+ window.addEventListener('error', handler as EventListener);
54
+ window.addEventListener('unhandledrejection', handler as EventListener);
55
+
56
+ return () => {
57
+ window.removeEventListener('error', handler as EventListener);
58
+ window.removeEventListener('unhandledrejection', handler as EventListener);
59
+ };
60
+ }
61
+
62
+ /**
63
+ * Try-catch wrapper for async operations
64
+ */
65
+ export async function tryCatch<T>(
66
+ fn: () => Promise<T>,
67
+ onError?: (error: Error) => void
68
+ ): Promise<T | null> {
69
+ try {
70
+ return await fn();
71
+ } catch (error) {
72
+ const err = error instanceof Error ? error : new Error(String(error));
73
+ onError?.(err);
74
+ return null;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Retry utility with exponential backoff
80
+ */
81
+ export async function retry<T>(
82
+ fn: () => Promise<T>,
83
+ options: {
84
+ maxRetries?: number;
85
+ delay?: number;
86
+ backoff?: number;
87
+ onError?: (error: Error, attempt: number) => void;
88
+ } = {}
89
+ ): Promise<T> {
90
+ const {
91
+ maxRetries = 3,
92
+ delay = 1000,
93
+ backoff = 2,
94
+ onError,
95
+ } = options;
96
+
97
+ let lastError: Error | null = null;
98
+ let currentDelay = delay;
99
+
100
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
101
+ try {
102
+ return await fn();
103
+ } catch (error) {
104
+ lastError = error instanceof Error ? error : new Error(String(error));
105
+ onError?.(lastError, attempt);
106
+
107
+ if (attempt < maxRetries) {
108
+ await new Promise(resolve => setTimeout(resolve, currentDelay));
109
+ currentDelay *= backoff;
110
+ }
111
+ }
112
+ }
113
+
114
+ throw lastError;
115
+ }
116
+
117
+ /**
118
+ * Error boundary component wrapper
119
+ */
120
+ export function withErrorBoundary<T extends Record<string, any>>(
121
+ Component: (props: T) => any,
122
+ options: {
123
+ fallback?: (error: Error, reset: () => void) => any;
124
+ onError?: (error: Error) => void;
125
+ } = {}
126
+ ): (props: T) => any {
127
+ return (props: T) => {
128
+ const boundary = createErrorBoundary();
129
+
130
+ try {
131
+ return Component(props);
132
+ } catch (error) {
133
+ const err = error instanceof Error ? error : new Error(String(error));
134
+ boundary.handleError(err);
135
+ options.onError?.(err);
136
+
137
+ if (options.fallback) {
138
+ return options.fallback(err, boundary.reset);
139
+ }
140
+
141
+ return null;
142
+ }
143
+ };
144
+ }
package/src/index.ts ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Qore - AI-Native Frontend Framework
3
+ * < 3kb gzip core
4
+ */
5
+
6
+ // Signal System
7
+ export { signal, computed, effect, batch } from './signal';
8
+ export type { Signal } from './signal';
9
+
10
+ // Renderer
11
+ export {
12
+ h,
13
+ text,
14
+ render,
15
+ show,
16
+ For,
17
+ Fragment,
18
+ Portal,
19
+ div,
20
+ span,
21
+ button,
22
+ input,
23
+ p,
24
+ h1,
25
+ h2,
26
+ h3,
27
+ renderToString,
28
+ renderToStream as renderToStreamDOM,
29
+ renderAsync,
30
+ renderToStreamAsync
31
+ } from './render';
32
+ export type { VNode, Component } from './render';
33
+
34
+ // SSR - Server-Side Rendering
35
+ export {
36
+ renderComponentToString,
37
+ renderSSR,
38
+ prefetchAndRender,
39
+ createPrefetchContext
40
+ } from './ssr';
41
+ export type { SSRResult, PrefetchContext } from './ssr';
42
+
43
+ // AI Streaming
44
+ export { stream, streamText } from './stream';
45
+ export type { StreamWriter, StreamOptions } from './stream';
46
+
47
+ // Server-Side Streaming
48
+ export {
49
+ StreamRenderer,
50
+ createStreamHTML,
51
+ Suspense,
52
+ createSuspense,
53
+ lazy,
54
+ asyncComponent,
55
+ createUpdate,
56
+ applyUpdate,
57
+ renderToStream as renderToStreamIncremental
58
+ } from './stream';
59
+ export type { SuspenseProps, SuspenseState, IncrementalUpdate, StreamWriter, StreamOptions } from './stream';
60
+
61
+ // Virtual List - High-performance list rendering
62
+ export {
63
+ VirtualList,
64
+ InfiniteList,
65
+ FixedVirtualList,
66
+ VirtualGrid
67
+ } from './virtual-list';
68
+ export type {
69
+ VirtualListProps,
70
+ VirtualListItem,
71
+ InfiniteListProps,
72
+ VirtualGridProps
73
+ } from './virtual-list';
74
+
75
+ // Error Handling
76
+ export {
77
+ createErrorBoundary,
78
+ setupGlobalErrorHandler,
79
+ tryCatch,
80
+ retry,
81
+ withErrorBoundary
82
+ } from './error';
83
+
84
+ // Utilities
85
+ export {
86
+ debounce,
87
+ throttle,
88
+ cx,
89
+ style,
90
+ on,
91
+ onEvent,
92
+ preventDefault,
93
+ stopPropagation,
94
+ sleep
95
+ } from './utils';