@tanstack/redact 0.0.21 → 0.1.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 (254) hide show
  1. package/dist/core/attributes.js +2 -1
  2. package/dist/core/attributes.js.map +2 -2
  3. package/dist/core/browser.d.ts +9 -0
  4. package/dist/core/browser.js +35 -0
  5. package/dist/core/browser.js.map +7 -0
  6. package/dist/core/index.d.ts +2 -2
  7. package/dist/core/index.js +3 -3
  8. package/dist/core/internal.d.ts +31 -8
  9. package/dist/core/internal.js +3 -1
  10. package/dist/core/internal.js.map +2 -2
  11. package/dist/core/resource-hints.d.ts +7 -0
  12. package/dist/core/resource-hints.js +19 -0
  13. package/dist/core/resource-hints.js.map +7 -0
  14. package/dist/core/types.js +1 -1
  15. package/dist/dom/_all.d.ts +11 -16
  16. package/dist/dom/_all.js +9 -20
  17. package/dist/dom/_all.js.map +2 -2
  18. package/dist/dom/client.d.ts +4 -4
  19. package/dist/dom/client.js +4 -4
  20. package/dist/dom/commit.d.ts +23 -0
  21. package/dist/dom/commit.js +191 -0
  22. package/dist/dom/commit.js.map +7 -0
  23. package/dist/dom/dispatcher.d.ts +4 -22
  24. package/dist/dom/dispatcher.js +184 -126
  25. package/dist/dom/dispatcher.js.map +3 -3
  26. package/dist/dom/dom.d.ts +2 -0
  27. package/dist/dom/dom.js +72 -52
  28. package/dist/dom/dom.js.map +2 -2
  29. package/dist/dom/error-info.d.ts +2 -0
  30. package/dist/dom/error-info.js +16 -0
  31. package/dist/dom/error-info.js.map +7 -0
  32. package/dist/dom/event-replay.js +1 -1
  33. package/dist/dom/features/activity/full.d.ts +1 -0
  34. package/dist/dom/features/activity/full.js +162 -0
  35. package/dist/dom/features/activity/full.js.map +7 -0
  36. package/dist/dom/features/activity/index.d.ts +1 -0
  37. package/dist/dom/features/activity/index.js +3 -0
  38. package/dist/dom/features/activity/index.js.map +7 -0
  39. package/dist/dom/features/activity/stub.d.ts +1 -0
  40. package/dist/dom/features/activity/stub.js +12 -0
  41. package/dist/dom/features/activity/stub.js.map +7 -0
  42. package/dist/dom/features/class/full.js +87 -27
  43. package/dist/dom/features/class/full.js.map +2 -2
  44. package/dist/dom/features/class/index.d.ts +1 -1
  45. package/dist/dom/features/class/index.js +2 -2
  46. package/dist/dom/features/class/stub.js +3 -3
  47. package/dist/dom/features/context/full.d.ts +4 -1
  48. package/dist/dom/features/context/full.js +72 -15
  49. package/dist/dom/features/context/full.js.map +2 -2
  50. package/dist/dom/features/context/index.d.ts +1 -1
  51. package/dist/dom/features/context/index.js +2 -2
  52. package/dist/dom/features/context/stub.d.ts +4 -1
  53. package/dist/dom/features/context/stub.js +17 -8
  54. package/dist/dom/features/context/stub.js.map +2 -2
  55. package/dist/dom/features/forward-ref/full.js +12 -21
  56. package/dist/dom/features/forward-ref/full.js.map +2 -2
  57. package/dist/dom/features/forward-ref/index.d.ts +1 -1
  58. package/dist/dom/features/forward-ref/index.js +2 -2
  59. package/dist/dom/features/forward-ref/stub.js +4 -4
  60. package/dist/dom/features/fragment-refs/index.d.ts +1 -0
  61. package/dist/dom/features/fragment-refs/index.js +8 -0
  62. package/dist/dom/features/fragment-refs/index.js.map +7 -0
  63. package/dist/dom/features/fragment-refs/stub.d.ts +3 -0
  64. package/dist/dom/features/fragment-refs/stub.js +14 -0
  65. package/dist/dom/features/fragment-refs/stub.js.map +7 -0
  66. package/dist/dom/features/hydration/full.d.ts +11 -6
  67. package/dist/dom/features/hydration/full.js +76 -77
  68. package/dist/dom/features/hydration/full.js.map +2 -2
  69. package/dist/dom/features/hydration/index.d.ts +1 -1
  70. package/dist/dom/features/hydration/index.js +2 -2
  71. package/dist/dom/features/hydration/stub.d.ts +7 -2
  72. package/dist/dom/features/hydration/stub.js +1 -1
  73. package/dist/dom/features/hydration/stub.js.map +1 -1
  74. package/dist/dom/features/index.d.ts +8 -7
  75. package/dist/dom/features/index.js +9 -8
  76. package/dist/dom/features/index.js.map +2 -2
  77. package/dist/dom/features/lazy/full.js +4 -4
  78. package/dist/dom/features/lazy/index.d.ts +1 -1
  79. package/dist/dom/features/lazy/index.js +2 -2
  80. package/dist/dom/features/lazy/stub.js +4 -4
  81. package/dist/dom/features/memo/full.js +8 -6
  82. package/dist/dom/features/memo/full.js.map +2 -2
  83. package/dist/dom/features/memo/index.d.ts +1 -1
  84. package/dist/dom/features/memo/index.js +2 -2
  85. package/dist/dom/features/memo/stub.js +4 -4
  86. package/dist/dom/features/portal/full.js +4 -4
  87. package/dist/dom/features/portal/index.d.ts +1 -1
  88. package/dist/dom/features/portal/index.js +2 -2
  89. package/dist/dom/features/portal/stub.js +4 -4
  90. package/dist/dom/features/suspense/full.js +197 -52
  91. package/dist/dom/features/suspense/full.js.map +2 -2
  92. package/dist/dom/features/suspense/index.d.ts +1 -1
  93. package/dist/dom/features/suspense/index.js +2 -2
  94. package/dist/dom/features/suspense/stub.js +4 -4
  95. package/dist/dom/features/view-transition/full.d.ts +6 -0
  96. package/dist/dom/features/view-transition/full.js +280 -0
  97. package/dist/dom/features/view-transition/full.js.map +7 -0
  98. package/dist/dom/features/view-transition/index.d.ts +1 -0
  99. package/dist/dom/features/view-transition/index.js +3 -0
  100. package/dist/dom/features/view-transition/index.js.map +7 -0
  101. package/dist/dom/features/view-transition/resources.d.ts +11 -0
  102. package/dist/dom/features/view-transition/resources.js +108 -0
  103. package/dist/dom/features/view-transition/resources.js.map +7 -0
  104. package/dist/dom/features/view-transition/stub.d.ts +6 -0
  105. package/dist/dom/features/view-transition/stub.js +22 -0
  106. package/dist/dom/features/view-transition/stub.js.map +7 -0
  107. package/dist/dom/features/view-transition/visual.d.ts +14 -0
  108. package/dist/dom/features/view-transition/visual.js +356 -0
  109. package/dist/dom/features/view-transition/visual.js.map +7 -0
  110. package/dist/dom/fragment-instance.d.ts +40 -0
  111. package/dist/dom/fragment-instance.js +324 -0
  112. package/dist/dom/fragment-instance.js.map +7 -0
  113. package/dist/dom/index.d.ts +11 -11
  114. package/dist/dom/index.js +11 -18
  115. package/dist/dom/index.js.map +3 -3
  116. package/dist/dom/portal.d.ts +2 -2
  117. package/dist/dom/portal.js +2 -2
  118. package/dist/dom/portal.js.map +1 -1
  119. package/dist/dom/reconcile.d.ts +32 -3
  120. package/dist/dom/reconcile.js +689 -221
  121. package/dist/dom/reconcile.js.map +2 -2
  122. package/dist/dom/resource-hints.d.ts +6 -0
  123. package/dist/dom/resource-hints.js +115 -0
  124. package/dist/dom/resource-hints.js.map +7 -0
  125. package/dist/dom/resource-store.d.ts +13 -0
  126. package/dist/dom/resource-store.js +43 -0
  127. package/dist/dom/resource-store.js.map +7 -0
  128. package/dist/dom/resources.d.ts +1 -0
  129. package/dist/dom/resources.js +44 -0
  130. package/dist/dom/resources.js.map +7 -0
  131. package/dist/dom/retained-effects.d.ts +6 -0
  132. package/dist/dom/retained-effects.js +49 -0
  133. package/dist/dom/retained-effects.js.map +7 -0
  134. package/dist/dom/root-internal.d.ts +4 -4
  135. package/dist/dom/root-internal.js +2 -2
  136. package/dist/dom/root-internal.js.map +2 -2
  137. package/dist/dom/root.d.ts +5 -5
  138. package/dist/dom/root.js +11 -11
  139. package/dist/dom/root.js.map +2 -2
  140. package/dist/dom/test-utils.js +1 -1
  141. package/dist/react/activity.d.ts +7 -0
  142. package/dist/react/activity.js +8 -0
  143. package/dist/react/activity.js.map +7 -0
  144. package/dist/react/children.d.ts +1 -1
  145. package/dist/react/children.js +3 -3
  146. package/dist/react/children.js.map +1 -1
  147. package/dist/react/class.d.ts +1 -1
  148. package/dist/react/class.js +3 -3
  149. package/dist/react/class.js.map +1 -1
  150. package/dist/react/compiler-runtime.js +2 -2
  151. package/dist/react/context.d.ts +7 -2
  152. package/dist/react/context.js +3 -11
  153. package/dist/react/context.js.map +3 -3
  154. package/dist/react/element.d.ts +6 -3
  155. package/dist/react/element.js +7 -11
  156. package/dist/react/element.js.map +2 -2
  157. package/dist/react/hooks.d.ts +26 -7
  158. package/dist/react/hooks.js +13 -3
  159. package/dist/react/hooks.js.map +2 -2
  160. package/dist/react/index.d.ts +39 -24
  161. package/dist/react/index.js +39 -19
  162. package/dist/react/index.js.map +3 -3
  163. package/dist/react/jsx-runtime.d.ts +2 -2
  164. package/dist/react/jsx-runtime.js +3 -3
  165. package/dist/react/memo.d.ts +1 -1
  166. package/dist/react/memo.js +1 -1
  167. package/dist/react/portal.js +1 -1
  168. package/dist/react/shared-internals.d.ts +15 -5
  169. package/dist/react/shared-internals.js +2 -3
  170. package/dist/react/shared-internals.js.map +2 -2
  171. package/dist/react/suspense.js +1 -1
  172. package/dist/react/view-transition.d.ts +32 -0
  173. package/dist/react/view-transition.js +13 -0
  174. package/dist/react/view-transition.js.map +7 -0
  175. package/dist/scheduler/index.js +1 -1
  176. package/dist/server/bootstrap-script.d.ts +1 -23
  177. package/dist/server/bootstrap-script.js +7 -6
  178. package/dist/server/bootstrap-script.js.map +2 -2
  179. package/dist/server/dispatcher.d.ts +28 -6
  180. package/dist/server/dispatcher.js +33 -15
  181. package/dist/server/dispatcher.js.map +2 -2
  182. package/dist/server/escape.js +16 -15
  183. package/dist/server/escape.js.map +2 -2
  184. package/dist/server/index.d.ts +6 -6
  185. package/dist/server/index.js +7 -7
  186. package/dist/server/renderToString.d.ts +1 -1
  187. package/dist/server/renderToString.js +12 -8
  188. package/dist/server/renderToString.js.map +2 -2
  189. package/dist/server/resource-hints.d.ts +22 -0
  190. package/dist/server/resource-hints.js +148 -0
  191. package/dist/server/resource-hints.js.map +7 -0
  192. package/dist/server/stream.d.ts +15 -2
  193. package/dist/server/stream.js +155 -63
  194. package/dist/server/stream.js.map +2 -2
  195. package/dist/server/walk.d.ts +15 -2
  196. package/dist/server/walk.js +150 -110
  197. package/dist/server/walk.js.map +2 -2
  198. package/dist/vite/index.d.ts +6 -0
  199. package/dist/vite/index.js +22 -6
  200. package/dist/vite/index.js.map +2 -2
  201. package/package.json +1 -1
  202. package/src/core/attributes.ts +1 -0
  203. package/src/core/browser.ts +33 -0
  204. package/src/core/internal.ts +24 -6
  205. package/src/core/resource-hints.ts +36 -0
  206. package/src/dom/_all.ts +1 -7
  207. package/src/dom/commit.ts +186 -0
  208. package/src/dom/dispatcher.ts +190 -134
  209. package/src/dom/dom.ts +70 -54
  210. package/src/dom/error-info.ts +15 -0
  211. package/src/dom/features/activity/full.ts +166 -0
  212. package/src/dom/features/activity/index.ts +1 -0
  213. package/src/dom/features/activity/stub.ts +14 -0
  214. package/src/dom/features/class/full.ts +72 -28
  215. package/src/dom/features/context/full.ts +70 -13
  216. package/src/dom/features/context/stub.ts +10 -5
  217. package/src/dom/features/forward-ref/full.ts +9 -19
  218. package/src/dom/features/fragment-refs/index.ts +1 -0
  219. package/src/dom/features/fragment-refs/stub.ts +3 -0
  220. package/src/dom/features/hydration/full.ts +84 -85
  221. package/src/dom/features/hydration/stub.ts +1 -1
  222. package/src/dom/features/index.ts +1 -0
  223. package/src/dom/features/memo/full.ts +4 -3
  224. package/src/dom/features/suspense/full.ts +192 -55
  225. package/src/dom/features/view-transition/full.ts +288 -0
  226. package/src/dom/features/view-transition/index.ts +1 -0
  227. package/src/dom/features/view-transition/resources.ts +107 -0
  228. package/src/dom/features/view-transition/stub.ts +7 -0
  229. package/src/dom/features/view-transition/visual.ts +406 -0
  230. package/src/dom/fragment-instance.ts +337 -0
  231. package/src/dom/index.ts +6 -7
  232. package/src/dom/portal.ts +1 -1
  233. package/src/dom/reconcile.ts +695 -242
  234. package/src/dom/resource-hints.ts +115 -0
  235. package/src/dom/resource-store.ts +52 -0
  236. package/src/dom/resources.ts +39 -0
  237. package/src/dom/retained-effects.ts +38 -0
  238. package/src/dom/root-internal.ts +4 -4
  239. package/src/dom/root.ts +12 -14
  240. package/src/react/activity.ts +10 -0
  241. package/src/react/context.ts +4 -11
  242. package/src/react/element.ts +11 -12
  243. package/src/react/hooks.ts +12 -3
  244. package/src/react/index.ts +18 -0
  245. package/src/react/shared-internals.ts +3 -3
  246. package/src/react/view-transition.ts +41 -0
  247. package/src/server/bootstrap-script.ts +36 -5
  248. package/src/server/dispatcher.ts +35 -13
  249. package/src/server/escape.ts +15 -12
  250. package/src/server/renderToString.ts +7 -5
  251. package/src/server/resource-hints.ts +165 -0
  252. package/src/server/stream.ts +154 -62
  253. package/src/server/walk.ts +79 -26
  254. package/src/vite/index.ts +30 -13
@@ -1,19 +1,27 @@
1
- // packages/redact/src/dom/reconcile.ts
1
+ // src/dom/reconcile.ts
2
2
  import {
3
3
  FiberTag,
4
4
  createFiber,
5
5
  REACT_ELEMENT_TYPE,
6
6
  REACT_LEGACY_ELEMENT_TYPE,
7
7
  REACT_FRAGMENT_TYPE
8
- } from "../core";
8
+ } from "../core/index.js";
9
9
  import {
10
10
  ReactSharedInternals,
11
11
  REACT_LAZY_TYPE,
12
12
  REACT_STRICT_MODE_TYPE,
13
- REACT_PROFILER_TYPE
14
- } from "../react";
15
- import { createHostNode, setProp } from "./dom";
16
- import { makeDispatcher } from "./dispatcher";
13
+ REACT_PROFILER_TYPE,
14
+ REACT_VIEW_TRANSITION_TYPE
15
+ } from "../react/index.js";
16
+ import { createHostNode, setProp, syncInputValue, syncTextareaValue } from "./dom.js";
17
+ import { HOOK_BAILOUT, renderWithHooks } from "./dispatcher.js";
18
+ import { rememberRetainedEffect, setLayoutDisconnected } from "./retained-effects.js";
19
+ import { componentStack } from "./error-info.js";
20
+ import { resourceKind } from "../core/resource-hints.js";
21
+ import { acquireResource } from "./resources.js";
22
+ import { currentCommit, commitSynchronously, queueMutation, queueText, queueCommitEffects, setCommitCheckpointHook, onCommitRollback, onCommitFailure, checkpointCommit, rewindCommit, rememberChildList } from "./commit.js";
23
+ import { markTransitionUpdate, deferTransition, cancelTransitions, deferTransitionLayout, deferTransitionPassive } from "./features/view-transition/index.js";
24
+ import { createFragmentInstance, updateFragmentHost, refreshFragmentInstances } from "./features/fragment-refs/index.js";
17
25
  import {
18
26
  adoptHostDom,
19
27
  adoptTextDom,
@@ -22,19 +30,28 @@ import {
22
30
  clearHydrationCursor,
23
31
  findHostParent as findHydrationHost,
24
32
  abortHydration,
25
- recoverHydration
26
- } from "./features/hydration";
33
+ recoverHydration,
34
+ isHydrationBailout
35
+ } from "./features/hydration/index.js";
27
36
  var currentRoot = null;
37
+ var preparedParent = null;
28
38
  var flushing = false;
29
39
  var isBatching = false;
30
40
  var pendingRoots = /* @__PURE__ */ new Set();
31
41
  var forceRerenderingFiber = null;
32
42
  function scheduleUpdate(fiber) {
33
- if (fiber.um) return;
43
+ if (fiber.um || fiber.pd) return;
44
+ fiber.dy = true;
45
+ if (ReactSharedInternals.F === fiber) return;
34
46
  const root = findRoot(fiber);
35
47
  if (!root) return;
48
+ while (fiber.su) {
49
+ fiber = fiber.su;
50
+ fiber.ms.u = true;
51
+ fiber.dy = true;
52
+ }
53
+ markTransitionUpdate(root);
36
54
  root.p.add(fiber);
37
- fiber.dy = true;
38
55
  pendingRoots.add(root);
39
56
  if (isBatching) return;
40
57
  if (!root.s) {
@@ -43,14 +60,19 @@ function scheduleUpdate(fiber) {
43
60
  }
44
61
  }
45
62
  function flushSyncWork(fn) {
63
+ cancelTransitions();
64
+ const transition = ReactSharedInternals.T;
65
+ ReactSharedInternals.T = null;
46
66
  const wasBatching = isBatching;
47
67
  isBatching = true;
48
68
  try {
49
69
  fn();
70
+ isBatching = wasBatching;
71
+ flushPending();
50
72
  } finally {
51
73
  isBatching = wasBatching;
74
+ ReactSharedInternals.T = transition;
52
75
  }
53
- flushPending();
54
76
  }
55
77
  function batchedUpdates(fn) {
56
78
  const wasBatching = isBatching;
@@ -69,7 +91,7 @@ function flushPending() {
69
91
  let guard = 0;
70
92
  while (pendingRoots.size > 0) {
71
93
  if (++guard > 50) {
72
- if (true) {
94
+ if (process.env.NODE_ENV !== "production") {
73
95
  throw new Error("flushPending exceeded 50 iterations \u2014 suspected infinite update loop.");
74
96
  }
75
97
  throw new Error();
@@ -78,47 +100,92 @@ function flushPending() {
78
100
  pendingRoots.clear();
79
101
  for (const root of roots) {
80
102
  root.s = false;
81
- const pending = [...root.p];
82
- root.p.clear();
83
- pending.sort((a, b) => fiberDepth(a) - fiberDepth(b));
84
- for (const fiber of pending) {
103
+ const render = () => flushRoot(root);
104
+ if (!deferTransition(root, render, flushPending)) {
85
105
  try {
86
- rerenderFiber(fiber, root);
106
+ commitSynchronously(render);
87
107
  } catch (error) {
88
- if (!recoverHydration(root, error)) throw error;
89
- break;
108
+ if (!recoverRootError(error)) throw error;
90
109
  }
91
110
  }
92
- runEffects(root);
93
111
  }
94
112
  }
95
113
  } finally {
96
114
  flushing = false;
97
115
  }
98
116
  }
117
+ function flushRoot(root) {
118
+ if (root.er) {
119
+ flushRootErrors(root);
120
+ return;
121
+ }
122
+ const render = root.u;
123
+ root.u = void 0;
124
+ if (render) render();
125
+ const pending = [...root.p];
126
+ root.p.clear();
127
+ pending.sort((a, b) => fiberDepth(a) - fiberDepth(b));
128
+ for (const fiber of pending) {
129
+ if (!fiber.dy || fiber.um || fiber.pd) continue;
130
+ const boundary = root.eb && findErrorBoundary(fiber);
131
+ const checkpoint = boundary || root.sp && findSuspenseBoundary(fiber) ? checkpointCommit(fiber) : -1;
132
+ try {
133
+ rerenderFiber(fiber, root);
134
+ } catch (error) {
135
+ if (error instanceof RenderSuspenseCapture) {
136
+ rewindCommit(checkpoint);
137
+ error.boundary.ms.u = true;
138
+ scheduleUpdate(error.boundary);
139
+ continue;
140
+ }
141
+ if (error instanceof RenderErrorCapture) {
142
+ if (error.boundary.tag === FiberTag.Root) throw error;
143
+ rewindCommit(checkpoint);
144
+ captureError(error);
145
+ continue;
146
+ }
147
+ if (!recoverHydration(root, error)) throw error;
148
+ break;
149
+ }
150
+ }
151
+ runEffects(root);
152
+ }
153
+ function scheduleRootRender(root, render) {
154
+ markTransitionUpdate(root);
155
+ root.u = render;
156
+ pendingRoots.add(root);
157
+ if (isBatching) return;
158
+ flushPending();
159
+ }
99
160
  function discardPendingWork(root) {
161
+ root.u = void 0;
100
162
  root.p.clear();
101
163
  root.s = false;
102
164
  pendingRoots.delete(root);
103
165
  }
104
- function fiberDepth(fiber) {
105
- let d = 0;
106
- let p = fiber.parent;
107
- while (p) {
108
- d++;
109
- p = p.parent;
166
+ function discardPendingEffects(root) {
167
+ for (const queue of [pendingEffects, pendingInsertionEffects, pendingCommits]) {
168
+ for (let index = queue.length - 1; index >= 0; index--) {
169
+ if (findRoot(queue[index][0]) === root) removePendingEffect(queue, index);
170
+ }
110
171
  }
111
- return d;
172
+ for (const fiber of stagedCommits.keys()) {
173
+ if (findRoot(fiber) === root) removeStagedCommits(fiber);
174
+ }
175
+ }
176
+ function fiberDepth(fiber) {
177
+ return fiber.depth ??= fiber.parent ? fiberDepth(fiber.parent) + 1 : 0;
112
178
  }
113
179
  function findRoot(fiber) {
114
180
  let f = fiber;
115
181
  while (f) {
116
- if (f.root) return f.root;
182
+ if (f.root) return fiber.root = f.root;
117
183
  f = f.parent;
118
184
  }
119
185
  return null;
120
186
  }
121
187
  function renderRoot(root, children) {
188
+ if (!currentCommit) return commitSynchronously(() => renderRoot(root, children));
122
189
  const rootFiber = root.r;
123
190
  rootFiber.pp = { children };
124
191
  currentRoot = root;
@@ -133,7 +200,7 @@ function renderRoot(root, children) {
133
200
  }
134
201
  function rerenderFiber(fiber, root) {
135
202
  if (!fiber.dy) return;
136
- if (fiber.um) return;
203
+ if (fiber.um || fiber.pd) return;
137
204
  fiber.dy = false;
138
205
  currentRoot = root;
139
206
  const resumeHydration = fiber.ms && fiber.ms.p === true;
@@ -145,7 +212,8 @@ function rerenderFiber(fiber, root) {
145
212
  const prevForcing = forceRerenderingFiber;
146
213
  forceRerenderingFiber = fiber;
147
214
  try {
148
- renderFiber(fiber, getHostParent(fiber), getAnchor(fiber));
215
+ const domParent = getHostParent(fiber);
216
+ renderFiber(fiber, domParent, getAnchor(fiber, domParent));
149
217
  } finally {
150
218
  forceRerenderingFiber = prevForcing;
151
219
  if (resumeHydration) {
@@ -178,10 +246,6 @@ function pushChildren(node, out) {
178
246
  for (let i = 0; i < node.length; i++) pushChildren(node[i], out);
179
247
  return;
180
248
  }
181
- if (isIterable(node)) {
182
- for (const item of node) pushChildren(item, out);
183
- return;
184
- }
185
249
  if (typeof node === "object") {
186
250
  const t = node.$$typeof;
187
251
  if (ACCEPTED_ELEMENT_MARKERS.has(t)) {
@@ -195,6 +259,9 @@ function pushChildren(node, out) {
195
259
  return;
196
260
  }
197
261
  }
262
+ if (isIterable(node)) {
263
+ for (const item of node) pushChildren(item, out);
264
+ }
198
265
  }
199
266
  function isIterable(obj) {
200
267
  return obj != null && typeof obj[Symbol.iterator] == "function";
@@ -220,7 +287,7 @@ function fiberFromChild(child, parent) {
220
287
  const marker = type && type.$$typeof;
221
288
  if (typeof type === "string") tag = FiberTag.Host;
222
289
  else if (type === REACT_FRAGMENT_TYPE) tag = FiberTag.Fragment;
223
- else if (type === REACT_STRICT_MODE_TYPE || type === REACT_PROFILER_TYPE) tag = FiberTag.Fragment;
290
+ else if (type === REACT_STRICT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_VIEW_TRANSITION_TYPE) tag = FiberTag.Fragment;
224
291
  else {
225
292
  let matched = null;
226
293
  for (const m of TYPE_MATCHERS) {
@@ -244,18 +311,18 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
244
311
  let ok = true;
245
312
  for (let i = 0; i < newChildren.length; i++) {
246
313
  const child = newChildren[i];
247
- if (child == null || !f || f.key != null) {
314
+ if (child == null || !f) {
248
315
  ok = false;
249
316
  break;
250
317
  }
251
318
  if (typeof child === "string") {
252
- if (f.tag !== FiberTag.Text) {
319
+ if (f.tag !== FiberTag.Text || f.key != null) {
253
320
  ok = false;
254
321
  break;
255
322
  }
256
323
  f.pp = child;
257
324
  } else {
258
- if (child.key != null) {
325
+ if (!sameKey(f.key, child.key)) {
259
326
  ok = false;
260
327
  break;
261
328
  }
@@ -269,21 +336,28 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
269
336
  f = f.sibling;
270
337
  }
271
338
  if (ok && f === null) {
272
- for (let r = parent.child; r; r = r.sibling) {
273
- let a = anchor;
274
- for (let s = r.sibling; s; s = s.sibling) {
275
- const d = firstDomNode(s);
276
- if (d && d.parentNode === domParent) {
277
- a = d;
278
- break;
279
- }
280
- }
281
- renderFiber(r, domParent, a);
282
- }
339
+ renderChildChain(parent, domParent, anchor, false);
283
340
  return;
284
341
  }
285
342
  }
343
+ if (!parent.child) {
344
+ rememberChildList(parent);
345
+ let previous = null;
346
+ for (const child of newChildren) {
347
+ if (child == null) continue;
348
+ const fiber = fiberFromChild(child, parent);
349
+ if (previous) previous.sibling = fiber;
350
+ else parent.child = fiber;
351
+ previous = fiber;
352
+ }
353
+ renderChildChain(parent, domParent, anchor, true);
354
+ if (previous && !currentRoot?.h && domParent.nodeName !== "HEAD") {
355
+ placeChildrenInOrder(parent, domParent, anchor);
356
+ }
357
+ return;
358
+ }
286
359
  const existing = collectChildren(parent);
360
+ rememberChildList(parent, existing);
287
361
  const keyed = /* @__PURE__ */ new Map();
288
362
  for (const f of existing) {
289
363
  if (f.key != null) keyed.set("k" + f.key, f);
@@ -312,7 +386,7 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
312
386
  if (!match) {
313
387
  while (existingIdx < existing.length) {
314
388
  const cand = existing[existingIdx];
315
- if (claimed.has(cand) || cand.key != null) {
389
+ if (cand.key != null) {
316
390
  existingIdx++;
317
391
  continue;
318
392
  }
@@ -352,32 +426,14 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
352
426
  prevNewFiber = fiber;
353
427
  }
354
428
  const hydrating = !!currentRoot?.h;
355
- for (let f = parent.child; f; f = f.sibling) {
356
- let a = anchor;
357
- if (!hydrating) {
358
- for (let s = f.sibling; s; s = s.sibling) {
359
- const d = firstDomNode(s);
360
- if (d && d.parentNode === domParent) {
361
- a = d;
362
- break;
363
- }
364
- }
365
- }
366
- renderFiber(f, domParent, a);
367
- }
429
+ if (prevNewFiber) renderChildChain(parent, domParent, anchor, hydrating || existing.length === 0);
368
430
  if (!prevNewFiber) parent.child = null;
369
431
  else prevNewFiber.sibling = null;
370
432
  const parentIsHeadHost = parent.tag === FiberTag.Host && typeof parent.type === "string" && parent.type.toLowerCase() === "head";
371
433
  if (!parentIsHeadHost) {
372
434
  for (const f of existing) {
373
435
  if (!claimed.has(f)) {
374
- unmountFiber(f);
375
- structurallyChanged = true;
376
- }
377
- }
378
- for (const f of keyed.values()) {
379
- if (!claimed.has(f)) {
380
- unmountFiber(f);
436
+ unmountFiber(f, domParent);
381
437
  structurallyChanged = true;
382
438
  }
383
439
  }
@@ -387,19 +443,43 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
387
443
  placeChildrenInOrder(parent, domParent, anchor);
388
444
  }
389
445
  }
446
+ function renderChildChain(parent, domParent, anchor, skipAnchors) {
447
+ for (let f = parent.child; f; f = f.sibling) {
448
+ let nextAnchor = anchor;
449
+ if (!skipAnchors) {
450
+ for (let sibling = f.sibling; sibling; sibling = sibling.sibling) {
451
+ const dom = firstDomNode(sibling, domParent);
452
+ if (dom) {
453
+ nextAnchor = dom;
454
+ break;
455
+ }
456
+ }
457
+ }
458
+ renderFiber(f, domParent, nextAnchor);
459
+ }
460
+ }
390
461
  function placeChildrenInOrder(parent, domParent, anchor) {
391
- const doms = [];
392
462
  let c = parent.child;
463
+ if ((!currentCommit || domParent === preparedParent) && c && !c.sibling && (c.tag === FiberTag.Host || c.tag === FiberTag.Text) && c.dom?.parentNode === domParent && c.dom.nextSibling === anchor) return;
464
+ const doms = [];
393
465
  while (c) {
394
466
  collectHostDoms(c, doms);
395
467
  c = c.sibling;
396
468
  }
469
+ if (currentCommit && domParent !== preparedParent) {
470
+ if (doms.length) queuePlacement(doms, domParent, anchor);
471
+ } else placeDomsInOrder(doms, domParent, anchor);
472
+ }
473
+ function queuePlacement(doms, parent, anchor) {
474
+ queueMutation(() => placeDomsInOrder(doms, parent, anchor));
475
+ }
476
+ function placeDomsInOrder(doms, domParent, anchor) {
397
477
  if (doms.length > 0) {
398
478
  let current = doms[0];
399
479
  let inOrder = current.parentNode === domParent;
400
480
  for (let i = 1; inOrder && i < doms.length; i++) {
401
481
  current = current.nextSibling;
402
- while (current && !doms.includes(current)) {
482
+ while (current && current !== doms[i] && !doms.includes(current)) {
403
483
  current = current.nextSibling;
404
484
  }
405
485
  if (current !== doms[i]) inOrder = false;
@@ -432,6 +512,7 @@ function collectHostDoms(fiber, out) {
432
512
  collectHostDoms(c, out);
433
513
  c = c.sibling;
434
514
  }
515
+ if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) collectHostDoms(fiber.ms.f, out);
435
516
  }
436
517
  function collectChildren(parent) {
437
518
  const out = [];
@@ -474,11 +555,25 @@ function getForceRerenderingFiber() {
474
555
  }
475
556
  registerRenderer(FiberTag.Text, renderText);
476
557
  registerRenderer(FiberTag.Host, renderHost);
558
+ registerRenderer(FiberTag.Resource, renderHost);
477
559
  registerRenderer(FiberTag.Function, renderFunction);
478
560
  registerRenderer(FiberTag.Fragment, renderFragment);
479
561
  function renderFiber(fiber, domParent, anchor) {
562
+ if (fiber.tag !== FiberTag.Memo) fiber.dy = false;
563
+ fiber.root ||= currentRoot || findRoot(fiber);
564
+ if (fiber.root?.sp && fiber.parent?.ld && fiber.mp === null) setLayoutDisconnected(fiber, true);
565
+ if (fiber.root?.a) CAPABILITIES.prepareActivityFiber(fiber);
480
566
  const fn = RENDERERS[fiber.tag];
481
- if (fn) fn(fiber, domParent, anchor);
567
+ try {
568
+ if (fn) fn(fiber, domParent, anchor);
569
+ } catch (error) {
570
+ removeStagedCommits(fiber);
571
+ if (currentRoot?.h || error instanceof RenderErrorCapture || error instanceof RenderSuspenseCapture || isHydrationBailout(error)) throw error;
572
+ if (isThenable(error)) handleSuspended(fiber, error);
573
+ else handleErrorInRender(fiber, error);
574
+ }
575
+ if (fiber.root?.a) CAPABILITIES.syncActivity(fiber);
576
+ if (lastStagedFiber === fiber) flushFiberCommits(fiber);
482
577
  }
483
578
  function renderText(fiber, domParent, anchor) {
484
579
  const text = fiber.pp;
@@ -489,25 +584,55 @@ function renderText(fiber, domParent, anchor) {
489
584
  fiber.dom = document.createTextNode(text);
490
585
  insertInto(domParent, fiber.dom, anchor);
491
586
  }
587
+ updateFragmentHost(fiber, true);
492
588
  } else {
493
- ;
494
- fiber.dom.data = text;
589
+ queueText(fiber.dom, text);
495
590
  }
496
591
  fiber.mp = text;
497
592
  }
498
593
  function renderHost(fiber, domParent, anchor) {
594
+ const hadDom = !!fiber.dom;
499
595
  const props = fiber.pp ?? {};
500
596
  const prev = fiber.mp ?? {};
501
597
  const type = fiber.type;
502
598
  const isSvg = type === "svg" || domParent.namespaceURI === "http://www.w3.org/2000/svg";
599
+ const isResource = fiber.tag === FiberTag.Resource;
600
+ const canAcquire = !isSvg && (isResource || !fiber.mp) && resourceKind(type, props);
601
+ if (isResource || canAcquire) {
602
+ fiber.tag = FiberTag.Resource;
603
+ if (canAcquire) {
604
+ let container = domParent.nodeType === 9 ? domParent : domParent.ownerDocument;
605
+ if (type !== "script") {
606
+ container = fiber.root?.c || domParent;
607
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
608
+ if (parent.tag === FiberTag.Portal) {
609
+ container = parent.pp.container;
610
+ break;
611
+ }
612
+ }
613
+ }
614
+ queueMutation(() => {
615
+ const resource = acquireResource(type, props, container);
616
+ fiber.sn ||= resource;
617
+ });
618
+ }
619
+ if (fiber.mp) syncRefIfChanged(fiber, fiber.sn);
620
+ else attachRef(fiber, null);
621
+ fiber.mp = props;
622
+ return;
623
+ }
503
624
  const isSelect = type === "select";
625
+ const isInput = !isSvg && type === "input";
626
+ const isTextarea = !isSvg && type === "textarea";
627
+ const deferValue = isSelect || isInput || isTextarea;
628
+ let hydrated = false;
504
629
  const deferredSelectValue = isSelect && (props.value !== void 0 || props.defaultValue !== void 0) ? props.value !== void 0 ? props.value : props.defaultValue : void 0;
505
630
  if (!fiber.dom) {
506
- const hydrated = currentRoot?.h ? adoptHostDom(fiber, fiber.parent) : false;
631
+ hydrated = currentRoot?.h ? adoptHostDom(fiber, fiber.parent) : false;
507
632
  if (!hydrated) {
508
633
  fiber.dom = createHostNode(type, isSvg);
509
634
  for (const k in props) {
510
- if (isSelect && (k === "value" || k === "defaultValue")) continue;
635
+ if (deferValue && (k === "value" || k === "defaultValue") || isInput && (k === "checked" || k === "defaultChecked" || k === "name")) continue;
511
636
  if (isEventProp(k)) continue;
512
637
  setProp(fiber.dom, k, props[k], void 0, isSvg);
513
638
  }
@@ -515,96 +640,115 @@ function renderHost(fiber, domParent, anchor) {
515
640
  if (!isEventProp(k)) continue;
516
641
  setProp(fiber.dom, k, props[k], void 0, isSvg);
517
642
  }
643
+ if (isInput) {
644
+ syncInputValue(fiber.dom, props);
645
+ setProp(fiber.dom, "name", props.name, void 0, false);
646
+ }
647
+ if (isTextarea) syncTextareaValue(fiber.dom, props, true);
518
648
  insertInto(domParent, fiber.dom, anchor);
519
649
  }
650
+ updateFragmentHost(fiber, true);
520
651
  attachRef(fiber, fiber.dom);
521
- } else if (prev !== props) {
522
- const el = fiber.dom;
523
- let deferredEvents = null;
524
- for (const k in props) {
525
- if (isSelect && (k === "value" || k === "defaultValue")) continue;
526
- if (isEventProp(k)) {
527
- if (prev[k] !== props[k]) {
528
- deferredEvents ||= [];
529
- deferredEvents.push(k);
530
- }
531
- continue;
532
- }
533
- if (prev[k] !== props[k]) setProp(el, k, props[k], prev[k], isSvg);
534
- }
535
- for (const k in prev) {
536
- if (!(k in props)) setProp(el, k, void 0, prev[k], isSvg);
537
- }
538
- if (deferredEvents) {
539
- for (let i = 0; i < deferredEvents.length; i++) {
540
- const k = deferredEvents[i];
541
- setProp(el, k, props[k], prev[k], isSvg);
542
- }
543
- }
544
- syncRefIfChanged(fiber, fiber.dom);
652
+ } else if (prev !== props && (isInput || isTextarea || hostNeedsUpdate(props, prev))) {
653
+ queueHostProps(fiber.dom, props, prev, isSvg, isInput, isTextarea, deferValue);
545
654
  }
546
- reconcileChildren(fiber, childrenToArray(props.children), fiber.dom, null);
655
+ if (hadDom) syncRefIfChanged(fiber, fiber.dom);
656
+ if (!hadDom && !hydrated) {
657
+ const previous = preparedParent;
658
+ preparedParent = fiber.dom;
659
+ try {
660
+ reconcileChildren(fiber, isTextarea ? [] : childrenToArray(props.children), fiber.dom, null);
661
+ } finally {
662
+ preparedParent = previous;
663
+ }
664
+ } else reconcileChildren(fiber, isTextarea ? [] : childrenToArray(props.children), fiber.dom, null);
547
665
  if (currentRoot?.h) {
548
666
  const parentTag = fiber.type.toLowerCase();
549
- const hasOpaqueHydrationChildren = props.dangerouslySetInnerHTML != null || parentTag === "textarea" && (props.value != null || props.defaultValue != null);
667
+ const hasOpaqueHydrationChildren = props.dangerouslySetInnerHTML != null || isTextarea;
550
668
  if (parentTag !== "head" && parentTag !== "html" && parentTag !== "body" && !hasOpaqueHydrationChildren) {
551
669
  const cursor = getHydrationCursor(fiber);
552
670
  if (cursor) {
553
671
  if (cursor.has()) {
554
672
  const error = new Error(
555
- true ? `Hydration mismatch: server rendered extra nodes inside <${parentTag}>.` : "Hydration mismatch."
673
+ process.env.NODE_ENV !== "production" ? `Hydration mismatch: server rendered extra nodes inside <${parentTag}>.` : "Hydration mismatch."
556
674
  );
557
- if (currentRoot.re) currentRoot.re(error);
675
+ if (currentRoot.re) currentRoot.re(error, { componentStack: null });
558
676
  abortHydration(error, fiber);
559
677
  }
560
678
  }
561
679
  }
562
680
  }
563
- if (isSelect && deferredSelectValue !== void 0) {
564
- const select = fiber.dom;
565
- if (Array.isArray(deferredSelectValue)) {
566
- const asStrings = deferredSelectValue.map((v) => "" + v);
567
- for (const opt of Array.from(select.options)) {
568
- opt.selected = asStrings.includes(opt.value);
681
+ if (isSelect && !hydrated && deferredSelectValue !== void 0) {
682
+ queueSelectValue(fiber.dom, deferredSelectValue);
683
+ }
684
+ fiber.mp = props;
685
+ }
686
+ function queueSelectValue(select, value) {
687
+ queueMutation(() => {
688
+ if (Array.isArray(value)) {
689
+ const selected = new Set(value.map((v) => "" + v));
690
+ const options = select.options;
691
+ for (let i = 0; i < options.length; i++) {
692
+ const opt = options[i];
693
+ opt.selected = selected.has(opt.value);
569
694
  }
570
695
  } else {
571
- select.value = "" + deferredSelectValue;
696
+ select.value = "" + value;
572
697
  }
698
+ });
699
+ }
700
+ function hostNeedsUpdate(props, previous) {
701
+ for (const key in props) {
702
+ if (props[key] !== previous[key] && key !== "children" && key !== "ref" && key !== "key") return true;
573
703
  }
574
- fiber.mp = props;
704
+ for (const key in previous) {
705
+ if (key !== "children" && key !== "ref" && key !== "key" && !(key in props)) return true;
706
+ }
707
+ return false;
708
+ }
709
+ function queueHostProps(el, props, prev, isSvg, isInput, isTextarea, deferValue) {
710
+ queueMutation(() => {
711
+ if (isInput) setProp(el, "name", "", void 0, false);
712
+ let events;
713
+ for (const key in props) {
714
+ const next = props[key], previous = prev[key];
715
+ if (next === previous || key === "children" || key === "ref" || key === "key" || deferValue && (key === "value" || key === "defaultValue") || isInput && (key === "checked" || key === "defaultChecked" || key === "name")) continue;
716
+ if (isEventProp(key)) {
717
+ (events ||= []).push(key);
718
+ } else setProp(el, key, next, previous, isSvg);
719
+ }
720
+ for (const key in prev) {
721
+ if (key === "children" || key === "ref" || key === "key" || (isInput || isTextarea) && (key === "value" || key === "defaultValue") || isInput && (key === "checked" || key === "defaultChecked" || key === "name")) continue;
722
+ if (!(key in props)) setProp(el, key, void 0, prev[key], isSvg);
723
+ }
724
+ if (events) for (const key of events) setProp(el, key, props[key], prev[key], isSvg);
725
+ if (isInput) {
726
+ syncInputValue(el, props, prev);
727
+ setProp(el, "name", props.name, prev.name, false);
728
+ } else if (isTextarea) syncTextareaValue(el, props);
729
+ });
575
730
  }
576
731
  function renderFunction(fiber, domParent, anchor) {
577
- const prevDispatcher = ReactSharedInternals.H;
578
- const prevFiber = ReactSharedInternals.F;
579
- const prevHook = ReactSharedInternals.K;
580
- const prevIndex = ReactSharedInternals.I;
581
- ReactSharedInternals.H = makeDispatcher();
582
- ReactSharedInternals.F = fiber;
583
- ReactSharedInternals.K = null;
584
- ReactSharedInternals.I = 0;
732
+ const canBail = fiber === forceRerenderingFiber && fiber.pp === fiber.mp;
733
+ fiber.cx?.clear();
585
734
  let rendered;
586
735
  let deferredForHydration = false;
587
736
  try {
588
- rendered = fiber.type(fiber.pp ?? {});
737
+ rendered = renderWithHooks(fiber, fiber.type, fiber.pp ?? {}, void 0, canBail);
589
738
  } catch (e) {
590
739
  if (isThenable(e)) {
591
740
  if (deferHydration(fiber, e)) {
592
741
  deferredForHydration = true;
593
742
  } else {
594
- CAPABILITIES.handleSuspended(fiber, e);
595
- rendered = null;
743
+ handleSuspended(fiber, e);
744
+ return;
596
745
  }
597
746
  } else {
598
747
  handleErrorInRender(fiber, e);
599
748
  return;
600
749
  }
601
- } finally {
602
- ReactSharedInternals.H = prevDispatcher;
603
- ReactSharedInternals.F = prevFiber;
604
- ReactSharedInternals.K = prevHook;
605
- ReactSharedInternals.I = prevIndex;
606
750
  }
607
- if (deferredForHydration) return;
751
+ if (deferredForHydration || rendered === HOOK_BAILOUT) return;
608
752
  reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
609
753
  fiber.mp = fiber.pp;
610
754
  }
@@ -633,6 +777,28 @@ function deferHydration(fiber, thenable) {
633
777
  function renderFragment(fiber, domParent, anchor) {
634
778
  const props = fiber.pp ?? {};
635
779
  reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
780
+ if (fiber.type === REACT_FRAGMENT_TYPE) {
781
+ if (fiber.ref && !fiber.sn) fiber.sn = createFragmentInstance(fiber);
782
+ const previous = fiber.ms?.ref;
783
+ if (previous !== fiber.ref) {
784
+ if (fiber.cu) {
785
+ const cleanups = fiber.cu;
786
+ queueMutation(() => {
787
+ for (const cleanup of cleanups) {
788
+ try {
789
+ cleanup();
790
+ } catch (error) {
791
+ handleCommitError(fiber, error);
792
+ }
793
+ }
794
+ });
795
+ fiber.cu = null;
796
+ }
797
+ detachRef(previous, fiber);
798
+ fiber.ms = { ...fiber.ms, ref: fiber.ref };
799
+ if (fiber.sn) attachRef(fiber, fiber.sn);
800
+ }
801
+ }
636
802
  fiber.mp = props;
637
803
  }
638
804
  function defaultHandleSuspended(fiber, thenable) {
@@ -643,83 +809,244 @@ function defaultHandleSuspended(fiber, thenable) {
643
809
  }
644
810
  var CAPABILITIES = {
645
811
  handleSuspended: defaultHandleSuspended,
646
- readContext: defaultReadContext
812
+ readContext: defaultReadContext,
813
+ isActivityHidden: () => false,
814
+ activityIsDisconnected: () => false,
815
+ prepareActivityFiber: () => {
816
+ },
817
+ syncActivity: () => {
818
+ }
647
819
  };
820
+ function isActivityHidden(fiber) {
821
+ return !!(fiber.root ?? currentRoot ?? findRoot(fiber))?.a && CAPABILITIES.isActivityHidden(fiber);
822
+ }
823
+ function activityIsDisconnected(fiber) {
824
+ return !!fiber.root?.a && CAPABILITIES.activityIsDisconnected(fiber);
825
+ }
826
+ function layoutIsDisconnected(fiber) {
827
+ return !!fiber.ld || activityIsDisconnected(fiber);
828
+ }
829
+ function rememberActivityEffect(fiber, hook, effect) {
830
+ if (fiber.root?.a || fiber.root?.sp && effect.t === 1 && !effect.s) rememberRetainedEffect(fiber, hook, effect);
831
+ }
648
832
  function installCapability(name, fn) {
649
833
  CAPABILITIES[name] = fn;
650
834
  }
651
835
  function handleSuspended(fiber, thenable) {
836
+ if (isActivityHidden(fiber) && !findSuspenseBoundary(fiber)) {
837
+ defaultHandleSuspended(fiber, thenable);
838
+ return;
839
+ }
652
840
  CAPABILITIES.handleSuspended(fiber, thenable);
653
841
  }
842
+ var RenderSuspenseCapture = class {
843
+ constructor(boundary) {
844
+ this.boundary = boundary;
845
+ }
846
+ boundary;
847
+ };
848
+ function findSuspenseBoundary(fiber) {
849
+ let child = fiber;
850
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
851
+ if (parent.tag === FiberTag.Suspense && parent.ms?.f !== child) return parent;
852
+ if (parent.tag === FiberTag.Activity && parent.pp?.mode === "hidden") return null;
853
+ child = parent;
854
+ }
855
+ return null;
856
+ }
857
+ var RenderErrorCapture = class {
858
+ constructor(boundary, error, source = boundary) {
859
+ this.boundary = boundary;
860
+ this.error = error;
861
+ this.stack = componentStack(source);
862
+ }
863
+ boundary;
864
+ error;
865
+ stack;
866
+ };
867
+ function captureError(capture) {
868
+ const fiber = capture.boundary;
869
+ fiber.ms = { ...fiber.ms, error: capture };
870
+ scheduleUpdate(fiber);
871
+ }
872
+ function findErrorBoundary(fiber) {
873
+ for (let parent = fiber.parent; parent; parent = parent.parent) {
874
+ if (parent.um || parent.pd) continue;
875
+ const instance = parent.sn;
876
+ if (instance?._fiber === parent && (parent.ms?.b?.getDerivedStateFromError || instance.componentDidCatch)) return parent;
877
+ }
878
+ return null;
879
+ }
880
+ function captureRootError(root, stack, error) {
881
+ const errors = root.er ||= [];
882
+ if (!errors.length) root.u = void 0;
883
+ errors.push({ error, stack });
884
+ scheduleUpdate(root.r);
885
+ }
886
+ function flushRootErrors(root) {
887
+ const errors = root.er;
888
+ root.er = void 0;
889
+ if (root.r.mp === null) queueMutation(() => {
890
+ root.c.textContent = "";
891
+ });
892
+ renderRoot(root, null);
893
+ queueCommitEffects(() => {
894
+ for (const captured of errors) {
895
+ try {
896
+ if (root.ue) root.ue(captured.error, { componentStack: captured.stack });
897
+ else if (typeof reportError === "function") reportError(captured.error);
898
+ else queueMicrotask(() => {
899
+ throw captured.error;
900
+ });
901
+ } catch (error) {
902
+ setTimeout(() => {
903
+ throw error;
904
+ });
905
+ }
906
+ }
907
+ });
908
+ if (root.u) pendingRoots.add(root);
909
+ }
910
+ function recoverRootError(error, abort) {
911
+ if (!(error instanceof RenderErrorCapture) || error.boundary.tag !== FiberTag.Root) return false;
912
+ const root = error.boundary.root;
913
+ abort?.();
914
+ discardPendingWork(root);
915
+ discardPendingEffects(root);
916
+ captureRootError(root, error.stack, error.error);
917
+ return true;
918
+ }
919
+ function handleCommitError(fiber, error) {
920
+ const boundary = findErrorBoundary(fiber);
921
+ if (boundary) {
922
+ captureError(new RenderErrorCapture(boundary, error, fiber));
923
+ return;
924
+ }
925
+ const root = findRoot(fiber);
926
+ if (root) captureRootError(root, componentStack(fiber), error);
927
+ else queueMicrotask(() => {
928
+ throw error;
929
+ });
930
+ }
654
931
  function handleErrorInRender(fiber, err) {
932
+ if (err instanceof RenderErrorCapture) throw err;
933
+ removeStagedCommits(fiber);
934
+ for (const queue of [pendingEffects, pendingInsertionEffects, pendingCommits]) {
935
+ for (let index = queue.length - 1; index >= 0; index--) {
936
+ if (queue[index][0] === fiber) removePendingEffect(queue, index);
937
+ }
938
+ }
655
939
  if (currentRoot?.h) {
656
940
  abortHydration(err, fiber);
657
941
  }
658
- let f = fiber.parent;
659
- while (f) {
660
- if (f.tag === FiberTag.Class) {
661
- const Ctor = f.type;
662
- const instance = f.sn;
663
- if (Ctor.getDerivedStateFromError) {
664
- const update = Ctor.getDerivedStateFromError(err);
665
- instance.state = { ...instance.state, ...update };
666
- }
667
- if (instance.componentDidCatch) {
668
- try {
669
- instance.componentDidCatch(err, { componentStack: "" });
670
- } catch {
671
- }
672
- }
673
- scheduleUpdate(f);
674
- return;
675
- }
676
- f = f.parent;
942
+ const boundary = findErrorBoundary(fiber);
943
+ if (boundary) {
944
+ const capture = new RenderErrorCapture(boundary, err, fiber);
945
+ if (currentCommit) throw capture;
946
+ captureError(capture);
947
+ return;
677
948
  }
678
- if (currentRoot?.ue) currentRoot.ue(err);
949
+ const root = currentRoot ?? findRoot(fiber);
950
+ if (root && currentCommit && (flushing || root.ue)) throw new RenderErrorCapture(root.r, err, fiber);
951
+ if (root?.ue) root.ue(err, { componentStack: componentStack(fiber) });
679
952
  else throw err;
680
953
  }
681
954
  function isThenable(x) {
682
955
  return x != null && typeof x.then == "function";
683
956
  }
684
- function unmountFiber(fiber, removeDom = true) {
957
+ function unmountFiber(fiber, domParent, remove = true) {
958
+ if (fiber.um) return;
959
+ if (currentCommit) return queueUnmount(fiber, domParent, remove);
960
+ removeStagedCommits(fiber);
961
+ if (fiber.type === REACT_FRAGMENT_TYPE && fiber.sn) {
962
+ if (fiber.cu) {
963
+ for (const cleanup of fiber.cu) {
964
+ try {
965
+ cleanup();
966
+ } catch (error) {
967
+ handleCommitError(fiber, error);
968
+ }
969
+ }
970
+ fiber.cu = null;
971
+ }
972
+ detachRef(fiber.cr ?? fiber.ref, fiber);
973
+ }
685
974
  fiber.um = true;
686
- let c = fiber.child;
687
- while (c) {
688
- const next = c.sibling;
689
- unmountFiber(c, removeDom || fiber.tag === FiberTag.Portal);
690
- c = next;
975
+ if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) updateFragmentHost(fiber, false);
976
+ if (fiber.type === REACT_FRAGMENT_TYPE && fiber.sn) fiber.sn.dispose();
977
+ if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) {
978
+ unmountFiber(fiber.ms.f, domParent, remove);
979
+ fiber.ms.f = null;
691
980
  }
692
- fiber.child = null;
693
981
  if (fiber.cu) {
694
- for (const cleanup of fiber.cu) {
982
+ const cleanups = fiber.cu;
983
+ fiber.cu = null;
984
+ for (const cleanup of cleanups) {
695
985
  try {
696
986
  cleanup();
697
987
  } catch (e) {
698
- if (currentRoot?.re) currentRoot.re(e);
988
+ handleCommitError(fiber, e);
699
989
  }
700
990
  }
701
- fiber.cu = null;
702
991
  }
703
- if (fiber.tag === FiberTag.Class && fiber.sn) {
992
+ if (fiber.sn?._fiber === fiber) {
993
+ const committed = fiber.ms?.c;
994
+ if (committed) {
995
+ fiber.sn.props = committed.props;
996
+ fiber.sn.state = committed.state;
997
+ }
998
+ if (fiber.sn.componentWillUnmount && !layoutIsDisconnected(fiber)) {
999
+ try {
1000
+ fiber.sn.componentWillUnmount();
1001
+ } catch (e) {
1002
+ handleCommitError(fiber, e);
1003
+ }
1004
+ }
704
1005
  fiber.sn._fiber = null;
705
1006
  fiber.sn._enqueueUpdate = null;
706
1007
  fiber.sn._forceUpdate = null;
707
1008
  }
708
- if (fiber.ref) detachRef(fiber.ref);
709
- if (removeDom) {
710
- fiber.dom?.parentNode?.removeChild(fiber.dom);
1009
+ if (fiber.cr ?? fiber.ref) detachRef(fiber.cr ?? fiber.ref, fiber);
1010
+ let c = fiber.child;
1011
+ while (c) {
1012
+ const next = c.sibling;
1013
+ unmountFiber(c, fiber.tag === FiberTag.Host ? fiber.dom : domParent, fiber.tag === FiberTag.Portal || remove && fiber.tag !== FiberTag.Host);
1014
+ c = next;
1015
+ }
1016
+ fiber.child = null;
1017
+ if (remove && (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) && fiber.dom?.parentNode) {
1018
+ fiber.dom.parentNode.removeChild(fiber.dom);
711
1019
  }
712
1020
  }
713
- function unmountAllChildren(parent) {
1021
+ function queueUnmount(fiber, domParent, remove) {
1022
+ if (fiber.pd) return;
1023
+ const deleted = [];
1024
+ markPendingDeletion(fiber, deleted);
1025
+ const restore = () => {
1026
+ for (const child of deleted) child.pd = false;
1027
+ };
1028
+ onCommitRollback(restore);
1029
+ onCommitFailure(restore);
1030
+ queueMutation(() => unmountFiber(fiber, domParent, remove));
1031
+ }
1032
+ function markPendingDeletion(fiber, deleted) {
1033
+ if (fiber.pd) return;
1034
+ fiber.pd = true;
1035
+ deleted.push(fiber);
1036
+ for (let child = fiber.child; child; child = child.sibling) markPendingDeletion(child, deleted);
1037
+ if (fiber.tag === FiberTag.Suspense && fiber.ms?.f) markPendingDeletion(fiber.ms.f, deleted);
1038
+ }
1039
+ function unmountAllChildren(parent, domParent) {
714
1040
  let c = parent.child;
715
1041
  while (c) {
716
1042
  const next = c.sibling;
717
- unmountFiber(c);
1043
+ unmountFiber(c, domParent);
718
1044
  c = next;
719
1045
  }
720
1046
  parent.child = null;
721
1047
  }
722
1048
  function insertInto(parent, node, anchor) {
1049
+ if (currentCommit && parent !== preparedParent) return queueInsertion(parent, node, anchor);
723
1050
  const projectedHeadParent = getDocumentHeadInsertionParent(parent, node);
724
1051
  if (projectedHeadParent) {
725
1052
  projectedHeadParent.appendChild(node);
@@ -731,6 +1058,9 @@ function insertInto(parent, node, anchor) {
731
1058
  parent.appendChild(node);
732
1059
  }
733
1060
  }
1061
+ function queueInsertion(parent, node, anchor) {
1062
+ queueMutation(() => insertInto(parent, node, anchor));
1063
+ }
734
1064
  var DOCUMENT_HEAD_TAGS = /* @__PURE__ */ new Set(["base", "link", "meta", "script", "style", "title"]);
735
1065
  function getDocumentHeadInsertionParent(parent, node) {
736
1066
  if (parent.nodeType !== 9 || node.nodeType !== 1) return null;
@@ -750,37 +1080,36 @@ function getHostParent(fiber) {
750
1080
  }
751
1081
  p = p.parent;
752
1082
  }
753
- if (true) {
1083
+ if (process.env.NODE_ENV !== "production") {
754
1084
  throw new Error("No host parent found.");
755
1085
  }
756
1086
  throw new Error();
757
1087
  }
758
- function getAnchor(fiber) {
759
- let f = fiber.sibling;
760
- while (f) {
761
- const d = firstDomNode(f);
762
- if (d) return d;
763
- f = f.sibling;
764
- }
765
- let p = fiber.parent;
766
- while (p && p.tag !== FiberTag.Host && p.tag !== FiberTag.Root && p.tag !== FiberTag.Portal) {
767
- if (p.sibling) {
768
- const d = firstDomNode(p.sibling);
1088
+ function getAnchor(fiber, domParent) {
1089
+ let p = fiber;
1090
+ while (p) {
1091
+ let sibling = p.sibling;
1092
+ while (sibling) {
1093
+ const d = firstDomNode(sibling, domParent);
769
1094
  if (d) return d;
1095
+ sibling = sibling.sibling;
770
1096
  }
771
1097
  p = p.parent;
1098
+ if (p?.tag === FiberTag.Host || p?.tag === FiberTag.Root || p?.tag === FiberTag.Portal) break;
772
1099
  }
773
1100
  return null;
774
1101
  }
775
- function firstDomNode(fiber) {
776
- if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) return fiber.dom;
1102
+ function firstDomNode(fiber, domParent) {
1103
+ if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Text) {
1104
+ return fiber.dom?.parentNode === domParent ? fiber.dom : null;
1105
+ }
777
1106
  let c = fiber.child;
778
1107
  while (c) {
779
- const d = firstDomNode(c);
1108
+ const d = firstDomNode(c, domParent);
780
1109
  if (d) return d;
781
1110
  c = c.sibling;
782
1111
  }
783
- return null;
1112
+ return fiber.tag === FiberTag.Suspense && fiber.ms?.f ? firstDomNode(fiber.ms.f, domParent) : null;
784
1113
  }
785
1114
  function readContext(fiber, ctx) {
786
1115
  return CAPABILITIES.readContext(fiber, ctx);
@@ -791,63 +1120,185 @@ function defaultReadContext(_fiber, ctx) {
791
1120
  function attachRef(fiber, value) {
792
1121
  const ref = fiber.ref ?? (fiber.pp?.ref ?? null);
793
1122
  if (!ref) return;
794
- if (typeof ref == "function") {
795
- scheduleLifecycle(fiber, () => {
1123
+ if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
1124
+ stageCommit(fiber, () => {
1125
+ if (fiber.tag === FiberTag.Resource) value = fiber.sn;
1126
+ fiber.cr = ref;
1127
+ if (typeof ref == "function") {
796
1128
  const cleanup = ref(value);
797
1129
  fiber.cu ||= [];
798
- fiber.cu.push(typeof cleanup == "function" ? cleanup : () => ref(null));
799
- });
800
- } else {
801
- ref.current = value;
802
- }
1130
+ const detach = typeof cleanup == "function" ? cleanup : () => ref(null);
1131
+ fiber.rc = detach;
1132
+ fiber.cu.push(detach);
1133
+ } else {
1134
+ ref.current = value;
1135
+ }
1136
+ }, true);
803
1137
  }
804
1138
  function syncRefIfChanged(fiber, value) {
805
1139
  const ref = fiber.ref ?? (fiber.pp?.ref ?? null);
806
- if (!ref) return;
807
- if (typeof ref === "object" && ref.current !== value) ref.current = value;
1140
+ if (!ref && !fiber.cr) return;
1141
+ if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
1142
+ const previous = fiber.cr ?? null;
1143
+ if (previous !== ref) {
1144
+ const cleanup = fiber.rc;
1145
+ queueMutation(() => {
1146
+ if (cleanup) {
1147
+ const index = fiber.cu?.indexOf(cleanup) ?? -1;
1148
+ if (index >= 0) fiber.cu.splice(index, 1);
1149
+ fiber.rc = null;
1150
+ try {
1151
+ cleanup();
1152
+ } catch (error) {
1153
+ handleCommitError(fiber, error);
1154
+ }
1155
+ }
1156
+ detachRef(previous, fiber);
1157
+ fiber.cr = null;
1158
+ });
1159
+ attachRef(fiber, value);
1160
+ } else if (ref && typeof ref === "object" && ref.current !== value) attachRef(fiber, value);
808
1161
  }
809
- function detachRef(ref) {
1162
+ function detachRef(ref, fiber) {
810
1163
  if (ref && typeof ref === "object") {
811
- ref.current = null;
1164
+ queueMutation(() => {
1165
+ try {
1166
+ ref.current = null;
1167
+ } catch (error) {
1168
+ if (fiber) handleCommitError(fiber, error);
1169
+ else throw error;
1170
+ }
1171
+ });
812
1172
  }
813
1173
  }
814
1174
  var pendingEffects = [];
815
- var pendingLayoutEffects = [];
816
- var pendingLifecycles = [];
817
- function enqueueEffect(fiber, effect) {
818
- if (effect.t) {
819
- pendingLayoutEffects.push([fiber, effect]);
1175
+ var pendingInsertionEffects = [];
1176
+ var pendingCommits = [];
1177
+ var stagedCommits = /* @__PURE__ */ new Map();
1178
+ var stagedFibers = [];
1179
+ var lastStagedFiber;
1180
+ function removePendingEffect(queue, index) {
1181
+ const entry = queue[index];
1182
+ queue.splice(index, 1);
1183
+ if (currentCommit?.c.length) onCommitRollback(() => {
1184
+ queue.splice(index, 0, entry);
1185
+ });
1186
+ }
1187
+ function stageCommit(fiber, work, ref = false) {
1188
+ let entries = stagedCommits.get(fiber);
1189
+ if (!entries) {
1190
+ stagedCommits.set(fiber, entries = []);
1191
+ stagedFibers.push(fiber);
1192
+ lastStagedFiber = fiber;
1193
+ }
1194
+ entries.push([fiber, work, ref]);
1195
+ }
1196
+ function removeStagedCommits(fiber) {
1197
+ if (!stagedCommits.delete(fiber)) return;
1198
+ if (lastStagedFiber === fiber) stagedFibers.pop();
1199
+ else stagedFibers.splice(stagedFibers.lastIndexOf(fiber), 1);
1200
+ lastStagedFiber = stagedFibers[stagedFibers.length - 1];
1201
+ }
1202
+ function flushFiberCommits(fiber) {
1203
+ const entries = stagedCommits.get(fiber);
1204
+ if (!entries) return;
1205
+ removeStagedCommits(fiber);
1206
+ if (fiber.type === REACT_FRAGMENT_TYPE) {
1207
+ let index = pendingCommits.length;
1208
+ outer: for (let i = 0; i < pendingCommits.length; i++) {
1209
+ for (let parent = pendingCommits[i][0].parent; parent; parent = parent.parent) {
1210
+ if (parent === fiber) {
1211
+ index = i;
1212
+ break outer;
1213
+ }
1214
+ }
1215
+ }
1216
+ if (index < pendingCommits.length && currentCommit?.c.length) {
1217
+ const count = entries.length;
1218
+ onCommitRollback(() => {
1219
+ pendingCommits.splice(index, count);
1220
+ });
1221
+ }
1222
+ pendingCommits.splice(index, 0, ...entries);
1223
+ } else if (fiber.tag === FiberTag.Class || fiber.sn?._fiber === fiber) {
1224
+ for (const entry of entries) if (!entry[2]) pendingCommits.push(entry);
1225
+ for (const entry of entries) if (entry[2]) pendingCommits.push(entry);
820
1226
  } else {
821
- pendingEffects.push([fiber, effect]);
1227
+ for (const entry of entries) pendingCommits.push(entry);
822
1228
  }
823
1229
  }
1230
+ function enqueueEffect(fiber, effect) {
1231
+ if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || effect.t === 1 && !effect.s && fiber.ld)) return;
1232
+ if (effect.t === 2) pendingInsertionEffects.push([fiber, effect]);
1233
+ else if (effect.t === 1) stageCommit(fiber, effect);
1234
+ else pendingEffects.push([fiber, effect]);
1235
+ }
824
1236
  function scheduleLifecycle(fiber, fn) {
825
- pendingLifecycles.push(() => {
826
- if (!fiber.um) fn();
827
- });
1237
+ if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
1238
+ stageCommit(fiber, fn);
828
1239
  }
829
1240
  function runEffects(root) {
830
- while (pendingLayoutEffects.length) {
831
- const [fiber, effect] = pendingLayoutEffects.shift();
832
- runEffect(fiber, effect, root);
833
- }
834
- while (pendingLifecycles.length) {
835
- const fn = pendingLifecycles.shift();
836
- try {
837
- fn();
838
- } catch (e) {
839
- if (root.ce) root.ce(e);
1241
+ if (root.fr) refreshFragmentInstances(root);
1242
+ if (!pendingInsertionEffects.length && !pendingCommits.length && !pendingEffects.length) return;
1243
+ flushEffects(root);
1244
+ }
1245
+ function flushEffects(root) {
1246
+ const insertion = pendingInsertionEffects.splice(0);
1247
+ const layout = pendingCommits.splice(0);
1248
+ const batch = pendingEffects.splice(0);
1249
+ if (currentCommit?.c.length) onCommitRollback(() => {
1250
+ pendingInsertionEffects.unshift(...insertion);
1251
+ pendingCommits.unshift(...layout);
1252
+ pendingEffects.unshift(...batch);
1253
+ });
1254
+ queueCommitEffects(() => {
1255
+ for (const [fiber, effect] of insertion) runEffect(fiber, effect, root);
1256
+ if (layout.length) {
1257
+ for (const [fiber, work] of layout) {
1258
+ if (typeof work !== "function" && !fiber.um && !isActivityHidden(fiber) && !layoutIsDisconnected(fiber)) work.d?.();
1259
+ }
1260
+ const runLayout = () => {
1261
+ for (const [fiber, work] of layout) {
1262
+ if (typeof work !== "function") runEffect(fiber, work, root);
1263
+ else if (!fiber.um && !isActivityHidden(fiber) && !layoutIsDisconnected(fiber)) {
1264
+ try {
1265
+ work();
1266
+ } catch (error) {
1267
+ handleCommitError(fiber, error);
1268
+ }
1269
+ }
1270
+ }
1271
+ };
1272
+ if (!deferTransitionLayout(runLayout)) runLayout();
840
1273
  }
841
- }
842
- if (pendingEffects.length) {
843
- const batch = pendingEffects.splice(0);
844
- queueMicrotask(() => {
845
- for (const [fiber, effect] of batch) runEffect(fiber, effect, root);
846
- });
847
- }
1274
+ if (batch.length) {
1275
+ const passive = () => {
1276
+ for (const [fiber, effect] of batch) runEffect(fiber, effect, root);
1277
+ };
1278
+ if (!deferTransitionPassive(passive)) queueMicrotask(passive);
1279
+ }
1280
+ });
848
1281
  }
1282
+ setCommitCheckpointHook(() => {
1283
+ const parent = preparedParent;
1284
+ const children = parent && Array.from(parent.childNodes);
1285
+ const effects = pendingEffects.length, insertion = pendingInsertionEffects.length, commits = pendingCommits.length;
1286
+ const staged = new Map([...stagedCommits].map(([fiber, work]) => [fiber, work.slice()]));
1287
+ const stack = stagedFibers.slice(), last = lastStagedFiber;
1288
+ onCommitRollback(() => {
1289
+ if (parent) parent.replaceChildren(...children);
1290
+ pendingEffects.length = effects;
1291
+ pendingInsertionEffects.length = insertion;
1292
+ pendingCommits.length = commits;
1293
+ stagedCommits.clear();
1294
+ for (const [fiber, work] of staged) stagedCommits.set(fiber, work);
1295
+ stagedFibers.splice(0, stagedFibers.length, ...stack);
1296
+ lastStagedFiber = last;
1297
+ });
1298
+ });
849
1299
  function runEffect(fiber, effect, root) {
850
1300
  if (fiber.um) return;
1301
+ if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || effect.t === 1 && !effect.s && fiber.ld)) return;
851
1302
  try {
852
1303
  const cleanup = effect.c();
853
1304
  if (typeof cleanup == "function") {
@@ -855,36 +1306,53 @@ function runEffect(fiber, effect, root) {
855
1306
  fiber.cu.push(cleanup);
856
1307
  }
857
1308
  } catch (e) {
858
- if (root.ce) root.ce(e);
1309
+ handleCommitError(fiber, e);
859
1310
  }
860
1311
  }
861
1312
  function isEventProp(name) {
862
1313
  return name.length > 2 && name.charCodeAt(0) === 111 && name.charCodeAt(1) === 110 && name.charCodeAt(2) >= 65;
863
1314
  }
864
1315
  export {
1316
+ RenderErrorCapture,
1317
+ RenderSuspenseCapture,
1318
+ activityIsDisconnected,
1319
+ attachRef,
865
1320
  batchedUpdates,
866
1321
  childrenToArray,
867
1322
  deferHydration,
1323
+ detachRef,
1324
+ discardPendingEffects,
868
1325
  discardPendingWork,
869
1326
  enqueueEffect,
870
1327
  findRoot,
1328
+ findSuspenseBoundary,
1329
+ flushFiberCommits,
871
1330
  flushSyncWork,
1331
+ getAnchor,
872
1332
  getCurrentRoot,
873
1333
  getForceRerenderingFiber,
1334
+ getHostParent,
1335
+ handleCommitError,
874
1336
  handleErrorInRender,
875
1337
  handleSuspended,
876
1338
  installCapability,
1339
+ isActivityHidden,
877
1340
  isThenable,
1341
+ layoutIsDisconnected,
878
1342
  readContext,
879
1343
  reconcileChildren,
1344
+ recoverRootError,
880
1345
  registerElementMarker,
881
1346
  registerRenderer,
882
1347
  registerTypeMatcher,
1348
+ rememberActivityEffect,
883
1349
  renderFiber,
884
1350
  renderRoot,
885
1351
  runEffects,
886
1352
  scheduleLifecycle,
1353
+ scheduleRootRender,
887
1354
  scheduleUpdate,
1355
+ syncRefIfChanged,
888
1356
  unmountAllChildren,
889
1357
  unmountFiber,
890
1358
  withCurrentRoot