@tanstack/redact 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +7 -0
- package/dist/core/internal.d.ts +76 -0
- package/dist/core/internal.js +59 -0
- package/dist/core/internal.js.map +7 -0
- package/dist/core/types.d.ts +21 -0
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +7 -0
- package/dist/dom/_all.d.ts +17 -0
- package/dist/dom/_all.js +51 -0
- package/dist/dom/_all.js.map +7 -0
- package/dist/dom/client.d.ts +3 -0
- package/dist/dom/client.js +8 -0
- package/dist/dom/client.js.map +7 -0
- package/dist/dom/dispatcher.d.ts +20 -0
- package/dist/dom/dispatcher.js +267 -0
- package/dist/dom/dispatcher.js.map +7 -0
- package/dist/dom/dom.d.ts +10 -0
- package/dist/dom/dom.js +262 -0
- package/dist/dom/dom.js.map +7 -0
- package/dist/dom/event-replay.d.ts +13 -0
- package/dist/dom/event-replay.js +46 -0
- package/dist/dom/event-replay.js.map +7 -0
- package/dist/dom/features/class/full.d.ts +1 -0
- package/dist/dom/features/class/full.js +91 -0
- package/dist/dom/features/class/full.js.map +7 -0
- package/dist/dom/features/class/index.d.ts +1 -0
- package/dist/dom/features/class/index.js +3 -0
- package/dist/dom/features/class/index.js.map +7 -0
- package/dist/dom/features/class/stub.d.ts +1 -0
- package/dist/dom/features/class/stub.js +50 -0
- package/dist/dom/features/class/stub.js.map +7 -0
- package/dist/dom/features/context/full.d.ts +1 -0
- package/dist/dom/features/context/full.js +49 -0
- package/dist/dom/features/context/full.js.map +7 -0
- package/dist/dom/features/context/index.d.ts +1 -0
- package/dist/dom/features/context/index.js +3 -0
- package/dist/dom/features/context/index.js.map +7 -0
- package/dist/dom/features/context/stub.d.ts +1 -0
- package/dist/dom/features/context/stub.js +22 -0
- package/dist/dom/features/context/stub.js.map +7 -0
- package/dist/dom/features/forward-ref/full.d.ts +1 -0
- package/dist/dom/features/forward-ref/full.js +51 -0
- package/dist/dom/features/forward-ref/full.js.map +7 -0
- package/dist/dom/features/forward-ref/index.d.ts +1 -0
- package/dist/dom/features/forward-ref/index.js +3 -0
- package/dist/dom/features/forward-ref/index.js.map +7 -0
- package/dist/dom/features/forward-ref/stub.d.ts +1 -0
- package/dist/dom/features/forward-ref/stub.js +22 -0
- package/dist/dom/features/forward-ref/stub.js.map +7 -0
- package/dist/dom/features/hydration/full.d.ts +61 -0
- package/dist/dom/features/hydration/full.js +264 -0
- package/dist/dom/features/hydration/full.js.map +7 -0
- package/dist/dom/features/hydration/index.d.ts +1 -0
- package/dist/dom/features/hydration/index.js +3 -0
- package/dist/dom/features/hydration/index.js.map +7 -0
- package/dist/dom/features/hydration/stub.d.ts +28 -0
- package/dist/dom/features/hydration/stub.js +66 -0
- package/dist/dom/features/hydration/stub.js.map +7 -0
- package/dist/dom/features/index.d.ts +7 -0
- package/dist/dom/features/index.js +9 -0
- package/dist/dom/features/index.js.map +7 -0
- package/dist/dom/features/lazy/full.d.ts +1 -0
- package/dist/dom/features/lazy/full.js +78 -0
- package/dist/dom/features/lazy/full.js.map +7 -0
- package/dist/dom/features/lazy/index.d.ts +1 -0
- package/dist/dom/features/lazy/index.js +3 -0
- package/dist/dom/features/lazy/index.js.map +7 -0
- package/dist/dom/features/lazy/stub.d.ts +1 -0
- package/dist/dom/features/lazy/stub.js +36 -0
- package/dist/dom/features/lazy/stub.js.map +7 -0
- package/dist/dom/features/memo/full.d.ts +1 -0
- package/dist/dom/features/memo/full.js +59 -0
- package/dist/dom/features/memo/full.js.map +7 -0
- package/dist/dom/features/memo/index.d.ts +1 -0
- package/dist/dom/features/memo/index.js +3 -0
- package/dist/dom/features/memo/index.js.map +7 -0
- package/dist/dom/features/memo/stub.d.ts +1 -0
- package/dist/dom/features/memo/stub.js +36 -0
- package/dist/dom/features/memo/stub.js.map +7 -0
- package/dist/dom/features/portal/full.d.ts +1 -0
- package/dist/dom/features/portal/full.js +19 -0
- package/dist/dom/features/portal/full.js.map +7 -0
- package/dist/dom/features/portal/index.d.ts +1 -0
- package/dist/dom/features/portal/index.js +3 -0
- package/dist/dom/features/portal/index.js.map +7 -0
- package/dist/dom/features/portal/stub.d.ts +1 -0
- package/dist/dom/features/portal/stub.js +7 -0
- package/dist/dom/features/portal/stub.js.map +7 -0
- package/dist/dom/features/suspense/full.d.ts +1 -0
- package/dist/dom/features/suspense/full.js +146 -0
- package/dist/dom/features/suspense/full.js.map +7 -0
- package/dist/dom/features/suspense/index.d.ts +1 -0
- package/dist/dom/features/suspense/index.js +3 -0
- package/dist/dom/features/suspense/index.js.map +7 -0
- package/dist/dom/features/suspense/stub.d.ts +1 -0
- package/dist/dom/features/suspense/stub.js +6 -0
- package/dist/dom/features/suspense/stub.js.map +7 -0
- package/dist/dom/index.d.ts +25 -0
- package/dist/dom/index.js +45 -0
- package/dist/dom/index.js.map +7 -0
- package/dist/dom/portal.d.ts +2 -0
- package/dist/dom/portal.js +15 -0
- package/dist/dom/portal.js.map +7 -0
- package/dist/dom/reconcile.d.ts +40 -0
- package/dist/dom/reconcile.js +795 -0
- package/dist/dom/reconcile.js.map +7 -0
- package/dist/dom/root.d.ts +15 -0
- package/dist/dom/root.js +85 -0
- package/dist/dom/root.js.map +7 -0
- package/dist/dom/test-utils.d.ts +1 -0
- package/dist/dom/test-utils.js +10 -0
- package/dist/dom/test-utils.js.map +7 -0
- package/dist/react/children.d.ts +8 -0
- package/dist/react/children.js +75 -0
- package/dist/react/children.js.map +7 -0
- package/dist/react/class.d.ts +31 -0
- package/dist/react/class.js +40 -0
- package/dist/react/class.js.map +7 -0
- package/dist/react/context.d.ts +27 -0
- package/dist/react/context.js +31 -0
- package/dist/react/context.js.map +7 -0
- package/dist/react/element.d.ts +10 -0
- package/dist/react/element.js +64 -0
- package/dist/react/element.js.map +7 -0
- package/dist/react/hooks.d.ts +37 -0
- package/dist/react/hooks.js +146 -0
- package/dist/react/hooks.js.map +7 -0
- package/dist/react/index.d.ts +76 -0
- package/dist/react/index.js +187 -0
- package/dist/react/index.js.map +7 -0
- package/dist/react/jsx-runtime.d.ts +5 -0
- package/dist/react/jsx-runtime.js +21 -0
- package/dist/react/jsx-runtime.js.map +7 -0
- package/dist/react/memo.d.ts +29 -0
- package/dist/react/memo.js +47 -0
- package/dist/react/memo.js.map +7 -0
- package/dist/react/portal.d.ts +1 -0
- package/dist/react/portal.js +6 -0
- package/dist/react/portal.js.map +7 -0
- package/dist/react/shared-internals.d.ts +33 -0
- package/dist/react/shared-internals.js +29 -0
- package/dist/react/shared-internals.js.map +7 -0
- package/dist/react/suspense.d.ts +15 -0
- package/dist/react/suspense.js +16 -0
- package/dist/react/suspense.js.map +7 -0
- package/dist/scheduler/index.d.ts +44 -0
- package/dist/scheduler/index.js +109 -0
- package/dist/scheduler/index.js.map +7 -0
- package/dist/server/bootstrap-script.d.ts +22 -0
- package/dist/server/bootstrap-script.js +16 -0
- package/dist/server/bootstrap-script.js.map +7 -0
- package/dist/server/dispatcher.d.ts +37 -0
- package/dist/server/dispatcher.js +140 -0
- package/dist/server/dispatcher.js.map +7 -0
- package/dist/server/escape.d.ts +7 -0
- package/dist/server/escape.js +159 -0
- package/dist/server/escape.js.map +7 -0
- package/dist/server/index.d.ts +16 -0
- package/dist/server/index.js +26 -0
- package/dist/server/index.js.map +7 -0
- package/dist/server/renderToString.d.ts +7 -0
- package/dist/server/renderToString.js +29 -0
- package/dist/server/renderToString.js.map +7 -0
- package/dist/server/stream.d.ts +40 -0
- package/dist/server/stream.js +200 -0
- package/dist/server/stream.js.map +7 -0
- package/dist/server/walk.d.ts +33 -0
- package/dist/server/walk.js +298 -0
- package/dist/server/walk.js.map +7 -0
- package/dist/vite/index.d.ts +96 -0
- package/dist/vite/index.js +217 -0
- package/dist/vite/index.js.map +7 -0
- package/package.json +83 -0
- package/src/core/index.ts +2 -0
- package/src/core/internal.ts +107 -0
- package/src/core/types.ts +36 -0
- package/src/dom/_all.ts +54 -0
- package/src/dom/client.ts +4 -0
- package/src/dom/dispatcher.ts +318 -0
- package/src/dom/dom.ts +316 -0
- package/src/dom/event-replay.ts +55 -0
- package/src/dom/features/class/full.ts +104 -0
- package/src/dom/features/class/index.ts +1 -0
- package/src/dom/features/class/stub.ts +65 -0
- package/src/dom/features/context/full.ts +57 -0
- package/src/dom/features/context/index.ts +1 -0
- package/src/dom/features/context/stub.ts +32 -0
- package/src/dom/features/forward-ref/full.ts +54 -0
- package/src/dom/features/forward-ref/index.ts +1 -0
- package/src/dom/features/forward-ref/stub.ts +28 -0
- package/src/dom/features/hydration/full.ts +345 -0
- package/src/dom/features/hydration/index.ts +1 -0
- package/src/dom/features/hydration/stub.ts +72 -0
- package/src/dom/features/index.ts +11 -0
- package/src/dom/features/lazy/full.ts +98 -0
- package/src/dom/features/lazy/index.ts +1 -0
- package/src/dom/features/lazy/stub.ts +45 -0
- package/src/dom/features/memo/full.ts +74 -0
- package/src/dom/features/memo/index.ts +1 -0
- package/src/dom/features/memo/stub.ts +42 -0
- package/src/dom/features/portal/full.ts +22 -0
- package/src/dom/features/portal/index.ts +1 -0
- package/src/dom/features/portal/stub.ts +11 -0
- package/src/dom/features/suspense/full.ts +191 -0
- package/src/dom/features/suspense/index.ts +1 -0
- package/src/dom/features/suspense/stub.ts +12 -0
- package/src/dom/index.ts +33 -0
- package/src/dom/portal.ts +16 -0
- package/src/dom/reconcile.ts +1169 -0
- package/src/dom/root.ts +107 -0
- package/src/dom/test-utils.ts +6 -0
- package/src/react/children.ts +85 -0
- package/src/react/class.ts +56 -0
- package/src/react/context.ts +50 -0
- package/src/react/element.ts +80 -0
- package/src/react/hooks.ts +190 -0
- package/src/react/index.ts +132 -0
- package/src/react/jsx-runtime.ts +16 -0
- package/src/react/memo.ts +45 -0
- package/src/react/portal.ts +1 -0
- package/src/react/shared-internals.ts +79 -0
- package/src/react/suspense.ts +18 -0
- package/src/scheduler/index.ts +124 -0
- package/src/server/bootstrap-script.ts +52 -0
- package/src/server/dispatcher.ts +158 -0
- package/src/server/escape.ts +187 -0
- package/src/server/index.ts +26 -0
- package/src/server/renderToString.ts +33 -0
- package/src/server/stream.ts +302 -0
- package/src/server/walk.ts +448 -0
- package/src/vite/index.ts +401 -0
package/dist/dom/dom.js
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
// packages/redact/src/dom/dom.ts
|
|
2
|
+
var SVG_NS = "http://www.w3.org/2000/svg";
|
|
3
|
+
var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([
|
|
4
|
+
"allowfullscreen",
|
|
5
|
+
"async",
|
|
6
|
+
"autofocus",
|
|
7
|
+
"autoplay",
|
|
8
|
+
"checked",
|
|
9
|
+
"controls",
|
|
10
|
+
"default",
|
|
11
|
+
"defer",
|
|
12
|
+
"disabled",
|
|
13
|
+
"formnovalidate",
|
|
14
|
+
"hidden",
|
|
15
|
+
"inert",
|
|
16
|
+
"ismap",
|
|
17
|
+
"itemscope",
|
|
18
|
+
"loop",
|
|
19
|
+
"multiple",
|
|
20
|
+
"muted",
|
|
21
|
+
"nomodule",
|
|
22
|
+
"novalidate",
|
|
23
|
+
"open",
|
|
24
|
+
"playsinline",
|
|
25
|
+
"readonly",
|
|
26
|
+
"required",
|
|
27
|
+
"reversed",
|
|
28
|
+
"selected"
|
|
29
|
+
]);
|
|
30
|
+
var IDL_ATTRS = /* @__PURE__ */ new Set([
|
|
31
|
+
"value",
|
|
32
|
+
"checked",
|
|
33
|
+
"selected",
|
|
34
|
+
"disabled",
|
|
35
|
+
"multiple",
|
|
36
|
+
"muted",
|
|
37
|
+
"readonly",
|
|
38
|
+
"contentEditable",
|
|
39
|
+
"spellcheck",
|
|
40
|
+
"draggable"
|
|
41
|
+
]);
|
|
42
|
+
function createHostNode(type, isSvg) {
|
|
43
|
+
if (isSvg || type === "svg") {
|
|
44
|
+
return document.createElementNS(SVG_NS, type);
|
|
45
|
+
}
|
|
46
|
+
return document.createElement(type);
|
|
47
|
+
}
|
|
48
|
+
function isSvgElement(el) {
|
|
49
|
+
return el.ownerSVGElement !== void 0 || el.tagName === "svg";
|
|
50
|
+
}
|
|
51
|
+
function setProp(el, name, next, prev, isSvg) {
|
|
52
|
+
if (name === "children" || name === "key" || name === "ref") return;
|
|
53
|
+
if (name === "defaultValue" || name === "defaultChecked") {
|
|
54
|
+
if (prev === void 0 && next != null) {
|
|
55
|
+
try {
|
|
56
|
+
;
|
|
57
|
+
el[name] = next;
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (name === "className") {
|
|
64
|
+
if (isSvg) {
|
|
65
|
+
if (next == null) el.removeAttribute("class");
|
|
66
|
+
else el.setAttribute("class", "" + next);
|
|
67
|
+
} else {
|
|
68
|
+
;
|
|
69
|
+
el.className = next == null ? "" : "" + next;
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (name === "class") {
|
|
74
|
+
if (next == null) el.removeAttribute("class");
|
|
75
|
+
else el.setAttribute("class", "" + next);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (name === "style") {
|
|
79
|
+
setStyle(el, next, prev);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (name === "dangerouslySetInnerHTML") {
|
|
83
|
+
const nextHtml = next?.__html ?? "";
|
|
84
|
+
const prevHtml = prev?.__html ?? "";
|
|
85
|
+
if (nextHtml !== prevHtml) el.innerHTML = nextHtml;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (name[0] === "o" && name[1] === "n") {
|
|
89
|
+
setEventHandler(el, name, next, prev);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (name === "htmlFor") {
|
|
93
|
+
if (next == null) el.removeAttribute("for");
|
|
94
|
+
else el.setAttribute("for", "" + next);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!isSvg && IDL_ATTRS.has(name) && name in el) {
|
|
98
|
+
try {
|
|
99
|
+
;
|
|
100
|
+
el[name] = next == null ? "" : next;
|
|
101
|
+
return;
|
|
102
|
+
} catch {
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (BOOLEAN_ATTRS.has(name.toLowerCase())) {
|
|
106
|
+
if (next) el.setAttribute(name, "");
|
|
107
|
+
else el.removeAttribute(name);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (name.length > 5 && (name.charCodeAt(0) === 97 || name.charCodeAt(0) === 100)) {
|
|
111
|
+
if (name.startsWith("aria-") || name.startsWith("data-")) {
|
|
112
|
+
if (next == null) {
|
|
113
|
+
el.removeAttribute(name);
|
|
114
|
+
} else {
|
|
115
|
+
el.setAttribute(name, "" + next);
|
|
116
|
+
}
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (next == null || next === false) {
|
|
121
|
+
el.removeAttribute(name);
|
|
122
|
+
} else if (next === true) {
|
|
123
|
+
el.setAttribute(name, "");
|
|
124
|
+
} else {
|
|
125
|
+
el.setAttribute(name, "" + next);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function setStyle(el, next, prev) {
|
|
129
|
+
const style = el.style;
|
|
130
|
+
if (typeof next === "string") {
|
|
131
|
+
style.cssText = next;
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (typeof prev === "string") style.cssText = "";
|
|
135
|
+
if (prev && typeof prev === "object") {
|
|
136
|
+
for (const k in prev) {
|
|
137
|
+
if (!next || !(k in next)) setStyleProperty(style, k, "");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (next && typeof next === "object") {
|
|
141
|
+
for (const k in next) {
|
|
142
|
+
if (!prev || prev[k] !== next[k]) setStyleProperty(style, k, next[k]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function setStyleProperty(style, key, value) {
|
|
147
|
+
if (key[0] === "-") {
|
|
148
|
+
style.setProperty(key, value == null ? "" : "" + value);
|
|
149
|
+
} else if (value == null || value === "") {
|
|
150
|
+
;
|
|
151
|
+
style[key] = "";
|
|
152
|
+
} else if (typeof value === "number" && !UNITLESS_STYLE.has(key)) {
|
|
153
|
+
;
|
|
154
|
+
style[key] = value + "px";
|
|
155
|
+
} else {
|
|
156
|
+
;
|
|
157
|
+
style[key] = "" + value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
var UNITLESS_STYLE = /* @__PURE__ */ new Set([
|
|
161
|
+
"animationIterationCount",
|
|
162
|
+
"borderImageOutset",
|
|
163
|
+
"borderImageSlice",
|
|
164
|
+
"borderImageWidth",
|
|
165
|
+
"boxFlex",
|
|
166
|
+
"boxFlexGroup",
|
|
167
|
+
"boxOrdinalGroup",
|
|
168
|
+
"columnCount",
|
|
169
|
+
"columns",
|
|
170
|
+
"flex",
|
|
171
|
+
"flexGrow",
|
|
172
|
+
"flexPositive",
|
|
173
|
+
"flexShrink",
|
|
174
|
+
"flexNegative",
|
|
175
|
+
"flexOrder",
|
|
176
|
+
"gridArea",
|
|
177
|
+
"gridRow",
|
|
178
|
+
"gridRowEnd",
|
|
179
|
+
"gridRowSpan",
|
|
180
|
+
"gridRowStart",
|
|
181
|
+
"gridColumn",
|
|
182
|
+
"gridColumnEnd",
|
|
183
|
+
"gridColumnSpan",
|
|
184
|
+
"gridColumnStart",
|
|
185
|
+
"fontWeight",
|
|
186
|
+
"lineClamp",
|
|
187
|
+
"lineHeight",
|
|
188
|
+
"opacity",
|
|
189
|
+
"order",
|
|
190
|
+
"orphans",
|
|
191
|
+
"tabSize",
|
|
192
|
+
"widows",
|
|
193
|
+
"zIndex",
|
|
194
|
+
"zoom",
|
|
195
|
+
"fillOpacity",
|
|
196
|
+
"floodOpacity",
|
|
197
|
+
"stopOpacity",
|
|
198
|
+
"strokeDasharray",
|
|
199
|
+
"strokeDashoffset",
|
|
200
|
+
"strokeMiterlimit",
|
|
201
|
+
"strokeOpacity",
|
|
202
|
+
"strokeWidth"
|
|
203
|
+
]);
|
|
204
|
+
function setEventHandler(el, name, next, prev) {
|
|
205
|
+
if (next != null && typeof next !== "function") next = null;
|
|
206
|
+
const capture = name.endsWith("Capture");
|
|
207
|
+
const reactEventName = name.slice(2, capture ? -7 : void 0);
|
|
208
|
+
const eventName = domEventFor(reactEventName, el);
|
|
209
|
+
const handlers = el.__handlers ||= /* @__PURE__ */ Object.create(null);
|
|
210
|
+
const key = name;
|
|
211
|
+
const existing = handlers[key];
|
|
212
|
+
if (existing && !next) {
|
|
213
|
+
el.removeEventListener(existing.event, existing.listener, existing.capture);
|
|
214
|
+
handlers[key] = null;
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (!existing && next) {
|
|
218
|
+
const entry = {
|
|
219
|
+
current: next,
|
|
220
|
+
listener: null,
|
|
221
|
+
event: eventName,
|
|
222
|
+
capture
|
|
223
|
+
};
|
|
224
|
+
entry.listener = (e) => {
|
|
225
|
+
if (e.nativeEvent === void 0) e.nativeEvent = e;
|
|
226
|
+
entry.current(e);
|
|
227
|
+
};
|
|
228
|
+
handlers[key] = entry;
|
|
229
|
+
el.addEventListener(eventName, entry.listener, capture);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (existing) {
|
|
233
|
+
if (existing.event !== eventName || existing.capture !== capture) {
|
|
234
|
+
el.removeEventListener(existing.event, existing.listener, existing.capture);
|
|
235
|
+
existing.event = eventName;
|
|
236
|
+
existing.capture = capture;
|
|
237
|
+
el.addEventListener(eventName, existing.listener, capture);
|
|
238
|
+
}
|
|
239
|
+
existing.current = next;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function domEventFor(reactEventName, el) {
|
|
243
|
+
const lower = reactEventName.toLowerCase();
|
|
244
|
+
if (lower === "change") {
|
|
245
|
+
const tag = el.tagName;
|
|
246
|
+
if (tag === "TEXTAREA") return "input";
|
|
247
|
+
if (tag === "INPUT") {
|
|
248
|
+
const type = (el.type || "text").toLowerCase();
|
|
249
|
+
if (type !== "checkbox" && type !== "radio" && type !== "file") {
|
|
250
|
+
return "input";
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (lower === "doubleclick") return "dblclick";
|
|
255
|
+
return lower;
|
|
256
|
+
}
|
|
257
|
+
export {
|
|
258
|
+
createHostNode,
|
|
259
|
+
isSvgElement,
|
|
260
|
+
setProp
|
|
261
|
+
};
|
|
262
|
+
//# sourceMappingURL=dom.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/dom/dom.ts"],
|
|
4
|
+
"sourcesContent": ["const 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 'contentEditable',\n 'spellcheck',\n 'draggable',\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\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 (!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(name, '')\n else el.removeAttribute(name)\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(name)\n } else {\n el.setAttribute(name, '' + next)\n }\n return\n }\n }\n\n if (next == null || next === false) {\n el.removeAttribute(name)\n } else if (next === true) {\n el.setAttribute(name, '')\n } else {\n el.setAttribute(name, '' + 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": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drain the `window.$RE_q` event buffer that the inline runtime populated
|
|
3
|
+
* before the main bundle was parsed. For each buffered event, re-dispatch a
|
|
4
|
+
* synthesized event at the original target so handlers attached during
|
|
5
|
+
* hydration see it.
|
|
6
|
+
*
|
|
7
|
+
* Lossy by design: only the event type and target are preserved. Modifier
|
|
8
|
+
* keys, pointer positions, etc. are zeroed. This is acceptable because the
|
|
9
|
+
* replay window is a fraction of a second between shell render and full
|
|
10
|
+
* hydration of a streaming page; users who need pixel-accurate replay won't
|
|
11
|
+
* lose much beyond that.
|
|
12
|
+
*/
|
|
13
|
+
export declare function drainReplayQueue(): void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// packages/redact/src/dom/event-replay.ts
|
|
2
|
+
function drainReplayQueue() {
|
|
3
|
+
const g = globalThis;
|
|
4
|
+
const q = g.$RE_q;
|
|
5
|
+
if (!q) return;
|
|
6
|
+
if (typeof g.$RE_stop === "function") {
|
|
7
|
+
try {
|
|
8
|
+
g.$RE_stop();
|
|
9
|
+
} catch {
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const events = q.splice(0);
|
|
13
|
+
for (const [type, target] of events) {
|
|
14
|
+
try {
|
|
15
|
+
const ev = createEvent(type);
|
|
16
|
+
target.dispatchEvent(ev);
|
|
17
|
+
} catch {
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function createEvent(type) {
|
|
22
|
+
switch (type) {
|
|
23
|
+
case "click":
|
|
24
|
+
case "dblclick":
|
|
25
|
+
case "mousedown":
|
|
26
|
+
case "mouseup":
|
|
27
|
+
case "contextmenu":
|
|
28
|
+
return new MouseEvent(type, { bubbles: true, cancelable: true });
|
|
29
|
+
case "keydown":
|
|
30
|
+
case "keyup":
|
|
31
|
+
case "keypress":
|
|
32
|
+
return new KeyboardEvent(type, { bubbles: true, cancelable: true });
|
|
33
|
+
case "input":
|
|
34
|
+
return new InputEvent(type, { bubbles: true, cancelable: true });
|
|
35
|
+
case "submit":
|
|
36
|
+
case "change":
|
|
37
|
+
case "focus":
|
|
38
|
+
case "blur":
|
|
39
|
+
default:
|
|
40
|
+
return new Event(type, { bubbles: true, cancelable: true });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
drainReplayQueue
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=event-replay.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/dom/event-replay.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Drain the `window.$RE_q` event buffer that the inline runtime populated\n * before the main bundle was parsed. For each buffered event, re-dispatch a\n * synthesized event at the original target so handlers attached during\n * hydration see it.\n *\n * Lossy by design: only the event type and target are preserved. Modifier\n * keys, pointer positions, etc. are zeroed. This is acceptable because the\n * replay window is a fraction of a second between shell render and full\n * hydration of a streaming page; users who need pixel-accurate replay won't\n * lose much beyond that.\n */\nexport function drainReplayQueue(): void {\n const g = globalThis as any\n const q = g.$RE_q as Array<[string, EventTarget, number]> | undefined\n if (!q) return\n\n // Stop capturing before replaying so we don't re-capture what we dispatch.\n if (typeof g.$RE_stop === 'function') {\n try {\n g.$RE_stop()\n } catch {}\n }\n\n const events = q.splice(0)\n for (const [type, target] of events) {\n try {\n const ev = createEvent(type)\n target.dispatchEvent(ev)\n } catch {}\n }\n}\n\nfunction createEvent(type: string): Event {\n switch (type) {\n case 'click':\n case 'dblclick':\n case 'mousedown':\n case 'mouseup':\n case 'contextmenu':\n return new MouseEvent(type, { bubbles: true, cancelable: true })\n case 'keydown':\n case 'keyup':\n case 'keypress':\n return new KeyboardEvent(type, { bubbles: true, cancelable: true })\n case 'input':\n return new InputEvent(type, { bubbles: true, cancelable: true })\n case 'submit':\n case 'change':\n case 'focus':\n case 'blur':\n default:\n return new Event(type, { bubbles: true, cancelable: true })\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAYO,SAAS,mBAAyB;AACvC,QAAM,IAAI;AACV,QAAM,IAAI,EAAE;AACZ,MAAI,CAAC,EAAG;AAGR,MAAI,OAAO,EAAE,aAAa,YAAY;AACpC,QAAI;AACF,QAAE,SAAS;AAAA,IACb,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,QAAM,SAAS,EAAE,OAAO,CAAC;AACzB,aAAW,CAAC,MAAM,MAAM,KAAK,QAAQ;AACnC,QAAI;AACF,YAAM,KAAK,YAAY,IAAI;AAC3B,aAAO,cAAc,EAAE;AAAA,IACzB,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEA,SAAS,YAAY,MAAqB;AACxC,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,IAAI,WAAW,MAAM,EAAE,SAAS,MAAM,YAAY,KAAK,CAAC;AAAA,IACjE,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,IAAI,cAAc,MAAM,EAAE,SAAS,MAAM,YAAY,KAAK,CAAC;AAAA,IACpE,KAAK;AACH,aAAO,IAAI,WAAW,MAAM,EAAE,SAAS,MAAM,YAAY,KAAK,CAAC;AAAA,IACjE,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AACE,aAAO,IAAI,MAAM,MAAM,EAAE,SAAS,MAAM,YAAY,KAAK,CAAC;AAAA,EAC9D;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// packages/redact/src/dom/features/class/full.ts
|
|
2
|
+
import { FiberTag } from "../../../core";
|
|
3
|
+
import {
|
|
4
|
+
registerRenderer,
|
|
5
|
+
reconcileChildren,
|
|
6
|
+
childrenToArray,
|
|
7
|
+
scheduleUpdate,
|
|
8
|
+
scheduleLifecycle,
|
|
9
|
+
isThenable,
|
|
10
|
+
handleSuspended,
|
|
11
|
+
handleErrorInRender
|
|
12
|
+
} from "../../reconcile";
|
|
13
|
+
function renderClass(fiber, domParent, anchor) {
|
|
14
|
+
const Ctor = fiber.type;
|
|
15
|
+
let instance = fiber.stateNode;
|
|
16
|
+
const props = fiber.pendingProps ?? {};
|
|
17
|
+
const isNew = !instance;
|
|
18
|
+
const ctxValue = Ctor.contextType ? Ctor.contextType._currentValue : void 0;
|
|
19
|
+
if (isNew) {
|
|
20
|
+
instance = new Ctor(props, ctxValue);
|
|
21
|
+
instance.props = props;
|
|
22
|
+
instance.context = ctxValue;
|
|
23
|
+
instance._fiber = fiber;
|
|
24
|
+
instance._enqueueUpdate = (updater, cb) => {
|
|
25
|
+
const next = typeof updater === "function" ? updater(instance.state, instance.props) : updater;
|
|
26
|
+
if (next != null) instance.state = { ...instance.state, ...next };
|
|
27
|
+
if (cb) {
|
|
28
|
+
fiber.cleanups ||= [];
|
|
29
|
+
fiber.cleanups.push(cb);
|
|
30
|
+
}
|
|
31
|
+
scheduleUpdate(fiber);
|
|
32
|
+
};
|
|
33
|
+
instance._forceUpdate = (cb) => {
|
|
34
|
+
if (cb) {
|
|
35
|
+
fiber.cleanups ||= [];
|
|
36
|
+
fiber.cleanups.push(cb);
|
|
37
|
+
}
|
|
38
|
+
scheduleUpdate(fiber);
|
|
39
|
+
};
|
|
40
|
+
fiber.stateNode = instance;
|
|
41
|
+
if (Ctor.getDerivedStateFromProps) {
|
|
42
|
+
const d = Ctor.getDerivedStateFromProps(props, instance.state);
|
|
43
|
+
if (d) instance.state = { ...instance.state, ...d };
|
|
44
|
+
}
|
|
45
|
+
} else {
|
|
46
|
+
const prevProps = instance.props;
|
|
47
|
+
const prevState = instance.state;
|
|
48
|
+
instance.context = ctxValue;
|
|
49
|
+
if (Ctor.getDerivedStateFromProps) {
|
|
50
|
+
const d = Ctor.getDerivedStateFromProps(props, instance.state);
|
|
51
|
+
if (d) instance.state = { ...instance.state, ...d };
|
|
52
|
+
}
|
|
53
|
+
if (instance.shouldComponentUpdate) {
|
|
54
|
+
if (!instance.shouldComponentUpdate(props, instance.state, instance.context)) {
|
|
55
|
+
instance.props = props;
|
|
56
|
+
fiber.memoizedProps = props;
|
|
57
|
+
if (fiber.memoizedState?.rendered) {
|
|
58
|
+
reconcileChildren(fiber, childrenToArray(fiber.memoizedState.rendered), domParent, anchor);
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
instance.props = props;
|
|
64
|
+
fiber.memoizedState = { ...fiber.memoizedState ?? {}, prevProps, prevState };
|
|
65
|
+
}
|
|
66
|
+
let rendered;
|
|
67
|
+
try {
|
|
68
|
+
rendered = instance.render();
|
|
69
|
+
} catch (e) {
|
|
70
|
+
if (isThenable(e)) {
|
|
71
|
+
handleSuspended(fiber, e);
|
|
72
|
+
rendered = null;
|
|
73
|
+
} else {
|
|
74
|
+
handleErrorInRender(fiber, e);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
fiber.memoizedState = { ...fiber.memoizedState ?? {}, rendered };
|
|
79
|
+
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
80
|
+
fiber.memoizedProps = props;
|
|
81
|
+
if (isNew) {
|
|
82
|
+
if (instance.componentDidMount) {
|
|
83
|
+
scheduleLifecycle(fiber, () => instance.componentDidMount());
|
|
84
|
+
}
|
|
85
|
+
} else if (instance.componentDidUpdate) {
|
|
86
|
+
const { prevProps, prevState } = fiber.memoizedState ?? {};
|
|
87
|
+
scheduleLifecycle(fiber, () => instance.componentDidUpdate(prevProps, prevState));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
registerRenderer(FiberTag.Class, renderClass);
|
|
91
|
+
//# sourceMappingURL=full.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/class/full.ts"],
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport {\n registerRenderer,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n scheduleLifecycle,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\n\nfunction renderClass(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const Ctor = fiber.type as any\n let instance = fiber.stateNode\n const props = fiber.pendingProps ?? {}\n const isNew = !instance\n\n // Class contextType: read the current value of the subscribed context so\n // `this.context` reflects the nearest Provider. Evaluated every render.\n const ctxValue = Ctor.contextType ? Ctor.contextType._currentValue : undefined\n\n if (isNew) {\n instance = new Ctor(props, ctxValue)\n instance.props = props\n instance.context = ctxValue\n instance._fiber = fiber\n instance._enqueueUpdate = (updater: any, cb?: () => void) => {\n const next = typeof updater === 'function' ? updater(instance.state, instance.props) : updater\n if (next != null) instance.state = { ...instance.state, ...next }\n if (cb) {\n fiber.cleanups ||= []\n fiber.cleanups.push(cb)\n }\n scheduleUpdate(fiber)\n }\n instance._forceUpdate = (cb?: () => void) => {\n if (cb) {\n fiber.cleanups ||= []\n fiber.cleanups.push(cb)\n }\n scheduleUpdate(fiber)\n }\n fiber.stateNode = instance\n if (Ctor.getDerivedStateFromProps) {\n const d = Ctor.getDerivedStateFromProps(props, instance.state)\n if (d) instance.state = { ...instance.state, ...d }\n }\n } else {\n const prevProps = instance.props\n const prevState = instance.state\n // Refresh context on every render \u2014 Providers higher up may have changed.\n instance.context = ctxValue\n if (Ctor.getDerivedStateFromProps) {\n const d = Ctor.getDerivedStateFromProps(props, instance.state)\n if (d) instance.state = { ...instance.state, ...d }\n }\n if (instance.shouldComponentUpdate) {\n if (!instance.shouldComponentUpdate(props, instance.state, instance.context)) {\n instance.props = props\n fiber.memoizedProps = props\n // Still need to render children with previous output\n if (fiber.memoizedState?.rendered) {\n reconcileChildren(fiber, childrenToArray(fiber.memoizedState.rendered), domParent, anchor)\n }\n return\n }\n }\n instance.props = props\n // New snapshot must win over any stale one from a previous render \u2014\n // otherwise componentDidUpdate keeps seeing the original props and can\n // ping-pong setState forever.\n fiber.memoizedState = { ...(fiber.memoizedState ?? {}), prevProps, prevState }\n }\n\n let rendered: ReactNode\n try {\n rendered = instance.render()\n } catch (e: any) {\n if (isThenable(e)) {\n handleSuspended(fiber, e)\n rendered = null\n } else {\n handleErrorInRender(fiber, e)\n return\n }\n }\n fiber.memoizedState = { ...(fiber.memoizedState ?? {}), rendered }\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.memoizedProps = props\n\n // Schedule lifecycle\n if (isNew) {\n if (instance.componentDidMount) {\n scheduleLifecycle(fiber, () => instance.componentDidMount())\n }\n } else if (instance.componentDidUpdate) {\n const { prevProps, prevState } = fiber.memoizedState ?? {}\n scheduleLifecycle(fiber, () => instance.componentDidUpdate(prevProps, prevState))\n }\n}\n\nregisterRenderer(FiberTag.Class, renderClass)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4C;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,YAAY,OAAc,WAAiB,QAA2B;AAC7E,QAAM,OAAO,MAAM;AACnB,MAAI,WAAW,MAAM;AACrB,QAAM,QAAQ,MAAM,gBAAgB,CAAC;AACrC,QAAM,QAAQ,CAAC;AAIf,QAAM,WAAW,KAAK,cAAc,KAAK,YAAY,gBAAgB;AAErE,MAAI,OAAO;AACT,eAAW,IAAI,KAAK,OAAO,QAAQ;AACnC,aAAS,QAAQ;AACjB,aAAS,UAAU;AACnB,aAAS,SAAS;AAClB,aAAS,iBAAiB,CAAC,SAAc,OAAoB;AAC3D,YAAM,OAAO,OAAO,YAAY,aAAa,QAAQ,SAAS,OAAO,SAAS,KAAK,IAAI;AACvF,UAAI,QAAQ,KAAM,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,KAAK;AAChE,UAAI,IAAI;AACN,cAAM,aAAa,CAAC;AACpB,cAAM,SAAS,KAAK,EAAE;AAAA,MACxB;AACA,qBAAe,KAAK;AAAA,IACtB;AACA,aAAS,eAAe,CAAC,OAAoB;AAC3C,UAAI,IAAI;AACN,cAAM,aAAa,CAAC;AACpB,cAAM,SAAS,KAAK,EAAE;AAAA,MACxB;AACA,qBAAe,KAAK;AAAA,IACtB;AACA,UAAM,YAAY;AAClB,QAAI,KAAK,0BAA0B;AACjC,YAAM,IAAI,KAAK,yBAAyB,OAAO,SAAS,KAAK;AAC7D,UAAI,EAAG,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,EAAE;AAAA,IACpD;AAAA,EACF,OAAO;AACL,UAAM,YAAY,SAAS;AAC3B,UAAM,YAAY,SAAS;AAE3B,aAAS,UAAU;AACnB,QAAI,KAAK,0BAA0B;AACjC,YAAM,IAAI,KAAK,yBAAyB,OAAO,SAAS,KAAK;AAC7D,UAAI,EAAG,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,EAAE;AAAA,IACpD;AACA,QAAI,SAAS,uBAAuB;AAClC,UAAI,CAAC,SAAS,sBAAsB,OAAO,SAAS,OAAO,SAAS,OAAO,GAAG;AAC5E,iBAAS,QAAQ;AACjB,cAAM,gBAAgB;AAEtB,YAAI,MAAM,eAAe,UAAU;AACjC,4BAAkB,OAAO,gBAAgB,MAAM,cAAc,QAAQ,GAAG,WAAW,MAAM;AAAA,QAC3F;AACA;AAAA,MACF;AAAA,IACF;AACA,aAAS,QAAQ;AAIjB,UAAM,gBAAgB,EAAE,GAAI,MAAM,iBAAiB,CAAC,GAAI,WAAW,UAAU;AAAA,EAC/E;AAEA,MAAI;AACJ,MAAI;AACF,eAAW,SAAS,OAAO;AAAA,EAC7B,SAAS,GAAQ;AACf,QAAI,WAAW,CAAC,GAAG;AACjB,sBAAgB,OAAO,CAAC;AACxB,iBAAW;AAAA,IACb,OAAO;AACL,0BAAoB,OAAO,CAAC;AAC5B;AAAA,IACF;AAAA,EACF;AACA,QAAM,gBAAgB,EAAE,GAAI,MAAM,iBAAiB,CAAC,GAAI,SAAS;AAEjE,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,gBAAgB;AAGtB,MAAI,OAAO;AACT,QAAI,SAAS,mBAAmB;AAC9B,wBAAkB,OAAO,MAAM,SAAS,kBAAkB,CAAC;AAAA,IAC7D;AAAA,EACF,WAAW,SAAS,oBAAoB;AACtC,UAAM,EAAE,WAAW,UAAU,IAAI,MAAM,iBAAiB,CAAC;AACzD,sBAAkB,OAAO,MAAM,SAAS,mBAAmB,WAAW,SAAS,CAAC;AAAA,EAClF;AACF;AAEA,iBAAiB,SAAS,OAAO,WAAW;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './full';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// packages/redact/src/dom/features/class/stub.ts
|
|
2
|
+
import { FiberTag } from "../../../core";
|
|
3
|
+
import {
|
|
4
|
+
registerRenderer,
|
|
5
|
+
reconcileChildren,
|
|
6
|
+
childrenToArray,
|
|
7
|
+
scheduleUpdate,
|
|
8
|
+
isThenable,
|
|
9
|
+
handleSuspended,
|
|
10
|
+
handleErrorInRender
|
|
11
|
+
} from "../../reconcile";
|
|
12
|
+
function renderClassStub(fiber, domParent, anchor) {
|
|
13
|
+
const Ctor = fiber.type;
|
|
14
|
+
let instance = fiber.stateNode;
|
|
15
|
+
const props = fiber.pendingProps ?? {};
|
|
16
|
+
if (!instance) {
|
|
17
|
+
instance = new Ctor(props, void 0);
|
|
18
|
+
instance.props = props;
|
|
19
|
+
instance._fiber = fiber;
|
|
20
|
+
instance._enqueueUpdate = (updater, cb) => {
|
|
21
|
+
const next = typeof updater === "function" ? updater(instance.state, instance.props) : updater;
|
|
22
|
+
if (next != null) instance.state = { ...instance.state, ...next };
|
|
23
|
+
if (cb) {
|
|
24
|
+
fiber.cleanups ||= [];
|
|
25
|
+
fiber.cleanups.push(cb);
|
|
26
|
+
}
|
|
27
|
+
scheduleUpdate(fiber);
|
|
28
|
+
};
|
|
29
|
+
instance._forceUpdate = instance._enqueueUpdate;
|
|
30
|
+
fiber.stateNode = instance;
|
|
31
|
+
} else {
|
|
32
|
+
instance.props = props;
|
|
33
|
+
}
|
|
34
|
+
let rendered;
|
|
35
|
+
try {
|
|
36
|
+
rendered = instance.render();
|
|
37
|
+
} catch (e) {
|
|
38
|
+
if (isThenable(e)) {
|
|
39
|
+
handleSuspended(fiber, e);
|
|
40
|
+
rendered = null;
|
|
41
|
+
} else {
|
|
42
|
+
handleErrorInRender(fiber, e);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
47
|
+
fiber.memoizedProps = props;
|
|
48
|
+
}
|
|
49
|
+
registerRenderer(FiberTag.Class, renderClassStub);
|
|
50
|
+
//# sourceMappingURL=stub.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/class/stub.ts"],
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber, type ReactNode } from '../../../core'\nimport {\n registerRenderer,\n reconcileChildren,\n childrenToArray,\n scheduleUpdate,\n isThenable,\n handleSuspended,\n handleErrorInRender,\n} from '../../reconcile'\n\n// Stub: Class feature disabled. Class components still render \u2014 they're\n// detected by `type.prototype.isReactComponent` in the reconciler regardless \u2014\n// but ONLY the core contract is honored: constructor, `render()`, and\n// `setState` triggering a re-render. Dropped from this stub:\n// - `contextType` (this.context is always undefined)\n// - `getDerivedStateFromProps`\n// - `shouldComponentUpdate`\n// - `componentDidMount` / `componentDidUpdate` / `componentWillUnmount`\n// - `getDerivedStateFromError` / `componentDidCatch` (error boundaries)\n// Apps that actually need these should keep the feature on. Apps that just\n// have a handful of legacy class components that do `render() + setState`\n// still work, and save ~400 B min / ~200 B gz.\nfunction renderClassStub(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const Ctor = fiber.type as any\n let instance = fiber.stateNode\n const props = fiber.pendingProps ?? {}\n\n if (!instance) {\n instance = new Ctor(props, undefined)\n instance.props = props\n instance._fiber = fiber\n instance._enqueueUpdate = (updater: any, cb?: () => void) => {\n const next = typeof updater === 'function' ? updater(instance.state, instance.props) : updater\n if (next != null) instance.state = { ...instance.state, ...next }\n if (cb) {\n fiber.cleanups ||= []\n fiber.cleanups.push(cb)\n }\n scheduleUpdate(fiber)\n }\n instance._forceUpdate = instance._enqueueUpdate\n fiber.stateNode = instance\n } else {\n instance.props = props\n }\n\n let rendered: ReactNode\n try {\n rendered = instance.render()\n } catch (e: any) {\n if (isThenable(e)) {\n handleSuspended(fiber, e)\n rendered = null\n } else {\n handleErrorInRender(fiber, e)\n return\n }\n }\n\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.memoizedProps = props\n}\n\nregisterRenderer(FiberTag.Class, renderClassStub)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4C;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,SAAS,gBAAgB,OAAc,WAAiB,QAA2B;AACjF,QAAM,OAAO,MAAM;AACnB,MAAI,WAAW,MAAM;AACrB,QAAM,QAAQ,MAAM,gBAAgB,CAAC;AAErC,MAAI,CAAC,UAAU;AACb,eAAW,IAAI,KAAK,OAAO,MAAS;AACpC,aAAS,QAAQ;AACjB,aAAS,SAAS;AAClB,aAAS,iBAAiB,CAAC,SAAc,OAAoB;AAC3D,YAAM,OAAO,OAAO,YAAY,aAAa,QAAQ,SAAS,OAAO,SAAS,KAAK,IAAI;AACvF,UAAI,QAAQ,KAAM,UAAS,QAAQ,EAAE,GAAG,SAAS,OAAO,GAAG,KAAK;AAChE,UAAI,IAAI;AACN,cAAM,aAAa,CAAC;AACpB,cAAM,SAAS,KAAK,EAAE;AAAA,MACxB;AACA,qBAAe,KAAK;AAAA,IACtB;AACA,aAAS,eAAe,SAAS;AACjC,UAAM,YAAY;AAAA,EACpB,OAAO;AACL,aAAS,QAAQ;AAAA,EACnB;AAEA,MAAI;AACJ,MAAI;AACF,eAAW,SAAS,OAAO;AAAA,EAC7B,SAAS,GAAQ;AACf,QAAI,WAAW,CAAC,GAAG;AACjB,sBAAgB,OAAO,CAAC;AACxB,iBAAW;AAAA,IACb,OAAO;AACL,0BAAoB,OAAO,CAAC;AAC5B;AAAA,IACF;AAAA,EACF;AAEA,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,gBAAgB;AACxB;AAEA,iBAAiB,SAAS,OAAO,eAAe;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// packages/redact/src/dom/features/context/full.ts
|
|
2
|
+
import { FiberTag } from "../../../core";
|
|
3
|
+
import { REACT_PROVIDER_TYPE, REACT_CONSUMER_TYPE } from "../../../react";
|
|
4
|
+
import {
|
|
5
|
+
registerRenderer,
|
|
6
|
+
registerTypeMatcher,
|
|
7
|
+
installCapability,
|
|
8
|
+
reconcileChildren,
|
|
9
|
+
childrenToArray
|
|
10
|
+
} from "../../reconcile";
|
|
11
|
+
function realReadContext(fiber, ctx) {
|
|
12
|
+
let p = fiber.parent;
|
|
13
|
+
while (p) {
|
|
14
|
+
if (p.tag === FiberTag.Provider && p.type._context === ctx) {
|
|
15
|
+
return (p.pendingProps ?? p.memoizedProps)?.value;
|
|
16
|
+
}
|
|
17
|
+
p = p.parent;
|
|
18
|
+
}
|
|
19
|
+
return ctx._currentValue;
|
|
20
|
+
}
|
|
21
|
+
function renderProvider(fiber, domParent, anchor) {
|
|
22
|
+
const ctx = fiber.type._context;
|
|
23
|
+
const props = fiber.pendingProps ?? {};
|
|
24
|
+
const prevValue = ctx._currentValue;
|
|
25
|
+
ctx._currentValue = props.value;
|
|
26
|
+
try {
|
|
27
|
+
reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor);
|
|
28
|
+
} finally {
|
|
29
|
+
ctx._currentValue = prevValue;
|
|
30
|
+
}
|
|
31
|
+
fiber.memoizedState = props.value;
|
|
32
|
+
fiber.memoizedProps = props;
|
|
33
|
+
}
|
|
34
|
+
function renderConsumer(fiber, domParent, anchor) {
|
|
35
|
+
const ctx = fiber.type._context;
|
|
36
|
+
const props = fiber.pendingProps ?? {};
|
|
37
|
+
const children = props.children;
|
|
38
|
+
const value = realReadContext(fiber, ctx);
|
|
39
|
+
const rendered = typeof children === "function" ? children(value) : null;
|
|
40
|
+
reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor);
|
|
41
|
+
fiber.memoizedProps = props;
|
|
42
|
+
}
|
|
43
|
+
registerTypeMatcher(
|
|
44
|
+
(_type, marker) => marker === REACT_PROVIDER_TYPE ? FiberTag.Provider : marker === REACT_CONSUMER_TYPE ? FiberTag.Consumer : null
|
|
45
|
+
);
|
|
46
|
+
registerRenderer(FiberTag.Provider, renderProvider);
|
|
47
|
+
registerRenderer(FiberTag.Consumer, renderConsumer);
|
|
48
|
+
installCapability("readContext", realReadContext);
|
|
49
|
+
//# sourceMappingURL=full.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/dom/features/context/full.ts"],
|
|
4
|
+
"sourcesContent": ["import { FiberTag, type Fiber } from '../../../core'\nimport { REACT_PROVIDER_TYPE, REACT_CONSUMER_TYPE } from '../../../react'\nimport {\n registerRenderer,\n registerTypeMatcher,\n installCapability,\n reconcileChildren,\n childrenToArray,\n} from '../../reconcile'\n\nfunction realReadContext(fiber: Fiber, ctx: any): any {\n let p: Fiber | null = fiber.parent\n while (p) {\n if (p.tag === FiberTag.Provider && (p.type as any)._context === ctx) {\n return (p.pendingProps ?? p.memoizedProps)?.value\n }\n p = p.parent\n }\n return ctx._currentValue\n}\n\nfunction renderProvider(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const ctx = (fiber.type as any)._context\n const props = fiber.pendingProps ?? {}\n const prevValue = ctx._currentValue\n ctx._currentValue = props.value\n try {\n reconcileChildren(fiber, childrenToArray(props.children), domParent, anchor)\n } finally {\n ctx._currentValue = prevValue\n }\n // Also store the value on the fiber so descendants rendering later (via updates)\n // can read through by walking up.\n fiber.memoizedState = props.value\n fiber.memoizedProps = props\n}\n\nfunction renderConsumer(fiber: Fiber, domParent: Node, anchor: Node | null): void {\n const ctx = (fiber.type as any)._context\n const props = fiber.pendingProps ?? {}\n const children = props.children\n const value = realReadContext(fiber, ctx)\n const rendered = typeof children === 'function' ? children(value) : null\n reconcileChildren(fiber, childrenToArray(rendered), domParent, anchor)\n fiber.memoizedProps = props\n}\n\nregisterTypeMatcher((_type, marker) =>\n marker === REACT_PROVIDER_TYPE\n ? FiberTag.Provider\n : marker === REACT_CONSUMER_TYPE\n ? FiberTag.Consumer\n : null,\n)\nregisterRenderer(FiberTag.Provider, renderProvider)\nregisterRenderer(FiberTag.Consumer, renderConsumer)\ninstallCapability('readContext', realReadContext)\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,gBAA4B;AACrC,SAAS,qBAAqB,2BAA2B;AACzD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAgB,OAAc,KAAe;AACpD,MAAI,IAAkB,MAAM;AAC5B,SAAO,GAAG;AACR,QAAI,EAAE,QAAQ,SAAS,YAAa,EAAE,KAAa,aAAa,KAAK;AACnE,cAAQ,EAAE,gBAAgB,EAAE,gBAAgB;AAAA,IAC9C;AACA,QAAI,EAAE;AAAA,EACR;AACA,SAAO,IAAI;AACb;AAEA,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,MAAO,MAAM,KAAa;AAChC,QAAM,QAAQ,MAAM,gBAAgB,CAAC;AACrC,QAAM,YAAY,IAAI;AACtB,MAAI,gBAAgB,MAAM;AAC1B,MAAI;AACF,sBAAkB,OAAO,gBAAgB,MAAM,QAAQ,GAAG,WAAW,MAAM;AAAA,EAC7E,UAAE;AACA,QAAI,gBAAgB;AAAA,EACtB;AAGA,QAAM,gBAAgB,MAAM;AAC5B,QAAM,gBAAgB;AACxB;AAEA,SAAS,eAAe,OAAc,WAAiB,QAA2B;AAChF,QAAM,MAAO,MAAM,KAAa;AAChC,QAAM,QAAQ,MAAM,gBAAgB,CAAC;AACrC,QAAM,WAAW,MAAM;AACvB,QAAM,QAAQ,gBAAgB,OAAO,GAAG;AACxC,QAAM,WAAW,OAAO,aAAa,aAAa,SAAS,KAAK,IAAI;AACpE,oBAAkB,OAAO,gBAAgB,QAAQ,GAAG,WAAW,MAAM;AACrE,QAAM,gBAAgB;AACxB;AAEA;AAAA,EAAoB,CAAC,OAAO,WAC1B,WAAW,sBACP,SAAS,WACT,WAAW,sBACT,SAAS,WACT;AACR;AACA,iBAAiB,SAAS,UAAU,cAAc;AAClD,iBAAiB,SAAS,UAAU,cAAc;AAClD,kBAAkB,eAAe,eAAe;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './full';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|