@tanstack/redact 0.0.14 → 0.0.16
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.
- package/dist/core/internal.d.ts +23 -39
- package/dist/core/internal.js +7 -23
- package/dist/core/internal.js.map +3 -3
- package/dist/dom/dispatcher.d.ts +3 -1
- package/dist/dom/dispatcher.js +104 -97
- package/dist/dom/dispatcher.js.map +2 -2
- package/dist/dom/dom.js +1 -1
- package/dist/dom/dom.js.map +2 -2
- package/dist/dom/event-replay.js +7 -29
- package/dist/dom/event-replay.js.map +2 -2
- package/dist/dom/features/class/full.js +16 -16
- package/dist/dom/features/class/full.js.map +2 -2
- package/dist/dom/features/class/stub.js +7 -7
- package/dist/dom/features/class/stub.js.map +2 -2
- package/dist/dom/features/context/full.js +7 -7
- package/dist/dom/features/context/full.js.map +2 -2
- package/dist/dom/features/context/stub.js +3 -3
- package/dist/dom/features/context/stub.js.map +2 -2
- package/dist/dom/features/forward-ref/full.js +11 -11
- package/dist/dom/features/forward-ref/full.js.map +2 -2
- package/dist/dom/features/hydration/full.d.ts +26 -14
- package/dist/dom/features/hydration/full.js +417 -92
- package/dist/dom/features/hydration/full.js.map +2 -2
- package/dist/dom/features/hydration/stub.d.ts +13 -12
- package/dist/dom/features/hydration/stub.js +23 -8
- package/dist/dom/features/hydration/stub.js.map +2 -2
- package/dist/dom/features/lazy/full.js +3 -43
- package/dist/dom/features/lazy/full.js.map +2 -2
- package/dist/dom/features/lazy/stub.js +1 -1
- package/dist/dom/features/lazy/stub.js.map +2 -2
- package/dist/dom/features/memo/full.js +3 -3
- package/dist/dom/features/memo/full.js.map +2 -2
- package/dist/dom/features/memo/stub.js +1 -1
- package/dist/dom/features/memo/stub.js.map +2 -2
- package/dist/dom/features/portal/full.js +2 -2
- package/dist/dom/features/portal/full.js.map +2 -2
- package/dist/dom/features/suspense/full.js +151 -111
- package/dist/dom/features/suspense/full.js.map +2 -2
- package/dist/dom/reconcile.d.ts +3 -1
- package/dist/dom/reconcile.js +141 -129
- package/dist/dom/reconcile.js.map +2 -2
- package/dist/dom/root-internal.d.ts +9 -0
- package/dist/dom/root-internal.js +31 -0
- package/dist/dom/root-internal.js.map +7 -0
- package/dist/dom/root.d.ts +1 -1
- package/dist/dom/root.js +4 -136
- package/dist/dom/root.js.map +2 -2
- package/dist/dom/test-utils.js +1 -1
- package/dist/dom/test-utils.js.map +2 -2
- package/dist/react/children.js +4 -1
- package/dist/react/children.js.map +2 -2
- package/dist/react/class.js +8 -2
- package/dist/react/class.js.map +2 -2
- package/dist/react/context.js +4 -1
- package/dist/react/context.js.map +2 -2
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +2 -2
- package/dist/react/shared-internals.d.ts +4 -7
- package/dist/react/shared-internals.js +4 -7
- package/dist/react/shared-internals.js.map +2 -2
- package/dist/server/stream.d.ts +5 -1
- package/dist/server/stream.js.map +2 -2
- package/package.json +1 -1
- package/src/core/internal.ts +30 -50
- package/src/dom/dispatcher.ts +114 -105
- package/src/dom/dom.ts +1 -1
- package/src/dom/event-replay.ts +14 -30
- package/src/dom/features/class/full.ts +16 -16
- package/src/dom/features/class/stub.ts +7 -7
- package/src/dom/features/context/full.ts +7 -7
- package/src/dom/features/context/stub.ts +3 -3
- package/src/dom/features/forward-ref/full.ts +11 -11
- package/src/dom/features/hydration/full.ts +519 -104
- package/src/dom/features/hydration/stub.ts +28 -14
- package/src/dom/features/lazy/full.ts +3 -56
- package/src/dom/features/lazy/stub.ts +1 -1
- package/src/dom/features/memo/full.ts +3 -3
- package/src/dom/features/memo/stub.ts +1 -1
- package/src/dom/features/portal/full.ts +2 -2
- package/src/dom/features/suspense/full.ts +176 -131
- package/src/dom/reconcile.ts +164 -170
- package/src/dom/root-internal.ts +40 -0
- package/src/dom/root.ts +5 -165
- package/src/dom/test-utils.ts +1 -1
- package/src/react/children.ts +4 -1
- package/src/react/class.ts +8 -2
- package/src/react/context.ts +4 -1
- package/src/react/index.ts +1 -1
- package/src/react/shared-internals.ts +8 -14
- package/src/server/stream.ts +9 -4
package/dist/dom/dom.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dom/dom.ts"],
|
|
4
|
-
"sourcesContent": ["const 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\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(name, '')\n else el.removeAttribute(name)\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(name)\n } else {\n el.setAttribute(name, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(name)\n } else if (next === true) {\n el.setAttribute(name, '')\n } else {\n el.setAttribute(name, '' + 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
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["const 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\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(name, '')\n else el.removeAttribute(name)\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(name)\n } else {\n el.setAttribute(name, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(name)\n } else if (next === true) {\n el.setAttribute(name, '')\n } else {\n el.setAttribute(name, '' + 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": ";AAAA,IAAM,SAAS;AAEf,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;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,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,YAAY,oBAAI,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,eAAe,MAAc,OAAyB;AACpE,MAAI,SAAS,SAAS,OAAO;AAC3B,WAAO,SAAS,gBAAgB,QAAQ,IAAI;AAAA,EAC9C;AACA,SAAO,SAAS,cAAc,IAAI;AACpC;AAEO,SAAS,aAAa,IAAsB;AACjD,SAAQ,GAAW,oBAAoB,UAAa,GAAG,YAAY;AACrE;AAEO,SAAS,QACd,IACA,MACA,MACA,MACA,OACM;AACN,MAAI,SAAS,cAAc,SAAS,SAAS,SAAS,MAAO;AAQ7D,MAAI,SAAS,kBAAkB,SAAS,kBAAkB;AACxD,QAAI,SAAS,UAAa,QAAQ,MAAM;AACtC,UAAI;AACF;AAAC,QAAC,GAAW,IAAI,IAAI;AAAA,MACvB,QAAQ;AAAA,MAAC;AAAA,IACX;AACA;AAAA,EACF;AAEA,MAAI,SAAS,aAAa;AACxB,QAAI,OAAO;AACT,UAAI,QAAQ,KAAM,IAAG,gBAAgB,OAAO;AAAA,UACvC,IAAG,aAAa,SAAS,KAAK,IAAI;AAAA,IACzC,OAAO;AACL;AAAC,MAAC,GAAmB,YAAY,QAAQ,OAAO,KAAK,KAAK;AAAA,IAC5D;AACA;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,QAAI,QAAQ,KAAM,IAAG,gBAAgB,OAAO;AAAA,QACvC,IAAG,aAAa,SAAS,KAAK,IAAI;AACvC;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,aAAS,IAAmB,MAAM,IAAI;AACtC;AAAA,EACF;AAEA,MAAI,SAAS,2BAA2B;AACtC,UAAM,WAAW,MAAM,UAAU;AACjC,UAAM,WAAW,MAAM,UAAU;AACjC,QAAI,aAAa,SAAU,CAAC,GAAmB,YAAY;AAC3D;AAAA,EACF;AAEA,MAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,KAAK;AACtC,oBAAgB,IAAI,MAAM,MAAM,IAAI;AACpC;AAAA,EACF;AAEA,MAAI,SAAS,WAAW;AACtB,QAAI,QAAQ,KAAM,IAAG,gBAAgB,KAAK;AAAA,QACrC,IAAG,aAAa,OAAO,KAAK,IAAI;AACrC;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,UAAU,IAAI,IAAI,KAAK,QAAQ,IAAI;AAC/C,QAAI;AACF;AAAC,MAAC,GAAW,IAAI,IAAI,QAAQ,OAAO,KAAK;AACzC;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,MAAI,cAAc,IAAI,KAAK,YAAY,CAAC,GAAG;AACzC,QAAI,KAAM,IAAG,aAAa,MAAM,EAAE;AAAA,QAC7B,IAAG,gBAAgB,IAAI;AAC5B;AAAA,EACF;AAKA,MAAI,KAAK,SAAS,MAAM,KAAK,WAAW,CAAC,MAAM,MAAc,KAAK,WAAW,CAAC,MAAM,MAAc;AAChG,QAAI,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,OAAO,GAAG;AACxD,UAAI,QAAQ,MAAM;AAChB,WAAG,gBAAgB,IAAI;AAAA,MACzB,OAAO;AACL,WAAG,aAAa,MAAM,KAAK,IAAI;AAAA,MACjC;AACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,QAAQ,SAAS,OAAO;AAClC,OAAG,gBAAgB,IAAI;AAAA,EACzB,WAAW,SAAS,MAAM;AACxB,OAAG,aAAa,MAAM,EAAE;AAAA,EAC1B,OAAO;AACL,OAAG,aAAa,MAAM,KAAK,IAAI;AAAA,EACjC;AACF;AAEA,SAAS,SAAS,IAAiB,MAAW,MAAiB;AAC7D,QAAM,QAAQ,GAAG;AACjB,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,UAAU;AAChB;AAAA,EACF;AACA,MAAI,OAAO,SAAS,SAAU,OAAM,UAAU;AAC9C,MAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,eAAW,KAAK,MAAM;AACpB,UAAI,CAAC,QAAQ,EAAE,KAAK,MAAO,kBAAiB,OAAO,GAAG,EAAE;AAAA,IAC1D;AAAA,EACF;AACA,MAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,eAAW,KAAK,MAAM;AACpB,UAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,EAAG,kBAAiB,OAAO,GAAG,KAAK,CAAC,CAAC;AAAA,IACtE;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,OAA4B,KAAa,OAAkB;AACnF,MAAI,IAAI,CAAC,MAAM,KAAK;AAClB,UAAM,YAAY,KAAK,SAAS,OAAO,KAAK,KAAK,KAAK;AAAA,EACxD,WAAW,SAAS,QAAQ,UAAU,IAAI;AACxC;AAAC,IAAC,MAAc,GAAG,IAAI;AAAA,EACzB,WAAW,OAAO,UAAU,YAAY,CAAC,eAAe,IAAI,GAAG,GAAG;AAChE;AAAC,IAAC,MAAc,GAAG,IAAI,QAAQ;AAAA,EACjC,OAAO;AACL;AAAC,IAAC,MAAc,GAAG,IAAI,KAAK;AAAA,EAC9B;AACF;AAEA,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;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,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,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,EACA;AAAA,EACA;AACF,CAAC;AAUD,SAAS,gBAAgB,IAAa,MAAc,MAAW,MAAiB;AAK9E,MAAI,QAAQ,QAAQ,OAAO,QAAQ,WAAY,QAAO;AAEtD,QAAM,UAAU,KAAK,SAAS,SAAS;AACvC,QAAM,iBAAiB,KAAK,MAAM,GAAG,UAAU,KAAK,MAAS;AAC7D,QAAM,YAAY,YAAY,gBAAgB,EAAE;AAKhD,QAAM,WAAa,GAAW,eAAe,uBAAO,OAAO,IAAI;AAC/D,QAAM,MAAM;AAEZ,QAAM,WAAW,SAAS,GAAG;AAE7B,MAAI,YAAY,CAAC,MAAM;AACrB,OAAG,oBAAoB,SAAS,OAAO,SAAS,UAAU,SAAS,OAAO;AAC1E,aAAS,GAAG,IAAI;AAChB;AAAA,EACF;AAEA,MAAI,CAAC,YAAY,MAAM;AACrB,UAAM,QAAQ;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACF;AACA,UAAM,WAAW,CAAC,MAAa;AAM7B,UAAK,EAAU,gBAAgB,OAAW,CAAC,EAAU,cAAc;AACnE,YAAM,QAAQ,CAAC;AAAA,IACjB;AACA,aAAS,GAAG,IAAI;AAChB,OAAG,iBAAiB,WAAW,MAAM,UAAU,OAAO;AACtD;AAAA,EACF;AAEA,MAAI,UAAU;AAIZ,QAAI,SAAS,UAAU,aAAa,SAAS,YAAY,SAAS;AAChE,SAAG,oBAAoB,SAAS,OAAO,SAAS,UAAU,SAAS,OAAO;AAC1E,eAAS,QAAQ;AACjB,eAAS,UAAU;AACnB,SAAG,iBAAiB,WAAW,SAAS,UAAU,OAAO;AAAA,IAC3D;AACA,aAAS,UAAU;AAAA,EACrB;AACF;AAEA,SAAS,YAAY,gBAAwB,IAAqB;AAChE,QAAM,QAAQ,eAAe,YAAY;AAKzC,MAAI,UAAU,UAAU;AACtB,UAAM,MAAM,GAAG;AACf,QAAI,QAAQ,WAAY,QAAO;AAC/B,QAAI,QAAQ,SAAS;AACnB,YAAM,QAAS,GAAwB,QAAQ,QAAQ,YAAY;AACnE,UAAI,SAAS,cAAc,SAAS,WAAW,SAAS,QAAQ;AAC9D,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,MAAI,UAAU,cAAe,QAAO;AACpC,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/dom/event-replay.js
CHANGED
|
@@ -3,42 +3,20 @@ function drainReplayQueue() {
|
|
|
3
3
|
const g = globalThis;
|
|
4
4
|
const q = g.$RE_q;
|
|
5
5
|
if (!q) return;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} catch {
|
|
10
|
-
}
|
|
6
|
+
try {
|
|
7
|
+
g.$RE_stop?.();
|
|
8
|
+
} catch {
|
|
11
9
|
}
|
|
12
|
-
const
|
|
13
|
-
for (const [type, target] of events) {
|
|
10
|
+
for (const [type, target] of q.splice(0)) {
|
|
14
11
|
try {
|
|
15
|
-
|
|
16
|
-
target.dispatchEvent(ev);
|
|
12
|
+
target.dispatchEvent(createEvent(type));
|
|
17
13
|
} catch {
|
|
18
14
|
}
|
|
19
15
|
}
|
|
20
16
|
}
|
|
21
17
|
function createEvent(type) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
case "dblclick":
|
|
25
|
-
case "mousedown":
|
|
26
|
-
case "mouseup":
|
|
27
|
-
case "contextmenu":
|
|
28
|
-
return new MouseEvent(type, { bubbles: true, cancelable: true });
|
|
29
|
-
case "keydown":
|
|
30
|
-
case "keyup":
|
|
31
|
-
case "keypress":
|
|
32
|
-
return new KeyboardEvent(type, { bubbles: true, cancelable: true });
|
|
33
|
-
case "input":
|
|
34
|
-
return new InputEvent(type, { bubbles: true, cancelable: true });
|
|
35
|
-
case "submit":
|
|
36
|
-
case "change":
|
|
37
|
-
case "focus":
|
|
38
|
-
case "blur":
|
|
39
|
-
default:
|
|
40
|
-
return new Event(type, { bubbles: true, cancelable: true });
|
|
41
|
-
}
|
|
18
|
+
const options = { bubbles: true, cancelable: true };
|
|
19
|
+
return type === "click" ? new MouseEvent(type, options) : type === "keydown" ? new KeyboardEvent(type, options) : type === "input" ? new InputEvent(type, options) : new Event(type, options);
|
|
42
20
|
}
|
|
43
21
|
export {
|
|
44
22
|
drainReplayQueue
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dom/event-replay.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Drain the `window.$RE_q` event buffer that the inline runtime populated\n * before the main bundle was parsed. For each buffered event, re-dispatch a\n * synthesized event at the original target so handlers attached during\n * hydration see it.\n *\n * Lossy by design: only the event type and target are preserved. Modifier\n * keys, pointer positions, etc. are zeroed. This is acceptable because the\n * replay window is a fraction of a second between shell render and full\n * hydration of a streaming page; users who need pixel-accurate replay won't\n * lose much beyond that.\n */\nexport function drainReplayQueue(): void {\n const g = globalThis as any\n const q = g.$RE_q as Array<[string, EventTarget, number]> | undefined\n if (!q) return\n
|
|
5
|
-
"mappings": ";AAYO,SAAS,mBAAyB;AACvC,QAAM,IAAI;AACV,QAAM,IAAI,EAAE;
|
|
4
|
+
"sourcesContent": ["/**\n * Drain the `window.$RE_q` event buffer that the inline runtime populated\n * before the main bundle was parsed. For each buffered event, re-dispatch a\n * synthesized event at the original target so handlers attached during\n * hydration see it.\n *\n * Lossy by design: only the event type and target are preserved. Modifier\n * keys, pointer positions, etc. are zeroed. This is acceptable because the\n * replay window is a fraction of a second between shell render and full\n * hydration of a streaming page; users who need pixel-accurate replay won't\n * lose much beyond that.\n */\nexport function drainReplayQueue(): void {\n const g = globalThis as any\n const q = g.$RE_q as Array<[string, EventTarget, number]> | undefined\n\n if (!q) return\n // Stop capturing before replaying so we don't re-capture what we dispatch.\n try {\n g.$RE_stop?.()\n } catch {}\n\n for (const [type, target] of q.splice(0)) {\n try {\n target.dispatchEvent(createEvent(type))\n } catch {}\n }\n}\n\nfunction createEvent(type: string): Event {\n const options = { bubbles: true, cancelable: true }\n return type === 'click'\n ? new MouseEvent(type, options)\n : type === 'keydown'\n ? new KeyboardEvent(type, options)\n : type === 'input'\n ? new InputEvent(type, options)\n : new Event(type, options)\n}\n"],
|
|
5
|
+
"mappings": ";AAYO,SAAS,mBAAyB;AACvC,QAAM,IAAI;AACV,QAAM,IAAI,EAAE;AAEZ,MAAI,CAAC,EAAG;AAER,MAAI;AACF,MAAE,WAAW;AAAA,EACf,QAAQ;AAAA,EAAC;AAET,aAAW,CAAC,MAAM,MAAM,KAAK,EAAE,OAAO,CAAC,GAAG;AACxC,QAAI;AACF,aAAO,cAAc,YAAY,IAAI,CAAC;AAAA,IACxC,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEA,SAAS,YAAY,MAAqB;AACxC,QAAM,UAAU,EAAE,SAAS,MAAM,YAAY,KAAK;AAClD,SAAO,SAAS,UACZ,IAAI,WAAW,MAAM,OAAO,IAC5B,SAAS,YACP,IAAI,cAAc,MAAM,OAAO,IAC/B,SAAS,UACP,IAAI,WAAW,MAAM,OAAO,IAC5B,IAAI,MAAM,MAAM,OAAO;AACjC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -12,8 +12,8 @@ import {
|
|
|
12
12
|
} from "../../reconcile";
|
|
13
13
|
function renderClass(fiber, domParent, anchor) {
|
|
14
14
|
const Ctor = fiber.type;
|
|
15
|
-
let instance = fiber.
|
|
16
|
-
const props = fiber.
|
|
15
|
+
let instance = fiber.sn;
|
|
16
|
+
const props = fiber.pp ?? {};
|
|
17
17
|
const isNew = !instance;
|
|
18
18
|
const ctxValue = Ctor.contextType ? Ctor.contextType._currentValue : void 0;
|
|
19
19
|
if (isNew) {
|
|
@@ -22,22 +22,22 @@ function renderClass(fiber, domParent, anchor) {
|
|
|
22
22
|
instance.context = ctxValue;
|
|
23
23
|
instance._fiber = fiber;
|
|
24
24
|
instance._enqueueUpdate = (updater, cb) => {
|
|
25
|
-
const next = typeof updater
|
|
25
|
+
const next = typeof updater == "function" ? updater(instance.state, instance.props) : updater;
|
|
26
26
|
if (next != null) instance.state = { ...instance.state, ...next };
|
|
27
27
|
if (cb) {
|
|
28
|
-
fiber.
|
|
29
|
-
fiber.
|
|
28
|
+
fiber.cu ||= [];
|
|
29
|
+
fiber.cu.push(cb);
|
|
30
30
|
}
|
|
31
31
|
scheduleUpdate(fiber);
|
|
32
32
|
};
|
|
33
33
|
instance._forceUpdate = (cb) => {
|
|
34
34
|
if (cb) {
|
|
35
|
-
fiber.
|
|
36
|
-
fiber.
|
|
35
|
+
fiber.cu ||= [];
|
|
36
|
+
fiber.cu.push(cb);
|
|
37
37
|
}
|
|
38
38
|
scheduleUpdate(fiber);
|
|
39
39
|
};
|
|
40
|
-
fiber.
|
|
40
|
+
fiber.sn = instance;
|
|
41
41
|
if (Ctor.getDerivedStateFromProps) {
|
|
42
42
|
const d = Ctor.getDerivedStateFromProps(props, instance.state);
|
|
43
43
|
if (d) instance.state = { ...instance.state, ...d };
|
|
@@ -53,15 +53,15 @@ function renderClass(fiber, domParent, anchor) {
|
|
|
53
53
|
if (instance.shouldComponentUpdate) {
|
|
54
54
|
if (!instance.shouldComponentUpdate(props, instance.state, instance.context)) {
|
|
55
55
|
instance.props = props;
|
|
56
|
-
fiber.
|
|
57
|
-
if (fiber.
|
|
58
|
-
reconcileChildren(fiber, childrenToArray(fiber.
|
|
56
|
+
fiber.mp = props;
|
|
57
|
+
if (fiber.ms?.r) {
|
|
58
|
+
reconcileChildren(fiber, childrenToArray(fiber.ms.r), domParent, anchor);
|
|
59
59
|
}
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
instance.props = props;
|
|
64
|
-
fiber.
|
|
64
|
+
fiber.ms = { ...fiber.ms ?? {}, p: prevProps, s: prevState };
|
|
65
65
|
}
|
|
66
66
|
let rendered;
|
|
67
67
|
try {
|
|
@@ -75,16 +75,16 @@ function renderClass(fiber, domParent, anchor) {
|
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
fiber.
|
|
78
|
+
fiber.ms = { ...fiber.ms ?? {}, r: rendered };
|
|
79
79
|
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
80
|
-
fiber.
|
|
80
|
+
fiber.mp = props;
|
|
81
81
|
if (isNew) {
|
|
82
82
|
if (instance.componentDidMount) {
|
|
83
83
|
scheduleLifecycle(fiber, () => instance.componentDidMount());
|
|
84
84
|
}
|
|
85
85
|
} else if (instance.componentDidUpdate) {
|
|
86
|
-
const {
|
|
87
|
-
scheduleLifecycle(fiber, () => instance.componentDidUpdate(
|
|
86
|
+
const { p, s } = fiber.ms ?? {};
|
|
87
|
+
scheduleLifecycle(fiber, () => instance.componentDidUpdate(p, s));
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
registerRenderer(FiberTag.Class, renderClass);
|
|
@@ -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.
|
|
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,
|
|
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;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -11,23 +11,23 @@ import {
|
|
|
11
11
|
} from "../../reconcile";
|
|
12
12
|
function renderClassStub(fiber, domParent, anchor) {
|
|
13
13
|
const Ctor = fiber.type;
|
|
14
|
-
let instance = fiber.
|
|
15
|
-
const props = fiber.
|
|
14
|
+
let instance = fiber.sn;
|
|
15
|
+
const props = fiber.pp ?? {};
|
|
16
16
|
if (!instance) {
|
|
17
17
|
instance = new Ctor(props, void 0);
|
|
18
18
|
instance.props = props;
|
|
19
19
|
instance._fiber = fiber;
|
|
20
20
|
instance._enqueueUpdate = (updater, cb) => {
|
|
21
|
-
const next = typeof updater
|
|
21
|
+
const next = typeof updater == "function" ? updater(instance.state, instance.props) : updater;
|
|
22
22
|
if (next != null) instance.state = { ...instance.state, ...next };
|
|
23
23
|
if (cb) {
|
|
24
|
-
fiber.
|
|
25
|
-
fiber.
|
|
24
|
+
fiber.cu ||= [];
|
|
25
|
+
fiber.cu.push(cb);
|
|
26
26
|
}
|
|
27
27
|
scheduleUpdate(fiber);
|
|
28
28
|
};
|
|
29
29
|
instance._forceUpdate = instance._enqueueUpdate;
|
|
30
|
-
fiber.
|
|
30
|
+
fiber.sn = instance;
|
|
31
31
|
} else {
|
|
32
32
|
instance.props = props;
|
|
33
33
|
}
|
|
@@ -44,7 +44,7 @@ function renderClassStub(fiber, domParent, anchor) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
47
|
-
fiber.
|
|
47
|
+
fiber.mp = props;
|
|
48
48
|
}
|
|
49
49
|
registerRenderer(FiberTag.Class, renderClassStub);
|
|
50
50
|
//# sourceMappingURL=stub.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dom/features/class/stub.ts"],
|
|
4
|
-
"sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport {\n registerRenderer,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\n\n// Stub: Class feature disabled. Class components still render \u2014 they're\n// detected by `type.prototype.isReactComponent` in the reconciler regardless \u2014\n// but ONLY the core contract is honored: constructor, `render()`, and\n// `setState` triggering a re-render. Dropped from this stub:\n// - `contextType` (this.context is always undefined)\n// - `getDerivedStateFromProps`\n// - `shouldComponentUpdate`\n// - `componentDidMount` / `componentDidUpdate` / `componentWillUnmount`\n// - `getDerivedStateFromError` / `componentDidCatch` (error boundaries)\n// Apps that actually need these should keep the feature on. Apps that just\n// have a handful of legacy class components that do `render() + setState`\n// still work, and save ~400 B min / ~200 B gz.\nfunction renderClassStub(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const Ctor = fiber.type as any\n let instance = fiber.
|
|
5
|
-
"mappings": ";AAAA,SAAS,gBAA4C;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,SAAS,gBAAgB,OAAc,WAAiB,QAA2B;AACjF,QAAM,OAAO,MAAM;AACnB,MAAI,WAAW,MAAM;AACrB,QAAM,QAAQ,MAAM,
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport {\n registerRenderer,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\n\n// Stub: Class feature disabled. Class components still render \u2014 they're\n// detected by `type.prototype.isReactComponent` in the reconciler regardless \u2014\n// but ONLY the core contract is honored: constructor, `render()`, and\n// `setState` triggering a re-render. Dropped from this stub:\n// - `contextType` (this.context is always undefined)\n// - `getDerivedStateFromProps`\n// - `shouldComponentUpdate`\n// - `componentDidMount` / `componentDidUpdate` / `componentWillUnmount`\n// - `getDerivedStateFromError` / `componentDidCatch` (error boundaries)\n// Apps that actually need these should keep the feature on. Apps that just\n// have a handful of legacy class components that do `render() + setState`\n// still work, and save ~400 B min / ~200 B gz.\nfunction renderClassStub(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\n if (!instance) {\n instance = new Ctor(props, undefined)\n instance.props = props\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 = instance._enqueueUpdate\n fiber.sn = instance\n } else {\n instance.props = props\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\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = props\n}\n\nregisterRenderer(FiberTag.Class, renderClassStub)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4C;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,SAAS,gBAAgB,OAAc,WAAiB,QAA2B;AACjF,QAAM,OAAO,MAAM;AACnB,MAAI,WAAW,MAAM;AACrB,QAAM,QAAQ,MAAM,MAAM,CAAC;AAE3B,MAAI,CAAC,UAAU;AACb,eAAW,IAAI,KAAK,OAAO,MAAS;AACpC,aAAS,QAAQ;AACjB,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,SAAS;AACjC,UAAM,KAAK;AAAA,EACb,OAAO;AACL,aAAS,QAAQ;AAAA,EACnB;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;AAEA,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,KAAK;AACb;AAEA,iBAAiB,SAAS,OAAO,eAAe;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -12,7 +12,7 @@ function realReadContext(fiber, ctx) {
|
|
|
12
12
|
let p = fiber.parent;
|
|
13
13
|
while (p) {
|
|
14
14
|
if (p.tag === FiberTag.Provider && p.type._context === ctx) {
|
|
15
|
-
return (p.
|
|
15
|
+
return (p.pp ?? p.mp)?.value;
|
|
16
16
|
}
|
|
17
17
|
p = p.parent;
|
|
18
18
|
}
|
|
@@ -20,7 +20,7 @@ function realReadContext(fiber, ctx) {
|
|
|
20
20
|
}
|
|
21
21
|
function renderProvider(fiber, domParent, anchor) {
|
|
22
22
|
const ctx = fiber.type._context;
|
|
23
|
-
const props = fiber.
|
|
23
|
+
const props = fiber.pp ?? {};
|
|
24
24
|
const prevValue = ctx._currentValue;
|
|
25
25
|
ctx._currentValue = props.value;
|
|
26
26
|
try {
|
|
@@ -28,17 +28,17 @@ function renderProvider(fiber, domParent, anchor) {
|
|
|
28
28
|
} finally {
|
|
29
29
|
ctx._currentValue = prevValue;
|
|
30
30
|
}
|
|
31
|
-
fiber.
|
|
32
|
-
fiber.
|
|
31
|
+
fiber.ms = props.value;
|
|
32
|
+
fiber.mp = props;
|
|
33
33
|
}
|
|
34
34
|
function renderConsumer(fiber, domParent, anchor) {
|
|
35
35
|
const ctx = fiber.type._context;
|
|
36
|
-
const props = fiber.
|
|
36
|
+
const props = fiber.pp ?? {};
|
|
37
37
|
const children = props.children;
|
|
38
38
|
const value = realReadContext(fiber, ctx);
|
|
39
|
-
const rendered = typeof children
|
|
39
|
+
const rendered = typeof children == "function" ? children(value) : null;
|
|
40
40
|
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
41
|
-
fiber.
|
|
41
|
+
fiber.mp = props;
|
|
42
42
|
}
|
|
43
43
|
registerTypeMatcher(
|
|
44
44
|
(_type, marker) => marker === REACT_PROVIDER_TYPE ? FiberTag.Provider : marker === REACT_CONSUMER_TYPE ? FiberTag.Consumer : null
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dom/features/context/full.ts"],
|
|
4
|
-
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_PROVIDER_TYPE, REACT_CONSUMER_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n} from '../../reconcile'\n\nfunction realReadContext(fiber: Fiber, ctx: any): any {\n let p: Fiber | null = fiber.parent\n while (p) {\n if (p.tag === FiberTag.Provider && (p.type as any)._context === ctx) {\n return (p.
|
|
5
|
-
"mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,qBAAqB,2BAA2B;AACzD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAgB,OAAc,KAAe;AACpD,MAAI,IAAkB,MAAM;AAC5B,SAAO,GAAG;AACR,QAAI,EAAE,QAAQ,SAAS,YAAa,EAAE,KAAa,aAAa,KAAK;AACnE,cAAQ,EAAE,
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_PROVIDER_TYPE, REACT_CONSUMER_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n} from '../../reconcile'\n\nfunction realReadContext(fiber: Fiber, ctx: any): any {\n let p: Fiber | null = fiber.parent\n while (p) {\n if (p.tag === FiberTag.Provider && (p.type as any)._context === ctx) {\n return (p.pp ?? p.mp)?.value\n }\n p = p.parent\n }\n return ctx._currentValue\n}\n\nfunction renderProvider(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const ctx = (fiber.type as any)._context\n const props = fiber.pp ?? {}\n const prevValue = ctx._currentValue\n ctx._currentValue = props.value\n try {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n } finally {\n ctx._currentValue = prevValue\n }\n // Also store the value on the fiber so descendants rendering later (via updates)\n // can read through by walking up.\n fiber.ms = props.value\n fiber.mp = props\n}\n\nfunction renderConsumer(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const ctx = (fiber.type as any)._context\n const props = fiber.pp ?? {}\n const children = props.children\n const value = realReadContext(fiber, ctx)\n const rendered = typeof children == 'function' ? children(value) : null\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = props\n}\n\nregisterTypeMatcher((_type, marker) =>\n marker === REACT_PROVIDER_TYPE\n ? FiberTag.Provider\n : marker === REACT_CONSUMER_TYPE\n ? FiberTag.Consumer\n : null,\n)\nregisterRenderer(FiberTag.Provider, renderProvider)\nregisterRenderer(FiberTag.Consumer, renderConsumer)\ninstallCapability('readContext', realReadContext)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,qBAAqB,2BAA2B;AACzD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAgB,OAAc,KAAe;AACpD,MAAI,IAAkB,MAAM;AAC5B,SAAO,GAAG;AACR,QAAI,EAAE,QAAQ,SAAS,YAAa,EAAE,KAAa,aAAa,KAAK;AACnE,cAAQ,EAAE,MAAM,EAAE,KAAK;AAAA,IACzB;AACA,QAAI,EAAE;AAAA,EACR;AACA,SAAO,IAAI;AACb;AAEA,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,MAAO,MAAM,KAAa;AAChC,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,QAAM,YAAY,IAAI;AACtB,MAAI,gBAAgB,MAAM;AAC1B,MAAI;AACF,sBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,EAC7E,UAAE;AACA,QAAI,gBAAgB;AAAA,EACtB;AAGA,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK;AACb;AAEA,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,MAAO,MAAM,KAAa;AAChC,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,QAAM,WAAW,MAAM;AACvB,QAAM,QAAQ,gBAAgB,OAAO,GAAG;AACxC,QAAM,WAAW,OAAO,YAAY,aAAa,SAAS,KAAK,IAAI;AACnE,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,KAAK;AACb;AAEA;AAAA,EAAoB,CAAC,OAAO,WAC1B,WAAW,sBACP,SAAS,WACT,WAAW,sBACT,SAAS,WACT;AACR;AACA,iBAAiB,SAAS,UAAU,cAAc;AAClD,iBAAiB,SAAS,UAAU,cAAc;AAClD,kBAAkB,eAAe,eAAe;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
} from "../../reconcile";
|
|
10
10
|
function renderConsumerStub(fiber, domParent, anchor) {
|
|
11
11
|
const ctx = fiber.type._context;
|
|
12
|
-
const props = fiber.
|
|
12
|
+
const props = fiber.pp ?? {};
|
|
13
13
|
const value = ctx._currentValue;
|
|
14
|
-
const rendered = typeof props.children
|
|
14
|
+
const rendered = typeof props.children == "function" ? props.children(value) : null;
|
|
15
15
|
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
16
|
-
fiber.
|
|
16
|
+
fiber.mp = props;
|
|
17
17
|
}
|
|
18
18
|
registerTypeMatcher(
|
|
19
19
|
(_type, marker) => marker === REACT_PROVIDER_TYPE ? FiberTag.Fragment : marker === REACT_CONSUMER_TYPE ? FiberTag.Consumer : null
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dom/features/context/stub.ts"],
|
|
4
|
-
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_PROVIDER_TYPE, REACT_CONSUMER_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n reconcileChildren,\n childrenToArray,\n} from '../../reconcile'\n\n// Stub: Context feature disabled. Provider elements render as Fragments\n// (value is never propagated \u2014 descendants see only the Context's default).\n// Consumer elements still invoke their function-children with the default\n// value, so `<Ctx.Consumer>{v => ...}</Ctx.Consumer>` patterns keep working.\n// The default `readContext` capability returns `ctx._currentValue` without\n// walking, which matches the no-Provider-fibers-in-tree reality.\nfunction renderConsumerStub(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const ctx = (fiber.type as any)._context\n const props = fiber.
|
|
5
|
-
"mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,qBAAqB,2BAA2B;AACzD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP,SAAS,mBAAmB,OAAc,WAAiB,QAA2B;AACpF,QAAM,MAAO,MAAM,KAAa;AAChC,QAAM,QAAQ,MAAM,
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_PROVIDER_TYPE, REACT_CONSUMER_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n reconcileChildren,\n childrenToArray,\n} from '../../reconcile'\n\n// Stub: Context feature disabled. Provider elements render as Fragments\n// (value is never propagated \u2014 descendants see only the Context's default).\n// Consumer elements still invoke their function-children with the default\n// value, so `<Ctx.Consumer>{v => ...}</Ctx.Consumer>` patterns keep working.\n// The default `readContext` capability returns `ctx._currentValue` without\n// walking, which matches the no-Provider-fibers-in-tree reality.\nfunction renderConsumerStub(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const ctx = (fiber.type as any)._context\n const props = fiber.pp ?? {}\n const value = ctx._currentValue\n const rendered = typeof props.children == 'function' ? props.children(value) : null\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = props\n}\n\nregisterTypeMatcher((_type, marker) =>\n marker === REACT_PROVIDER_TYPE\n ? FiberTag.Fragment\n : marker === REACT_CONSUMER_TYPE\n ? FiberTag.Consumer\n : null,\n)\nregisterRenderer(FiberTag.Consumer, renderConsumerStub)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,qBAAqB,2BAA2B;AACzD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP,SAAS,mBAAmB,OAAc,WAAiB,QAA2B;AACpF,QAAM,MAAO,MAAM,KAAa;AAChC,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,QAAM,QAAQ,IAAI;AAClB,QAAM,WAAW,OAAO,MAAM,YAAY,aAAa,MAAM,SAAS,KAAK,IAAI;AAC/E,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,KAAK;AACb;AAEA;AAAA,EAAoB,CAAC,OAAO,WAC1B,WAAW,sBACP,SAAS,WACT,WAAW,sBACT,SAAS,WACT;AACR;AACA,iBAAiB,SAAS,UAAU,kBAAkB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -12,17 +12,17 @@ import {
|
|
|
12
12
|
} from "../../reconcile";
|
|
13
13
|
import { makeDispatcher } from "../../dispatcher";
|
|
14
14
|
function renderForwardRef(fiber, domParent, anchor) {
|
|
15
|
-
const props = fiber.
|
|
15
|
+
const props = fiber.pp ?? {};
|
|
16
16
|
const render = fiber.type.render;
|
|
17
17
|
const ref = fiber.ref ?? (props.ref ?? null);
|
|
18
18
|
const prevDispatcher = ReactSharedInternals.H;
|
|
19
|
-
const prevFiber = ReactSharedInternals.
|
|
20
|
-
const prevHook = ReactSharedInternals.
|
|
21
|
-
const prevIndex = ReactSharedInternals.
|
|
19
|
+
const prevFiber = ReactSharedInternals.F;
|
|
20
|
+
const prevHook = ReactSharedInternals.K;
|
|
21
|
+
const prevIndex = ReactSharedInternals.I;
|
|
22
22
|
ReactSharedInternals.H = makeDispatcher();
|
|
23
|
-
ReactSharedInternals.
|
|
24
|
-
ReactSharedInternals.
|
|
25
|
-
ReactSharedInternals.
|
|
23
|
+
ReactSharedInternals.F = fiber;
|
|
24
|
+
ReactSharedInternals.K = null;
|
|
25
|
+
ReactSharedInternals.I = 0;
|
|
26
26
|
let rendered;
|
|
27
27
|
try {
|
|
28
28
|
const { ref: _omit, ...rest } = props;
|
|
@@ -37,12 +37,12 @@ function renderForwardRef(fiber, domParent, anchor) {
|
|
|
37
37
|
}
|
|
38
38
|
} finally {
|
|
39
39
|
ReactSharedInternals.H = prevDispatcher;
|
|
40
|
-
ReactSharedInternals.
|
|
41
|
-
ReactSharedInternals.
|
|
42
|
-
ReactSharedInternals.
|
|
40
|
+
ReactSharedInternals.F = prevFiber;
|
|
41
|
+
ReactSharedInternals.K = prevHook;
|
|
42
|
+
ReactSharedInternals.I = prevIndex;
|
|
43
43
|
}
|
|
44
44
|
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
45
|
-
fiber.
|
|
45
|
+
fiber.mp = props;
|
|
46
46
|
}
|
|
47
47
|
registerTypeMatcher(
|
|
48
48
|
(_type, marker) => marker === REACT_FORWARD_REF_TYPE ? FiberTag.ForwardRef : null
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dom/features/forward-ref/full.ts"],
|
|
4
|
-
"sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport { ReactSharedInternals, REACT_FORWARD_REF_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n reconcileChildren,\n childrenToArray,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\nimport { makeDispatcher } from '../../dispatcher'\n\nfunction renderForwardRef(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.
|
|
5
|
-
"mappings": ";AAAA,SAAS,gBAA4C;AACrD,SAAS,sBAAsB,8BAA8B;AAC7D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAE/B,SAAS,iBAAiB,OAAc,WAAiB,QAA2B;AAClF,QAAM,QAAQ,MAAM,
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport { ReactSharedInternals, REACT_FORWARD_REF_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n reconcileChildren,\n childrenToArray,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\nimport { makeDispatcher } from '../../dispatcher'\n\nfunction renderForwardRef(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n const render = (fiber.type as any).render\n const ref = fiber.ref ?? (props.ref ?? null)\n\n const prevDispatcher = ReactSharedInternals.H\n const prevFiber = ReactSharedInternals.F\n const prevHook = ReactSharedInternals.K\n const prevIndex = ReactSharedInternals.I\n ReactSharedInternals.H = makeDispatcher()\n ReactSharedInternals.F = fiber\n ReactSharedInternals.K = null\n ReactSharedInternals.I = 0\n\n let rendered: ReactNode\n try {\n const { ref: _omit, ...rest } = props\n rendered = render(rest, ref)\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 } finally {\n ReactSharedInternals.H = prevDispatcher\n ReactSharedInternals.F = prevFiber\n ReactSharedInternals.K = prevHook\n ReactSharedInternals.I = prevIndex\n }\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.mp = props\n}\n\nregisterTypeMatcher((_type, marker) =>\n marker === REACT_FORWARD_REF_TYPE ? FiberTag.ForwardRef : null,\n)\nregisterRenderer(FiberTag.ForwardRef, renderForwardRef)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4C;AACrD,SAAS,sBAAsB,8BAA8B;AAC7D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAE/B,SAAS,iBAAiB,OAAc,WAAiB,QAA2B;AAClF,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,QAAM,SAAU,MAAM,KAAa;AACnC,QAAM,MAAM,MAAM,QAAQ,MAAM,OAAO;AAEvC,QAAM,iBAAiB,qBAAqB;AAC5C,QAAM,YAAY,qBAAqB;AACvC,QAAM,WAAW,qBAAqB;AACtC,QAAM,YAAY,qBAAqB;AACvC,uBAAqB,IAAI,eAAe;AACxC,uBAAqB,IAAI;AACzB,uBAAqB,IAAI;AACzB,uBAAqB,IAAI;AAEzB,MAAI;AACJ,MAAI;AACF,UAAM,EAAE,KAAK,OAAO,GAAG,KAAK,IAAI;AAChC,eAAW,OAAO,MAAM,GAAG;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,UAAE;AACA,yBAAqB,IAAI;AACzB,yBAAqB,IAAI;AACzB,yBAAqB,IAAI;AACzB,yBAAqB,IAAI;AAAA,EAC3B;AAEA,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,KAAK;AACb;AAEA;AAAA,EAAoB,CAAC,OAAO,WAC1B,WAAW,yBAAyB,SAAS,aAAa;AAC5D;AACA,iBAAiB,SAAS,YAAY,gBAAgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type Fiber, type FiberRoot } from '../../../core';
|
|
2
|
-
|
|
1
|
+
import { type Fiber, type FiberRoot, type ReactNode } from '../../../core';
|
|
2
|
+
import { drainReplayQueue } from '../../event-replay';
|
|
3
|
+
export { drainReplayQueue };
|
|
3
4
|
/**
|
|
4
5
|
* Preserve the user's scroll position across hydration. If the user scrolled
|
|
5
6
|
* between SSR paint and hydrate (common in dev where JS takes seconds to
|
|
@@ -19,11 +20,11 @@ export declare function installHydrationScrollGuard(): void;
|
|
|
19
20
|
* so we only adopt DOM up to the closing `/$` marker for that boundary.
|
|
20
21
|
*/
|
|
21
22
|
export declare class HydrationCursor {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
n: ChildNode | null;
|
|
24
|
+
p: Node;
|
|
25
|
+
e: ChildNode | null;
|
|
25
26
|
constructor(parent: Node, start?: ChildNode | null, endBefore?: ChildNode | null);
|
|
26
|
-
|
|
27
|
+
take(): ChildNode | null;
|
|
27
28
|
/**
|
|
28
29
|
* Position-insensitive lookup for head/html adoption. Scans forward past
|
|
29
30
|
* non-matching nodes without removing them, matching by tag AND the key
|
|
@@ -31,9 +32,25 @@ export declare class HydrationCursor {
|
|
|
31
32
|
* name/property for meta, src for script). Non-matching nodes stay in
|
|
32
33
|
* place so the SSR'd stylesheet/script order is preserved.
|
|
33
34
|
*/
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
head(tag: string, props: Record<string, any>): ChildNode | null;
|
|
36
|
+
has(): boolean;
|
|
36
37
|
}
|
|
38
|
+
export interface HydrationBailoutError extends Error {
|
|
39
|
+
f: Fiber | null;
|
|
40
|
+
}
|
|
41
|
+
export declare function isHydrationBailout(error: unknown): error is HydrationBailoutError;
|
|
42
|
+
export declare function abortHydration(cause: unknown, fiber?: Fiber | null): never;
|
|
43
|
+
interface HydrateRootOptions {
|
|
44
|
+
identifierPrefix?: string;
|
|
45
|
+
onRecoverableError?: (error: unknown) => void;
|
|
46
|
+
onCaughtError?: (error: unknown) => void;
|
|
47
|
+
onUncaughtError?: (error: unknown) => void;
|
|
48
|
+
}
|
|
49
|
+
interface HydratedRoot {
|
|
50
|
+
render(children: ReactNode): void;
|
|
51
|
+
unmount(): void;
|
|
52
|
+
}
|
|
53
|
+
export declare function hydrateRootImpl(container: Element | Document, initialChildren: ReactNode, options: HydrateRootOptions): HydratedRoot;
|
|
37
54
|
export declare function beginHydration(root: FiberRoot): void;
|
|
38
55
|
export declare function endHydration(root: FiberRoot): void;
|
|
39
56
|
/**
|
|
@@ -41,12 +58,7 @@ export declare function endHydration(root: FiberRoot): void;
|
|
|
41
58
|
* marker emitted by the server. Returns info + advances the cursor past the
|
|
42
59
|
* marker pair (start comment + fallback/real content + end comment).
|
|
43
60
|
*/
|
|
44
|
-
export
|
|
45
|
-
kind: 'pending' | 'resolved';
|
|
46
|
-
id: number;
|
|
47
|
-
startMark: Comment;
|
|
48
|
-
endMark: Comment;
|
|
49
|
-
}
|
|
61
|
+
export type BoundaryInfo = [0 | 1, number, Comment, Comment];
|
|
50
62
|
export declare function tryConsumeBoundary(parent: Fiber): BoundaryInfo | null;
|
|
51
63
|
export declare function advanceCursorPast(parent: Fiber, node: Node): void;
|
|
52
64
|
export declare function getHydrationCursor(hostFiber: Fiber): HydrationCursor | undefined;
|