elit 3.3.3 → 3.3.4

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 (143) hide show
  1. package/dist/build.d.mts +1 -1
  2. package/dist/build.js +1 -0
  3. package/dist/build.js.map +1 -0
  4. package/dist/build.mjs +1 -0
  5. package/dist/build.mjs.map +1 -0
  6. package/dist/chokidar.js +1 -0
  7. package/dist/chokidar.js.map +1 -0
  8. package/dist/chokidar.mjs +1 -0
  9. package/dist/chokidar.mjs.map +1 -0
  10. package/dist/cli.js +4687 -34
  11. package/dist/config.d.mts +3 -1
  12. package/dist/config.d.ts +3 -1
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +1 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/config.mjs +1 -0
  17. package/dist/config.mjs.map +1 -0
  18. package/dist/coverage.d.mts +85 -0
  19. package/dist/coverage.d.ts +76 -0
  20. package/dist/coverage.d.ts.map +1 -0
  21. package/dist/coverage.js +1549 -0
  22. package/dist/coverage.js.map +1 -0
  23. package/dist/coverage.mjs +1520 -0
  24. package/dist/coverage.mjs.map +1 -0
  25. package/dist/database.d.mts +31 -6
  26. package/dist/database.d.ts +31 -6
  27. package/dist/database.d.ts.map +1 -1
  28. package/dist/database.js +60 -33
  29. package/dist/database.js.map +1 -0
  30. package/dist/database.mjs +60 -33
  31. package/dist/database.mjs.map +1 -0
  32. package/dist/dom.js +1 -0
  33. package/dist/dom.js.map +1 -0
  34. package/dist/dom.mjs +1 -0
  35. package/dist/dom.mjs.map +1 -0
  36. package/dist/el.js +1 -0
  37. package/dist/el.js.map +1 -0
  38. package/dist/el.mjs +1 -0
  39. package/dist/el.mjs.map +1 -0
  40. package/dist/fs.js +1 -0
  41. package/dist/fs.js.map +1 -0
  42. package/dist/fs.mjs +1 -0
  43. package/dist/fs.mjs.map +1 -0
  44. package/dist/hmr.js +1 -0
  45. package/dist/hmr.js.map +1 -0
  46. package/dist/hmr.mjs +1 -0
  47. package/dist/hmr.mjs.map +1 -0
  48. package/dist/http.js +1 -0
  49. package/dist/http.js.map +1 -0
  50. package/dist/http.mjs +1 -0
  51. package/dist/http.mjs.map +1 -0
  52. package/dist/https.d.mts +1 -1
  53. package/dist/https.js +1 -0
  54. package/dist/https.js.map +1 -0
  55. package/dist/https.mjs +1 -0
  56. package/dist/https.mjs.map +1 -0
  57. package/dist/index.d.mts +1 -1
  58. package/dist/index.js +1 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/index.mjs +1 -0
  61. package/dist/index.mjs.map +1 -0
  62. package/dist/mime-types.js +1 -0
  63. package/dist/mime-types.js.map +1 -0
  64. package/dist/mime-types.mjs +1 -0
  65. package/dist/mime-types.mjs.map +1 -0
  66. package/dist/path.js +1 -0
  67. package/dist/path.js.map +1 -0
  68. package/dist/path.mjs +1 -0
  69. package/dist/path.mjs.map +1 -0
  70. package/dist/router.js +1 -0
  71. package/dist/router.js.map +1 -0
  72. package/dist/router.mjs +1 -0
  73. package/dist/router.mjs.map +1 -0
  74. package/dist/runtime.js +1 -0
  75. package/dist/runtime.js.map +1 -0
  76. package/dist/runtime.mjs +1 -0
  77. package/dist/runtime.mjs.map +1 -0
  78. package/dist/{server-Cz3z-5ls.d.mts → server-BFTzgJpO.d.mts} +62 -1
  79. package/dist/{server-BG2CaVMh.d.ts → server-CIXtexNS.d.ts} +62 -1
  80. package/dist/server.d.mts +1 -1
  81. package/dist/server.d.ts +9 -0
  82. package/dist/server.d.ts.map +1 -1
  83. package/dist/server.js +12 -0
  84. package/dist/server.js.map +1 -0
  85. package/dist/server.mjs +12 -0
  86. package/dist/server.mjs.map +1 -0
  87. package/dist/state.d.mts +1 -1
  88. package/dist/state.js +1 -0
  89. package/dist/state.js.map +1 -0
  90. package/dist/state.mjs +1 -0
  91. package/dist/state.mjs.map +1 -0
  92. package/dist/style.js +1 -0
  93. package/dist/style.js.map +1 -0
  94. package/dist/style.mjs +1 -0
  95. package/dist/style.mjs.map +1 -0
  96. package/dist/test-globals.d.ts +184 -0
  97. package/dist/test-reporter.d.mts +77 -0
  98. package/dist/test-reporter.d.ts +73 -0
  99. package/dist/test-reporter.d.ts.map +1 -0
  100. package/dist/test-reporter.js +726 -0
  101. package/dist/test-reporter.js.map +1 -0
  102. package/dist/test-reporter.mjs +696 -0
  103. package/dist/test-reporter.mjs.map +1 -0
  104. package/dist/test-runtime.d.mts +122 -0
  105. package/dist/test-runtime.d.ts +120 -0
  106. package/dist/test-runtime.d.ts.map +1 -0
  107. package/dist/test-runtime.js +1292 -0
  108. package/dist/test-runtime.js.map +1 -0
  109. package/dist/test-runtime.mjs +1269 -0
  110. package/dist/test-runtime.mjs.map +1 -0
  111. package/dist/test.d.mts +39 -0
  112. package/dist/test.d.ts +38 -0
  113. package/dist/test.d.ts.map +1 -0
  114. package/dist/test.js +4966 -0
  115. package/dist/test.js.map +1 -0
  116. package/dist/test.mjs +4944 -0
  117. package/dist/test.mjs.map +1 -0
  118. package/dist/types.d.mts +62 -1
  119. package/dist/types.d.ts +52 -0
  120. package/dist/types.d.ts.map +1 -1
  121. package/dist/types.js +1 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/types.mjs +1 -0
  124. package/dist/types.mjs.map +1 -0
  125. package/dist/ws.js +1 -0
  126. package/dist/ws.js.map +1 -0
  127. package/dist/ws.mjs +1 -0
  128. package/dist/ws.mjs.map +1 -0
  129. package/dist/wss.js +1 -0
  130. package/dist/wss.js.map +1 -0
  131. package/dist/wss.mjs +1 -0
  132. package/dist/wss.mjs.map +1 -0
  133. package/package.json +37 -5
  134. package/src/cli.ts +165 -1
  135. package/src/config.ts +3 -1
  136. package/src/coverage.ts +1479 -0
  137. package/src/database.ts +71 -35
  138. package/src/server.ts +12 -0
  139. package/src/test-globals.d.ts +184 -0
  140. package/src/test-reporter.ts +609 -0
  141. package/src/test-runtime.ts +1359 -0
  142. package/src/test.ts +368 -0
  143. package/src/types.ts +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/router.ts","../src/dom.ts"],"sourcesContent":["/**\n * Elit - Router - Client-side routing\n */\n\nimport type { VNode, Child, Props, State } from './types';\nimport { dom } from './dom';\n\nexport interface Route {\n path: string;\n component: (params: RouteParams) => VNode | Child;\n beforeEnter?: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void;\n}\n\nexport interface RouteParams {\n [key: string]: string;\n}\n\nexport interface RouteLocation {\n path: string;\n params: RouteParams;\n query: Record<string, string>;\n hash: string;\n}\n\nexport interface RouterOptions {\n mode?: 'history' | 'hash';\n base?: string;\n routes: Route[];\n notFound?: (params: RouteParams) => VNode | Child;\n}\n\nexport interface Router {\n currentRoute: State<RouteLocation>;\n mode: 'history' | 'hash';\n navigate: (path: string, replace?: boolean) => void;\n push: (path: string) => void;\n replace: (path: string) => void;\n back: () => void;\n forward: () => void;\n go: (delta: number) => void;\n beforeEach: (guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void) => void;\n destroy: () => void;\n}\n\n/**\n * Helper: Match route pattern against path\n */\nfunction matchRoute(pattern: string, path: string): RouteParams | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathParts = path.split('/').filter(Boolean);\n\n if (pattern.endsWith('*')) {\n const basePattern = pattern.slice(0, -1);\n if (path.startsWith(basePattern) || basePattern === '/' || pattern === '*') {\n return { '*': path.slice(basePattern.length) };\n }\n }\n\n if (patternParts.length !== pathParts.length) return null;\n\n const params: RouteParams = {};\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathPart = pathParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = decodeURIComponent(pathPart);\n } else if (patternPart !== pathPart) {\n return null;\n }\n }\n return params;\n}\n\n/**\n * Helper: Execute guard and handle result (eliminates duplication in navigate)\n */\nfunction executeGuard(\n guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void,\n to: RouteLocation,\n from: RouteLocation | null,\n navigate: (path: string, replace?: boolean) => void,\n replace = false\n): boolean {\n const result = guard(to, from);\n if (result === false) return false;\n if (typeof result === 'string') {\n navigate(result, replace);\n return false;\n }\n return true;\n}\n\n/**\n * Helper: Wrap component in VNode if needed (eliminates duplication in createRouterView)\n */\nfunction wrapComponent(component: VNode | Child): VNode {\n if (typeof component === 'object' && component !== null && 'tagName' in component) {\n return component as VNode;\n }\n return { tagName: 'span', props: {}, children: [component] };\n}\n\nexport function createRouter(options: RouterOptions): Router {\n const { mode = 'history', base = '', routes } = options;\n const globalGuards: Array<(to: RouteLocation, from: RouteLocation | null) => boolean | string | void> = [];\n\n const parseQuery = (search: string): Record<string, string> => {\n const query: Record<string, string> = {};\n const params = new URLSearchParams(search);\n params.forEach((value, key) => { query[key] = value; });\n return query;\n };\n\n const getCurrentPath = (): string => {\n if (mode === 'hash') {\n return window.location.hash.slice(1) || '/';\n }\n return window.location.pathname.replace(base, '') || '/';\n };\n\n const parseLocation = (path: string): RouteLocation => {\n const [pathPart, queryPart = ''] = path.split('?');\n const [cleanPath, hash = ''] = pathPart.split('#');\n return {\n path: cleanPath || '/',\n params: {},\n query: parseQuery(queryPart),\n hash: hash ? '#' + hash : ''\n };\n };\n\n const findRoute = (path: string): { route: Route; params: RouteParams } | null => {\n for (const route of routes) {\n const params = matchRoute(route.path, path);\n if (params !== null) {\n return { route, params };\n }\n }\n return null;\n };\n\n const currentRoute = dom.createState<RouteLocation>(parseLocation(getCurrentPath()));\n\n const navigate = (path: string, replace = false): void => {\n const location = parseLocation(path);\n const match = findRoute(location.path);\n\n if (match) {\n location.params = match.params;\n }\n\n for (const guard of globalGuards) {\n if (!executeGuard(guard, location, currentRoute.value, navigate, replace)) return;\n }\n\n if (match?.route.beforeEnter) {\n if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;\n }\n\n // Remove leading slash from path if base has trailing slash, or add slash if needed\n let urlPath = path;\n let url: string;\n if (mode === 'hash') {\n url = '#' + path;\n } else {\n // Ensure proper path joining\n const hasBaseSlash = base.endsWith('/');\n const hasPathSlash = path.startsWith('/');\n if (hasBaseSlash && hasPathSlash) {\n urlPath = path.slice(1); // Remove duplicate slash\n } else if (!hasBaseSlash && !hasPathSlash && path !== '/') {\n urlPath = '/' + path; // Add slash between\n }\n url = base + urlPath;\n }\n\n if (replace) {\n window.history.replaceState({ path }, '', url);\n } else {\n window.history.pushState({ path }, '', url);\n }\n\n currentRoute.value = location;\n };\n\n const handlePopState = (): void => {\n const path = getCurrentPath();\n const location = parseLocation(path);\n const match = findRoute(location.path);\n if (match) {\n location.params = match.params;\n }\n currentRoute.value = location;\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', handlePopState);\n }\n\n return {\n currentRoute,\n mode,\n navigate,\n push: (path: string) => navigate(path, false),\n replace: (path: string) => navigate(path, true),\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n go: (delta: number) => window.history.go(delta),\n beforeEach: (guard) => { globalGuards.push(guard); },\n destroy: () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', handlePopState);\n }\n currentRoute.destroy();\n }\n };\n}\n\n// RouterView component - renders current route\nexport function createRouterView(router: Router, options: RouterOptions): () => VNode {\n const { routes, notFound } = options;\n\n return (): VNode => {\n const location = router.currentRoute.value;\n const match = routes.find(r => matchRoute(r.path, location.path) !== null);\n\n if (match) {\n const params = matchRoute(match.path, location.path) || {};\n const component = match.component({ ...params, ...location.query });\n return wrapComponent(component);\n }\n\n if (notFound) {\n const component = notFound(location.params);\n return wrapComponent(component);\n }\n\n return { tagName: 'div', props: {}, children: ['404 - Not Found'] };\n };\n}\n\n// Link component - prevents default and uses router\nexport const routerLink = (router: Router, props: Props & { to: string }, ...children: Child[]): VNode => {\n // Use router.mode to determine href format\n const href = router.mode === 'hash' ? `#${props.to}` : props.to;\n\n return {\n tagName: 'a',\n props: {\n ...props,\n href,\n onclick: (e: MouseEvent) => {\n e.preventDefault();\n router.push(props.to);\n }\n },\n children\n };\n};\n","/**\n * Elit - DomNode Core Class\n */\n\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\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 // 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\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.length === 3) {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const len = children.length;\n if (!len) {\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 = children[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 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 isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\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): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref') {\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"],"mappings":"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","names":["render"]}
package/dist/router.mjs CHANGED
@@ -834,3 +834,4 @@ export {
834
834
  createRouterView,
835
835
  routerLink
836
836
  };
837
+ //# sourceMappingURL=router.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dom.ts","../src/router.ts"],"sourcesContent":["/**\n * Elit - DomNode Core Class\n */\n\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\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 // 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\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.length === 3) {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const len = children.length;\n if (!len) {\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 = children[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 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 isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\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): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref') {\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 - Router - Client-side routing\n */\n\nimport type { VNode, Child, Props, State } from './types';\nimport { dom } from './dom';\n\nexport interface Route {\n path: string;\n component: (params: RouteParams) => VNode | Child;\n beforeEnter?: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void;\n}\n\nexport interface RouteParams {\n [key: string]: string;\n}\n\nexport interface RouteLocation {\n path: string;\n params: RouteParams;\n query: Record<string, string>;\n hash: string;\n}\n\nexport interface RouterOptions {\n mode?: 'history' | 'hash';\n base?: string;\n routes: Route[];\n notFound?: (params: RouteParams) => VNode | Child;\n}\n\nexport interface Router {\n currentRoute: State<RouteLocation>;\n mode: 'history' | 'hash';\n navigate: (path: string, replace?: boolean) => void;\n push: (path: string) => void;\n replace: (path: string) => void;\n back: () => void;\n forward: () => void;\n go: (delta: number) => void;\n beforeEach: (guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void) => void;\n destroy: () => void;\n}\n\n/**\n * Helper: Match route pattern against path\n */\nfunction matchRoute(pattern: string, path: string): RouteParams | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathParts = path.split('/').filter(Boolean);\n\n if (pattern.endsWith('*')) {\n const basePattern = pattern.slice(0, -1);\n if (path.startsWith(basePattern) || basePattern === '/' || pattern === '*') {\n return { '*': path.slice(basePattern.length) };\n }\n }\n\n if (patternParts.length !== pathParts.length) return null;\n\n const params: RouteParams = {};\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathPart = pathParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = decodeURIComponent(pathPart);\n } else if (patternPart !== pathPart) {\n return null;\n }\n }\n return params;\n}\n\n/**\n * Helper: Execute guard and handle result (eliminates duplication in navigate)\n */\nfunction executeGuard(\n guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void,\n to: RouteLocation,\n from: RouteLocation | null,\n navigate: (path: string, replace?: boolean) => void,\n replace = false\n): boolean {\n const result = guard(to, from);\n if (result === false) return false;\n if (typeof result === 'string') {\n navigate(result, replace);\n return false;\n }\n return true;\n}\n\n/**\n * Helper: Wrap component in VNode if needed (eliminates duplication in createRouterView)\n */\nfunction wrapComponent(component: VNode | Child): VNode {\n if (typeof component === 'object' && component !== null && 'tagName' in component) {\n return component as VNode;\n }\n return { tagName: 'span', props: {}, children: [component] };\n}\n\nexport function createRouter(options: RouterOptions): Router {\n const { mode = 'history', base = '', routes } = options;\n const globalGuards: Array<(to: RouteLocation, from: RouteLocation | null) => boolean | string | void> = [];\n\n const parseQuery = (search: string): Record<string, string> => {\n const query: Record<string, string> = {};\n const params = new URLSearchParams(search);\n params.forEach((value, key) => { query[key] = value; });\n return query;\n };\n\n const getCurrentPath = (): string => {\n if (mode === 'hash') {\n return window.location.hash.slice(1) || '/';\n }\n return window.location.pathname.replace(base, '') || '/';\n };\n\n const parseLocation = (path: string): RouteLocation => {\n const [pathPart, queryPart = ''] = path.split('?');\n const [cleanPath, hash = ''] = pathPart.split('#');\n return {\n path: cleanPath || '/',\n params: {},\n query: parseQuery(queryPart),\n hash: hash ? '#' + hash : ''\n };\n };\n\n const findRoute = (path: string): { route: Route; params: RouteParams } | null => {\n for (const route of routes) {\n const params = matchRoute(route.path, path);\n if (params !== null) {\n return { route, params };\n }\n }\n return null;\n };\n\n const currentRoute = dom.createState<RouteLocation>(parseLocation(getCurrentPath()));\n\n const navigate = (path: string, replace = false): void => {\n const location = parseLocation(path);\n const match = findRoute(location.path);\n\n if (match) {\n location.params = match.params;\n }\n\n for (const guard of globalGuards) {\n if (!executeGuard(guard, location, currentRoute.value, navigate, replace)) return;\n }\n\n if (match?.route.beforeEnter) {\n if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;\n }\n\n // Remove leading slash from path if base has trailing slash, or add slash if needed\n let urlPath = path;\n let url: string;\n if (mode === 'hash') {\n url = '#' + path;\n } else {\n // Ensure proper path joining\n const hasBaseSlash = base.endsWith('/');\n const hasPathSlash = path.startsWith('/');\n if (hasBaseSlash && hasPathSlash) {\n urlPath = path.slice(1); // Remove duplicate slash\n } else if (!hasBaseSlash && !hasPathSlash && path !== '/') {\n urlPath = '/' + path; // Add slash between\n }\n url = base + urlPath;\n }\n\n if (replace) {\n window.history.replaceState({ path }, '', url);\n } else {\n window.history.pushState({ path }, '', url);\n }\n\n currentRoute.value = location;\n };\n\n const handlePopState = (): void => {\n const path = getCurrentPath();\n const location = parseLocation(path);\n const match = findRoute(location.path);\n if (match) {\n location.params = match.params;\n }\n currentRoute.value = location;\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', handlePopState);\n }\n\n return {\n currentRoute,\n mode,\n navigate,\n push: (path: string) => navigate(path, false),\n replace: (path: string) => navigate(path, true),\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n go: (delta: number) => window.history.go(delta),\n beforeEach: (guard) => { globalGuards.push(guard); },\n destroy: () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', handlePopState);\n }\n currentRoute.destroy();\n }\n };\n}\n\n// RouterView component - renders current route\nexport function createRouterView(router: Router, options: RouterOptions): () => VNode {\n const { routes, notFound } = options;\n\n return (): VNode => {\n const location = router.currentRoute.value;\n const match = routes.find(r => matchRoute(r.path, location.path) !== null);\n\n if (match) {\n const params = matchRoute(match.path, location.path) || {};\n const component = match.component({ ...params, ...location.query });\n return wrapComponent(component);\n }\n\n if (notFound) {\n const component = notFound(location.params);\n return wrapComponent(component);\n }\n\n return { tagName: 'div', props: {}, children: ['404 - Not Found'] };\n };\n}\n\n// Link component - prevents default and uses router\nexport const routerLink = (router: Router, props: Props & { to: string }, ...children: Child[]): VNode => {\n // Use router.mode to determine href format\n const href = router.mode === 'hash' ? `#${props.to}` : props.to;\n\n return {\n tagName: 'a',\n props: {\n ...props,\n href,\n onclick: (e: MouseEvent) => {\n e.preventDefault();\n router.push(props.to);\n }\n },\n children\n };\n};\n"],"mappings":"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","names":["render"]}
package/dist/runtime.js CHANGED
@@ -41,3 +41,4 @@ var isDeno = runtime === "deno";
41
41
  isNode,
42
42
  runtime
43
43
  });
44
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,IAAM,WAAW,MAAM;AAE5B,MAAI,OAAO,SAAS,YAAa,QAAO;AAExC,MAAI,OAAO,QAAQ,YAAa,QAAO;AACvC,SAAO;AACT,GAAG;AAEI,IAAM,SAAS,YAAY;AAC3B,IAAM,QAAQ,YAAY;AAC1B,IAAM,SAAS,YAAY;","names":[]}
package/dist/runtime.mjs CHANGED
@@ -13,3 +13,4 @@ export {
13
13
  isNode,
14
14
  runtime
15
15
  };
16
+ //# sourceMappingURL=runtime.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime.ts"],"sourcesContent":["/**\n * Runtime detection and global type declarations\n * Shared across all modules for consistency\n */\n\n/**\n * Runtime detection (cached at module load)\n */\nexport const runtime = (() => {\n // @ts-ignore - Deno global\n if (typeof Deno !== 'undefined') return 'deno';\n // @ts-ignore - Bun global\n if (typeof Bun !== 'undefined') return 'bun';\n return 'node';\n})() as 'node' | 'bun' | 'deno';\n\nexport const isNode = runtime === 'node';\nexport const isBun = runtime === 'bun';\nexport const isDeno = runtime === 'deno';\n\n// Global declarations for runtime-specific APIs\ndeclare global {\n // @ts-ignore - Bun global\n const Bun: {\n build(options: {\n entrypoints: string[];\n outdir?: string;\n target?: string;\n format?: string;\n minify?: boolean;\n sourcemap?: string;\n external?: string[];\n naming?: string;\n plugins?: any[];\n define?: Record<string, string>;\n }): Promise<{\n success: boolean;\n outputs: Array<{ path: string; size: number }>;\n logs: any[];\n }>;\n Transpiler: new (options?: {\n loader?: string;\n target?: string;\n minify?: boolean;\n }) => {\n transform(code: string, loader?: string): Promise<string>;\n transformSync(code: string, loader?: string): string;\n };\n file(path: string): {\n size: number;\n arrayBuffer(): ArrayBuffer | Promise<ArrayBuffer>;\n exists(): Promise<boolean>;\n };\n write(path: string, data: string | Buffer | Uint8Array): Promise<void>;\n } | undefined;\n\n // @ts-ignore - Deno global\n const Deno: {\n emit(rootSpecifier: string | URL, options?: {\n bundle?: 'module' | 'classic';\n check?: boolean;\n compilerOptions?: any;\n importMap?: string;\n importMapPath?: string;\n sources?: Record<string, string>;\n }): Promise<{\n files: Record<string, string>;\n diagnostics: any[];\n }>;\n writeTextFile(path: string, data: string): Promise<void>;\n readFile(path: string): Promise<Uint8Array>;\n readFileSync(path: string): Uint8Array;\n writeFile(path: string, data: Uint8Array): Promise<void>;\n writeFileSync(path: string, data: Uint8Array): void;\n stat(path: string): Promise<any>;\n statSync(path: string): any;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n mkdirSync(path: string, options?: { recursive?: boolean }): void;\n readDir(path: string): AsyncIterable<any>;\n readDirSync(path: string): Iterable<any>;\n remove(path: string, options?: { recursive?: boolean }): Promise<void>;\n removeSync(path: string, options?: { recursive?: boolean }): void;\n rename(oldPath: string, newPath: string): Promise<void>;\n renameSync(oldPath: string, newPath: string): void;\n copyFile(src: string, dest: string): Promise<void>;\n copyFileSync(src: string, dest: string): void;\n realPath(path: string): Promise<string>;\n realPathSync(path: string): string;\n watchFs(paths: string | string[]): AsyncIterable<{\n kind: string;\n paths: string[];\n }>;\n build: {\n os: string;\n };\n } | undefined;\n}\n"],"mappings":";AAQO,IAAM,WAAW,MAAM;AAE5B,MAAI,OAAO,SAAS,YAAa,QAAO;AAExC,MAAI,OAAO,QAAQ,YAAa,QAAO;AACvC,SAAO;AACT,GAAG;AAEI,IAAM,SAAS,YAAY;AAC3B,IAAM,QAAQ,YAAY;AAC1B,IAAM,SAAS,YAAY;","names":[]}
@@ -212,6 +212,58 @@ interface PreviewOptions {
212
212
  /** Environment variables to inject (prefix with VITE_ for client access) */
213
213
  env?: Record<string, string>;
214
214
  }
215
+ type TestEnvironment = 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime';
216
+ type TestCoverageProvider = 'v8' | 'istanbul';
217
+ type TestCoverageReporter = 'text' | 'json' | 'html' | 'lcov' | 'lcovonly' | 'coverage-final.json' | 'clover';
218
+ interface TestCoverageOptions {
219
+ provider?: TestCoverageProvider;
220
+ reporter?: TestCoverageReporter[];
221
+ dir?: string;
222
+ include?: string[];
223
+ exclude?: string[];
224
+ thresholds?: {
225
+ lines?: number;
226
+ functions?: number;
227
+ branches?: number;
228
+ statements?: number;
229
+ };
230
+ all?: boolean;
231
+ }
232
+ interface TestOptions {
233
+ environment?: TestEnvironment;
234
+ globals?: boolean;
235
+ setupFiles?: string[];
236
+ include?: string[];
237
+ exclude?: string[];
238
+ testTimeout?: number;
239
+ isolate?: boolean;
240
+ pool?: string;
241
+ poolOptions?: {
242
+ threads?: {
243
+ singleThread?: boolean;
244
+ minThreads?: number;
245
+ maxThreads?: number;
246
+ isolate?: boolean;
247
+ };
248
+ forks?: {
249
+ singleFork?: boolean;
250
+ minForks?: number;
251
+ maxForks?: number;
252
+ isolate?: boolean;
253
+ };
254
+ };
255
+ coverage?: TestCoverageOptions;
256
+ watch?: boolean;
257
+ ui?: boolean;
258
+ reporter?: 'verbose' | 'dot' | 'json' | 'tap';
259
+ bail?: number | boolean;
260
+ pattern?: string | RegExp;
261
+ colors?: boolean;
262
+ retry?: number;
263
+ includeSrc?: string[];
264
+ excludeSrc?: string[];
265
+ env?: Record<string, string>;
266
+ }
215
267
 
216
268
  /**
217
269
  * Development server with HMR support
@@ -257,6 +309,15 @@ declare class ServerRouter {
257
309
  private addRoute;
258
310
  private pathToRegex;
259
311
  private parseQuery;
312
+ /**
313
+ * List all registered routes for debugging
314
+ */
315
+ listRoutes(): Array<{
316
+ method: string;
317
+ pattern: string;
318
+ paramNames: string[];
319
+ handler: string;
320
+ }>;
260
321
  private parseBody;
261
322
  handle(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
262
323
  }
@@ -332,4 +393,4 @@ declare class StateManager {
332
393
  }
333
394
  declare function createDevServer(options: DevServerOptions): DevServer;
334
395
 
335
- export { type BuildOptions as B, type DevServerOptions as D, type ElitRequest as E, type HttpMethod as H, type Middleware as M, type PreviewOptions as P, type ServerRouteContext as S, type BuildResult as a, type ElitResponse as b, type ServerRouteHandler as c, ServerRouter as d, clearImportMapCache as e, cors as f, errorHandler as g, html as h, bodyLimit as i, json as j, cacheControl as k, logger as l, compress as m, security as n, createProxyHandler as o, type StateChangeHandler as p, type SharedStateOptions as q, rateLimit as r, status as s, text as t, SharedState as u, StateManager as v, createDevServer as w };
396
+ export { type BuildOptions as B, type DevServerOptions as D, type ElitRequest as E, type HttpMethod as H, type Middleware as M, type PreviewOptions as P, type ServerRouteContext as S, type TestOptions as T, type BuildResult as a, type TestCoverageReporter as b, type ElitResponse as c, type ServerRouteHandler as d, ServerRouter as e, SharedState as f, type SharedStateOptions as g, type StateChangeHandler as h, StateManager as i, bodyLimit as j, cacheControl as k, clearImportMapCache as l, compress as m, cors as n, createDevServer as o, createProxyHandler as p, errorHandler as q, html as r, json as s, logger as t, rateLimit as u, security as v, status as w, text as x };
@@ -212,6 +212,58 @@ interface PreviewOptions {
212
212
  /** Environment variables to inject (prefix with VITE_ for client access) */
213
213
  env?: Record<string, string>;
214
214
  }
215
+ type TestEnvironment = 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime';
216
+ type TestCoverageProvider = 'v8' | 'istanbul';
217
+ type TestCoverageReporter = 'text' | 'json' | 'html' | 'lcov' | 'lcovonly' | 'coverage-final.json' | 'clover';
218
+ interface TestCoverageOptions {
219
+ provider?: TestCoverageProvider;
220
+ reporter?: TestCoverageReporter[];
221
+ dir?: string;
222
+ include?: string[];
223
+ exclude?: string[];
224
+ thresholds?: {
225
+ lines?: number;
226
+ functions?: number;
227
+ branches?: number;
228
+ statements?: number;
229
+ };
230
+ all?: boolean;
231
+ }
232
+ interface TestOptions {
233
+ environment?: TestEnvironment;
234
+ globals?: boolean;
235
+ setupFiles?: string[];
236
+ include?: string[];
237
+ exclude?: string[];
238
+ testTimeout?: number;
239
+ isolate?: boolean;
240
+ pool?: string;
241
+ poolOptions?: {
242
+ threads?: {
243
+ singleThread?: boolean;
244
+ minThreads?: number;
245
+ maxThreads?: number;
246
+ isolate?: boolean;
247
+ };
248
+ forks?: {
249
+ singleFork?: boolean;
250
+ minForks?: number;
251
+ maxForks?: number;
252
+ isolate?: boolean;
253
+ };
254
+ };
255
+ coverage?: TestCoverageOptions;
256
+ watch?: boolean;
257
+ ui?: boolean;
258
+ reporter?: 'verbose' | 'dot' | 'json' | 'tap';
259
+ bail?: number | boolean;
260
+ pattern?: string | RegExp;
261
+ colors?: boolean;
262
+ retry?: number;
263
+ includeSrc?: string[];
264
+ excludeSrc?: string[];
265
+ env?: Record<string, string>;
266
+ }
215
267
 
216
268
  /**
217
269
  * Development server with HMR support
@@ -257,6 +309,15 @@ declare class ServerRouter {
257
309
  private addRoute;
258
310
  private pathToRegex;
259
311
  private parseQuery;
312
+ /**
313
+ * List all registered routes for debugging
314
+ */
315
+ listRoutes(): Array<{
316
+ method: string;
317
+ pattern: string;
318
+ paramNames: string[];
319
+ handler: string;
320
+ }>;
260
321
  private parseBody;
261
322
  handle(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
262
323
  }
@@ -332,4 +393,4 @@ declare class StateManager {
332
393
  }
333
394
  declare function createDevServer(options: DevServerOptions): DevServer;
334
395
 
335
- export { type BuildOptions as B, type DevServerOptions as D, type ElitRequest as E, type HttpMethod as H, type Middleware as M, type PreviewOptions as P, type ServerRouteContext as S, type BuildResult as a, type ElitResponse as b, type ServerRouteHandler as c, ServerRouter as d, clearImportMapCache as e, cors as f, errorHandler as g, html as h, bodyLimit as i, json as j, cacheControl as k, logger as l, compress as m, security as n, createProxyHandler as o, type StateChangeHandler as p, type SharedStateOptions as q, rateLimit as r, status as s, text as t, SharedState as u, StateManager as v, createDevServer as w };
396
+ export { type BuildOptions as B, type DevServerOptions as D, type ElitRequest as E, type HttpMethod as H, type Middleware as M, type PreviewOptions as P, type ServerRouteContext as S, type TestOptions as T, type BuildResult as a, type TestCoverageReporter as b, type ElitResponse as c, type ServerRouteHandler as d, ServerRouter as e, SharedState as f, type SharedStateOptions as g, type StateChangeHandler as h, StateManager as i, bodyLimit as j, cacheControl as k, clearImportMapCache as l, compress as m, cors as n, createDevServer as o, createProxyHandler as p, errorHandler as q, html as r, json as s, logger as t, rateLimit as u, security as v, status as w, text as x };
package/dist/server.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import './http.mjs';
2
2
  import './ws.mjs';
3
- export { E as ElitRequest, b as ElitResponse, H as HttpMethod, M as Middleware, S as ServerRouteContext, c as ServerRouteHandler, d as ServerRouter, u as SharedState, q as SharedStateOptions, p as StateChangeHandler, v as StateManager, i as bodyLimit, k as cacheControl, e as clearImportMapCache, m as compress, f as cors, w as createDevServer, o as createProxyHandler, g as errorHandler, h as html, j as json, l as logger, r as rateLimit, n as security, s as status, t as text } from './server-Cz3z-5ls.mjs';
3
+ export { E as ElitRequest, c as ElitResponse, H as HttpMethod, M as Middleware, S as ServerRouteContext, d as ServerRouteHandler, e as ServerRouter, f as SharedState, g as SharedStateOptions, h as StateChangeHandler, i as StateManager, j as bodyLimit, k as cacheControl, l as clearImportMapCache, m as compress, n as cors, o as createDevServer, p as createProxyHandler, q as errorHandler, r as html, s as json, t as logger, u as rateLimit, v as security, w as status, x as text } from './server-BFTzgJpO.mjs';
4
4
  import 'node:events';
5
5
  import 'events';
6
6
  import 'http';
package/dist/server.d.ts CHANGED
@@ -44,6 +44,15 @@ export declare class ServerRouter {
44
44
  private addRoute;
45
45
  private pathToRegex;
46
46
  private parseQuery;
47
+ /**
48
+ * List all registered routes for debugging
49
+ */
50
+ listRoutes(): Array<{
51
+ method: string;
52
+ pattern: string;
53
+ paramNames: string[];
54
+ handler: string;
55
+ }>;
47
56
  private parseBody;
48
57
  handle(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
49
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -2795,6 +2795,17 @@ var ServerRouter = class {
2795
2795
  });
2796
2796
  return query;
2797
2797
  }
2798
+ /**
2799
+ * List all registered routes for debugging
2800
+ */
2801
+ listRoutes() {
2802
+ return this.routes.map((route) => ({
2803
+ method: route.method,
2804
+ pattern: route.pattern.source,
2805
+ paramNames: route.paramNames,
2806
+ handler: route.handler.name || "(anonymous)"
2807
+ }));
2808
+ }
2798
2809
  async parseBody(req) {
2799
2810
  if (typeof req.text === "function") {
2800
2811
  try {
@@ -4037,3 +4048,4 @@ ${elitImportMap}` : elitImportMap;
4037
4048
  status,
4038
4049
  text
4039
4050
  });
4051
+ //# sourceMappingURL=server.js.map