@oomfware/jsx 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,56 @@
1
- import { c as JSXElement, i as jsxs, l as JSXNode, n as jsx, o as Component, r as jsxDEV, s as FC, t as Fragment } from "./jsx-runtime-BQHdv_66.mjs";
1
+ import { a as JSX, c as JSXElement, i as jsxs, l as JSXNode, n as jsx, o as Component, r as jsxDEV, s as FC, t as Fragment } from "./jsx-runtime-BQHdv_66.mjs";
2
2
 
3
+ //#region src/lib/create-element.d.ts
4
+
5
+ /**
6
+ * creates a JSX element for an intrinsic element
7
+ * @param type element tag name
8
+ * @param props element properties
9
+ * @param children child elements
10
+ * @returns JSX element
11
+ */
12
+ declare function createElement<T extends keyof JSX.IntrinsicElements>(type: T, props?: JSX.IntrinsicElements[T] | null, ...children: JSXNode[]): JSXElement<JSX.IntrinsicElements[T], T>;
13
+ /**
14
+ * creates a JSX element for a function component
15
+ * @param type component function
16
+ * @param props component properties
17
+ * @param children child elements
18
+ * @returns JSX element
19
+ */
20
+ declare function createElement<P extends {}>(type: Component<P>, props?: P | null, ...children: JSXNode[]): JSXElement<P, Component<P>>;
21
+ /**
22
+ * creates a JSX element (classic API)
23
+ * @param type element tag name or component function
24
+ * @param props element properties
25
+ * @param children child elements
26
+ * @returns JSX element
27
+ */
28
+ declare function createElement<P extends {}>(type: string | Component<P>, props?: P | null, ...children: JSXNode[]): JSXElement<P>;
29
+ /**
30
+ * clones a JSX element for an intrinsic element with new props
31
+ * @param element element to clone
32
+ * @param props props to merge (overrides original)
33
+ * @param children children to replace (if provided)
34
+ * @returns cloned JSX element
35
+ */
36
+ declare function cloneElement<T extends keyof JSX.IntrinsicElements>(element: JSXElement<JSX.IntrinsicElements[T], T>, props?: Partial<JSX.IntrinsicElements[T]> | null, ...children: JSXNode[]): JSXElement<JSX.IntrinsicElements[T], T>;
37
+ /**
38
+ * clones a JSX element for a function component with new props
39
+ * @param element element to clone
40
+ * @param props props to merge (overrides original)
41
+ * @param children children to replace (if provided)
42
+ * @returns cloned JSX element
43
+ */
44
+ declare function cloneElement<P extends {}>(element: JSXElement<P, Component<P>>, props?: Partial<P> | null, ...children: JSXNode[]): JSXElement<P, Component<P>>;
45
+ /**
46
+ * clones a JSX element with new props
47
+ * @param element element to clone
48
+ * @param props props to merge (overrides original)
49
+ * @param children children to replace (if provided)
50
+ * @returns cloned JSX element
51
+ */
52
+ declare function cloneElement<P extends {}>(element: JSXElement<P>, props?: Partial<P> | null, ...children: JSXNode[]): JSXElement<P>;
53
+ //#endregion
3
54
  //#region src/lib/context.d.ts
4
55
  /** context object returned by createContext() */
5
56
  interface Context<T> {
@@ -73,5 +124,5 @@ declare function renderToString(node: JSXNode, options?: RenderOptions): Promise
73
124
  */
74
125
  declare function render(node: JSXNode, init?: ResponseInit): Response;
75
126
  //#endregion
76
- export { type Component, type Context, type FC, Fragment, type JSXElement, type JSXNode, type RenderOptions, Suspense, type SuspenseProps, createContext, jsx, jsxDEV, jsxs, render, renderToStream, renderToString, use };
127
+ export { type Component, type Context, type FC, Fragment, type JSXElement, type JSXNode, type RenderOptions, Suspense, type SuspenseProps, cloneElement, createContext, createElement, createElement as h, jsx, jsxDEV, jsxs, render, renderToStream, renderToString, use };
77
128
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/context.ts","../src/lib/suspense.ts","../src/lib/render.ts"],"sourcesContent":[],"mappings":";;;;UAKiB;EAAA,YAAO,EACT,CADS;EACT,QAAA,EAAA,CAAA,KAAA,EAAA;IACa,KAAA,EAAA,CAAA;IAAc,QAAA,CAAA,EAAA,OAAA;EAAc,CAAA,EAAA,GAAA,UAAA;;AA+BxD;;;;;AACA;;;;AClCA;AAQA;;;;;AAqBgB,iBDIA,aCJG,CAAA,CAAA,CAAA,CAAA,YAAA,EDI4B,CCJ5B,CAAA,EDIgC,OCJhC,CDIwC,CCJxC,CAAA;AAAoB,iBDKvB,aCLuB,CAAA,CAAA,CAAA,CAAA,CAAA,EDKH,OCLG,CDKK,CCLL,GAAA,SAAA,CAAA;;;UA7BtB,aAAA;EDAA,QAAA,ECCN,ODDa;EACT,QAAA,CAAA,ECCH,ODDG;;;;;AAgCC,iBCzBA,QAAA,CDyBa;EAAA;AAAA,CAAA,ECzBU,aDyBV,CAAA,ECzB0B,UDyB1B;;;;;AAC7B;;iBCLgB,eAAe,QAAQ,KAAK;iBAC5B,eAAe,QAAQ,KAAK;;;ADGO,UE+BlC,aAAA,CF/BkC;EAAO,OAAA,CAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GAAA,IAAA;AAC1D;;;;AClCA;AAQA;;AAAuC,iBC2EvB,cAAA,CD3EuB,IAAA,EC2EF,OD3EE,EAAA,OAAA,CAAA,EC2EiB,aD3EjB,CAAA,EC2EiC,cD3EjC,CC2EgD,UD3EhD,CAAA;;;AAqBvC;;;;AAA6C,iBC4FvB,cAAA,CD5FuB,IAAA,EC4FF,OD5FE,EAAA,OAAA,CAAA,EC4FiB,aD5FjB,CAAA,EC4FiC,OD5FjC,CAAA,MAAA,CAAA;AAC7C;;;;;;iBC8GgB,MAAA,OAAa,gBAAgB,eAAe"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/create-element.ts","../src/lib/context.ts","../src/lib/suspense.ts","../src/lib/render.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,29 @@
1
1
  import { Fragment, jsx, jsxDEV, jsxs } from "./jsx-runtime.mjs";
2
2
 
3
+ //#region src/lib/create-element.ts
4
+ function createElement(type, props, ...children) {
5
+ const finalProps = { ...props };
6
+ if (children.length === 1) finalProps.children = children[0];
7
+ else if (children.length > 1) finalProps.children = children;
8
+ return {
9
+ type,
10
+ props: finalProps
11
+ };
12
+ }
13
+ function cloneElement(element, props, ...children) {
14
+ const finalProps = {
15
+ ...element.props,
16
+ ...props
17
+ };
18
+ if (children.length === 1) finalProps.children = children[0];
19
+ else if (children.length > 1) finalProps.children = children;
20
+ return {
21
+ type: element.type,
22
+ props: finalProps
23
+ };
24
+ }
25
+
26
+ //#endregion
3
27
  //#region src/lib/context.ts
4
28
  /** internal provider component */
5
29
  function Provider({ context, value, children }) {
@@ -404,5 +428,5 @@ function finalizeHtml(html, context) {
404
428
  }
405
429
 
406
430
  //#endregion
407
- export { Fragment, Suspense, createContext, jsx, jsxDEV, jsxs, render, renderToStream, renderToString, use };
431
+ export { Fragment, Suspense, cloneElement, createContext, createElement, createElement as h, jsx, jsxDEV, jsxs, render, renderToStream, renderToString, use };
408
432
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["context: Context<T | undefined>","contextStack: ContextFrame[]","currentFrame: ContextFrame | null","context: RenderContext","parts: Segment[]","parts: string[]","seg: Segment"],"sources":["../src/lib/context.ts","../src/lib/suspense.ts","../src/lib/render.ts"],"sourcesContent":["import { Fragment, jsx } from '../jsx-runtime.ts';\n\nimport type { JSXElement, JSXNode } from './types.ts';\n\n/** context object returned by createContext() */\nexport interface Context<T> {\n\tdefaultValue: T;\n\tProvider: (props: { value: T; children?: JSXNode }) => JSXElement;\n}\n\n/** internal provider props */\ninterface ProviderProps<T> {\n\tcontext: Context<T>;\n\tvalue: T;\n\tchildren?: JSXNode;\n}\n\n/** internal provider component */\nfunction Provider<T>({ context, value, children }: ProviderProps<T>): JSXElement {\n\tprovide(context, value);\n\treturn jsx(Fragment, { children });\n}\n\n/**\n * creates a context with a Provider component\n * @param defaultValue value returned by use() when no Provider is above\n * @example\n * const ThemeContext = createContext('light');\n *\n * <ThemeContext.Provider value=\"dark\">\n * <App />\n * </ThemeContext.Provider>\n *\n * function App() {\n * const theme = use(ThemeContext);\n * return <div>{theme}</div>;\n * }\n */\nexport function createContext<T>(defaultValue: T): Context<T>;\nexport function createContext<T>(): Context<T | undefined>;\nexport function createContext<T>(defaultValue?: T): Context<T | undefined> {\n\tconst context: Context<T | undefined> = {\n\t\tdefaultValue,\n\t\tProvider: ({ value, children }) => Provider({ context, value, children }),\n\t};\n\n\treturn context;\n}\n\n/** stack of context frames */\ntype ContextFrame = Map<Context<unknown>, unknown>;\nconst contextStack: ContextFrame[] = [];\n\n/** current frame being built (lazily initialized on first provide) */\nexport let currentFrame: ContextFrame | null = null;\n\n/**\n * provides a value for the context during the current component's render\n * @param context context key from createContext()\n * @param value value to provide\n */\nexport function provide<T>(context: Context<T>, value: T): void {\n\tif (!currentFrame) {\n\t\t// lazily create frame, copying from previous\n\t\tconst prev = contextStack[contextStack.length - 1];\n\t\tcurrentFrame = prev ? new Map(prev) : new Map();\n\t}\n\tcurrentFrame.set(context as Context<unknown>, value);\n}\n\n/**\n * returns current provided value, or the default value\n * @param context context key from createContext()\n */\nexport function inject<T>(context: Context<T>): T {\n\t// check current frame first, then stack\n\tconst frame = currentFrame ?? contextStack[contextStack.length - 1];\n\tif (frame?.has(context as Context<unknown>)) {\n\t\treturn frame.get(context as Context<unknown>) as T;\n\t}\n\treturn context.defaultValue;\n}\n\n/** push current frame to stack (called before rendering children) */\nexport function pushContextFrame(): void {\n\tif (currentFrame) {\n\t\tcontextStack.push(currentFrame);\n\t\tcurrentFrame = null;\n\t}\n}\n\n/** pop context frame (called after rendering children) */\nexport function popContextFrame(hadFrame: boolean): void {\n\tif (hadFrame) {\n\t\tcontextStack.pop();\n\t}\n\tcurrentFrame = null;\n}\n","import { Fragment, jsx } from '../jsx-runtime.js';\n\nimport { inject, type Context } from './context.js';\nimport type { JSXElement, JSXNode } from './types.js';\n\nexport interface SuspenseProps {\n\tfallback: JSXNode;\n\tchildren?: JSXNode;\n}\n\n/**\n * suspense boundary - renders fallback while children are suspended\n */\nexport function Suspense({ children }: SuspenseProps): JSXElement {\n\t// Suspense is handled specially in buildSegment, this is just for typing\n\treturn jsx(Fragment, { children });\n}\n\n/** cache for resolved/rejected promise values */\nconst promiseCache = new WeakMap<\n\tPromise<unknown>,\n\t{ resolved: true; value: unknown } | { resolved: false; error: unknown }\n>();\n\nfunction isContext<T>(value: unknown): value is Context<T> {\n\treturn typeof value === 'object' && value !== null && 'defaultValue' in value && 'Provider' in value;\n}\n\n/**\n * reads a context value or suspends until a promise resolves\n * @param usable context or promise\n * @returns context value or resolved promise value\n * @throws promise if not yet resolved, or error if rejected\n */\nexport function use<T>(usable: Context<T>): T;\nexport function use<T>(usable: Promise<T>): T;\nexport function use<T>(usable: Context<T> | Promise<T>): T {\n\t// context\n\tif (isContext<T>(usable)) {\n\t\treturn inject(usable);\n\t}\n\t// promise\n\tconst cached = promiseCache.get(usable);\n\tif (cached) {\n\t\tif (cached.resolved) {\n\t\t\treturn cached.value as T;\n\t\t} else {\n\t\t\tthrow cached.error;\n\t\t}\n\t}\n\t// not cached yet - set up caching and throw\n\tusable.then(\n\t\t(value) => promiseCache.set(usable, { resolved: true, value }),\n\t\t(error) => promiseCache.set(usable, { resolved: false, error }),\n\t);\n\tthrow usable;\n}\n","/**\n * streaming JSX renderer\n *\n * architecture:\n * - segment tree: we build a tree of segments (static text, composites, suspense\n * boundaries) then serialize to HTML\n * - suspense: components can throw promises via use(), caught at Suspense boundaries\n * which render fallback immediately and stream resolved content later\n * - head hoisting: <title>, <meta>, <link>, <style> found outside <head> are\n * collected and injected into <head> during finalization\n */\n\nimport { Fragment } from '../jsx-runtime.ts';\n\nimport { currentFrame, popContextFrame, pushContextFrame } from './context.ts';\nimport { Suspense, type SuspenseProps } from './suspense.ts';\nimport type { Component, JSXElement, JSXNode } from './types.ts';\n\nconst HEAD_ELEMENTS = new Set(['title', 'meta', 'link', 'style']);\nconst SELF_CLOSING_TAGS = new Set([\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr',\n]);\n/** props that shouldn't be rendered as HTML attributes */\nconst FRAMEWORK_PROPS = new Set(['children', 'dangerouslySetInnerHTML']);\n\n// #region Segment types\n\ntype Segment =\n\t| {\n\t\t\treadonly kind: 'static';\n\t\t\treadonly html: string;\n\t }\n\t| {\n\t\t\treadonly kind: 'composite';\n\t\t\treadonly parts: readonly Segment[];\n\t }\n\t| {\n\t\t\treadonly kind: 'suspense';\n\t\t\treadonly id: string;\n\t\t\treadonly fallback: Segment;\n\t\t\tpending?: Promise<void>;\n\t\t\tcontent: Segment | null;\n\t };\n\nfunction staticSeg(html: string): Segment {\n\treturn { kind: 'static', html };\n}\n\nfunction compositeSeg(parts: Segment[]): Segment {\n\treturn { kind: 'composite', parts };\n}\n\nconst EMPTY_SEGMENT = staticSeg('');\n\n// #endregion\n\nexport interface RenderOptions {\n\tonError?: (error: unknown) => void;\n}\n\ninterface RenderContext {\n\theadElements: string[];\n\tidsByPath: Map<string, number>;\n\tinsideHead: boolean;\n\tinsideSvg: boolean;\n\tonError: (error: unknown) => void;\n\tpendingSuspense: Array<{ id: string; promise: Promise<Segment> }>;\n}\n\n/**\n * renders JSX to a readable stream\n * @param node JSX node to render\n * @param options render options\n * @returns readable stream of UTF-8 encoded HTML\n */\nexport function renderToStream(node: JSXNode, options?: RenderOptions): ReadableStream<Uint8Array> {\n\tconst encoder = new TextEncoder();\n\tconst onError = options?.onError ?? ((error) => console.error(error));\n\tconst context: RenderContext = {\n\t\theadElements: [],\n\t\tidsByPath: new Map(),\n\t\tinsideHead: false,\n\t\tinsideSvg: false,\n\t\tonError,\n\t\tpendingSuspense: [],\n\t};\n\treturn new ReadableStream({\n\t\tasync start(controller) {\n\t\t\ttry {\n\t\t\t\tconst root = buildSegment(node, context, '');\n\t\t\t\tawait resolveBlocking(root);\n\t\t\t\tconst html = serializeSegment(root);\n\t\t\t\tconst finalHtml = finalizeHtml(html, context);\n\t\t\t\tcontroller.enqueue(encoder.encode(finalHtml));\n\t\t\t\t// stream pending suspense boundaries as they resolve\n\t\t\t\tif (context.pendingSuspense.length > 0) {\n\t\t\t\t\tawait streamPendingSuspense(context, controller, encoder);\n\t\t\t\t}\n\t\t\t\tcontroller.close();\n\t\t\t} catch (error) {\n\t\t\t\tonError(error);\n\t\t\t\tcontroller.error(error);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * renders JSX to a string (non-streaming)\n * @param node JSX node to render\n * @param options render options\n * @returns promise resolving to HTML string\n */\nexport async function renderToString(node: JSXNode, options?: RenderOptions): Promise<string> {\n\tconst stream = renderToStream(node, options);\n\tconst reader = stream.getReader();\n\tconst decoder = new TextDecoder();\n\tlet html = '';\n\twhile (true) {\n\t\tconst { done, value } = await reader.read();\n\t\tif (done) break;\n\t\thtml += decoder.decode(value);\n\t}\n\treturn html;\n}\n\n/**\n * renders JSX to a streaming Response\n * @param node JSX node to render\n * @param init optional ResponseInit (status, headers, etc.)\n * @returns Response with streaming HTML body\n */\nexport function render(node: JSXNode, init?: ResponseInit): Response {\n\tconst stream = renderToStream(node);\n\n\t// @ts-expect-error: not sure why.\n\tconst headers = new Headers(init?.headers);\n\tif (!headers.has('Content-Type')) {\n\t\theaders.set('Content-Type', 'text/html; charset=utf-8');\n\t}\n\n\treturn new Response(stream, { ...init, headers });\n}\n\n// #region Segment building\n\nfunction isJSXElement(node: unknown): node is JSXElement {\n\treturn typeof node === 'object' && node !== null && 'type' in node && 'props' in node;\n}\n\nfunction isHeadElement(tag: string): boolean {\n\treturn HEAD_ELEMENTS.has(tag);\n}\n\nfunction buildSegment(node: JSXNode, context: RenderContext, path: string): Segment {\n\t// primitives\n\tif (typeof node === 'string' || typeof node === 'number' || typeof node === 'bigint') {\n\t\treturn staticSeg(escapeHtml(node, false));\n\t}\n\tif (node === null || node === undefined || typeof node === 'boolean') {\n\t\treturn EMPTY_SEGMENT;\n\t}\n\t// iterables (arrays, generators, etc.)\n\tif (typeof node === 'object' && Symbol.iterator in node) {\n\t\tconst parts: Segment[] = [];\n\t\tfor (const child of node) {\n\t\t\tparts.push(buildSegment(child, context, path));\n\t\t}\n\t\treturn compositeSeg(parts);\n\t}\n\t// JSX elements\n\tif (isJSXElement(node)) {\n\t\tconst { type, props } = node;\n\t\t// Fragment\n\t\tif (type === Fragment) {\n\t\t\tconst children = (props as { children?: JSXNode }).children;\n\t\t\treturn children != null ? buildSegment(children, context, path) : EMPTY_SEGMENT;\n\t\t}\n\t\t// intrinsic elements (HTML tags)\n\t\tif (typeof type === 'string') {\n\t\t\tconst tag = type;\n\n\t\t\tif (tag === 'head') {\n\t\t\t\treturn buildHeadElementSegment(tag, props as Record<string, unknown>, context, path);\n\t\t\t}\n\n\t\t\tif (!context.insideHead && isHeadElement(tag)) {\n\t\t\t\t// hoist to <head>\n\t\t\t\tconst elementSeg = buildElementSegment(tag, props as Record<string, unknown>, context, path);\n\t\t\t\tcontext.headElements.push(serializeSegment(elementSeg));\n\t\t\t\treturn EMPTY_SEGMENT;\n\t\t\t}\n\n\t\t\treturn buildElementSegment(tag, props as Record<string, unknown>, context, path);\n\t\t}\n\t\t// function components\n\t\tif (typeof type === 'function') {\n\t\t\t// Suspense boundary\n\t\t\tif (type === Suspense) {\n\t\t\t\treturn buildSuspenseSegment(props as unknown as SuspenseProps, context, path);\n\t\t\t}\n\t\t\treturn buildComponentSegment(type, props as Record<string, unknown>, context, path);\n\t\t}\n\t}\n\treturn EMPTY_SEGMENT;\n}\n\n// #endregion\n\n// #region Element building\n\nfunction buildElementSegment(\n\ttag: string,\n\tprops: Record<string, unknown>,\n\tcontext: RenderContext,\n\tpath: string,\n): Segment {\n\tconst currentIsSvg = context.insideSvg || tag === 'svg';\n\tconst attrs = renderAttributes(props);\n\t// self-closing tags\n\tif (SELF_CLOSING_TAGS.has(tag)) {\n\t\treturn staticSeg(`<${tag}${attrs}>`);\n\t}\n\t// dangerouslySetInnerHTML\n\tconst innerHTML = props.dangerouslySetInnerHTML as { __html: string } | undefined;\n\tif (innerHTML) {\n\t\treturn staticSeg(`<${tag}${attrs}>${innerHTML.__html}</${tag}>`);\n\t}\n\t// normal element with children\n\tconst open = staticSeg(`<${tag}${attrs}>`);\n\tconst previousInsideSvg = context.insideSvg;\n\tcontext.insideSvg = tag === 'foreignObject' ? false : currentIsSvg;\n\tconst children =\n\t\tprops.children != null ? buildSegment(props.children as JSXNode, context, path) : EMPTY_SEGMENT;\n\tcontext.insideSvg = previousInsideSvg;\n\tconst close = staticSeg(`</${tag}>`);\n\treturn compositeSeg([open, children, close]);\n}\n\nfunction buildHeadElementSegment(\n\ttag: string,\n\tprops: Record<string, unknown>,\n\tcontext: RenderContext,\n\tpath: string,\n): Segment {\n\tconst attrs = renderAttributes(props);\n\tconst previousInsideHead = context.insideHead;\n\tcontext.insideHead = true;\n\tconst open = staticSeg(`<${tag}${attrs}>`);\n\tconst children =\n\t\tprops.children != null ? buildSegment(props.children as JSXNode, context, path) : EMPTY_SEGMENT;\n\tcontext.insideHead = previousInsideHead;\n\tconst close = staticSeg(`</${tag}>`);\n\treturn compositeSeg([open, children, close]);\n}\n\nfunction renderAttributes(props: Record<string, unknown>): string {\n\tlet attrs = '';\n\tfor (const key in props) {\n\t\tif (FRAMEWORK_PROPS.has(key)) continue;\n\t\tconst value = props[key];\n\t\tif (value === undefined || value === null || value === false) continue;\n\t\tif (typeof value === 'function') continue;\n\t\t// style object -> string\n\t\tif (key === 'style' && typeof value === 'object') {\n\t\t\tconst styleStr = serializeStyle(value as Record<string, string | number>);\n\t\t\tif (styleStr) {\n\t\t\t\tattrs += ` style=\"${escapeHtml(styleStr, true)}\"`;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (value === true) {\n\t\t\tattrs += ` ${key}`;\n\t\t} else {\n\t\t\tattrs += ` ${key}=\"${escapeHtml(value, true)}\"`;\n\t\t}\n\t}\n\treturn attrs;\n}\n\nfunction serializeStyle(style: Record<string, string | number>): string {\n\tconst parts: string[] = [];\n\tfor (const [key, value] of Object.entries(style)) {\n\t\tif (value == null) continue;\n\t\tparts.push(`${key}:${value}`);\n\t}\n\treturn parts.join(';');\n}\n\n// #endregion\n\n// #region Component building\n\nfunction buildComponentSegment(\n\ttype: Component,\n\tprops: Record<string, unknown>,\n\tctx: RenderContext,\n\tpath: string,\n): Segment {\n\t// call component\n\tconst result = type(props);\n\t// if component called provide(), push frame before rendering children\n\tconst hadFrame = currentFrame !== null;\n\tpushContextFrame();\n\ttry {\n\t\treturn buildSegment(result, ctx, path);\n\t} finally {\n\t\tpopContextFrame(hadFrame);\n\t}\n}\n\nfunction buildSuspenseSegment(props: SuspenseProps, ctx: RenderContext, path: string): Segment {\n\t// generate unique id for this suspense boundary\n\tconst nextIndex = (ctx.idsByPath.get(path) ?? 0) + 1;\n\tctx.idsByPath.set(path, nextIndex);\n\tconst id = path ? `${path}-${nextIndex}` : `${nextIndex}`;\n\tconst suspenseId = `s${id}`;\n\n\ttry {\n\t\t// try to render children synchronously\n\t\tconst content = buildSegment(props.children, ctx, suspenseId);\n\t\t// no suspension - return content directly (no boundary needed)\n\t\treturn content;\n\t} catch (thrown) {\n\t\t// check if it's a promise (suspension)\n\t\tif (thrown instanceof Promise) {\n\t\t\t// render fallback\n\t\t\tconst fallback = buildSegment(props.fallback, ctx, suspenseId);\n\n\t\t\t// create suspense segment\n\t\t\tconst seg: Segment = {\n\t\t\t\tkind: 'suspense',\n\t\t\t\tid: suspenseId,\n\t\t\t\tfallback,\n\t\t\t\tcontent: null,\n\t\t\t};\n\n\t\t\t// set up promise to re-render children when resolved\n\t\t\tconst pending = thrown.then(() => {\n\t\t\t\t// re-render children after promise resolves\n\t\t\t\tseg.content = buildSegment(props.children, ctx, suspenseId);\n\t\t\t});\n\t\t\tseg.pending = pending;\n\n\t\t\t// track for streaming\n\t\t\tctx.pendingSuspense.push({\n\t\t\t\tid: suspenseId,\n\t\t\t\tpromise: pending.then(() => seg.content!),\n\t\t\t});\n\n\t\t\treturn seg;\n\t\t}\n\t\t// not a promise - re-throw\n\t\tthrow thrown;\n\t}\n}\n\n// #endregion\n\n// #region Serialization\n\n/** resolve all blocking suspense boundaries */\nasync function resolveBlocking(segment: Segment): Promise<void> {\n\tif (segment.kind === 'suspense') {\n\t\tif (segment.pending) {\n\t\t\tawait segment.pending;\n\t\t\tsegment.pending = undefined;\n\t\t}\n\t\tif (segment.content) {\n\t\t\tawait resolveBlocking(segment.content);\n\t\t}\n\t\treturn;\n\t}\n\tif (segment.kind === 'composite') {\n\t\tfor (const part of segment.parts) {\n\t\t\tawait resolveBlocking(part);\n\t\t}\n\t}\n}\n\n/** serialize segment tree to HTML string */\nfunction serializeSegment(seg: Segment): string {\n\tif (seg.kind === 'static') {\n\t\treturn seg.html;\n\t}\n\tif (seg.kind === 'composite') {\n\t\treturn seg.parts.map(serializeSegment).join('');\n\t}\n\t// suspense - always render fallback; resolved content streams in template\n\treturn `<!--$s:${seg.id}-->${serializeSegment(seg.fallback)}<!--/$s:${seg.id}-->`;\n}\n\n// #endregion\n\n// #region Streaming\n\n/** suspense runtime function name */\nconst SR = '$sr';\n/** suspense runtime - injected once, swaps template content with fallback */\nconst SUSPENSE_RUNTIME = `<script>${SR}=(t,i,s,e)=>{i=\"$s:\"+t.dataset.suspense;s=document.createTreeWalker(document,128);while(e=s.nextNode())if(e.data===i){while(e.nextSibling?.data!==\"/\"+i)e.nextSibling.remove();e.nextSibling.replaceWith(...t.content.childNodes);e.remove();break}t.remove()}</script>`;\n\nasync function streamPendingSuspense(\n\tcontext: RenderContext,\n\tcontroller: ReadableStreamDefaultController<Uint8Array>,\n\tencoder: TextEncoder,\n): Promise<void> {\n\tlet runtimeInjected = false;\n\tconst processed = new Set<string>();\n\twhile (true) {\n\t\tconst batch = context.pendingSuspense.filter(({ id }) => !processed.has(id));\n\t\tif (batch.length === 0) break;\n\t\tawait Promise.all(\n\t\t\tbatch.map(async ({ id, promise }) => {\n\t\t\t\tprocessed.add(id);\n\t\t\t\ttry {\n\t\t\t\t\tconst resolvedSegment = await promise;\n\t\t\t\t\tawait resolveBlocking(resolvedSegment);\n\t\t\t\t\tconst html = serializeSegment(resolvedSegment);\n\t\t\t\t\t// inject runtime once before first resolution\n\t\t\t\t\tconst runtime = runtimeInjected ? '' : SUSPENSE_RUNTIME;\n\t\t\t\t\truntimeInjected = true;\n\t\t\t\t\t// stream template + call to swap function\n\t\t\t\t\tcontroller.enqueue(\n\t\t\t\t\t\tencoder.encode(\n\t\t\t\t\t\t\t`${runtime}<template data-suspense=\"${id}\">${html}</template>` +\n\t\t\t\t\t\t\t\t`<script>${SR}(document.currentScript.previousElementSibling)</script>`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontext.onError(error);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n}\n\n// #endregion\n\n// #region Utilities\n\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\nfunction escapeHtml(value: unknown, isAttr: boolean): string {\n\tconst str = String(value ?? '');\n\tconst pattern = isAttr ? ATTR_REGEX : CONTENT_REGEX;\n\tpattern.lastIndex = 0;\n\n\tlet escaped = '';\n\tlet last = 0;\n\n\twhile (pattern.test(str)) {\n\t\tconst i = pattern.lastIndex - 1;\n\t\tconst ch = str[i];\n\t\tescaped += str.substring(last, i) + (ch === '&' ? '&amp;' : ch === '\"' ? '&quot;' : '&lt;');\n\t\tlast = i + 1;\n\t}\n\n\treturn escaped + str.substring(last);\n}\n\nfunction finalizeHtml(html: string, context: RenderContext): string {\n\tconst hasHtmlRoot = html.trimStart().toLowerCase().startsWith('<html');\n\t// inject hoisted head elements\n\tif (context.headElements.length > 0) {\n\t\tconst headContent = context.headElements.join('');\n\t\tif (hasHtmlRoot) {\n\t\t\tconst headCloseIndex = html.indexOf('</head>');\n\t\t\tif (headCloseIndex !== -1) {\n\t\t\t\t// inject before existing </head>\n\t\t\t\thtml = html.slice(0, headCloseIndex) + headContent + html.slice(headCloseIndex);\n\t\t\t} else {\n\t\t\t\t// no existing head, inject after <html>\n\t\t\t\tconst htmlOpenMatch = html.match(/<html[^>]*>/);\n\t\t\t\tif (htmlOpenMatch && htmlOpenMatch.index !== undefined) {\n\t\t\t\t\tconst insertIndex = htmlOpenMatch.index + htmlOpenMatch[0].length;\n\t\t\t\t\thtml = html.slice(0, insertIndex) + `<head>${headContent}</head>` + html.slice(insertIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// no HTML root, prepend head\n\t\t\thtml = `<head>${headContent}</head>${html}`;\n\t\t}\n\t}\n\tif (hasHtmlRoot) {\n\t\thtml = '<!doctype html>' + html;\n\t}\n\treturn html;\n}\n\n// #endregion\n"],"mappings":";;;;AAkBA,SAAS,SAAY,EAAE,SAAS,OAAO,YAA0C;AAChF,SAAQ,SAAS,MAAM;AACvB,QAAO,IAAI,UAAU,EAAE,UAAU,CAAC;;AAoBnC,SAAgB,cAAiB,cAA0C;CAC1E,MAAMA,UAAkC;EACvC;EACA,WAAW,EAAE,OAAO,eAAe,SAAS;GAAE;GAAS;GAAO;GAAU,CAAC;EACzE;AAED,QAAO;;AAKR,MAAMC,eAA+B,EAAE;;AAGvC,IAAWC,eAAoC;;;;;;AAO/C,SAAgB,QAAW,SAAqB,OAAgB;AAC/D,KAAI,CAAC,cAAc;EAElB,MAAM,OAAO,aAAa,aAAa,SAAS;AAChD,iBAAe,OAAO,IAAI,IAAI,KAAK,mBAAG,IAAI,KAAK;;AAEhD,cAAa,IAAI,SAA6B,MAAM;;;;;;AAOrD,SAAgB,OAAU,SAAwB;CAEjD,MAAM,QAAQ,gBAAgB,aAAa,aAAa,SAAS;AACjE,KAAI,OAAO,IAAI,QAA4B,CAC1C,QAAO,MAAM,IAAI,QAA4B;AAE9C,QAAO,QAAQ;;;AAIhB,SAAgB,mBAAyB;AACxC,KAAI,cAAc;AACjB,eAAa,KAAK,aAAa;AAC/B,iBAAe;;;;AAKjB,SAAgB,gBAAgB,UAAyB;AACxD,KAAI,SACH,cAAa,KAAK;AAEnB,gBAAe;;;;;;;;ACnFhB,SAAgB,SAAS,EAAE,YAAuC;AAEjE,QAAO,IAAI,UAAU,EAAE,UAAU,CAAC;;;AAInC,MAAM,+BAAe,IAAI,SAGtB;AAEH,SAAS,UAAa,OAAqC;AAC1D,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,kBAAkB,SAAS,cAAc;;AAWhG,SAAgB,IAAO,QAAoC;AAE1D,KAAI,UAAa,OAAO,CACvB,QAAO,OAAO,OAAO;CAGtB,MAAM,SAAS,aAAa,IAAI,OAAO;AACvC,KAAI,OACH,KAAI,OAAO,SACV,QAAO,OAAO;KAEd,OAAM,OAAO;AAIf,QAAO,MACL,UAAU,aAAa,IAAI,QAAQ;EAAE,UAAU;EAAM;EAAO,CAAC,GAC7D,UAAU,aAAa,IAAI,QAAQ;EAAE,UAAU;EAAO;EAAO,CAAC,CAC/D;AACD,OAAM;;;;;;;;;;;;;;;;ACrCP,MAAM,gBAAgB,IAAI,IAAI;CAAC;CAAS;CAAQ;CAAQ;CAAQ,CAAC;AACjE,MAAM,oBAAoB,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,CAAC;;AAEF,MAAM,kBAAkB,IAAI,IAAI,CAAC,YAAY,0BAA0B,CAAC;AAqBxE,SAAS,UAAU,MAAuB;AACzC,QAAO;EAAE,MAAM;EAAU;EAAM;;AAGhC,SAAS,aAAa,OAA2B;AAChD,QAAO;EAAE,MAAM;EAAa;EAAO;;AAGpC,MAAM,gBAAgB,UAAU,GAAG;;;;;;;AAuBnC,SAAgB,eAAe,MAAe,SAAqD;CAClG,MAAM,UAAU,IAAI,aAAa;CACjC,MAAM,UAAU,SAAS,aAAa,UAAU,QAAQ,MAAM,MAAM;CACpE,MAAMC,UAAyB;EAC9B,cAAc,EAAE;EAChB,2BAAW,IAAI,KAAK;EACpB,YAAY;EACZ,WAAW;EACX;EACA,iBAAiB,EAAE;EACnB;AACD,QAAO,IAAI,eAAe,EACzB,MAAM,MAAM,YAAY;AACvB,MAAI;GACH,MAAM,OAAO,aAAa,MAAM,SAAS,GAAG;AAC5C,SAAM,gBAAgB,KAAK;GAE3B,MAAM,YAAY,aADL,iBAAiB,KAAK,EACE,QAAQ;AAC7C,cAAW,QAAQ,QAAQ,OAAO,UAAU,CAAC;AAE7C,OAAI,QAAQ,gBAAgB,SAAS,EACpC,OAAM,sBAAsB,SAAS,YAAY,QAAQ;AAE1D,cAAW,OAAO;WACV,OAAO;AACf,WAAQ,MAAM;AACd,cAAW,MAAM,MAAM;;IAGzB,CAAC;;;;;;;;AASH,eAAsB,eAAe,MAAe,SAA0C;CAE7F,MAAM,SADS,eAAe,MAAM,QAAQ,CACtB,WAAW;CACjC,MAAM,UAAU,IAAI,aAAa;CACjC,IAAI,OAAO;AACX,QAAO,MAAM;EACZ,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,MAAI,KAAM;AACV,UAAQ,QAAQ,OAAO,MAAM;;AAE9B,QAAO;;;;;;;;AASR,SAAgB,OAAO,MAAe,MAA+B;CACpE,MAAM,SAAS,eAAe,KAAK;CAGnC,MAAM,UAAU,IAAI,QAAQ,MAAM,QAAQ;AAC1C,KAAI,CAAC,QAAQ,IAAI,eAAe,CAC/B,SAAQ,IAAI,gBAAgB,2BAA2B;AAGxD,QAAO,IAAI,SAAS,QAAQ;EAAE,GAAG;EAAM;EAAS,CAAC;;AAKlD,SAAS,aAAa,MAAmC;AACxD,QAAO,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,QAAQ,WAAW;;AAGlF,SAAS,cAAc,KAAsB;AAC5C,QAAO,cAAc,IAAI,IAAI;;AAG9B,SAAS,aAAa,MAAe,SAAwB,MAAuB;AAEnF,KAAI,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,OAAO,SAAS,SAC3E,QAAO,UAAU,WAAW,MAAM,MAAM,CAAC;AAE1C,KAAI,SAAS,QAAQ,SAAS,UAAa,OAAO,SAAS,UAC1D,QAAO;AAGR,KAAI,OAAO,SAAS,YAAY,OAAO,YAAY,MAAM;EACxD,MAAMC,QAAmB,EAAE;AAC3B,OAAK,MAAM,SAAS,KACnB,OAAM,KAAK,aAAa,OAAO,SAAS,KAAK,CAAC;AAE/C,SAAO,aAAa,MAAM;;AAG3B,KAAI,aAAa,KAAK,EAAE;EACvB,MAAM,EAAE,MAAM,UAAU;AAExB,MAAI,SAAS,UAAU;GACtB,MAAM,WAAY,MAAiC;AACnD,UAAO,YAAY,OAAO,aAAa,UAAU,SAAS,KAAK,GAAG;;AAGnE,MAAI,OAAO,SAAS,UAAU;GAC7B,MAAM,MAAM;AAEZ,OAAI,QAAQ,OACX,QAAO,wBAAwB,KAAK,OAAkC,SAAS,KAAK;AAGrF,OAAI,CAAC,QAAQ,cAAc,cAAc,IAAI,EAAE;IAE9C,MAAM,aAAa,oBAAoB,KAAK,OAAkC,SAAS,KAAK;AAC5F,YAAQ,aAAa,KAAK,iBAAiB,WAAW,CAAC;AACvD,WAAO;;AAGR,UAAO,oBAAoB,KAAK,OAAkC,SAAS,KAAK;;AAGjF,MAAI,OAAO,SAAS,YAAY;AAE/B,OAAI,SAAS,SACZ,QAAO,qBAAqB,OAAmC,SAAS,KAAK;AAE9E,UAAO,sBAAsB,MAAM,OAAkC,SAAS,KAAK;;;AAGrF,QAAO;;AAOR,SAAS,oBACR,KACA,OACA,SACA,MACU;CACV,MAAM,eAAe,QAAQ,aAAa,QAAQ;CAClD,MAAM,QAAQ,iBAAiB,MAAM;AAErC,KAAI,kBAAkB,IAAI,IAAI,CAC7B,QAAO,UAAU,IAAI,MAAM,MAAM,GAAG;CAGrC,MAAM,YAAY,MAAM;AACxB,KAAI,UACH,QAAO,UAAU,IAAI,MAAM,MAAM,GAAG,UAAU,OAAO,IAAI,IAAI,GAAG;CAGjE,MAAM,OAAO,UAAU,IAAI,MAAM,MAAM,GAAG;CAC1C,MAAM,oBAAoB,QAAQ;AAClC,SAAQ,YAAY,QAAQ,kBAAkB,QAAQ;CACtD,MAAM,WACL,MAAM,YAAY,OAAO,aAAa,MAAM,UAAqB,SAAS,KAAK,GAAG;AACnF,SAAQ,YAAY;AAEpB,QAAO,aAAa;EAAC;EAAM;EADb,UAAU,KAAK,IAAI,GAAG;EACO,CAAC;;AAG7C,SAAS,wBACR,KACA,OACA,SACA,MACU;CACV,MAAM,QAAQ,iBAAiB,MAAM;CACrC,MAAM,qBAAqB,QAAQ;AACnC,SAAQ,aAAa;CACrB,MAAM,OAAO,UAAU,IAAI,MAAM,MAAM,GAAG;CAC1C,MAAM,WACL,MAAM,YAAY,OAAO,aAAa,MAAM,UAAqB,SAAS,KAAK,GAAG;AACnF,SAAQ,aAAa;AAErB,QAAO,aAAa;EAAC;EAAM;EADb,UAAU,KAAK,IAAI,GAAG;EACO,CAAC;;AAG7C,SAAS,iBAAiB,OAAwC;CACjE,IAAI,QAAQ;AACZ,MAAK,MAAM,OAAO,OAAO;AACxB,MAAI,gBAAgB,IAAI,IAAI,CAAE;EAC9B,MAAM,QAAQ,MAAM;AACpB,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,MAAO;AAC9D,MAAI,OAAO,UAAU,WAAY;AAEjC,MAAI,QAAQ,WAAW,OAAO,UAAU,UAAU;GACjD,MAAM,WAAW,eAAe,MAAyC;AACzE,OAAI,SACH,UAAS,WAAW,WAAW,UAAU,KAAK,CAAC;AAEhD;;AAED,MAAI,UAAU,KACb,UAAS,IAAI;MAEb,UAAS,IAAI,IAAI,IAAI,WAAW,OAAO,KAAK,CAAC;;AAG/C,QAAO;;AAGR,SAAS,eAAe,OAAgD;CACvE,MAAMC,QAAkB,EAAE;AAC1B,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;AACjD,MAAI,SAAS,KAAM;AACnB,QAAM,KAAK,GAAG,IAAI,GAAG,QAAQ;;AAE9B,QAAO,MAAM,KAAK,IAAI;;AAOvB,SAAS,sBACR,MACA,OACA,KACA,MACU;CAEV,MAAM,SAAS,KAAK,MAAM;CAE1B,MAAM,WAAW,iBAAiB;AAClC,mBAAkB;AAClB,KAAI;AACH,SAAO,aAAa,QAAQ,KAAK,KAAK;WAC7B;AACT,kBAAgB,SAAS;;;AAI3B,SAAS,qBAAqB,OAAsB,KAAoB,MAAuB;CAE9F,MAAM,aAAa,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK;AACnD,KAAI,UAAU,IAAI,MAAM,UAAU;CAElC,MAAM,aAAa,IADR,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG;AAG9C,KAAI;AAIH,SAFgB,aAAa,MAAM,UAAU,KAAK,WAAW;UAGrD,QAAQ;AAEhB,MAAI,kBAAkB,SAAS;GAK9B,MAAMC,MAAe;IACpB,MAAM;IACN,IAAI;IACJ,UANgB,aAAa,MAAM,UAAU,KAAK,WAAW;IAO7D,SAAS;IACT;GAGD,MAAM,UAAU,OAAO,WAAW;AAEjC,QAAI,UAAU,aAAa,MAAM,UAAU,KAAK,WAAW;KAC1D;AACF,OAAI,UAAU;AAGd,OAAI,gBAAgB,KAAK;IACxB,IAAI;IACJ,SAAS,QAAQ,WAAW,IAAI,QAAS;IACzC,CAAC;AAEF,UAAO;;AAGR,QAAM;;;;AASR,eAAe,gBAAgB,SAAiC;AAC/D,KAAI,QAAQ,SAAS,YAAY;AAChC,MAAI,QAAQ,SAAS;AACpB,SAAM,QAAQ;AACd,WAAQ,UAAU;;AAEnB,MAAI,QAAQ,QACX,OAAM,gBAAgB,QAAQ,QAAQ;AAEvC;;AAED,KAAI,QAAQ,SAAS,YACpB,MAAK,MAAM,QAAQ,QAAQ,MAC1B,OAAM,gBAAgB,KAAK;;;AAM9B,SAAS,iBAAiB,KAAsB;AAC/C,KAAI,IAAI,SAAS,SAChB,QAAO,IAAI;AAEZ,KAAI,IAAI,SAAS,YAChB,QAAO,IAAI,MAAM,IAAI,iBAAiB,CAAC,KAAK,GAAG;AAGhD,QAAO,UAAU,IAAI,GAAG,KAAK,iBAAiB,IAAI,SAAS,CAAC,UAAU,IAAI,GAAG;;;AAQ9E,MAAM,KAAK;;AAEX,MAAM,mBAAmB,WAAW,GAAG;AAEvC,eAAe,sBACd,SACA,YACA,SACgB;CAChB,IAAI,kBAAkB;CACtB,MAAM,4BAAY,IAAI,KAAa;AACnC,QAAO,MAAM;EACZ,MAAM,QAAQ,QAAQ,gBAAgB,QAAQ,EAAE,SAAS,CAAC,UAAU,IAAI,GAAG,CAAC;AAC5E,MAAI,MAAM,WAAW,EAAG;AACxB,QAAM,QAAQ,IACb,MAAM,IAAI,OAAO,EAAE,IAAI,cAAc;AACpC,aAAU,IAAI,GAAG;AACjB,OAAI;IACH,MAAM,kBAAkB,MAAM;AAC9B,UAAM,gBAAgB,gBAAgB;IACtC,MAAM,OAAO,iBAAiB,gBAAgB;IAE9C,MAAM,UAAU,kBAAkB,KAAK;AACvC,sBAAkB;AAElB,eAAW,QACV,QAAQ,OACP,GAAG,QAAQ,2BAA2B,GAAG,IAAI,KAAK,qBACtC,GAAG,2DACf,CACD;YACO,OAAO;AACf,YAAQ,QAAQ,MAAM;;IAEtB,CACF;;;AAQH,MAAM,aAAa;AACnB,MAAM,gBAAgB;AAEtB,SAAS,WAAW,OAAgB,QAAyB;CAC5D,MAAM,MAAM,OAAO,SAAS,GAAG;CAC/B,MAAM,UAAU,SAAS,aAAa;AACtC,SAAQ,YAAY;CAEpB,IAAI,UAAU;CACd,IAAI,OAAO;AAEX,QAAO,QAAQ,KAAK,IAAI,EAAE;EACzB,MAAM,IAAI,QAAQ,YAAY;EAC9B,MAAM,KAAK,IAAI;AACf,aAAW,IAAI,UAAU,MAAM,EAAE,IAAI,OAAO,MAAM,UAAU,OAAO,OAAM,WAAW;AACpF,SAAO,IAAI;;AAGZ,QAAO,UAAU,IAAI,UAAU,KAAK;;AAGrC,SAAS,aAAa,MAAc,SAAgC;CACnE,MAAM,cAAc,KAAK,WAAW,CAAC,aAAa,CAAC,WAAW,QAAQ;AAEtE,KAAI,QAAQ,aAAa,SAAS,GAAG;EACpC,MAAM,cAAc,QAAQ,aAAa,KAAK,GAAG;AACjD,MAAI,aAAa;GAChB,MAAM,iBAAiB,KAAK,QAAQ,UAAU;AAC9C,OAAI,mBAAmB,GAEtB,QAAO,KAAK,MAAM,GAAG,eAAe,GAAG,cAAc,KAAK,MAAM,eAAe;QACzE;IAEN,MAAM,gBAAgB,KAAK,MAAM,cAAc;AAC/C,QAAI,iBAAiB,cAAc,UAAU,QAAW;KACvD,MAAM,cAAc,cAAc,QAAQ,cAAc,GAAG;AAC3D,YAAO,KAAK,MAAM,GAAG,YAAY,GAAG,SAAS,YAAY,WAAW,KAAK,MAAM,YAAY;;;QAK7F,QAAO,SAAS,YAAY,SAAS;;AAGvC,KAAI,YACH,QAAO,oBAAoB;AAE5B,QAAO"}
1
+ {"version":3,"file":"index.mjs","names":["finalProps: Record<string, unknown>","context: Context<T | undefined>","contextStack: ContextFrame[]","currentFrame: ContextFrame | null","context: RenderContext","parts: Segment[]","parts: string[]","seg: Segment"],"sources":["../src/lib/create-element.ts","../src/lib/context.ts","../src/lib/suspense.ts","../src/lib/render.ts"],"sourcesContent":["import type { JSX } from './intrinsic-elements.ts';\nimport type { Component, JSXElement, JSXNode } from './types.ts';\n\n// #region createElement\n\n/**\n * creates a JSX element for an intrinsic element\n * @param type element tag name\n * @param props element properties\n * @param children child elements\n * @returns JSX element\n */\nexport function createElement<T extends keyof JSX.IntrinsicElements>(\n\ttype: T,\n\tprops?: JSX.IntrinsicElements[T] | null,\n\t...children: JSXNode[]\n): JSXElement<JSX.IntrinsicElements[T], T>;\n\n/**\n * creates a JSX element for a function component\n * @param type component function\n * @param props component properties\n * @param children child elements\n * @returns JSX element\n */\nexport function createElement<P extends {}>(\n\ttype: Component<P>,\n\tprops?: P | null,\n\t...children: JSXNode[]\n): JSXElement<P, Component<P>>;\n\n/**\n * creates a JSX element (classic API)\n * @param type element tag name or component function\n * @param props element properties\n * @param children child elements\n * @returns JSX element\n */\nexport function createElement<P extends {}>(\n\ttype: string | Component<P>,\n\tprops?: P | null,\n\t...children: JSXNode[]\n): JSXElement<P>;\n\nexport function createElement(\n\ttype: string | Component<any>,\n\tprops?: Record<string, unknown> | null,\n\t...children: JSXNode[]\n): JSXElement {\n\tconst finalProps: Record<string, unknown> = { ...props };\n\n\tif (children.length === 1) {\n\t\tfinalProps.children = children[0];\n\t} else if (children.length > 1) {\n\t\tfinalProps.children = children;\n\t}\n\n\treturn { type, props: finalProps };\n}\n\n// #endregion\n\n// #region cloneElement\n\n/**\n * clones a JSX element for an intrinsic element with new props\n * @param element element to clone\n * @param props props to merge (overrides original)\n * @param children children to replace (if provided)\n * @returns cloned JSX element\n */\nexport function cloneElement<T extends keyof JSX.IntrinsicElements>(\n\telement: JSXElement<JSX.IntrinsicElements[T], T>,\n\tprops?: Partial<JSX.IntrinsicElements[T]> | null,\n\t...children: JSXNode[]\n): JSXElement<JSX.IntrinsicElements[T], T>;\n\n/**\n * clones a JSX element for a function component with new props\n * @param element element to clone\n * @param props props to merge (overrides original)\n * @param children children to replace (if provided)\n * @returns cloned JSX element\n */\nexport function cloneElement<P extends {}>(\n\telement: JSXElement<P, Component<P>>,\n\tprops?: Partial<P> | null,\n\t...children: JSXNode[]\n): JSXElement<P, Component<P>>;\n\n/**\n * clones a JSX element with new props\n * @param element element to clone\n * @param props props to merge (overrides original)\n * @param children children to replace (if provided)\n * @returns cloned JSX element\n */\nexport function cloneElement<P extends {}>(\n\telement: JSXElement<P>,\n\tprops?: Partial<P> | null,\n\t...children: JSXNode[]\n): JSXElement<P>;\n\nexport function cloneElement(\n\telement: JSXElement,\n\tprops?: Record<string, unknown> | null,\n\t...children: JSXNode[]\n): JSXElement {\n\tconst finalProps: Record<string, unknown> = { ...(element.props as Record<string, unknown>), ...props };\n\n\tif (children.length === 1) {\n\t\tfinalProps.children = children[0];\n\t} else if (children.length > 1) {\n\t\tfinalProps.children = children;\n\t}\n\n\treturn { type: element.type, props: finalProps };\n}\n\n// #endregion\n","import { Fragment, jsx } from '../jsx-runtime.ts';\n\nimport type { JSXElement, JSXNode } from './types.ts';\n\n/** context object returned by createContext() */\nexport interface Context<T> {\n\tdefaultValue: T;\n\tProvider: (props: { value: T; children?: JSXNode }) => JSXElement;\n}\n\n/** internal provider props */\ninterface ProviderProps<T> {\n\tcontext: Context<T>;\n\tvalue: T;\n\tchildren?: JSXNode;\n}\n\n/** internal provider component */\nfunction Provider<T>({ context, value, children }: ProviderProps<T>): JSXElement {\n\tprovide(context, value);\n\treturn jsx(Fragment, { children });\n}\n\n/**\n * creates a context with a Provider component\n * @param defaultValue value returned by use() when no Provider is above\n * @example\n * const ThemeContext = createContext('light');\n *\n * <ThemeContext.Provider value=\"dark\">\n * <App />\n * </ThemeContext.Provider>\n *\n * function App() {\n * const theme = use(ThemeContext);\n * return <div>{theme}</div>;\n * }\n */\nexport function createContext<T>(defaultValue: T): Context<T>;\nexport function createContext<T>(): Context<T | undefined>;\nexport function createContext<T>(defaultValue?: T): Context<T | undefined> {\n\tconst context: Context<T | undefined> = {\n\t\tdefaultValue,\n\t\tProvider: ({ value, children }) => Provider({ context, value, children }),\n\t};\n\n\treturn context;\n}\n\n/** stack of context frames */\ntype ContextFrame = Map<Context<unknown>, unknown>;\nconst contextStack: ContextFrame[] = [];\n\n/** current frame being built (lazily initialized on first provide) */\nexport let currentFrame: ContextFrame | null = null;\n\n/**\n * provides a value for the context during the current component's render\n * @param context context key from createContext()\n * @param value value to provide\n */\nexport function provide<T>(context: Context<T>, value: T): void {\n\tif (!currentFrame) {\n\t\t// lazily create frame, copying from previous\n\t\tconst prev = contextStack[contextStack.length - 1];\n\t\tcurrentFrame = prev ? new Map(prev) : new Map();\n\t}\n\tcurrentFrame.set(context as Context<unknown>, value);\n}\n\n/**\n * returns current provided value, or the default value\n * @param context context key from createContext()\n */\nexport function inject<T>(context: Context<T>): T {\n\t// check current frame first, then stack\n\tconst frame = currentFrame ?? contextStack[contextStack.length - 1];\n\tif (frame?.has(context as Context<unknown>)) {\n\t\treturn frame.get(context as Context<unknown>) as T;\n\t}\n\treturn context.defaultValue;\n}\n\n/** push current frame to stack (called before rendering children) */\nexport function pushContextFrame(): void {\n\tif (currentFrame) {\n\t\tcontextStack.push(currentFrame);\n\t\tcurrentFrame = null;\n\t}\n}\n\n/** pop context frame (called after rendering children) */\nexport function popContextFrame(hadFrame: boolean): void {\n\tif (hadFrame) {\n\t\tcontextStack.pop();\n\t}\n\tcurrentFrame = null;\n}\n","import { Fragment, jsx } from '../jsx-runtime.js';\n\nimport { inject, type Context } from './context.js';\nimport type { JSXElement, JSXNode } from './types.js';\n\nexport interface SuspenseProps {\n\tfallback: JSXNode;\n\tchildren?: JSXNode;\n}\n\n/**\n * suspense boundary - renders fallback while children are suspended\n */\nexport function Suspense({ children }: SuspenseProps): JSXElement {\n\t// Suspense is handled specially in buildSegment, this is just for typing\n\treturn jsx(Fragment, { children });\n}\n\n/** cache for resolved/rejected promise values */\nconst promiseCache = new WeakMap<\n\tPromise<unknown>,\n\t{ resolved: true; value: unknown } | { resolved: false; error: unknown }\n>();\n\nfunction isContext<T>(value: unknown): value is Context<T> {\n\treturn typeof value === 'object' && value !== null && 'defaultValue' in value && 'Provider' in value;\n}\n\n/**\n * reads a context value or suspends until a promise resolves\n * @param usable context or promise\n * @returns context value or resolved promise value\n * @throws promise if not yet resolved, or error if rejected\n */\nexport function use<T>(usable: Context<T>): T;\nexport function use<T>(usable: Promise<T>): T;\nexport function use<T>(usable: Context<T> | Promise<T>): T {\n\t// context\n\tif (isContext<T>(usable)) {\n\t\treturn inject(usable);\n\t}\n\t// promise\n\tconst cached = promiseCache.get(usable);\n\tif (cached) {\n\t\tif (cached.resolved) {\n\t\t\treturn cached.value as T;\n\t\t} else {\n\t\t\tthrow cached.error;\n\t\t}\n\t}\n\t// not cached yet - set up caching and throw\n\tusable.then(\n\t\t(value) => promiseCache.set(usable, { resolved: true, value }),\n\t\t(error) => promiseCache.set(usable, { resolved: false, error }),\n\t);\n\tthrow usable;\n}\n","/**\n * streaming JSX renderer\n *\n * architecture:\n * - segment tree: we build a tree of segments (static text, composites, suspense\n * boundaries) then serialize to HTML\n * - suspense: components can throw promises via use(), caught at Suspense boundaries\n * which render fallback immediately and stream resolved content later\n * - head hoisting: <title>, <meta>, <link>, <style> found outside <head> are\n * collected and injected into <head> during finalization\n */\n\nimport { Fragment } from '../jsx-runtime.ts';\n\nimport { currentFrame, popContextFrame, pushContextFrame } from './context.ts';\nimport { Suspense, type SuspenseProps } from './suspense.ts';\nimport type { Component, JSXElement, JSXNode } from './types.ts';\n\nconst HEAD_ELEMENTS = new Set(['title', 'meta', 'link', 'style']);\nconst SELF_CLOSING_TAGS = new Set([\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr',\n]);\n/** props that shouldn't be rendered as HTML attributes */\nconst FRAMEWORK_PROPS = new Set(['children', 'dangerouslySetInnerHTML']);\n\n// #region Segment types\n\ntype Segment =\n\t| {\n\t\t\treadonly kind: 'static';\n\t\t\treadonly html: string;\n\t }\n\t| {\n\t\t\treadonly kind: 'composite';\n\t\t\treadonly parts: readonly Segment[];\n\t }\n\t| {\n\t\t\treadonly kind: 'suspense';\n\t\t\treadonly id: string;\n\t\t\treadonly fallback: Segment;\n\t\t\tpending?: Promise<void>;\n\t\t\tcontent: Segment | null;\n\t };\n\nfunction staticSeg(html: string): Segment {\n\treturn { kind: 'static', html };\n}\n\nfunction compositeSeg(parts: Segment[]): Segment {\n\treturn { kind: 'composite', parts };\n}\n\nconst EMPTY_SEGMENT = staticSeg('');\n\n// #endregion\n\nexport interface RenderOptions {\n\tonError?: (error: unknown) => void;\n}\n\ninterface RenderContext {\n\theadElements: string[];\n\tidsByPath: Map<string, number>;\n\tinsideHead: boolean;\n\tinsideSvg: boolean;\n\tonError: (error: unknown) => void;\n\tpendingSuspense: Array<{ id: string; promise: Promise<Segment> }>;\n}\n\n/**\n * renders JSX to a readable stream\n * @param node JSX node to render\n * @param options render options\n * @returns readable stream of UTF-8 encoded HTML\n */\nexport function renderToStream(node: JSXNode, options?: RenderOptions): ReadableStream<Uint8Array> {\n\tconst encoder = new TextEncoder();\n\tconst onError = options?.onError ?? ((error) => console.error(error));\n\tconst context: RenderContext = {\n\t\theadElements: [],\n\t\tidsByPath: new Map(),\n\t\tinsideHead: false,\n\t\tinsideSvg: false,\n\t\tonError,\n\t\tpendingSuspense: [],\n\t};\n\treturn new ReadableStream({\n\t\tasync start(controller) {\n\t\t\ttry {\n\t\t\t\tconst root = buildSegment(node, context, '');\n\t\t\t\tawait resolveBlocking(root);\n\t\t\t\tconst html = serializeSegment(root);\n\t\t\t\tconst finalHtml = finalizeHtml(html, context);\n\t\t\t\tcontroller.enqueue(encoder.encode(finalHtml));\n\t\t\t\t// stream pending suspense boundaries as they resolve\n\t\t\t\tif (context.pendingSuspense.length > 0) {\n\t\t\t\t\tawait streamPendingSuspense(context, controller, encoder);\n\t\t\t\t}\n\t\t\t\tcontroller.close();\n\t\t\t} catch (error) {\n\t\t\t\tonError(error);\n\t\t\t\tcontroller.error(error);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * renders JSX to a string (non-streaming)\n * @param node JSX node to render\n * @param options render options\n * @returns promise resolving to HTML string\n */\nexport async function renderToString(node: JSXNode, options?: RenderOptions): Promise<string> {\n\tconst stream = renderToStream(node, options);\n\tconst reader = stream.getReader();\n\tconst decoder = new TextDecoder();\n\tlet html = '';\n\twhile (true) {\n\t\tconst { done, value } = await reader.read();\n\t\tif (done) break;\n\t\thtml += decoder.decode(value);\n\t}\n\treturn html;\n}\n\n/**\n * renders JSX to a streaming Response\n * @param node JSX node to render\n * @param init optional ResponseInit (status, headers, etc.)\n * @returns Response with streaming HTML body\n */\nexport function render(node: JSXNode, init?: ResponseInit): Response {\n\tconst stream = renderToStream(node);\n\n\t// @ts-expect-error: not sure why.\n\tconst headers = new Headers(init?.headers);\n\tif (!headers.has('Content-Type')) {\n\t\theaders.set('Content-Type', 'text/html; charset=utf-8');\n\t}\n\n\treturn new Response(stream, { ...init, headers });\n}\n\n// #region Segment building\n\nfunction isJSXElement(node: unknown): node is JSXElement {\n\treturn typeof node === 'object' && node !== null && 'type' in node && 'props' in node;\n}\n\nfunction isHeadElement(tag: string): boolean {\n\treturn HEAD_ELEMENTS.has(tag);\n}\n\nfunction buildSegment(node: JSXNode, context: RenderContext, path: string): Segment {\n\t// primitives\n\tif (typeof node === 'string' || typeof node === 'number' || typeof node === 'bigint') {\n\t\treturn staticSeg(escapeHtml(node, false));\n\t}\n\tif (node === null || node === undefined || typeof node === 'boolean') {\n\t\treturn EMPTY_SEGMENT;\n\t}\n\t// iterables (arrays, generators, etc.)\n\tif (typeof node === 'object' && Symbol.iterator in node) {\n\t\tconst parts: Segment[] = [];\n\t\tfor (const child of node) {\n\t\t\tparts.push(buildSegment(child, context, path));\n\t\t}\n\t\treturn compositeSeg(parts);\n\t}\n\t// JSX elements\n\tif (isJSXElement(node)) {\n\t\tconst { type, props } = node;\n\t\t// Fragment\n\t\tif (type === Fragment) {\n\t\t\tconst children = (props as { children?: JSXNode }).children;\n\t\t\treturn children != null ? buildSegment(children, context, path) : EMPTY_SEGMENT;\n\t\t}\n\t\t// intrinsic elements (HTML tags)\n\t\tif (typeof type === 'string') {\n\t\t\tconst tag = type;\n\n\t\t\tif (tag === 'head') {\n\t\t\t\treturn buildHeadElementSegment(tag, props as Record<string, unknown>, context, path);\n\t\t\t}\n\n\t\t\tif (!context.insideHead && isHeadElement(tag)) {\n\t\t\t\t// hoist to <head>\n\t\t\t\tconst elementSeg = buildElementSegment(tag, props as Record<string, unknown>, context, path);\n\t\t\t\tcontext.headElements.push(serializeSegment(elementSeg));\n\t\t\t\treturn EMPTY_SEGMENT;\n\t\t\t}\n\n\t\t\treturn buildElementSegment(tag, props as Record<string, unknown>, context, path);\n\t\t}\n\t\t// function components\n\t\tif (typeof type === 'function') {\n\t\t\t// Suspense boundary\n\t\t\tif (type === Suspense) {\n\t\t\t\treturn buildSuspenseSegment(props as unknown as SuspenseProps, context, path);\n\t\t\t}\n\t\t\treturn buildComponentSegment(type, props as Record<string, unknown>, context, path);\n\t\t}\n\t}\n\treturn EMPTY_SEGMENT;\n}\n\n// #endregion\n\n// #region Element building\n\nfunction buildElementSegment(\n\ttag: string,\n\tprops: Record<string, unknown>,\n\tcontext: RenderContext,\n\tpath: string,\n): Segment {\n\tconst currentIsSvg = context.insideSvg || tag === 'svg';\n\tconst attrs = renderAttributes(props);\n\t// self-closing tags\n\tif (SELF_CLOSING_TAGS.has(tag)) {\n\t\treturn staticSeg(`<${tag}${attrs}>`);\n\t}\n\t// dangerouslySetInnerHTML\n\tconst innerHTML = props.dangerouslySetInnerHTML as { __html: string } | undefined;\n\tif (innerHTML) {\n\t\treturn staticSeg(`<${tag}${attrs}>${innerHTML.__html}</${tag}>`);\n\t}\n\t// normal element with children\n\tconst open = staticSeg(`<${tag}${attrs}>`);\n\tconst previousInsideSvg = context.insideSvg;\n\tcontext.insideSvg = tag === 'foreignObject' ? false : currentIsSvg;\n\tconst children =\n\t\tprops.children != null ? buildSegment(props.children as JSXNode, context, path) : EMPTY_SEGMENT;\n\tcontext.insideSvg = previousInsideSvg;\n\tconst close = staticSeg(`</${tag}>`);\n\treturn compositeSeg([open, children, close]);\n}\n\nfunction buildHeadElementSegment(\n\ttag: string,\n\tprops: Record<string, unknown>,\n\tcontext: RenderContext,\n\tpath: string,\n): Segment {\n\tconst attrs = renderAttributes(props);\n\tconst previousInsideHead = context.insideHead;\n\tcontext.insideHead = true;\n\tconst open = staticSeg(`<${tag}${attrs}>`);\n\tconst children =\n\t\tprops.children != null ? buildSegment(props.children as JSXNode, context, path) : EMPTY_SEGMENT;\n\tcontext.insideHead = previousInsideHead;\n\tconst close = staticSeg(`</${tag}>`);\n\treturn compositeSeg([open, children, close]);\n}\n\nfunction renderAttributes(props: Record<string, unknown>): string {\n\tlet attrs = '';\n\tfor (const key in props) {\n\t\tif (FRAMEWORK_PROPS.has(key)) continue;\n\t\tconst value = props[key];\n\t\tif (value === undefined || value === null || value === false) continue;\n\t\tif (typeof value === 'function') continue;\n\t\t// style object -> string\n\t\tif (key === 'style' && typeof value === 'object') {\n\t\t\tconst styleStr = serializeStyle(value as Record<string, string | number>);\n\t\t\tif (styleStr) {\n\t\t\t\tattrs += ` style=\"${escapeHtml(styleStr, true)}\"`;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (value === true) {\n\t\t\tattrs += ` ${key}`;\n\t\t} else {\n\t\t\tattrs += ` ${key}=\"${escapeHtml(value, true)}\"`;\n\t\t}\n\t}\n\treturn attrs;\n}\n\nfunction serializeStyle(style: Record<string, string | number>): string {\n\tconst parts: string[] = [];\n\tfor (const [key, value] of Object.entries(style)) {\n\t\tif (value == null) continue;\n\t\tparts.push(`${key}:${value}`);\n\t}\n\treturn parts.join(';');\n}\n\n// #endregion\n\n// #region Component building\n\nfunction buildComponentSegment(\n\ttype: Component,\n\tprops: Record<string, unknown>,\n\tctx: RenderContext,\n\tpath: string,\n): Segment {\n\t// call component\n\tconst result = type(props);\n\t// if component called provide(), push frame before rendering children\n\tconst hadFrame = currentFrame !== null;\n\tpushContextFrame();\n\ttry {\n\t\treturn buildSegment(result, ctx, path);\n\t} finally {\n\t\tpopContextFrame(hadFrame);\n\t}\n}\n\nfunction buildSuspenseSegment(props: SuspenseProps, ctx: RenderContext, path: string): Segment {\n\t// generate unique id for this suspense boundary\n\tconst nextIndex = (ctx.idsByPath.get(path) ?? 0) + 1;\n\tctx.idsByPath.set(path, nextIndex);\n\tconst id = path ? `${path}-${nextIndex}` : `${nextIndex}`;\n\tconst suspenseId = `s${id}`;\n\n\ttry {\n\t\t// try to render children synchronously\n\t\tconst content = buildSegment(props.children, ctx, suspenseId);\n\t\t// no suspension - return content directly (no boundary needed)\n\t\treturn content;\n\t} catch (thrown) {\n\t\t// check if it's a promise (suspension)\n\t\tif (thrown instanceof Promise) {\n\t\t\t// render fallback\n\t\t\tconst fallback = buildSegment(props.fallback, ctx, suspenseId);\n\n\t\t\t// create suspense segment\n\t\t\tconst seg: Segment = {\n\t\t\t\tkind: 'suspense',\n\t\t\t\tid: suspenseId,\n\t\t\t\tfallback,\n\t\t\t\tcontent: null,\n\t\t\t};\n\n\t\t\t// set up promise to re-render children when resolved\n\t\t\tconst pending = thrown.then(() => {\n\t\t\t\t// re-render children after promise resolves\n\t\t\t\tseg.content = buildSegment(props.children, ctx, suspenseId);\n\t\t\t});\n\t\t\tseg.pending = pending;\n\n\t\t\t// track for streaming\n\t\t\tctx.pendingSuspense.push({\n\t\t\t\tid: suspenseId,\n\t\t\t\tpromise: pending.then(() => seg.content!),\n\t\t\t});\n\n\t\t\treturn seg;\n\t\t}\n\t\t// not a promise - re-throw\n\t\tthrow thrown;\n\t}\n}\n\n// #endregion\n\n// #region Serialization\n\n/** resolve all blocking suspense boundaries */\nasync function resolveBlocking(segment: Segment): Promise<void> {\n\tif (segment.kind === 'suspense') {\n\t\tif (segment.pending) {\n\t\t\tawait segment.pending;\n\t\t\tsegment.pending = undefined;\n\t\t}\n\t\tif (segment.content) {\n\t\t\tawait resolveBlocking(segment.content);\n\t\t}\n\t\treturn;\n\t}\n\tif (segment.kind === 'composite') {\n\t\tfor (const part of segment.parts) {\n\t\t\tawait resolveBlocking(part);\n\t\t}\n\t}\n}\n\n/** serialize segment tree to HTML string */\nfunction serializeSegment(seg: Segment): string {\n\tif (seg.kind === 'static') {\n\t\treturn seg.html;\n\t}\n\tif (seg.kind === 'composite') {\n\t\treturn seg.parts.map(serializeSegment).join('');\n\t}\n\t// suspense - always render fallback; resolved content streams in template\n\treturn `<!--$s:${seg.id}-->${serializeSegment(seg.fallback)}<!--/$s:${seg.id}-->`;\n}\n\n// #endregion\n\n// #region Streaming\n\n/** suspense runtime function name */\nconst SR = '$sr';\n/** suspense runtime - injected once, swaps template content with fallback */\nconst SUSPENSE_RUNTIME = `<script>${SR}=(t,i,s,e)=>{i=\"$s:\"+t.dataset.suspense;s=document.createTreeWalker(document,128);while(e=s.nextNode())if(e.data===i){while(e.nextSibling?.data!==\"/\"+i)e.nextSibling.remove();e.nextSibling.replaceWith(...t.content.childNodes);e.remove();break}t.remove()}</script>`;\n\nasync function streamPendingSuspense(\n\tcontext: RenderContext,\n\tcontroller: ReadableStreamDefaultController<Uint8Array>,\n\tencoder: TextEncoder,\n): Promise<void> {\n\tlet runtimeInjected = false;\n\tconst processed = new Set<string>();\n\twhile (true) {\n\t\tconst batch = context.pendingSuspense.filter(({ id }) => !processed.has(id));\n\t\tif (batch.length === 0) break;\n\t\tawait Promise.all(\n\t\t\tbatch.map(async ({ id, promise }) => {\n\t\t\t\tprocessed.add(id);\n\t\t\t\ttry {\n\t\t\t\t\tconst resolvedSegment = await promise;\n\t\t\t\t\tawait resolveBlocking(resolvedSegment);\n\t\t\t\t\tconst html = serializeSegment(resolvedSegment);\n\t\t\t\t\t// inject runtime once before first resolution\n\t\t\t\t\tconst runtime = runtimeInjected ? '' : SUSPENSE_RUNTIME;\n\t\t\t\t\truntimeInjected = true;\n\t\t\t\t\t// stream template + call to swap function\n\t\t\t\t\tcontroller.enqueue(\n\t\t\t\t\t\tencoder.encode(\n\t\t\t\t\t\t\t`${runtime}<template data-suspense=\"${id}\">${html}</template>` +\n\t\t\t\t\t\t\t\t`<script>${SR}(document.currentScript.previousElementSibling)</script>`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontext.onError(error);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t}\n}\n\n// #endregion\n\n// #region Utilities\n\nconst ATTR_REGEX = /[&\"]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\nfunction escapeHtml(value: unknown, isAttr: boolean): string {\n\tconst str = String(value ?? '');\n\tconst pattern = isAttr ? ATTR_REGEX : CONTENT_REGEX;\n\tpattern.lastIndex = 0;\n\n\tlet escaped = '';\n\tlet last = 0;\n\n\twhile (pattern.test(str)) {\n\t\tconst i = pattern.lastIndex - 1;\n\t\tconst ch = str[i];\n\t\tescaped += str.substring(last, i) + (ch === '&' ? '&amp;' : ch === '\"' ? '&quot;' : '&lt;');\n\t\tlast = i + 1;\n\t}\n\n\treturn escaped + str.substring(last);\n}\n\nfunction finalizeHtml(html: string, context: RenderContext): string {\n\tconst hasHtmlRoot = html.trimStart().toLowerCase().startsWith('<html');\n\t// inject hoisted head elements\n\tif (context.headElements.length > 0) {\n\t\tconst headContent = context.headElements.join('');\n\t\tif (hasHtmlRoot) {\n\t\t\tconst headCloseIndex = html.indexOf('</head>');\n\t\t\tif (headCloseIndex !== -1) {\n\t\t\t\t// inject before existing </head>\n\t\t\t\thtml = html.slice(0, headCloseIndex) + headContent + html.slice(headCloseIndex);\n\t\t\t} else {\n\t\t\t\t// no existing head, inject after <html>\n\t\t\t\tconst htmlOpenMatch = html.match(/<html[^>]*>/);\n\t\t\t\tif (htmlOpenMatch && htmlOpenMatch.index !== undefined) {\n\t\t\t\t\tconst insertIndex = htmlOpenMatch.index + htmlOpenMatch[0].length;\n\t\t\t\t\thtml = html.slice(0, insertIndex) + `<head>${headContent}</head>` + html.slice(insertIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// no HTML root, prepend head\n\t\t\thtml = `<head>${headContent}</head>${html}`;\n\t\t}\n\t}\n\tif (hasHtmlRoot) {\n\t\thtml = '<!doctype html>' + html;\n\t}\n\treturn html;\n}\n\n// #endregion\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-runtime-BQHdv_66.d.mts","names":[],"sources":["../src/lib/types.ts","../src/lib/intrinsic-elements.ts","../src/jsx-runtime.ts"],"sourcesContent":[],"mappings":"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;gBACO;UACN;QACF;YACI;YACA;aACC;YACD;UACF;UACA;SACD;cACK;UACJ;cACI;QACN;SACC;aACI;SACJ;YACG;SACH;QACD;QACA;QACA;WACG;cACG;gBACE;YACJ;YACA;UACF;QACF;QACA;QACA;QACA;QACA;QACA;UACE;YACE;YACA;QACJ;UACE;OACH;YACK;SACH;WACE;SACF;SACA;YACG;WACD;YACC;QACJ;UACE;UACA;SACD;UACC;UACA;cACI;UACJ;WACC;SACF;aACI;cACC;YACF;QACJ;cACM;YACF;YACA;OACL;WACI;aACE;SACJ;cACK;OACP;QACC;QACA;UACE;OACH;UACG;YACE;UACF;YACE;aACC;YACD;WACD;YACC;UACF;YACE;WACD;SACF;aACI;SACJ;WACE;cACG;WACH;QACH;cACM;WACH;QACH;WACG;UACD;WACC;QACH;WACG;OACJ;QACC;SACC;WACE;SACF;aACI;SAGJ;aAEI;mBACM;sBACG;YACV;cACE;UACJ;UACA;aACG;aACA;mBACM;yBACM;iBACR;sBACK;uBACC;uBACA;oBACH;kBACF;aACL;aACA;aACA;aACA;aACA;oBACO;aACP;aACA;iBACI;kBACC;cACJ;kBACI;wBACM;iBACP;YACL;kBACM;YACN;mBACO;OACZ;WACI;UACD;oBACU;YACR;UACF;cACI;WACH;UACD;aACG;aACA;cACC;oBACM;UACV;SACD;UACC;YACE;YACA;UACF;cACI;WACH;SACF;UACC;;;;;;;AD9iDR;AAGA;AAWA;;AAAsF,iBEbtE,GFasE,CAAA,CAAA,EAAA,UAAA,MAAA,GEb5C,SFa4C,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,EEbtB,CFasB,EAAA,KAAA,EEbZ,CFaY,CAAA,EEbR,UFaQ,CEbG,CFaH,EEbM,CFaN,CAAA;;;;AAatF;;;AAA2F,cEhB9E,IFgB8E,EAAA,OEhB1E,GFgB0E;;;;;AC9BrC;AAMvC;AAOL,cCSG,MDTU,EAAA,OCSJ,GDRP;AA6HK,iBCnHD,QAAA,CDmHuB,KAAI,EAAA;EAYjC,QAAA,CAAA,EC/HmC,OD+HrB;CAIP,CAAA,ECnIwC,ODmIxC"}
1
+ {"version":3,"file":"jsx-runtime-BQHdv_66.d.mts","names":[],"sources":["../src/lib/types.ts","../src/lib/intrinsic-elements.ts","../src/jsx-runtime.ts"],"sourcesContent":[],"mappings":"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;gBACO;UACN;QACF;YACI;YACA;aACC;YACD;UACF;UACA;SACD;cACK;UACJ;cACI;QACN;SACC;aACI;SACJ;YACG;SACH;QACD;QACA;QACA;WACG;cACG;gBACE;YACJ;YACA;UACF;QACF;QACA;QACA;QACA;QACA;QACA;UACE;YACE;YACA;QACJ;UACE;OACH;YACK;SACH;WACE;SACF;SACA;YACG;WACD;YACC;QACJ;UACE;UACA;SACD;UACC;UACA;cACI;UACJ;WACC;SACF;aACI;cACC;YACF;QACJ;cACM;YACF;YACA;OACL;WACI;aACE;SACJ;cACK;OACP;QACC;QACA;UACE;OACH;UACG;YACE;UACF;YACE;aACC;YACD;WACD;YACC;UACF;YACE;WACD;SACF;aACI;SACJ;WACE;cACG;WACH;QACH;cACM;WACH;QACH;WACG;UACD;WACC;QACH;WACG;OACJ;QACC;SACC;WACE;SACF;aACI;SAGJ;aAEI;mBACM;sBACG;YACV;cACE;UACJ;UACA;aACG;aACA;mBACM;yBACM;iBACR;sBACK;uBACC;uBACA;oBACH;kBACF;aACL;aACA;aACA;aACA;aACA;oBACO;aACP;aACA;iBACI;kBACC;cACJ;kBACI;wBACM;iBACP;YACL;kBACM;YACN;mBACO;OACZ;WACI;UACD;oBACU;YACR;UACF;cACI;WACH;UACD;aACG;aACA;cACC;oBACM;UACV;SACD;UACC;YACE;YACA;UACF;cACI;WACH;SACF;UACC;;;;;;;AD9iDR;AAGA;AAWA;;AAAsF,iBEbtE,GFasE,CAAA,CAAA,EAAA,UAAA,MAAA,GEb5C,SFa4C,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,EEbtB,CFasB,EAAA,KAAA,EEbZ,CFaY,CAAA,EEbR,UFaQ,CEbG,CFaH,EEbM,CFaN,CAAA;;;;AAatF;;;AAA2F,cEhB9E,IFgB8E,EAAA,OEhB1E,GFgB0E;;;;;AC9BrC;AAMvC;AAOL,cCSG,MDTU,EAAA,OCSJ,GDRP;AA6HK,iBCnHD,QAAA,CDmHuB,KAAI,EAAA;EAYjC,QAAA,CAAA,EC/HmC,OD+HrB;CAIP,CAAA,ECnIwC,ODmIxC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oomfware/jsx",
4
- "version": "0.1.1",
4
+ "version": "0.1.2",
5
5
  "description": "server-side JSX renderer",
6
6
  "license": "0BSD",
7
7
  "repository": {
package/src/index.ts CHANGED
@@ -2,6 +2,8 @@ export type { Component, FC, JSXElement, JSXNode } from './lib/types.js';
2
2
 
3
3
  export { Fragment, jsx, jsxDEV, jsxs } from './jsx-runtime.js';
4
4
 
5
+ export { cloneElement, createElement, createElement as h } from './lib/create-element.js';
6
+
5
7
  export { createContext, type Context } from './lib/context.js';
6
8
 
7
9
  export { Suspense, use, type SuspenseProps } from './lib/suspense.js';
@@ -0,0 +1,198 @@
1
+ import { describe, expect, expectTypeOf, it } from 'bun:test';
2
+
3
+ import type { JSX } from './intrinsic-elements.ts';
4
+ import { Fragment } from '../jsx-runtime.ts';
5
+ import { cloneElement, createElement } from './create-element.ts';
6
+ import type { Component, JSXElement, JSXNode } from './types.ts';
7
+
8
+ describe('createElement', () => {
9
+ describe('intrinsic elements', () => {
10
+ it('creates a div element', () => {
11
+ const el = createElement('div', { class: 'test' });
12
+ expect(el.type).toBe('div');
13
+ expect(el.props).toEqual({ class: 'test' });
14
+ });
15
+
16
+ it('creates an element with children as rest params', () => {
17
+ const el = createElement('div', null, 'hello', 'world');
18
+ expect(el.type).toBe('div');
19
+ expect(el.props).toEqual({ children: ['hello', 'world'] });
20
+ });
21
+
22
+ it('creates an element with single child', () => {
23
+ const el = createElement('span', { id: 'foo' }, 'text');
24
+ expect(el.type).toBe('span');
25
+ expect(el.props).toEqual({ id: 'foo', children: 'text' });
26
+ });
27
+
28
+ it('creates an element with no props or children', () => {
29
+ const el = createElement('br');
30
+ expect(el.type).toBe('br');
31
+ expect(el.props).toEqual({});
32
+ });
33
+
34
+ it('creates an element with null props', () => {
35
+ const el = createElement('hr', null);
36
+ expect(el.type).toBe('hr');
37
+ expect(el.props).toEqual({});
38
+ });
39
+
40
+ it('creates nested elements', () => {
41
+ const child = createElement('span', null, 'inner');
42
+ const parent = createElement('div', null, child);
43
+ expect(parent.type).toBe('div');
44
+ expect(parent.props.children).toEqual(child);
45
+ });
46
+ });
47
+
48
+ describe('function components', () => {
49
+ it('creates an element with a function component', () => {
50
+ const MyComponent: Component<{ name: string }> = (props) => createElement('div', null, props.name);
51
+ const el = createElement(MyComponent, { name: 'test' });
52
+ expect(el.type).toBe(MyComponent);
53
+ expect(el.props).toEqual({ name: 'test' });
54
+ });
55
+
56
+ it('creates an element with component and children', () => {
57
+ const Wrapper: Component<{ children?: JSXNode }> = (props) => createElement('div', null, props.children);
58
+ const el = createElement(Wrapper, null, 'child content');
59
+ expect(el.type).toBe(Wrapper);
60
+ expect(el.props).toEqual({ children: 'child content' });
61
+ });
62
+ });
63
+
64
+ describe('Fragment', () => {
65
+ it('creates a Fragment element', () => {
66
+ const el = createElement(Fragment, null, 'a', 'b', 'c');
67
+ expect(el.type).toBe(Fragment);
68
+ expect(el.props).toEqual({ children: ['a', 'b', 'c'] });
69
+ });
70
+ });
71
+
72
+ describe('types', () => {
73
+ it('infers correct types for intrinsic elements', () => {
74
+ const div = createElement('div', { class: 'test' });
75
+ expectTypeOf(div).toExtend<JSXElement>();
76
+
77
+ const input = createElement('input', { type: 'text', value: 'hello' });
78
+ expectTypeOf(input).toExtend<JSXElement>();
79
+ });
80
+
81
+ it('infers correct types for function components', () => {
82
+ const MyComponent: Component<{ name: string }> = () => null;
83
+ const el = createElement(MyComponent, { name: 'test' });
84
+ expectTypeOf(el).toExtend<JSXElement>();
85
+ });
86
+
87
+ it('checks prop types for intrinsic elements', () => {
88
+ // href should not be assignable to div props
89
+ expectTypeOf<{ href: string }>().not.toExtend<JSX.IntrinsicElements['div']>();
90
+
91
+ // href should be assignable to anchor props
92
+ expectTypeOf<{ href: string }>().toExtend<JSX.IntrinsicElements['a']>();
93
+
94
+ // type should be assignable to input props
95
+ expectTypeOf<{ type: string }>().toExtend<JSX.IntrinsicElements['input']>();
96
+ });
97
+
98
+ it('checks prop types for function components', () => {
99
+ type Props = { name: string; count: number };
100
+
101
+ // correct props should be assignable
102
+ expectTypeOf<{ name: string; count: number }>().toExtend<Props>();
103
+
104
+ // missing required prop should not be assignable
105
+ expectTypeOf<{ name: string }>().not.toExtend<Props>();
106
+
107
+ // wrong type should not be assignable
108
+ expectTypeOf<{ name: number; count: number }>().not.toExtend<Props>();
109
+
110
+ // extra props are allowed by structural typing
111
+ expectTypeOf<{ name: string; count: number; extra: boolean }>().toExtend<Props>();
112
+ });
113
+
114
+ it('checks partial props for component cloning', () => {
115
+ type Props = { name: string; count: number };
116
+
117
+ // partial allows missing props
118
+ expectTypeOf<{ name: string }>().toExtend<Partial<Props>>();
119
+ expectTypeOf<{ count: number }>().toExtend<Partial<Props>>();
120
+ expectTypeOf<{}>().toExtend<Partial<Props>>();
121
+
122
+ // wrong type still not assignable
123
+ expectTypeOf<{ name: number }>().not.toExtend<Partial<Props>>();
124
+ });
125
+ });
126
+ });
127
+
128
+ describe('cloneElement', () => {
129
+ describe('intrinsic elements', () => {
130
+ it('clones an element with new props', () => {
131
+ const original = createElement('div', { class: 'original', id: 'test' });
132
+ const cloned = cloneElement(original, { class: 'cloned' });
133
+ expect(cloned.type).toBe('div');
134
+ expect(cloned.props).toEqual({ class: 'cloned', id: 'test' });
135
+ });
136
+
137
+ it('clones an element with new children', () => {
138
+ const original = createElement('div', { class: 'test' }, 'original child');
139
+ const cloned = cloneElement(original, null, 'new child');
140
+ expect(cloned.type).toBe('div');
141
+ expect(cloned.props).toEqual({ class: 'test', children: 'new child' });
142
+ });
143
+
144
+ it('clones an element with multiple new children', () => {
145
+ const original = createElement('div', null, 'original');
146
+ const cloned = cloneElement(original, null, 'a', 'b', 'c');
147
+ expect(cloned.props).toEqual({ children: ['a', 'b', 'c'] });
148
+ });
149
+
150
+ it('clones an element preserving original children when none provided', () => {
151
+ const original = createElement('div', null, 'keep me');
152
+ const cloned = cloneElement(original, { class: 'added' });
153
+ expect(cloned.props).toEqual({ class: 'added', children: 'keep me' });
154
+ });
155
+
156
+ it('clones with null props preserves original', () => {
157
+ const original = createElement('div', { class: 'test' });
158
+ const cloned = cloneElement(original, null);
159
+ expect(cloned.props).toEqual({ class: 'test' });
160
+ });
161
+ });
162
+
163
+ describe('function components', () => {
164
+ it('clones a function component element with new props', () => {
165
+ const MyComponent: Component<{ name: string; title?: string }> = () => null;
166
+ const original = createElement(MyComponent, { name: 'alice', title: 'Dr.' });
167
+ const cloned = cloneElement(original, { name: 'bob' });
168
+ expect(cloned.type).toBe(MyComponent);
169
+ expect(cloned.props).toEqual({ name: 'bob', title: 'Dr.' });
170
+ });
171
+ });
172
+
173
+ describe('types', () => {
174
+ it('cloned element matches JSXElement', () => {
175
+ const div = createElement('div', { class: 'test' });
176
+ const cloned = cloneElement(div, { id: 'cloned' });
177
+ expectTypeOf(cloned).toExtend<JSXElement>();
178
+ });
179
+
180
+ it('accepts partial props for cloning', () => {
181
+ const MyComponent: Component<{ name: string; age: number }> = () => null;
182
+ const original = createElement(MyComponent, { name: 'test', age: 25 });
183
+ const cloned = cloneElement(original, { name: 'updated' });
184
+ expectTypeOf(cloned).toExtend<JSXElement>();
185
+ });
186
+
187
+ it('checks prop types when cloning intrinsic elements', () => {
188
+ // href should not be assignable to div props
189
+ expectTypeOf<{ href: string }>().not.toExtend<Partial<JSX.IntrinsicElements['div']>>();
190
+
191
+ // class should be assignable to div props
192
+ expectTypeOf<{ class: string }>().toExtend<Partial<JSX.IntrinsicElements['div']>>();
193
+
194
+ // href should be assignable to anchor props
195
+ expectTypeOf<{ href: string }>().toExtend<Partial<JSX.IntrinsicElements['a']>>();
196
+ });
197
+ });
198
+ });
@@ -0,0 +1,120 @@
1
+ import type { JSX } from './intrinsic-elements.ts';
2
+ import type { Component, JSXElement, JSXNode } from './types.ts';
3
+
4
+ // #region createElement
5
+
6
+ /**
7
+ * creates a JSX element for an intrinsic element
8
+ * @param type element tag name
9
+ * @param props element properties
10
+ * @param children child elements
11
+ * @returns JSX element
12
+ */
13
+ export function createElement<T extends keyof JSX.IntrinsicElements>(
14
+ type: T,
15
+ props?: JSX.IntrinsicElements[T] | null,
16
+ ...children: JSXNode[]
17
+ ): JSXElement<JSX.IntrinsicElements[T], T>;
18
+
19
+ /**
20
+ * creates a JSX element for a function component
21
+ * @param type component function
22
+ * @param props component properties
23
+ * @param children child elements
24
+ * @returns JSX element
25
+ */
26
+ export function createElement<P extends {}>(
27
+ type: Component<P>,
28
+ props?: P | null,
29
+ ...children: JSXNode[]
30
+ ): JSXElement<P, Component<P>>;
31
+
32
+ /**
33
+ * creates a JSX element (classic API)
34
+ * @param type element tag name or component function
35
+ * @param props element properties
36
+ * @param children child elements
37
+ * @returns JSX element
38
+ */
39
+ export function createElement<P extends {}>(
40
+ type: string | Component<P>,
41
+ props?: P | null,
42
+ ...children: JSXNode[]
43
+ ): JSXElement<P>;
44
+
45
+ export function createElement(
46
+ type: string | Component<any>,
47
+ props?: Record<string, unknown> | null,
48
+ ...children: JSXNode[]
49
+ ): JSXElement {
50
+ const finalProps: Record<string, unknown> = { ...props };
51
+
52
+ if (children.length === 1) {
53
+ finalProps.children = children[0];
54
+ } else if (children.length > 1) {
55
+ finalProps.children = children;
56
+ }
57
+
58
+ return { type, props: finalProps };
59
+ }
60
+
61
+ // #endregion
62
+
63
+ // #region cloneElement
64
+
65
+ /**
66
+ * clones a JSX element for an intrinsic element with new props
67
+ * @param element element to clone
68
+ * @param props props to merge (overrides original)
69
+ * @param children children to replace (if provided)
70
+ * @returns cloned JSX element
71
+ */
72
+ export function cloneElement<T extends keyof JSX.IntrinsicElements>(
73
+ element: JSXElement<JSX.IntrinsicElements[T], T>,
74
+ props?: Partial<JSX.IntrinsicElements[T]> | null,
75
+ ...children: JSXNode[]
76
+ ): JSXElement<JSX.IntrinsicElements[T], T>;
77
+
78
+ /**
79
+ * clones a JSX element for a function component with new props
80
+ * @param element element to clone
81
+ * @param props props to merge (overrides original)
82
+ * @param children children to replace (if provided)
83
+ * @returns cloned JSX element
84
+ */
85
+ export function cloneElement<P extends {}>(
86
+ element: JSXElement<P, Component<P>>,
87
+ props?: Partial<P> | null,
88
+ ...children: JSXNode[]
89
+ ): JSXElement<P, Component<P>>;
90
+
91
+ /**
92
+ * clones a JSX element with new props
93
+ * @param element element to clone
94
+ * @param props props to merge (overrides original)
95
+ * @param children children to replace (if provided)
96
+ * @returns cloned JSX element
97
+ */
98
+ export function cloneElement<P extends {}>(
99
+ element: JSXElement<P>,
100
+ props?: Partial<P> | null,
101
+ ...children: JSXNode[]
102
+ ): JSXElement<P>;
103
+
104
+ export function cloneElement(
105
+ element: JSXElement,
106
+ props?: Record<string, unknown> | null,
107
+ ...children: JSXNode[]
108
+ ): JSXElement {
109
+ const finalProps: Record<string, unknown> = { ...(element.props as Record<string, unknown>), ...props };
110
+
111
+ if (children.length === 1) {
112
+ finalProps.children = children[0];
113
+ } else if (children.length > 1) {
114
+ finalProps.children = children;
115
+ }
116
+
117
+ return { type: element.type, props: finalProps };
118
+ }
119
+
120
+ // #endregion