@reckona/mreact-compat 0.0.186 → 0.0.188

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.
@@ -1 +1 @@
1
- {"version":3,"file":"server-render.js","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Activity,\n FORWARD_REF_TYPE,\n Fragment,\n MEMO_TYPE,\n Profiler,\n isReactCompatElement,\n type ForwardRefType,\n type MemoType,\n type ReactCompatElement,\n type ReactCompatNode,\n} from \"./element.js\";\nimport {\n consumerContext,\n isReactCompatConsumer,\n isReactCompatProvider,\n renderWithContextProvider,\n useContext,\n} from \"./context.js\";\nimport {\n createCacheScope,\n createRootRuntime,\n renderWithRootRuntime,\n runWithCacheScope,\n type RootRuntime,\n type RootRuntimeOptions,\n} from \"./hooks.js\";\nimport {\n isDangerousHtmlAttribute,\n isDangerousHtmlOptIn,\n isUnsafeMetaRefreshContent,\n isUnsafeUrlAttribute,\n} from \"./url-safety.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\nimport { isEventLikePropName, isVoidHtmlElement } from \"@reckona/mreact-shared\";\n\n/** Renders a React-compatible component to an HTML string. */\nexport function renderToString<TProps>(\n component:\n | ((props: TProps) => ReactCompatNode)\n | (new (props: TProps) => { render(): ReactCompatNode }),\n props?: TProps,\n options: RootRuntimeOptions = {},\n): string {\n const runtime = createRootRuntime(() => undefined, {\n ...options,\n idMode: \"server\",\n });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n const rendered = renderWithRootRuntime(runtime, \"0\", () => {\n if (isClassComponentType(component)) {\n const instance = new component(props as Record<string, unknown>);\n return instance.render();\n }\n\n return (component as (props: TProps) => ReactCompatNode)(props as TProps);\n });\n return typeof rendered === \"string\"\n ? rendered\n : renderNodeToString(rendered, runtime, \"0.0\");\n } catch (error) {\n if (isThenable(error)) {\n throw new Error(\n \"renderToString does not support Suspense. Use a streaming server renderer for components that suspend.\",\n );\n }\n\n throw error;\n } finally {\n runtime.dispose();\n }\n });\n}\n\n// Renders a single child value the way the interpreter renders expression\n// children: primitives escape, null/undefined/boolean render nothing, and\n// react nodes fall back to the interpreter. Compiled compat pages call this\n// for expression children whose runtime type is unknown.\nexport function renderChildToString(value: unknown): string {\n if (value === null || value === undefined || typeof value === \"boolean\") {\n return \"\";\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return escapeHtml(value);\n }\n\n const runtime = createRootRuntime(() => undefined, { idMode: \"server\" });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n return renderNodeToString(value as ReactCompatNode, runtime, \"0.0\");\n } finally {\n runtime.dispose();\n }\n });\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction renderNodeToString(\n node: ReactCompatNode,\n runtime: RootRuntime,\n path: string,\n): string {\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return \"\";\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return escapeHtml(node);\n }\n\n if (Array.isArray(node)) {\n let html = \"\";\n for (let index = 0; index < node.length; index += 1) {\n html += renderNodeToString(node[index], runtime, `${path}.${index}`);\n }\n return html;\n }\n\n if (!isReactCompatElement(node)) {\n return \"\";\n }\n\n return renderElementToString(node, runtime, path);\n}\n\nfunction renderElementToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n if (typeof element.type === \"string\") {\n if (element.type === \"textarea\") {\n return renderTextareaToString(element, runtime, path);\n }\n\n if (element.type === \"select\") {\n return renderSelectToString(element, runtime, path);\n }\n\n const attributes =\n element.type === \"input\"\n ? renderInputAttributesToString(element.props)\n : renderAttributesToString(element.props);\n if (isVoidHtmlElement(element.type)) {\n return `<${element.type}${attributes}/>`;\n }\n\n // Primitive children dominate real markup; serializing them inline skips\n // one recursive call and one child-path allocation per text leaf.\n const children = element.props.children;\n if (typeof children === \"string\" || typeof children === \"number\") {\n return `<${element.type}${attributes}>${escapeHtml(children)}</${element.type}>`;\n }\n\n return `<${element.type}${attributes}>${renderNodeToString(children, runtime, `${path}.children`)}</${element.type}>`;\n }\n\n if (element.type === Fragment) {\n return renderNodeToString(element.props.children, runtime, `${path}.fragment`);\n }\n\n if (element.type === Activity) {\n if ((element.props as { mode?: unknown }).mode === \"hidden\") {\n return \"\";\n }\n\n return `<!--&-->${renderNodeToString(element.props.children, runtime, `${path}.activity`)}<!--/&-->`;\n }\n\n if (element.type === Profiler) {\n return renderNodeToString(element.props.children, runtime, `${path}.profiler`);\n }\n\n if (isReactCompatProvider(element.type)) {\n return renderWithContextProvider(\n element.type,\n (element.props as { value?: unknown }).value,\n () => renderNodeToString(element.props.children, runtime, `${path}.provider`),\n );\n }\n\n if (isReactCompatConsumer(element.type)) {\n const children = element.props.children;\n\n if (typeof children === \"function\") {\n return renderNodeToString(\n (children as (value: unknown) => ReactCompatNode)(useContext(consumerContext(element.type))),\n runtime,\n `${path}.consumer`,\n );\n }\n\n return \"\";\n }\n\n if (isForwardRefType(element.type)) {\n const forwardRefType = element.type;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () =>\n forwardRefType.render(element.props, element.ref),\n ),\n runtime,\n `${path}.forwardRef`,\n );\n }\n\n if (isMemoType(element.type)) {\n return renderNodeToString(\n {\n ...element,\n type: element.type.type,\n },\n runtime,\n `${path}.memo`,\n );\n }\n\n if (isClassComponentType(element.type)) {\n const instance = new element.type(element.props);\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => instance.render()),\n runtime,\n `${path}.class`,\n );\n }\n\n if (typeof element.type === \"function\") {\n const component = element.type as (props: typeof element.props) => ReactCompatNode;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => component(element.props)),\n runtime,\n `${path}.0`,\n );\n }\n\n return \"\";\n}\n\nfunction renderAttributesToString(props: Record<string, unknown>): string {\n const skipUnsafeMetaRefreshContent = hasUnsafeMetaRefreshProps(props);\n\n let attributes = \"\";\n for (const name in props) {\n if (skipUnsafeMetaRefreshContent && name === \"content\") {\n continue;\n }\n attributes += renderHtmlAttribute(name, props[name]);\n }\n return attributes;\n}\n\nfunction hasUnsafeMetaRefreshProps(props: Record<string, unknown>): boolean {\n const content = props.content;\n if (typeof content !== \"string\") {\n return false;\n }\n\n const httpEquiv = props[\"http-equiv\"] ?? props.httpEquiv;\n return typeof httpEquiv === \"string\" && isUnsafeMetaRefreshContent(httpEquiv, content);\n}\n\nfunction isClassComponentType(\n value: unknown,\n): value is new (props: Record<string, unknown>) => { render(): ReactCompatNode } {\n return (\n typeof value === \"function\" &&\n typeof (value as { prototype?: { render?: unknown } }).prototype?.render === \"function\"\n );\n}\n\nfunction renderTextareaToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const value =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue ??\n element.props.children;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<textarea${attributes}>${renderNodeToString(value as ReactCompatNode, runtime, `${path}.textarea`)}</textarea>`;\n}\n\nfunction renderSelectToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const selectedValue =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<select${attributes}>${renderSelectChildrenToString(\n element.props.children,\n selectedValue,\n runtime,\n `${path}.select`,\n )}</select>`;\n}\n\nfunction renderSelectChildrenToString(\n children: ReactCompatNode,\n selectedValue: unknown,\n runtime: RootRuntime,\n path: string,\n): string {\n const childArray = Array.isArray(children) ? children : [children];\n\n return childArray.map((child, index) => {\n if (!isReactCompatElement(child) || child.type !== \"option\") {\n return renderNodeToString(child, runtime, `${path}.${index}`);\n }\n\n const optionValue =\n (child.props as { value?: unknown }).value ?? child.props.children;\n const selected =\n selectedValue !== undefined && String(optionValue) === String(selectedValue);\n const props = selected\n ? { ...child.props, selected: true }\n : child.props;\n\n return renderElementToString({ ...child, props }, runtime, `${path}.${index}`);\n }).join(\"\");\n}\n\nfunction renderInputAttributesToString(props: Record<string, unknown>): string {\n const hasValue = props.value !== undefined;\n const hasChecked = props.checked !== undefined;\n\n return Object.entries(props)\n .filter(([name]) =>\n !((name === \"defaultValue\" && hasValue) || (name === \"defaultChecked\" && hasChecked))\n )\n .sort(([leftName], [rightName]) =>\n Number(isInputValueAttribute(leftName)) - Number(isInputValueAttribute(rightName))\n )\n .map(([name, value]) => renderHtmlAttribute(toInputHtmlAttributeName(name), value))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n}\n\ntype AttributeNameClassification =\n | { kind: \"skip\" }\n | { kind: \"style\" }\n | {\n kind: \"attribute\";\n attributeName: string;\n booleanishString: boolean;\n dataAttribute: boolean;\n dangerousHtml: boolean;\n };\n\nconst ATTRIBUTE_CLASSIFICATION_CACHE = new Map<string, AttributeNameClassification>();\nconst ATTRIBUTE_CLASSIFICATION_CACHE_LIMIT = 1024;\nlet attributeClassificationCacheMissCount = 0;\n\nexport const __serverRenderAttributeCacheForTesting = {\n clear() {\n ATTRIBUTE_CLASSIFICATION_CACHE.clear();\n attributeClassificationCacheMissCount = 0;\n },\n missCount() {\n return attributeClassificationCacheMissCount;\n },\n size() {\n return ATTRIBUTE_CLASSIFICATION_CACHE.size;\n },\n};\n\nfunction renderHtmlAttribute(name: string, value: unknown): string {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"function\"\n ) {\n return \"\";\n }\n\n const classification = classifyAttributeName(name);\n\n if (classification.kind === \"skip\") {\n return \"\";\n }\n\n if (classification.kind === \"style\") {\n const style = renderStyleAttribute(value);\n return style === \"\" ? \"\" : ` style=\"${escapeHtml(style)}\"`;\n }\n\n const { attributeName } = classification;\n\n if (typeof value === \"boolean\" && classification.booleanishString) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (typeof value === \"boolean\" && classification.dataAttribute) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (value === false) {\n return \"\";\n }\n\n if (classification.dangerousHtml) {\n return isDangerousHtmlOptIn(value)\n ? ` ${attributeName}=\"${escapeHtml(value.__html)}\"`\n : \"\";\n }\n\n if (typeof value === \"object\") {\n return \"\";\n }\n\n if (value === true) {\n return ` ${attributeName}=\"\"`;\n }\n\n const stringValue = String(value);\n\n if (isUnsafeUrlAttribute(attributeName, stringValue)) {\n return \"\";\n }\n\n return ` ${attributeName}=\"${escapeHtml(stringValue)}\"`;\n}\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\nfunction classifyAttributeName(name: string): AttributeNameClassification {\n const cached = ATTRIBUTE_CLASSIFICATION_CACHE.get(name);\n if (cached !== undefined) {\n return cached;\n }\n\n attributeClassificationCacheMissCount += 1;\n\n const classification = createAttributeNameClassification(name);\n if (ATTRIBUTE_CLASSIFICATION_CACHE.size < ATTRIBUTE_CLASSIFICATION_CACHE_LIMIT) {\n ATTRIBUTE_CLASSIFICATION_CACHE.set(name, classification);\n }\n return classification;\n}\n\nfunction createAttributeNameClassification(name: string): AttributeNameClassification {\n if (\n name === \"children\" ||\n name === \"key\" ||\n name === \"ref\" ||\n isEventLikePropName(name)\n ) {\n return { kind: \"skip\" };\n }\n\n if (name === \"style\") {\n return { kind: \"style\" };\n }\n\n const attributeName = toHtmlAttributeName(name);\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName) || isEventLikePropName(attributeName)) {\n return { kind: \"skip\" };\n }\n\n return {\n kind: \"attribute\",\n attributeName,\n booleanishString: isBooleanishStringAttribute(attributeName),\n dataAttribute: isDataAttribute(attributeName),\n dangerousHtml: isDangerousHtmlAttribute(attributeName),\n };\n}\n\nfunction isBooleanishStringAttribute(attributeName: string): boolean {\n // Callers pass the already-mapped HTML attribute name.\n const lowerCased = attributeName.toLowerCase();\n return lowerCased.startsWith(\"aria-\") || BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);\n}\n\nfunction isDataAttribute(attributeName: string): boolean {\n return attributeName.toLowerCase().startsWith(\"data-\");\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction isInputValueAttribute(name: string): boolean {\n return name === \"value\" || name === \"defaultValue\";\n}\n\nfunction toInputHtmlAttributeName(name: string): string {\n if (name === \"defaultValue\") {\n return \"value\";\n }\n\n if (name === \"defaultChecked\") {\n return \"checked\";\n }\n\n return name;\n}\n\nfunction toHtmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst HTML_ATTRIBUTE_ALIASES: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n imageSrcSet: \"imagesrcset\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction renderStyleAttribute(value: unknown): string {\n if (typeof value !== \"object\" || value === null) {\n return \"\";\n }\n\n const styleProps = value as Record<string, unknown>;\n let css = \"\";\n for (const name in styleProps) {\n const propertyValue = styleProps[name];\n if (\n propertyValue === null ||\n propertyValue === undefined ||\n typeof propertyValue === \"boolean\" ||\n propertyValue === \"\"\n ) {\n continue;\n }\n\n css += css === \"\"\n ? `${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`\n : `;${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`;\n }\n return css;\n}\n\nfunction renderCssValue(name: string, value: unknown): string {\n if (typeof value !== \"number\" || value === 0 || isUnitlessCssProperty(name)) {\n return String(value);\n }\n\n return `${value}px`;\n}\n\nconst UPPERCASE_LETTER = /[A-Z]/;\nconst UPPERCASE_LETTER_GLOBAL = /[A-Z]/g;\n// Distinct camelCase style names per app are few; the cap only guards\n// pathological dynamically-generated property names.\nconst KEBAB_CASE_CACHE = new Map<string, string>();\nconst KEBAB_CASE_CACHE_LIMIT = 512;\n\nfunction kebabReplace(letter: string): string {\n return `-${letter.toLowerCase()}`;\n}\n\nfunction toKebabCase(value: string): string {\n if (!UPPERCASE_LETTER.test(value)) {\n return value;\n }\n\n let cached = KEBAB_CASE_CACHE.get(value);\n if (cached === undefined) {\n cached = value.replace(UPPERCASE_LETTER_GLOBAL, kebabReplace);\n if (KEBAB_CASE_CACHE.size < KEBAB_CASE_CACHE_LIMIT) {\n KEBAB_CASE_CACHE.set(value, cached);\n }\n }\n return cached;\n}\n\nfunction isUnitlessCssProperty(name: string): boolean {\n return (\n name === \"flex\" ||\n name === \"fontWeight\" ||\n name === \"lineHeight\" ||\n name === \"opacity\" ||\n name === \"order\" ||\n name === \"zIndex\" ||\n name === \"zoom\"\n );\n}\n\nfunction isForwardRefType(value: unknown): value is ForwardRefType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === FORWARD_REF_TYPE\n );\n}\n\nfunction isMemoType(value: unknown): value is MemoType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === MEMO_TYPE\n );\n}\n"]}
1
+ {"version":3,"file":"server-render.js","sourceRoot":"","sources":["../src/server-render.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,oBAAoB,GAKrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAC5B,SAE0D,EAC1D,KAAc,EACd,OAAO,GAAuB,EAAE;IAEhC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE;QACjD,GAAG,OAAO;QACV,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;gBACxD,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,KAAgC,CAAC,CAAC;oBACjE,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3B,CAAC;gBAED,OAAQ,SAAgD,CAAC,KAAe,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,QAAQ,KAAK,QAAQ;gBACjC,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,yDAAyD;AACzD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEzE,OAAO,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE;QAChD,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,KAAwB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAqB,EACrB,OAAoB,EACpB,IAAY;IAEZ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,OAAoB,EACpB,IAAY;IAEZ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,UAAU,GACd,OAAO,CAAC,IAAI,KAAK,OAAO;YACtB,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC,KAAK,CAAC;YAC9C,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,UAAU,IAAI,CAAC;QAC3C,CAAC;QAED,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjE,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC;QACnF,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,UAAU,IAAI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC;IACxH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAK,OAAO,CAAC,KAA4B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,WAAW,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC;IACvG,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,yBAAyB,CAC9B,OAAO,CAAC,IAAI,EACX,OAAO,CAAC,KAA6B,CAAC,KAAK,EAC5C,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAExC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,OAAO,kBAAkB,CACtB,QAAgD,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC5F,OAAO,EACP,GAAG,IAAI,WAAW,CACnB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;QACpC,OAAO,kBAAkB,CACvB,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CACxC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAClD,EACD,OAAO,EACP,GAAG,IAAI,aAAa,CACrB,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,kBAAkB,CACvB;YACE,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;SACxB,EACD,OAAO,EACP,GAAG,IAAI,OAAO,CACf,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,OAAO,kBAAkB,CACvB,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAC7D,OAAO,EACP,GAAG,IAAI,QAAQ,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAwD,CAAC;QACnF,OAAO,kBAAkB,CACvB,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACpE,OAAO,EACP,GAAG,IAAI,IAAI,CACZ,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAA8B;IAC9D,MAAM,4BAA4B,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAEtE,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,4BAA4B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvD,SAAS;QACX,CAAC;QACD,UAAU,IAAI,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,yBAAyB,CAAC,KAA8B;IAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;IACzD,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,UAAU;QAC3B,OAAQ,KAA8C,CAAC,SAAS,EAAE,MAAM,KAAK,UAAU,CACxF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAA2B,EAC3B,OAAoB,EACpB,IAAY;IAEZ,MAAM,KAAK,GACR,OAAO,CAAC,KAAqD,CAAC,KAAK;QACnE,OAAO,CAAC,KAAqD,CAAC,YAAY;QAC3E,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,CAAC;SAC/D,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACxD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC;SACvC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,YAAY,UAAU,IAAI,kBAAkB,CAAC,KAAwB,EAAE,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC;AAC1H,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA2B,EAC3B,OAAoB,EACpB,IAAY;IAEZ,MAAM,aAAa,GAChB,OAAO,CAAC,KAAqD,CAAC,KAAK;QACnE,OAAO,CAAC,KAAqD,CAAC,YAAY,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,CAAC;SAC/D,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACxD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC;SACvC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,UAAU,UAAU,IAAI,4BAA4B,CACzD,OAAO,CAAC,KAAK,CAAC,QAAQ,EACtB,aAAa,EACb,OAAO,EACP,GAAG,IAAI,SAAS,CACjB,WAAW,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CACnC,QAAyB,EACzB,aAAsB,EACtB,OAAoB,EACpB,IAAY;IAEZ,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEnE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACrC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5D,OAAO,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,WAAW,GACd,KAAK,CAAC,KAA6B,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrE,MAAM,QAAQ,GACZ,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/E,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAEhB,OAAO,qBAAqB,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CAAC,KAA8B;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAE/C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CACjB,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,UAAU,CAAC,CAAC,CACtF;SACA,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAChC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CACnF;SACA,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;SAClF,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC;SACvC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAaD,MAAM,8BAA8B,GAAG,IAAI,GAAG,EAAuC,CAAC;AACtF,MAAM,oCAAoC,GAAG,IAAI,CAAC;AAClD,IAAI,qCAAqC,GAAG,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,KAAK;QACH,8BAA8B,CAAC,KAAK,EAAE,CAAC;QACvC,qCAAqC,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS;QACP,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IACD,IAAI;QACF,OAAO,8BAA8B,CAAC,IAAI,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAAc;IACvD,IACE,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK,UAAU,EAC3B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAEnD,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7D,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,cAAc,CAAC;IAEzC,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAClE,OAAO,IAAI,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QAC/D,OAAO,IAAI,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,OAAO,oBAAoB,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,IAAI,aAAa,KAAK,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;YACnD,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,aAAa,KAAK,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,oBAAoB,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,aAAa,KAAK,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAEpD,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qCAAqC,IAAI,CAAC,CAAC;IAE3C,MAAM,cAAc,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,8BAA8B,CAAC,IAAI,GAAG,oCAAoC,EAAE,CAAC;QAC/E,8BAA8B,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAY;IACrD,IACE,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,KAAK;QACd,mBAAmB,CAAC,IAAI,CAAC,EACzB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;QACpF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,aAAa;QACb,gBAAgB,EAAE,2BAA2B,CAAC,aAAa,CAAC;QAC5D,aAAa,EAAE,eAAe,CAAC,aAAa,CAAC;QAC7C,aAAa,EAAE,wBAAwB,CAAC,aAAa,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,aAAqB;IACxD,uDAAuD;IACvD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAC/C,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,4BAA4B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,eAAe,CAAC,aAAqB;IAC5C,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS;IACnD,iBAAiB;IACjB,WAAW;IACX,YAAY;CACb,CAAC,CAAC;AAEH,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,CAAC;AACrD,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,sBAAsB,GAA2B;IACrD,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,KAAgC,CAAC;IACpD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IACE,aAAa,KAAK,IAAI;YACtB,aAAa,KAAK,SAAS;YAC3B,OAAO,aAAa,KAAK,SAAS;YAClC,aAAa,KAAK,EAAE,EACpB,CAAC;YACD,SAAS;QACX,CAAC;QAED,GAAG,IAAI,GAAG,KAAK,EAAE;YACf,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;YAC/D,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACjC,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AACzC,sEAAsE;AACtE,qDAAqD;AACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AACnD,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;QAC9D,IAAI,gBAAgB,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;YACnD,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,CACL,IAAI,KAAK,MAAM;QACf,IAAI,KAAK,YAAY;QACrB,IAAI,KAAK,YAAY;QACrB,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,OAAO;QAChB,IAAI,KAAK,QAAQ;QACjB,IAAI,KAAK,MAAM,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAgC,CAAC,QAAQ,KAAK,gBAAgB,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAgC,CAAC,QAAQ,KAAK,SAAS,CACzD,CAAC;AACJ,CAAC","sourcesContent":["import {\n Activity,\n FORWARD_REF_TYPE,\n Fragment,\n MEMO_TYPE,\n Profiler,\n isReactCompatElement,\n type ForwardRefType,\n type MemoType,\n type ReactCompatElement,\n type ReactCompatNode,\n} from \"./element.js\";\nimport {\n consumerContext,\n isReactCompatConsumer,\n isReactCompatProvider,\n renderWithContextProvider,\n useContext,\n} from \"./context.js\";\nimport {\n createCacheScope,\n createRootRuntime,\n renderWithRootRuntime,\n runWithCacheScope,\n type RootRuntime,\n type RootRuntimeOptions,\n} from \"./hooks.js\";\nimport {\n isDangerousHtmlAttribute,\n isDangerousHtmlOptIn,\n isUnsafeMetaRefreshContent,\n isUnsafeUrlAttribute,\n} from \"./url-safety.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\nimport { isEventLikePropName, isVoidHtmlElement } from \"@reckona/mreact-shared\";\n\n/** Renders a React-compatible component to an HTML string. */\nexport function renderToString<TProps>(\n component:\n | ((props: TProps) => ReactCompatNode)\n | (new (props: TProps) => { render(): ReactCompatNode }),\n props?: TProps,\n options: RootRuntimeOptions = {},\n): string {\n const runtime = createRootRuntime(() => undefined, {\n ...options,\n idMode: \"server\",\n });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n const rendered = renderWithRootRuntime(runtime, \"0\", () => {\n if (isClassComponentType(component)) {\n const instance = new component(props as Record<string, unknown>);\n return instance.render();\n }\n\n return (component as (props: TProps) => ReactCompatNode)(props as TProps);\n });\n return typeof rendered === \"string\"\n ? rendered\n : renderNodeToString(rendered, runtime, \"0.0\");\n } catch (error) {\n if (isThenable(error)) {\n throw new Error(\n \"renderToString does not support Suspense. Use a streaming server renderer for components that suspend.\",\n );\n }\n\n throw error;\n } finally {\n runtime.dispose();\n }\n });\n}\n\n// Renders a single child value the way the interpreter renders expression\n// children: primitives escape, null/undefined/boolean render nothing, and\n// react nodes fall back to the interpreter. Compiled compat pages call this\n// for expression children whose runtime type is unknown.\nexport function renderChildToString(value: unknown): string {\n if (value === null || value === undefined || typeof value === \"boolean\") {\n return \"\";\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return escapeHtml(value);\n }\n\n const runtime = createRootRuntime(() => undefined, { idMode: \"server\" });\n\n return runWithCacheScope(createCacheScope(), () => {\n try {\n return renderNodeToString(value as ReactCompatNode, runtime, \"0.0\");\n } finally {\n runtime.dispose();\n }\n });\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nfunction renderNodeToString(\n node: ReactCompatNode,\n runtime: RootRuntime,\n path: string,\n): string {\n if (node === null || node === undefined || typeof node === \"boolean\") {\n return \"\";\n }\n\n if (typeof node === \"string\" || typeof node === \"number\") {\n return escapeHtml(node);\n }\n\n if (Array.isArray(node)) {\n let html = \"\";\n for (let index = 0; index < node.length; index += 1) {\n html += renderNodeToString(node[index], runtime, `${path}.${index}`);\n }\n return html;\n }\n\n if (!isReactCompatElement(node)) {\n return \"\";\n }\n\n return renderElementToString(node, runtime, path);\n}\n\nfunction renderElementToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n if (typeof element.type === \"string\") {\n if (element.type === \"textarea\") {\n return renderTextareaToString(element, runtime, path);\n }\n\n if (element.type === \"select\") {\n return renderSelectToString(element, runtime, path);\n }\n\n const attributes =\n element.type === \"input\"\n ? renderInputAttributesToString(element.props)\n : renderAttributesToString(element.props);\n if (isVoidHtmlElement(element.type)) {\n return `<${element.type}${attributes}/>`;\n }\n\n // Primitive children dominate real markup; serializing them inline skips\n // one recursive call and one child-path allocation per text leaf.\n const children = element.props.children;\n if (typeof children === \"string\" || typeof children === \"number\") {\n return `<${element.type}${attributes}>${escapeHtml(children)}</${element.type}>`;\n }\n\n return `<${element.type}${attributes}>${renderNodeToString(children, runtime, `${path}.children`)}</${element.type}>`;\n }\n\n if (element.type === Fragment) {\n return renderNodeToString(element.props.children, runtime, `${path}.fragment`);\n }\n\n if (element.type === Activity) {\n if ((element.props as { mode?: unknown }).mode === \"hidden\") {\n return \"\";\n }\n\n return `<!--&-->${renderNodeToString(element.props.children, runtime, `${path}.activity`)}<!--/&-->`;\n }\n\n if (element.type === Profiler) {\n return renderNodeToString(element.props.children, runtime, `${path}.profiler`);\n }\n\n if (isReactCompatProvider(element.type)) {\n return renderWithContextProvider(\n element.type,\n (element.props as { value?: unknown }).value,\n () => renderNodeToString(element.props.children, runtime, `${path}.provider`),\n );\n }\n\n if (isReactCompatConsumer(element.type)) {\n const children = element.props.children;\n\n if (typeof children === \"function\") {\n return renderNodeToString(\n (children as (value: unknown) => ReactCompatNode)(useContext(consumerContext(element.type))),\n runtime,\n `${path}.consumer`,\n );\n }\n\n return \"\";\n }\n\n if (isForwardRefType(element.type)) {\n const forwardRefType = element.type;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () =>\n forwardRefType.render(element.props, element.ref),\n ),\n runtime,\n `${path}.forwardRef`,\n );\n }\n\n if (isMemoType(element.type)) {\n return renderNodeToString(\n {\n ...element,\n type: element.type.type,\n },\n runtime,\n `${path}.memo`,\n );\n }\n\n if (isClassComponentType(element.type)) {\n const instance = new element.type(element.props);\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => instance.render()),\n runtime,\n `${path}.class`,\n );\n }\n\n if (typeof element.type === \"function\") {\n const component = element.type as (props: typeof element.props) => ReactCompatNode;\n return renderNodeToString(\n renderWithRootRuntime(runtime, path, () => component(element.props)),\n runtime,\n `${path}.0`,\n );\n }\n\n return \"\";\n}\n\nfunction renderAttributesToString(props: Record<string, unknown>): string {\n const skipUnsafeMetaRefreshContent = hasUnsafeMetaRefreshProps(props);\n\n let attributes = \"\";\n for (const name in props) {\n if (skipUnsafeMetaRefreshContent && name === \"content\") {\n continue;\n }\n attributes += renderHtmlAttribute(name, props[name]);\n }\n return attributes;\n}\n\nfunction hasUnsafeMetaRefreshProps(props: Record<string, unknown>): boolean {\n const content = props.content;\n if (typeof content !== \"string\") {\n return false;\n }\n\n const httpEquiv = props[\"http-equiv\"] ?? props.httpEquiv;\n return typeof httpEquiv === \"string\" && isUnsafeMetaRefreshContent(httpEquiv, content);\n}\n\nfunction isClassComponentType(\n value: unknown,\n): value is new (props: Record<string, unknown>) => { render(): ReactCompatNode } {\n return (\n typeof value === \"function\" &&\n typeof (value as { prototype?: { render?: unknown } }).prototype?.render === \"function\"\n );\n}\n\nfunction renderTextareaToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const value =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue ??\n element.props.children;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<textarea${attributes}>${renderNodeToString(value as ReactCompatNode, runtime, `${path}.textarea`)}</textarea>`;\n}\n\nfunction renderSelectToString(\n element: ReactCompatElement,\n runtime: RootRuntime,\n path: string,\n): string {\n const selectedValue =\n (element.props as { value?: unknown; defaultValue?: unknown }).value ??\n (element.props as { value?: unknown; defaultValue?: unknown }).defaultValue;\n const attributes = Object.entries(element.props)\n .filter(([name]) => name !== \"value\" && name !== \"defaultValue\")\n .map(([name, child]) => renderHtmlAttribute(name, child))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n\n return `<select${attributes}>${renderSelectChildrenToString(\n element.props.children,\n selectedValue,\n runtime,\n `${path}.select`,\n )}</select>`;\n}\n\nfunction renderSelectChildrenToString(\n children: ReactCompatNode,\n selectedValue: unknown,\n runtime: RootRuntime,\n path: string,\n): string {\n const childArray = Array.isArray(children) ? children : [children];\n\n return childArray.map((child, index) => {\n if (!isReactCompatElement(child) || child.type !== \"option\") {\n return renderNodeToString(child, runtime, `${path}.${index}`);\n }\n\n const optionValue =\n (child.props as { value?: unknown }).value ?? child.props.children;\n const selected =\n selectedValue !== undefined && String(optionValue) === String(selectedValue);\n const props = selected\n ? { ...child.props, selected: true }\n : child.props;\n\n return renderElementToString({ ...child, props }, runtime, `${path}.${index}`);\n }).join(\"\");\n}\n\nfunction renderInputAttributesToString(props: Record<string, unknown>): string {\n const hasValue = props.value !== undefined;\n const hasChecked = props.checked !== undefined;\n\n return Object.entries(props)\n .filter(([name]) =>\n !((name === \"defaultValue\" && hasValue) || (name === \"defaultChecked\" && hasChecked))\n )\n .sort(([leftName], [rightName]) =>\n Number(isInputValueAttribute(leftName)) - Number(isInputValueAttribute(rightName))\n )\n .map(([name, value]) => renderHtmlAttribute(toInputHtmlAttributeName(name), value))\n .filter((attribute) => attribute !== \"\")\n .join(\"\");\n}\n\ntype AttributeNameClassification =\n | { kind: \"skip\" }\n | { kind: \"style\" }\n | {\n kind: \"attribute\";\n attributeName: string;\n booleanishString: boolean;\n dataAttribute: boolean;\n dangerousHtml: boolean;\n };\n\nconst ATTRIBUTE_CLASSIFICATION_CACHE = new Map<string, AttributeNameClassification>();\nconst ATTRIBUTE_CLASSIFICATION_CACHE_LIMIT = 1024;\nlet attributeClassificationCacheMissCount = 0;\n\nexport const __serverRenderAttributeCacheForTesting = {\n clear() {\n ATTRIBUTE_CLASSIFICATION_CACHE.clear();\n attributeClassificationCacheMissCount = 0;\n },\n missCount() {\n return attributeClassificationCacheMissCount;\n },\n size() {\n return ATTRIBUTE_CLASSIFICATION_CACHE.size;\n },\n};\n\nfunction renderHtmlAttribute(name: string, value: unknown): string {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"function\"\n ) {\n return \"\";\n }\n\n const classification = classifyAttributeName(name);\n\n if (classification.kind === \"skip\") {\n return \"\";\n }\n\n if (classification.kind === \"style\") {\n const style = renderStyleAttribute(value);\n return style === \"\" ? \"\" : ` style=\"${escapeHtml(style)}\"`;\n }\n\n const { attributeName } = classification;\n\n if (typeof value === \"boolean\" && classification.booleanishString) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (typeof value === \"boolean\" && classification.dataAttribute) {\n return ` ${attributeName}=\"${value ? \"true\" : \"false\"}\"`;\n }\n\n if (value === false) {\n return \"\";\n }\n\n if (classification.dangerousHtml) {\n return isDangerousHtmlOptIn(value)\n ? ` ${attributeName}=\"${escapeHtml(value.__html)}\"`\n : \"\";\n }\n\n if (typeof value === \"object\") {\n return \"\";\n }\n\n if (value === true) {\n return ` ${attributeName}=\"\"`;\n }\n\n const stringValue = String(value);\n\n if (isUnsafeUrlAttribute(attributeName, stringValue)) {\n return \"\";\n }\n\n return ` ${attributeName}=\"${escapeHtml(stringValue)}\"`;\n}\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\nfunction classifyAttributeName(name: string): AttributeNameClassification {\n const cached = ATTRIBUTE_CLASSIFICATION_CACHE.get(name);\n if (cached !== undefined) {\n return cached;\n }\n\n attributeClassificationCacheMissCount += 1;\n\n const classification = createAttributeNameClassification(name);\n if (ATTRIBUTE_CLASSIFICATION_CACHE.size < ATTRIBUTE_CLASSIFICATION_CACHE_LIMIT) {\n ATTRIBUTE_CLASSIFICATION_CACHE.set(name, classification);\n }\n return classification;\n}\n\nfunction createAttributeNameClassification(name: string): AttributeNameClassification {\n if (\n name === \"children\" ||\n name === \"key\" ||\n name === \"ref\" ||\n isEventLikePropName(name)\n ) {\n return { kind: \"skip\" };\n }\n\n if (name === \"style\") {\n return { kind: \"style\" };\n }\n\n const attributeName = toHtmlAttributeName(name);\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName) || isEventLikePropName(attributeName)) {\n return { kind: \"skip\" };\n }\n\n return {\n kind: \"attribute\",\n attributeName,\n booleanishString: isBooleanishStringAttribute(attributeName),\n dataAttribute: isDataAttribute(attributeName),\n dangerousHtml: isDangerousHtmlAttribute(attributeName),\n };\n}\n\nfunction isBooleanishStringAttribute(attributeName: string): boolean {\n // Callers pass the already-mapped HTML attribute name.\n const lowerCased = attributeName.toLowerCase();\n return lowerCased.startsWith(\"aria-\") || BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);\n}\n\nfunction isDataAttribute(attributeName: string): boolean {\n return attributeName.toLowerCase().startsWith(\"data-\");\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction isInputValueAttribute(name: string): boolean {\n return name === \"value\" || name === \"defaultValue\";\n}\n\nfunction toInputHtmlAttributeName(name: string): string {\n if (name === \"defaultValue\") {\n return \"value\";\n }\n\n if (name === \"defaultChecked\") {\n return \"checked\";\n }\n\n return name;\n}\n\nfunction toHtmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst HTML_ATTRIBUTE_ALIASES: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n imageSrcSet: \"imagesrcset\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction renderStyleAttribute(value: unknown): string {\n if (typeof value !== \"object\" || value === null) {\n return \"\";\n }\n\n const styleProps = value as Record<string, unknown>;\n let css = \"\";\n for (const name in styleProps) {\n const propertyValue = styleProps[name];\n if (\n propertyValue === null ||\n propertyValue === undefined ||\n typeof propertyValue === \"boolean\" ||\n propertyValue === \"\"\n ) {\n continue;\n }\n\n css += css === \"\"\n ? `${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`\n : `;${toKebabCase(name)}:${renderCssValue(name, propertyValue)}`;\n }\n return css;\n}\n\nfunction renderCssValue(name: string, value: unknown): string {\n if (typeof value !== \"number\" || value === 0 || isUnitlessCssProperty(name)) {\n return String(value);\n }\n\n return `${value}px`;\n}\n\nconst UPPERCASE_LETTER = /[A-Z]/;\nconst UPPERCASE_LETTER_GLOBAL = /[A-Z]/g;\n// Distinct camelCase style names per app are few; the cap only guards\n// pathological dynamically-generated property names.\nconst KEBAB_CASE_CACHE = new Map<string, string>();\nconst KEBAB_CASE_CACHE_LIMIT = 512;\n\nfunction kebabReplace(letter: string): string {\n return `-${letter.toLowerCase()}`;\n}\n\nfunction toKebabCase(value: string): string {\n if (!UPPERCASE_LETTER.test(value)) {\n return value;\n }\n\n let cached = KEBAB_CASE_CACHE.get(value);\n if (cached === undefined) {\n cached = value.replace(UPPERCASE_LETTER_GLOBAL, kebabReplace);\n if (KEBAB_CASE_CACHE.size < KEBAB_CASE_CACHE_LIMIT) {\n KEBAB_CASE_CACHE.set(value, cached);\n }\n }\n return cached;\n}\n\nfunction isUnitlessCssProperty(name: string): boolean {\n return (\n name === \"flex\" ||\n name === \"fontWeight\" ||\n name === \"lineHeight\" ||\n name === \"opacity\" ||\n name === \"order\" ||\n name === \"zIndex\" ||\n name === \"zoom\"\n );\n}\n\nfunction isForwardRefType(value: unknown): value is ForwardRefType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === FORWARD_REF_TYPE\n );\n}\n\nfunction isMemoType(value: unknown): value is MemoType {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { $$typeof?: unknown }).$$typeof === MEMO_TYPE\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-compat",
3
- "version": "0.0.186",
3
+ "version": "0.0.188",
4
4
  "description": "React-compatible runtime implementation for mreact.",
5
5
  "keywords": [
6
6
  "compatibility",
@@ -73,8 +73,8 @@
73
73
  "access": "public"
74
74
  },
75
75
  "dependencies": {
76
- "@reckona/mreact-reactive-core": "0.0.186",
77
- "@reckona/mreact-reactive-dom": "0.0.186",
78
- "@reckona/mreact-shared": "0.0.186"
76
+ "@reckona/mreact-reactive-core": "0.0.188",
77
+ "@reckona/mreact-reactive-dom": "0.0.188",
78
+ "@reckona/mreact-shared": "0.0.188"
79
79
  }
80
80
  }
package/src/element.ts CHANGED
@@ -103,6 +103,7 @@ export interface ReactCompatPortal {
103
103
 
104
104
  export interface ReactiveDomBlockResult {
105
105
  node: ChildNode;
106
+ afterCommit?: (() => void) | undefined;
106
107
  dispose?: (() => void) | undefined;
107
108
  }
108
109
 
@@ -86,6 +86,7 @@ import {
86
86
  type RenderOptions,
87
87
  withHydrationComponentStack,
88
88
  } from "./hydration.js";
89
+ import { withBatchedDelegatedRootReleases } from "@reckona/mreact-reactive-dom";
89
90
 
90
91
  interface MemoFiberState {
91
92
  props: Record<string, unknown>;
@@ -108,6 +109,7 @@ interface SuspenseFiberState {
108
109
 
109
110
  const committedPortalContainers = new Set<Element>();
110
111
  const pendingHostRefUpdates: { ref: unknown; node: unknown }[] = [];
112
+ const pendingReactiveDomBlockAfterCommits: (() => void)[] = [];
111
113
  const emptyInstanceKeys: string[] = [];
112
114
 
113
115
  interface FiberHydrationOptions extends RenderOptions {
@@ -278,6 +280,7 @@ export function commitHostFiberRoot(
278
280
  try {
279
281
  committedPortalContainers.clear();
280
282
  pendingHostRefUpdates.length = 0;
283
+ pendingReactiveDomBlockAfterCommits.length = 0;
281
284
  const commitPath = getRootCommitPath(options);
282
285
  if (!hasChildListMutation(finishedWork)) {
283
286
  commitHostDirtyChildrenOf(
@@ -288,6 +291,7 @@ export function commitHostFiberRoot(
288
291
  commitPath,
289
292
  options,
290
293
  );
294
+ flushPendingReactiveDomBlockAfterCommits();
291
295
  committed = true;
292
296
  return;
293
297
  }
@@ -302,6 +306,7 @@ export function commitHostFiberRoot(
302
306
  options,
303
307
  )
304
308
  ) {
309
+ flushPendingReactiveDomBlockAfterCommits();
305
310
  committed = true;
306
311
  return;
307
312
  }
@@ -311,12 +316,14 @@ export function commitHostFiberRoot(
311
316
  finishedWork.subtreeChildListChanged &&
312
317
  commitHostKeyedChildListMutation(finishedWork.child, root.container, root.container, commitPath, options)
313
318
  ) {
319
+ flushPendingReactiveDomBlockAfterCommits();
314
320
  committed = true;
315
321
  return;
316
322
  }
317
323
 
318
324
  const nodes = commitHostChildren(finishedWork.child, root.container, root.container, commitPath, options);
319
325
  syncChildNodes(root.container, nodes);
326
+ flushPendingReactiveDomBlockAfterCommits();
320
327
  committed = true;
321
328
  } finally {
322
329
  if (committed) {
@@ -340,15 +347,18 @@ export function commitHydratingHostFiberRoot(
340
347
  try {
341
348
  committedPortalContainers.clear();
342
349
  pendingHostRefUpdates.length = 0;
350
+ pendingReactiveDomBlockAfterCommits.length = 0;
343
351
  const eventRoot = root.container;
344
352
  const nodes = commitHostChildren(finishedWork.child, scope.parent, eventRoot, "", options);
345
353
  syncScopedChildNodes(scope.parent, scope.before, scope.after, nodes);
354
+ flushPendingReactiveDomBlockAfterCommits();
346
355
  committed = true;
347
356
  } finally {
348
357
  if (committed) {
349
358
  flushPendingHostRefUpdates();
350
359
  } else {
351
360
  pendingHostRefUpdates.length = 0;
361
+ pendingReactiveDomBlockAfterCommits.length = 0;
352
362
  }
353
363
  committedPortalContainers.clear();
354
364
  }
@@ -365,16 +375,18 @@ export function disposeHostFiberResources(fiber: Fiber | undefined): void {
365
375
  return;
366
376
  }
367
377
 
368
- // Dispose this fiber and its SUBTREE only — not its siblings. This is called
369
- // once per deleted fiber, and deleted siblings are disposed by their own
370
- // calls; walking siblings here re-walked the whole deleted list per deletion
371
- // (O(n^2) on a cleared 1k-row reactive list). The dedupe set is allocated
372
- // once for the subtree walk.
373
- const seen = new Set<unknown>();
374
- if (fiber.tag === "reactive-dom-block") {
375
- disposeReactiveDomBlockState(fiber.stateNode, seen);
376
- }
377
- disposeHostFiberChildResources(fiber.child, seen);
378
+ withBatchedDelegatedRootReleases(() => {
379
+ // Dispose this fiber and its SUBTREE only not its siblings. This is called
380
+ // once per deleted fiber, and deleted siblings are disposed by their own
381
+ // calls; walking siblings here re-walked the whole deleted list per deletion
382
+ // (O(n^2) on a cleared 1k-row reactive list). The dedupe set is allocated
383
+ // once for the subtree walk.
384
+ const seen = new Set<unknown>();
385
+ if (fiber.tag === "reactive-dom-block") {
386
+ disposeReactiveDomBlockState(fiber.stateNode, seen);
387
+ }
388
+ disposeHostFiberChildResources(fiber.child, seen);
389
+ });
378
390
  }
379
391
 
380
392
  export function disposeUnretainedHostFiberResources(
@@ -385,8 +397,10 @@ export function disposeUnretainedHostFiberResources(
385
397
  return;
386
398
  }
387
399
 
388
- const seen = new Set<unknown>();
389
- disposeUnretainedHostFiberSubtreeResources(fiber, seen, retained);
400
+ withBatchedDelegatedRootReleases(() => {
401
+ const seen = new Set<unknown>();
402
+ disposeUnretainedHostFiberSubtreeResources(fiber, seen, retained);
403
+ });
390
404
  }
391
405
 
392
406
  function disposeHostFiberChildResources(
@@ -2923,6 +2937,7 @@ function commitHostDirtyFiber(
2923
2937
  !(isDomElement && shouldPreserveContentEditableChildren(element, props, childNodes))
2924
2938
  ) {
2925
2939
  syncChildNodes(element as ParentNode, childNodes);
2940
+ flushPendingReactiveDomBlockAfterCommits();
2926
2941
  }
2927
2942
  } else if (fiber.subtreeFlags !== NoFlags) {
2928
2943
  commitHostDirtyChildrenOf(fiber, fiber.child, element, eventRoot, `${path}.c`, options);
@@ -3353,6 +3368,7 @@ function commitHostFiber(
3353
3368
 
3354
3369
  if (fiber.tag === "reactive-dom-block") {
3355
3370
  const node = getReactiveDomBlockNode(fiber.stateNode);
3371
+ enqueueReactiveDomBlockAfterCommit(fiber.stateNode);
3356
3372
  fiber.memoizedProps = fiber.pendingProps;
3357
3373
  finishCommittedFiber(fiber);
3358
3374
  return node === undefined ? [] : [node];
@@ -3427,6 +3443,7 @@ function commitHostFiber(
3427
3443
  !(isDomElement && shouldPreserveContentEditableChildren(element, props, childNodes))
3428
3444
  ) {
3429
3445
  syncChildNodes(element as ParentNode, childNodes);
3446
+ flushPendingReactiveDomBlockAfterCommits();
3430
3447
  }
3431
3448
  } else if (fiber.subtreeFlags !== NoFlags) {
3432
3449
  commitHostChildren(fiber.child, element, eventRoot, `${path}.c`, options);
@@ -3583,6 +3600,22 @@ function getReactiveDomBlockNode(state: unknown): ChildNode | undefined {
3583
3600
  return undefined;
3584
3601
  }
3585
3602
 
3603
+ function enqueueReactiveDomBlockAfterCommit(state: unknown): void {
3604
+ const afterCommit = (state as { afterCommit?: unknown } | undefined)?.afterCommit;
3605
+
3606
+ if (typeof afterCommit === "function") {
3607
+ pendingReactiveDomBlockAfterCommits.push(afterCommit as () => void);
3608
+ }
3609
+ }
3610
+
3611
+ function flushPendingReactiveDomBlockAfterCommits(): void {
3612
+ const pending = pendingReactiveDomBlockAfterCommits.splice(0);
3613
+
3614
+ for (const afterCommit of pending) {
3615
+ afterCommit();
3616
+ }
3617
+ }
3618
+
3586
3619
  function disposeReactiveDomBlockState(
3587
3620
  state: unknown,
3588
3621
  seen: Set<unknown>,
package/src/index.ts CHANGED
@@ -1,3 +1,7 @@
1
+ import { installCompatRenderValueNormalizer } from "@reckona/mreact-reactive-dom/compat-normalize";
2
+
3
+ installCompatRenderValueNormalizer();
4
+
1
5
  export {
2
6
  Component,
3
7
  PureComponent,
@@ -1,3 +1,4 @@
1
+ import { installCompatRenderValueNormalizer } from "@reckona/mreact-reactive-dom/compat-normalize";
1
2
  import {
2
3
  createElementFromJsxConfig,
3
4
  Fragment,
@@ -13,6 +14,8 @@ import type {
13
14
  ReactCompatNode,
14
15
  } from "./element.js";
15
16
 
17
+ installCompatRenderValueNormalizer();
18
+
16
19
  /** Fragment marker used by the automatic JSX runtime. */
17
20
  export { Fragment };
18
21
  /** Metadata key used by compiled JSX for reactive text bindings. */