{"version":3,"file":"core-render-ChskZFKL.cjs","sources":["../lib/symbols/index.ts","../lib/core/global/global.ts","../lib/core/html/html.ts","../lib/core/dom-render/component-context/component-context.ts","../lib/core/dom-render/component-context/hooks/on-disconnect.ts","../lib/core/dom-render/component-context/hooks/on-connect.ts","../lib/core/global/global-hook-executioner.ts","../lib/core/dom-render/attach-property.ts","../lib/core/dom-render/render/element-render.ts","../lib/common/key-builder/key-builder.ts","../lib/core/dom-render/render/text-render.ts","../lib/core/dom-render/render/children-render.ts","../lib/core/dom-render/render/signal-render.ts","../lib/core/dom-render/component-context/hooks/on-create.ts","../lib/core/dom-render/render/component-render.ts","../lib/common/group-by.ts","../lib/core/ssr/parse-html.ts","../lib/core/ssr/append-query-params.ts","../lib/core/ssr/insert-path-params.ts","../lib/core/ssr/fetch-html.ts","../lib/core/ssr/ssr.ts","../lib/core/control-flow/fragment-extraction.ts","../lib/common/is-promise.ts","../lib/core/control-flow/await/index.ts","../lib/core/control-flow/for/index.ts","../lib/core/control-flow/if/index.ts","../lib/core/control-flow/switch-case/index.ts","../lib/core/dom-render/render/control-flow-render.ts","../lib/core/dom-render/render/raw-render.ts","../lib/core/dom-render/render/core-render.ts"],"sourcesContent":["export const SigSymbol = Symbol('[SIG]');\nexport const RenderedRootSymbol = Symbol('[RR]');\nexport const ElementKeySymbol =  Symbol('[ELEMENT_KEY]');\n\nexport const ForControlFlow = Symbol('ForControlFlow');\nexport const IfControlFlow = Symbol('IfControlFlow');\nexport const AwaitControlFlow = Symbol('AwaitControlFlow');\nexport const SSRSymbol = Symbol('SSR');\n","\nimport { RenderedRootSymbol, SigSymbol } from '@/symbols';\nimport type { RootElementWithMetadata } from '../dom-render/create-root';\nimport { SigGlobal } from './global.types';\n\n\n\nfunction getRenderedRoot() {\n    const rootId = getGlobal()[RenderedRootSymbol].rootId;\n    if(!rootId) {\n        throw new Error('Out of a root context');\n    }\n    return getGlobal().roots?.[rootId];\n}\n\nfunction setRenderedRoot(rootId: string) {\n    if(getGlobal().roots?.[rootId]) {\n        return getGlobal()[RenderedRootSymbol].rootId = rootId;\n    } \n}\n\nfunction addRoot(root: RootElementWithMetadata) {\n    getGlobal().roots[root.id] = root;\n}\n\nfunction createSig(): SigGlobal {\n    return Object.freeze({\n        signals: {},\n        roots: {},\n        [RenderedRootSymbol]: {}\n    });\n}\n\nfunction getGlobal(): SigGlobal {\n    if(!window[SigSymbol]) {\n        addGlobal();\n    }\n    return  window[SigSymbol];\n}\n\nfunction addGlobal() {\n    if(typeof window == 'undefined') {\n        return;\n    }\n    if(!window[SigSymbol]) {\n        window[SigSymbol] = createSig();\n    }\n}\naddGlobal();\n\n\nexport {\n    getGlobal,\n    getRenderedRoot,\n    setRenderedRoot,\n    addRoot\n};\n","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { ElementKeySymbol } from \"@/symbols\";\nimport logger from \"@/common/logger/logger\";\n\nexport const DOM = {\n\n    replaceWith(dom: HTMLElement | Text, newNode: Node) {\n        dom.replaceWith(newNode);\n    },\n\n    getAllElementsBetween(start: Node, end: Node): Node[] {\n        if (start.parentNode !== end.parentNode) {\n            logger.warn(\"Start and end nodes must have the same parent.\");\n            return [];\n        }\n        const elements: Node[] = [];\n        let current = start.nextSibling;\n        while (current && current !== end) {\n            elements.push(current);\n            current = current.nextSibling;\n        }\n        return elements;\n    },\n\n    removeElementsBetween(start: Node, end: Node) {\n        let current = start.nextSibling;\n        while (current && current !== end) {\n            const next = current.nextSibling;\n            current.remove();\n            current = next;\n        }\n    },\n\n\n    getChildNodes(dom: HTMLElement): ChildNode[] {\n        return Array.from(dom.childNodes);\n    },\n\n    createElement(tagName: string, key: KeyBuilder, options?: ElementCreationOptions): HTMLElement {\n        const element = document.createElement(tagName, options);\n        element[ElementKeySymbol] = key.toString();\n        return element;\n    },\n\n    createComment(comment: string): Comment {\n        return document.createComment(comment);\n    },\n\n    appendChild(parent: HTMLElement, child?: Node | Node[]): void {\n        try {\n            if(child === null || child === undefined) {\n                return;\n            }\n            if (parent === null || parent === undefined) {\n                logger.error('Parent is null or undefined');\n                return;\n            }\n            if (parent === child) {\n                logger.error('Parent is the same as child');\n                return;\n            }\n            if (parent instanceof Text) {\n                logger.error('Parent is a text node');\n                return;\n            }\n            try {\n                if (!Array.isArray(child)) {\n                    if (child.parentElement !== parent) {\n                        parent.appendChild(child);\n                    }\n                } else {\n                    parent.append(...child);\n                }\n            } catch (error) {\n                logger.log(error);\n    \n            }            \n        } catch (error) {\n            console.error(error);\n        }\n    },\n\n    insertBefore(referenceNode: ChildNode, newNode: (ChildNode | ChildNode[])) {\n        if (Array.isArray(newNode)) {\n            referenceNode.before(...newNode);\n        }\n        else {\n            referenceNode.before(newNode);\n        }\n    },\n\n    classListRemove(dom: HTMLElement, value: string | string[]) {\n        let values: string[] = typeof value === 'string' ? \n            value.trim().split(/\\s+/) : value;\n        values = values\n            .map(v => v.trim())            \n            .filter(v => v.length > 0);\n        if (values.length === 0) {\n            return;\n        }\n        dom.classList.remove(...values);\n    },\n\n    classListAdd(dom: HTMLElement, value: string | string[]) {\n        let values: string[] = typeof value === 'string' ? \n            value.trim().split(/\\s+/) : value;  \n        values = values\n            .map(v => v.trim())\n            .filter(v => v.length > 0);\n        if (values.length === 0) {\n            return;\n        }\n        dom.classList.add(...values);\n    },\n\n    removeAllChildren(dom: HTMLElement) {\n        while (dom.lastChild) {\n            dom.lastChild.remove();\n        }\n    }\n}","import type { RootElementWithMetadata } from \"../create-root\";\nimport type { OnConnectHook } from \"./hooks/on-connect\";\nimport type { OnDisconnectHook } from \"./hooks/on-disconnect\";\nimport type { OnCreateHook } from \"./hooks/on-create\";\n\nexport interface ComponentContext {\n    hooks: {\n        create: OnCreateHook[];\n        connect: OnConnectHook[];\n        disconnect: OnDisconnectHook[];\n    },\n    key: string;\n    container: Element | null;\n    element?: Element; \n    elementKey?: string; // @TODO remove\n    root: RootElementWithMetadata;\n    component: (...args: unknown[]) => unknown;\n}\n\nexport function createComponentContext(\n    component: (...args: unknown[]) => unknown,\n    container: Element | null, \n    root: RootElementWithMetadata,\n    key: string,\n): ComponentContext {\n    return {\n        hooks: {\n            create: [],\n            connect: [],\n            disconnect: [],\n        },\n        key,\n        root,\n        container,\n        component\n    }\n}\n\nconst activeContextStack: ComponentContext[] = [];\n\nexport function getActiveContext() {\n    return activeContextStack[activeContextStack.length - 1];\n}\n\nexport function setActiveContext(context: ComponentContext) {\n    activeContextStack.push(context);\n}\n\nexport function removeActiveContext() {\n    activeContextStack.pop();\n}\n\n\n\nconst contextMap = new Map<string, ComponentContext>();\n\nexport function getComponentContext(key: string) {\n  return contextMap.get(key);\n}\n\nexport function addComponentContext(key: string, context: ComponentContext) {\n  contextMap.set(key, context);\n}\n\nexport function getAllSubContexts(key: string): ComponentContext[] {\n    const contextEntries = Array.from(contextMap.entries());\n    const subContextEntries = contextEntries.filter(([contextKey]) => contextKey.startsWith(key));\n    const sortedSubContexts = subContextEntries.sort(([keyA], [keyB]) => keyA < keyB ? -1 : 1);\n    return sortedSubContexts.map(([_, context]) => context);\n}\n\n","import logger from \"@/common/logger/logger\";\nimport { getActiveContext } from \"../component-context\";\nimport type { ComponentContext } from \"../component-context\";\n\nexport interface OnDisconnectHook {\n    (ctx: ComponentContext): void\n}\n\nexport function onDisconnect(cb: OnDisconnectHook)  {\n    const context = getActiveContext();\n    if(!context) {\n        throw new Error('No active context');\n    }\n    context.hooks.disconnect.push(cb);\n}\n\nexport function runOnDisconnectHooks(context: ComponentContext) {\n    context.hooks.disconnect.forEach(cb => {\n        try {\n            cb(context);\n        } catch (error) {\n            logger.error(error);\n        }\n    });\n}","import logger from \"@/common/logger/logger\";\nimport { getActiveContext } from \"../component-context\";\nimport type { ComponentContext } from \"../component-context\";\n\nexport interface OnConnectHook {\n    (ctx: ComponentContext): void\n}\n\nexport function onConnect(cb: OnConnectHook)  {\n    const context = getActiveContext();\n    if(!context) {\n        throw new Error('No active context');\n    }\n    context.hooks.connect.push(cb);\n}\n\nexport function runOnConnectHooks(context: ComponentContext) {\n    context.hooks.connect.forEach(cb => {\n        try {\n            cb(context);\n        } catch (error) { \n            logger.error(error);\n        }\n    });\n}\n","\nimport { isSignal } from \"../signal/signal.utils\";\nimport type { Signal } from \"../signal/signal.types\";\nimport { getAllSubContexts } from \"../dom-render/component-context/component-context\";\nimport { runOnDisconnectHooks } from \"../dom-render/component-context/hooks/on-disconnect\";\nimport { ElementKeySymbol } from \"@/symbols\";\nimport { runOnConnectHooks } from \"../dom-render/component-context/hooks/on-connect\";\nimport logger from \"@/common/logger/logger\";\n\nconst globalSubscribersMap = new Map<Node, {\n    signals: Signal[],\n    subscriptions: (()=>void)[]\n}>();\n\nexport function registerSignalSubscription(node: Node, signalOrSub: Signal | (()=>void)) {\n    const sub = globalSubscribersMap.get(node) || {\n        signals: [],\n        subscriptions: []\n    };\n    isSignal(signalOrSub) ?\n      sub.signals.push(signalOrSub) :\n      sub.subscriptions.push(signalOrSub);\n\n    globalSubscribersMap.set(node, sub);\n}\n\nfunction createHookExecutioner() {\n    const hookExecutioner = {\n        observer: new MutationObserver((mutations) => {\n            mutations.forEach((mutation) => {\n                mutation.addedNodes.forEach((node) => {\n                    const elementKey = node[ElementKeySymbol];\n                    logger.log('createHookExecutioner ', elementKey, node.nodeName);\n\n                    if(elementKey) {\n                        const contexts = getAllSubContexts(elementKey);\n                        contexts.forEach(context => {\n                            logger.log(context.elementKey, 'Element was added to the DOM');\n                            if (context) {\n                                runOnConnectHooks(context);\n                            }\n                            const element = context.element;\n                            const subEntry = element && globalSubscribersMap.get(element)\n                            if (subEntry) {\n                                subEntry.signals.forEach(signal => {\n                                    signal.exitStaleMode();\n                                });\n                            }\n                        });\n                    }\n\n                });                \n                mutation.removedNodes.forEach((node) => {\n                    const elementKey = node[ElementKeySymbol];\n                    if(elementKey) {\n                        const contexts = getAllSubContexts(elementKey);\n                        contexts.forEach(context => {\n                            logger.log(context.elementKey, 'Element was removed from the DOM');\n                            if (context) {\n                                runOnDisconnectHooks(context);\n                            }\n                            const element = context.element;\n                            const subEntry = element && globalSubscribersMap.get(element)\n                            if (subEntry) {\n                                logger.log('Element was removed from the DOM');\n                                subEntry.signals.forEach(signal => {\n                                    signal.enterStaleMode();\n                                });\n                            }\n                        });\n                    }\n                });\n            });\n        }),\n\n    };\n    return hookExecutioner;\n}\n\nexport function observeRoot(root: HTMLElement) {\n    const hookExecutioner = createHookExecutioner();\n    hookExecutioner.observer.observe(root, { childList: true, subtree: true });\n    return hookExecutioner;\n}\n","import { isSignal, Signal } from \"../signal\";\nimport { registerSignalSubscription } from \"../global/global-hook-executioner\";\nimport { DOM } from \"../html\";\n\nfunction attachPropertyToElement(dom: HTMLElement, name: string, value: unknown): unknown {\n    if (name === 'children') {\n        return;\n    }\n    /** ref is handled in `runPostRenderLogic` - after the element & his children being rendered */\n    if (name === 'ref') {\n        return;\n    }\n    if (name === 'className') {\n        attachClassComplexValueToElementClass(\n            dom,\n            value as string | Signal<string> | (string | Signal<string>)[] | Record<string, boolean /* | Signal<boolean> */>\n        );\n        return;\n    }\n    if (name === 'style') {\n        if (typeof value === 'object') {\n            attachStyleToElement(dom, value as Record<string, string | number | Signal<string | number>>);\n            return;\n        }\n    }\n\n    if (isSignal(value)) {\n        return attachSignalToElement(value, dom, name);\n    }\n    if (typeof value === 'function') {\n        attachEventToElement(dom, name, value);\n    } else {\n        attachAttributeToElement(dom, name, value);\n    }\n}\n\nfunction attachStyleToElement(\n    dom: HTMLElement,\n    style: \n        Record<string, string | number | Signal<string | number>> | \n        Signal<Record<string, string | number>>\n    ): void {\n    if(isSignal<Record<string, string | number>>(style)) {\n        const unsubscribe = style.subscribe((value: Record<string, string | number>) => {\n            Object.keys(value).forEach((key) => {\n                const styleValue = value[key];\n                attachStylePropertyToElement(dom, key, styleValue);\n            });\n        }, { emitOnSubscribe: true });\n        registerSignalSubscription(dom, unsubscribe);\n        return;\n    }\n    for (const key in style) {\n        const value = style[key];\n        if (isSignal<string | number>(value)) {\n            attachSignalToElementStyle(value, dom, key);\n        } else {\n            attachStylePropertyToElement(dom, key, value);\n        }\n    }\n}\n\nfunction attachStylePropertyToElement(dom: HTMLElement, styleProperty: string, value: string | number): void {\n    const validStyleKey = styleProperty.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n    dom.style.setProperty(validStyleKey, value as string);\n}\n\nfunction attachAttributeToElement(dom: HTMLElement, name: string, value: unknown): void {\n    if (value !== undefined && value !== null && value !== false) {\n        dom.setAttribute(name, value as string);\n    } else {\n        dom.removeAttribute(name);\n    }\n    dom[name] = (value as string);\n}\n\nfunction attachEventToElement(dom: HTMLElement, name: string, value: unknown): void {\n    if (!name.startsWith('on')) {\n        throw new Error(`Event name must start with 'on'`);\n    }\n    const eventType = name.toLowerCase().substring(2);\n    dom.addEventListener(eventType, value as EventListener);\n}\n\nfunction attachSignalToElement<T = unknown>(\n    signal: Signal<T>,\n    element: HTMLElement,\n    property: string\n): unknown {\n    element.setAttribute(`sid:${property}`, signal.id);\n    const unsubscribe = signal.subscribe((value: unknown) => {\n        attachPropertyToElement(element, property, value);\n    }, { emitOnSubscribe: true });\n    registerSignalSubscription(element, unsubscribe);\n    return unsubscribe;\n}\n\nfunction attachSignalToElementStyle(\n    signal: Signal<string | number>,\n    element: HTMLElement,\n    property: string\n): unknown {\n    element.setAttribute(`sid:style:${property}`, signal.id);\n    const unsubscribe = signal.subscribe((value: string | number) => {\n        attachStylePropertyToElement(element, property, value);\n    }, { emitOnSubscribe: true });\n    registerSignalSubscription(element, unsubscribe);\n    return unsubscribe;\n}\n\nfunction attachSignalToElementClass(\n    signal: Signal<string>,\n    element: HTMLElement\n): void {\n    const currentSidClass = element.getAttribute(`sid:class`);\n    const sidClass = currentSidClass ? `${currentSidClass};${signal.id}` : signal.id;\n    element.setAttribute(`sid:class`, sidClass);\n    let lastValue: string = signal.value;\n    const unsubscribe = signal.subscribe((value: string) => {\n        DOM.classListRemove(element, lastValue);\n        DOM.classListAdd(element, value);\n        lastValue = value;\n    }, { emitOnSubscribe: true });\n    registerSignalSubscription(element, unsubscribe);\n}\n\nfunction attachClassComplexValueToElementClass(\n    dom: HTMLElement,\n    value: string | Signal<string> | (string | Signal<string>)[] | Record<string, boolean /* | Signal<boolean> */>\n): void {\n    if (typeof value === 'string') {\n        DOM.classListAdd(dom, value);\n    } else if (isSignal<string>(value)) {\n        attachSignalToElementClass(value, dom);\n    } else if (Array.isArray(value)) {\n        value.forEach((item) => {\n            if (typeof item === 'string') {\n                DOM.classListAdd(dom, item);\n            } else if (isSignal(item)) {\n                attachSignalToElementClass(item, dom);\n            }\n        });\n    } else {\n        for (const key in value) {\n            const item = value[key];\n            dom.classList.toggle(key, Boolean(item));\n        }\n    }\n}\n\n\nexport {\n    attachPropertyToElement\n};","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { DOM } from \"@/core/html\";\nimport { attachPropertyToElement } from \"../attach-property\";\nimport type { VirtualElement } from \"@/types\";\nimport type { RenderFunction } from \"./render.types\";\n\nconst ignoredProps = ['children', 'ref'];\nconst isProperty = (propKey: string) => !ignoredProps.includes(propKey);\n\nexport function elementRender(\n    element: VirtualElement,\n    key: KeyBuilder,\n    render: RenderFunction,\n): HTMLElement {\n    const { tagName, children, ...props } = element.props;\n    const currentKey = key.clone().push(tagName as string);\n    const dom = DOM.createElement(tagName as string, currentKey);\n    const renderResult = render(children as VirtualElement[], dom, currentKey) as HTMLElement;\n    Object.keys(props)\n        .filter(isProperty)\n        .forEach(name => attachPropertyToElement(dom, name, props[name]));\n    handleElementRef(renderResult, props);\n    return renderResult;\n}\n\n\nfunction handleElementRef(\n    renderedDomElement: HTMLElement,\n    props: Record<string, unknown>,\n): void {\n    const { ref } = props;\n    if (ref) {\n        if (typeof ref === 'function') {\n            ref(renderedDomElement);\n        } else if (typeof ref === 'object' && 'current' in ref) {\n            ref.current = renderedDomElement;\n        }\n    }\n}","\nexport interface KeyBuilder {\n    key: string;\n    toString(): string;\n    get(): string[];\n    push(...parts: string[]): KeyBuilder;\n    pushRoot(): KeyBuilder;\n    pushIndex(index: number): KeyBuilder;\n    pop(): KeyBuilder;\n    shift(): KeyBuilder;\n    unshift(...parts: string[]): KeyBuilder;\n    clone(): KeyBuilder;\n}\n\nexport function keyBuilder(key = ''): KeyBuilder {\n    const keyParts = key.split('.');\n    return {\n        get key() {\n            return this.toString();\n        },\n        toString() {\n            return keyParts.join('.');\n        },\n        push(...parts: string[]) {\n            keyParts.push(...parts);\n            return this;\n        },\n        pushIndex(index: number) {\n            keyParts.push(`[${index.toString()}]`);\n            return this;\n        },\n        pop() {\n            keyParts.pop();\n            return this;\n        },\n        shift() {\n            keyParts.shift();\n            return this;\n        },\n        unshift(...parts: string[]) {\n            keyParts.unshift(...parts);\n            return this;\n        },\n        get() {\n            return keyParts;\n        },\n        clone() {\n            return keyBuilder(keyParts.join('.'));\n        },\n        pushRoot() {\n            keyParts.push('$');\n            return this;\n        },\n    };\n}","export function textRender(\n    text: string,\n): HTMLElement | Text {\n    return document.createTextNode(text);\n}\n","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { isNodeElement, isNodeText, isVirtualElement } from \"@/core/utils\";\nimport { VirtualElement } from \"@/types\";\nimport type { RenderFunction } from \"./render.types\";\nimport { DOM } from \"@/core/html\";\n\nexport function childrenRender(\n    children: VirtualElement[],\n    container: HTMLElement,\n    key: KeyBuilder,\n    render: RenderFunction\n): HTMLElement {\n    children.flat(Infinity).filter(Boolean).forEach((child, index) => {\n        if(!isVirtualElement(child) && !isNodeElement(child) && !isNodeText(child)) {\n            throw new Error('Invalid child element');\n        }\n        const childKey = key.clone().pushIndex(index);\n        const childDom = render(child, container, childKey);\n        if (childDom !== container && childDom.parentElement !== container) {\n            DOM.appendChild(container, childDom);\n        }\n    });\n    return container;\n}\n","import { registerSignalSubscription } from \"@/core/global/global-hook-executioner\";\nimport { Signal } from \"@/core/signal\";\n\nexport function signalRender<T = unknown>(\n    signal: Signal<T>,\n    container: HTMLElement,\n): Text {\n    const dom = document.createTextNode(signal.value as string);\n    const childIndex = container.children.length;\n    container.setAttribute(`data-signal:${childIndex}`, signal.id);\n    const unsubscribe = signal.subscribe((value: unknown) => {\n        dom.nodeValue = value as string;\n    }, { emitOnSubscribe: true });\n    registerSignalSubscription(dom, unsubscribe);\n    return dom;\n}","import logger from \"@/common/logger/logger\";\nimport { getActiveContext } from \"../component-context\";\nimport type { ComponentContext } from \"../component-context\";\n\nexport interface OnCreateHook {\n    (): void\n}\n\nexport function onCreate(cb: OnCreateHook)  {\n    const context = getActiveContext();\n    if(!context) {\n        throw new Error('No active context');\n    }\n    context.hooks.create.push(cb);\n}\n\nexport function runOnCreateHooks(context: ComponentContext) {\n    context.hooks.create.forEach(cb => {\n        try {\n            cb();\n        } catch (error) { \n            logger.error(error);\n        }\n    });\n}\n","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { getRenderedRoot } from \"@/core/global\";\nimport { VirtualElement, ComponentFunctionWithMeta } from \"@/types\";\nimport { createComponentContext, setActiveContext, removeActiveContext, addComponentContext } from \"../component-context/component-context\";\nimport { runOnCreateHooks } from \"../component-context/hooks/on-create\";\nimport { RenderFunction } from \"./render.types\";\nimport { ElementKeySymbol } from \"@/symbols\";\nimport { adaptVirtualElementChild } from \"../create-element/adapt-virtual-element-child\";\n\ntype VirtualComponentElement = (VirtualElement & {\n    meta: {\n        component: ComponentFunctionWithMeta;\n    };\n})\n\nexport function componentRender(\n    element: VirtualElement,\n    container: HTMLElement,\n    key: KeyBuilder,\n    render: RenderFunction\n): HTMLElement | Text {\n    const componentElement = element as VirtualComponentElement;\n    const { children = [],  ...props } = componentElement.props\n    const { meta: { component } } = componentElement;\n\n    if (typeof component !== 'function') {\n        throw new Error('Component must be a function');\n    }\n    const componentFunction = component as ComponentFunctionWithMeta;\n    const currentKey = key.clone().push(componentFunction.name);\n    const context = createComponentContext(componentFunction, container, getRenderedRoot(), currentKey.toString());\n    setActiveContext(context);\n    const componentVirtualElementOutput = componentFunction(props, children as VirtualElement[]);\n    removeActiveContext();\n    \n    const domElement = render(adaptVirtualElementChild(componentVirtualElementOutput), container, currentKey);\n    context.element = domElement as Element; \n    context.elementKey = domElement[ElementKeySymbol];\n    addComponentContext(context.elementKey || context.key, context);\n    runOnCreateHooks(context);\n    \n    return domElement;\n}","export function groupBy<T, K extends string>(arr: T[], keyFn: (item: T) => K): Record<K, T[]> {\n    return arr.reduce((acc, obj) => {\n        const groupKey = keyFn(obj);\n        if (acc[groupKey]) {\n            acc[groupKey].push(obj);\n        } else {\n            acc[groupKey] = [obj];\n        }\n        return acc;\n    }, {} as Record<K, T[]>);\n}\n","import { isNodeElement, isNodeText } from \"../utils\";\n\nexport function parseHtml(html: string): Element | Text {\n    const dom = new DOMParser().parseFromString(html, 'text/html');\n    const processedDom = dom.body.firstChild;\n    if(!processedDom) {\n        throw new Error('Invalid SSR HTML');\n    }\n    if(isNodeElement(processedDom) || isNodeText(processedDom)){\n        return processedDom;\n    }\n    throw new Error('Processed SSR HTML is not a valid node');\n}\n","import logger from \"@/common/logger/logger\";\n\nexport function appendQueryParams(url: string, params: Record<string, string | number>): string {\n    try {\n        const urlObj = new URL(url, 'http://dummy.com');\n        for (const key in params) {\n            if (typeof params[key] === 'string' || typeof params[key] === 'number') {\n              urlObj.searchParams.append(key, params[key].toString());\n            }\n          }\n\n        return urlObj.pathname + urlObj.search + urlObj.hash;\n    } catch (error) {\n        logger.error(`Failed to append query parameters: ${error}`);\n        return url;\n    }\n}","export function insertPathParams(url: string, params: Record<string, string | number>): string {\n    let result = url;\n\n    // Extract the path, query, and fragment from the URL\n    const urlObj = new URL(url, 'http://dummy.com');\n    let { pathname } = urlObj;\n    const { search, hash } = urlObj;\n\n    // Replace placeholders in the path\n    for (const key in params) {\n        const regex = new RegExp(`:${key}(?=[/\\\\?#]|$)`, 'g');\n        pathname = pathname.replace(regex, encodeURIComponent(params[key].toString()));\n    }\n\n    // Construct the new URL\n    result = pathname + search + hash;\n\n    return result;\n}","import { SSRFetchOptions } from \"./ssr.types\";\nimport { CreateRootOptions } from \"../dom-render/create-root\";\nimport { appendQueryParams } from \"./append-query-params\";\nimport { insertPathParams } from \"./insert-path-params\";\n\nexport async function fetchHtml(\n    ssrFetch: string | SSRFetchOptions, \n    rootOptions?: CreateRootOptions\n): Promise<string> {\n    try {\n        if(typeof ssrFetch === 'string') {\n            const margeUrl = concatUrl(ssrFetch, rootOptions?.ssr?.baseUrl);\n            return await fetchSSRHtml(margeUrl);\n        } else {\n            const { url, params, query, config } = ssrFetch;\n            \n            const urlWithQuery = query ? appendQueryParams(url, query) : url;\n            const urlWithParams = params ? insertPathParams(urlWithQuery, params) : urlWithQuery;\n            const margeUrl = concatUrl(urlWithParams, rootOptions?.ssr?.baseUrl);\n\n            const margeConfig = {\n                ...rootOptions?.ssr?.config,\n                ...config,\n            };\n            return await fetchSSRHtml(margeUrl, margeConfig);\n        }\n    } catch (error) {\n        throw new Error(`Failed to fetch SSR HTML: ${(<Error>error)?.message}`);\n    }\n}\n\nasync function fetchSSRHtml(url: string, config?: RequestInit): Promise<string> {\n    const res = await fetch(url, config);\n    return await res.text();\n}\n\nfunction concatUrl(url: string, baseUrl = '') {\n    if(!baseUrl || isFullUrl(url)) {\n        return url;\n    }\n    return new URL(url, baseUrl).href;\n}\n\nfunction isFullUrl(url: string): boolean {\n    try {\n        new URL(url);\n        return true;\n    } catch (_) {\n        return false;\n    }\n}\n","import { ELEMENT_TYPE } from \"@/constants\";\nimport { ElementKeySymbol, SSRSymbol } from \"@/symbols\";\nimport { getRenderedRoot, setRenderedRoot } from \"@/core/global\";\nimport { isNodeElement } from \"@/core/utils\";\nimport { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { groupBy } from \"@/common/group-by\";\nimport logger from \"@/common/logger/logger\";\nimport { DOM } from \"../html/html\";\nimport { parseHtml } from \"./parse-html\";\nimport { fetchHtml } from \"./fetch-html\";\nimport { getSignalValue, listen, isSignal } from \"../signal/signal.utils\";\nimport { adaptVirtualElementChild } from \"../dom-render/create-element/adapt-virtual-element-child\";\nimport type { VirtualElement, Renderable } from \"@/types\";\nimport type { SSRFetch } from \"./ssr.types\";\nimport type { RenderFunction } from \"../dom-render/render\";\nimport type { RootElementWithMetadata } from \"../dom-render/create-root\";\nimport type { Signal } from \"../signal/signal.types\";\n\ncustomElements.define('ssr-ph', class extends HTMLElement { });\ncustomElements.define('sig-outlet', class extends HTMLElement { });\n\ninterface SSRProps {\n    fetch: SSRFetch;\n    fallback?: Renderable;\n    allowOutlet?: boolean;\n    selector?: string;\n    memo?: boolean | { key: string };\n    rerun?: Signal<unknown>;\n    rerunFallback?: VirtualElement;\n    errorElement?: Renderable;\n    onError?: (error: Error) => void;\n}\n\nfunction SSR(props: SSRProps, children: Renderable[]): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.SSR,\n        props: {\n            children: children || [],\n            ...props,\n        }\n    };\n}\n\nSSR['$$type'] = SSRSymbol;\n\nfunction renderSSR(\n    element: VirtualElement,\n    container: HTMLElement,\n    key: KeyBuilder,\n    render: RenderFunction,\n): HTMLElement | Text {\n    const {\n        fetch: urlOrHandlerOrFetchConfig,\n        allowOutlet = true,\n        fallback,\n        children = [],\n        errorElement,\n        onError,\n        rerun,\n        selector\n    } = (element.props as unknown as SSRProps & { children: VirtualElement[] });\n    const root = getRenderedRoot();\n    const currentKey = key.clone().push(element.type);\n    let fallbackDom: HTMLElement | Text | null = null;\n    let prevSSRDom: Element | Text | null = null;\n    const memoChildrenDom: Record<string, ChildNode[] | null> = {};\n\n    const placeholderElm = DOM.createElement('ssr-ph', currentKey);\n    const signals: Signal<unknown>[] = [];\n    const isArgumentSignaled = (typeof urlOrHandlerOrFetchConfig === 'string' || (!isSignal(urlOrHandlerOrFetchConfig) && typeof urlOrHandlerOrFetchConfig === 'function'));\n\n    if (fallback) {\n        const fallbackKey = currentKey.clone().push('ssr-fallback');\n        fallbackDom = render(adaptVirtualElementChild(fallback), container, fallbackKey);\n        DOM.appendChild(container, fallbackDom);\n    } else {\n        DOM.appendChild(container, placeholderElm);\n    }\n\n    if (isArgumentSignaled) {\n        signals.push(\n            ...(isSignal(urlOrHandlerOrFetchConfig) ?\n                [urlOrHandlerOrFetchConfig] :\n                Object.values(urlOrHandlerOrFetchConfig).filter(isSignal) as Signal<unknown>[])\n        );\n    }\n    if (rerun && isSignal(rerun)) {\n        signals.push(rerun);\n    }\n    const renderListener = () => {\n        let fetchHtmlPromise: Promise<string>;\n        if (isArgumentSignaled) {\n            fetchHtmlPromise = typeof urlOrHandlerOrFetchConfig === 'string'\n                ? fetchHtml(urlOrHandlerOrFetchConfig, root)\n                : urlOrHandlerOrFetchConfig() as Promise<string>;\n        } else {\n            fetchHtmlPromise = isSignal(urlOrHandlerOrFetchConfig) ?\n                fetchHtml(getSignalValue(urlOrHandlerOrFetchConfig) as string, root) :\n                fetchHtml({\n                    url: getSignalValue(urlOrHandlerOrFetchConfig.url),\n                    query: getSignalValue(urlOrHandlerOrFetchConfig.query),\n                    params: getSignalValue(urlOrHandlerOrFetchConfig.params),\n                    config: getSignalValue(urlOrHandlerOrFetchConfig.config),\n                }, root);\n        }\n\n        asyncRenderSSR(\n            fetchHtmlPromise,\n            root,\n            render,\n            children,\n            memoChildrenDom,\n            { errorElement, onError, allowOutlet, selector },\n            (dom: Element | Text) => {\n                if (prevSSRDom) {\n                    container.replaceChild(dom, prevSSRDom);\n                } else {\n                    injectResolvedDom(dom);\n                }\n                prevSSRDom = dom;\n            },\n            currentKey\n        );\n    };\n    if (signals.length) {\n        listen(renderListener, signals);\n    }\n    renderListener();\n    return fallbackDom || placeholderElm;\n\n    function injectResolvedDom(dom: Element | Text) {\n        if (fallbackDom) {\n            if (fallbackDom.isConnected) {\n                container.replaceChild(dom, fallbackDom);\n            } else {\n                logger.warn('Fallback element is not connected to the DOM');\n            }\n        } else {\n            if (placeholderElm.isConnected) {\n                container.replaceChild(dom, placeholderElm);\n            }\n        }\n    }\n}\n\nfunction asyncRenderSSR(\n    provideHtmlPromise: Promise<string>,\n    root: RootElementWithMetadata,\n    render: RenderFunction,\n    children: Renderable[],\n    memoChildrenRecord: Record<string, ChildNode[] | null>,\n    props: Omit<SSRProps, 'fetch'>,\n    injectResolvedDom: (dom: Element | Text) => void,\n    key: KeyBuilder\n) {\n    const { errorElement, onError, allowOutlet } = props;\n    return provideHtmlPromise.then((htmlString) => {\n        setRenderedRoot(root.id);\n        const htmlDom = applySelector(parseHtml(htmlString), props.selector);\n        if (!htmlDom) return;\n        const ssrKey = 'tagName' in htmlDom ?\n            key.clone().push(htmlDom.tagName.toLowerCase()) : key.clone();\n        htmlDom[ElementKeySymbol] = ssrKey.toString();\n        if (isNodeElement(htmlDom) && allowOutlet) {\n            const virtualElementChildren = children.map(adaptVirtualElementChild);\n            const unnamedChildren = virtualElementChildren.filter((child) => !child.props.name);\n            if (unnamedChildren.length) {\n                logger.warn('Unnamed children are not supported in SSR');\n            }\n            const namedChildren = groupBy(virtualElementChildren, (child) => (child.props.name || '') as string);\n            \n            for (const [outletName, child] of Object.entries(namedChildren)){ \n                const domOutlet = htmlDom.querySelector(`sig-outlet[name=\"${outletName}\"]`);\n                if(!domOutlet) continue;\n                if(memoChildrenRecord[outletName]) {\n                    const memoChildren = memoChildrenRecord[outletName] || [];\n                    domOutlet.replaceChildren(...memoChildren);\n                    continue;\n                }\n                const outletKey = key.clone().push('ssr-outlet').push(outletName);\n                render(child, domOutlet as HTMLElement, outletKey);\n                const domChildren = Array.from(domOutlet.childNodes);\n                memoChildrenRecord[outletName] = domChildren;\n                domChildren.forEach((node, i) => {\n                    node[ElementKeySymbol] = outletKey.clone().pushIndex(i);\n                });\n            }\n        }\n        injectResolvedDom(htmlDom);\n    }).catch((error) => {\n        setRenderedRoot(root.id);\n        onError?.(error);\n        if (!errorElement) return;\n        \n        const errorDom = render(adaptVirtualElementChild(errorElement), undefined, key);\n        injectResolvedDom(errorDom);\n    });\n}\n\nfunction applySelector(dom: Element | Text, selector?: string): Element | Text | null {\n    if (dom instanceof Text || !selector) {\n        return dom;\n    }\n    return dom.querySelector(selector);\n}\n\nexport type { SSRProps };\nexport { SSR, renderSSR };","export function fragmentExtraction(\n    renderedElement: (HTMLElement | Text) | (HTMLElement | Text)[],\n    container: HTMLElement,\n) {\n    if(renderedElement === container) {\n        return Array.from(renderedElement.childNodes) as (HTMLElement | Text)[];\n    }\n    return renderedElement;\n}\n","\nfunction isPromise<T = unknown>(obj: unknown): obj is Promise<T>{\n    return !!obj \n        && (typeof obj === 'object' || typeof obj === 'function')\n        && 'then' in obj\n        && typeof obj.then === 'function';\n}\n\nexport { isPromise }","\nimport { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { getRenderedRoot, setRenderedRoot } from \"@/core/global\";\nimport { DOM } from \"@/core/html\";\nimport { AwaitControlFlow } from \"@/symbols\";\nimport { CONTROL_FLOW_TAG, ELEMENT_TYPE } from \"@/constants\";\nimport { adaptVirtualElementChild } from \"@/core/dom-render/create-element/adapt-virtual-element-child\";\nimport { createElement } from \"@/jsx\";\nimport { fragmentExtraction } from \"../fragment-extraction\";\nimport type { RenderFunction } from \"@/core/dom-render/render\";\nimport type { AsyncComponentFunction, Renderable, VirtualElement, ComponentFunction } from \"@/types\";\nimport { isPromise } from \"@/common/is-promise\";\n\ntype LazyAsyncComponentFunction = () => Promise<{ default: AsyncComponentFunction }>;\ntype LazyComponentFunction = () => Promise<{ default: ComponentFunction }>;\n\ninterface AwaitProps {\n    component: ComponentFunction | AsyncComponentFunction | LazyAsyncComponentFunction | LazyComponentFunction;\n    fallback: Renderable,\n    error?: Renderable,\n    onError?: (error: Error) => void,\n    onResolve?: () => void,\n}\n\nfunction Await(props: AwaitProps): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.CONTROL_FLOW,\n        props: {\n            children: [],\n            ...props,\n            controlTag: CONTROL_FLOW_TAG.AWAIT,\n        }\n    };\n}\n\nAwait['$$type'] = AwaitControlFlow;\n\n\nfunction renderAwait(\n    element: VirtualElement,\n    container: HTMLElement,\n    render: RenderFunction,\n    key: KeyBuilder\n): HTMLElement | Text {\n    const renderSandboxContainer = render(\n        createElement('div', {}),\n        undefined,\n        key.clone().push('sandbox')\n    ) as HTMLElement;\n\n    const root = getRenderedRoot();\n    const props = element.props as unknown as AwaitProps;\n    const component = props.component;\n\n    let memoAwaitElementDom: HTMLElement | Text | (HTMLElement | Text)[] | null = null;\n\n\n    if (typeof component !== 'function' && !isPromise(component)) {\n        throw new Error(`Invalid Await argument, invalid component type: ${component}`);\n    }\n\n    const currentKey = key.clone().push(element.props.controlTag as string);\n    const currentKeyString = currentKey.toString();\n\n    const startComment = DOM.createComment('await;start;key:' + currentKeyString);\n    const endComment = DOM.createComment('await;end;key:' + currentKeyString);\n\n    DOM.appendChild(container, startComment);\n    DOM.appendChild(container, endComment);\n\n    const { fallback, onError, onResolve, error: errorElm } = props;\n\n    const fallbackDom = render(adaptVirtualElementChild(fallback), container, currentKey);\n\n    const executeRender = (component: LazyAsyncComponentFunction | AsyncComponentFunction | ComponentFunction | LazyComponentFunction) => {\n        DOM.insertBefore(endComment, fallbackDom);\n        if (memoAwaitElementDom) {\n            DOM.removeElementsBetween(startComment, endComment);\n            DOM.insertBefore(endComment, memoAwaitElementDom);\n            return;\n        }\n        Promise.resolve(component())\n            .then((moduleOrElement) => {\n                if (moduleOrElement &&\n                    typeof moduleOrElement == 'object' &&\n                    'default' in moduleOrElement) {\n                    if (typeof moduleOrElement.default != 'function') {\n                        throw new Error('Component inferred as a lazy async component, but default export is not a function');\n                    }\n                    return moduleOrElement.default();\n                } else {\n                    return moduleOrElement;\n                }\n            })\n            .then((componentElement) => {\n                setRenderedRoot(root.id);\n                DOM.removeElementsBetween(startComment, endComment);\n\n                const renderedResult = render(adaptVirtualElementChild(componentElement), container, currentKey);\n                const awaitElementDom = fragmentExtraction(renderedResult, renderSandboxContainer);\n                memoAwaitElementDom = awaitElementDom;\n                DOM.insertBefore(endComment, awaitElementDom);\n            })\n            .catch((error) => {\n                if (onError) {\n                    onError(error);\n                }\n                if (errorElm) {\n                    const errorDom = render(adaptVirtualElementChild(errorElm), container, currentKey);\n                    DOM.insertBefore(endComment, errorDom);\n                }\n            })\n            .finally(() => {\n                if (onResolve) {\n                    onResolve();\n                }\n            });\n    }\n\n    if (typeof component == 'function') {\n        executeRender(component)\n    } else {\n        throw new Error('Component must be a either a lazy async component, async component, or a component function');\n    }\n    return container;\n}\n\nexport type { AwaitProps };\nexport { Await, renderAwait };","import logger from \"@/common/logger/logger\";\nimport { ELEMENT_TYPE, CONTROL_FLOW_TAG } from \"@/constants\";\nimport { isSignal, Signal } from \"@/core/signal\";\nimport { ForControlFlow } from \"@/symbols\";\nimport { registerSignalSubscription } from \"@/core/global/global-hook-executioner\";\nimport { DOM } from \"@/core/html\";\nimport { adaptVirtualElementChild } from \"@/core/dom-render/create-element/adapt-virtual-element-child\";\nimport { fragmentExtraction } from \"../fragment-extraction\";\nimport { createElement } from \"@/jsx/create-element\";\nimport type { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport type { RenderFunction } from \"@/core/dom-render/render\";\nimport type { VirtualElement, Renderable } from \"@/types\";\n\n/**\n * used in {@link ForProps}\n * \n */ \ntype ForFactory<T = unknown> = {\n    /**\n     * The item signal\n     */\n    item$: Signal<T>, \n    /**\n     * The item\n     */\n    item: T, \n    /**\n     * The index of the item\n     */\n    index: number, \n    /**\n     * The list of items\n     */\n    list: T[], \n}\n\n/**\n * For control flow element props\n * \n * used in {@link For}\n * \n */ \ntype ForProps<T = unknown> = {\n    /**\n     * The factory function to create the elements\n     */\n    factory: (args: ForFactory<T>) => Renderable;    \n    /**\n     * The list of items to iterate over\n     */ \n    list: Signal<Array<T>>;\n    /**\n     * The index of the item\n     */\n    index?: string | ((item: T, i: number) => string);\n    \n    \n    memo?: boolean;\n    /**\n     * The element to render when the list is empty\n     */\n    empty?: Renderable;\n}\n/**\n * For control flow element\n * @param {ForProps} props - For control flow element props\n *\n * using {@link ForProps}\n * \n * @category Control-Flow\n * \n * @example\n *  <For \n *      list={recipes$}\n *      index={(recipe) => recipe.id}\n *      factory={(recipe) => <RecipeCard recipe={recipe} />}\n *  />\n */\nfunction For<T = unknown>(props: ForProps<T>): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.CONTROL_FLOW,\n        props: {\n            children: [],\n            ...props,\n            controlTag: CONTROL_FLOW_TAG.FOR,\n        }\n    };\n}\n\nFor['$$type'] = ForControlFlow;\n\nfunction renderFor(\n    element: VirtualElement,\n    container: HTMLElement,\n    render: RenderFunction,\n    key: KeyBuilder\n): HTMLElement | Text {\n\n    const renderSandboxContainer = render(\n        createElement('div', {}), \n        undefined,\n        key.clone().push('sandbox')\n    ) as HTMLElement;\n\n    const { list, factory, index, empty, memo = true } = (element.props as unknown as ForProps);\n    const currentKey = key.clone().push(element.props.controlTag as string);\n    const currentKeyString = currentKey.toString();\n\n    // Create start and end comment nodes\n    const startComment = document.createComment('for;start;'+currentKeyString);\n    const endComment = document.createComment('for;end;'+currentKeyString);\n\n    // Append the start and end comment nodes to the container\n    container.appendChild(startComment);\n    container.appendChild(endComment);\n\n    const indexFn = typeof index === 'function' ? index : ((item: unknown, i: number) => {\n        if (typeof index === 'undefined' || index === null) {\n            return typeof item === 'object' ? String(i) : String(item);\n        }\n        return item?.[index as string] as string;\n    });\n    const indexItems = new Map<string, { dom: (HTMLElement | Text | (HTMLElement | Text)[]); }>();\n\n    if (!isSignal<Array<unknown>>(list)) {  \n        logger.error('For control flow element list prop must be a signal, in case of a non-signal list, use a static mapping instead');\n    } else {\n        const listSignal = list;\n        const unsubscribe = listSignal.subscribe((list) => {\n            // Remove all content between the start and end comments\n            DOM.removeElementsBetween(startComment, endComment);\n\n            if (list.length === 0) {\n                if (empty !== undefined) {\n                    const renderedResult = render(adaptVirtualElementChild(empty), container, key);\n                    const emptyDom = fragmentExtraction(renderedResult, container);\n                    DOM.insertBefore(endComment, emptyDom);\n                }\n                return;\n            }\n            \n            const mapSignal = listSignal.derive((items) => {\n                return new Map(items.map((item, i) => [indexFn(item, i), item]))\n            });\n            const elementsDom = list.map((item, i) => {\n                const indexValue = indexFn(item, i);\n                if (memo) {\n                    const indexItem = indexItems.get(indexValue);\n                    if (indexItem) {\n                        return indexItem.dom;\n                    }\n                }\n                const childKey = key.clone().pushIndex(i);\n                let element: Renderable;\n                const item$ = mapSignal.derive((map) => {\n                    const item = map.get(indexValue);\n                    return item as unknown;\n                });\n                element = adaptVirtualElementChild(factory({item, index: i, list, item$}));\n                const renderedResult = render(element, renderSandboxContainer, childKey);\n                const elementDom = fragmentExtraction(renderedResult, renderSandboxContainer);\n                if (memo) {\n                    indexItems.set(indexValue, { dom: elementDom });\n                }\n                return elementDom;\n            });\n\n            elementsDom.forEach((elementDom) => DOM.insertBefore(endComment, elementDom));\n        }, { emitOnSubscribe: true });\n\n        registerSignalSubscription(startComment, unsubscribe);\n    }\n    return container;\n}\n\nexport type { ForProps, ForFactory };\nexport { For, renderFor };","import logger from \"@/common/logger/logger\";\nimport { registerSignalSubscription } from \"@/core/global/global-hook-executioner\";\nimport { DOM } from \"@/core/html\";\nimport { Signal, isSignal } from \"@/core/signal\";\nimport { IfControlFlow } from \"@/symbols\";\nimport { ELEMENT_TYPE, CONTROL_FLOW_TAG } from \"@/constants\";\nimport { adaptVirtualElementChild } from \"@/core/dom-render/create-element/adapt-virtual-element-child\";\nimport { fragmentExtraction } from \"../fragment-extraction\";\nimport { createElement } from \"@/jsx\";\nimport type { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport type { Renderable, VirtualElement } from \"@/types\";\nimport type { RenderFunction } from \"@/core/dom-render/render\";\n\n\n/**\n * \n * If control flow element props\n * \n * used in {@link If}\n * \n */ \ninterface IfProps {\n    /**\n     * The condition to check\n     */\n    condition: Signal<any>;\n    /**\n     * The element to render when the condition is true\n     */\n    then: Renderable;\n    /**\n     * The element to render when the condition is false\n     */\n    fallback?: Renderable;\n    /**\n     * Memoize the elements\n     * @default true\n     */\n    memo?: boolean\n}\n\n/**\n * If control flow element\n * @param {IfProps} props - If control flow element props\n * \n * @category Control-Flow\n * @group Control-Flow\n */\nfunction If(props: IfProps): VirtualElement {\n    return {\n        type: ELEMENT_TYPE.CONTROL_FLOW,\n        props: {\n            children: [],\n            ...props,\n            controlTag: CONTROL_FLOW_TAG.IF,\n        }\n    };\n}\n\nIf['$$type'] = IfControlFlow;\n\nfunction renderIf(\n    element: VirtualElement,\n    container: HTMLElement,\n    render: RenderFunction,\n    key: KeyBuilder,\n): HTMLElement | Text {\n    const renderSandboxContainer = render(\n        createElement('div', {}), \n        undefined,\n        key.clone().push('sandbox')\n    ) as HTMLElement;\n    \n    const { condition, then, fallback, memo = true } = (element.props as unknown as IfProps);\n    const currentKey = key.clone().push(element.props.controlTag as string);\n    const currentKeyString = currentKey.toString();\n    // Create start and end comment nodes\n    const startComment = DOM.createComment('if;start;key:'+currentKeyString);\n    const endComment = DOM.createComment('if;end;key:'+currentKeyString);\n\n    // Append the start and end comment nodes to the container\n    DOM.appendChild(container, startComment);\n    DOM.appendChild(container, endComment);\n\n    let previousConditionValue: null | boolean = null;\n\n    let thenElementDom: (HTMLElement | Text) | (HTMLElement | Text)[];\n    let fallbackElementDom: (HTMLElement | Text) | (HTMLElement | Text)[];\n    if (isSignal(condition)) {\n        const conditionSignal = condition;\n        const unsubscribe = conditionSignal.subscribe((conditionValue) => {\n            // Remove all content between the start and end comments\n\n            const booleanConditionValue = Boolean(conditionValue)\n            if (previousConditionValue === booleanConditionValue) {\n                return;\n            }\n            const currentRenderedDom = DOM.getAllElementsBetween(startComment, endComment) as (HTMLElement | Text) | (HTMLElement | Text)[];;\n            previousConditionValue = booleanConditionValue;\n            DOM.removeElementsBetween(startComment, endComment);\n\n            if (booleanConditionValue) {\n                if (memo && thenElementDom) {\n                    fallbackElementDom = currentRenderedDom     \n                    DOM.insertBefore(endComment, thenElementDom);\n                    return;\n                }\n                const thenKey = currentKey.clone().push('if-then');\n                const virtualThen = adaptVirtualElementChild(then);\n                const renderedResult = render(virtualThen, renderSandboxContainer, thenKey);\n                thenElementDom = fragmentExtraction(renderedResult, renderSandboxContainer);\n                DOM.insertBefore(endComment, thenElementDom);\n            } else if (fallback) {\n                if (memo && fallbackElementDom) {\n                    DOM.insertBefore(endComment, fallbackElementDom);\n                    return;\n                }\n                const fallbackKey = currentKey.clone().push('if-fallback');\n                const renderedResult = render(adaptVirtualElementChild(fallback), renderSandboxContainer, fallbackKey);\n                fallbackElementDom = fragmentExtraction(renderedResult, renderSandboxContainer);\n                DOM.insertBefore(endComment, fallbackElementDom);\n            }\n        }, { emitOnSubscribe: true });\n        registerSignalSubscription(startComment, unsubscribe);\n    } else {\n        logger.error('If control flow element condition prop must be a signal, in case of a non-signal condition, use a static conditional rendering instead');\n    }\n    return container; // startComment;\n}\n\nexport type { IfProps };\nexport { If, renderIf };","import { registerSignalSubscription } from \"@/core/global/global-hook-executioner\";\nimport { isSignal, Signal } from '@/core/signal';\nimport logger from '@/common/logger/logger';\nimport { DOM } from '@/core/html/html';\nimport { fragmentExtraction } from \"../fragment-extraction\";\nimport { CONTROL_FLOW_TAG, ELEMENT_TYPE } from \"@/constants\";\nimport { PropsWithChildren } from \"@/types/common\";\nimport { isVirtualElement } from \"@/core/utils\";\nimport { adaptVirtualElementChild } from \"@/core/dom-render/create-element/adapt-virtual-element-child\";\nimport { createElement } from \"@/jsx\";\nimport type { VirtualElement } from \"@/types\";\nimport type { RenderFunction } from \"@/core/dom-render/render\";\nimport type { KeyBuilder } from \"@/common/key-builder/key-builder\";\n\n/**\n * Switch control flow element props\n * \n * used in {@link Switch}\n */\ninterface SwitchProps {\n    /**\n     * The condition to check\n     */\n    condition: Signal<any>;\n    /**\n     * Should memoize all the cases\n     * @default true\n     */\n    memoAll?: boolean;\n}\n\n/**\n * Case control flow element props\n * \n * used in {@link Case}\n */\ninterface CaseProps {\n    /**\n     * The value to match, if a function is provided, it will be called with the condition value\n     **/\n    value: unknown | ((value: unknown) => boolean);\n    /**\n     * Memoize the element, overrides the memoAll prop in the Switch element\n     * @default true\n     */\n    memo?: boolean;\n}\n\n/**\n * Default control flow element props\n * \n * used in {@link Default}\n */\ninterface DefaultProps {\n    /**\n     * Memoize the element, overrides the memoAll prop in the Switch element\n     * @default true\n     */\n    memo?: boolean;\n}\n\nexport function renderSwitch(\n    element: VirtualElement,\n    container: HTMLElement,\n    render: RenderFunction,\n    key: KeyBuilder,\n): HTMLElement | Text {\n    const renderSandboxContainer = render(\n        createElement('div', {}), \n        undefined,\n        key.clone().push('sandbox')\n    ) as HTMLElement;\n\n    const memoCaseMap = new Map<number | string, HTMLElement | Text | (HTMLElement | Text)[]>();\n    const props = (element.props as unknown as PropsWithChildren<SwitchProps>);\n    const { condition, children = [], memoAll = true} = props;\n    const currentKey = key.clone().push(element.props.controlTag as string);\n    const currentKeyString = currentKey.toString();\n \n    // Create start and end comment nodes\n    const startComment = DOM.createComment('switch;start;'+currentKeyString);\n    const endComment = DOM.createComment('switch;end;'+currentKeyString);\n\n    // Append the start and end comment nodes to the container\n    DOM.appendChild(container, startComment);\n    DOM.appendChild(container, endComment);\n\n    let currentCaseIdx: string | number = -1;\n\n    if (isSignal(condition)) {\n        const conditionSignal = condition;\n        const unsubscribe = conditionSignal.subscribe((conditionValue) => {\n            // Remove all content between the start and end comments\n            let matched = false;\n            for (const [idx, child] of Object.entries(children)) {\n                if (isVirtualElement(child) && child.meta?.component === Case) {\n                    const { value, memo } = (child.props as unknown as PropsWithChildren<CaseProps>);\n                    const isMatch = typeof value === 'function' ? value(conditionValue) : value === conditionValue;\n                    if (isMatch) {\n                        const shouldMemo = (memo === true) || (memoAll && memo !== false);\n                        const memoElement = memoCaseMap.get(idx);\n                        if (shouldMemo && memoElement) {\n                            const currentMatchedResult = DOM.getAllElementsBetween(startComment, endComment) as (HTMLElement | Text)[];\n                            memoCaseMap.set(currentCaseIdx, currentMatchedResult);\n                            DOM.removeElementsBetween(startComment, endComment);\n                            currentCaseIdx = idx;\n                            DOM.insertBefore(endComment, memoElement);\n                            matched = true;\n                            break;\n                        }\n\n                        const caseKey = currentKey.clone().push('case');\n                        const virtualCaseChildren = child.props.children.map(adaptVirtualElementChild);\n                        const renderedResult = render(virtualCaseChildren, renderSandboxContainer, caseKey);\n                        const caseDom = fragmentExtraction(renderedResult, renderSandboxContainer);\n                        \n                        if (shouldMemo) {\n                            memoCaseMap.set(idx, caseDom);\n                            const isFirstTimeRender = memoCaseMap.size === 0;\n                            if(!isFirstTimeRender) {\n                                const currentMatchedResult = DOM.getAllElementsBetween(startComment, endComment) as (HTMLElement | Text)[];\n                                memoCaseMap.set(currentCaseIdx, currentMatchedResult);\n                            }\n                        }\n                        \n                        DOM.removeElementsBetween(startComment, endComment);\n                        currentCaseIdx = idx;\n                        DOM.insertBefore(endComment, caseDom);\n                        matched = true;\n                        break;\n                    }\n                }\n            }\n\n            if (!matched) {\n                let foundDefault = false;\n                for (const child of children) {\n                    if (isVirtualElement(child) && child.meta?.component === Default) {\n                        foundDefault = true;\n                        const { memo } = (child.props as unknown as PropsWithChildren<DefaultProps>);\n                        const shouldMemo = (memo === true) || (memoAll && memo !== false);\n                        const memoElement = memoCaseMap.get(-1);\n                        if (shouldMemo && memoElement) {\n                            const currentMatchedResult = DOM.getAllElementsBetween(startComment, endComment) as (HTMLElement | Text)[];\n                            memoCaseMap.set(currentCaseIdx, currentMatchedResult);\n                            DOM.removeElementsBetween(startComment, endComment);\n                            currentCaseIdx = -1;\n                            DOM.insertBefore(endComment, memoElement);\n                            break;\n                        }\n\n                        const defaultKey = currentKey.clone().push('default');\n                        const virtualDefaultChildren = child.props.children.map(adaptVirtualElementChild);\n                        const renderedResult = render(virtualDefaultChildren, renderSandboxContainer, defaultKey);\n                        const defaultDom = fragmentExtraction(renderedResult, renderSandboxContainer);\n                        \n                        if (shouldMemo) {\n                            memoCaseMap.set(-1, defaultDom);\n                            const isFirstTimeRender = memoCaseMap.size === 0;\n                            if(!isFirstTimeRender) {\n                                const currentMatchedResult = DOM.getAllElementsBetween(startComment, endComment) as (HTMLElement | Text)[];\n                                memoCaseMap.set(currentCaseIdx, currentMatchedResult);\n                            }\n                        }\n                        \n                        DOM.removeElementsBetween(startComment, endComment);\n                        currentCaseIdx = -1;\n                        DOM.insertBefore(endComment, defaultDom);\n                        break;\n                    }\n                }\n                if (!foundDefault) {\n                    const currentMatchedResult = DOM.getAllElementsBetween(startComment, endComment) as (HTMLElement | Text)[];\n                    memoCaseMap.set(currentCaseIdx, currentMatchedResult);\n                    DOM.removeElementsBetween(startComment, endComment);\n                    currentCaseIdx = -1;\n                }\n            }\n        }, { emitOnSubscribe: true });\n        registerSignalSubscription(startComment, unsubscribe);\n            \n    } else {\n        logger.error('Switch control flow element condition prop must be a signal, in case of a non-signal condition, use a static conditional rendering instead');\n    }\n    return container;\n}\n\n\n/**\n * Switch control flow element\n * \n * @param {SwitchProps} props \n * @param children Case and Default elements\n *\n * @category Control-Flow\n * @group Control-Flow\n */\nexport const Switch = (props: SwitchProps, children: VirtualElement[]=[]): VirtualElement => ({\n    type: ELEMENT_TYPE.CONTROL_FLOW,\n    props: {\n        ...props,\n        controlTag: CONTROL_FLOW_TAG.SWITCH,\n        children\n    },\n});\n\n/**\n * Case control flow element\n * \n * @param {CaseProps} props \n * @param children \n *\n * @category Control-Flow\n * @group Control-Flow\n */\nexport const Case = (props: CaseProps, children: VirtualElement[]=[]): VirtualElement => ({\n    type: ELEMENT_TYPE.CONTROL_FLOW,\n    props: {\n        ...props,\n        controlTag: CONTROL_FLOW_TAG.CASE,\n        children\n    },\n});\n\n/**\n * Default control flow element\n * \n * @param {DefaultProps} props \n * @param children \n *\n * @category Control-Flow\n * @group Control-Flow\n */\nexport const Default = (props: DefaultProps, children: VirtualElement[]=[]): VirtualElement => ({\n    type: ELEMENT_TYPE.CONTROL_FLOW,\n    props: {\n        ...props,\n        controlTag: CONTROL_FLOW_TAG.DEFAULT,\n        children\n    },\n});\n\nexport type { SwitchProps, CaseProps, DefaultProps };\n","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { renderAwait } from \"@/core/control-flow/await\";\nimport { renderFor } from \"@/core/control-flow/for\";\nimport { renderIf } from \"@/core/control-flow/if\";\nimport { VirtualElement } from \"@/types\";\nimport { RenderFunction } from \"./render.types\";\nimport { CONTROL_FLOW_TAG } from \"@/constants\";\nimport { renderSwitch } from \"@/core/control-flow/switch-case\";\n\nexport function controlFlowRender(\n    element: VirtualElement,\n    container: HTMLElement,\n    key: KeyBuilder,\n    render: RenderFunction\n): HTMLElement | Text {\n    switch (element.props.controlTag) {\n        case CONTROL_FLOW_TAG.IF:\n            return renderIf(element, container, render, key);\n        case CONTROL_FLOW_TAG.FOR:\n            return renderFor(element, container, render, key);\n        case CONTROL_FLOW_TAG.AWAIT:\n            return renderAwait(element, container, render, key);\n        case CONTROL_FLOW_TAG.SWITCH:\n            return renderSwitch(element, container, render, key);\n        default:\n            throw new Error(`Invalid control flow tag: ${element.props.controlTag}`);\n    }\n}","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { VirtualElement } from \"@/types\";\nimport { attachPropertyToElement } from \"../attach-property\";\nimport type { RenderFunction } from \"./render.types\";\n\nexport function rawRender(\n    element: VirtualElement,\n    key: KeyBuilder,\n    render: RenderFunction,\n): HTMLElement {\n    const { rawElement, children, ...props } = element.props;\n    const dom = rawElement as HTMLElement;\n    const currentKey = key.clone().push(dom.tagName as string);\n    const isProperty = (propKey: string) => propKey !== 'children';\n    render(children as VirtualElement[], dom, currentKey) as HTMLElement;\n    Object.keys(props)\n        .filter(isProperty)\n        .forEach(name => attachPropertyToElement(dom, name, props[name]));\n    return dom;\n}\n","import { KeyBuilder } from \"@/common/key-builder/key-builder\";\nimport { ELEMENT_TYPE } from \"@/constants\";\nimport { elementRender } from \"./element-render\";\nimport { textRender } from \"./text-render\";\nimport { childrenRender } from \"./children-render\";\nimport { signalRender } from \"./signal-render\";\nimport { Signal } from \"@/core/signal\";\nimport { componentRender } from \"./component-render\";\nimport { renderSSR } from \"@/core/ssr\";\nimport { controlFlowRender } from \"./control-flow-render\";\nimport { rawRender } from \"./raw-render\";\nimport type { ElementType, VirtualElement } from \"@/types\";\n\nfunction render(element: VirtualElement[], container: HTMLElement, key: KeyBuilder): HTMLElement | Text;\nfunction render(element: VirtualElement, container: HTMLElement | undefined, key: KeyBuilder): HTMLElement | Text;\nfunction render(element: VirtualElement | VirtualElement[], container: HTMLElement | undefined, key: KeyBuilder): HTMLElement | Text;\nfunction render(element: VirtualElement | VirtualElement[], container: HTMLElement | undefined, key: KeyBuilder): HTMLElement | Text {\n    if (Array.isArray(element)) {\n        if (!container)\n            throw new Error('Invalid container element for multiple rendering, container must be provided');\n        return childrenRender(element, container, key, render);\n    }\n    switch (element.type as ElementType) {\n\n        case /* edge node */\n            ELEMENT_TYPE.TEXT:\n            return textRender(element.props.nodeValue as string);\n\n        case /* non edge node - internally glue any child nodes */\n            ELEMENT_TYPE.DOM:\n            return elementRender(element, key, render);\n\n        case /* edge node */\n            ELEMENT_TYPE.RAW:\n            if (!element.props.rawElement)\n                throw new Error('Invalid raw element for raw rendering');\n            return rawRender(element, key, render);\n\n        case /* edge node */\n            ELEMENT_TYPE.EMPTY:\n            if (!container)\n                throw new Error('Invalid container element for empty rendering');\n            return container;\n\n        case /* edge node */\n            ELEMENT_TYPE.SIGNAL:\n            if (!container)\n                throw new Error('Invalid container element for signal rendering, container must be provided');\n            return signalRender(element.props.signal as Signal, container);\n\n        case /* non edge node */\n            ELEMENT_TYPE.COMPONENT:\n            if (!container)\n                throw new Error('Invalid container element for component rendering, container must be provided');\n            return componentRender(element, container, key, render);\n\n        case /* non edge node - internally glue any child nodes */\n            ELEMENT_TYPE.CONTROL_FLOW:\n            if (!container)\n                throw new Error('Invalid container element for control flow rendering, container must be provided');\n            return controlFlowRender(element, container, key, render);\n\n        case /* non edge node - internally glue any child nodes */\n            ELEMENT_TYPE.SSR:\n            if (!container)\n                throw new Error('Invalid container element for SSR rendering');\n            return renderSSR(element, container, key, render);\n\n        default:\n            throw new Error(`Invalid element type: ${element.type}`);\n    }\n}\n\n\nexport { render };"],"names":["SigSymbol","RenderedRootSymbol","ElementKeySymbol","ForControlFlow","IfControlFlow","AwaitControlFlow","SSRSymbol","getRenderedRoot","rootId","getGlobal","_a","setRenderedRoot","addRoot","root","createSig","addGlobal","DOM","dom","newNode","start","end","logger","elements","current","next","tagName","key","options","element","comment","parent","child","error","referenceNode","value","values","v","createComponentContext","component","container","activeContextStack","getActiveContext","setActiveContext","context","removeActiveContext","contextMap","addComponentContext","getAllSubContexts","contextKey","keyA","keyB","_","onDisconnect","cb","runOnDisconnectHooks","onConnect","runOnConnectHooks","globalSubscribersMap","registerSignalSubscription","node","signalOrSub","sub","isSignal","createHookExecutioner","mutations","mutation","elementKey","subEntry","signal","observeRoot","hookExecutioner","attachPropertyToElement","name","attachClassComplexValueToElementClass","attachStyleToElement","attachSignalToElement","attachEventToElement","attachAttributeToElement","style","unsubscribe","styleValue","attachStylePropertyToElement","attachSignalToElementStyle","styleProperty","validStyleKey","match","eventType","property","attachSignalToElementClass","currentSidClass","sidClass","lastValue","item","ignoredProps","isProperty","propKey","elementRender","render","children","props","currentKey","renderResult","handleElementRef","renderedDomElement","ref","keyBuilder","keyParts","parts","index","textRender","text","childrenRender","isVirtualElement","isNodeElement","isNodeText","childKey","childDom","signalRender","childIndex","onCreate","runOnCreateHooks","componentRender","componentElement","componentFunction","componentVirtualElementOutput","domElement","adaptVirtualElementChild","groupBy","arr","keyFn","acc","obj","groupKey","parseHtml","html","processedDom","appendQueryParams","url","params","urlObj","insertPathParams","result","pathname","search","hash","regex","fetchHtml","ssrFetch","rootOptions","margeUrl","concatUrl","fetchSSRHtml","query","config","urlWithQuery","urlWithParams","_b","margeConfig","_c","baseUrl","isFullUrl","SSR","ELEMENT_TYPE","renderSSR","urlOrHandlerOrFetchConfig","allowOutlet","fallback","errorElement","onError","rerun","selector","fallbackDom","prevSSRDom","memoChildrenDom","placeholderElm","signals","isArgumentSignaled","fallbackKey","renderListener","fetchHtmlPromise","getSignalValue","asyncRenderSSR","injectResolvedDom","listen","provideHtmlPromise","memoChildrenRecord","htmlString","htmlDom","applySelector","ssrKey","virtualElementChildren","namedChildren","outletName","domOutlet","memoChildren","outletKey","domChildren","i","errorDom","fragmentExtraction","renderedElement","isPromise","Await","CONTROL_FLOW_TAG","renderAwait","renderSandboxContainer","createElement","memoAwaitElementDom","currentKeyString","startComment","endComment","onResolve","errorElm","executeRender","moduleOrElement","renderedResult","awaitElementDom","For","renderFor","list","factory","empty","memo","indexFn","indexItems","listSignal","emptyDom","mapSignal","items","indexValue","indexItem","item$","map","elementDom","If","renderIf","condition","then","previousConditionValue","thenElementDom","fallbackElementDom","conditionValue","booleanConditionValue","currentRenderedDom","thenKey","virtualThen","renderSwitch","memoCaseMap","memoAll","currentCaseIdx","matched","idx","Case","shouldMemo","memoElement","currentMatchedResult","caseKey","virtualCaseChildren","caseDom","foundDefault","Default","defaultKey","virtualDefaultChildren","defaultDom","Switch","controlFlowRender","rawRender","rawElement"],"mappings":"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"}