@tanstack/redact 0.0.19 → 0.0.21

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,2 @@
1
+ export declare const STRING_BOOLEAN_ATTRS: Set<string>;
1
2
  export declare function attributeName(name: string, isSvg?: boolean): string;
@@ -1,4 +1,9 @@
1
1
  // packages/redact/src/core/attributes.ts
2
+ var STRING_BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
3
+ "contenteditable",
4
+ "draggable",
5
+ "spellcheck"
6
+ ]);
2
7
  function attributeName(name, isSvg = false) {
3
8
  if (isSvg && name !== "viewBox" && SVG_KEBAB_PREFIX.test(name)) {
4
9
  return name.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase());
@@ -14,6 +19,7 @@ function attributeName(name, isSvg = false) {
14
19
  }
15
20
  var SVG_KEBAB_PREFIX = /^(?:clip|fill|stroke)/;
16
21
  export {
22
+ STRING_BOOLEAN_ATTRS,
17
23
  attributeName
18
24
  };
19
25
  //# sourceMappingURL=attributes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/attributes.ts"],
4
- "sourcesContent": ["export function attributeName(name: string, isSvg = false): string {\n if (isSvg && name !== 'viewBox' && SVG_KEBAB_PREFIX.test(name)) {\n return name.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase())\n }\n if (name === 'className') return 'class'\n if (name === 'htmlFor') return 'for'\n if (name === 'httpEquiv') return 'http-equiv'\n if (name === 'acceptCharset') return 'accept-charset'\n if (name === 'crossOrigin') return 'crossorigin'\n if (name === 'noModule') return 'nomodule'\n if (name === 'viewBox') return 'viewBox'\n return name.startsWith('aria-') || name.startsWith('data-')\n ? name\n : name.toLowerCase()\n}\n\nconst SVG_KEBAB_PREFIX = /^(?:clip|fill|stroke)/\n"],
5
- "mappings": ";AAAO,SAAS,cAAc,MAAc,QAAQ,OAAe;AACjE,MAAI,SAAS,SAAS,aAAa,iBAAiB,KAAK,IAAI,GAAG;AAC9D,WAAO,KAAK,QAAQ,UAAU,CAAC,MAAM,MAAM,EAAE,YAAY,CAAC;AAAA,EAC5D;AACA,MAAI,SAAS,YAAa,QAAO;AACjC,MAAI,SAAS,UAAW,QAAO;AAC/B,MAAI,SAAS,YAAa,QAAO;AACjC,MAAI,SAAS,gBAAiB,QAAO;AACrC,MAAI,SAAS,cAAe,QAAO;AACnC,MAAI,SAAS,WAAY,QAAO;AAChC,MAAI,SAAS,UAAW,QAAO;AAC/B,SAAO,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,OAAO,IACtD,OACA,KAAK,YAAY;AACvB;AAEA,IAAM,mBAAmB;",
4
+ "sourcesContent": ["export const STRING_BOOLEAN_ATTRS = new Set([\n 'contenteditable',\n 'draggable',\n 'spellcheck',\n])\n\nexport function attributeName(name: string, isSvg = false): string {\n if (isSvg && name !== 'viewBox' && SVG_KEBAB_PREFIX.test(name)) {\n return name.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase())\n }\n if (name === 'className') return 'class'\n if (name === 'htmlFor') return 'for'\n if (name === 'httpEquiv') return 'http-equiv'\n if (name === 'acceptCharset') return 'accept-charset'\n if (name === 'crossOrigin') return 'crossorigin'\n if (name === 'noModule') return 'nomodule'\n if (name === 'viewBox') return 'viewBox'\n return name.startsWith('aria-') || name.startsWith('data-')\n ? name\n : name.toLowerCase()\n}\n\nconst SVG_KEBAB_PREFIX = /^(?:clip|fill|stroke)/\n"],
5
+ "mappings": ";AAAO,IAAM,uBAAuB,oBAAI,IAAI;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,cAAc,MAAc,QAAQ,OAAe;AACjE,MAAI,SAAS,SAAS,aAAa,iBAAiB,KAAK,IAAI,GAAG;AAC9D,WAAO,KAAK,QAAQ,UAAU,CAAC,MAAM,MAAM,EAAE,YAAY,CAAC;AAAA,EAC5D;AACA,MAAI,SAAS,YAAa,QAAO;AACjC,MAAI,SAAS,UAAW,QAAO;AAC/B,MAAI,SAAS,YAAa,QAAO;AACjC,MAAI,SAAS,gBAAiB,QAAO;AACrC,MAAI,SAAS,cAAe,QAAO;AACnC,MAAI,SAAS,WAAY,QAAO;AAChC,MAAI,SAAS,UAAW,QAAO;AAC/B,SAAO,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,OAAO,IACtD,OACA,KAAK,YAAY;AACvB;AAEA,IAAM,mBAAmB;",
6
6
  "names": []
7
7
  }
package/dist/dom/dom.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // packages/redact/src/dom/dom.ts
2
- import { attributeName } from "../core/attributes";
2
+ import { attributeName, STRING_BOOLEAN_ATTRS } from "../core/attributes";
3
3
  var SVG_NS = "http://www.w3.org/2000/svg";
4
4
  var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
5
5
  "allowfullscreen",
@@ -35,10 +35,7 @@ var IDL_ATTRS = /* @__PURE__ */ new Set([
35
35
  "disabled",
36
36
  "multiple",
37
37
  "muted",
38
- "readonly",
39
- "contentEditable",
40
- "spellcheck",
41
- "draggable"
38
+ "readonly"
42
39
  ]);
43
40
  function createHostNode(type, isSvg) {
44
41
  if (isSvg || type === "svg") {
@@ -96,6 +93,11 @@ function setProp(el, name, next, prev, isSvg) {
96
93
  else el.setAttribute("for", "" + next);
97
94
  return;
98
95
  }
96
+ if (STRING_BOOLEAN_ATTRS.has(attr)) {
97
+ if (next == null) el.removeAttribute(attr);
98
+ else el.setAttribute(attr, "" + next);
99
+ return;
100
+ }
99
101
  if (!isSvg && IDL_ATTRS.has(name) && name in el) {
100
102
  try {
101
103
  ;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/dom/dom.ts"],
4
- "sourcesContent": ["import { attributeName } from '../core/attributes'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n])\n\nconst IDL_ATTRS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'multiple',\n 'muted',\n 'readonly',\n 'contentEditable',\n 'spellcheck',\n 'draggable',\n])\n\nexport function createHostNode(type: string, isSvg: boolean): Element {\n if (isSvg || type === 'svg') {\n return document.createElementNS(SVG_NS, type)\n }\n return document.createElement(type)\n}\n\nexport function isSvgElement(el: Element): boolean {\n return (el as any).ownerSVGElement !== undefined || el.tagName === 'svg'\n}\n\nexport function setProp(\n el: Element,\n name: string,\n next: any,\n prev: any,\n isSvg: boolean,\n): void {\n if (name === 'children' || name === 'key' || name === 'ref') return\n const attr = attributeName(name, isSvg)\n\n // defaultValue / defaultChecked are IDL-property-only \u2014 they seed the\n // initial value/checked of a form control on first mount and must NOT be\n // emitted as HTML attributes (which would leak as `defaultValue=\"...\"`).\n // Setting `el.defaultValue` on a fresh control also sets the initial\n // `el.value`, which is what consumers expect. Skip on hydrated DOM so we\n // don't clobber a live user-typed value.\n if (name === 'defaultValue' || name === 'defaultChecked') {\n if (prev === undefined && next != null) {\n try {\n ;(el as any)[name] = next\n } catch {}\n }\n return\n }\n\n if (name === 'className') {\n if (isSvg) {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n } else {\n ;(el as HTMLElement).className = next == null ? '' : '' + next\n }\n return\n }\n\n if (name === 'class') {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n return\n }\n\n if (name === 'style') {\n setStyle(el as HTMLElement, next, prev)\n return\n }\n\n if (name === 'dangerouslySetInnerHTML') {\n const nextHtml = next?.__html ?? ''\n const prevHtml = prev?.__html ?? ''\n if (nextHtml !== prevHtml) (el as HTMLElement).innerHTML = nextHtml\n return\n }\n\n if (name[0] === 'o' && name[1] === 'n') {\n setEventHandler(el, name, next, prev)\n return\n }\n\n if (name === 'htmlFor') {\n if (next == null) el.removeAttribute('for')\n else el.setAttribute('for', '' + next)\n return\n }\n\n if (!isSvg && IDL_ATTRS.has(name) && name in el) {\n try {\n ;(el as any)[name] = next == null ? '' : next\n return\n } catch {}\n }\n\n if (BOOLEAN_ATTRS.has(name.toLowerCase())) {\n if (next) el.setAttribute(attr, '')\n else el.removeAttribute(attr)\n return\n }\n\n // aria-* and data-* attributes stringify booleans to `\"true\"`/`\"false\"`\n // rather than using the HTML boolean-attribute presence/absence semantics.\n // This matches React and the ARIA spec (aria-hidden=\"false\" is meaningful).\n if (name.length > 5 && (name.charCodeAt(0) === 97 /* a */ || name.charCodeAt(0) === 100 /* d */)) {\n if (name.startsWith('aria-') || name.startsWith('data-')) {\n if (next == null) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(attr)\n } else if (next === true) {\n el.setAttribute(attr, '')\n } else {\n el.setAttribute(attr, '' + next)\n }\n}\n\nfunction setStyle(el: HTMLElement, next: any, prev: any): void {\n const style = el.style\n if (typeof next === 'string') {\n style.cssText = next\n return\n }\n if (typeof prev === 'string') style.cssText = ''\n if (prev && typeof prev === 'object') {\n for (const k in prev) {\n if (!next || !(k in next)) setStyleProperty(style, k, '')\n }\n }\n if (next && typeof next === 'object') {\n for (const k in next) {\n if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k])\n }\n }\n}\n\nfunction setStyleProperty(style: CSSStyleDeclaration, key: string, value: any): void {\n if (key[0] === '-') {\n style.setProperty(key, value == null ? '' : '' + value)\n } else if (value == null || value === '') {\n ;(style as any)[key] = ''\n } else if (typeof value === 'number' && !UNITLESS_STYLE.has(key)) {\n ;(style as any)[key] = value + 'px'\n } else {\n ;(style as any)[key] = '' + value\n }\n}\n\nconst UNITLESS_STYLE = new Set([\n 'animationIterationCount',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridArea',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n])\n\nexport interface SyntheticEvent extends Event {\n nativeEvent: Event\n isDefaultPrevented(): boolean\n isPropagationStopped(): boolean\n persist(): void\n currentTarget: EventTarget & Element\n}\n\nfunction setEventHandler(el: Element, name: string, next: any, prev: any): void {\n // Only function handlers are accepted. Reject strings/objects/etc \u2014 the\n // legacy `onclick=\"...\"` HTML attribute (string handler) is a known XSS\n // vector if a parent spreads untrusted props onto a host element. React\n // also ignores non-function handlers.\n if (next != null && typeof next != 'function') next = null\n\n const capture = name.endsWith('Capture')\n const reactEventName = name.slice(2, capture ? -7 : undefined)\n const eventName = domEventFor(reactEventName, el)\n\n // Key by the React prop name (not DOM event name) so `onChange` and\n // `onInput` on the same text input \u2014 which both dispatch from the native\n // `input` event \u2014 can coexist without clobbering each other's handlers.\n const handlers = ((el as any).__handlers ||= Object.create(null))\n const key = name\n\n const existing = handlers[key]\n\n if (existing && !next) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n handlers[key] = null\n return\n }\n\n if (!existing && next) {\n const entry = {\n current: next as Function,\n listener: null as any,\n event: eventName,\n capture,\n }\n entry.listener = (e: Event) => {\n // React hands handlers a SyntheticEvent that carries `.nativeEvent`.\n // Many libraries check `event.nativeEvent.isComposing` (react-instantsearch)\n // or `event.nativeEvent.shiftKey` (UI kits) \u2014 without the alias they throw\n // on `undefined.foo`. Aliasing the native event to itself is the cheapest\n // way to satisfy the shape without building a full synthetic layer.\n if ((e as any).nativeEvent === undefined) (e as any).nativeEvent = e\n entry.current(e)\n }\n handlers[key] = entry\n el.addEventListener(eventName, entry.listener, capture)\n return\n }\n\n if (existing) {\n // Re-bind if the effective DOM event changed (e.g. <input> whose `type`\n // flipped from \"text\" to \"checkbox\" \u2014 onChange should now follow `change`\n // instead of `input`). This is rare but keeps semantics correct.\n if (existing.event !== eventName || existing.capture !== capture) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n existing.event = eventName\n existing.capture = capture\n el.addEventListener(eventName, existing.listener, capture)\n }\n existing.current = next\n }\n}\n\nfunction domEventFor(reactEventName: string, el: Element): string {\n const lower = reactEventName.toLowerCase()\n // React's `onChange` on text-like <input> and <textarea> maps to the\n // native `input` event so handlers fire on every keystroke. On checkbox,\n // radio, file inputs, and <select>, React's `onChange` maps to the\n // native `change` event (which fires on click / option select).\n if (lower === 'change') {\n const tag = el.tagName\n if (tag === 'TEXTAREA') return 'input'\n if (tag === 'INPUT') {\n const type = ((el as HTMLInputElement).type || 'text').toLowerCase()\n if (type !== 'checkbox' && type !== 'radio' && type !== 'file') {\n return 'input'\n }\n }\n }\n if (lower === 'doubleclick') return 'dblclick'\n return lower\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { attributeName, STRING_BOOLEAN_ATTRS } from '../core/attributes'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n])\n\nconst IDL_ATTRS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'multiple',\n 'muted',\n 'readonly',\n])\n\nexport function createHostNode(type: string, isSvg: boolean): Element {\n if (isSvg || type === 'svg') {\n return document.createElementNS(SVG_NS, type)\n }\n return document.createElement(type)\n}\n\nexport function isSvgElement(el: Element): boolean {\n return (el as any).ownerSVGElement !== undefined || el.tagName === 'svg'\n}\n\nexport function setProp(\n el: Element,\n name: string,\n next: any,\n prev: any,\n isSvg: boolean,\n): void {\n if (name === 'children' || name === 'key' || name === 'ref') return\n const attr = attributeName(name, isSvg)\n\n // defaultValue / defaultChecked are IDL-property-only \u2014 they seed the\n // initial value/checked of a form control on first mount and must NOT be\n // emitted as HTML attributes (which would leak as `defaultValue=\"...\"`).\n // Setting `el.defaultValue` on a fresh control also sets the initial\n // `el.value`, which is what consumers expect. Skip on hydrated DOM so we\n // don't clobber a live user-typed value.\n if (name === 'defaultValue' || name === 'defaultChecked') {\n if (prev === undefined && next != null) {\n try {\n ;(el as any)[name] = next\n } catch {}\n }\n return\n }\n\n if (name === 'className') {\n if (isSvg) {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n } else {\n ;(el as HTMLElement).className = next == null ? '' : '' + next\n }\n return\n }\n\n if (name === 'class') {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n return\n }\n\n if (name === 'style') {\n setStyle(el as HTMLElement, next, prev)\n return\n }\n\n if (name === 'dangerouslySetInnerHTML') {\n const nextHtml = next?.__html ?? ''\n const prevHtml = prev?.__html ?? ''\n if (nextHtml !== prevHtml) (el as HTMLElement).innerHTML = nextHtml\n return\n }\n\n if (name[0] === 'o' && name[1] === 'n') {\n setEventHandler(el, name, next, prev)\n return\n }\n\n if (name === 'htmlFor') {\n if (next == null) el.removeAttribute('for')\n else el.setAttribute('for', '' + next)\n return\n }\n\n if (STRING_BOOLEAN_ATTRS.has(attr)) {\n if (next == null) el.removeAttribute(attr)\n else el.setAttribute(attr, '' + next)\n return\n }\n\n if (!isSvg && IDL_ATTRS.has(name) && name in el) {\n try {\n ;(el as any)[name] = next == null ? '' : next\n return\n } catch {}\n }\n\n if (BOOLEAN_ATTRS.has(name.toLowerCase())) {\n if (next) el.setAttribute(attr, '')\n else el.removeAttribute(attr)\n return\n }\n\n // aria-* and data-* attributes stringify booleans to `\"true\"`/`\"false\"`\n // rather than using the HTML boolean-attribute presence/absence semantics.\n // This matches React and the ARIA spec (aria-hidden=\"false\" is meaningful).\n if (name.length > 5 && (name.charCodeAt(0) === 97 /* a */ || name.charCodeAt(0) === 100 /* d */)) {\n if (name.startsWith('aria-') || name.startsWith('data-')) {\n if (next == null) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(attr)\n } else if (next === true) {\n el.setAttribute(attr, '')\n } else {\n el.setAttribute(attr, '' + next)\n }\n}\n\nfunction setStyle(el: HTMLElement, next: any, prev: any): void {\n const style = el.style\n if (typeof next === 'string') {\n style.cssText = next\n return\n }\n if (typeof prev === 'string') style.cssText = ''\n if (prev && typeof prev === 'object') {\n for (const k in prev) {\n if (!next || !(k in next)) setStyleProperty(style, k, '')\n }\n }\n if (next && typeof next === 'object') {\n for (const k in next) {\n if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k])\n }\n }\n}\n\nfunction setStyleProperty(style: CSSStyleDeclaration, key: string, value: any): void {\n if (key[0] === '-') {\n style.setProperty(key, value == null ? '' : '' + value)\n } else if (value == null || value === '') {\n ;(style as any)[key] = ''\n } else if (typeof value === 'number' && !UNITLESS_STYLE.has(key)) {\n ;(style as any)[key] = value + 'px'\n } else {\n ;(style as any)[key] = '' + value\n }\n}\n\nconst UNITLESS_STYLE = new Set([\n 'animationIterationCount',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridArea',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n])\n\nexport interface SyntheticEvent extends Event {\n nativeEvent: Event\n isDefaultPrevented(): boolean\n isPropagationStopped(): boolean\n persist(): void\n currentTarget: EventTarget & Element\n}\n\nfunction setEventHandler(el: Element, name: string, next: any, prev: any): void {\n // Only function handlers are accepted. Reject strings/objects/etc \u2014 the\n // legacy `onclick=\"...\"` HTML attribute (string handler) is a known XSS\n // vector if a parent spreads untrusted props onto a host element. React\n // also ignores non-function handlers.\n if (next != null && typeof next != 'function') next = null\n\n const capture = name.endsWith('Capture')\n const reactEventName = name.slice(2, capture ? -7 : undefined)\n const eventName = domEventFor(reactEventName, el)\n\n // Key by the React prop name (not DOM event name) so `onChange` and\n // `onInput` on the same text input \u2014 which both dispatch from the native\n // `input` event \u2014 can coexist without clobbering each other's handlers.\n const handlers = ((el as any).__handlers ||= Object.create(null))\n const key = name\n\n const existing = handlers[key]\n\n if (existing && !next) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n handlers[key] = null\n return\n }\n\n if (!existing && next) {\n const entry = {\n current: next as Function,\n listener: null as any,\n event: eventName,\n capture,\n }\n entry.listener = (e: Event) => {\n // React hands handlers a SyntheticEvent that carries `.nativeEvent`.\n // Many libraries check `event.nativeEvent.isComposing` (react-instantsearch)\n // or `event.nativeEvent.shiftKey` (UI kits) \u2014 without the alias they throw\n // on `undefined.foo`. Aliasing the native event to itself is the cheapest\n // way to satisfy the shape without building a full synthetic layer.\n if ((e as any).nativeEvent === undefined) (e as any).nativeEvent = e\n entry.current(e)\n }\n handlers[key] = entry\n el.addEventListener(eventName, entry.listener, capture)\n return\n }\n\n if (existing) {\n // Re-bind if the effective DOM event changed (e.g. <input> whose `type`\n // flipped from \"text\" to \"checkbox\" \u2014 onChange should now follow `change`\n // instead of `input`). This is rare but keeps semantics correct.\n if (existing.event !== eventName || existing.capture !== capture) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n existing.event = eventName\n existing.capture = capture\n el.addEventListener(eventName, existing.listener, capture)\n }\n existing.current = next\n }\n}\n\nfunction domEventFor(reactEventName: string, el: Element): string {\n const lower = reactEventName.toLowerCase()\n // React's `onChange` on text-like <input> and <textarea> maps to the\n // native `input` event so handlers fire on every keystroke. On checkbox,\n // radio, file inputs, and <select>, React's `onChange` maps to the\n // native `change` event (which fires on click / option select).\n if (lower === 'change') {\n const tag = el.tagName\n if (tag === 'TEXTAREA') return 'input'\n if (tag === 'INPUT') {\n const type = ((el as HTMLInputElement).type || 'text').toLowerCase()\n if (type !== 'checkbox' && type !== 'radio' && type !== 'file') {\n return 'input'\n }\n }\n }\n if (lower === 'doubleclick') return 'dblclick'\n return lower\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -79,8 +79,14 @@ function renderClass(fiber, domParent, anchor) {
79
79
  reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
80
80
  fiber.mp = props;
81
81
  if (isNew) {
82
- if (instance.componentDidMount) {
83
- scheduleLifecycle(fiber, () => instance.componentDidMount());
82
+ if (instance.componentDidMount || instance.componentWillUnmount) {
83
+ scheduleLifecycle(fiber, () => {
84
+ if (instance.componentWillUnmount) {
85
+ fiber.cu ||= [];
86
+ fiber.cu.push(() => instance.componentWillUnmount());
87
+ }
88
+ instance.componentDidMount?.();
89
+ });
84
90
  }
85
91
  } else if (instance.componentDidUpdate) {
86
92
  const { p, s } = fiber.ms ?? {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dom/features/class/full.ts"],
4
- "sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport {\n registerRenderer,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n scheduleLifecycle,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\n\nfunction renderClass(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const Ctor = fiber.type as any\n let instance = fiber.sn\n const props = fiber.pp ?? {}\n const isNew = !instance\n\n // Class contextType: read the current value of the subscribed context so\n // `this.context` reflects the nearest Provider. Evaluated every render.\n const ctxValue = Ctor.contextType ? Ctor.contextType._currentValue : undefined\n\n if (isNew) {\n instance = new Ctor(props, ctxValue)\n instance.props = props\n instance.context = ctxValue\n instance._fiber = fiber\n instance._enqueueUpdate = (updater: any, cb?: () => void) => {\n const next = typeof updater == 'function' ? updater(instance.state, instance.props) : updater\n if (next != null) instance.state = { ...instance.state, ...next }\n if (cb) {\n fiber.cu ||= []\n fiber.cu.push(cb)\n }\n scheduleUpdate(fiber)\n }\n instance._forceUpdate = (cb?: () => void) => {\n if (cb) {\n fiber.cu ||= []\n fiber.cu.push(cb)\n }\n scheduleUpdate(fiber)\n }\n fiber.sn = instance\n if (Ctor.getDerivedStateFromProps) {\n const d = Ctor.getDerivedStateFromProps(props, instance.state)\n if (d) instance.state = { ...instance.state, ...d }\n }\n } else {\n const prevProps = instance.props\n const prevState = instance.state\n // Refresh context on every render \u2014 Providers higher up may have changed.\n instance.context = ctxValue\n if (Ctor.getDerivedStateFromProps) {\n const d = Ctor.getDerivedStateFromProps(props, instance.state)\n if (d) instance.state = { ...instance.state, ...d }\n }\n if (instance.shouldComponentUpdate) {\n if (!instance.shouldComponentUpdate(props, instance.state, instance.context)) {\n instance.props = props\n fiber.mp = props\n // Still need to render children with previous output\n if (fiber.ms?.r) {\n reconcileChildren(fiber, childrenToArray(fiber.ms.r), domParent, anchor)\n }\n return\n }\n }\n instance.props = props\n // New snapshot must win over any stale one from a previous render \u2014\n // otherwise componentDidUpdate keeps seeing the original props and can\n // ping-pong setState forever.\n fiber.ms = { ...(fiber.ms ?? {}), p: prevProps, s: prevState }\n }\n\n let rendered: ReactNode\n try {\n rendered = instance.render()\n } catch (e: any) {\n if (isThenable(e)) {\n handleSuspended(fiber, e)\n rendered = null\n } else {\n handleErrorInRender(fiber, e)\n return\n }\n }\n fiber.ms = { ...(fiber.ms ?? {}), r: rendered }\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = props\n\n // Schedule lifecycle\n if (isNew) {\n if (instance.componentDidMount) {\n scheduleLifecycle(fiber, () => instance.componentDidMount())\n }\n } else if (instance.componentDidUpdate) {\n const { p, s } = fiber.ms ?? {}\n scheduleLifecycle(fiber, () => instance.componentDidUpdate(p, s))\n }\n}\n\nregisterRenderer(FiberTag.Class, renderClass)\n"],
5
- "mappings": ";AAAA,SAAS,gBAA4C;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,YAAY,OAAc,WAAiB,QAA2B;AAC7E,QAAM,OAAO,MAAM;AACnB,MAAI,WAAW,MAAM;AACrB,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,QAAM,QAAQ,CAAC;AAIf,QAAM,WAAW,KAAK,cAAc,KAAK,YAAY,gBAAgB;AAErE,MAAI,OAAO;AACT,eAAW,IAAI,KAAK,OAAO,QAAQ;AACnC,aAAS,QAAQ;AACjB,aAAS,UAAU;AACnB,aAAS,SAAS;AAClB,aAAS,iBAAiB,CAAC,SAAc,OAAoB;AAC3D,YAAM,OAAO,OAAO,WAAW,aAAa,QAAQ,SAAS,OAAO,SAAS,KAAK,IAAI;AACtF,UAAI,QAAQ,KAAM,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,KAAK;AAChE,UAAI,IAAI;AACN,cAAM,OAAO,CAAC;AACd,cAAM,GAAG,KAAK,EAAE;AAAA,MAClB;AACA,qBAAe,KAAK;AAAA,IACtB;AACA,aAAS,eAAe,CAAC,OAAoB;AAC3C,UAAI,IAAI;AACN,cAAM,OAAO,CAAC;AACd,cAAM,GAAG,KAAK,EAAE;AAAA,MAClB;AACA,qBAAe,KAAK;AAAA,IACtB;AACA,UAAM,KAAK;AACX,QAAI,KAAK,0BAA0B;AACjC,YAAM,IAAI,KAAK,yBAAyB,OAAO,SAAS,KAAK;AAC7D,UAAI,EAAG,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,EAAE;AAAA,IACpD;AAAA,EACF,OAAO;AACL,UAAM,YAAY,SAAS;AAC3B,UAAM,YAAY,SAAS;AAE3B,aAAS,UAAU;AACnB,QAAI,KAAK,0BAA0B;AACjC,YAAM,IAAI,KAAK,yBAAyB,OAAO,SAAS,KAAK;AAC7D,UAAI,EAAG,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,EAAE;AAAA,IACpD;AACA,QAAI,SAAS,uBAAuB;AAClC,UAAI,CAAC,SAAS,sBAAsB,OAAO,SAAS,OAAO,SAAS,OAAO,GAAG;AAC5E,iBAAS,QAAQ;AACjB,cAAM,KAAK;AAEX,YAAI,MAAM,IAAI,GAAG;AACf,4BAAkB,OAAO,gBAAgB,MAAM,GAAG,CAAC,GAAG,WAAW,MAAM;AAAA,QACzE;AACA;AAAA,MACF;AAAA,IACF;AACA,aAAS,QAAQ;AAIjB,UAAM,KAAK,EAAE,GAAI,MAAM,MAAM,CAAC,GAAI,GAAG,WAAW,GAAG,UAAU;AAAA,EAC/D;AAEA,MAAI;AACJ,MAAI;AACF,eAAW,SAAS,OAAO;AAAA,EAC7B,SAAS,GAAQ;AACf,QAAI,WAAW,CAAC,GAAG;AACjB,sBAAgB,OAAO,CAAC;AACxB,iBAAW;AAAA,IACb,OAAO;AACL,0BAAoB,OAAO,CAAC;AAC5B;AAAA,IACF;AAAA,EACF;AACA,QAAM,KAAK,EAAE,GAAI,MAAM,MAAM,CAAC,GAAI,GAAG,SAAS;AAE9C,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,KAAK;AAGX,MAAI,OAAO;AACT,QAAI,SAAS,mBAAmB;AAC9B,wBAAkB,OAAO,MAAM,SAAS,kBAAkB,CAAC;AAAA,IAC7D;AAAA,EACF,WAAW,SAAS,oBAAoB;AACtC,UAAM,EAAE,GAAG,EAAE,IAAI,MAAM,MAAM,CAAC;AAC9B,sBAAkB,OAAO,MAAM,SAAS,mBAAmB,GAAG,CAAC,CAAC;AAAA,EAClE;AACF;AAEA,iBAAiB,SAAS,OAAO,WAAW;",
4
+ "sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport {\n registerRenderer,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n scheduleLifecycle,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\n\nfunction renderClass(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const Ctor = fiber.type as any\n let instance = fiber.sn\n const props = fiber.pp ?? {}\n const isNew = !instance\n\n // Class contextType: read the current value of the subscribed context so\n // `this.context` reflects the nearest Provider. Evaluated every render.\n const ctxValue = Ctor.contextType ? Ctor.contextType._currentValue : undefined\n\n if (isNew) {\n instance = new Ctor(props, ctxValue)\n instance.props = props\n instance.context = ctxValue\n instance._fiber = fiber\n instance._enqueueUpdate = (updater: any, cb?: () => void) => {\n const next = typeof updater == 'function' ? updater(instance.state, instance.props) : updater\n if (next != null) instance.state = { ...instance.state, ...next }\n if (cb) {\n fiber.cu ||= []\n fiber.cu.push(cb)\n }\n scheduleUpdate(fiber)\n }\n instance._forceUpdate = (cb?: () => void) => {\n if (cb) {\n fiber.cu ||= []\n fiber.cu.push(cb)\n }\n scheduleUpdate(fiber)\n }\n fiber.sn = instance\n if (Ctor.getDerivedStateFromProps) {\n const d = Ctor.getDerivedStateFromProps(props, instance.state)\n if (d) instance.state = { ...instance.state, ...d }\n }\n } else {\n const prevProps = instance.props\n const prevState = instance.state\n // Refresh context on every render \u2014 Providers higher up may have changed.\n instance.context = ctxValue\n if (Ctor.getDerivedStateFromProps) {\n const d = Ctor.getDerivedStateFromProps(props, instance.state)\n if (d) instance.state = { ...instance.state, ...d }\n }\n if (instance.shouldComponentUpdate) {\n if (!instance.shouldComponentUpdate(props, instance.state, instance.context)) {\n instance.props = props\n fiber.mp = props\n // Still need to render children with previous output\n if (fiber.ms?.r) {\n reconcileChildren(fiber, childrenToArray(fiber.ms.r), domParent, anchor)\n }\n return\n }\n }\n instance.props = props\n // New snapshot must win over any stale one from a previous render \u2014\n // otherwise componentDidUpdate keeps seeing the original props and can\n // ping-pong setState forever.\n fiber.ms = { ...(fiber.ms ?? {}), p: prevProps, s: prevState }\n }\n\n let rendered: ReactNode\n try {\n rendered = instance.render()\n } catch (e: any) {\n if (isThenable(e)) {\n handleSuspended(fiber, e)\n rendered = null\n } else {\n handleErrorInRender(fiber, e)\n return\n }\n }\n fiber.ms = { ...(fiber.ms ?? {}), r: rendered }\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = props\n\n // Schedule lifecycle\n if (isNew) {\n if (instance.componentDidMount || instance.componentWillUnmount) {\n scheduleLifecycle(fiber, () => {\n // An abandoned render never mounted, so it has no unmount lifecycle.\n if (instance.componentWillUnmount) {\n fiber.cu ||= []\n fiber.cu.push(() => instance.componentWillUnmount())\n }\n instance.componentDidMount?.()\n })\n }\n } else if (instance.componentDidUpdate) {\n const { p, s } = fiber.ms ?? {}\n scheduleLifecycle(fiber, () => instance.componentDidUpdate(p, s))\n }\n}\n\nregisterRenderer(FiberTag.Class, renderClass)\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -3,10 +3,10 @@ import {
3
3
  FiberTag,
4
4
  REACT_ELEMENT_TYPE
5
5
  } from "../../../core";
6
- import { attributeName } from "../../../core/attributes";
6
+ import { attributeName, STRING_BOOLEAN_ATTRS } from "../../../core/attributes";
7
7
  import { createHostNode, setProp } from "../../dom";
8
8
  import { drainReplayQueue } from "../../event-replay";
9
- import { discardPendingWork, findRoot, flushSyncWork, renderRoot } from "../../reconcile";
9
+ import { discardPendingWork, findRoot, flushSyncWork, renderRoot, unmountFiber } from "../../reconcile";
10
10
  import { attachRootFiber, createFiberRoot } from "../../root-internal";
11
11
  function installHydrationScrollGuard() {
12
12
  if (typeof window === "undefined") return;
@@ -372,6 +372,7 @@ function recoverHydration(root, error) {
372
372
  return true;
373
373
  }
374
374
  function resetAfterHydrationFailure(root, container) {
375
+ unmountFiber(root.r, false);
375
376
  discardPendingWork(root);
376
377
  clearHydrationContainer(container);
377
378
  attachRootFiber(root, container);
@@ -564,11 +565,13 @@ function validateHydrationProps(fiber, el, props, tag, isSvg) {
564
565
  }
565
566
  continue;
566
567
  }
567
- const stringifiedBoolean = k.startsWith("aria-") || k.startsWith("data-");
568
568
  const attr = attributeName(k, isSvg);
569
+ const stringifiedBoolean = STRING_BOOLEAN_ATTRS.has(attr) || k.startsWith("aria-") || k.startsWith("data-");
569
570
  let expectedValue;
570
571
  if (value == null || value === false && !stringifiedBoolean) {
571
572
  expectedValue = null;
573
+ } else if (k === "muted" && !isSvg && (tag === "video" || tag === "audio")) {
574
+ expectedValue = value ? "" : null;
572
575
  } else {
573
576
  expected ??= createHostNode(tag, isSvg);
574
577
  setProp(expected, k, value, void 0, isSvg);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dom/features/hydration/full.ts"],
4
- "sourcesContent": ["import {\n FiberTag,\n REACT_ELEMENT_TYPE,\n type Fiber,\n type FiberRoot,\n type ReactElement,\n type ReactNode,\n} from '../../../core'\nimport { attributeName } from '../../../core/attributes'\nimport { createHostNode, setProp } from '../../dom'\nimport { drainReplayQueue } from '../../event-replay'\nimport { discardPendingWork, findRoot, flushSyncWork, renderRoot } from '../../reconcile'\nimport { attachRootFiber, createFiberRoot } from '../../root-internal'\n\n// Re-export from event-replay so all hydration concerns live behind one\n// feature boundary \u2014 the plugin's stub swap strips drainReplayQueue too.\nexport { drainReplayQueue }\n\n/**\n * Preserve the user's scroll position across hydration. If the user scrolled\n * between SSR paint and hydrate (common in dev where JS takes seconds to\n * load), libraries that wire scroll-restoration into a `useLayoutEffect`\n * near the root (e.g. TanStack Router) will run during our synchronous\n * hydrate and call `window.scrollTo(savedFromLastVisit)` \u2014 overwriting the\n * user's fresh scroll. We install a short-lived wrapper around scrollTo that\n * suppresses programmatic calls when a user-initiated scroll happened\n * recently. Only runs in the hydration feature \u2014 the stub skips it.\n */\nexport function installHydrationScrollGuard(): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (w._r) return\n const time = Date.now\n const guardStartedAt = w._r = time()\n let lastUserScrollAt = 0\n let programmatic = false\n w.addEventListener(\n 'scroll',\n () => {\n if (!programmatic) {\n lastUserScrollAt = time()\n }\n },\n { capture: true, passive: true },\n )\n const origScrollTo = w.scrollTo\n w.scrollTo = function (...args: any[]) {\n const now = time()\n if (\n now - guardStartedAt < 3000 &&\n now - lastUserScrollAt < 1500\n ) {\n return\n }\n programmatic = true\n try {\n return (origScrollTo as any).apply(w, args)\n } finally {\n queueMicrotask(() => {\n programmatic = false\n })\n }\n }\n}\n\n/**\n * Hydration cursor: walks existing DOM children in document order so we can\n * adopt them during fiber tree construction. One cursor per host parent.\n *\n * `endBefore` scopes the cursor to a subrange \u2014 used by rehydrateBoundary()\n * so we only adopt DOM up to the closing `/$` marker for that boundary.\n */\nexport class HydrationCursor {\n n: ChildNode | null\n p: Node\n e: ChildNode | null\n constructor(parent: Node, start: ChildNode | null = null, endBefore: ChildNode | null = null) {\n this.p = parent\n this.n = start ?? parent.firstChild\n this.e = endBefore\n }\n take(): ChildNode | null {\n while (this.n && this.n !== this.e) {\n const n = this.n\n // Skip anything that isn't an element (1) or text (3):\n // comments (8), doctype (10), processing instructions (7), cdata (4).\n if (n.nodeType !== 1 && n.nodeType !== 3) {\n this.n = n.nextSibling\n continue\n }\n this.n = n.nextSibling\n return n\n }\n return null\n }\n /**\n * Position-insensitive lookup for head/html adoption. Scans forward past\n * non-matching nodes without removing them, matching by tag AND the key\n * attributes that identify head elements uniquely (rel/href for links,\n * name/property for meta, src for script). Non-matching nodes stay in\n * place so the SSR'd stylesheet/script order is preserved.\n */\n head(tag: string, props: Record<string, any>): ChildNode | null {\n const target = tag.toLowerCase()\n const keyAttrs = HEAD_KEY_ATTRS[target]\n let scan = this.p.firstChild\n while (scan) {\n if (\n scan.nodeType === 1 &&\n (scan as Element).tagName.toLowerCase() === target &&\n headAttrsMatch(scan as Element, props, keyAttrs)\n ) {\n CLAIMED.add(scan)\n return scan\n }\n scan = scan.nextSibling\n }\n return null\n }\n has(): boolean {\n let n = this.n\n while (n && n !== this.e) {\n if (n.nodeType === 1 || n.nodeType === 3) return true\n n = n.nextSibling\n }\n return false\n }\n}\n\nconst hydrationCursors = new WeakMap<Fiber, HydrationCursor>()\nconst PROD_HYDRATION_ERROR = 'Hydration mismatch.'\n\nexport interface HydrationBailoutError extends Error {\n f: Fiber | null\n}\n\nexport function isHydrationBailout(error: unknown): error is HydrationBailoutError {\n return !!error && (error as any).f !== undefined\n}\n\nexport function abortHydration(cause: unknown, fiber: Fiber | null = null): never {\n const error = (cause instanceof Error ? cause : new Error(PROD_HYDRATION_ERROR)) as HydrationBailoutError\n ;(error as any).f = fiber\n throw error\n}\n\ninterface HydrateRootOptions {\n identifierPrefix?: string\n onRecoverableError?: (error: unknown) => void\n onCaughtError?: (error: unknown) => void\n onUncaughtError?: (error: unknown) => void\n}\n\ninterface HydratedRoot {\n render(children: ReactNode): void\n unmount(): void\n}\n\nexport function hydrateRootImpl(\n container: Element | Document,\n initialChildren: ReactNode,\n options: HydrateRootOptions,\n): HydratedRoot {\n const target = container as any as Element | Document\n const isDocument = (container as Node).nodeType === 9\n const body = isDocument ? (target as Document).body : null\n const root = createFiberRoot(target, options)\n\n installHydrationScrollGuard()\n\n const normalizedInitialChildren =\n isDocument ? normalizeDocumentChildren(initialChildren) : initialChildren\n let hydrationError: unknown = null\n beginHydration(root)\n try {\n flushSyncWork(() => {\n renderRoot(root, normalizedInitialChildren)\n })\n } catch (e) {\n hydrationError = e\n }\n endHydration(root)\n\n if (hydrationError && !recoverHydration(root, hydrationError)) throw hydrationError\n drainReplayQueue()\n\n return {\n render(children) {\n flushSyncWork(() => {\n const normalized = isDocument ? normalizeDocumentChildren(children) : children\n renderRoot(\n root,\n root.c === body ? getStaticDocumentBodyChildren(normalized) ?? normalized : normalized,\n )\n })\n },\n unmount() {\n flushSyncWork(() => {\n renderRoot(root, null)\n })\n },\n }\n}\n\n// Head elements that we match against server DOM by attribute signature.\nconst HEAD_KEY_ATTRS: Record<string, ReadonlyArray<string>> = {\n link: ['rel', 'href', 'sizes', 'type'],\n meta: ['name', 'property', 'charSet', 'httpEquiv'],\n script: ['src', 'type'],\n style: ['id', 'media', 'nonce', 'title'],\n}\n\nconst DOCUMENT_HEAD_TAGS = new Set(['base', 'link', 'meta', 'script', 'style', 'title'])\n\n// DOM elements already claimed by some fiber during this hydration pass.\nconst CLAIMED = new WeakSet<Node>()\n\nfunction headAttrsMatch(\n el: Element,\n props: Record<string, any>,\n keys: ReadonlyArray<string> | undefined,\n): boolean {\n if (CLAIMED.has(el)) return false\n if (!keys) return true\n for (const k of keys) {\n const propVal = props[k]\n const elVal = el.getAttribute(attributeName(k))\n if (propVal == null && elVal == null) continue\n if (propVal == null || elVal == null || String(propVal) !== elVal) return false\n }\n return true\n}\n\nexport function beginHydration(root: FiberRoot): void {\n root.ic = 0\n root.h = true\n hydrationCursors.set(root.r, new HydrationCursor(root.c))\n}\n\nexport function endHydration(root: FiberRoot): void {\n root.h = false\n hydrationCursors.delete(root.r)\n}\n\n/**\n * Inspect the current cursor position for a streaming-suspense boundary\n * marker emitted by the server. Returns info + advances the cursor past the\n * marker pair (start comment + fallback/real content + end comment).\n */\nexport type BoundaryInfo = [0 | 1, number, Comment, Comment]\n\nexport function tryConsumeBoundary(parent: Fiber): BoundaryInfo | null {\n const cursor = hydrationCursors.get(findHostParent(parent))\n if (!cursor) return null\n const peek = cursor.n\n if (!peek || peek.nodeType !== 8) return null\n const data = (peek as Comment).data\n const m = /^(\\$\\??)(\\d+)$/.exec(data)\n if (!m) return null\n const kind = m[1] === '$?' ? 1 : 0\n const id = Number(m[2])\n const startMark = peek as Comment\n // Advance past the start comment\n cursor.n = startMark.nextSibling\n // Locate end comment: closest <!--/$-->\n let endMark: Comment | null = null\n let scan = startMark.nextSibling\n while (scan) {\n if (scan.nodeType === 8 && (scan as Comment).data === '/$') {\n endMark = scan as Comment\n break\n }\n scan = scan.nextSibling\n }\n if (!endMark) return null\n return [kind, id, startMark, endMark]\n}\n\nexport function advanceCursorPast(parent: Fiber, node: Node): void {\n const cursor = hydrationCursors.get(findHostParent(parent))\n if (!cursor) return\n cursor.n = node.nextSibling\n}\n\nexport function getHydrationCursor(hostFiber: Fiber): HydrationCursor | undefined {\n return hydrationCursors.get(hostFiber)\n}\n\nexport function setHydrationCursor(hostFiber: Fiber, cursor: HydrationCursor): void {\n hydrationCursors.set(hostFiber, cursor)\n}\n\nexport function clearHydrationCursor(hostFiber: Fiber): void {\n hydrationCursors.delete(hostFiber)\n}\n\n/**\n * Try to adopt a DOM node for this host fiber. Returns true if adopted.\n * Attaches existing attrs/children via separate hydrate pass.\n */\nexport function adoptHostDom(fiber: Fiber, parent: Fiber): boolean {\n const hostParent = findHostParent(parent)\n const cursor = hydrationCursors.get(hostParent)\n if (!cursor) return false\n\n const tag = (fiber.type as string).toLowerCase()\n const documentHeadParent =\n cursor.p.nodeType === 9 && DOCUMENT_HEAD_TAGS.has(tag)\n ? (cursor.p as Document).head\n : null\n const parentEl = cursor.p as Element\n const parentTag =\n parentEl.nodeType === 1 ? (parentEl as Element).tagName.toLowerCase() : ''\n const isHeadish = parentTag === 'head' || parentTag === 'html' || !!documentHeadParent\n\n let candidate: ChildNode | null\n if (documentHeadParent) {\n // React 19 can project <meta>/<title>/<link> from anywhere in the tree into\n // document.head. Redact does not have that projection yet, so when a\n // document-root hydration pass sees a top-level head element, adopt it\n // from <head> rather than trying to append it beside <html>.\n candidate = new HydrationCursor(documentHeadParent).head(\n tag,\n fiber.pp ?? {},\n )\n } else if (isHeadish) {\n // Head/html children are position-insensitive \u2014 server may emit them in\n // a different order than the React tree (React 19 head hoisting, etc.).\n // Scan forward without removing non-matching nodes; match on attribute\n // signature so we don't adopt the wrong <link> and clobber its props.\n candidate = cursor.head(tag, fiber.pp ?? {})\n } else {\n candidate = cursor.take()\n }\n\n if (!candidate) {\n // Client expected a host here but the cursor is exhausted \u2014 server gave\n // fewer children than the client tree. Report the structural gap (React\n // fires `onRecoverableError` for this exact case) and let the reconciler\n // mount a fresh DOM for this fiber below.\n // Exception: <head> children are position-insensitive; a missing match\n // there means \"server didn't hoist this one yet\", which we silently mount.\n if (!isHeadish) onMismatch(fiber, null)\n return false\n }\n\n if (candidate.nodeType !== 1 || (candidate as Element).tagName.toLowerCase() !== tag) {\n // mismatch \u2014 log and re-render fresh from this point\n onMismatch(fiber, candidate)\n return false\n }\n fiber.dom = candidate\n // Apply props (attach events, sync IDL props). Don't re-set existing attrs.\n const props = fiber.pp ?? {}\n const isSvg =\n tag === 'svg' ||\n ((candidate as Element).namespaceURI === 'http://www.w3.org/2000/svg' &&\n tag !== 'foreignobject')\n const syncHydrationProps =\n !props.suppressHydrationWarning &&\n canRecoverHydrationPropMismatch(candidate, tag)\n validateHydrationProps(fiber, candidate as Element, props, tag, isSvg)\n for (const k in props) {\n if (\n k === 'children' ||\n k === 'key' ||\n k === 'ref' ||\n k === 'suppressHydrationWarning' ||\n k === 'suppressContentEditableWarning'\n ) continue\n if (\n syncHydrationProps ||\n (k[0] === 'o' && k[1] === 'n' && typeof props[k] == 'function')\n ) {\n setProp(candidate as Element, k, props[k], undefined, isSvg)\n }\n }\n // Set up child cursor for this host's children\n hydrationCursors.set(fiber, new HydrationCursor(candidate))\n return true\n}\n\nexport function adoptTextDom(fiber: Fiber, parent: Fiber, text: string): boolean {\n const cursor = hydrationCursors.get(findHostParent(parent))\n if (!cursor) return false\n const candidate = cursor.take()\n if (!candidate) {\n onMismatch(fiber, null)\n return false\n }\n if (candidate.nodeType === 3) {\n if ((candidate as Text).data !== text) {\n const recovered = failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(\n `Hydration text mismatch: expected \"${text}\" but found \"${(candidate as Text).data}\".`,\n )\n : undefined,\n canRecoverHydrationPropMismatch(candidate),\n )\n if (recovered) {\n ;(candidate as Text).data = text\n }\n }\n fiber.dom = candidate\n return true\n }\n onMismatch(fiber, candidate)\n return false\n}\n\nexport function findHostParent(fiber: Fiber): Fiber {\n let f: Fiber | null = fiber\n while (f) {\n // A fiber explicitly holding a cursor acts as a boundary for hydration\n // (e.g. Suspense with a scoped cursor during fallback/boundary hydration).\n if (hydrationCursors.has(f)) return f\n if (f.tag === FiberTag.Host || f.tag === FiberTag.Root || f.tag === FiberTag.Portal) {\n return f\n }\n f = f.parent\n }\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('No host parent found')\n }\n throw new Error()\n}\n\nfunction onMismatch(fiber: Fiber, actualNode: ChildNode | null): void {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(\n `Hydration mismatch: expected <${(fiber.type as string) ?? 'text'}> but found ${\n actualNode ? (actualNode.nodeType === 1 ? (actualNode as Element).tagName : 'text') : 'nothing'\n }.`,\n )\n : undefined,\n )\n}\n\nfunction failHydration(\n fiber: Fiber,\n error: Error = new Error(PROD_HYDRATION_ERROR),\n recoverInPlace = false,\n): boolean {\n const root = findRoot(fiber)\n if (root?.re) {\n root.re(error)\n }\n if (recoverInPlace) return true\n abortHydration(error, findHostRecoveryParent(fiber) ?? fiber)\n}\n\nfunction canRecoverHydrationPropMismatch(node: Node, tag?: string): boolean {\n return (\n tag === 'html' ||\n tag === 'head' ||\n tag === 'body' ||\n !!node.ownerDocument?.head?.contains(node)\n )\n}\n\nfunction findHostRecoveryParent(fiber: Fiber): Fiber | null {\n if (fiber.tag === FiberTag.Text) {\n let directHost = fiber.parent\n while (directHost && (directHost.tag !== FiberTag.Host || !directHost.dom)) {\n directHost = directHost.parent\n }\n if (!directHost) return null\n let hasEvent\n const props = directHost.pp ?? directHost.mp\n if (props) {\n for (const k in props) {\n if (k[0] === 'o' && k[1] === 'n' && typeof props[k] == 'function') {\n hasEvent = true\n }\n }\n }\n return findNearestSafeHostAboveComposite(\n hasEvent\n ? directHost.parent\n : directHost.parent?.tag === FiberTag.Host\n ? directHost.parent\n : directHost,\n )\n }\n\n return findNearestSafeHostAboveComposite(fiber.parent)\n}\n\nfunction findNearestSafeHostAboveComposite(fiber: Fiber | null): Fiber | null {\n let host: Fiber | null = null\n let f = fiber\n while (f) {\n if (f.tag === FiberTag.Host && f.dom) {\n if (!isSafeHostRecoveryElement(f)) return null\n const parentTag = f.parent?.tag as number\n if (!host || (parentTag > FiberTag.Text && parentTag < FiberTag.Suspense)) {\n host = f\n }\n }\n f = f.parent\n }\n return host\n}\n\nfunction isSafeHostRecoveryElement(fiber: Fiber): boolean {\n const tag = fiber.type.toLowerCase()\n return tag !== 'html' && tag !== 'head' && tag !== 'body'\n}\n\nexport function recoverHydration(root: FiberRoot, error: unknown): boolean {\n if (!isHydrationBailout(error)) return false\n\n let container = root.c as Element | Document\n let children = root.r.pp?.children ?? null\n const hostRecovery = getRecoverableHostChildren(error)\n if (hostRecovery) {\n container = hostRecovery[0]\n children = hostRecovery[1]\n } else if (container.nodeType === 9) {\n const bodyChildren = getRecoverableDocumentBodyChildren(error)\n if (bodyChildren != null) {\n container = (container as Document).body\n children = bodyChildren\n }\n }\n\n resetAfterHydrationFailure(root, container)\n try {\n flushSyncWork(() => renderRoot(root, children))\n } catch (clientError) {\n resetAfterHydrationFailure(root, container)\n throw clientError\n }\n return true\n}\n\nfunction resetAfterHydrationFailure(\n root: FiberRoot,\n container: Element | Document,\n): void {\n discardPendingWork(root)\n clearHydrationContainer(container)\n attachRootFiber(root, container)\n root.h = false\n}\n\nfunction clearHydrationContainer(container: Element | Document): void {\n if (container.nodeType === 9) {\n let node = container.firstChild\n while (node) {\n const next = node.nextSibling\n if (node.nodeType !== 10 /* DOCUMENT_TYPE_NODE */) {\n container.removeChild(node)\n }\n node = next\n }\n return\n }\n ;(container as Element).textContent = ''\n}\n\nfunction getRecoverableHostChildren(\n error: HydrationBailoutError,\n): [Element, ReactNode] | null {\n const host = error.f\n if (\n host?.tag !== FiberTag.Host ||\n !host.dom ||\n !findNearestSafeHostAboveComposite(host.parent)\n ) {\n return null\n }\n return [host.dom as Element, (host.pp ?? host.mp)?.children ?? null]\n}\n\nfunction getRecoverableDocumentBodyChildren(error: HydrationBailoutError): ReactNode | null {\n const bodyFiber = findBodyAncestor(error.f)\n if (!bodyFiber) return null\n return (bodyFiber.pp ?? bodyFiber.mp)?.children ?? null\n}\n\nfunction findBodyAncestor(fiber: Fiber | null): Fiber | null {\n let f = fiber\n while (f) {\n if (f.tag === FiberTag.Host && f.type === 'body') {\n return f === fiber ? null : f\n }\n f = f.parent\n }\n return null\n}\n\nfunction getStaticDocumentBodyChildren(children: ReactNode): ReactNode | null {\n const list = toChildArray(children)\n const html = list.find((child) => isHostElement(child, 'html')) as ReactElement | undefined\n if (!html) return null\n const htmlChildren = toChildArray(html.props?.children)\n const body = htmlChildren.find((child) => isHostElement(child, 'body')) as ReactElement | undefined\n return body ? body.props?.children ?? null : null\n}\n\nfunction normalizeDocumentChildren(children: ReactNode): ReactNode {\n const list = toChildArray(children)\n const htmlIndex = list.findIndex((child) => isHostElement(child, 'html'))\n if (htmlIndex === -1) return children\n\n const headNodes = list.filter(isHeadElement)\n if (headNodes.length === 0) return children\n\n const htmlElement = list[htmlIndex] as ReactElement\n const normalizedHtml = hoistIntoHtmlHead(htmlElement, headNodes)\n return list\n .filter((child, index) => index === htmlIndex || !isHeadElement(child))\n .map((child) => (child === htmlElement ? normalizedHtml : child))\n}\n\nfunction hoistIntoHtmlHead(htmlElement: ReactElement, headNodes: ReactNode[]): ReactElement {\n const htmlChildren = toChildArray(htmlElement.props?.children)\n const headIndex = htmlChildren.findIndex((child) => isHostElement(child, 'head'))\n let nextChildren: ReactNode[]\n\n if (headIndex === -1) {\n nextChildren = [\n createHostElement('head', { children: headNodes }),\n ...htmlChildren,\n ]\n } else {\n const headElement = htmlChildren[headIndex] as ReactElement\n const existingHeadChildren = toChildArray(headElement.props?.children)\n const nextHead = {\n ...headElement,\n props: {\n ...headElement.props,\n children: [...headNodes, ...existingHeadChildren],\n },\n }\n nextChildren = htmlChildren.map((child, index) => (index === headIndex ? nextHead : child))\n }\n\n return {\n ...htmlElement,\n props: {\n ...htmlElement.props,\n children: nextChildren,\n },\n }\n}\n\nfunction toChildArray(children: unknown): ReactNode[] {\n if (children == null || typeof children === 'boolean') return []\n if (Array.isArray(children)) return children as ReactNode[]\n if (isReactElement(children)) return [children]\n if (typeof children !== 'string' && isIterable(children)) return Array.from(children) as ReactNode[]\n return [children as ReactNode]\n}\n\nfunction isHeadElement(value: ReactNode): boolean {\n return isReactElement(value) && typeof value.type === 'string' && DOCUMENT_HEAD_TAGS.has(value.type)\n}\n\nfunction isHostElement(value: ReactNode, tag: string): boolean {\n return isReactElement(value) && value.type === tag\n}\n\nfunction isReactElement(value: unknown): value is ReactElement {\n return !!value && typeof value === 'object' && (value as ReactElement).$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction isIterable(value: unknown): value is Iterable<ReactNode> {\n return !!value && typeof (value as { [Symbol.iterator]?: unknown })[Symbol.iterator] == 'function'\n}\n\nfunction createHostElement(type: string, props: Record<string, unknown>): ReactElement {\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type,\n key: null,\n ref: null,\n props,\n }\n}\n\nfunction validateHydrationProps(\n fiber: Fiber,\n el: Element,\n props: Record<string, any>,\n tag: string,\n isSvg: boolean,\n): void {\n if (props.suppressHydrationWarning) return\n\n const recoverInPlace = canRecoverHydrationPropMismatch(el, tag)\n let expected: Element | undefined\n\n for (const k in props) {\n const value = props[k]\n if (\n k === 'children' ||\n k === 'key' ||\n k === 'ref' ||\n k === 'suppressHydrationWarning' ||\n k === 'suppressContentEditableWarning' ||\n (k[0] === 'o' && k[1] === 'n' && typeof value == 'function')\n ) continue\n\n if (k === 'dangerouslySetInnerHTML') {\n let html = '' + (value?.__html ?? '')\n if (tag !== 'script' && tag !== 'style') {\n const probe = document.createElement('div')\n probe.innerHTML = html\n html = probe.innerHTML\n }\n if ((el as HTMLElement).innerHTML !== html) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration HTML mismatch inside <${tag}>.`)\n : undefined,\n recoverInPlace,\n )\n }\n continue\n }\n\n if (k === 'value' || k === 'defaultValue') {\n if (tag === 'select') continue\n if (tag === 'input' || tag === 'textarea') {\n if (k === 'value' || props.value == null) {\n if (value != null && (el as HTMLInputElement).value !== '' + value) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration ${tag} value mismatch on <${tag}>.`)\n : undefined,\n recoverInPlace,\n )\n }\n }\n continue\n }\n }\n\n if (tag === 'input' && (k === 'checked' || k === 'defaultChecked')) {\n if (k === 'checked' || props.checked == null) {\n if (value != null && (el as HTMLInputElement).checked !== !!value) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration checked mismatch on <input>.`)\n : undefined,\n recoverInPlace,\n )\n }\n }\n continue\n }\n\n if (tag === 'option' && k === 'selected') {\n if (value != null && (el as HTMLOptionElement).selected !== !!value) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration selected mismatch on <option>.`)\n : undefined,\n recoverInPlace,\n )\n }\n continue\n }\n\n if (k === 'style') {\n expected ??= createHostNode(tag, isSvg)\n setProp(expected, k, value, undefined, isSvg)\n if (\n !hydrationStylesMatch(\n (el as HTMLElement).style,\n (expected as HTMLElement).style,\n )\n ) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration style mismatch on <${tag}>.`)\n : undefined,\n recoverInPlace,\n )\n }\n continue\n }\n\n const stringifiedBoolean = k.startsWith('aria-') || k.startsWith('data-')\n const attr = attributeName(k, isSvg)\n\n let expectedValue: string | null\n if (value == null || (value === false && !stringifiedBoolean)) {\n expectedValue = null\n } else {\n expected ??= createHostNode(tag, isSvg)\n setProp(expected, k, value, undefined, isSvg)\n expectedValue = expected.getAttribute(attr)\n }\n const actualValue = el.getAttribute(attr)\n if (expectedValue !== actualValue) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(\n `Hydration attribute mismatch on <${tag}> for \"${attr}\": ` +\n `expected ${formatHydrationValue(expectedValue)} but found ${formatHydrationValue(actualValue)}.`,\n )\n : undefined,\n recoverInPlace,\n )\n }\n }\n}\n\nfunction hydrationStylesMatch(\n actual: CSSStyleDeclaration,\n expected: CSSStyleDeclaration,\n): boolean {\n for (let index = 0; index < expected.length; index++) {\n const property = expected.item(index)\n if (\n actual.getPropertyValue(property) !== expected.getPropertyValue(property) ||\n actual.getPropertyPriority(property) !== expected.getPropertyPriority(property)\n ) {\n return false\n }\n }\n return true\n}\n\nfunction formatHydrationValue(value: string | null): string {\n return value == null ? 'nothing' : JSON.stringify(value)\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n FiberTag,\n REACT_ELEMENT_TYPE,\n type Fiber,\n type FiberRoot,\n type ReactElement,\n type ReactNode,\n} from '../../../core'\nimport { attributeName, STRING_BOOLEAN_ATTRS } from '../../../core/attributes'\nimport { createHostNode, setProp } from '../../dom'\nimport { drainReplayQueue } from '../../event-replay'\nimport { discardPendingWork, findRoot, flushSyncWork, renderRoot, unmountFiber } from '../../reconcile'\nimport { attachRootFiber, createFiberRoot } from '../../root-internal'\n\n// Re-export from event-replay so all hydration concerns live behind one\n// feature boundary \u2014 the plugin's stub swap strips drainReplayQueue too.\nexport { drainReplayQueue }\n\n/**\n * Preserve the user's scroll position across hydration. If the user scrolled\n * between SSR paint and hydrate (common in dev where JS takes seconds to\n * load), libraries that wire scroll-restoration into a `useLayoutEffect`\n * near the root (e.g. TanStack Router) will run during our synchronous\n * hydrate and call `window.scrollTo(savedFromLastVisit)` \u2014 overwriting the\n * user's fresh scroll. We install a short-lived wrapper around scrollTo that\n * suppresses programmatic calls when a user-initiated scroll happened\n * recently. Only runs in the hydration feature \u2014 the stub skips it.\n */\nexport function installHydrationScrollGuard(): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (w._r) return\n const time = Date.now\n const guardStartedAt = w._r = time()\n let lastUserScrollAt = 0\n let programmatic = false\n w.addEventListener(\n 'scroll',\n () => {\n if (!programmatic) {\n lastUserScrollAt = time()\n }\n },\n { capture: true, passive: true },\n )\n const origScrollTo = w.scrollTo\n w.scrollTo = function (...args: any[]) {\n const now = time()\n if (\n now - guardStartedAt < 3000 &&\n now - lastUserScrollAt < 1500\n ) {\n return\n }\n programmatic = true\n try {\n return (origScrollTo as any).apply(w, args)\n } finally {\n queueMicrotask(() => {\n programmatic = false\n })\n }\n }\n}\n\n/**\n * Hydration cursor: walks existing DOM children in document order so we can\n * adopt them during fiber tree construction. One cursor per host parent.\n *\n * `endBefore` scopes the cursor to a subrange \u2014 used by rehydrateBoundary()\n * so we only adopt DOM up to the closing `/$` marker for that boundary.\n */\nexport class HydrationCursor {\n n: ChildNode | null\n p: Node\n e: ChildNode | null\n constructor(parent: Node, start: ChildNode | null = null, endBefore: ChildNode | null = null) {\n this.p = parent\n this.n = start ?? parent.firstChild\n this.e = endBefore\n }\n take(): ChildNode | null {\n while (this.n && this.n !== this.e) {\n const n = this.n\n // Skip anything that isn't an element (1) or text (3):\n // comments (8), doctype (10), processing instructions (7), cdata (4).\n if (n.nodeType !== 1 && n.nodeType !== 3) {\n this.n = n.nextSibling\n continue\n }\n this.n = n.nextSibling\n return n\n }\n return null\n }\n /**\n * Position-insensitive lookup for head/html adoption. Scans forward past\n * non-matching nodes without removing them, matching by tag AND the key\n * attributes that identify head elements uniquely (rel/href for links,\n * name/property for meta, src for script). Non-matching nodes stay in\n * place so the SSR'd stylesheet/script order is preserved.\n */\n head(tag: string, props: Record<string, any>): ChildNode | null {\n const target = tag.toLowerCase()\n const keyAttrs = HEAD_KEY_ATTRS[target]\n let scan = this.p.firstChild\n while (scan) {\n if (\n scan.nodeType === 1 &&\n (scan as Element).tagName.toLowerCase() === target &&\n headAttrsMatch(scan as Element, props, keyAttrs)\n ) {\n CLAIMED.add(scan)\n return scan\n }\n scan = scan.nextSibling\n }\n return null\n }\n has(): boolean {\n let n = this.n\n while (n && n !== this.e) {\n if (n.nodeType === 1 || n.nodeType === 3) return true\n n = n.nextSibling\n }\n return false\n }\n}\n\nconst hydrationCursors = new WeakMap<Fiber, HydrationCursor>()\nconst PROD_HYDRATION_ERROR = 'Hydration mismatch.'\n\nexport interface HydrationBailoutError extends Error {\n f: Fiber | null\n}\n\nexport function isHydrationBailout(error: unknown): error is HydrationBailoutError {\n return !!error && (error as any).f !== undefined\n}\n\nexport function abortHydration(cause: unknown, fiber: Fiber | null = null): never {\n const error = (cause instanceof Error ? cause : new Error(PROD_HYDRATION_ERROR)) as HydrationBailoutError\n ;(error as any).f = fiber\n throw error\n}\n\ninterface HydrateRootOptions {\n identifierPrefix?: string\n onRecoverableError?: (error: unknown) => void\n onCaughtError?: (error: unknown) => void\n onUncaughtError?: (error: unknown) => void\n}\n\ninterface HydratedRoot {\n render(children: ReactNode): void\n unmount(): void\n}\n\nexport function hydrateRootImpl(\n container: Element | Document,\n initialChildren: ReactNode,\n options: HydrateRootOptions,\n): HydratedRoot {\n const target = container as any as Element | Document\n const isDocument = (container as Node).nodeType === 9\n const body = isDocument ? (target as Document).body : null\n const root = createFiberRoot(target, options)\n\n installHydrationScrollGuard()\n\n const normalizedInitialChildren =\n isDocument ? normalizeDocumentChildren(initialChildren) : initialChildren\n let hydrationError: unknown = null\n beginHydration(root)\n try {\n flushSyncWork(() => {\n renderRoot(root, normalizedInitialChildren)\n })\n } catch (e) {\n hydrationError = e\n }\n endHydration(root)\n\n if (hydrationError && !recoverHydration(root, hydrationError)) throw hydrationError\n drainReplayQueue()\n\n return {\n render(children) {\n flushSyncWork(() => {\n const normalized = isDocument ? normalizeDocumentChildren(children) : children\n renderRoot(\n root,\n root.c === body ? getStaticDocumentBodyChildren(normalized) ?? normalized : normalized,\n )\n })\n },\n unmount() {\n flushSyncWork(() => {\n renderRoot(root, null)\n })\n },\n }\n}\n\n// Head elements that we match against server DOM by attribute signature.\nconst HEAD_KEY_ATTRS: Record<string, ReadonlyArray<string>> = {\n link: ['rel', 'href', 'sizes', 'type'],\n meta: ['name', 'property', 'charSet', 'httpEquiv'],\n script: ['src', 'type'],\n style: ['id', 'media', 'nonce', 'title'],\n}\n\nconst DOCUMENT_HEAD_TAGS = new Set(['base', 'link', 'meta', 'script', 'style', 'title'])\n\n// DOM elements already claimed by some fiber during this hydration pass.\nconst CLAIMED = new WeakSet<Node>()\n\nfunction headAttrsMatch(\n el: Element,\n props: Record<string, any>,\n keys: ReadonlyArray<string> | undefined,\n): boolean {\n if (CLAIMED.has(el)) return false\n if (!keys) return true\n for (const k of keys) {\n const propVal = props[k]\n const elVal = el.getAttribute(attributeName(k))\n if (propVal == null && elVal == null) continue\n if (propVal == null || elVal == null || String(propVal) !== elVal) return false\n }\n return true\n}\n\nexport function beginHydration(root: FiberRoot): void {\n root.ic = 0\n root.h = true\n hydrationCursors.set(root.r, new HydrationCursor(root.c))\n}\n\nexport function endHydration(root: FiberRoot): void {\n root.h = false\n hydrationCursors.delete(root.r)\n}\n\n/**\n * Inspect the current cursor position for a streaming-suspense boundary\n * marker emitted by the server. Returns info + advances the cursor past the\n * marker pair (start comment + fallback/real content + end comment).\n */\nexport type BoundaryInfo = [0 | 1, number, Comment, Comment]\n\nexport function tryConsumeBoundary(parent: Fiber): BoundaryInfo | null {\n const cursor = hydrationCursors.get(findHostParent(parent))\n if (!cursor) return null\n const peek = cursor.n\n if (!peek || peek.nodeType !== 8) return null\n const data = (peek as Comment).data\n const m = /^(\\$\\??)(\\d+)$/.exec(data)\n if (!m) return null\n const kind = m[1] === '$?' ? 1 : 0\n const id = Number(m[2])\n const startMark = peek as Comment\n // Advance past the start comment\n cursor.n = startMark.nextSibling\n // Locate end comment: closest <!--/$-->\n let endMark: Comment | null = null\n let scan = startMark.nextSibling\n while (scan) {\n if (scan.nodeType === 8 && (scan as Comment).data === '/$') {\n endMark = scan as Comment\n break\n }\n scan = scan.nextSibling\n }\n if (!endMark) return null\n return [kind, id, startMark, endMark]\n}\n\nexport function advanceCursorPast(parent: Fiber, node: Node): void {\n const cursor = hydrationCursors.get(findHostParent(parent))\n if (!cursor) return\n cursor.n = node.nextSibling\n}\n\nexport function getHydrationCursor(hostFiber: Fiber): HydrationCursor | undefined {\n return hydrationCursors.get(hostFiber)\n}\n\nexport function setHydrationCursor(hostFiber: Fiber, cursor: HydrationCursor): void {\n hydrationCursors.set(hostFiber, cursor)\n}\n\nexport function clearHydrationCursor(hostFiber: Fiber): void {\n hydrationCursors.delete(hostFiber)\n}\n\n/**\n * Try to adopt a DOM node for this host fiber. Returns true if adopted.\n * Attaches existing attrs/children via separate hydrate pass.\n */\nexport function adoptHostDom(fiber: Fiber, parent: Fiber): boolean {\n const hostParent = findHostParent(parent)\n const cursor = hydrationCursors.get(hostParent)\n if (!cursor) return false\n\n const tag = (fiber.type as string).toLowerCase()\n const documentHeadParent =\n cursor.p.nodeType === 9 && DOCUMENT_HEAD_TAGS.has(tag)\n ? (cursor.p as Document).head\n : null\n const parentEl = cursor.p as Element\n const parentTag =\n parentEl.nodeType === 1 ? (parentEl as Element).tagName.toLowerCase() : ''\n const isHeadish = parentTag === 'head' || parentTag === 'html' || !!documentHeadParent\n\n let candidate: ChildNode | null\n if (documentHeadParent) {\n // React 19 can project <meta>/<title>/<link> from anywhere in the tree into\n // document.head. Redact does not have that projection yet, so when a\n // document-root hydration pass sees a top-level head element, adopt it\n // from <head> rather than trying to append it beside <html>.\n candidate = new HydrationCursor(documentHeadParent).head(\n tag,\n fiber.pp ?? {},\n )\n } else if (isHeadish) {\n // Head/html children are position-insensitive \u2014 server may emit them in\n // a different order than the React tree (React 19 head hoisting, etc.).\n // Scan forward without removing non-matching nodes; match on attribute\n // signature so we don't adopt the wrong <link> and clobber its props.\n candidate = cursor.head(tag, fiber.pp ?? {})\n } else {\n candidate = cursor.take()\n }\n\n if (!candidate) {\n // Client expected a host here but the cursor is exhausted \u2014 server gave\n // fewer children than the client tree. Report the structural gap (React\n // fires `onRecoverableError` for this exact case) and let the reconciler\n // mount a fresh DOM for this fiber below.\n // Exception: <head> children are position-insensitive; a missing match\n // there means \"server didn't hoist this one yet\", which we silently mount.\n if (!isHeadish) onMismatch(fiber, null)\n return false\n }\n\n if (candidate.nodeType !== 1 || (candidate as Element).tagName.toLowerCase() !== tag) {\n // mismatch \u2014 log and re-render fresh from this point\n onMismatch(fiber, candidate)\n return false\n }\n fiber.dom = candidate\n // Apply props (attach events, sync IDL props). Don't re-set existing attrs.\n const props = fiber.pp ?? {}\n const isSvg =\n tag === 'svg' ||\n ((candidate as Element).namespaceURI === 'http://www.w3.org/2000/svg' &&\n tag !== 'foreignobject')\n const syncHydrationProps =\n !props.suppressHydrationWarning &&\n canRecoverHydrationPropMismatch(candidate, tag)\n validateHydrationProps(fiber, candidate as Element, props, tag, isSvg)\n for (const k in props) {\n if (\n k === 'children' ||\n k === 'key' ||\n k === 'ref' ||\n k === 'suppressHydrationWarning' ||\n k === 'suppressContentEditableWarning'\n ) continue\n if (\n syncHydrationProps ||\n (k[0] === 'o' && k[1] === 'n' && typeof props[k] == 'function')\n ) {\n setProp(candidate as Element, k, props[k], undefined, isSvg)\n }\n }\n // Set up child cursor for this host's children\n hydrationCursors.set(fiber, new HydrationCursor(candidate))\n return true\n}\n\nexport function adoptTextDom(fiber: Fiber, parent: Fiber, text: string): boolean {\n const cursor = hydrationCursors.get(findHostParent(parent))\n if (!cursor) return false\n const candidate = cursor.take()\n if (!candidate) {\n onMismatch(fiber, null)\n return false\n }\n if (candidate.nodeType === 3) {\n if ((candidate as Text).data !== text) {\n const recovered = failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(\n `Hydration text mismatch: expected \"${text}\" but found \"${(candidate as Text).data}\".`,\n )\n : undefined,\n canRecoverHydrationPropMismatch(candidate),\n )\n if (recovered) {\n ;(candidate as Text).data = text\n }\n }\n fiber.dom = candidate\n return true\n }\n onMismatch(fiber, candidate)\n return false\n}\n\nexport function findHostParent(fiber: Fiber): Fiber {\n let f: Fiber | null = fiber\n while (f) {\n // A fiber explicitly holding a cursor acts as a boundary for hydration\n // (e.g. Suspense with a scoped cursor during fallback/boundary hydration).\n if (hydrationCursors.has(f)) return f\n if (f.tag === FiberTag.Host || f.tag === FiberTag.Root || f.tag === FiberTag.Portal) {\n return f\n }\n f = f.parent\n }\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('No host parent found')\n }\n throw new Error()\n}\n\nfunction onMismatch(fiber: Fiber, actualNode: ChildNode | null): void {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(\n `Hydration mismatch: expected <${(fiber.type as string) ?? 'text'}> but found ${\n actualNode ? (actualNode.nodeType === 1 ? (actualNode as Element).tagName : 'text') : 'nothing'\n }.`,\n )\n : undefined,\n )\n}\n\nfunction failHydration(\n fiber: Fiber,\n error: Error = new Error(PROD_HYDRATION_ERROR),\n recoverInPlace = false,\n): boolean {\n const root = findRoot(fiber)\n if (root?.re) {\n root.re(error)\n }\n if (recoverInPlace) return true\n abortHydration(error, findHostRecoveryParent(fiber) ?? fiber)\n}\n\nfunction canRecoverHydrationPropMismatch(node: Node, tag?: string): boolean {\n return (\n tag === 'html' ||\n tag === 'head' ||\n tag === 'body' ||\n !!node.ownerDocument?.head?.contains(node)\n )\n}\n\nfunction findHostRecoveryParent(fiber: Fiber): Fiber | null {\n if (fiber.tag === FiberTag.Text) {\n let directHost = fiber.parent\n while (directHost && (directHost.tag !== FiberTag.Host || !directHost.dom)) {\n directHost = directHost.parent\n }\n if (!directHost) return null\n let hasEvent\n const props = directHost.pp ?? directHost.mp\n if (props) {\n for (const k in props) {\n if (k[0] === 'o' && k[1] === 'n' && typeof props[k] == 'function') {\n hasEvent = true\n }\n }\n }\n return findNearestSafeHostAboveComposite(\n hasEvent\n ? directHost.parent\n : directHost.parent?.tag === FiberTag.Host\n ? directHost.parent\n : directHost,\n )\n }\n\n return findNearestSafeHostAboveComposite(fiber.parent)\n}\n\nfunction findNearestSafeHostAboveComposite(fiber: Fiber | null): Fiber | null {\n let host: Fiber | null = null\n let f = fiber\n while (f) {\n if (f.tag === FiberTag.Host && f.dom) {\n if (!isSafeHostRecoveryElement(f)) return null\n const parentTag = f.parent?.tag as number\n if (!host || (parentTag > FiberTag.Text && parentTag < FiberTag.Suspense)) {\n host = f\n }\n }\n f = f.parent\n }\n return host\n}\n\nfunction isSafeHostRecoveryElement(fiber: Fiber): boolean {\n const tag = fiber.type.toLowerCase()\n return tag !== 'html' && tag !== 'head' && tag !== 'body'\n}\n\nexport function recoverHydration(root: FiberRoot, error: unknown): boolean {\n if (!isHydrationBailout(error)) return false\n\n let container = root.c as Element | Document\n let children = root.r.pp?.children ?? null\n const hostRecovery = getRecoverableHostChildren(error)\n if (hostRecovery) {\n container = hostRecovery[0]\n children = hostRecovery[1]\n } else if (container.nodeType === 9) {\n const bodyChildren = getRecoverableDocumentBodyChildren(error)\n if (bodyChildren != null) {\n container = (container as Document).body\n children = bodyChildren\n }\n }\n\n resetAfterHydrationFailure(root, container)\n try {\n flushSyncWork(() => renderRoot(root, children))\n } catch (clientError) {\n resetAfterHydrationFailure(root, container)\n throw clientError\n }\n return true\n}\n\nfunction resetAfterHydrationFailure(\n root: FiberRoot,\n container: Element | Document,\n): void {\n // Retire subscriptions and queued effects without removing the document shell\n // or host ancestors retained by the recovery container.\n unmountFiber(root.r, false)\n discardPendingWork(root)\n clearHydrationContainer(container)\n attachRootFiber(root, container)\n root.h = false\n}\n\nfunction clearHydrationContainer(container: Element | Document): void {\n if (container.nodeType === 9) {\n let node = container.firstChild\n while (node) {\n const next = node.nextSibling\n if (node.nodeType !== 10 /* DOCUMENT_TYPE_NODE */) {\n container.removeChild(node)\n }\n node = next\n }\n return\n }\n ;(container as Element).textContent = ''\n}\n\nfunction getRecoverableHostChildren(\n error: HydrationBailoutError,\n): [Element, ReactNode] | null {\n const host = error.f\n if (\n host?.tag !== FiberTag.Host ||\n !host.dom ||\n !findNearestSafeHostAboveComposite(host.parent)\n ) {\n return null\n }\n return [host.dom as Element, (host.pp ?? host.mp)?.children ?? null]\n}\n\nfunction getRecoverableDocumentBodyChildren(error: HydrationBailoutError): ReactNode | null {\n const bodyFiber = findBodyAncestor(error.f)\n if (!bodyFiber) return null\n return (bodyFiber.pp ?? bodyFiber.mp)?.children ?? null\n}\n\nfunction findBodyAncestor(fiber: Fiber | null): Fiber | null {\n let f = fiber\n while (f) {\n if (f.tag === FiberTag.Host && f.type === 'body') {\n return f === fiber ? null : f\n }\n f = f.parent\n }\n return null\n}\n\nfunction getStaticDocumentBodyChildren(children: ReactNode): ReactNode | null {\n const list = toChildArray(children)\n const html = list.find((child) => isHostElement(child, 'html')) as ReactElement | undefined\n if (!html) return null\n const htmlChildren = toChildArray(html.props?.children)\n const body = htmlChildren.find((child) => isHostElement(child, 'body')) as ReactElement | undefined\n return body ? body.props?.children ?? null : null\n}\n\nfunction normalizeDocumentChildren(children: ReactNode): ReactNode {\n const list = toChildArray(children)\n const htmlIndex = list.findIndex((child) => isHostElement(child, 'html'))\n if (htmlIndex === -1) return children\n\n const headNodes = list.filter(isHeadElement)\n if (headNodes.length === 0) return children\n\n const htmlElement = list[htmlIndex] as ReactElement\n const normalizedHtml = hoistIntoHtmlHead(htmlElement, headNodes)\n return list\n .filter((child, index) => index === htmlIndex || !isHeadElement(child))\n .map((child) => (child === htmlElement ? normalizedHtml : child))\n}\n\nfunction hoistIntoHtmlHead(htmlElement: ReactElement, headNodes: ReactNode[]): ReactElement {\n const htmlChildren = toChildArray(htmlElement.props?.children)\n const headIndex = htmlChildren.findIndex((child) => isHostElement(child, 'head'))\n let nextChildren: ReactNode[]\n\n if (headIndex === -1) {\n nextChildren = [\n createHostElement('head', { children: headNodes }),\n ...htmlChildren,\n ]\n } else {\n const headElement = htmlChildren[headIndex] as ReactElement\n const existingHeadChildren = toChildArray(headElement.props?.children)\n const nextHead = {\n ...headElement,\n props: {\n ...headElement.props,\n children: [...headNodes, ...existingHeadChildren],\n },\n }\n nextChildren = htmlChildren.map((child, index) => (index === headIndex ? nextHead : child))\n }\n\n return {\n ...htmlElement,\n props: {\n ...htmlElement.props,\n children: nextChildren,\n },\n }\n}\n\nfunction toChildArray(children: unknown): ReactNode[] {\n if (children == null || typeof children === 'boolean') return []\n if (Array.isArray(children)) return children as ReactNode[]\n if (isReactElement(children)) return [children]\n if (typeof children !== 'string' && isIterable(children)) return Array.from(children) as ReactNode[]\n return [children as ReactNode]\n}\n\nfunction isHeadElement(value: ReactNode): boolean {\n return isReactElement(value) && typeof value.type === 'string' && DOCUMENT_HEAD_TAGS.has(value.type)\n}\n\nfunction isHostElement(value: ReactNode, tag: string): boolean {\n return isReactElement(value) && value.type === tag\n}\n\nfunction isReactElement(value: unknown): value is ReactElement {\n return !!value && typeof value === 'object' && (value as ReactElement).$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction isIterable(value: unknown): value is Iterable<ReactNode> {\n return !!value && typeof (value as { [Symbol.iterator]?: unknown })[Symbol.iterator] == 'function'\n}\n\nfunction createHostElement(type: string, props: Record<string, unknown>): ReactElement {\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type,\n key: null,\n ref: null,\n props,\n }\n}\n\nfunction validateHydrationProps(\n fiber: Fiber,\n el: Element,\n props: Record<string, any>,\n tag: string,\n isSvg: boolean,\n): void {\n if (props.suppressHydrationWarning) return\n\n const recoverInPlace = canRecoverHydrationPropMismatch(el, tag)\n let expected: Element | undefined\n\n for (const k in props) {\n const value = props[k]\n if (\n k === 'children' ||\n k === 'key' ||\n k === 'ref' ||\n k === 'suppressHydrationWarning' ||\n k === 'suppressContentEditableWarning' ||\n (k[0] === 'o' && k[1] === 'n' && typeof value == 'function')\n ) continue\n\n if (k === 'dangerouslySetInnerHTML') {\n let html = '' + (value?.__html ?? '')\n if (tag !== 'script' && tag !== 'style') {\n const probe = document.createElement('div')\n probe.innerHTML = html\n html = probe.innerHTML\n }\n if ((el as HTMLElement).innerHTML !== html) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration HTML mismatch inside <${tag}>.`)\n : undefined,\n recoverInPlace,\n )\n }\n continue\n }\n\n if (k === 'value' || k === 'defaultValue') {\n if (tag === 'select') continue\n if (tag === 'input' || tag === 'textarea') {\n if (k === 'value' || props.value == null) {\n if (value != null && (el as HTMLInputElement).value !== '' + value) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration ${tag} value mismatch on <${tag}>.`)\n : undefined,\n recoverInPlace,\n )\n }\n }\n continue\n }\n }\n\n if (tag === 'input' && (k === 'checked' || k === 'defaultChecked')) {\n if (k === 'checked' || props.checked == null) {\n if (value != null && (el as HTMLInputElement).checked !== !!value) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration checked mismatch on <input>.`)\n : undefined,\n recoverInPlace,\n )\n }\n }\n continue\n }\n\n if (tag === 'option' && k === 'selected') {\n if (value != null && (el as HTMLOptionElement).selected !== !!value) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration selected mismatch on <option>.`)\n : undefined,\n recoverInPlace,\n )\n }\n continue\n }\n\n if (k === 'style') {\n expected ??= createHostNode(tag, isSvg)\n setProp(expected, k, value, undefined, isSvg)\n if (\n !hydrationStylesMatch(\n (el as HTMLElement).style,\n (expected as HTMLElement).style,\n )\n ) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(`Hydration style mismatch on <${tag}>.`)\n : undefined,\n recoverInPlace,\n )\n }\n continue\n }\n\n const attr = attributeName(k, isSvg)\n const stringifiedBoolean =\n STRING_BOOLEAN_ATTRS.has(attr) || k.startsWith('aria-') || k.startsWith('data-')\n\n let expectedValue: string | null\n if (value == null || (value === false && !stringifiedBoolean)) {\n expectedValue = null\n } else if (k === 'muted' && !isSvg && (tag === 'video' || tag === 'audio')) {\n // The muted property controls playback; defaultMuted reflects the SSR attribute.\n expectedValue = value ? '' : null\n } else {\n expected ??= createHostNode(tag, isSvg)\n setProp(expected, k, value, undefined, isSvg)\n expectedValue = expected.getAttribute(attr)\n }\n const actualValue = el.getAttribute(attr)\n if (expectedValue !== actualValue) {\n failHydration(\n fiber,\n process.env.NODE_ENV !== 'production'\n ? new Error(\n `Hydration attribute mismatch on <${tag}> for \"${attr}\": ` +\n `expected ${formatHydrationValue(expectedValue)} but found ${formatHydrationValue(actualValue)}.`,\n )\n : undefined,\n recoverInPlace,\n )\n }\n }\n}\n\nfunction hydrationStylesMatch(\n actual: CSSStyleDeclaration,\n expected: CSSStyleDeclaration,\n): boolean {\n for (let index = 0; index < expected.length; index++) {\n const property = expected.item(index)\n if (\n actual.getPropertyValue(property) !== expected.getPropertyValue(property) ||\n actual.getPropertyPriority(property) !== expected.getPropertyPriority(property)\n ) {\n return false\n }\n }\n return true\n}\n\nfunction formatHydrationValue(value: string | null): string {\n return value == null ? 'nothing' : JSON.stringify(value)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -91,7 +91,7 @@ function renderSuspense(fiber, domParent, anchor) {
91
91
  state.f.pp = { children: props.fallback };
92
92
  renderFiber(state.f, domParent, anchor);
93
93
  } else {
94
- unmountAllChildren(fiber, domParent);
94
+ unmountAllChildren(fiber);
95
95
  reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor);
96
96
  }
97
97
  } else {
@@ -102,7 +102,7 @@ function renderSuspense(fiber, domParent, anchor) {
102
102
  state.d = null;
103
103
  }
104
104
  if (state.f) {
105
- unmountFiber(state.f, domParent);
105
+ unmountFiber(state.f);
106
106
  state.f = null;
107
107
  }
108
108
  }
@@ -138,7 +138,7 @@ function hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor) {
138
138
  } catch (e) {
139
139
  if (!isHydrationBailout(e)) {
140
140
  clearBoundaryRange(startMark, endMark);
141
- unmountAllChildren(fiber, parent);
141
+ unmountAllChildren(fiber);
142
142
  throw e;
143
143
  }
144
144
  recoverBoundaryHydration(fiber, props.children, parent, startMark, endMark);
@@ -171,14 +171,14 @@ function recoverBoundaryHydration(fiber, children, parent, startMark, endMark) {
171
171
  const prevHydrating = root.h;
172
172
  discardPendingWork(root);
173
173
  clearBoundaryRange(startMark, endMark);
174
- unmountAllChildren(fiber, parent);
174
+ unmountAllChildren(fiber);
175
175
  root.h = false;
176
176
  try {
177
177
  reconcileChildren(fiber, childrenToArray(children), parent, endMark);
178
178
  advanceCursorPast(fiber.parent, endMark);
179
179
  } catch (clientError) {
180
180
  clearBoundaryRange(startMark, endMark);
181
- unmountAllChildren(fiber, parent);
181
+ unmountAllChildren(fiber);
182
182
  throw clientError;
183
183
  } finally {
184
184
  root.h = prevHydrating;
@@ -189,13 +189,13 @@ function recoverFallbackHydration(fiber, fallback, parent) {
189
189
  const prevHydrating = root.h;
190
190
  discardPendingWork(root);
191
191
  parent.textContent = "";
192
- unmountAllChildren(fiber, parent);
192
+ unmountAllChildren(fiber);
193
193
  root.h = false;
194
194
  try {
195
195
  reconcileChildren(fiber, childrenToArray(fallback), parent, null);
196
196
  } catch (clientError) {
197
197
  parent.textContent = "";
198
- unmountAllChildren(fiber, parent);
198
+ unmountAllChildren(fiber);
199
199
  throw clientError;
200
200
  } finally {
201
201
  root.h = prevHydrating;
@@ -210,14 +210,14 @@ function rehydrateBoundary(fiber) {
210
210
  withCurrentRoot(root, () => {
211
211
  const prevHydrating = root.h;
212
212
  try {
213
- unmountAllChildren(fiber, parent);
213
+ unmountAllChildren(fiber);
214
214
  root.h = true;
215
215
  setHydrationCursor(fiber, new HydrationCursor(parent, state.b.nextSibling, state.e));
216
216
  reconcileChildren(fiber, childrenToArray(state.r), parent, null);
217
217
  } catch (e) {
218
218
  if (!isHydrationBailout(e)) {
219
219
  clearBoundaryRange(state.b, state.e);
220
- unmountAllChildren(fiber, parent);
220
+ unmountAllChildren(fiber);
221
221
  throw e;
222
222
  }
223
223
  recoverBoundaryHydration(fiber, state.r, parent, state.b, state.e);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dom/features/suspense/full.ts"],
4
- "sourcesContent": ["import { FiberTag, createFiber, type Fiber } from '../../../core'\nimport { REACT_SUSPENSE_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n renderFiber,\n scheduleUpdate,\n unmountAllChildren,\n unmountFiber,\n findRoot,\n runEffects,\n getCurrentRoot,\n withCurrentRoot,\n discardPendingWork,\n} from '../../reconcile'\nimport {\n HydrationCursor,\n setHydrationCursor,\n clearHydrationCursor,\n advanceCursorPast,\n tryConsumeBoundary,\n isHydrationBailout,\n} from '../hydration'\n\nlet suspendHandler: ((t: Promise<any>) => void) | null = null\n\nfunction realHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n if (suspendHandler) return suspendHandler(thenable)\n // Fallback: schedule re-render when promise settles\n thenable.then(\n () => scheduleUpdate(fiber),\n () => scheduleUpdate(fiber),\n )\n}\n\n// React's Suspense semantics: when a re-render of an already-committed\n// boundary suspends, the previously-committed children are kept in the DOM\n// (hidden) so their scroll position, focus, selection, native form state,\n// and component state survive across the suspension. The fallback is mounted\n// alongside the hidden primary until the pending promise resolves.\n//\n// We track the hidden subtree DOM in `state.d` (root host nodes +\n// their original `display` so we can restore it) and the fallback as a\n// detached Fragment fiber in `state.f` (deliberately kept OUT of\n// `fiber.child` so reconciles against `props.children` don't trip on it).\n// First-mount suspensions have no committed DOM worth preserving, so they\n// keep the original unmount-and-render-fallback behavior.\ninterface SuspenseState {\n p?: Promise<any> | null\n b?: Comment\n e?: Comment\n r?: any\n a?: boolean\n // Re-suspend preservation:\n d?: Array<[HTMLElement, string]> | null\n f?: Fiber | null\n}\n\nfunction renderSuspense(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n const state = (fiber.ms ??= {}) as SuspenseState\n\n // Streaming hydration: if the next DOM node is a server-emitted boundary\n // marker, route through the boundary-aware hydration path.\n const root = getCurrentRoot()\n if (root?.h && !state.b) {\n const boundary = tryConsumeBoundary(fiber.parent!)\n if (boundary) {\n hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor)\n return\n }\n }\n\n // A descendant Lazy deferred its hydration (see renderLazy's hydrating\n // branch). Its SSR-rendered content is still in the DOM and cursor-bound\n // via the Lazy fiber \u2014 we just haven't swapped it into a fiber subtree\n // yet. Until the Lazy's resume fires, skip our own tryChildren pass so\n // an unrelated re-render can't accidentally flip us into the suspended\n // path and mount a duplicate fallback on top of the SSR content.\n if (state.a) {\n fiber.mp = props\n return\n }\n\n // We were already in the suspended-with-preserved-primary state. Don't\n // re-attempt primary children (would re-throw and churn the tree). Just\n // refresh the fallback in case its JSX changed, and wait for the pending\n // promise to fire scheduleUpdate.\n if (state.p) {\n if (state.f) {\n state.f.pp = { children: props.fallback }\n renderFiber(state.f, domParent, anchor)\n } else {\n // Initial-mount suspended path: no committed primary to preserve.\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n fiber.mp = props\n return\n }\n\n // Snapshot whether we have an existing committed primary tree before\n // attempting the new render. If the new attempt suspends and we did have a\n // committed primary, we keep it (hidden) rather than destroying it.\n const hadCommittedPrimary = fiber.mp && fiber.child\n\n const prevHandler = suspendHandler\n let pendingThenable: any\n suspendHandler = (thenable) => {\n pendingThenable = thenable\n }\n try {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n } finally {\n suspendHandler = prevHandler\n }\n\n if (pendingThenable) {\n state.p = pendingThenable\n const onSettle = () => {\n state.p = null\n scheduleUpdate(fiber)\n }\n pendingThenable.then(onSettle, onSettle)\n\n if (hadCommittedPrimary) {\n // Hide the primary subtree's root host doms so the fallback is the only\n // thing visible, but the underlying nodes (and their scroll/state/focus)\n // survive. Save original `display` for the resume path.\n const hidden: Array<[HTMLElement, string]> = []\n let c: Fiber | null = hadCommittedPrimary\n while (c) {\n hideRootHostDoms(c, hidden)\n c = c.sibling\n }\n state.d = hidden\n\n // Mount fallback in a detached Fragment fiber. Kept off `fiber.child`\n // so reconciles of primary don't see it as a stale match candidate.\n if (!state.f) {\n state.f = createFiber(FiberTag.Fragment, null, null)\n state.f.parent = fiber\n }\n state.f.pp = { children: props.fallback }\n renderFiber(state.f, domParent, anchor)\n } else {\n // First-mount suspension \u2014 nothing to preserve.\n unmountAllChildren(fiber, domParent)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } else {\n // Render succeeded. Clean up any preserved-suspend state from a prior\n // suspension cycle: unhide primary, unmount the orphan fallback fiber.\n if (state.d) {\n for (const [el, origDisplay] of state.d) {\n el.style.display = origDisplay\n }\n state.d = null\n }\n if (state.f) {\n unmountFiber(state.f, domParent)\n state.f = null\n }\n }\n fiber.mp = props\n}\n\n// Walk a fiber subtree collecting host/text DOM nodes that sit at the root\n// of the subtree (do not descend through their children \u2014 display:none on\n// the root hides the whole element). Used by the hide-on-suspend path.\nfunction hideRootHostDoms(fiber: Fiber, out: Array<[HTMLElement, string]>): void {\n if (fiber.tag === FiberTag.Host) {\n const el = fiber.dom as HTMLElement\n out.push([el, el.style.display])\n el.style.display = 'none'\n return\n }\n if (fiber.tag === FiberTag.Portal) return\n let c = fiber.child\n while (c) {\n hideRootHostDoms(c, out)\n c = c.sibling\n }\n}\n\nfunction hydrateSuspenseBoundary(\n fiber: Fiber,\n props: any,\n boundary: [0 | 1, number, Comment, Comment],\n domParent: Node,\n anchor: Node | null,\n): void {\n const [pendingBoundary, id, startMark, endMark] = boundary\n // Record the boundary shape so we can re-hydrate on reveal.\n fiber.ms = {\n b: startMark,\n e: endMark,\n r: props.children,\n }\n\n if (!pendingBoundary) {\n // Real DOM is inline between startMark and endMark. Hydrate into it.\n const parent = startMark.parentNode!\n try {\n setHydrationCursor(fiber, new HydrationCursor(parent, startMark.nextSibling, endMark))\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber, parent)\n throw e\n }\n recoverBoundaryHydration(fiber, props.children, parent, startMark, endMark)\n } finally {\n clearHydrationCursor(fiber)\n }\n fiber.mp = props\n return\n }\n\n // Pending: fallback DOM lives inside <div id=\"B:ID\">. Hydrate the fallback\n // React subtree against that div's children.\n const bDiv = document.getElementById(`B:${id}`)\n try {\n if (bDiv) {\n setHydrationCursor(fiber, new HydrationCursor(bDiv))\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n } else {\n // Couldn't find fallback container \u2014 render fresh (non-adopting)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } catch (e) {\n if (!isHydrationBailout(e) || !bDiv) throw e\n recoverFallbackHydration(fiber, props.fallback, bDiv)\n } finally {\n clearHydrationCursor(fiber)\n }\n advanceCursorPast(fiber.parent!, endMark)\n\n // Register for server-streamed reveal (HTML chunks + $RC calls).\n ;(globalThis as any).$RH?.(id, () => rehydrateBoundary(fiber))\n // If the inline runtime isn't present, nothing external will mark us dy.\n\n fiber.mp = props\n}\n\nfunction recoverBoundaryHydration(\n fiber: Fiber,\n children: any,\n parent: Node,\n startMark: Comment,\n endMark: Comment,\n): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber, parent)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(children), parent, endMark)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (clientError) {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber, parent)\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction recoverFallbackHydration(fiber: Fiber, fallback: any, parent: HTMLElement): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n parent.textContent = ''\n unmountAllChildren(fiber, parent)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(fallback), parent, null)\n } catch (clientError) {\n parent.textContent = ''\n unmountAllChildren(fiber, parent)\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction rehydrateBoundary(fiber: Fiber): void {\n const state = fiber.ms\n if (!state?.b || !state.e) return\n\n const root = findRoot(fiber)\n const parent = state.b.parentNode as Node\n if (!(root && parent)) return\n\n // Unmount existing fallback subtree. Its DOM has already been removed by $RC\n // (or at least its container); unmounting here cleans up fibers + fx.\n withCurrentRoot(root, () => {\n const prevHydrating = root.h\n try {\n unmountAllChildren(fiber, parent)\n\n // Re-hydrate with real children against the now-real DOM range.\n root.h = true\n setHydrationCursor(fiber, new HydrationCursor(parent, state.b.nextSibling, state.e))\n reconcileChildren(fiber, childrenToArray(state.r), parent, null)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n clearBoundaryRange(state.b, state.e)\n unmountAllChildren(fiber, parent)\n throw e\n }\n\n recoverBoundaryHydration(fiber, state.r, parent, state.b, state.e)\n } finally {\n root.h = prevHydrating\n clearHydrationCursor(fiber)\n }\n runEffects(root)\n })\n}\n\nfunction clearBoundaryRange(startMark: Comment, endMark: Comment): void {\n let node = startMark.nextSibling\n while (node && node !== endMark) {\n const next = node.nextSibling\n node.parentNode?.removeChild(node)\n node = next\n }\n}\n\nregisterTypeMatcher((type) => (type === REACT_SUSPENSE_TYPE ? FiberTag.Suspense : null))\nregisterRenderer(FiberTag.Suspense, renderSuspense)\ninstallCapability('handleSuspended', realHandleSuspended)\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { FiberTag, createFiber, type Fiber } from '../../../core'\nimport { REACT_SUSPENSE_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n renderFiber,\n scheduleUpdate,\n unmountAllChildren,\n unmountFiber,\n findRoot,\n runEffects,\n getCurrentRoot,\n withCurrentRoot,\n discardPendingWork,\n} from '../../reconcile'\nimport {\n HydrationCursor,\n setHydrationCursor,\n clearHydrationCursor,\n advanceCursorPast,\n tryConsumeBoundary,\n isHydrationBailout,\n} from '../hydration'\n\nlet suspendHandler: ((t: Promise<any>) => void) | null = null\n\nfunction realHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n if (suspendHandler) return suspendHandler(thenable)\n // Fallback: schedule re-render when promise settles\n thenable.then(\n () => scheduleUpdate(fiber),\n () => scheduleUpdate(fiber),\n )\n}\n\n// React's Suspense semantics: when a re-render of an already-committed\n// boundary suspends, the previously-committed children are kept in the DOM\n// (hidden) so their scroll position, focus, selection, native form state,\n// and component state survive across the suspension. The fallback is mounted\n// alongside the hidden primary until the pending promise resolves.\n//\n// We track the hidden subtree DOM in `state.d` (root host nodes +\n// their original `display` so we can restore it) and the fallback as a\n// detached Fragment fiber in `state.f` (deliberately kept OUT of\n// `fiber.child` so reconciles against `props.children` don't trip on it).\n// First-mount suspensions have no committed DOM worth preserving, so they\n// keep the original unmount-and-render-fallback behavior.\ninterface SuspenseState {\n p?: Promise<any> | null\n b?: Comment\n e?: Comment\n r?: any\n a?: boolean\n // Re-suspend preservation:\n d?: Array<[HTMLElement, string]> | null\n f?: Fiber | null\n}\n\nfunction renderSuspense(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n const state = (fiber.ms ??= {}) as SuspenseState\n\n // Streaming hydration: if the next DOM node is a server-emitted boundary\n // marker, route through the boundary-aware hydration path.\n const root = getCurrentRoot()\n if (root?.h && !state.b) {\n const boundary = tryConsumeBoundary(fiber.parent!)\n if (boundary) {\n hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor)\n return\n }\n }\n\n // A descendant Lazy deferred its hydration (see renderLazy's hydrating\n // branch). Its SSR-rendered content is still in the DOM and cursor-bound\n // via the Lazy fiber \u2014 we just haven't swapped it into a fiber subtree\n // yet. Until the Lazy's resume fires, skip our own tryChildren pass so\n // an unrelated re-render can't accidentally flip us into the suspended\n // path and mount a duplicate fallback on top of the SSR content.\n if (state.a) {\n fiber.mp = props\n return\n }\n\n // We were already in the suspended-with-preserved-primary state. Don't\n // re-attempt primary children (would re-throw and churn the tree). Just\n // refresh the fallback in case its JSX changed, and wait for the pending\n // promise to fire scheduleUpdate.\n if (state.p) {\n if (state.f) {\n state.f.pp = { children: props.fallback }\n renderFiber(state.f, domParent, anchor)\n } else {\n // Initial-mount suspended path: no committed primary to preserve.\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n fiber.mp = props\n return\n }\n\n // Snapshot whether we have an existing committed primary tree before\n // attempting the new render. If the new attempt suspends and we did have a\n // committed primary, we keep it (hidden) rather than destroying it.\n const hadCommittedPrimary = fiber.mp && fiber.child\n\n const prevHandler = suspendHandler\n let pendingThenable: any\n suspendHandler = (thenable) => {\n pendingThenable = thenable\n }\n try {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n } finally {\n suspendHandler = prevHandler\n }\n\n if (pendingThenable) {\n state.p = pendingThenable\n const onSettle = () => {\n state.p = null\n scheduleUpdate(fiber)\n }\n pendingThenable.then(onSettle, onSettle)\n\n if (hadCommittedPrimary) {\n // Hide the primary subtree's root host doms so the fallback is the only\n // thing visible, but the underlying nodes (and their scroll/state/focus)\n // survive. Save original `display` for the resume path.\n const hidden: Array<[HTMLElement, string]> = []\n let c: Fiber | null = hadCommittedPrimary\n while (c) {\n hideRootHostDoms(c, hidden)\n c = c.sibling\n }\n state.d = hidden\n\n // Mount fallback in a detached Fragment fiber. Kept off `fiber.child`\n // so reconciles of primary don't see it as a stale match candidate.\n if (!state.f) {\n state.f = createFiber(FiberTag.Fragment, null, null)\n state.f.parent = fiber\n }\n state.f.pp = { children: props.fallback }\n renderFiber(state.f, domParent, anchor)\n } else {\n // First-mount suspension \u2014 nothing to preserve.\n unmountAllChildren(fiber)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } else {\n // Render succeeded. Clean up any preserved-suspend state from a prior\n // suspension cycle: unhide primary, unmount the orphan fallback fiber.\n if (state.d) {\n for (const [el, origDisplay] of state.d) {\n el.style.display = origDisplay\n }\n state.d = null\n }\n if (state.f) {\n unmountFiber(state.f)\n state.f = null\n }\n }\n fiber.mp = props\n}\n\n// Walk a fiber subtree collecting host/text DOM nodes that sit at the root\n// of the subtree (do not descend through their children \u2014 display:none on\n// the root hides the whole element). Used by the hide-on-suspend path.\nfunction hideRootHostDoms(fiber: Fiber, out: Array<[HTMLElement, string]>): void {\n if (fiber.tag === FiberTag.Host) {\n const el = fiber.dom as HTMLElement\n out.push([el, el.style.display])\n el.style.display = 'none'\n return\n }\n if (fiber.tag === FiberTag.Portal) return\n let c = fiber.child\n while (c) {\n hideRootHostDoms(c, out)\n c = c.sibling\n }\n}\n\nfunction hydrateSuspenseBoundary(\n fiber: Fiber,\n props: any,\n boundary: [0 | 1, number, Comment, Comment],\n domParent: Node,\n anchor: Node | null,\n): void {\n const [pendingBoundary, id, startMark, endMark] = boundary\n // Record the boundary shape so we can re-hydrate on reveal.\n fiber.ms = {\n b: startMark,\n e: endMark,\n r: props.children,\n }\n\n if (!pendingBoundary) {\n // Real DOM is inline between startMark and endMark. Hydrate into it.\n const parent = startMark.parentNode!\n try {\n setHydrationCursor(fiber, new HydrationCursor(parent, startMark.nextSibling, endMark))\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber)\n throw e\n }\n recoverBoundaryHydration(fiber, props.children, parent, startMark, endMark)\n } finally {\n clearHydrationCursor(fiber)\n }\n fiber.mp = props\n return\n }\n\n // Pending: fallback DOM lives inside <div id=\"B:ID\">. Hydrate the fallback\n // React subtree against that div's children.\n const bDiv = document.getElementById(`B:${id}`)\n try {\n if (bDiv) {\n setHydrationCursor(fiber, new HydrationCursor(bDiv))\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n } else {\n // Couldn't find fallback container \u2014 render fresh (non-adopting)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n } catch (e) {\n if (!isHydrationBailout(e) || !bDiv) throw e\n recoverFallbackHydration(fiber, props.fallback, bDiv)\n } finally {\n clearHydrationCursor(fiber)\n }\n advanceCursorPast(fiber.parent!, endMark)\n\n // Register for server-streamed reveal (HTML chunks + $RC calls).\n ;(globalThis as any).$RH?.(id, () => rehydrateBoundary(fiber))\n // If the inline runtime isn't present, nothing external will mark us dy.\n\n fiber.mp = props\n}\n\nfunction recoverBoundaryHydration(\n fiber: Fiber,\n children: any,\n parent: Node,\n startMark: Comment,\n endMark: Comment,\n): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(children), parent, endMark)\n advanceCursorPast(fiber.parent!, endMark)\n } catch (clientError) {\n clearBoundaryRange(startMark, endMark)\n unmountAllChildren(fiber)\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction recoverFallbackHydration(fiber: Fiber, fallback: any, parent: HTMLElement): void {\n const root = findRoot(fiber)!\n const prevHydrating = root.h\n discardPendingWork(root)\n parent.textContent = ''\n unmountAllChildren(fiber)\n root.h = false\n try {\n reconcileChildren(fiber, childrenToArray(fallback), parent, null)\n } catch (clientError) {\n parent.textContent = ''\n unmountAllChildren(fiber)\n throw clientError\n } finally {\n root.h = prevHydrating\n }\n}\n\nfunction rehydrateBoundary(fiber: Fiber): void {\n const state = fiber.ms\n if (!state?.b || !state.e) return\n\n const root = findRoot(fiber)\n const parent = state.b.parentNode as Node\n if (!(root && parent)) return\n\n // Unmount existing fallback subtree. Its DOM has already been removed by $RC\n // (or at least its container); unmounting here cleans up fibers + fx.\n withCurrentRoot(root, () => {\n const prevHydrating = root.h\n try {\n unmountAllChildren(fiber)\n\n // Re-hydrate with real children against the now-real DOM range.\n root.h = true\n setHydrationCursor(fiber, new HydrationCursor(parent, state.b.nextSibling, state.e))\n reconcileChildren(fiber, childrenToArray(state.r), parent, null)\n } catch (e) {\n if (!isHydrationBailout(e)) {\n clearBoundaryRange(state.b, state.e)\n unmountAllChildren(fiber)\n throw e\n }\n\n recoverBoundaryHydration(fiber, state.r, parent, state.b, state.e)\n } finally {\n root.h = prevHydrating\n clearHydrationCursor(fiber)\n }\n runEffects(root)\n })\n}\n\nfunction clearBoundaryRange(startMark: Comment, endMark: Comment): void {\n let node = startMark.nextSibling\n while (node && node !== endMark) {\n const next = node.nextSibling\n node.parentNode?.removeChild(node)\n node = next\n }\n}\n\nregisterTypeMatcher((type) => (type === REACT_SUSPENSE_TYPE ? FiberTag.Suspense : null))\nregisterRenderer(FiberTag.Suspense, renderSuspense)\ninstallCapability('handleSuspended', realHandleSuspended)\n"],
5
+ "mappings": ";AAAA,SAAS,UAAU,mBAA+B;AAClD,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,IAAI,iBAAqD;AAEzD,SAAS,oBAAoB,OAAc,UAA8B;AACvE,MAAI,eAAgB,QAAO,eAAe,QAAQ;AAElD,WAAS;AAAA,IACP,MAAM,eAAe,KAAK;AAAA,IAC1B,MAAM,eAAe,KAAK;AAAA,EAC5B;AACF;AAyBA,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,QAAM,QAAS,MAAM,OAAO,CAAC;AAI7B,QAAM,OAAO,eAAe;AAC5B,MAAI,MAAM,KAAK,CAAC,MAAM,GAAG;AACvB,UAAM,WAAW,mBAAmB,MAAM,MAAO;AACjD,QAAI,UAAU;AACZ,8BAAwB,OAAO,OAAO,UAAU,WAAW,MAAM;AACjE;AAAA,IACF;AAAA,EACF;AAQA,MAAI,MAAM,GAAG;AACX,UAAM,KAAK;AACX;AAAA,EACF;AAMA,MAAI,MAAM,GAAG;AACX,QAAI,MAAM,GAAG;AACX,YAAM,EAAE,KAAK,EAAE,UAAU,MAAM,SAAS;AACxC,kBAAY,MAAM,GAAG,WAAW,MAAM;AAAA,IACxC,OAAO;AAEL,wBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,IAC7E;AACA,UAAM,KAAK;AACX;AAAA,EACF;AAKA,QAAM,sBAAsB,MAAM,MAAM,MAAM;AAE9C,QAAM,cAAc;AACpB,MAAI;AACJ,mBAAiB,CAAC,aAAa;AAC7B,sBAAkB;AAAA,EACpB;AACA,MAAI;AACF,sBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,EAC7E,UAAE;AACA,qBAAiB;AAAA,EACnB;AAEA,MAAI,iBAAiB;AACnB,UAAM,IAAI;AACV,UAAM,WAAW,MAAM;AACrB,YAAM,IAAI;AACV,qBAAe,KAAK;AAAA,IACtB;AACA,oBAAgB,KAAK,UAAU,QAAQ;AAEvC,QAAI,qBAAqB;AAIvB,YAAM,SAAuC,CAAC;AAC9C,UAAI,IAAkB;AACtB,aAAO,GAAG;AACR,yBAAiB,GAAG,MAAM;AAC1B,YAAI,EAAE;AAAA,MACR;AACA,YAAM,IAAI;AAIV,UAAI,CAAC,MAAM,GAAG;AACZ,cAAM,IAAI,YAAY,SAAS,UAAU,MAAM,IAAI;AACnD,cAAM,EAAE,SAAS;AAAA,MACnB;AACA,YAAM,EAAE,KAAK,EAAE,UAAU,MAAM,SAAS;AACxC,kBAAY,MAAM,GAAG,WAAW,MAAM;AAAA,IACxC,OAAO;AAEL,yBAAmB,KAAK;AACxB,wBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,IAC7E;AAAA,EACF,OAAO;AAGL,QAAI,MAAM,GAAG;AACX,iBAAW,CAAC,IAAI,WAAW,KAAK,MAAM,GAAG;AACvC,WAAG,MAAM,UAAU;AAAA,MACrB;AACA,YAAM,IAAI;AAAA,IACZ;AACA,QAAI,MAAM,GAAG;AACX,mBAAa,MAAM,CAAC;AACpB,YAAM,IAAI;AAAA,IACZ;AAAA,EACF;AACA,QAAM,KAAK;AACb;AAKA,SAAS,iBAAiB,OAAc,KAAyC;AAC/E,MAAI,MAAM,QAAQ,SAAS,MAAM;AAC/B,UAAM,KAAK,MAAM;AACjB,QAAI,KAAK,CAAC,IAAI,GAAG,MAAM,OAAO,CAAC;AAC/B,OAAG,MAAM,UAAU;AACnB;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,SAAS,OAAQ;AACnC,MAAI,IAAI,MAAM;AACd,SAAO,GAAG;AACR,qBAAiB,GAAG,GAAG;AACvB,QAAI,EAAE;AAAA,EACR;AACF;AAEA,SAAS,wBACP,OACA,OACA,UACA,WACA,QACM;AACN,QAAM,CAAC,iBAAiB,IAAI,WAAW,OAAO,IAAI;AAElD,QAAM,KAAK;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG,MAAM;AAAA,EACX;AAEA,MAAI,CAAC,iBAAiB;AAEpB,UAAM,SAAS,UAAU;AACzB,QAAI;AACF,yBAAmB,OAAO,IAAI,gBAAgB,QAAQ,UAAU,aAAa,OAAO,CAAC;AACrF,wBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAC3E,wBAAkB,MAAM,QAAS,OAAO;AAAA,IAC1C,SAAS,GAAG;AACV,UAAI,CAAC,mBAAmB,CAAC,GAAG;AAC1B,2BAAmB,WAAW,OAAO;AACrC,2BAAmB,KAAK;AACxB,cAAM;AAAA,MACR;AACA,+BAAyB,OAAO,MAAM,UAAU,QAAQ,WAAW,OAAO;AAAA,IAC5E,UAAE;AACA,2BAAqB,KAAK;AAAA,IAC5B;AACA,UAAM,KAAK;AACX;AAAA,EACF;AAIA,QAAM,OAAO,SAAS,eAAe,KAAK,EAAE,EAAE;AAC9C,MAAI;AACF,QAAI,MAAM;AACR,yBAAmB,OAAO,IAAI,gBAAgB,IAAI,CAAC;AACnD,wBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,IAC7E,OAAO;AAEL,wBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,IAC7E;AAAA,EACF,SAAS,GAAG;AACV,QAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAM,OAAM;AAC3C,6BAAyB,OAAO,MAAM,UAAU,IAAI;AAAA,EACtD,UAAE;AACA,yBAAqB,KAAK;AAAA,EAC5B;AACA,oBAAkB,MAAM,QAAS,OAAO;AAGvC,EAAC,WAAmB,MAAM,IAAI,MAAM,kBAAkB,KAAK,CAAC;AAG7D,QAAM,KAAK;AACb;AAEA,SAAS,yBACP,OACA,UACA,QACA,WACA,SACM;AACN,QAAM,OAAO,SAAS,KAAK;AAC3B,QAAM,gBAAgB,KAAK;AAC3B,qBAAmB,IAAI;AACvB,qBAAmB,WAAW,OAAO;AACrC,qBAAmB,KAAK;AACxB,OAAK,IAAI;AACT,MAAI;AACF,sBAAkB,OAAO,gBAAgB,QAAQ,GAAG,QAAQ,OAAO;AACnE,sBAAkB,MAAM,QAAS,OAAO;AAAA,EAC1C,SAAS,aAAa;AACpB,uBAAmB,WAAW,OAAO;AACrC,uBAAmB,KAAK;AACxB,UAAM;AAAA,EACR,UAAE;AACA,SAAK,IAAI;AAAA,EACX;AACF;AAEA,SAAS,yBAAyB,OAAc,UAAe,QAA2B;AACxF,QAAM,OAAO,SAAS,KAAK;AAC3B,QAAM,gBAAgB,KAAK;AAC3B,qBAAmB,IAAI;AACvB,SAAO,cAAc;AACrB,qBAAmB,KAAK;AACxB,OAAK,IAAI;AACT,MAAI;AACF,sBAAkB,OAAO,gBAAgB,QAAQ,GAAG,QAAQ,IAAI;AAAA,EAClE,SAAS,aAAa;AACpB,WAAO,cAAc;AACrB,uBAAmB,KAAK;AACxB,UAAM;AAAA,EACR,UAAE;AACA,SAAK,IAAI;AAAA,EACX;AACF;AAEA,SAAS,kBAAkB,OAAoB;AAC7C,QAAM,QAAQ,MAAM;AACpB,MAAI,CAAC,OAAO,KAAK,CAAC,MAAM,EAAG;AAE3B,QAAM,OAAO,SAAS,KAAK;AAC3B,QAAM,SAAS,MAAM,EAAE;AACvB,MAAI,EAAE,QAAQ,QAAS;AAIvB,kBAAgB,MAAM,MAAM;AAC1B,UAAM,gBAAgB,KAAK;AAC3B,QAAI;AACF,yBAAmB,KAAK;AAGxB,WAAK,IAAI;AACT,yBAAmB,OAAO,IAAI,gBAAgB,QAAQ,MAAM,EAAE,aAAa,MAAM,CAAC,CAAC;AACnF,wBAAkB,OAAO,gBAAgB,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,IACjE,SAAS,GAAG;AACV,UAAI,CAAC,mBAAmB,CAAC,GAAG;AAC1B,2BAAmB,MAAM,GAAG,MAAM,CAAC;AACnC,2BAAmB,KAAK;AACxB,cAAM;AAAA,MACR;AAEA,+BAAyB,OAAO,MAAM,GAAG,QAAQ,MAAM,GAAG,MAAM,CAAC;AAAA,IACnE,UAAE;AACA,WAAK,IAAI;AACT,2BAAqB,KAAK;AAAA,IAC5B;AACA,eAAW,IAAI;AAAA,EACjB,CAAC;AACH;AAEA,SAAS,mBAAmB,WAAoB,SAAwB;AACtE,MAAI,OAAO,UAAU;AACrB,SAAO,QAAQ,SAAS,SAAS;AAC/B,UAAM,OAAO,KAAK;AAClB,SAAK,YAAY,YAAY,IAAI;AACjC,WAAO;AAAA,EACT;AACF;AAEA,oBAAoB,CAAC,SAAU,SAAS,sBAAsB,SAAS,WAAW,IAAK;AACvF,iBAAiB,SAAS,UAAU,cAAc;AAClD,kBAAkB,mBAAmB,mBAAmB;",
6
6
  "names": []
7
7
  }