@tanstack/redact 0.0.1

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.
Files changed (233) hide show
  1. package/dist/core/index.d.ts +2 -0
  2. package/dist/core/index.js +4 -0
  3. package/dist/core/index.js.map +7 -0
  4. package/dist/core/internal.d.ts +76 -0
  5. package/dist/core/internal.js +59 -0
  6. package/dist/core/internal.js.map +7 -0
  7. package/dist/core/types.d.ts +21 -0
  8. package/dist/core/types.js +10 -0
  9. package/dist/core/types.js.map +7 -0
  10. package/dist/dom/_all.d.ts +17 -0
  11. package/dist/dom/_all.js +51 -0
  12. package/dist/dom/_all.js.map +7 -0
  13. package/dist/dom/client.d.ts +3 -0
  14. package/dist/dom/client.js +8 -0
  15. package/dist/dom/client.js.map +7 -0
  16. package/dist/dom/dispatcher.d.ts +20 -0
  17. package/dist/dom/dispatcher.js +267 -0
  18. package/dist/dom/dispatcher.js.map +7 -0
  19. package/dist/dom/dom.d.ts +10 -0
  20. package/dist/dom/dom.js +262 -0
  21. package/dist/dom/dom.js.map +7 -0
  22. package/dist/dom/event-replay.d.ts +13 -0
  23. package/dist/dom/event-replay.js +46 -0
  24. package/dist/dom/event-replay.js.map +7 -0
  25. package/dist/dom/features/class/full.d.ts +1 -0
  26. package/dist/dom/features/class/full.js +91 -0
  27. package/dist/dom/features/class/full.js.map +7 -0
  28. package/dist/dom/features/class/index.d.ts +1 -0
  29. package/dist/dom/features/class/index.js +3 -0
  30. package/dist/dom/features/class/index.js.map +7 -0
  31. package/dist/dom/features/class/stub.d.ts +1 -0
  32. package/dist/dom/features/class/stub.js +50 -0
  33. package/dist/dom/features/class/stub.js.map +7 -0
  34. package/dist/dom/features/context/full.d.ts +1 -0
  35. package/dist/dom/features/context/full.js +49 -0
  36. package/dist/dom/features/context/full.js.map +7 -0
  37. package/dist/dom/features/context/index.d.ts +1 -0
  38. package/dist/dom/features/context/index.js +3 -0
  39. package/dist/dom/features/context/index.js.map +7 -0
  40. package/dist/dom/features/context/stub.d.ts +1 -0
  41. package/dist/dom/features/context/stub.js +22 -0
  42. package/dist/dom/features/context/stub.js.map +7 -0
  43. package/dist/dom/features/forward-ref/full.d.ts +1 -0
  44. package/dist/dom/features/forward-ref/full.js +51 -0
  45. package/dist/dom/features/forward-ref/full.js.map +7 -0
  46. package/dist/dom/features/forward-ref/index.d.ts +1 -0
  47. package/dist/dom/features/forward-ref/index.js +3 -0
  48. package/dist/dom/features/forward-ref/index.js.map +7 -0
  49. package/dist/dom/features/forward-ref/stub.d.ts +1 -0
  50. package/dist/dom/features/forward-ref/stub.js +22 -0
  51. package/dist/dom/features/forward-ref/stub.js.map +7 -0
  52. package/dist/dom/features/hydration/full.d.ts +61 -0
  53. package/dist/dom/features/hydration/full.js +264 -0
  54. package/dist/dom/features/hydration/full.js.map +7 -0
  55. package/dist/dom/features/hydration/index.d.ts +1 -0
  56. package/dist/dom/features/hydration/index.js +3 -0
  57. package/dist/dom/features/hydration/index.js.map +7 -0
  58. package/dist/dom/features/hydration/stub.d.ts +28 -0
  59. package/dist/dom/features/hydration/stub.js +66 -0
  60. package/dist/dom/features/hydration/stub.js.map +7 -0
  61. package/dist/dom/features/index.d.ts +7 -0
  62. package/dist/dom/features/index.js +9 -0
  63. package/dist/dom/features/index.js.map +7 -0
  64. package/dist/dom/features/lazy/full.d.ts +1 -0
  65. package/dist/dom/features/lazy/full.js +78 -0
  66. package/dist/dom/features/lazy/full.js.map +7 -0
  67. package/dist/dom/features/lazy/index.d.ts +1 -0
  68. package/dist/dom/features/lazy/index.js +3 -0
  69. package/dist/dom/features/lazy/index.js.map +7 -0
  70. package/dist/dom/features/lazy/stub.d.ts +1 -0
  71. package/dist/dom/features/lazy/stub.js +36 -0
  72. package/dist/dom/features/lazy/stub.js.map +7 -0
  73. package/dist/dom/features/memo/full.d.ts +1 -0
  74. package/dist/dom/features/memo/full.js +59 -0
  75. package/dist/dom/features/memo/full.js.map +7 -0
  76. package/dist/dom/features/memo/index.d.ts +1 -0
  77. package/dist/dom/features/memo/index.js +3 -0
  78. package/dist/dom/features/memo/index.js.map +7 -0
  79. package/dist/dom/features/memo/stub.d.ts +1 -0
  80. package/dist/dom/features/memo/stub.js +36 -0
  81. package/dist/dom/features/memo/stub.js.map +7 -0
  82. package/dist/dom/features/portal/full.d.ts +1 -0
  83. package/dist/dom/features/portal/full.js +19 -0
  84. package/dist/dom/features/portal/full.js.map +7 -0
  85. package/dist/dom/features/portal/index.d.ts +1 -0
  86. package/dist/dom/features/portal/index.js +3 -0
  87. package/dist/dom/features/portal/index.js.map +7 -0
  88. package/dist/dom/features/portal/stub.d.ts +1 -0
  89. package/dist/dom/features/portal/stub.js +7 -0
  90. package/dist/dom/features/portal/stub.js.map +7 -0
  91. package/dist/dom/features/suspense/full.d.ts +1 -0
  92. package/dist/dom/features/suspense/full.js +146 -0
  93. package/dist/dom/features/suspense/full.js.map +7 -0
  94. package/dist/dom/features/suspense/index.d.ts +1 -0
  95. package/dist/dom/features/suspense/index.js +3 -0
  96. package/dist/dom/features/suspense/index.js.map +7 -0
  97. package/dist/dom/features/suspense/stub.d.ts +1 -0
  98. package/dist/dom/features/suspense/stub.js +6 -0
  99. package/dist/dom/features/suspense/stub.js.map +7 -0
  100. package/dist/dom/index.d.ts +25 -0
  101. package/dist/dom/index.js +45 -0
  102. package/dist/dom/index.js.map +7 -0
  103. package/dist/dom/portal.d.ts +2 -0
  104. package/dist/dom/portal.js +15 -0
  105. package/dist/dom/portal.js.map +7 -0
  106. package/dist/dom/reconcile.d.ts +40 -0
  107. package/dist/dom/reconcile.js +795 -0
  108. package/dist/dom/reconcile.js.map +7 -0
  109. package/dist/dom/root.d.ts +15 -0
  110. package/dist/dom/root.js +85 -0
  111. package/dist/dom/root.js.map +7 -0
  112. package/dist/dom/test-utils.d.ts +1 -0
  113. package/dist/dom/test-utils.js +10 -0
  114. package/dist/dom/test-utils.js.map +7 -0
  115. package/dist/react/children.d.ts +8 -0
  116. package/dist/react/children.js +75 -0
  117. package/dist/react/children.js.map +7 -0
  118. package/dist/react/class.d.ts +31 -0
  119. package/dist/react/class.js +40 -0
  120. package/dist/react/class.js.map +7 -0
  121. package/dist/react/context.d.ts +27 -0
  122. package/dist/react/context.js +31 -0
  123. package/dist/react/context.js.map +7 -0
  124. package/dist/react/element.d.ts +10 -0
  125. package/dist/react/element.js +64 -0
  126. package/dist/react/element.js.map +7 -0
  127. package/dist/react/hooks.d.ts +37 -0
  128. package/dist/react/hooks.js +146 -0
  129. package/dist/react/hooks.js.map +7 -0
  130. package/dist/react/index.d.ts +76 -0
  131. package/dist/react/index.js +187 -0
  132. package/dist/react/index.js.map +7 -0
  133. package/dist/react/jsx-runtime.d.ts +5 -0
  134. package/dist/react/jsx-runtime.js +21 -0
  135. package/dist/react/jsx-runtime.js.map +7 -0
  136. package/dist/react/memo.d.ts +29 -0
  137. package/dist/react/memo.js +47 -0
  138. package/dist/react/memo.js.map +7 -0
  139. package/dist/react/portal.d.ts +1 -0
  140. package/dist/react/portal.js +6 -0
  141. package/dist/react/portal.js.map +7 -0
  142. package/dist/react/shared-internals.d.ts +33 -0
  143. package/dist/react/shared-internals.js +29 -0
  144. package/dist/react/shared-internals.js.map +7 -0
  145. package/dist/react/suspense.d.ts +15 -0
  146. package/dist/react/suspense.js +16 -0
  147. package/dist/react/suspense.js.map +7 -0
  148. package/dist/scheduler/index.d.ts +44 -0
  149. package/dist/scheduler/index.js +109 -0
  150. package/dist/scheduler/index.js.map +7 -0
  151. package/dist/server/bootstrap-script.d.ts +22 -0
  152. package/dist/server/bootstrap-script.js +16 -0
  153. package/dist/server/bootstrap-script.js.map +7 -0
  154. package/dist/server/dispatcher.d.ts +37 -0
  155. package/dist/server/dispatcher.js +140 -0
  156. package/dist/server/dispatcher.js.map +7 -0
  157. package/dist/server/escape.d.ts +7 -0
  158. package/dist/server/escape.js +159 -0
  159. package/dist/server/escape.js.map +7 -0
  160. package/dist/server/index.d.ts +16 -0
  161. package/dist/server/index.js +26 -0
  162. package/dist/server/index.js.map +7 -0
  163. package/dist/server/renderToString.d.ts +7 -0
  164. package/dist/server/renderToString.js +29 -0
  165. package/dist/server/renderToString.js.map +7 -0
  166. package/dist/server/stream.d.ts +40 -0
  167. package/dist/server/stream.js +200 -0
  168. package/dist/server/stream.js.map +7 -0
  169. package/dist/server/walk.d.ts +33 -0
  170. package/dist/server/walk.js +298 -0
  171. package/dist/server/walk.js.map +7 -0
  172. package/dist/vite/index.d.ts +96 -0
  173. package/dist/vite/index.js +217 -0
  174. package/dist/vite/index.js.map +7 -0
  175. package/package.json +83 -0
  176. package/src/core/index.ts +2 -0
  177. package/src/core/internal.ts +107 -0
  178. package/src/core/types.ts +36 -0
  179. package/src/dom/_all.ts +54 -0
  180. package/src/dom/client.ts +4 -0
  181. package/src/dom/dispatcher.ts +318 -0
  182. package/src/dom/dom.ts +316 -0
  183. package/src/dom/event-replay.ts +55 -0
  184. package/src/dom/features/class/full.ts +104 -0
  185. package/src/dom/features/class/index.ts +1 -0
  186. package/src/dom/features/class/stub.ts +65 -0
  187. package/src/dom/features/context/full.ts +57 -0
  188. package/src/dom/features/context/index.ts +1 -0
  189. package/src/dom/features/context/stub.ts +32 -0
  190. package/src/dom/features/forward-ref/full.ts +54 -0
  191. package/src/dom/features/forward-ref/index.ts +1 -0
  192. package/src/dom/features/forward-ref/stub.ts +28 -0
  193. package/src/dom/features/hydration/full.ts +345 -0
  194. package/src/dom/features/hydration/index.ts +1 -0
  195. package/src/dom/features/hydration/stub.ts +72 -0
  196. package/src/dom/features/index.ts +11 -0
  197. package/src/dom/features/lazy/full.ts +98 -0
  198. package/src/dom/features/lazy/index.ts +1 -0
  199. package/src/dom/features/lazy/stub.ts +45 -0
  200. package/src/dom/features/memo/full.ts +74 -0
  201. package/src/dom/features/memo/index.ts +1 -0
  202. package/src/dom/features/memo/stub.ts +42 -0
  203. package/src/dom/features/portal/full.ts +22 -0
  204. package/src/dom/features/portal/index.ts +1 -0
  205. package/src/dom/features/portal/stub.ts +11 -0
  206. package/src/dom/features/suspense/full.ts +191 -0
  207. package/src/dom/features/suspense/index.ts +1 -0
  208. package/src/dom/features/suspense/stub.ts +12 -0
  209. package/src/dom/index.ts +33 -0
  210. package/src/dom/portal.ts +16 -0
  211. package/src/dom/reconcile.ts +1169 -0
  212. package/src/dom/root.ts +107 -0
  213. package/src/dom/test-utils.ts +6 -0
  214. package/src/react/children.ts +85 -0
  215. package/src/react/class.ts +56 -0
  216. package/src/react/context.ts +50 -0
  217. package/src/react/element.ts +80 -0
  218. package/src/react/hooks.ts +190 -0
  219. package/src/react/index.ts +132 -0
  220. package/src/react/jsx-runtime.ts +16 -0
  221. package/src/react/memo.ts +45 -0
  222. package/src/react/portal.ts +1 -0
  223. package/src/react/shared-internals.ts +79 -0
  224. package/src/react/suspense.ts +18 -0
  225. package/src/scheduler/index.ts +124 -0
  226. package/src/server/bootstrap-script.ts +52 -0
  227. package/src/server/dispatcher.ts +158 -0
  228. package/src/server/escape.ts +187 -0
  229. package/src/server/index.ts +26 -0
  230. package/src/server/renderToString.ts +33 -0
  231. package/src/server/stream.ts +302 -0
  232. package/src/server/walk.ts +448 -0
  233. package/src/vite/index.ts +401 -0
@@ -0,0 +1,7 @@
1
+ import './portal';
2
+ import './context';
3
+ import './suspense';
4
+ import './memo';
5
+ import './forward-ref';
6
+ import './lazy';
7
+ import './class';
@@ -0,0 +1,9 @@
1
+ // packages/redact/src/dom/features/index.ts
2
+ import "./portal";
3
+ import "./context";
4
+ import "./suspense";
5
+ import "./memo";
6
+ import "./forward-ref";
7
+ import "./lazy";
8
+ import "./class";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/dom/features/index.ts"],
4
+ "sourcesContent": ["// Feature wiring. Each import is a side-effect import that triggers the\n// feature module's self-registration with the reconciler (renderer, type\n// matcher, element marker). A vite plugin can swap any entry to './stub'\n// to disable that feature in the emitted bundle.\nimport './portal'\nimport './context'\nimport './suspense'\nimport './memo'\nimport './forward-ref'\nimport './lazy'\nimport './class'\n"],
5
+ "mappings": ";AAIA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ // packages/redact/src/dom/features/lazy/full.ts
2
+ import { FiberTag } from "../../../core";
3
+ import { REACT_LAZY_TYPE } from "../../../react";
4
+ import {
5
+ registerRenderer,
6
+ registerTypeMatcher,
7
+ renderFiber,
8
+ scheduleUpdate,
9
+ isThenable,
10
+ handleSuspended,
11
+ getCurrentRoot
12
+ } from "../../reconcile";
13
+ import {
14
+ getHydrationCursor,
15
+ setHydrationCursor,
16
+ findHostParent as findHydrationHost
17
+ } from "../hydration";
18
+ function renderLazy(fiber, domParent, anchor) {
19
+ const { _payload, _init } = fiber.type;
20
+ let resolved;
21
+ try {
22
+ resolved = _init(_payload);
23
+ } catch (thenable) {
24
+ if (isThenable(thenable)) {
25
+ const root = getCurrentRoot();
26
+ if (root?.hydrating) {
27
+ const hostParent = findHydrationHost(fiber);
28
+ const inheritedCursor = getHydrationCursor(hostParent);
29
+ if (inheritedCursor) {
30
+ setHydrationCursor(fiber, inheritedCursor);
31
+ }
32
+ fiber.memoizedState = {
33
+ ...fiber.memoizedState ?? {},
34
+ _pendingHydration: true
35
+ };
36
+ let sus = fiber.parent;
37
+ while (sus && sus.tag !== FiberTag.Suspense) sus = sus.parent;
38
+ if (sus && sus.memoizedState) {
39
+ ;
40
+ sus.memoizedState._awaitingLazyHydration = true;
41
+ }
42
+ thenable.then(
43
+ () => {
44
+ if (sus && sus.memoizedState) {
45
+ ;
46
+ sus.memoizedState._awaitingLazyHydration = false;
47
+ }
48
+ scheduleUpdate(fiber);
49
+ },
50
+ () => {
51
+ if (sus && sus.memoizedState) {
52
+ ;
53
+ sus.memoizedState._awaitingLazyHydration = false;
54
+ }
55
+ scheduleUpdate(fiber);
56
+ }
57
+ );
58
+ return;
59
+ }
60
+ handleSuspended(fiber, thenable);
61
+ return;
62
+ }
63
+ throw thenable;
64
+ }
65
+ const savedTag = fiber.tag;
66
+ const savedType = fiber.type;
67
+ fiber.type = resolved;
68
+ fiber.tag = typeof resolved === "function" ? resolved.prototype?.isReactComponent ? FiberTag.Class : FiberTag.Function : FiberTag.Fragment;
69
+ try {
70
+ renderFiber(fiber, domParent, anchor);
71
+ } finally {
72
+ fiber.tag = savedTag;
73
+ fiber.type = savedType;
74
+ }
75
+ }
76
+ registerTypeMatcher((_type, marker) => marker === REACT_LAZY_TYPE ? FiberTag.Lazy : null);
77
+ registerRenderer(FiberTag.Lazy, renderLazy);
78
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/lazy/full.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_LAZY_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n renderFiber,\n scheduleUpdate,\n isThenable,\n handleSuspended,\n getCurrentRoot,\n} from '../../reconcile'\nimport {\n getHydrationCursor,\n setHydrationCursor,\n findHostParent as findHydrationHost,\n} from '../hydration'\n\nfunction renderLazy(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const { _payload, _init } = fiber.type as any\n let resolved: any\n try {\n resolved = _init(_payload)\n } catch (thenable: any) {\n if (isThenable(thenable)) {\n // During initial hydration, a lazy component inside an SSR-resolved\n // Suspense boundary needs special handling: the SSR DOM for its\n // resolved content is already in the page and our cursor is pointing\n // at it. A normal `handleSuspended` would schedule the lazy's later\n // re-render WITHOUT the hydration cursor \u2014 so when it eventually\n // resolves, we'd create a fresh DOM copy next to the SSR one (visible\n // as duplicate logos / buttons / sections inside the Suspense). Mirror\n // the pattern in renderFunction: preserve the in-scope cursor on this\n // fiber and flag it for deferred re-hydration, so rerenderFiber\n // restores `root.hydrating = true` and the resolved render adopts the\n // existing DOM instead of mounting a duplicate.\n const root = getCurrentRoot()\n if (root?.hydrating) {\n const hostParent = findHydrationHost(fiber)\n const inheritedCursor = getHydrationCursor(hostParent)\n if (inheritedCursor) {\n setHydrationCursor(fiber, inheritedCursor)\n }\n fiber.memoizedState = {\n ...(fiber.memoizedState ?? {}),\n _pendingHydration: true,\n }\n // Mark the nearest ancestor Suspense as \"awaiting hydration-resume\"\n // so a post-hydration re-render of that Suspense doesn't accidentally\n // flip into suspended+pending and mount a fallback atop the SSR\n // content. Match-by-tag-name works whether Suspense is the full\n // feature or stubbed to Fragment (the walk just never finds one).\n let sus: Fiber | null = fiber.parent\n while (sus && sus.tag !== FiberTag.Suspense) sus = sus.parent\n if (sus && sus.memoizedState) {\n ;(sus.memoizedState as any)._awaitingLazyHydration = true\n }\n thenable.then(\n () => {\n if (sus && sus.memoizedState) {\n ;(sus.memoizedState as any)._awaitingLazyHydration = false\n }\n scheduleUpdate(fiber)\n },\n () => {\n if (sus && sus.memoizedState) {\n ;(sus.memoizedState as any)._awaitingLazyHydration = false\n }\n scheduleUpdate(fiber)\n },\n )\n return\n }\n handleSuspended(fiber, thenable)\n // reconcileChildren would be called here if we were rendering children,\n // but Lazy delegates and has no children of its own.\n return\n }\n throw thenable\n }\n const savedTag = fiber.tag\n const savedType = fiber.type\n fiber.type = resolved\n fiber.tag =\n typeof resolved === 'function'\n ? resolved.prototype?.isReactComponent\n ? FiberTag.Class\n : FiberTag.Function\n : FiberTag.Fragment\n try {\n renderFiber(fiber, domParent, anchor)\n } finally {\n fiber.tag = savedTag\n fiber.type = savedType\n }\n}\n\nregisterTypeMatcher((_type, marker) => (marker === REACT_LAZY_TYPE ? FiberTag.Lazy : null))\nregisterRenderer(FiberTag.Lazy, renderLazy)\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,OACb;AAEP,SAAS,WAAW,OAAc,WAAiB,QAA2B;AAC5E,QAAM,EAAE,UAAU,MAAM,IAAI,MAAM;AAClC,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,QAAQ;AAAA,EAC3B,SAAS,UAAe;AACtB,QAAI,WAAW,QAAQ,GAAG;AAYxB,YAAM,OAAO,eAAe;AAC5B,UAAI,MAAM,WAAW;AACnB,cAAM,aAAa,kBAAkB,KAAK;AAC1C,cAAM,kBAAkB,mBAAmB,UAAU;AACrD,YAAI,iBAAiB;AACnB,6BAAmB,OAAO,eAAe;AAAA,QAC3C;AACA,cAAM,gBAAgB;AAAA,UACpB,GAAI,MAAM,iBAAiB,CAAC;AAAA,UAC5B,mBAAmB;AAAA,QACrB;AAMA,YAAI,MAAoB,MAAM;AAC9B,eAAO,OAAO,IAAI,QAAQ,SAAS,SAAU,OAAM,IAAI;AACvD,YAAI,OAAO,IAAI,eAAe;AAC5B;AAAC,UAAC,IAAI,cAAsB,yBAAyB;AAAA,QACvD;AACA,iBAAS;AAAA,UACP,MAAM;AACJ,gBAAI,OAAO,IAAI,eAAe;AAC5B;AAAC,cAAC,IAAI,cAAsB,yBAAyB;AAAA,YACvD;AACA,2BAAe,KAAK;AAAA,UACtB;AAAA,UACA,MAAM;AACJ,gBAAI,OAAO,IAAI,eAAe;AAC5B;AAAC,cAAC,IAAI,cAAsB,yBAAyB;AAAA,YACvD;AACA,2BAAe,KAAK;AAAA,UACtB;AAAA,QACF;AACA;AAAA,MACF;AACA,sBAAgB,OAAO,QAAQ;AAG/B;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACA,QAAM,WAAW,MAAM;AACvB,QAAM,YAAY,MAAM;AACxB,QAAM,OAAO;AACb,QAAM,MACJ,OAAO,aAAa,aAChB,SAAS,WAAW,mBAClB,SAAS,QACT,SAAS,WACX,SAAS;AACf,MAAI;AACF,gBAAY,OAAO,WAAW,MAAM;AAAA,EACtC,UAAE;AACA,UAAM,MAAM;AACZ,UAAM,OAAO;AAAA,EACf;AACF;AAEA,oBAAoB,CAAC,OAAO,WAAY,WAAW,kBAAkB,SAAS,OAAO,IAAK;AAC1F,iBAAiB,SAAS,MAAM,UAAU;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from './full';
@@ -0,0 +1,3 @@
1
+ // packages/redact/src/dom/features/lazy/index.ts
2
+ export * from "./full";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/lazy/index.ts"],
4
+ "sourcesContent": ["export * from './full'\n"],
5
+ "mappings": ";AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ // packages/redact/src/dom/features/lazy/stub.ts
2
+ import { FiberTag } from "../../../core";
3
+ import { REACT_LAZY_TYPE } from "../../../react";
4
+ import {
5
+ registerRenderer,
6
+ registerTypeMatcher,
7
+ renderFiber,
8
+ isThenable,
9
+ handleSuspended
10
+ } from "../../reconcile";
11
+ function renderLazyStub(fiber, domParent, anchor) {
12
+ const { _payload, _init } = fiber.type;
13
+ let resolved;
14
+ try {
15
+ resolved = _init(_payload);
16
+ } catch (thrown) {
17
+ if (isThenable(thrown)) {
18
+ handleSuspended(fiber, thrown);
19
+ return;
20
+ }
21
+ throw thrown;
22
+ }
23
+ const savedTag = fiber.tag;
24
+ const savedType = fiber.type;
25
+ fiber.type = resolved;
26
+ fiber.tag = typeof resolved === "function" ? resolved.prototype?.isReactComponent ? FiberTag.Class : FiberTag.Function : FiberTag.Fragment;
27
+ try {
28
+ renderFiber(fiber, domParent, anchor);
29
+ } finally {
30
+ fiber.tag = savedTag;
31
+ fiber.type = savedType;
32
+ }
33
+ }
34
+ registerTypeMatcher((_type, marker) => marker === REACT_LAZY_TYPE ? FiberTag.Lazy : null);
35
+ registerRenderer(FiberTag.Lazy, renderLazyStub);
36
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/lazy/stub.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_LAZY_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n renderFiber,\n isThenable,\n handleSuspended,\n} from '../../reconcile'\n\n// Stub: Lazy feature disabled. Lazy elements still resolve \u2014 sync if the\n// payload is ready, otherwise the thrown thenable goes through the default\n// `handleSuspended` capability (retry-on-settle). What's stripped: the\n// hydration-deferred-reveal pathway and the Suspense-awaiting coordination.\nfunction renderLazyStub(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const { _payload, _init } = fiber.type as any\n let resolved: any\n try {\n resolved = _init(_payload)\n } catch (thrown: any) {\n if (isThenable(thrown)) {\n handleSuspended(fiber, thrown)\n return\n }\n throw thrown\n }\n const savedTag = fiber.tag\n const savedType = fiber.type\n fiber.type = resolved\n fiber.tag =\n typeof resolved === 'function'\n ? resolved.prototype?.isReactComponent\n ? FiberTag.Class\n : FiberTag.Function\n : FiberTag.Fragment\n try {\n renderFiber(fiber, domParent, anchor)\n } finally {\n fiber.tag = savedTag\n fiber.type = savedType\n }\n}\n\nregisterTypeMatcher((_type, marker) => (marker === REACT_LAZY_TYPE ? FiberTag.Lazy : null))\nregisterRenderer(FiberTag.Lazy, renderLazyStub)\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,EAAE,UAAU,MAAM,IAAI,MAAM;AAClC,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,QAAQ;AAAA,EAC3B,SAAS,QAAa;AACpB,QAAI,WAAW,MAAM,GAAG;AACtB,sBAAgB,OAAO,MAAM;AAC7B;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACA,QAAM,WAAW,MAAM;AACvB,QAAM,YAAY,MAAM;AACxB,QAAM,OAAO;AACb,QAAM,MACJ,OAAO,aAAa,aAChB,SAAS,WAAW,mBAClB,SAAS,QACT,SAAS,WACX,SAAS;AACf,MAAI;AACF,gBAAY,OAAO,WAAW,MAAM;AAAA,EACtC,UAAE;AACA,UAAM,MAAM;AACZ,UAAM,OAAO;AAAA,EACf;AACF;AAEA,oBAAoB,CAAC,OAAO,WAAY,WAAW,kBAAkB,SAAS,OAAO,IAAK;AAC1F,iBAAiB,SAAS,MAAM,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,59 @@
1
+ // packages/redact/src/dom/features/memo/full.ts
2
+ import { FiberTag } from "../../../core";
3
+ import {
4
+ REACT_FORWARD_REF_TYPE,
5
+ REACT_MEMO_TYPE,
6
+ REACT_LAZY_TYPE
7
+ } from "../../../react";
8
+ import {
9
+ registerRenderer,
10
+ registerTypeMatcher,
11
+ renderFiber,
12
+ getForceRerenderingFiber
13
+ } from "../../reconcile";
14
+ function shallowEqual(a, b) {
15
+ if (a === b) return true;
16
+ if (!a || !b) return false;
17
+ const ak = Object.keys(a);
18
+ const bk = Object.keys(b);
19
+ if (ak.length !== bk.length) return false;
20
+ for (const k of ak) {
21
+ if (a[k] !== b[k]) return false;
22
+ }
23
+ return true;
24
+ }
25
+ function renderMemo(fiber, domParent, anchor) {
26
+ const { type, compare } = fiber.type;
27
+ const props = fiber.pendingProps ?? {};
28
+ const prev = fiber.memoizedProps;
29
+ const bypassMemo = fiber === getForceRerenderingFiber();
30
+ const eq = !bypassMemo && prev && (compare ? compare(prev, props) : shallowEqual(prev, props));
31
+ if (eq) {
32
+ return;
33
+ }
34
+ let innerTag;
35
+ if (typeof type === "function") {
36
+ innerTag = type.prototype?.isReactComponent ? FiberTag.Class : FiberTag.Function;
37
+ } else if (type && typeof type === "object") {
38
+ const m = type.$$typeof;
39
+ if (m === REACT_FORWARD_REF_TYPE) innerTag = FiberTag.ForwardRef;
40
+ else if (m === REACT_MEMO_TYPE) innerTag = FiberTag.Memo;
41
+ else if (m === REACT_LAZY_TYPE) innerTag = FiberTag.Lazy;
42
+ else innerTag = FiberTag.Fragment;
43
+ } else {
44
+ innerTag = FiberTag.Fragment;
45
+ }
46
+ const savedTag = fiber.tag;
47
+ const savedType = fiber.type;
48
+ fiber.tag = innerTag;
49
+ fiber.type = type;
50
+ try {
51
+ renderFiber(fiber, domParent, anchor);
52
+ } finally {
53
+ fiber.tag = savedTag;
54
+ fiber.type = savedType;
55
+ }
56
+ }
57
+ registerTypeMatcher((_type, marker) => marker === REACT_MEMO_TYPE ? FiberTag.Memo : null);
58
+ registerRenderer(FiberTag.Memo, renderMemo);
59
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/memo/full.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport {\n REACT_FORWARD_REF_TYPE,\n REACT_MEMO_TYPE,\n REACT_LAZY_TYPE,\n} from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n renderFiber,\n getForceRerenderingFiber,\n} from '../../reconcile'\n\nfunction shallowEqual(a: any, b: any): boolean {\n if (a === b) return true\n if (!a || !b) return false\n const ak = Object.keys(a)\n const bk = Object.keys(b)\n if (ak.length !== bk.length) return false\n for (const k of ak) {\n if (a[k] !== b[k]) return false\n }\n return true\n}\n\nfunction renderMemo(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const { type, compare } = fiber.type as any\n const props = fiber.pendingProps ?? {}\n const prev = fiber.memoizedProps\n\n // Memo's prop-equality gate guards PARENT-triggered rerenders. If this\n // render is a STATE-triggered rerender of this exact fiber (hook update,\n // useSyncExternalStore notification), props haven't changed by definition \u2014\n // bailing would swallow the state change and the subscriber never re-runs.\n // rerenderFiber tags the fiber so we skip the gate here.\n const bypassMemo = fiber === getForceRerenderingFiber()\n const eq = !bypassMemo && prev && (compare ? compare(prev, props) : shallowEqual(prev, props))\n if (eq) {\n // Re-render children with previous output (already in tree)\n return\n }\n\n // Determine the delegated tag based on the memoized type. `React.memo` can\n // wrap plain functions, class components, OR other special types like\n // `forwardRef`. Without the marker-based branch we'd mistreat\n // `memo(forwardRef(...))` as a Fragment and render nothing.\n let innerTag: FiberTag\n if (typeof type === 'function') {\n innerTag = type.prototype?.isReactComponent ? FiberTag.Class : FiberTag.Function\n } else if (type && typeof type === 'object') {\n const m = (type as any).$$typeof\n if (m === REACT_FORWARD_REF_TYPE) innerTag = FiberTag.ForwardRef\n else if (m === REACT_MEMO_TYPE) innerTag = FiberTag.Memo\n else if (m === REACT_LAZY_TYPE) innerTag = FiberTag.Lazy\n else innerTag = FiberTag.Fragment\n } else {\n innerTag = FiberTag.Fragment\n }\n\n // Swap tag and type for this render pass; this is a \"delegating\" render\n const savedTag = fiber.tag\n const savedType = fiber.type\n fiber.tag = innerTag\n fiber.type = type\n try {\n renderFiber(fiber, domParent, anchor)\n } finally {\n fiber.tag = savedTag\n fiber.type = savedType\n }\n}\n\nregisterTypeMatcher((_type, marker) => (marker === REACT_MEMO_TYPE ? FiberTag.Memo : null))\nregisterRenderer(FiberTag.Memo, renderMemo)\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,aAAa,GAAQ,GAAiB;AAC7C,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AACrB,QAAM,KAAK,OAAO,KAAK,CAAC;AACxB,QAAM,KAAK,OAAO,KAAK,CAAC;AACxB,MAAI,GAAG,WAAW,GAAG,OAAQ,QAAO;AACpC,aAAW,KAAK,IAAI;AAClB,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAG,QAAO;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAAc,WAAiB,QAA2B;AAC5E,QAAM,EAAE,MAAM,QAAQ,IAAI,MAAM;AAChC,QAAM,QAAQ,MAAM,gBAAgB,CAAC;AACrC,QAAM,OAAO,MAAM;AAOnB,QAAM,aAAa,UAAU,yBAAyB;AACtD,QAAM,KAAK,CAAC,cAAc,SAAS,UAAU,QAAQ,MAAM,KAAK,IAAI,aAAa,MAAM,KAAK;AAC5F,MAAI,IAAI;AAEN;AAAA,EACF;AAMA,MAAI;AACJ,MAAI,OAAO,SAAS,YAAY;AAC9B,eAAW,KAAK,WAAW,mBAAmB,SAAS,QAAQ,SAAS;AAAA,EAC1E,WAAW,QAAQ,OAAO,SAAS,UAAU;AAC3C,UAAM,IAAK,KAAa;AACxB,QAAI,MAAM,uBAAwB,YAAW,SAAS;AAAA,aAC7C,MAAM,gBAAiB,YAAW,SAAS;AAAA,aAC3C,MAAM,gBAAiB,YAAW,SAAS;AAAA,QAC/C,YAAW,SAAS;AAAA,EAC3B,OAAO;AACL,eAAW,SAAS;AAAA,EACtB;AAGA,QAAM,WAAW,MAAM;AACvB,QAAM,YAAY,MAAM;AACxB,QAAM,MAAM;AACZ,QAAM,OAAO;AACb,MAAI;AACF,gBAAY,OAAO,WAAW,MAAM;AAAA,EACtC,UAAE;AACA,UAAM,MAAM;AACZ,UAAM,OAAO;AAAA,EACf;AACF;AAEA,oBAAoB,CAAC,OAAO,WAAY,WAAW,kBAAkB,SAAS,OAAO,IAAK;AAC1F,iBAAiB,SAAS,MAAM,UAAU;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from './full';
@@ -0,0 +1,3 @@
1
+ // packages/redact/src/dom/features/memo/index.ts
2
+ export * from "./full";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/memo/index.ts"],
4
+ "sourcesContent": ["export * from './full'\n"],
5
+ "mappings": ";AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ // packages/redact/src/dom/features/memo/stub.ts
2
+ import { FiberTag } from "../../../core";
3
+ import {
4
+ REACT_FORWARD_REF_TYPE,
5
+ REACT_MEMO_TYPE,
6
+ REACT_LAZY_TYPE
7
+ } from "../../../react";
8
+ import { registerRenderer, registerTypeMatcher, renderFiber } from "../../reconcile";
9
+ function renderMemoStub(fiber, domParent, anchor) {
10
+ const { type } = fiber.type;
11
+ let innerTag;
12
+ if (typeof type === "function") {
13
+ innerTag = type.prototype?.isReactComponent ? FiberTag.Class : FiberTag.Function;
14
+ } else if (type && typeof type === "object") {
15
+ const m = type.$$typeof;
16
+ if (m === REACT_FORWARD_REF_TYPE) innerTag = FiberTag.ForwardRef;
17
+ else if (m === REACT_MEMO_TYPE) innerTag = FiberTag.Memo;
18
+ else if (m === REACT_LAZY_TYPE) innerTag = FiberTag.Lazy;
19
+ else innerTag = FiberTag.Fragment;
20
+ } else {
21
+ innerTag = FiberTag.Fragment;
22
+ }
23
+ const savedTag = fiber.tag;
24
+ const savedType = fiber.type;
25
+ fiber.tag = innerTag;
26
+ fiber.type = type;
27
+ try {
28
+ renderFiber(fiber, domParent, anchor);
29
+ } finally {
30
+ fiber.tag = savedTag;
31
+ fiber.type = savedType;
32
+ }
33
+ }
34
+ registerTypeMatcher((_type, marker) => marker === REACT_MEMO_TYPE ? FiberTag.Memo : null);
35
+ registerRenderer(FiberTag.Memo, renderMemoStub);
36
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/memo/stub.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport {\n REACT_FORWARD_REF_TYPE,\n REACT_MEMO_TYPE,\n REACT_LAZY_TYPE,\n} from '../../../react'\nimport { registerRenderer, registerTypeMatcher, renderFiber } from '../../reconcile'\n\n// Stub: Memo feature disabled. `memo(Component)` still works \u2014 the element\n// renders \u2014 but without the prop-equality gate, so every parent rerender\n// passes through to the inner component. `shallowEqual` and the\n// forceRerenderingFiber read are stripped.\nfunction renderMemoStub(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const { type } = fiber.type as any\n\n let innerTag: FiberTag\n if (typeof type === 'function') {\n innerTag = type.prototype?.isReactComponent ? FiberTag.Class : FiberTag.Function\n } else if (type && typeof type === 'object') {\n const m = (type as any).$$typeof\n if (m === REACT_FORWARD_REF_TYPE) innerTag = FiberTag.ForwardRef\n else if (m === REACT_MEMO_TYPE) innerTag = FiberTag.Memo\n else if (m === REACT_LAZY_TYPE) innerTag = FiberTag.Lazy\n else innerTag = FiberTag.Fragment\n } else {\n innerTag = FiberTag.Fragment\n }\n\n const savedTag = fiber.tag\n const savedType = fiber.type\n fiber.tag = innerTag\n fiber.type = type\n try {\n renderFiber(fiber, domParent, anchor)\n } finally {\n fiber.tag = savedTag\n fiber.type = savedType\n }\n}\n\nregisterTypeMatcher((_type, marker) => (marker === REACT_MEMO_TYPE ? FiberTag.Memo : null))\nregisterRenderer(FiberTag.Memo, renderMemoStub)\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB,qBAAqB,mBAAmB;AAMnE,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,EAAE,KAAK,IAAI,MAAM;AAEvB,MAAI;AACJ,MAAI,OAAO,SAAS,YAAY;AAC9B,eAAW,KAAK,WAAW,mBAAmB,SAAS,QAAQ,SAAS;AAAA,EAC1E,WAAW,QAAQ,OAAO,SAAS,UAAU;AAC3C,UAAM,IAAK,KAAa;AACxB,QAAI,MAAM,uBAAwB,YAAW,SAAS;AAAA,aAC7C,MAAM,gBAAiB,YAAW,SAAS;AAAA,aAC3C,MAAM,gBAAiB,YAAW,SAAS;AAAA,QAC/C,YAAW,SAAS;AAAA,EAC3B,OAAO;AACL,eAAW,SAAS;AAAA,EACtB;AAEA,QAAM,WAAW,MAAM;AACvB,QAAM,YAAY,MAAM;AACxB,QAAM,MAAM;AACZ,QAAM,OAAO;AACb,MAAI;AACF,gBAAY,OAAO,WAAW,MAAM;AAAA,EACtC,UAAE;AACA,UAAM,MAAM;AACZ,UAAM,OAAO;AAAA,EACf;AACF;AAEA,oBAAoB,CAAC,OAAO,WAAY,WAAW,kBAAkB,SAAS,OAAO,IAAK;AAC1F,iBAAiB,SAAS,MAAM,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ // packages/redact/src/dom/features/portal/full.ts
2
+ import { FiberTag } from "../../../core";
3
+ import { REACT_PORTAL_TYPE } from "../../../react";
4
+ import {
5
+ registerRenderer,
6
+ registerTypeMatcher,
7
+ registerElementMarker,
8
+ reconcileChildren,
9
+ childrenToArray
10
+ } from "../../reconcile";
11
+ function renderPortal(fiber, _domParent, _anchor) {
12
+ const { children, container } = fiber.pendingProps;
13
+ reconcileChildren(fiber, childrenToArray(children), container, null);
14
+ fiber.memoizedProps = fiber.pendingProps;
15
+ }
16
+ registerElementMarker(REACT_PORTAL_TYPE);
17
+ registerTypeMatcher((type) => type === REACT_PORTAL_TYPE ? FiberTag.Portal : null);
18
+ registerRenderer(FiberTag.Portal, renderPortal);
19
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/portal/full.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport { REACT_PORTAL_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n registerElementMarker,\n reconcileChildren,\n childrenToArray,\n} from '../../reconcile'\n\nfunction renderPortal(fiber: Fiber, _domParent: Node, _anchor: Node | null): void {\n const { children, container } = fiber.pendingProps as {\n children: ReactNode\n container: Element\n }\n reconcileChildren(fiber, childrenToArray(children), container, null)\n fiber.memoizedProps = fiber.pendingProps\n}\n\nregisterElementMarker(REACT_PORTAL_TYPE)\nregisterTypeMatcher((type) => (type === REACT_PORTAL_TYPE ? FiberTag.Portal : null))\nregisterRenderer(FiberTag.Portal, renderPortal)\n"],
5
+ "mappings": ";AAAA,SAAS,gBAA4C;AACrD,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,aAAa,OAAc,YAAkB,SAA4B;AAChF,QAAM,EAAE,UAAU,UAAU,IAAI,MAAM;AAItC,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,IAAI;AACnE,QAAM,gBAAgB,MAAM;AAC9B;AAEA,sBAAsB,iBAAiB;AACvC,oBAAoB,CAAC,SAAU,SAAS,oBAAoB,SAAS,SAAS,IAAK;AACnF,iBAAiB,SAAS,QAAQ,YAAY;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from './full';
@@ -0,0 +1,3 @@
1
+ // packages/redact/src/dom/features/portal/index.ts
2
+ export * from "./full";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/portal/index.ts"],
4
+ "sourcesContent": ["export * from './full'\n"],
5
+ "mappings": ";AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ // packages/redact/src/dom/features/portal/stub.ts
2
+ import { FiberTag } from "../../../core";
3
+ import { REACT_PORTAL_TYPE } from "../../../react";
4
+ import { registerTypeMatcher, registerElementMarker } from "../../reconcile";
5
+ registerElementMarker(REACT_PORTAL_TYPE);
6
+ registerTypeMatcher((type) => type === REACT_PORTAL_TYPE ? FiberTag.Fragment : null);
7
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/portal/stub.ts"],
4
+ "sourcesContent": ["import { FiberTag } from '../../../core'\nimport { REACT_PORTAL_TYPE } from '../../../react'\nimport { registerTypeMatcher, registerElementMarker } from '../../reconcile'\n\n// Stub: Portal feature disabled. Portal elements still flow through JSX\n// (otherwise they'd be silently dropped by child normalization), but render\n// in place as a Fragment \u2014 the `container` prop is ignored. No Portal\n// renderer is registered, so the `renderPortal` function and its deps don't\n// ship in builds that select this stub.\nregisterElementMarker(REACT_PORTAL_TYPE)\nregisterTypeMatcher((type) => (type === REACT_PORTAL_TYPE ? FiberTag.Fragment : null))\n"],
5
+ "mappings": ";AAAA,SAAS,gBAAgB;AACzB,SAAS,yBAAyB;AAClC,SAAS,qBAAqB,6BAA6B;AAO3D,sBAAsB,iBAAiB;AACvC,oBAAoB,CAAC,SAAU,SAAS,oBAAoB,SAAS,WAAW,IAAK;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,146 @@
1
+ // packages/redact/src/dom/features/suspense/full.ts
2
+ import { FiberTag } from "../../../core";
3
+ import { REACT_SUSPENSE_TYPE } from "../../../react";
4
+ import {
5
+ registerRenderer,
6
+ registerTypeMatcher,
7
+ installCapability,
8
+ reconcileChildren,
9
+ childrenToArray,
10
+ scheduleUpdate,
11
+ unmountAllChildren,
12
+ findRoot,
13
+ runEffects,
14
+ getCurrentRoot,
15
+ withCurrentRoot
16
+ } from "../../reconcile";
17
+ import {
18
+ HydrationCursor,
19
+ setHydrationCursor,
20
+ clearHydrationCursor,
21
+ advanceCursorPast,
22
+ tryConsumeBoundary
23
+ } from "../hydration";
24
+ var suspendHandlerStack = [];
25
+ function realHandleSuspended(fiber, thenable) {
26
+ const handler = suspendHandlerStack[suspendHandlerStack.length - 1];
27
+ if (handler) {
28
+ handler(thenable);
29
+ return;
30
+ }
31
+ thenable.then(
32
+ () => scheduleUpdate(fiber),
33
+ () => scheduleUpdate(fiber)
34
+ );
35
+ }
36
+ function renderSuspense(fiber, domParent, anchor) {
37
+ const props = fiber.pendingProps ?? {};
38
+ const state = fiber.memoizedState ??= { suspended: false, pending: null };
39
+ const root = getCurrentRoot();
40
+ if (root?.hydrating && fiber.parent && !state.hydrated) {
41
+ const boundary = tryConsumeBoundary(fiber.parent);
42
+ if (boundary) {
43
+ hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor);
44
+ state.hydrated = true;
45
+ return;
46
+ }
47
+ }
48
+ if (state._awaitingLazyHydration) {
49
+ fiber.memoizedProps = props;
50
+ return;
51
+ }
52
+ const tryChildren = () => {
53
+ reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
54
+ };
55
+ if (state.suspended && state.pending) {
56
+ reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor);
57
+ fiber.memoizedProps = props;
58
+ return;
59
+ }
60
+ const savedHandler = suspendHandlerStack[suspendHandlerStack.length - 1];
61
+ suspendHandlerStack.push((thenable) => {
62
+ state.suspended = true;
63
+ state.pending = thenable;
64
+ thenable.then(
65
+ () => {
66
+ state.suspended = false;
67
+ state.pending = null;
68
+ scheduleUpdate(fiber);
69
+ },
70
+ () => {
71
+ state.suspended = false;
72
+ state.pending = null;
73
+ scheduleUpdate(fiber);
74
+ }
75
+ );
76
+ });
77
+ try {
78
+ tryChildren();
79
+ } finally {
80
+ suspendHandlerStack.pop();
81
+ void savedHandler;
82
+ }
83
+ if (state.suspended) {
84
+ unmountAllChildren(fiber, domParent);
85
+ reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor);
86
+ }
87
+ fiber.memoizedProps = props;
88
+ }
89
+ function hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor) {
90
+ const { kind, id, startMark, endMark } = boundary;
91
+ fiber.memoizedState = {
92
+ suspended: false,
93
+ pending: null,
94
+ hydrated: true,
95
+ boundaryId: id,
96
+ startMark,
97
+ endMark,
98
+ realChildren: props.children
99
+ };
100
+ if (kind === "resolved") {
101
+ const cursor = new HydrationCursor(startMark.parentNode, startMark.nextSibling, endMark);
102
+ setHydrationCursor(fiber, cursor);
103
+ reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
104
+ clearHydrationCursor(fiber);
105
+ advanceCursorPast(fiber.parent, endMark);
106
+ fiber.memoizedProps = props;
107
+ return;
108
+ }
109
+ const bDiv = document.getElementById(`B:${id}`);
110
+ if (bDiv) {
111
+ const cursor = new HydrationCursor(bDiv);
112
+ setHydrationCursor(fiber, cursor);
113
+ reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor);
114
+ clearHydrationCursor(fiber);
115
+ } else {
116
+ reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor);
117
+ }
118
+ advanceCursorPast(fiber.parent, endMark);
119
+ const win = globalThis;
120
+ if (typeof win.$RH === "function") {
121
+ win.$RH(id, () => rehydrateBoundary(fiber));
122
+ }
123
+ fiber.memoizedProps = props;
124
+ }
125
+ function rehydrateBoundary(fiber) {
126
+ const state = fiber.memoizedState;
127
+ if (!state || !state.startMark || !state.endMark) return;
128
+ const root = findRoot(fiber);
129
+ if (!root) return;
130
+ const parent = state.startMark.parentNode;
131
+ if (!parent) return;
132
+ withCurrentRoot(root, () => {
133
+ unmountAllChildren(fiber, parent);
134
+ root.hydrating = true;
135
+ const cursor = new HydrationCursor(parent, state.startMark.nextSibling, state.endMark);
136
+ setHydrationCursor(fiber, cursor);
137
+ reconcileChildren(fiber, childrenToArray(state.realChildren), parent, null);
138
+ clearHydrationCursor(fiber);
139
+ root.hydrating = false;
140
+ runEffects(root);
141
+ });
142
+ }
143
+ registerTypeMatcher((type) => type === REACT_SUSPENSE_TYPE ? FiberTag.Suspense : null);
144
+ registerRenderer(FiberTag.Suspense, renderSuspense);
145
+ installCapability("handleSuspended", realHandleSuspended);
146
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/suspense/full.ts"],
4
+ "sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_SUSPENSE_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n unmountAllChildren,\n findRoot,\n runEffects,\n getCurrentRoot,\n withCurrentRoot,\n} from '../../reconcile'\nimport {\n HydrationCursor,\n setHydrationCursor,\n clearHydrationCursor,\n advanceCursorPast,\n tryConsumeBoundary,\n} from '../hydration'\n\nconst suspendHandlerStack: Array<(t: Promise<any>) => void> = []\n\nfunction realHandleSuspended(fiber: Fiber, thenable: Promise<any>): void {\n const handler = suspendHandlerStack[suspendHandlerStack.length - 1]\n if (handler) {\n handler(thenable)\n return\n }\n // Fallback: schedule re-render when promise settles\n thenable.then(\n () => scheduleUpdate(fiber),\n () => scheduleUpdate(fiber),\n )\n}\n\nfunction renderSuspense(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const props = fiber.pendingProps ?? {}\n const state = (fiber.memoizedState ??= { suspended: false, pending: null as Promise<any> | null })\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?.hydrating && fiber.parent && !state.hydrated) {\n const boundary = tryConsumeBoundary(fiber.parent)\n if (boundary) {\n hydrateSuspenseBoundary(fiber, props, boundary, domParent, anchor)\n state.hydrated = true\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 as any)._awaitingLazyHydration) {\n fiber.memoizedProps = props\n return\n }\n\n const tryChildren = () => {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n }\n\n if (state.suspended && state.pending) {\n // Render fallback while waiting; pending promise will reschedule\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n fiber.memoizedProps = props\n return\n }\n\n // Attempt children \u2014 suspension is handled by the pushed handler below\n const savedHandler = suspendHandlerStack[suspendHandlerStack.length - 1]\n suspendHandlerStack.push((thenable) => {\n state.suspended = true\n state.pending = thenable\n thenable.then(\n () => {\n state.suspended = false\n state.pending = null\n scheduleUpdate(fiber)\n },\n () => {\n state.suspended = false\n state.pending = null\n scheduleUpdate(fiber)\n },\n )\n })\n try {\n tryChildren()\n } finally {\n suspendHandlerStack.pop()\n void savedHandler\n }\n\n if (state.suspended) {\n // Replace children with fallback\n unmountAllChildren(fiber, domParent)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n fiber.memoizedProps = props\n}\n\nfunction hydrateSuspenseBoundary(\n fiber: Fiber,\n props: any,\n boundary: { kind: 'pending' | 'resolved'; id: number; startMark: Comment; endMark: Comment },\n domParent: Node,\n anchor: Node | null,\n): void {\n const { kind, id, startMark, endMark } = boundary\n // Record the boundary shape so we can re-hydrate on reveal.\n fiber.memoizedState = {\n suspended: false,\n pending: null,\n hydrated: true,\n boundaryId: id,\n startMark,\n endMark,\n realChildren: props.children,\n }\n\n if (kind === 'resolved') {\n // Real DOM is inline between startMark and endMark. Hydrate into it.\n const cursor = new HydrationCursor(startMark.parentNode!, startMark.nextSibling, endMark)\n setHydrationCursor(fiber, cursor)\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n clearHydrationCursor(fiber)\n advanceCursorPast(fiber.parent!, endMark)\n fiber.memoizedProps = 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 as Document).getElementById(`B:${id}`)\n if (bDiv) {\n const cursor = new HydrationCursor(bDiv)\n setHydrationCursor(fiber, cursor)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n clearHydrationCursor(fiber)\n } else {\n // Couldn't find fallback container \u2014 render fresh (non-adopting)\n reconcileChildren(fiber, childrenToArray(props.fallback), domParent, anchor)\n }\n advanceCursorPast(fiber.parent!, endMark)\n\n // Register for server-streamed reveal (HTML chunks + $RC calls).\n const win = globalThis as any\n if (typeof win.$RH === 'function') {\n win.$RH(id, () => rehydrateBoundary(fiber))\n }\n // If the inline runtime isn't present, nothing external will mark us dirty.\n\n fiber.memoizedProps = props\n}\n\nfunction rehydrateBoundary(fiber: Fiber): void {\n const state = fiber.memoizedState\n if (!state || !state.startMark || !state.endMark) return\n\n const root = findRoot(fiber)\n if (!root) return\n const parent = state.startMark.parentNode as Node\n if (!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 + effects.\n withCurrentRoot(root, () => {\n unmountAllChildren(fiber, parent)\n\n // Re-hydrate with real children against the now-real DOM range.\n root.hydrating = true\n const cursor = new HydrationCursor(parent, state.startMark.nextSibling, state.endMark)\n setHydrationCursor(fiber, cursor)\n reconcileChildren(fiber, childrenToArray(state.realChildren), parent, null)\n clearHydrationCursor(fiber)\n root.hydrating = false\n runEffects(root)\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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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from './full';
@@ -0,0 +1,3 @@
1
+ // packages/redact/src/dom/features/suspense/index.ts
2
+ export * from "./full";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/suspense/index.ts"],
4
+ "sourcesContent": ["export * from './full'\n"],
5
+ "mappings": ";AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ // packages/redact/src/dom/features/suspense/stub.ts
2
+ import { FiberTag } from "../../../core";
3
+ import { REACT_SUSPENSE_TYPE } from "../../../react";
4
+ import { registerTypeMatcher } from "../../reconcile";
5
+ registerTypeMatcher((type) => type === REACT_SUSPENSE_TYPE ? FiberTag.Fragment : null);
6
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/dom/features/suspense/stub.ts"],
4
+ "sourcesContent": ["import { FiberTag } from '../../../core'\nimport { REACT_SUSPENSE_TYPE } from '../../../react'\nimport { registerTypeMatcher } from '../../reconcile'\n\n// Stub: Suspense feature disabled. `<Suspense>` elements render as Fragments\n// \u2014 children mount inline and `fallback` is ignored. Thrown thenables in\n// descendants fall through to the default `handleSuspended` capability\n// (in reconcile.ts), which schedules a re-render when the promise settles.\n// Eventual consistency still works; there's just no fallback UI during the\n// pending window. Boundary-handler stack, streaming hydration integration,\n// and fallback-swap logic are all stripped.\nregisterTypeMatcher((type) => (type === REACT_SUSPENSE_TYPE ? FiberTag.Fragment : null))\n"],
5
+ "mappings": ";AAAA,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AACpC,SAAS,2BAA2B;AASpC,oBAAoB,CAAC,SAAU,SAAS,sBAAsB,SAAS,WAAW,IAAK;",
6
+ "names": []
7
+ }