@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.
- package/dist/core/attributes.js +2 -1
- package/dist/core/attributes.js.map +2 -2
- package/dist/core/browser.d.ts +9 -0
- package/dist/core/browser.js +35 -0
- package/dist/core/browser.js.map +7 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +3 -3
- package/dist/core/internal.d.ts +31 -8
- package/dist/core/internal.js +3 -1
- package/dist/core/internal.js.map +2 -2
- package/dist/core/resource-hints.d.ts +7 -0
- package/dist/core/resource-hints.js +19 -0
- package/dist/core/resource-hints.js.map +7 -0
- package/dist/core/types.js +1 -1
- package/dist/dom/_all.d.ts +11 -16
- package/dist/dom/_all.js +9 -20
- package/dist/dom/_all.js.map +2 -2
- package/dist/dom/client.d.ts +4 -4
- package/dist/dom/client.js +4 -4
- package/dist/dom/commit.d.ts +23 -0
- package/dist/dom/commit.js +191 -0
- package/dist/dom/commit.js.map +7 -0
- package/dist/dom/dispatcher.d.ts +4 -22
- package/dist/dom/dispatcher.js +184 -126
- package/dist/dom/dispatcher.js.map +3 -3
- package/dist/dom/dom.d.ts +2 -0
- package/dist/dom/dom.js +72 -52
- package/dist/dom/dom.js.map +2 -2
- package/dist/dom/error-info.d.ts +2 -0
- package/dist/dom/error-info.js +16 -0
- package/dist/dom/error-info.js.map +7 -0
- package/dist/dom/event-replay.js +1 -1
- package/dist/dom/features/activity/full.d.ts +1 -0
- package/dist/dom/features/activity/full.js +162 -0
- package/dist/dom/features/activity/full.js.map +7 -0
- package/dist/dom/features/activity/index.d.ts +1 -0
- package/dist/dom/features/activity/index.js +3 -0
- package/dist/dom/features/activity/index.js.map +7 -0
- package/dist/dom/features/activity/stub.d.ts +1 -0
- package/dist/dom/features/activity/stub.js +12 -0
- package/dist/dom/features/activity/stub.js.map +7 -0
- package/dist/dom/features/class/full.js +87 -27
- package/dist/dom/features/class/full.js.map +2 -2
- package/dist/dom/features/class/index.d.ts +1 -1
- package/dist/dom/features/class/index.js +2 -2
- package/dist/dom/features/class/stub.js +3 -3
- package/dist/dom/features/context/full.d.ts +4 -1
- package/dist/dom/features/context/full.js +72 -15
- package/dist/dom/features/context/full.js.map +2 -2
- package/dist/dom/features/context/index.d.ts +1 -1
- package/dist/dom/features/context/index.js +2 -2
- package/dist/dom/features/context/stub.d.ts +4 -1
- package/dist/dom/features/context/stub.js +17 -8
- package/dist/dom/features/context/stub.js.map +2 -2
- package/dist/dom/features/forward-ref/full.js +12 -21
- package/dist/dom/features/forward-ref/full.js.map +2 -2
- package/dist/dom/features/forward-ref/index.d.ts +1 -1
- package/dist/dom/features/forward-ref/index.js +2 -2
- package/dist/dom/features/forward-ref/stub.js +4 -4
- package/dist/dom/features/fragment-refs/index.d.ts +1 -0
- package/dist/dom/features/fragment-refs/index.js +8 -0
- package/dist/dom/features/fragment-refs/index.js.map +7 -0
- package/dist/dom/features/fragment-refs/stub.d.ts +3 -0
- package/dist/dom/features/fragment-refs/stub.js +14 -0
- package/dist/dom/features/fragment-refs/stub.js.map +7 -0
- package/dist/dom/features/hydration/full.d.ts +11 -6
- package/dist/dom/features/hydration/full.js +76 -77
- package/dist/dom/features/hydration/full.js.map +2 -2
- package/dist/dom/features/hydration/index.d.ts +1 -1
- package/dist/dom/features/hydration/index.js +2 -2
- package/dist/dom/features/hydration/stub.d.ts +7 -2
- package/dist/dom/features/hydration/stub.js +1 -1
- package/dist/dom/features/hydration/stub.js.map +1 -1
- package/dist/dom/features/index.d.ts +8 -7
- package/dist/dom/features/index.js +9 -8
- package/dist/dom/features/index.js.map +2 -2
- package/dist/dom/features/lazy/full.js +4 -4
- package/dist/dom/features/lazy/index.d.ts +1 -1
- package/dist/dom/features/lazy/index.js +2 -2
- package/dist/dom/features/lazy/stub.js +4 -4
- package/dist/dom/features/memo/full.js +8 -6
- package/dist/dom/features/memo/full.js.map +2 -2
- package/dist/dom/features/memo/index.d.ts +1 -1
- package/dist/dom/features/memo/index.js +2 -2
- package/dist/dom/features/memo/stub.js +4 -4
- package/dist/dom/features/portal/full.js +4 -4
- package/dist/dom/features/portal/index.d.ts +1 -1
- package/dist/dom/features/portal/index.js +2 -2
- package/dist/dom/features/portal/stub.js +4 -4
- package/dist/dom/features/suspense/full.js +197 -52
- package/dist/dom/features/suspense/full.js.map +2 -2
- package/dist/dom/features/suspense/index.d.ts +1 -1
- package/dist/dom/features/suspense/index.js +2 -2
- package/dist/dom/features/suspense/stub.js +4 -4
- package/dist/dom/features/view-transition/full.d.ts +6 -0
- package/dist/dom/features/view-transition/full.js +280 -0
- package/dist/dom/features/view-transition/full.js.map +7 -0
- package/dist/dom/features/view-transition/index.d.ts +1 -0
- package/dist/dom/features/view-transition/index.js +3 -0
- package/dist/dom/features/view-transition/index.js.map +7 -0
- package/dist/dom/features/view-transition/resources.d.ts +11 -0
- package/dist/dom/features/view-transition/resources.js +108 -0
- package/dist/dom/features/view-transition/resources.js.map +7 -0
- package/dist/dom/features/view-transition/stub.d.ts +6 -0
- package/dist/dom/features/view-transition/stub.js +22 -0
- package/dist/dom/features/view-transition/stub.js.map +7 -0
- package/dist/dom/features/view-transition/visual.d.ts +14 -0
- package/dist/dom/features/view-transition/visual.js +356 -0
- package/dist/dom/features/view-transition/visual.js.map +7 -0
- package/dist/dom/fragment-instance.d.ts +40 -0
- package/dist/dom/fragment-instance.js +324 -0
- package/dist/dom/fragment-instance.js.map +7 -0
- package/dist/dom/index.d.ts +11 -11
- package/dist/dom/index.js +11 -18
- package/dist/dom/index.js.map +3 -3
- package/dist/dom/portal.d.ts +2 -2
- package/dist/dom/portal.js +2 -2
- package/dist/dom/portal.js.map +1 -1
- package/dist/dom/reconcile.d.ts +32 -3
- package/dist/dom/reconcile.js +689 -221
- package/dist/dom/reconcile.js.map +2 -2
- package/dist/dom/resource-hints.d.ts +6 -0
- package/dist/dom/resource-hints.js +115 -0
- package/dist/dom/resource-hints.js.map +7 -0
- package/dist/dom/resource-store.d.ts +13 -0
- package/dist/dom/resource-store.js +43 -0
- package/dist/dom/resource-store.js.map +7 -0
- package/dist/dom/resources.d.ts +1 -0
- package/dist/dom/resources.js +44 -0
- package/dist/dom/resources.js.map +7 -0
- package/dist/dom/retained-effects.d.ts +6 -0
- package/dist/dom/retained-effects.js +49 -0
- package/dist/dom/retained-effects.js.map +7 -0
- package/dist/dom/root-internal.d.ts +4 -4
- package/dist/dom/root-internal.js +2 -2
- package/dist/dom/root-internal.js.map +2 -2
- package/dist/dom/root.d.ts +5 -5
- package/dist/dom/root.js +11 -11
- package/dist/dom/root.js.map +2 -2
- package/dist/dom/test-utils.js +1 -1
- package/dist/react/activity.d.ts +7 -0
- package/dist/react/activity.js +8 -0
- package/dist/react/activity.js.map +7 -0
- package/dist/react/children.d.ts +1 -1
- package/dist/react/children.js +3 -3
- package/dist/react/children.js.map +1 -1
- package/dist/react/class.d.ts +1 -1
- package/dist/react/class.js +3 -3
- package/dist/react/class.js.map +1 -1
- package/dist/react/compiler-runtime.js +2 -2
- package/dist/react/context.d.ts +7 -2
- package/dist/react/context.js +3 -11
- package/dist/react/context.js.map +3 -3
- package/dist/react/element.d.ts +6 -3
- package/dist/react/element.js +7 -11
- package/dist/react/element.js.map +2 -2
- package/dist/react/hooks.d.ts +26 -7
- package/dist/react/hooks.js +13 -3
- package/dist/react/hooks.js.map +2 -2
- package/dist/react/index.d.ts +39 -24
- package/dist/react/index.js +39 -19
- package/dist/react/index.js.map +3 -3
- package/dist/react/jsx-runtime.d.ts +2 -2
- package/dist/react/jsx-runtime.js +3 -3
- package/dist/react/memo.d.ts +1 -1
- package/dist/react/memo.js +1 -1
- package/dist/react/portal.js +1 -1
- package/dist/react/shared-internals.d.ts +15 -5
- package/dist/react/shared-internals.js +2 -3
- package/dist/react/shared-internals.js.map +2 -2
- package/dist/react/suspense.js +1 -1
- package/dist/react/view-transition.d.ts +32 -0
- package/dist/react/view-transition.js +13 -0
- package/dist/react/view-transition.js.map +7 -0
- package/dist/scheduler/index.js +1 -1
- package/dist/server/bootstrap-script.d.ts +1 -23
- package/dist/server/bootstrap-script.js +7 -6
- package/dist/server/bootstrap-script.js.map +2 -2
- package/dist/server/dispatcher.d.ts +28 -6
- package/dist/server/dispatcher.js +33 -15
- package/dist/server/dispatcher.js.map +2 -2
- package/dist/server/escape.js +16 -15
- package/dist/server/escape.js.map +2 -2
- package/dist/server/index.d.ts +6 -6
- package/dist/server/index.js +7 -7
- package/dist/server/renderToString.d.ts +1 -1
- package/dist/server/renderToString.js +12 -8
- package/dist/server/renderToString.js.map +2 -2
- package/dist/server/resource-hints.d.ts +22 -0
- package/dist/server/resource-hints.js +148 -0
- package/dist/server/resource-hints.js.map +7 -0
- package/dist/server/stream.d.ts +15 -2
- package/dist/server/stream.js +155 -63
- package/dist/server/stream.js.map +2 -2
- package/dist/server/walk.d.ts +15 -2
- package/dist/server/walk.js +150 -110
- package/dist/server/walk.js.map +2 -2
- package/dist/vite/index.d.ts +6 -0
- package/dist/vite/index.js +22 -6
- package/dist/vite/index.js.map +2 -2
- package/package.json +1 -1
- package/src/core/attributes.ts +1 -0
- package/src/core/browser.ts +33 -0
- package/src/core/internal.ts +24 -6
- package/src/core/resource-hints.ts +36 -0
- package/src/dom/_all.ts +1 -7
- package/src/dom/commit.ts +186 -0
- package/src/dom/dispatcher.ts +190 -134
- package/src/dom/dom.ts +70 -54
- package/src/dom/error-info.ts +15 -0
- package/src/dom/features/activity/full.ts +166 -0
- package/src/dom/features/activity/index.ts +1 -0
- package/src/dom/features/activity/stub.ts +14 -0
- package/src/dom/features/class/full.ts +72 -28
- package/src/dom/features/context/full.ts +70 -13
- package/src/dom/features/context/stub.ts +10 -5
- package/src/dom/features/forward-ref/full.ts +9 -19
- package/src/dom/features/fragment-refs/index.ts +1 -0
- package/src/dom/features/fragment-refs/stub.ts +3 -0
- package/src/dom/features/hydration/full.ts +84 -85
- package/src/dom/features/hydration/stub.ts +1 -1
- package/src/dom/features/index.ts +1 -0
- package/src/dom/features/memo/full.ts +4 -3
- package/src/dom/features/suspense/full.ts +192 -55
- package/src/dom/features/view-transition/full.ts +288 -0
- package/src/dom/features/view-transition/index.ts +1 -0
- package/src/dom/features/view-transition/resources.ts +107 -0
- package/src/dom/features/view-transition/stub.ts +7 -0
- package/src/dom/features/view-transition/visual.ts +406 -0
- package/src/dom/fragment-instance.ts +337 -0
- package/src/dom/index.ts +6 -7
- package/src/dom/portal.ts +1 -1
- package/src/dom/reconcile.ts +695 -242
- package/src/dom/resource-hints.ts +115 -0
- package/src/dom/resource-store.ts +52 -0
- package/src/dom/resources.ts +39 -0
- package/src/dom/retained-effects.ts +38 -0
- package/src/dom/root-internal.ts +4 -4
- package/src/dom/root.ts +12 -14
- package/src/react/activity.ts +10 -0
- package/src/react/context.ts +4 -11
- package/src/react/element.ts +11 -12
- package/src/react/hooks.ts +12 -3
- package/src/react/index.ts +18 -0
- package/src/react/shared-internals.ts +3 -3
- package/src/react/view-transition.ts +41 -0
- package/src/server/bootstrap-script.ts +36 -5
- package/src/server/dispatcher.ts +35 -13
- package/src/server/escape.ts +15 -12
- package/src/server/renderToString.ts +7 -5
- package/src/server/resource-hints.ts +165 -0
- package/src/server/stream.ts +154 -62
- package/src/server/walk.ts +79 -26
- package/src/vite/index.ts +30 -13
package/dist/dom/reconcile.js
CHANGED
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
//
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
import {
|
|
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
|
-
|
|
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 (
|
|
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
|
|
82
|
-
root
|
|
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
|
-
|
|
106
|
+
commitSynchronously(render);
|
|
87
107
|
} catch (error) {
|
|
88
|
-
if (!
|
|
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
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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 ||
|
|
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
|
-
|
|
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
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
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 = "" +
|
|
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
|
-
|
|
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
|
|
578
|
-
|
|
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
|
|
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
|
-
|
|
595
|
-
|
|
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
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
unmountFiber(
|
|
690
|
-
|
|
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
|
-
|
|
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
|
-
|
|
988
|
+
handleCommitError(fiber, e);
|
|
699
989
|
}
|
|
700
990
|
}
|
|
701
|
-
fiber.cu = null;
|
|
702
991
|
}
|
|
703
|
-
if (fiber.
|
|
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
|
-
|
|
710
|
-
|
|
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
|
|
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 (
|
|
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
|
|
760
|
-
while (
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
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)
|
|
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 (
|
|
795
|
-
|
|
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
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
|
816
|
-
var
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
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
|
-
|
|
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
|
-
|
|
826
|
-
|
|
827
|
-
});
|
|
1237
|
+
if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
|
|
1238
|
+
stageCommit(fiber, fn);
|
|
828
1239
|
}
|
|
829
1240
|
function runEffects(root) {
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
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
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
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
|
-
|
|
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
|