@tanstack/redact 0.0.20 → 0.1.0
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 -21
- 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 +69 -9
- 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 +15 -4
- 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 -76
- 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 +192 -47
- 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 +686 -222
- 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 +1 -1
- package/dist/react/context.js +3 -3
- package/dist/react/context.js.map +1 -1
- package/dist/react/element.d.ts +6 -3
- package/dist/react/element.js +2 -2
- 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 +143 -96
- 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 -21
- package/src/dom/features/context/full.ts +66 -4
- package/src/dom/features/context/stub.ts +6 -0
- 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 -82
- 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 +187 -50
- 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 +691 -244
- 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/element.ts +6 -2
- 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 +72 -11
- 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
|
-
|
|
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
|
+
}
|
|
171
|
+
}
|
|
172
|
+
for (const fiber of stagedCommits.keys()) {
|
|
173
|
+
if (findRoot(fiber) === root) removeStagedCommits(fiber);
|
|
110
174
|
}
|
|
111
|
-
|
|
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,19 +426,7 @@ 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";
|
|
@@ -375,31 +437,49 @@ function reconcileChildren(parent, newChildren, domParent, anchor) {
|
|
|
375
437
|
structurallyChanged = true;
|
|
376
438
|
}
|
|
377
439
|
}
|
|
378
|
-
for (const f of keyed.values()) {
|
|
379
|
-
if (!claimed.has(f)) {
|
|
380
|
-
unmountFiber(f, domParent);
|
|
381
|
-
structurallyChanged = true;
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
440
|
}
|
|
385
441
|
const parentIsHead = domParent.nodeName === "HEAD";
|
|
386
442
|
if (structurallyChanged && !currentRoot?.h && !parentIsHead) {
|
|
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,80 +809,233 @@ 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, domParent) {
|
|
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.
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
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
|
+
}
|
|
708
1004
|
}
|
|
709
1005
|
fiber.sn._fiber = null;
|
|
710
1006
|
fiber.sn._enqueueUpdate = null;
|
|
711
1007
|
fiber.sn._forceUpdate = null;
|
|
712
1008
|
}
|
|
713
|
-
if (fiber.ref) detachRef(fiber.ref);
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
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) {
|
|
717
1018
|
fiber.dom.parentNode.removeChild(fiber.dom);
|
|
718
1019
|
}
|
|
719
1020
|
}
|
|
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
|
+
}
|
|
720
1039
|
function unmountAllChildren(parent, domParent) {
|
|
721
1040
|
let c = parent.child;
|
|
722
1041
|
while (c) {
|
|
@@ -727,6 +1046,7 @@ function unmountAllChildren(parent, domParent) {
|
|
|
727
1046
|
parent.child = null;
|
|
728
1047
|
}
|
|
729
1048
|
function insertInto(parent, node, anchor) {
|
|
1049
|
+
if (currentCommit && parent !== preparedParent) return queueInsertion(parent, node, anchor);
|
|
730
1050
|
const projectedHeadParent = getDocumentHeadInsertionParent(parent, node);
|
|
731
1051
|
if (projectedHeadParent) {
|
|
732
1052
|
projectedHeadParent.appendChild(node);
|
|
@@ -738,6 +1058,9 @@ function insertInto(parent, node, anchor) {
|
|
|
738
1058
|
parent.appendChild(node);
|
|
739
1059
|
}
|
|
740
1060
|
}
|
|
1061
|
+
function queueInsertion(parent, node, anchor) {
|
|
1062
|
+
queueMutation(() => insertInto(parent, node, anchor));
|
|
1063
|
+
}
|
|
741
1064
|
var DOCUMENT_HEAD_TAGS = /* @__PURE__ */ new Set(["base", "link", "meta", "script", "style", "title"]);
|
|
742
1065
|
function getDocumentHeadInsertionParent(parent, node) {
|
|
743
1066
|
if (parent.nodeType !== 9 || node.nodeType !== 1) return null;
|
|
@@ -757,37 +1080,36 @@ function getHostParent(fiber) {
|
|
|
757
1080
|
}
|
|
758
1081
|
p = p.parent;
|
|
759
1082
|
}
|
|
760
|
-
if (
|
|
1083
|
+
if (process.env.NODE_ENV !== "production") {
|
|
761
1084
|
throw new Error("No host parent found.");
|
|
762
1085
|
}
|
|
763
1086
|
throw new Error();
|
|
764
1087
|
}
|
|
765
|
-
function getAnchor(fiber) {
|
|
766
|
-
let
|
|
767
|
-
while (
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
}
|
|
772
|
-
let p = fiber.parent;
|
|
773
|
-
while (p && p.tag !== FiberTag.Host && p.tag !== FiberTag.Root && p.tag !== FiberTag.Portal) {
|
|
774
|
-
if (p.sibling) {
|
|
775
|
-
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);
|
|
776
1094
|
if (d) return d;
|
|
1095
|
+
sibling = sibling.sibling;
|
|
777
1096
|
}
|
|
778
1097
|
p = p.parent;
|
|
1098
|
+
if (p?.tag === FiberTag.Host || p?.tag === FiberTag.Root || p?.tag === FiberTag.Portal) break;
|
|
779
1099
|
}
|
|
780
1100
|
return null;
|
|
781
1101
|
}
|
|
782
|
-
function firstDomNode(fiber) {
|
|
783
|
-
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
|
+
}
|
|
784
1106
|
let c = fiber.child;
|
|
785
1107
|
while (c) {
|
|
786
|
-
const d = firstDomNode(c);
|
|
1108
|
+
const d = firstDomNode(c, domParent);
|
|
787
1109
|
if (d) return d;
|
|
788
1110
|
c = c.sibling;
|
|
789
1111
|
}
|
|
790
|
-
return null;
|
|
1112
|
+
return fiber.tag === FiberTag.Suspense && fiber.ms?.f ? firstDomNode(fiber.ms.f, domParent) : null;
|
|
791
1113
|
}
|
|
792
1114
|
function readContext(fiber, ctx) {
|
|
793
1115
|
return CAPABILITIES.readContext(fiber, ctx);
|
|
@@ -798,60 +1120,185 @@ function defaultReadContext(_fiber, ctx) {
|
|
|
798
1120
|
function attachRef(fiber, value) {
|
|
799
1121
|
const ref = fiber.ref ?? (fiber.pp?.ref ?? null);
|
|
800
1122
|
if (!ref) return;
|
|
801
|
-
if (
|
|
802
|
-
|
|
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") {
|
|
803
1128
|
const cleanup = ref(value);
|
|
804
1129
|
fiber.cu ||= [];
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
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);
|
|
810
1137
|
}
|
|
811
1138
|
function syncRefIfChanged(fiber, value) {
|
|
812
1139
|
const ref = fiber.ref ?? (fiber.pp?.ref ?? null);
|
|
813
|
-
if (!ref) return;
|
|
814
|
-
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);
|
|
815
1161
|
}
|
|
816
|
-
function detachRef(ref) {
|
|
1162
|
+
function detachRef(ref, fiber) {
|
|
817
1163
|
if (ref && typeof ref === "object") {
|
|
818
|
-
|
|
1164
|
+
queueMutation(() => {
|
|
1165
|
+
try {
|
|
1166
|
+
ref.current = null;
|
|
1167
|
+
} catch (error) {
|
|
1168
|
+
if (fiber) handleCommitError(fiber, error);
|
|
1169
|
+
else throw error;
|
|
1170
|
+
}
|
|
1171
|
+
});
|
|
819
1172
|
}
|
|
820
1173
|
}
|
|
821
1174
|
var pendingEffects = [];
|
|
822
|
-
var
|
|
823
|
-
var
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
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);
|
|
827
1226
|
} else {
|
|
828
|
-
|
|
1227
|
+
for (const entry of entries) pendingCommits.push(entry);
|
|
829
1228
|
}
|
|
830
1229
|
}
|
|
831
|
-
function
|
|
832
|
-
|
|
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
|
+
}
|
|
1236
|
+
function scheduleLifecycle(fiber, fn) {
|
|
1237
|
+
if (isActivityHidden(fiber) || layoutIsDisconnected(fiber)) return;
|
|
1238
|
+
stageCommit(fiber, fn);
|
|
833
1239
|
}
|
|
834
1240
|
function runEffects(root) {
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
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();
|
|
845
1273
|
}
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
}
|
|
852
|
-
}
|
|
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
|
+
});
|
|
853
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
|
+
});
|
|
854
1299
|
function runEffect(fiber, effect, root) {
|
|
1300
|
+
if (fiber.um) return;
|
|
1301
|
+
if (effect.t !== 2 && (isActivityHidden(fiber) || activityIsDisconnected(fiber) || effect.t === 1 && !effect.s && fiber.ld)) return;
|
|
855
1302
|
try {
|
|
856
1303
|
const cleanup = effect.c();
|
|
857
1304
|
if (typeof cleanup == "function") {
|
|
@@ -859,36 +1306,53 @@ function runEffect(fiber, effect, root) {
|
|
|
859
1306
|
fiber.cu.push(cleanup);
|
|
860
1307
|
}
|
|
861
1308
|
} catch (e) {
|
|
862
|
-
|
|
1309
|
+
handleCommitError(fiber, e);
|
|
863
1310
|
}
|
|
864
1311
|
}
|
|
865
1312
|
function isEventProp(name) {
|
|
866
1313
|
return name.length > 2 && name.charCodeAt(0) === 111 && name.charCodeAt(1) === 110 && name.charCodeAt(2) >= 65;
|
|
867
1314
|
}
|
|
868
1315
|
export {
|
|
1316
|
+
RenderErrorCapture,
|
|
1317
|
+
RenderSuspenseCapture,
|
|
1318
|
+
activityIsDisconnected,
|
|
1319
|
+
attachRef,
|
|
869
1320
|
batchedUpdates,
|
|
870
1321
|
childrenToArray,
|
|
871
1322
|
deferHydration,
|
|
1323
|
+
detachRef,
|
|
1324
|
+
discardPendingEffects,
|
|
872
1325
|
discardPendingWork,
|
|
873
1326
|
enqueueEffect,
|
|
874
1327
|
findRoot,
|
|
1328
|
+
findSuspenseBoundary,
|
|
1329
|
+
flushFiberCommits,
|
|
875
1330
|
flushSyncWork,
|
|
1331
|
+
getAnchor,
|
|
876
1332
|
getCurrentRoot,
|
|
877
1333
|
getForceRerenderingFiber,
|
|
1334
|
+
getHostParent,
|
|
1335
|
+
handleCommitError,
|
|
878
1336
|
handleErrorInRender,
|
|
879
1337
|
handleSuspended,
|
|
880
1338
|
installCapability,
|
|
1339
|
+
isActivityHidden,
|
|
881
1340
|
isThenable,
|
|
1341
|
+
layoutIsDisconnected,
|
|
882
1342
|
readContext,
|
|
883
1343
|
reconcileChildren,
|
|
1344
|
+
recoverRootError,
|
|
884
1345
|
registerElementMarker,
|
|
885
1346
|
registerRenderer,
|
|
886
1347
|
registerTypeMatcher,
|
|
1348
|
+
rememberActivityEffect,
|
|
887
1349
|
renderFiber,
|
|
888
1350
|
renderRoot,
|
|
889
1351
|
runEffects,
|
|
890
1352
|
scheduleLifecycle,
|
|
1353
|
+
scheduleRootRender,
|
|
891
1354
|
scheduleUpdate,
|
|
1355
|
+
syncRefIfChanged,
|
|
892
1356
|
unmountAllChildren,
|
|
893
1357
|
unmountFiber,
|
|
894
1358
|
withCurrentRoot
|