UNPKG

woby

Version:

A high-performance framework with fine-grained observable/signal-based reactivity for building rich applications.

252 lines (251 loc) 10 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const setters = require("./setters-CyO2VUT6.cjs"); const create_element_ssr = require("./create_element.ssr-B13vRb_y.cjs"); const merge_style = require("./merge_style-DkxC2kon.cjs"); const fragment = require("./fragment-DZv7GBzl.cjs"); const root = require("./root-D1a_tPqg.cjs"); const template = require("./template-C8XYMS58.cjs"); const wrap_clone_element = require("./wrap_clone_element-C4XivH3I.cjs"); const Dynamic = ({ component, props /* , children */ }) => { if (setters.isFunction(component) || setters.isFunction(props)) { return merge_style.memo(() => { return merge_style.resolve(create_element_ssr.createElement( setters.get(component, false), setters.get(props) /* children */ )); }); } else { return create_element_ssr.createElement( component, props /* children */ ); } }; const registry = {}; const h = (type, props, ...children) => create_element_ssr.createElement(registry[type] || type, props, ...children); const register = (components) => void setters.assign(registry, components); const html = setters.assign(merge_style.htm.bind(h), { register }); const lazy = (fetcher) => { const fetcherOnce = setters.once(fetcher); const component = (props) => { const resource = merge_style.useResource(fetcherOnce); return merge_style.memo(() => { return merge_style.useResolved(resource, ({ pending, error, value }) => { if (pending) return; if (error) throw error; const component2 = "default" in value ? value.default : value; return merge_style.resolve(create_element_ssr.createElement(component2, props)); }); }); }; component.preload = () => { return new Promise((resolve2, reject) => { const resource = merge_style.useResource(fetcherOnce); merge_style.useResolved(resource, ({ pending, error }) => { if (pending) return; if (error) return reject(error); return resolve2(); }); }); }; return component; }; const setChildReplacementText = (child, childPrev) => { if (childPrev.nodeType === 3) { childPrev.nodeValue = child; return childPrev; } else { const parent = childPrev.parentElement; if (!parent) throw new Error("Invalid child replacement"); const textNode = setters.createText(child); parent.replaceChild(textNode, childPrev); return textNode; } }; const setChildStatic = (parent, fragment2, fragmentOnly, child, dynamic, stack) => { if (!dynamic && setters.isVoidChild(child)) return; const prev = setters.FragmentUtils.getChildren(fragment2); const prevIsArray = prev instanceof Array; const prevLength = prevIsArray ? prev.length : 1; const prevFirst = prevIsArray ? prev[0] : prev; const prevLast = prevIsArray ? prev[prevLength - 1] : prev; const prevSibling = (prevLast == null ? void 0 : prevLast.nextSibling) || null; if (prevLength === 0) { const type = typeof child; if (type === "string" || type === "number" || type === "bigint") { const textNode = setters.createText(child); if (!fragmentOnly) { parent.appendChild(textNode); } setters.FragmentUtils.replaceWithNode(fragment2, textNode); return; } else if (type === "object" && child !== null && typeof child.nodeType === "number") { const node = child; if (!fragmentOnly) { parent.insertBefore(node, null); } setters.FragmentUtils.replaceWithNode(fragment2, node); return; } } if (prevLength === 1) { const type = typeof child; if (type === "string" || type === "number" || type === "bigint") { const node = setChildReplacementText(String(child), prevFirst); setters.FragmentUtils.replaceWithNode(fragment2, node); return; } } const fragmentNext = setters.FragmentUtils.make(); const children = Array.isArray(child) ? child : [child]; for (let i = 0, l = children.length; i < l; i++) { const child2 = children[i]; const type = typeof child2; if (type === "string" || type === "number" || type === "bigint") { setters.FragmentUtils.pushNode(fragmentNext, setters.createText(child2)); } else if (type === "object" && child2 !== null && typeof child2.nodeType === "number") { setters.FragmentUtils.pushNode(fragmentNext, child2); } else if (type === "function") { const fragment22 = setters.FragmentUtils.make(); let childFragmentOnly = !fragmentOnly; setters.FragmentUtils.pushFragment(fragmentNext, fragment22); setters.resolveChild(child2, (child3, dynamic2, stack2) => { const fragmentOnly2 = childFragmentOnly; childFragmentOnly = false; setChildStatic(parent, fragment22, fragmentOnly2, child3, dynamic2, stack2); }, false, stack); } } let next = setters.FragmentUtils.getChildren(fragmentNext); let nextLength = fragmentNext.length; if (nextLength === 0 && prevLength === 1 && prevFirst.nodeType === 8) { return; } if (!fragmentOnly && (nextLength === 0 || prevLength === 1 && prevFirst.nodeType === 8 || children[setters.SYMBOL_UNCACHED])) { const { childNodes } = parent; if (childNodes.length === prevLength) { parent.textContent = ""; if (nextLength === 0) { const placeholder = setters.createComment(""); setters.FragmentUtils.pushNode(fragmentNext, placeholder); if (next !== fragmentNext.values) { next = placeholder; nextLength += 1; } } if (prevSibling) { if (next instanceof Array) { prevSibling.before.apply(prevSibling, next); } else { parent.insertBefore(next, prevSibling); } } else { if (next instanceof Array) { parent.append.apply(parent, next); } else { parent.append(next); } } setters.FragmentUtils.replaceWithFragment(fragment2, fragmentNext); return; } } if (nextLength === 0) { const placeholder = setters.createComment(""); setters.FragmentUtils.pushNode(fragmentNext, placeholder); if (next !== fragmentNext.values) { next = placeholder; nextLength += 1; } } if (!fragmentOnly) { setters.diff(parent, prev, next, prevSibling); } setters.FragmentUtils.replaceWithFragment(fragment2, fragmentNext); }; const setChild = (parent, child, fragment2 = setters.FragmentUtils.make(), stack) => { setters.resolveChild(child, setChildStatic.bind(void 0, parent, fragment2, false), false, stack); }; const renderToString = (child) => { const p = { children: null }; const stack = new Error(); setChild(p, child, setters.FragmentUtils.make(), stack); return p.children.flat(Infinity).join(""); }; exports.$$ = setters.get; exports.CONTEXTS_DATA = setters.CONTEXTS_DATA; exports.DIRECTIVES = setters.DIRECTIVES; exports.SYMBOLS_DIRECTIVES = setters.SYMBOLS_DIRECTIVES; exports.SYMBOL_CLONE = setters.SYMBOL_CLONE; exports.SYMBOL_OBSERVABLE = setters.SYMBOL_OBSERVABLE; exports.SYMBOL_OBSERVABLE_FROZEN = setters.SYMBOL_OBSERVABLE_FROZEN; exports.SYMBOL_OBSERVABLE_READABLE = setters.SYMBOL_OBSERVABLE_READABLE; exports.SYMBOL_OBSERVABLE_WRITABLE = setters.SYMBOL_OBSERVABLE_WRITABLE; exports.SYMBOL_SUSPENSE = setters.SYMBOL_SUSPENSE$1; exports.SYMBOL_SUSPENSE_COLLECTOR = setters.SYMBOL_SUSPENSE_COLLECTOR; exports.SYMBOL_TEMPLATE_ACCESSOR = setters.SYMBOL_TEMPLATE_ACCESSOR; exports.SYMBOL_UNCACHED = setters.SYMBOL_UNCACHED; exports.SYMBOL_UNTRACKED = setters.SYMBOL_UNTRACKED; exports.SYMBOL_UNTRACKED_UNWRAPPED = setters.SYMBOL_UNTRACKED_UNWRAPPED; exports.isBatching = setters.isBatching; exports.isObservable = setters.isObservable; exports.isStore = setters.isStore; exports.store = setters.store; exports.untrack = setters.untrack; exports.useCleanup = setters.cleanup; exports.useEffect = setters.effect; exports.useMicrotask = setters.useMicrotask; exports.createElement = create_element_ssr.createElement; exports.h = create_element_ssr.createElement; exports.$ = merge_style.observable; exports.ErrorBoundary = merge_style.ErrorBoundary; exports.For = merge_style.For; exports.If = merge_style.If; exports.Suspense = merge_style.Suspense; exports.Switch = merge_style.Switch; exports.Ternary = merge_style.Ternary; exports.batch = merge_style.batch; exports.createContext = merge_style.createContext; exports.createDirective = merge_style.createDirective; exports.hmr = merge_style.hmr; exports.mergeStyles = merge_style.mergeStyles; exports.resolve = merge_style.resolve; exports.tick = merge_style.tick; exports.useAbortController = merge_style.useAbortController; exports.useAbortSignal = merge_style.useAbortSignal; exports.useAnimationFrame = merge_style.useAnimationFrame; exports.useAnimationLoop = merge_style.useAnimationLoop; exports.useBoolean = merge_style.boolean; exports.useContext = merge_style.useContext; exports.useDisposed = merge_style.disposed; exports.useEventListener = merge_style.useEventListener; exports.useFetch = merge_style.useFetch; exports.useIdleCallback = merge_style.useIdleCallback; exports.useIdleLoop = merge_style.useIdleLoop; exports.useInterval = merge_style.useInterval; exports.useMemo = merge_style.memo; exports.usePromise = merge_style.usePromise; exports.useReadonly = merge_style.readonly; exports.useResolved = merge_style.useResolved; exports.useResource = merge_style.useResource; exports.useSelector = merge_style.selector; exports.useSuspended = merge_style.suspended; exports.useTimeout = merge_style.useTimeout; exports.useUntracked = merge_style.untracked; exports.Fragment = fragment.Fragment; exports.useRoot = root.root; exports.template = template.template; exports.wrapCloneElement = wrap_clone_element.wrapCloneElement; exports.Dynamic = Dynamic; exports.html = html; exports.lazy = lazy; exports.render = renderToString; exports.renderToString = renderToString; //# sourceMappingURL=ssr.cjs.js.map