@tanstack/redact 0.0.21 → 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 -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 +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 -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 +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 -28
- 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 -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/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/dom.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
import { attributeName, STRING_BOOLEAN_ATTRS } from "../core/attributes";
|
|
1
|
+
// src/dom/dom.ts
|
|
2
|
+
import { attributeName, STRING_BOOLEAN_ATTRS } from "../core/attributes.js";
|
|
3
3
|
var SVG_NS = "http://www.w3.org/2000/svg";
|
|
4
4
|
var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
|
|
5
5
|
"allowfullscreen",
|
|
@@ -8,6 +8,7 @@ var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
|
|
|
8
8
|
"autoplay",
|
|
9
9
|
"checked",
|
|
10
10
|
"controls",
|
|
11
|
+
"credentialless",
|
|
11
12
|
"default",
|
|
12
13
|
"defer",
|
|
13
14
|
"disabled",
|
|
@@ -46,8 +47,59 @@ function createHostNode(type, isSvg) {
|
|
|
46
47
|
function isSvgElement(el) {
|
|
47
48
|
return el.ownerSVGElement !== void 0 || el.tagName === "svg";
|
|
48
49
|
}
|
|
50
|
+
function syncInputValue(el, props, prev) {
|
|
51
|
+
if (!prev) {
|
|
52
|
+
el.checked = el.defaultChecked = !!(props.checked ?? props.defaultChecked);
|
|
53
|
+
} else if (props.checked != null) {
|
|
54
|
+
el.checked = !!props.checked;
|
|
55
|
+
} else if (props.defaultChecked != null) {
|
|
56
|
+
el.defaultChecked = !!props.defaultChecked;
|
|
57
|
+
}
|
|
58
|
+
const value = props.value;
|
|
59
|
+
const fallback = props.defaultValue;
|
|
60
|
+
if (!prev) {
|
|
61
|
+
if (value == null && (el.type === "submit" || el.type === "reset")) return;
|
|
62
|
+
if (value != null || fallback != null) {
|
|
63
|
+
const initial = "" + (value ?? fallback);
|
|
64
|
+
if (el.value !== initial) el.value = initial;
|
|
65
|
+
el.defaultValue = initial;
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (value != null) {
|
|
70
|
+
if (el.type === "number" ? value === 0 && el.value === "" || el.value != value : el.value !== "" + value) {
|
|
71
|
+
el.value = "" + value;
|
|
72
|
+
}
|
|
73
|
+
const nextDefault = el.type === "number" && el.value == value ? el.value : "" + value;
|
|
74
|
+
if (el.defaultValue !== nextDefault) el.defaultValue = nextDefault;
|
|
75
|
+
} else if (fallback != null) {
|
|
76
|
+
if (el.defaultValue !== "" + fallback) el.defaultValue = "" + fallback;
|
|
77
|
+
} else if (prev.defaultValue != null || el.type === "submit" || el.type === "reset") {
|
|
78
|
+
el.removeAttribute("value");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function syncTextareaValue(el, props, mounting = false) {
|
|
82
|
+
if (mounting) {
|
|
83
|
+
const children = props.children;
|
|
84
|
+
const initial = props.value ?? props.defaultValue ?? (Array.isArray(children) ? children[0] : children) ?? "";
|
|
85
|
+
el.defaultValue = initial;
|
|
86
|
+
if (initial !== "" && el.textContent === initial) el.value = initial;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const value = props.value;
|
|
90
|
+
if (value != null && el.value !== "" + value) el.value = "" + value;
|
|
91
|
+
const fallback = props.defaultValue ?? value ?? "";
|
|
92
|
+
if (el.defaultValue !== "" + fallback) el.defaultValue = "" + fallback;
|
|
93
|
+
}
|
|
49
94
|
function setProp(el, name, next, prev, isSvg) {
|
|
50
95
|
if (name === "children" || name === "key" || name === "ref") return;
|
|
96
|
+
if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {
|
|
97
|
+
if (name.startsWith("aria-") || name.startsWith("data-")) {
|
|
98
|
+
if (next == null) el.removeAttribute(name);
|
|
99
|
+
else el.setAttribute(name, "" + next);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
51
103
|
const attr = attributeName(name, isSvg);
|
|
52
104
|
if (name === "defaultValue" || name === "defaultChecked") {
|
|
53
105
|
if (prev === void 0 && next != null) {
|
|
@@ -59,19 +111,9 @@ function setProp(el, name, next, prev, isSvg) {
|
|
|
59
111
|
}
|
|
60
112
|
return;
|
|
61
113
|
}
|
|
62
|
-
if (name === "className") {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
else el.setAttribute("class", "" + next);
|
|
66
|
-
} else {
|
|
67
|
-
;
|
|
68
|
-
el.className = next == null ? "" : "" + next;
|
|
69
|
-
}
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (name === "class") {
|
|
73
|
-
if (next == null) el.removeAttribute("class");
|
|
74
|
-
else el.setAttribute("class", "" + next);
|
|
114
|
+
if (name === "className" && !isSvg) {
|
|
115
|
+
;
|
|
116
|
+
el.className = next == null ? "" : "" + next;
|
|
75
117
|
return;
|
|
76
118
|
}
|
|
77
119
|
if (name === "style") {
|
|
@@ -85,15 +127,10 @@ function setProp(el, name, next, prev, isSvg) {
|
|
|
85
127
|
return;
|
|
86
128
|
}
|
|
87
129
|
if (name[0] === "o" && name[1] === "n") {
|
|
88
|
-
setEventHandler(el, name, next
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (name === "htmlFor") {
|
|
92
|
-
if (next == null) el.removeAttribute("for");
|
|
93
|
-
else el.setAttribute("for", "" + next);
|
|
130
|
+
setEventHandler(el, name, next);
|
|
94
131
|
return;
|
|
95
132
|
}
|
|
96
|
-
if (STRING_BOOLEAN_ATTRS.has(attr)) {
|
|
133
|
+
if (name === "className" || name === "class" || name === "htmlFor" || STRING_BOOLEAN_ATTRS.has(attr)) {
|
|
97
134
|
if (next == null) el.removeAttribute(attr);
|
|
98
135
|
else el.setAttribute(attr, "" + next);
|
|
99
136
|
return;
|
|
@@ -106,27 +143,11 @@ function setProp(el, name, next, prev, isSvg) {
|
|
|
106
143
|
} catch {
|
|
107
144
|
}
|
|
108
145
|
}
|
|
109
|
-
if (BOOLEAN_ATTRS.has(
|
|
110
|
-
if (next) el.setAttribute(attr, "");
|
|
111
|
-
else el.removeAttribute(attr);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {
|
|
115
|
-
if (name.startsWith("aria-") || name.startsWith("data-")) {
|
|
116
|
-
if (next == null) {
|
|
117
|
-
el.removeAttribute(attr);
|
|
118
|
-
} else {
|
|
119
|
-
el.setAttribute(attr, "" + next);
|
|
120
|
-
}
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
146
|
+
if (BOOLEAN_ATTRS.has(attr)) next = !!next;
|
|
124
147
|
if (next == null || next === false) {
|
|
125
148
|
el.removeAttribute(attr);
|
|
126
|
-
} else if (next === true) {
|
|
127
|
-
el.setAttribute(attr, "");
|
|
128
149
|
} else {
|
|
129
|
-
el.setAttribute(attr, ""
|
|
150
|
+
el.setAttribute(attr, next === true ? "" : next);
|
|
130
151
|
}
|
|
131
152
|
}
|
|
132
153
|
function setStyle(el, next, prev) {
|
|
@@ -205,39 +226,36 @@ var UNITLESS_STYLE = /* @__PURE__ */ new Set([
|
|
|
205
226
|
"strokeOpacity",
|
|
206
227
|
"strokeWidth"
|
|
207
228
|
]);
|
|
208
|
-
function setEventHandler(el, name, next
|
|
229
|
+
function setEventHandler(el, name, next) {
|
|
209
230
|
if (next != null && typeof next != "function") next = null;
|
|
210
231
|
const capture = name.endsWith("Capture");
|
|
211
232
|
const reactEventName = name.slice(2, capture ? -7 : void 0);
|
|
212
233
|
const eventName = domEventFor(reactEventName, el);
|
|
213
234
|
const handlers = el.__handlers ||= /* @__PURE__ */ Object.create(null);
|
|
214
|
-
const
|
|
215
|
-
const existing = handlers[key];
|
|
235
|
+
const existing = handlers[name];
|
|
216
236
|
if (existing && !next) {
|
|
217
|
-
el.removeEventListener(existing.event, existing.listener,
|
|
218
|
-
handlers[
|
|
237
|
+
el.removeEventListener(existing.event, existing.listener, capture);
|
|
238
|
+
handlers[name] = null;
|
|
219
239
|
return;
|
|
220
240
|
}
|
|
221
241
|
if (!existing && next) {
|
|
222
242
|
const entry = {
|
|
223
243
|
current: next,
|
|
224
244
|
listener: null,
|
|
225
|
-
event: eventName
|
|
226
|
-
capture
|
|
245
|
+
event: eventName
|
|
227
246
|
};
|
|
228
247
|
entry.listener = (e) => {
|
|
229
248
|
if (e.nativeEvent === void 0) e.nativeEvent = e;
|
|
230
249
|
entry.current(e);
|
|
231
250
|
};
|
|
232
|
-
handlers[
|
|
251
|
+
handlers[name] = entry;
|
|
233
252
|
el.addEventListener(eventName, entry.listener, capture);
|
|
234
253
|
return;
|
|
235
254
|
}
|
|
236
255
|
if (existing) {
|
|
237
|
-
if (existing.event !== eventName
|
|
238
|
-
el.removeEventListener(existing.event, existing.listener,
|
|
256
|
+
if (existing.event !== eventName) {
|
|
257
|
+
el.removeEventListener(existing.event, existing.listener, capture);
|
|
239
258
|
existing.event = eventName;
|
|
240
|
-
existing.capture = capture;
|
|
241
259
|
el.addEventListener(eventName, existing.listener, capture);
|
|
242
260
|
}
|
|
243
261
|
existing.current = next;
|
|
@@ -261,6 +279,8 @@ function domEventFor(reactEventName, el) {
|
|
|
261
279
|
export {
|
|
262
280
|
createHostNode,
|
|
263
281
|
isSvgElement,
|
|
264
|
-
setProp
|
|
282
|
+
setProp,
|
|
283
|
+
syncInputValue,
|
|
284
|
+
syncTextareaValue
|
|
265
285
|
};
|
|
266
286
|
//# sourceMappingURL=dom.js.map
|
package/dist/dom/dom.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dom/dom.ts"],
|
|
4
|
-
"sourcesContent": ["import { attributeName, STRING_BOOLEAN_ATTRS } from '../core/attributes'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n])\n\nconst IDL_ATTRS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'multiple',\n 'muted',\n 'readonly',\n])\n\nexport function createHostNode(type: string, isSvg: boolean): Element {\n if (isSvg || type === 'svg') {\n return document.createElementNS(SVG_NS, type)\n }\n return document.createElement(type)\n}\n\nexport function isSvgElement(el: Element): boolean {\n return (el as any).ownerSVGElement !== undefined || el.tagName === 'svg'\n}\n\nexport function setProp(\n el: Element,\n name: string,\n next: any,\n prev: any,\n isSvg: boolean,\n): void {\n if (name === 'children' || name === 'key' || name === 'ref') return\n const attr = attributeName(name, isSvg)\n\n // defaultValue / defaultChecked are IDL-property-only \u2014 they seed the\n // initial value/checked of a form control on first mount and must NOT be\n // emitted as HTML attributes (which would leak as `defaultValue=\"...\"`).\n // Setting `el.defaultValue` on a fresh control also sets the initial\n // `el.value`, which is what consumers expect. Skip on hydrated DOM so we\n // don't clobber a live user-typed value.\n if (name === 'defaultValue' || name === 'defaultChecked') {\n if (prev === undefined && next != null) {\n try {\n ;(el as any)[name] = next\n } catch {}\n }\n return\n }\n\n if (name === 'className') {\n if (isSvg) {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n } else {\n ;(el as HTMLElement).className = next == null ? '' : '' + next\n }\n return\n }\n\n if (name === 'class') {\n if (next == null) el.removeAttribute('class')\n else el.setAttribute('class', '' + next)\n return\n }\n\n if (name === 'style') {\n setStyle(el as HTMLElement, next, prev)\n return\n }\n\n if (name === 'dangerouslySetInnerHTML') {\n const nextHtml = next?.__html ?? ''\n const prevHtml = prev?.__html ?? ''\n if (nextHtml !== prevHtml) (el as HTMLElement).innerHTML = nextHtml\n return\n }\n\n if (name[0] === 'o' && name[1] === 'n') {\n setEventHandler(el, name, next, prev)\n return\n }\n\n if (name === 'htmlFor') {\n if (next == null) el.removeAttribute('for')\n else el.setAttribute('for', '' + next)\n return\n }\n\n if (STRING_BOOLEAN_ATTRS.has(attr)) {\n if (next == null) el.removeAttribute(attr)\n else el.setAttribute(attr, '' + next)\n return\n }\n\n if (!isSvg && IDL_ATTRS.has(name) && name in el) {\n try {\n ;(el as any)[name] = next == null ? '' : next\n return\n } catch {}\n }\n\n if (BOOLEAN_ATTRS.has(name.toLowerCase())) {\n if (next) el.setAttribute(attr, '')\n else el.removeAttribute(attr)\n return\n }\n\n // aria-* and data-* attributes stringify booleans to `\"true\"`/`\"false\"`\n // rather than using the HTML boolean-attribute presence/absence semantics.\n // This matches React and the ARIA spec (aria-hidden=\"false\" is meaningful).\n if (name.length > 5 && (name.charCodeAt(0) === 97 /* a */ || name.charCodeAt(0) === 100 /* d */)) {\n if (name.startsWith('aria-') || name.startsWith('data-')) {\n if (next == null) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(attr)\n } else if (next === true) {\n el.setAttribute(attr, '')\n } else {\n el.setAttribute(attr, '' + next)\n }\n}\n\nfunction setStyle(el: HTMLElement, next: any, prev: any): void {\n const style = el.style\n if (typeof next === 'string') {\n style.cssText = next\n return\n }\n if (typeof prev === 'string') style.cssText = ''\n if (prev && typeof prev === 'object') {\n for (const k in prev) {\n if (!next || !(k in next)) setStyleProperty(style, k, '')\n }\n }\n if (next && typeof next === 'object') {\n for (const k in next) {\n if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k])\n }\n }\n}\n\nfunction setStyleProperty(style: CSSStyleDeclaration, key: string, value: any): void {\n if (key[0] === '-') {\n style.setProperty(key, value == null ? '' : '' + value)\n } else if (value == null || value === '') {\n ;(style as any)[key] = ''\n } else if (typeof value === 'number' && !UNITLESS_STYLE.has(key)) {\n ;(style as any)[key] = value + 'px'\n } else {\n ;(style as any)[key] = '' + value\n }\n}\n\nconst UNITLESS_STYLE = new Set([\n 'animationIterationCount',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridArea',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n])\n\nexport interface SyntheticEvent extends Event {\n nativeEvent: Event\n isDefaultPrevented(): boolean\n isPropagationStopped(): boolean\n persist(): void\n currentTarget: EventTarget & Element\n}\n\nfunction setEventHandler(el: Element, name: string, next: any, prev: any): void {\n // Only function handlers are accepted. Reject strings/objects/etc \u2014 the\n // legacy `onclick=\"...\"` HTML attribute (string handler) is a known XSS\n // vector if a parent spreads untrusted props onto a host element. React\n // also ignores non-function handlers.\n if (next != null && typeof next != 'function') next = null\n\n const capture = name.endsWith('Capture')\n const reactEventName = name.slice(2, capture ? -7 : undefined)\n const eventName = domEventFor(reactEventName, el)\n\n // Key by the React prop name (not DOM event name) so `onChange` and\n // `onInput` on the same text input \u2014 which both dispatch from the native\n // `input` event \u2014 can coexist without clobbering each other's handlers.\n const handlers = ((el as any).__handlers ||= Object.create(null))\n const key = name\n\n const existing = handlers[key]\n\n if (existing && !next) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n handlers[key] = null\n return\n }\n\n if (!existing && next) {\n const entry = {\n current: next as Function,\n listener: null as any,\n event: eventName,\n capture,\n }\n entry.listener = (e: Event) => {\n // React hands handlers a SyntheticEvent that carries `.nativeEvent`.\n // Many libraries check `event.nativeEvent.isComposing` (react-instantsearch)\n // or `event.nativeEvent.shiftKey` (UI kits) \u2014 without the alias they throw\n // on `undefined.foo`. Aliasing the native event to itself is the cheapest\n // way to satisfy the shape without building a full synthetic layer.\n if ((e as any).nativeEvent === undefined) (e as any).nativeEvent = e\n entry.current(e)\n }\n handlers[key] = entry\n el.addEventListener(eventName, entry.listener, capture)\n return\n }\n\n if (existing) {\n // Re-bind if the effective DOM event changed (e.g. <input> whose `type`\n // flipped from \"text\" to \"checkbox\" \u2014 onChange should now follow `change`\n // instead of `input`). This is rare but keeps semantics correct.\n if (existing.event !== eventName || existing.capture !== capture) {\n el.removeEventListener(existing.event, existing.listener, existing.capture)\n existing.event = eventName\n existing.capture = capture\n el.addEventListener(eventName, existing.listener, capture)\n }\n existing.current = next\n }\n}\n\nfunction domEventFor(reactEventName: string, el: Element): string {\n const lower = reactEventName.toLowerCase()\n // React's `onChange` on text-like <input> and <textarea> maps to the\n // native `input` event so handlers fire on every keystroke. On checkbox,\n // radio, file inputs, and <select>, React's `onChange` maps to the\n // native `change` event (which fires on click / option select).\n if (lower === 'change') {\n const tag = el.tagName\n if (tag === 'TEXTAREA') return 'input'\n if (tag === 'INPUT') {\n const type = ((el as HTMLInputElement).type || 'text').toLowerCase()\n if (type !== 'checkbox' && type !== 'radio' && type !== 'file') {\n return 'input'\n }\n }\n }\n if (lower === 'doubleclick') return 'dblclick'\n return lower\n}\n"],
|
|
5
|
-
"mappings": ";AAAA,SAAS,eAAe,4BAA4B;AAEpD,IAAM,SAAS;AAEf,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,YAAY,oBAAI,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,eAAe,MAAc,OAAyB;AACpE,MAAI,SAAS,SAAS,OAAO;AAC3B,WAAO,SAAS,gBAAgB,QAAQ,IAAI;AAAA,EAC9C;AACA,SAAO,SAAS,cAAc,IAAI;AACpC;AAEO,SAAS,aAAa,IAAsB;AACjD,SAAQ,GAAW,oBAAoB,UAAa,GAAG,YAAY;AACrE;AAEO,SAAS,
|
|
4
|
+
"sourcesContent": ["import { attributeName, STRING_BOOLEAN_ATTRS } from '../core/attributes'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\nconst BOOLEAN_ATTRS = new Set([\n 'allowfullscreen',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'credentialless',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'inert',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n])\n\nconst IDL_ATTRS = new Set([\n 'value',\n 'checked',\n 'selected',\n 'disabled',\n 'multiple',\n 'muted',\n 'readonly',\n])\n\nexport function createHostNode(type: string, isSvg: boolean): Element {\n if (isSvg || type === 'svg') {\n return document.createElementNS(SVG_NS, type)\n }\n return document.createElement(type)\n}\n\nexport function isSvgElement(el: Element): boolean {\n return (el as any).ownerSVGElement !== undefined || el.tagName === 'svg'\n}\n\nexport function syncInputValue(el: HTMLInputElement, props: any, prev?: any): void {\n if (!prev) {\n el.checked = el.defaultChecked = !!(props.checked ?? props.defaultChecked)\n } else if (props.checked != null) {\n el.checked = !!props.checked\n } else if (props.defaultChecked != null) {\n el.defaultChecked = !!props.defaultChecked\n }\n const value = props.value\n const fallback = props.defaultValue\n if (!prev) {\n if (value == null && (el.type === 'submit' || el.type === 'reset')) return\n if (value != null || fallback != null) {\n const initial = '' + (value ?? fallback)\n if (el.value !== initial) el.value = initial\n el.defaultValue = initial\n }\n return\n }\n if (value != null) {\n // Number inputs keep equivalent user spelling, including trailing zeroes.\n if (el.type === 'number' ? (value === 0 && el.value === '') || el.value != value : el.value !== '' + value) {\n el.value = '' + value\n }\n const nextDefault = el.type === 'number' && el.value == value ? el.value : '' + value\n if (el.defaultValue !== nextDefault) el.defaultValue = nextDefault\n } else if (fallback != null) {\n if (el.defaultValue !== '' + fallback) el.defaultValue = '' + fallback\n } else if (prev.defaultValue != null || el.type === 'submit' || el.type === 'reset') {\n el.removeAttribute('value')\n }\n}\n\nexport function syncTextareaValue(el: HTMLTextAreaElement, props: any, mounting = false): void {\n if (mounting) {\n const children = props.children\n const initial = props.value ?? props.defaultValue ?? (Array.isArray(children) ? children[0] : children) ?? ''\n el.defaultValue = initial\n // The strict check also preserves React's clean numeric-default state.\n if (initial !== '' && el.textContent === initial) el.value = initial\n return\n }\n const value = props.value\n if (value != null && el.value !== '' + value) el.value = '' + value\n const fallback = props.defaultValue ?? value ?? ''\n if (el.defaultValue !== '' + fallback) el.defaultValue = '' + fallback\n}\n\nexport function setProp(\n el: Element,\n name: string,\n next: any,\n prev: any,\n isSvg: boolean,\n): void {\n if (name === 'children' || name === 'key' || name === 'ref') return\n // These names need no alias or boolean-attribute normalization.\n if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {\n if (name.startsWith('aria-') || name.startsWith('data-')) {\n if (next == null) el.removeAttribute(name)\n else el.setAttribute(name, '' + next)\n return\n }\n }\n const attr = attributeName(name, isSvg)\n\n // defaultValue / defaultChecked are IDL-property-only \u2014 they seed the\n // initial value/checked of a form control on first mount and must NOT be\n // emitted as HTML attributes (which would leak as `defaultValue=\"...\"`).\n // Setting `el.defaultValue` on a fresh control also sets the initial\n // `el.value`, which is what consumers expect. Skip on hydrated DOM so we\n // don't clobber a live user-typed value.\n if (name === 'defaultValue' || name === 'defaultChecked') {\n if (prev === undefined && next != null) {\n try {\n ;(el as any)[name] = next\n } catch {}\n }\n return\n }\n\n if (name === 'className' && !isSvg) {\n ;(el as HTMLElement).className = next == null ? '' : '' + next\n return\n }\n\n if (name === 'style') {\n setStyle(el as HTMLElement, next, prev)\n return\n }\n\n if (name === 'dangerouslySetInnerHTML') {\n const nextHtml = next?.__html ?? ''\n const prevHtml = prev?.__html ?? ''\n if (nextHtml !== prevHtml) (el as HTMLElement).innerHTML = nextHtml\n return\n }\n\n if (name[0] === 'o' && name[1] === 'n') {\n setEventHandler(el, name, next)\n return\n }\n\n if (name === 'className' || name === 'class' || name === 'htmlFor' || STRING_BOOLEAN_ATTRS.has(attr)) {\n if (next == null) el.removeAttribute(attr)\n else el.setAttribute(attr, '' + next)\n return\n }\n\n if (!isSvg && IDL_ATTRS.has(name) && name in el) {\n try {\n ;(el as any)[name] = next == null ? '' : next\n return\n } catch {}\n }\n\n if (BOOLEAN_ATTRS.has(attr)) next = !!next\n\n if (next == null || next === false) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, next === true ? '' : next)\n }\n}\n\nfunction setStyle(el: HTMLElement, next: any, prev: any): void {\n const style = el.style\n if (typeof next === 'string') {\n style.cssText = next\n return\n }\n if (typeof prev === 'string') style.cssText = ''\n if (prev && typeof prev === 'object') {\n for (const k in prev) {\n if (!next || !(k in next)) setStyleProperty(style, k, '')\n }\n }\n if (next && typeof next === 'object') {\n for (const k in next) {\n if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k])\n }\n }\n}\n\nfunction setStyleProperty(style: CSSStyleDeclaration, key: string, value: any): void {\n if (key[0] === '-') {\n style.setProperty(key, value == null ? '' : '' + value)\n } else if (value == null || value === '') {\n ;(style as any)[key] = ''\n } else if (typeof value === 'number' && !UNITLESS_STYLE.has(key)) {\n ;(style as any)[key] = value + 'px'\n } else {\n ;(style as any)[key] = '' + value\n }\n}\n\nconst UNITLESS_STYLE = new Set([\n 'animationIterationCount',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridArea',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'fontWeight',\n 'lineClamp',\n 'lineHeight',\n 'opacity',\n 'order',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n])\n\nexport interface SyntheticEvent extends Event {\n nativeEvent: Event\n isDefaultPrevented(): boolean\n isPropagationStopped(): boolean\n persist(): void\n currentTarget: EventTarget & Element\n}\n\nfunction setEventHandler(el: Element, name: string, next: any): void {\n // Only function handlers are accepted. Reject strings/objects/etc \u2014 the\n // legacy `onclick=\"...\"` HTML attribute (string handler) is a known XSS\n // vector if a parent spreads untrusted props onto a host element. React\n // also ignores non-function handlers.\n if (next != null && typeof next != 'function') next = null\n\n const capture = name.endsWith('Capture')\n const reactEventName = name.slice(2, capture ? -7 : undefined)\n const eventName = domEventFor(reactEventName, el)\n\n // Key by the React prop name (not DOM event name) so `onChange` and\n // `onInput` on the same text input \u2014 which both dispatch from the native\n // `input` event \u2014 can coexist without clobbering each other's handlers.\n const handlers = ((el as any).__handlers ||= Object.create(null))\n const existing = handlers[name]\n\n if (existing && !next) {\n el.removeEventListener(existing.event, existing.listener, capture)\n handlers[name] = null\n return\n }\n\n if (!existing && next) {\n const entry = {\n current: next as Function,\n listener: null as any,\n event: eventName,\n }\n entry.listener = (e: Event) => {\n // React hands handlers a SyntheticEvent that carries `.nativeEvent`.\n // Many libraries check `event.nativeEvent.isComposing` (react-instantsearch)\n // or `event.nativeEvent.shiftKey` (UI kits) \u2014 without the alias they throw\n // on `undefined.foo`. Aliasing the native event to itself is the cheapest\n // way to satisfy the shape without building a full synthetic layer.\n if ((e as any).nativeEvent === undefined) (e as any).nativeEvent = e\n entry.current(e)\n }\n handlers[name] = entry\n el.addEventListener(eventName, entry.listener, capture)\n return\n }\n\n if (existing) {\n // Re-bind if the effective DOM event changed (e.g. <input> whose `type`\n // flipped from \"text\" to \"checkbox\" \u2014 onChange should now follow `change`\n // instead of `input`). This is rare but keeps semantics correct.\n if (existing.event !== eventName) {\n el.removeEventListener(existing.event, existing.listener, capture)\n existing.event = eventName\n el.addEventListener(eventName, existing.listener, capture)\n }\n existing.current = next\n }\n}\n\nfunction domEventFor(reactEventName: string, el: Element): string {\n const lower = reactEventName.toLowerCase()\n // React's `onChange` on text-like <input> and <textarea> maps to the\n // native `input` event so handlers fire on every keystroke. On checkbox,\n // radio, file inputs, and <select>, React's `onChange` maps to the\n // native `change` event (which fires on click / option select).\n if (lower === 'change') {\n const tag = el.tagName\n if (tag === 'TEXTAREA') return 'input'\n if (tag === 'INPUT') {\n const type = ((el as HTMLInputElement).type || 'text').toLowerCase()\n if (type !== 'checkbox' && type !== 'radio' && type !== 'file') {\n return 'input'\n }\n }\n }\n if (lower === 'doubleclick') return 'dblclick'\n return lower\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/dom/error-info.ts
|
|
2
|
+
import { FiberTag } from "../core/index.js";
|
|
3
|
+
function componentStack(fiber) {
|
|
4
|
+
let stack = "";
|
|
5
|
+
for (; fiber; fiber = fiber.parent) {
|
|
6
|
+
let type = fiber.type;
|
|
7
|
+
while (type && typeof type === "object") type = type.type || type.render;
|
|
8
|
+
const name = typeof type === "string" ? type : typeof type === "function" ? type.displayName || type.name || "Anonymous" : fiber.tag === FiberTag.Suspense ? "Suspense" : fiber.tag === FiberTag.Activity ? "Activity" : "";
|
|
9
|
+
if (name) stack += "\n at " + name;
|
|
10
|
+
}
|
|
11
|
+
return stack;
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
componentStack
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=error-info.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/dom/error-info.ts"],
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber } from '../core'\n\nexport function componentStack(fiber: Fiber | null): string {\n let stack = ''\n for (; fiber; fiber = fiber.parent) {\n let type = fiber.type\n while (type && typeof type === 'object') type = type.type || type.render\n const name = typeof type === 'string' ? type\n : typeof type === 'function' ? type.displayName || type.name || 'Anonymous'\n : fiber.tag === FiberTag.Suspense ? 'Suspense'\n : fiber.tag === FiberTag.Activity ? 'Activity' : ''\n if (name) stack += '\\n at ' + name\n }\n return stack\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4B;AAE9B,SAAS,eAAe,OAA6B;AAC1D,MAAI,QAAQ;AACZ,SAAO,OAAO,QAAQ,MAAM,QAAQ;AAClC,QAAI,OAAO,MAAM;AACjB,WAAO,QAAQ,OAAO,SAAS,SAAU,QAAO,KAAK,QAAQ,KAAK;AAClE,UAAM,OAAO,OAAO,SAAS,WAAW,OACpC,OAAO,SAAS,aAAa,KAAK,eAAe,KAAK,QAAQ,cAC9D,MAAM,QAAQ,SAAS,WAAW,aAClC,MAAM,QAAQ,SAAS,WAAW,aAAa;AACnD,QAAI,KAAM,UAAS,cAAc;AAAA,EACnC;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/dom/event-replay.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// src/dom/features/activity/full.ts
|
|
2
|
+
import { FiberTag } from "../../../core/index.js";
|
|
3
|
+
import { REACT_ACTIVITY_TYPE } from "../../../react/activity.js";
|
|
4
|
+
import { onCommitRollback, queueMutation } from "../../commit.js";
|
|
5
|
+
import { retainedEffects as effects, inSuspensePrimary, setLayoutDisconnected, walkRetained as walk } from "../../retained-effects.js";
|
|
6
|
+
import {
|
|
7
|
+
attachRef,
|
|
8
|
+
childrenToArray,
|
|
9
|
+
detachRef,
|
|
10
|
+
enqueueEffect,
|
|
11
|
+
findRoot,
|
|
12
|
+
flushFiberCommits,
|
|
13
|
+
getCurrentRoot,
|
|
14
|
+
handleCommitError,
|
|
15
|
+
installCapability,
|
|
16
|
+
reconcileChildren,
|
|
17
|
+
registerRenderer,
|
|
18
|
+
registerTypeMatcher,
|
|
19
|
+
scheduleLifecycle,
|
|
20
|
+
scheduleUpdate
|
|
21
|
+
} from "../../reconcile.js";
|
|
22
|
+
var disconnected = /* @__PURE__ */ new WeakSet();
|
|
23
|
+
var hiddenDoms = /* @__PURE__ */ new WeakSet();
|
|
24
|
+
function setMembership(set, fiber, present) {
|
|
25
|
+
const previous = set.has(fiber);
|
|
26
|
+
if (previous === present) return previous;
|
|
27
|
+
onCommitRollback(() => {
|
|
28
|
+
if (previous) set.add(fiber);
|
|
29
|
+
else set.delete(fiber);
|
|
30
|
+
});
|
|
31
|
+
if (present) set.add(fiber);
|
|
32
|
+
else set.delete(fiber);
|
|
33
|
+
return previous;
|
|
34
|
+
}
|
|
35
|
+
function isHidden(fiber) {
|
|
36
|
+
if (!(fiber.root ?? findRoot(fiber))?.a) return false;
|
|
37
|
+
for (let parent = fiber; parent; parent = parent.parent) {
|
|
38
|
+
if (parent.tag === FiberTag.Activity && parent.pp?.mode === "hidden") return true;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
function report(fiber, fn) {
|
|
43
|
+
try {
|
|
44
|
+
fn();
|
|
45
|
+
} catch (error) {
|
|
46
|
+
handleCommitError(fiber, error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function disconnect(fiber) {
|
|
50
|
+
if (disconnected.has(fiber)) return;
|
|
51
|
+
setMembership(disconnected, fiber, true);
|
|
52
|
+
queueMutation(() => {
|
|
53
|
+
const insertion = /* @__PURE__ */ new Set();
|
|
54
|
+
for (const [hook, effect] of effects.get(fiber) ?? []) {
|
|
55
|
+
if (effect.t === 2 && hook.c) insertion.add(hook.c);
|
|
56
|
+
}
|
|
57
|
+
if (fiber.cu) {
|
|
58
|
+
const keep = fiber.cu.filter((cleanup) => insertion.has(cleanup));
|
|
59
|
+
for (const cleanup of fiber.cu) {
|
|
60
|
+
if (!insertion.has(cleanup)) report(fiber, cleanup);
|
|
61
|
+
}
|
|
62
|
+
fiber.cu = keep.length ? keep : null;
|
|
63
|
+
}
|
|
64
|
+
for (const [hook, effect] of effects.get(fiber) ?? []) {
|
|
65
|
+
if (effect.t !== 2) hook.c = null;
|
|
66
|
+
}
|
|
67
|
+
detachRef(fiber.cr ?? fiber.ref);
|
|
68
|
+
fiber.cr = null;
|
|
69
|
+
fiber.rc = null;
|
|
70
|
+
const instance = fiber.sn?._fiber === fiber ? fiber.sn : null;
|
|
71
|
+
if (!fiber.ld && instance?.componentWillUnmount) {
|
|
72
|
+
const props = instance.props, state = instance.state, committed = fiber.ms?.c;
|
|
73
|
+
if (committed) {
|
|
74
|
+
instance.props = committed.props;
|
|
75
|
+
instance.state = committed.state;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
report(fiber, () => instance.componentWillUnmount());
|
|
79
|
+
} finally {
|
|
80
|
+
instance.props = props;
|
|
81
|
+
instance.state = state;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function prepare(fiber) {
|
|
87
|
+
if (!isHidden(fiber) || disconnected.has(fiber)) return;
|
|
88
|
+
if (fiber.mp == null) setMembership(disconnected, fiber, true);
|
|
89
|
+
else disconnect(fiber);
|
|
90
|
+
}
|
|
91
|
+
function needsHiddenDom(fiber) {
|
|
92
|
+
for (let parent = fiber.parent; parent; parent = parent.parent) {
|
|
93
|
+
if (parent.tag === FiberTag.Activity && parent.pp?.mode === "hidden") return true;
|
|
94
|
+
if (parent.tag === FiberTag.Host) return false;
|
|
95
|
+
if (parent.tag === FiberTag.Portal) return isHidden(parent);
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
function syncDom(fiber) {
|
|
100
|
+
if (!(fiber.root ?? findRoot(fiber))?.a) return;
|
|
101
|
+
if (!fiber.dom || fiber.tag !== FiberTag.Host && fiber.tag !== FiberTag.Text) return;
|
|
102
|
+
if (needsHiddenDom(fiber)) {
|
|
103
|
+
setMembership(hiddenDoms, fiber, true);
|
|
104
|
+
queueMutation(() => {
|
|
105
|
+
if (fiber.tag === FiberTag.Text) fiber.dom.nodeValue = "";
|
|
106
|
+
else fiber.dom.style.setProperty("display", "none", "important");
|
|
107
|
+
});
|
|
108
|
+
} else if (setMembership(hiddenDoms, fiber, false)) {
|
|
109
|
+
for (let parent = fiber.parent; parent; parent = parent.parent) {
|
|
110
|
+
if (parent.tag === FiberTag.Suspense && parent.ms?.d?.some(([node]) => node === fiber.dom)) return;
|
|
111
|
+
}
|
|
112
|
+
const props = fiber.pp;
|
|
113
|
+
queueMutation(() => {
|
|
114
|
+
if (fiber.tag === FiberTag.Text) fiber.dom.nodeValue = props;
|
|
115
|
+
else {
|
|
116
|
+
const display = props?.style?.display;
|
|
117
|
+
fiber.dom.style.display = display == null || typeof display === "boolean" ? "" : ("" + display).trim();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function reconnect(fiber) {
|
|
123
|
+
syncDom(fiber);
|
|
124
|
+
if (isHidden(fiber) || inSuspensePrimary(fiber) || !setMembership(disconnected, fiber, false)) return;
|
|
125
|
+
setLayoutDisconnected(fiber, false);
|
|
126
|
+
const instance = fiber.sn?._fiber === fiber ? fiber.sn : null;
|
|
127
|
+
if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Resource) attachRef(fiber, fiber.dom);
|
|
128
|
+
else if (instance || fiber.tag === FiberTag.Fragment) attachRef(fiber, fiber.sn);
|
|
129
|
+
for (const effect of effects.get(fiber)?.values() ?? []) {
|
|
130
|
+
if (effect.t !== 2) enqueueEffect(fiber, effect);
|
|
131
|
+
}
|
|
132
|
+
if (instance?.componentDidMount) {
|
|
133
|
+
scheduleLifecycle(fiber, () => instance.componentDidMount());
|
|
134
|
+
}
|
|
135
|
+
flushFiberCommits(fiber);
|
|
136
|
+
}
|
|
137
|
+
function finish(fiber) {
|
|
138
|
+
if (fiber.tag === FiberTag.Suspense && (fiber.root ?? findRoot(fiber))?.a) walk(fiber, reconnect, true);
|
|
139
|
+
else syncDom(fiber);
|
|
140
|
+
}
|
|
141
|
+
function renderActivity(fiber, domParent, anchor) {
|
|
142
|
+
const root = fiber.root ?? findRoot(fiber);
|
|
143
|
+
if (root) root.a = true;
|
|
144
|
+
const props = fiber.pp ?? {};
|
|
145
|
+
if (getCurrentRoot()?.h && props.mode === "hidden" && !fiber.mp) {
|
|
146
|
+
fiber.mp = props;
|
|
147
|
+
queueMicrotask(() => scheduleUpdate(fiber));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (isHidden(fiber)) walk(fiber, prepare);
|
|
151
|
+
else walk(fiber, syncDom);
|
|
152
|
+
reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
|
|
153
|
+
walk(fiber, reconnect, true);
|
|
154
|
+
fiber.mp = props;
|
|
155
|
+
}
|
|
156
|
+
installCapability("isActivityHidden", isHidden);
|
|
157
|
+
installCapability("activityIsDisconnected", (fiber) => disconnected.has(fiber));
|
|
158
|
+
installCapability("prepareActivityFiber", prepare);
|
|
159
|
+
installCapability("syncActivity", finish);
|
|
160
|
+
registerTypeMatcher((type) => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null);
|
|
161
|
+
registerRenderer(FiberTag.Activity, renderActivity);
|
|
162
|
+
//# sourceMappingURL=full.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/activity/full.ts"],
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_ACTIVITY_TYPE } from '../../../react/activity'\nimport { onCommitRollback, queueMutation } from '../../commit'\nimport { retainedEffects as effects, inSuspensePrimary, setLayoutDisconnected, walkRetained as walk } from '../../retained-effects'\nimport {\n attachRef,\n childrenToArray,\n detachRef,\n enqueueEffect,\n findRoot,\n flushFiberCommits,\n getCurrentRoot,\n handleCommitError,\n installCapability,\n reconcileChildren,\n registerRenderer,\n registerTypeMatcher,\n scheduleLifecycle,\n scheduleUpdate,\n} from '../../reconcile'\n\n// Retain effect descriptions, not subscriptions, while a subtree is hidden.\n// Weak keys keep this bookkeeping out of fibers that do not use Activity.\nconst disconnected = new WeakSet<Fiber>()\nconst hiddenDoms = new WeakSet<Fiber>()\n\nfunction setMembership(set: WeakSet<Fiber>, fiber: Fiber, present: boolean): boolean {\n const previous = set.has(fiber)\n if (previous === present) return previous\n onCommitRollback(() => { if (previous) set.add(fiber); else set.delete(fiber) })\n if (present) set.add(fiber)\n else set.delete(fiber)\n return previous\n}\n\nfunction isHidden(fiber: Fiber): boolean {\n if (!(fiber.root ?? findRoot(fiber))?.a) return false\n for (let parent: Fiber | null = fiber; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Activity && parent.pp?.mode === 'hidden') return true\n }\n return false\n}\n\nfunction report(fiber: Fiber, fn: () => void): void {\n try { fn() } catch (error) { handleCommitError(fiber, error) }\n}\n\nfunction disconnect(fiber: Fiber): void {\n if (disconnected.has(fiber)) return\n setMembership(disconnected, fiber, true)\n queueMutation(() => {\n // Insertion effects remain connected, just as they do in React.\n const insertion = new Set<() => void>()\n for (const [hook, effect] of effects.get(fiber) ?? []) {\n if (effect.t === 2 && hook.c) insertion.add(hook.c)\n }\n if (fiber.cu) {\n const keep = fiber.cu.filter(cleanup => insertion.has(cleanup))\n for (const cleanup of fiber.cu) {\n if (!insertion.has(cleanup)) report(fiber, cleanup)\n }\n fiber.cu = keep.length ? keep : null\n }\n for (const [hook, effect] of effects.get(fiber) ?? []) {\n if (effect.t !== 2) hook.c = null\n }\n detachRef(fiber.cr ?? fiber.ref)\n fiber.cr = null\n fiber.rc = null\n const instance = fiber.sn?._fiber === fiber ? fiber.sn : null\n if (!fiber.ld && instance?.componentWillUnmount) {\n const props = instance.props, state = instance.state, committed = fiber.ms?.c\n if (committed) { instance.props = committed.props; instance.state = committed.state }\n try { report(fiber, () => instance.componentWillUnmount()) }\n finally { instance.props = props; instance.state = state }\n }\n })\n}\n\nfunction prepare(fiber: Fiber): void {\n if (!isHidden(fiber) || disconnected.has(fiber)) return\n if (fiber.mp == null) setMembership(disconnected, fiber, true)\n else disconnect(fiber)\n}\n\nfunction needsHiddenDom(fiber: Fiber): boolean {\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Activity && parent.pp?.mode === 'hidden') return true\n if (parent.tag === FiberTag.Host) return false\n // A portal starts a new DOM tree, but keeps the parent's Activity state.\n if (parent.tag === FiberTag.Portal) return isHidden(parent)\n }\n return false\n}\n\nfunction syncDom(fiber: Fiber): void {\n if (!(fiber.root ?? findRoot(fiber))?.a) return\n if (!fiber.dom || (fiber.tag !== FiberTag.Host && fiber.tag !== FiberTag.Text)) return\n if (needsHiddenDom(fiber)) {\n setMembership(hiddenDoms, fiber, true)\n queueMutation(() => {\n if (fiber.tag === FiberTag.Text) fiber.dom!.nodeValue = ''\n else (fiber.dom as HTMLElement).style.setProperty('display', 'none', 'important')\n })\n } else if (setMembership(hiddenDoms, fiber, false)) {\n // A Suspense fallback can remain active after its Activity is revealed.\n // Its preserved primary DOM must stay hidden until that boundary resumes.\n for (let parent = fiber.parent; parent; parent = parent.parent) {\n if (parent.tag === FiberTag.Suspense && parent.ms?.d?.some(([node]: [Node, string]) => node === fiber.dom)) return\n }\n const props = fiber.pp\n queueMutation(() => {\n if (fiber.tag === FiberTag.Text) fiber.dom!.nodeValue = props\n else {\n const display = props?.style?.display\n ;(fiber.dom as HTMLElement).style.display = display == null || typeof display === 'boolean' ? '' : ('' + display).trim()\n }\n })\n }\n}\n\nfunction reconnect(fiber: Fiber): void {\n syncDom(fiber)\n if (isHidden(fiber) || inSuspensePrimary(fiber) || !setMembership(disconnected, fiber, false)) return\n setLayoutDisconnected(fiber, false)\n const instance = fiber.sn?._fiber === fiber ? fiber.sn : null\n if (fiber.tag === FiberTag.Host || fiber.tag === FiberTag.Resource) attachRef(fiber, fiber.dom)\n else if (instance || fiber.tag === FiberTag.Fragment) attachRef(fiber, fiber.sn)\n for (const effect of effects.get(fiber)?.values() ?? []) {\n if (effect.t !== 2) enqueueEffect(fiber, effect)\n }\n if (instance?.componentDidMount) {\n scheduleLifecycle(fiber, () => instance.componentDidMount())\n }\n flushFiberCommits(fiber)\n}\n\nfunction finish(fiber: Fiber): void {\n if (fiber.tag === FiberTag.Suspense && (fiber.root ?? findRoot(fiber))?.a) walk(fiber, reconnect, true)\n else syncDom(fiber)\n}\n\nfunction renderActivity(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const root = fiber.root ?? findRoot(fiber)\n if (root) root.a = true\n const props = fiber.pp ?? {}\n // Hidden content is absent from server HTML. Mount it after hydration so it\n // cannot consume a following visible sibling's hydration cursor.\n if (getCurrentRoot()?.h && props.mode === 'hidden' && !fiber.mp) {\n fiber.mp = props\n queueMicrotask(() => scheduleUpdate(fiber))\n return\n }\n if (isHidden(fiber)) walk(fiber, prepare)\n else walk(fiber, syncDom)\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n walk(fiber, reconnect, true)\n fiber.mp = props\n}\n\ninstallCapability('isActivityHidden', isHidden)\ninstallCapability('activityIsDisconnected', fiber => disconnected.has(fiber))\ninstallCapability('prepareActivityFiber', prepare)\ninstallCapability('syncActivity', finish)\nregisterTypeMatcher(type => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null)\nregisterRenderer(FiberTag.Activity, renderActivity)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./full.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/dom/features/activity/stub.ts
|
|
2
|
+
import { FiberTag } from "../../../core/index.js";
|
|
3
|
+
import { REACT_ACTIVITY_TYPE } from "../../../react/activity.js";
|
|
4
|
+
import { childrenToArray, reconcileChildren, registerRenderer, registerTypeMatcher } from "../../reconcile.js";
|
|
5
|
+
function renderActivity(fiber, parent, anchor) {
|
|
6
|
+
const props = fiber.pp ?? {};
|
|
7
|
+
reconcileChildren(fiber, props.mode === "hidden" ? [] : childrenToArray(props.children), parent, anchor);
|
|
8
|
+
fiber.mp = props;
|
|
9
|
+
}
|
|
10
|
+
registerTypeMatcher((type) => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null);
|
|
11
|
+
registerRenderer(FiberTag.Activity, renderActivity);
|
|
12
|
+
//# sourceMappingURL=stub.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/activity/stub.ts"],
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_ACTIVITY_TYPE } from '../../../react/activity'\nimport { childrenToArray, reconcileChildren, registerRenderer, registerTypeMatcher } from '../../reconcile'\n\n// Explicit small-preset downgrade: hidden children unmount instead of being\n// retained. Showing them again creates fresh state, DOM, effects, and refs.\nfunction renderActivity(fiber: Fiber, parent: Node, anchor: Node | null): void {\n const props = fiber.pp ?? {}\n reconcileChildren(fiber, props.mode === 'hidden' ? [] : childrenToArray(props.children), parent, anchor)\n fiber.mp = props\n}\n\nregisterTypeMatcher(type => type === REACT_ACTIVITY_TYPE ? FiberTag.Activity : null)\nregisterRenderer(FiberTag.Activity, renderActivity)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,mBAAmB,kBAAkB,2BAA2B;AAI1F,SAAS,eAAe,OAAc,QAAc,QAA2B;AAC7E,QAAM,QAAQ,MAAM,MAAM,CAAC;AAC3B,oBAAkB,OAAO,MAAM,SAAS,WAAW,CAAC,IAAI,gBAAgB,MAAM,QAAQ,GAAG,QAAQ,MAAM;AACvG,QAAM,KAAK;AACb;AAEA,oBAAoB,UAAQ,SAAS,sBAAsB,SAAS,WAAW,IAAI;AACnF,iBAAiB,SAAS,UAAU,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|