Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const require_utils_html = require("../utils/html.js"); const require_jsx_constants = require("./constants.js"); const require_jsx_context = require("./context.js"); const require_jsx_base = require("./base.js"); const require_jsx_dom_components = require("./dom/components.js"); const require_jsx_streaming = require("./streaming.js"); //#region src/jsx/components.ts let errorBoundaryCounter = 0; const childrenToString = async (children) => { try { return children.flat().map(resolveChildEarly); } catch (e) { if (e instanceof Promise) { const resume = require_jsx_context.captureRenderContext(); await e; return resume(() => childrenToString(children)); } else throw e; } }; const resolveChildEarly = (child) => { if (child == null || typeof child === "boolean") return ""; else if (typeof child === "string" || Array.isArray(child)) return require_jsx_base.renderChildren([child]); else if (require_jsx_base.isUntrustedObject(child)) return require_jsx_base.renderUntrustedObject(child); else { const str = child.toString(); return str instanceof Promise ? str : require_utils_html.raw(str); } }; /** * @experimental * `ErrorBoundary` is an experimental feature. * The API might be changed. */ const ErrorBoundary = async ({ children, fallback, fallbackRender, onError }) => { if (!children) return require_utils_html.raw(""); if (!Array.isArray(children)) children = [children]; const nonce = require_jsx_context.useContext(require_jsx_streaming.StreamingContext)?.scriptNonce; let resume; const getResume = () => resume ||= require_jsx_context.captureRenderContext(); let fallbackStrPromise; const resolveFallbackStr = () => fallbackStrPromise ||= (async () => { const awaitedFallback = await fallback; if (awaitedFallback === null || awaitedFallback === void 0) return; if (typeof awaitedFallback === "string" || Array.isArray(awaitedFallback)) return getResume()(() => require_jsx_base.renderChildren([awaitedFallback])); if (require_jsx_base.isUntrustedObject(awaitedFallback)) return getResume()(() => require_jsx_base.renderUntrustedObject(awaitedFallback)); const fallbackResult = await getResume()(() => awaitedFallback.toString()); return require_utils_html.raw(fallbackResult, fallbackResult.callbacks || awaitedFallback.callbacks); })(); const renderFallback = async (error) => { const fallbackStr = await resolveFallbackStr(); return getResume()(async () => { onError?.(error); const fallbackRes = fallbackStr !== void 0 ? fallbackStr : fallbackRender && require_jsx_base.jsx(require_jsx_base.Fragment, {}, fallbackRender(error)) || ""; const fallbackResString = await require_jsx_base.Fragment({ children: fallbackRes }).toString(); return require_utils_html.raw(fallbackResString, fallbackResString.callbacks || fallbackRes.callbacks); }); }; let resArray = []; try { resArray = children.map(resolveChildEarly); } catch (e) { const resume = getResume(); if (e instanceof Promise) resArray = [e.then(() => resume(() => childrenToString(children))).catch((e) => renderFallback(e))]; else resArray = [await renderFallback(e)]; } if (resArray.some((res) => res instanceof Promise)) { getResume(); const index = errorBoundaryCounter++; const replaceRe = RegExp(`()(.*?)()`, "s"); let caught = false; const catchCallback = async ({ error, buffer }) => { if (caught) return ""; caught = true; const fallbackResString = await renderFallback(error); const fallbackCallbacks = fallbackResString.callbacks; if (buffer) { buffer[0] = buffer[0].replace(replaceRe, () => fallbackResString); return fallbackCallbacks?.length ? require_utils_html.raw("", fallbackCallbacks) : ""; } return require_utils_html.raw(`