// src/jsx/components.ts import { raw } from "../helper/html/index.js"; import { HtmlEscapedCallbackPhase, resolveCallback } from "../utils/html.js"; import { DOM_RENDERER } from "./constants.js"; import { ErrorBoundary as ErrorBoundaryDomRenderer } from "./dom/components.js"; var errorBoundaryCounter = 0; var childrenToString = async (children) => { try { return children.flat().map((c) => c == null || typeof c === "boolean" ? "" : c.toString()); } catch (e) { if (e instanceof Promise) { await e; return childrenToString(children); } else { throw e; } } }; var ErrorBoundary = async ({ children, fallback, fallbackRender, onError }) => { if (!children) { return raw(""); } if (!Array.isArray(children)) { children = [children]; } let fallbackStr; const fallbackRes = (error) => { onError?.(error); return (fallbackStr || fallbackRender?.(error) || "").toString(); }; let resArray = []; try { resArray = children.map( (c) => c == null || typeof c === "boolean" ? "" : c.toString() ); } catch (e) { fallbackStr = await fallback?.toString(); if (e instanceof Promise) { resArray = [ e.then(() => childrenToString(children)).catch((e2) => fallbackRes(e2)) ]; } else { resArray = [fallbackRes(e)]; } } if (resArray.some((res) => res instanceof Promise)) { fallbackStr ||= await fallback?.toString(); const index = errorBoundaryCounter++; const replaceRe = RegExp(`(.*?)(.*?)()`); const caught = false; const catchCallback = ({ error, buffer }) => { if (caught) { return ""; } const fallbackResString = fallbackRes(error); if (buffer) { buffer[0] = buffer[0].replace(replaceRe, fallbackResString); } return buffer ? "" : `