@simpreact/simpreact 0.0.5 → 0.0.6
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/LICENSE.txt +1 -1
- package/compat/context.d.ts +4 -4
- package/compat/context.js +3 -2
- package/compat/core.d.ts +4 -0
- package/compat/core.js +9 -5
- package/compat/dom.d.ts +4 -5
- package/compat/dom.js +3 -2
- package/compat/hooks.d.ts +16 -13
- package/compat/hooks.js +19 -15
- package/compat/index.d.ts +10 -9
- package/compat/renderRuntime.d.ts +2 -0
- package/compat/renderRuntime.js +14 -0
- package/component/index.d.ts +16 -0
- package/component/index.js +164 -0
- package/context/index.d.ts +12 -5
- package/context/index.js +62 -57
- package/core/createElement.d.ts +29 -20
- package/core/createElement.js +159 -133
- package/core/hostAdapter.d.ts +8 -12
- package/core/hostAdapter.js +1 -4
- package/core/hostOperations.d.ts +5 -0
- package/core/hostOperations.js +15 -0
- package/core/index.d.ts +29 -6
- package/core/internal.d.ts +3 -0
- package/core/internal.js +3 -0
- package/core/lifecycleEventBus.d.ts +15 -6
- package/core/lifecycleEventBus.js +16 -2
- package/core/memo.d.ts +0 -2
- package/core/memo.js +1 -3
- package/core/mounting.d.ts +7 -9
- package/core/mounting.js +221 -79
- package/core/patching.d.ts +7 -8
- package/core/patching.js +235 -252
- package/core/patchingChildren.d.ts +6 -0
- package/core/patchingChildren.js +330 -0
- package/core/portal.d.ts +1 -1
- package/core/portal.js +17 -7
- package/core/processStack.d.ts +69 -0
- package/core/processStack.js +63 -0
- package/core/ref.d.ts +4 -3
- package/core/rerender.d.ts +4 -14
- package/core/rerender.js +67 -112
- package/core/runtime.d.ts +17 -0
- package/core/runtime.js +2 -0
- package/core/unmounting.d.ts +11 -6
- package/core/unmounting.js +81 -40
- package/core/utils.d.ts +10 -0
- package/core/utils.js +143 -0
- package/dom/attach-element-to-dom.d.ts +4 -3
- package/dom/attach-element-to-dom.js +12 -7
- package/dom/domAdapter.js +22 -25
- package/dom/events.d.ts +5 -5
- package/dom/events.js +33 -16
- package/dom/index.d.ts +16 -5
- package/dom/index.js +4 -3
- package/dom/props/controlled/index.d.ts +3 -3
- package/dom/props/controlled/index.js +8 -8
- package/dom/props/controlled/input.d.ts +3 -3
- package/dom/props/controlled/input.js +57 -34
- package/dom/props/controlled/select.d.ts +3 -3
- package/dom/props/controlled/select.js +39 -26
- package/dom/props/controlled/textarea.d.ts +3 -3
- package/dom/props/controlled/textarea.js +57 -34
- package/dom/props/dangerInnerHTML.d.ts +2 -2
- package/dom/props/dangerInnerHTML.js +3 -2
- package/dom/props/props.d.ts +4 -4
- package/dom/props/props.js +24 -21
- package/dom/render.d.ts +4 -5
- package/dom/render.js +38 -34
- package/hooks/index.d.ts +15 -13
- package/hooks/index.js +153 -157
- package/jsx-runtime/index.d.ts +2 -1
- package/package.json +9 -1
- package/shared/index.d.ts +10 -0
- package/shared/index.js +4 -7
- package/shared/utils.js +4 -4
- package/shared/EventBus.d.ts +0 -18
- package/shared/EventBus.js +0 -28
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { SIMP_ELEMENT_CHILD_FLAG_ELEMENT, SIMP_ELEMENT_CHILD_FLAG_LIST, SIMP_ELEMENT_CHILD_FLAG_TEXT, SIMP_ELEMENT_FLAG_FRAGMENT, } from './createElement.js';
|
|
2
|
+
import { _pushHostOperationPlaceElement } from './hostOperations.js';
|
|
3
|
+
import { _pushMountArrayChildrenFrame, _pushMountEnterFrame } from './mounting.js';
|
|
4
|
+
import { _pushPatchEnterFrame } from './patching.js';
|
|
5
|
+
import { PATCH_CHILDREN, PATCH_KEYED_CHILDREN } from './processStack.js';
|
|
6
|
+
import { _clearElementHostReference, _pushUnmountArrayChildrenFrame, _pushUnmountEnterFrame, _remove, } from './unmounting.js';
|
|
7
|
+
import { getLongestIncreasingSubsequenceIndexes } from './utils.js';
|
|
8
|
+
export function _pushPatchChildrenFrame(element, meta) {
|
|
9
|
+
meta.renderRuntime.renderStack.push({
|
|
10
|
+
node: element,
|
|
11
|
+
kind: PATCH_CHILDREN,
|
|
12
|
+
meta,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export function _pushPatchKeyedChildrenFrame(element, meta) {
|
|
16
|
+
meta.renderRuntime.renderStack.push({
|
|
17
|
+
node: element,
|
|
18
|
+
kind: PATCH_KEYED_CHILDREN,
|
|
19
|
+
meta,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function _patchChildren(frame) {
|
|
23
|
+
const nextElement = frame.node;
|
|
24
|
+
const { renderRuntime, rightSibling, parentReference, context, hostNamespace, placeHolderElement, prevElement } = frame.meta;
|
|
25
|
+
const nextChildFlag = nextElement.childFlag;
|
|
26
|
+
const prevChildFlag = prevElement.childFlag;
|
|
27
|
+
let nextChildren = nextElement.children;
|
|
28
|
+
let prevChildren = prevElement.children;
|
|
29
|
+
switch (prevChildFlag) {
|
|
30
|
+
case SIMP_ELEMENT_CHILD_FLAG_LIST: {
|
|
31
|
+
switch (nextChildFlag) {
|
|
32
|
+
case SIMP_ELEMENT_CHILD_FLAG_LIST: {
|
|
33
|
+
for (const child of nextChildren) {
|
|
34
|
+
child.parent = nextElement;
|
|
35
|
+
}
|
|
36
|
+
_pushPatchKeyedChildrenFrame(frame.node, {
|
|
37
|
+
prevElement,
|
|
38
|
+
context,
|
|
39
|
+
parentReference,
|
|
40
|
+
rightSibling,
|
|
41
|
+
hostNamespace,
|
|
42
|
+
placeHolderElement,
|
|
43
|
+
renderRuntime,
|
|
44
|
+
});
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case SIMP_ELEMENT_CHILD_FLAG_ELEMENT: {
|
|
48
|
+
if (prevElement.flag & SIMP_ELEMENT_FLAG_FRAGMENT) {
|
|
49
|
+
_clearElementHostReference(prevElement, parentReference, renderRuntime);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
renderRuntime.hostAdapter.clearNode(parentReference);
|
|
53
|
+
}
|
|
54
|
+
_pushMountEnterFrame(nextChildren, {
|
|
55
|
+
parentReference,
|
|
56
|
+
rightSibling,
|
|
57
|
+
context,
|
|
58
|
+
hostNamespace,
|
|
59
|
+
renderRuntime,
|
|
60
|
+
placeHolderElement: null,
|
|
61
|
+
});
|
|
62
|
+
_pushUnmountArrayChildrenFrame(prevElement, renderRuntime);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case SIMP_ELEMENT_CHILD_FLAG_TEXT: {
|
|
66
|
+
_pushUnmountArrayChildrenFrame(prevElement, renderRuntime);
|
|
67
|
+
renderRuntime.hostAdapter.setTextContent(parentReference, nextElement.props?.children);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
default: {
|
|
71
|
+
_pushUnmountArrayChildrenFrame(prevElement, renderRuntime);
|
|
72
|
+
renderRuntime.hostAdapter.clearNode(parentReference);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case SIMP_ELEMENT_CHILD_FLAG_ELEMENT: {
|
|
78
|
+
switch (nextChildFlag) {
|
|
79
|
+
case SIMP_ELEMENT_CHILD_FLAG_LIST: {
|
|
80
|
+
_pushUnmountEnterFrame(prevChildren, renderRuntime);
|
|
81
|
+
_pushMountArrayChildrenFrame(nextElement, {
|
|
82
|
+
parentReference,
|
|
83
|
+
renderRuntime,
|
|
84
|
+
rightSibling,
|
|
85
|
+
context,
|
|
86
|
+
hostNamespace,
|
|
87
|
+
placeHolderElement: null,
|
|
88
|
+
});
|
|
89
|
+
_clearElementHostReference(prevChildren, parentReference, renderRuntime);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case SIMP_ELEMENT_CHILD_FLAG_ELEMENT: {
|
|
93
|
+
nextChildren.parent = nextElement;
|
|
94
|
+
_pushPatchEnterFrame(nextChildren, {
|
|
95
|
+
prevElement: prevChildren,
|
|
96
|
+
parentReference,
|
|
97
|
+
renderRuntime,
|
|
98
|
+
rightSibling,
|
|
99
|
+
context,
|
|
100
|
+
hostNamespace,
|
|
101
|
+
placeHolderElement: null,
|
|
102
|
+
});
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case SIMP_ELEMENT_CHILD_FLAG_TEXT: {
|
|
106
|
+
_pushUnmountArrayChildrenFrame(prevElement, renderRuntime);
|
|
107
|
+
renderRuntime.hostAdapter.setTextContent(parentReference, nextElement.props?.children);
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
default: {
|
|
111
|
+
_remove(prevChildren, parentReference, renderRuntime);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case SIMP_ELEMENT_CHILD_FLAG_TEXT: {
|
|
117
|
+
switch (nextChildFlag) {
|
|
118
|
+
case SIMP_ELEMENT_CHILD_FLAG_LIST: {
|
|
119
|
+
renderRuntime.hostAdapter.clearNode(parentReference);
|
|
120
|
+
_pushMountArrayChildrenFrame(nextElement, {
|
|
121
|
+
parentReference,
|
|
122
|
+
renderRuntime,
|
|
123
|
+
rightSibling,
|
|
124
|
+
context,
|
|
125
|
+
hostNamespace,
|
|
126
|
+
placeHolderElement: null,
|
|
127
|
+
});
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case SIMP_ELEMENT_CHILD_FLAG_ELEMENT: {
|
|
131
|
+
renderRuntime.hostAdapter.clearNode(parentReference);
|
|
132
|
+
nextChildren.parent = nextElement;
|
|
133
|
+
_pushMountEnterFrame(nextChildren, {
|
|
134
|
+
parentReference,
|
|
135
|
+
rightSibling,
|
|
136
|
+
context,
|
|
137
|
+
hostNamespace,
|
|
138
|
+
renderRuntime,
|
|
139
|
+
placeHolderElement: null,
|
|
140
|
+
});
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case SIMP_ELEMENT_CHILD_FLAG_TEXT: {
|
|
144
|
+
prevChildren = prevElement.props?.children;
|
|
145
|
+
nextChildren = nextElement.props?.children;
|
|
146
|
+
if (prevChildren !== nextChildren) {
|
|
147
|
+
renderRuntime.hostAdapter.setTextContent(parentReference, nextChildren, true);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
default: {
|
|
154
|
+
switch (nextChildFlag) {
|
|
155
|
+
case SIMP_ELEMENT_CHILD_FLAG_LIST: {
|
|
156
|
+
_pushMountArrayChildrenFrame(nextElement, {
|
|
157
|
+
parentReference,
|
|
158
|
+
rightSibling,
|
|
159
|
+
context,
|
|
160
|
+
hostNamespace,
|
|
161
|
+
renderRuntime,
|
|
162
|
+
placeHolderElement: null,
|
|
163
|
+
});
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case SIMP_ELEMENT_CHILD_FLAG_ELEMENT: {
|
|
167
|
+
nextChildren.parent = nextElement;
|
|
168
|
+
_pushMountEnterFrame(nextChildren, {
|
|
169
|
+
parentReference,
|
|
170
|
+
rightSibling,
|
|
171
|
+
context,
|
|
172
|
+
hostNamespace,
|
|
173
|
+
renderRuntime,
|
|
174
|
+
placeHolderElement: null,
|
|
175
|
+
});
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case SIMP_ELEMENT_CHILD_FLAG_TEXT: {
|
|
179
|
+
renderRuntime.hostAdapter.setTextContent(parentReference, nextElement.props?.children);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export function _patchKeyedChildren(frame) {
|
|
186
|
+
const { node: nextElement, meta } = frame;
|
|
187
|
+
const { renderRuntime, parentReference, prevElement, context, hostNamespace } = meta;
|
|
188
|
+
const nextChildren = nextElement.children;
|
|
189
|
+
const prevChildren = prevElement.children;
|
|
190
|
+
const nextLen = nextChildren.length;
|
|
191
|
+
const prevLen = prevChildren.length;
|
|
192
|
+
const base = {
|
|
193
|
+
parentReference,
|
|
194
|
+
renderRuntime,
|
|
195
|
+
context,
|
|
196
|
+
hostNamespace,
|
|
197
|
+
placeHolderElement: null,
|
|
198
|
+
};
|
|
199
|
+
const getRightSibling = (child) => {
|
|
200
|
+
return nextChildren[child.index + 1] ?? null;
|
|
201
|
+
};
|
|
202
|
+
let prevStart = 0;
|
|
203
|
+
let nextStart = 0;
|
|
204
|
+
let prevEnd = prevLen - 1;
|
|
205
|
+
let nextEnd = nextLen - 1;
|
|
206
|
+
while (prevStart <= prevEnd &&
|
|
207
|
+
nextStart <= nextEnd &&
|
|
208
|
+
prevChildren[prevStart].key === nextChildren[nextStart].key) {
|
|
209
|
+
prevStart++;
|
|
210
|
+
nextStart++;
|
|
211
|
+
}
|
|
212
|
+
while (prevStart <= prevEnd && nextStart <= nextEnd && prevChildren[prevEnd].key === nextChildren[nextEnd].key) {
|
|
213
|
+
prevEnd--;
|
|
214
|
+
nextEnd--;
|
|
215
|
+
}
|
|
216
|
+
const pushPrefixPatches = () => {
|
|
217
|
+
for (let i = 0; i < nextStart; i++) {
|
|
218
|
+
const nextChild = nextChildren[i];
|
|
219
|
+
const prevChild = prevChildren[nextChild.index];
|
|
220
|
+
_pushPatchEnterFrame(nextChild, {
|
|
221
|
+
...base,
|
|
222
|
+
prevElement: prevChild,
|
|
223
|
+
rightSibling: getRightSibling(nextChild),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
const pushSuffixPatches = () => {
|
|
228
|
+
const delta = nextLen - prevLen;
|
|
229
|
+
for (let i = nextEnd + 1; i < nextLen; i++) {
|
|
230
|
+
const nextChild = nextChildren[i];
|
|
231
|
+
const prevChild = prevChildren[nextChild.index - delta];
|
|
232
|
+
_pushPatchEnterFrame(nextChild, {
|
|
233
|
+
...base,
|
|
234
|
+
prevElement: prevChild,
|
|
235
|
+
rightSibling: getRightSibling(nextChild),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
if (nextStart > nextEnd) {
|
|
240
|
+
pushPrefixPatches();
|
|
241
|
+
for (let i = prevStart; i <= prevEnd; i++) {
|
|
242
|
+
_remove(prevChildren[i], parentReference, renderRuntime);
|
|
243
|
+
}
|
|
244
|
+
pushSuffixPatches();
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (prevStart > prevEnd) {
|
|
248
|
+
pushPrefixPatches();
|
|
249
|
+
for (let i = nextStart; i <= nextEnd; i++) {
|
|
250
|
+
const nextChild = nextChildren[i];
|
|
251
|
+
_pushMountEnterFrame(nextChild, {
|
|
252
|
+
...base,
|
|
253
|
+
rightSibling: getRightSibling(nextChild),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
pushSuffixPatches();
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const keyToPrevChild = new Map();
|
|
260
|
+
for (let i = prevStart; i <= prevEnd; i++) {
|
|
261
|
+
const prevChild = prevChildren[i];
|
|
262
|
+
const key = prevChild.key;
|
|
263
|
+
if (key != null) {
|
|
264
|
+
keyToPrevChild.set(key, prevChild);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
const middleLen = nextEnd - nextStart + 1;
|
|
268
|
+
const newIndexToOldIndex = new Int32Array(middleLen);
|
|
269
|
+
let moved = false;
|
|
270
|
+
let maxPrevIndexSoFar = -1;
|
|
271
|
+
for (let i = nextStart; i <= nextEnd; i++) {
|
|
272
|
+
const nextChild = nextChildren[i];
|
|
273
|
+
const prevChild = keyToPrevChild.get(nextChild.key);
|
|
274
|
+
if (prevChild != null) {
|
|
275
|
+
const prevIndex = prevChild.index;
|
|
276
|
+
newIndexToOldIndex[nextChild.index - nextStart] = prevIndex + 1;
|
|
277
|
+
if (prevIndex < maxPrevIndexSoFar) {
|
|
278
|
+
moved = true;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
maxPrevIndexSoFar = prevIndex;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
pushPrefixPatches();
|
|
286
|
+
const matchedPrev = new Uint8Array(prevEnd - prevStart + 1);
|
|
287
|
+
for (let i = 0; i < middleLen; i++) {
|
|
288
|
+
const oldIndex = newIndexToOldIndex[i];
|
|
289
|
+
if (oldIndex !== 0) {
|
|
290
|
+
matchedPrev[oldIndex - 1 - prevStart] = 1;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
for (let i = prevStart; i <= prevEnd; i++) {
|
|
294
|
+
if (!matchedPrev[i - prevStart]) {
|
|
295
|
+
_remove(prevChildren[i], parentReference, renderRuntime);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
const stableNewIndexes = moved ? getLongestIncreasingSubsequenceIndexes(newIndexToOldIndex) : new Int32Array(0);
|
|
299
|
+
let stableCursor = 0;
|
|
300
|
+
for (let i = nextStart; i <= nextEnd; i++) {
|
|
301
|
+
const nextChild = nextChildren[i];
|
|
302
|
+
const newIndex = nextChild.index - nextStart;
|
|
303
|
+
const oldIndex = newIndexToOldIndex[newIndex];
|
|
304
|
+
if (oldIndex === 0) {
|
|
305
|
+
_pushMountEnterFrame(nextChild, {
|
|
306
|
+
...base,
|
|
307
|
+
rightSibling: getRightSibling(nextChild),
|
|
308
|
+
});
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
const prevChild = prevChildren[oldIndex - 1];
|
|
312
|
+
const isStable = moved && stableNewIndexes[stableCursor] === newIndex;
|
|
313
|
+
if (isStable) {
|
|
314
|
+
stableCursor++;
|
|
315
|
+
}
|
|
316
|
+
else if (moved) {
|
|
317
|
+
_pushHostOperationPlaceElement(nextChild, {
|
|
318
|
+
parentReference,
|
|
319
|
+
renderRuntime,
|
|
320
|
+
rightSibling: getRightSibling(nextChild),
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
_pushPatchEnterFrame(nextChild, {
|
|
324
|
+
...base,
|
|
325
|
+
prevElement: prevChild,
|
|
326
|
+
rightSibling: null,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
pushSuffixPatches();
|
|
330
|
+
}
|
package/core/portal.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SimpElement, type SimpNode } from './createElement.js';
|
|
2
2
|
export declare function createPortal(children: SimpNode, container: any): SimpElement;
|
package/core/portal.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { normalizeRoot } from './createElement.js';
|
|
1
|
+
import { normalizeRoot, SIMP_ELEMENT_CHILD_FLAG_UNKNOWN, SIMP_ELEMENT_FLAG_PORTAL, } from './createElement.js';
|
|
2
2
|
export function createPortal(children, container) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
return normalizeRoot({
|
|
4
|
+
flag: SIMP_ELEMENT_FLAG_PORTAL,
|
|
5
|
+
childFlag: SIMP_ELEMENT_CHILD_FLAG_UNKNOWN,
|
|
6
|
+
parent: null,
|
|
7
|
+
key: null,
|
|
8
|
+
type: null,
|
|
9
|
+
props: null,
|
|
10
|
+
children: null,
|
|
11
|
+
className: null,
|
|
12
|
+
reference: null,
|
|
13
|
+
store: null,
|
|
14
|
+
context: null,
|
|
15
|
+
ref: container,
|
|
16
|
+
unmounted: null,
|
|
17
|
+
index: 0,
|
|
18
|
+
}, children, false);
|
|
9
19
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Maybe, Nullable } from '../shared/index.js';
|
|
2
|
+
import type { SimpElement } from './createElement.js';
|
|
3
|
+
import type { SimpRenderRuntime } from './runtime.js';
|
|
4
|
+
export declare const MOUNT_ENTER = 1;
|
|
5
|
+
export declare const MOUNT_EXIT = 2;
|
|
6
|
+
export declare const PATCH_ENTER = 3;
|
|
7
|
+
export declare const PATCH_EXIT = 4;
|
|
8
|
+
export declare const PATCH_CHILDREN = 5;
|
|
9
|
+
export declare const PATCH_KEYED_CHILDREN = 6;
|
|
10
|
+
export declare const UNMOUNT_ENTER = 7;
|
|
11
|
+
export declare const UNMOUNT_EXIT = 8;
|
|
12
|
+
export declare const HOST_OPS_PLACE_ELEMENT_BEFORE_ANCHOR = 9;
|
|
13
|
+
export declare const HOST_OPS_REPLACE_CHILD = 10;
|
|
14
|
+
export interface MountFrameMeta {
|
|
15
|
+
parentReference: unknown;
|
|
16
|
+
rightSibling: Nullable<SimpElement>;
|
|
17
|
+
context: unknown;
|
|
18
|
+
hostNamespace: Maybe<string>;
|
|
19
|
+
renderRuntime: SimpRenderRuntime;
|
|
20
|
+
placeHolderElement: Nullable<SimpElement>;
|
|
21
|
+
}
|
|
22
|
+
export interface PatchFrameMeta extends MountFrameMeta {
|
|
23
|
+
prevElement: SimpElement;
|
|
24
|
+
}
|
|
25
|
+
export interface UnmountFrameMeta {
|
|
26
|
+
renderRuntime: SimpRenderRuntime;
|
|
27
|
+
}
|
|
28
|
+
export interface PlaceElementFrameMeta {
|
|
29
|
+
parentReference: unknown;
|
|
30
|
+
rightSibling: Nullable<SimpElement>;
|
|
31
|
+
renderRuntime: SimpRenderRuntime;
|
|
32
|
+
}
|
|
33
|
+
export interface ReplaceElementFrameMeta {
|
|
34
|
+
parentReference: unknown;
|
|
35
|
+
prevElement: SimpElement;
|
|
36
|
+
}
|
|
37
|
+
export interface MountFrame {
|
|
38
|
+
node: SimpElement;
|
|
39
|
+
kind: typeof MOUNT_ENTER | typeof MOUNT_EXIT;
|
|
40
|
+
meta: MountFrameMeta;
|
|
41
|
+
}
|
|
42
|
+
export interface PatchFrame {
|
|
43
|
+
node: SimpElement;
|
|
44
|
+
kind: typeof PATCH_ENTER | typeof PATCH_EXIT;
|
|
45
|
+
meta: PatchFrameMeta;
|
|
46
|
+
}
|
|
47
|
+
export interface PatchChildrenFrame {
|
|
48
|
+
node: SimpElement;
|
|
49
|
+
kind: typeof PATCH_CHILDREN | typeof PATCH_KEYED_CHILDREN;
|
|
50
|
+
meta: PatchFrameMeta;
|
|
51
|
+
}
|
|
52
|
+
export interface UnmountFrame {
|
|
53
|
+
node: SimpElement;
|
|
54
|
+
kind: typeof UNMOUNT_ENTER | typeof UNMOUNT_EXIT;
|
|
55
|
+
meta: UnmountFrameMeta;
|
|
56
|
+
}
|
|
57
|
+
export interface PlaceElementFrame {
|
|
58
|
+
node: SimpElement;
|
|
59
|
+
kind: typeof HOST_OPS_PLACE_ELEMENT_BEFORE_ANCHOR;
|
|
60
|
+
meta: PlaceElementFrameMeta;
|
|
61
|
+
}
|
|
62
|
+
export interface ReplaceElementFrame {
|
|
63
|
+
node: SimpElement;
|
|
64
|
+
kind: typeof HOST_OPS_REPLACE_CHILD;
|
|
65
|
+
meta: ReplaceElementFrameMeta;
|
|
66
|
+
}
|
|
67
|
+
export type SimpRenderFrame = MountFrame | PatchFrame | PatchChildrenFrame | UnmountFrame | PlaceElementFrame | ReplaceElementFrame;
|
|
68
|
+
export type SimpRenderStack = SimpRenderFrame[];
|
|
69
|
+
export declare function processStack(renderRuntime: SimpRenderRuntime): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { _mount } from './mounting.js';
|
|
2
|
+
import { _patch } from './patching.js';
|
|
3
|
+
import { _patchChildren, _patchKeyedChildren } from './patchingChildren.js';
|
|
4
|
+
import { _unmount } from './unmounting.js';
|
|
5
|
+
import { placeElementBeforeAnchor, resolveAnchorReference } from './utils.js';
|
|
6
|
+
export const MOUNT_ENTER = 1;
|
|
7
|
+
export const MOUNT_EXIT = 2;
|
|
8
|
+
export const PATCH_ENTER = 3;
|
|
9
|
+
export const PATCH_EXIT = 4;
|
|
10
|
+
export const PATCH_CHILDREN = 5;
|
|
11
|
+
export const PATCH_KEYED_CHILDREN = 6;
|
|
12
|
+
export const UNMOUNT_ENTER = 7;
|
|
13
|
+
export const UNMOUNT_EXIT = 8;
|
|
14
|
+
export const HOST_OPS_PLACE_ELEMENT_BEFORE_ANCHOR = 9;
|
|
15
|
+
export const HOST_OPS_REPLACE_CHILD = 10;
|
|
16
|
+
export function processStack(renderRuntime) {
|
|
17
|
+
const stack = renderRuntime.renderStack;
|
|
18
|
+
while (stack.length > 0) {
|
|
19
|
+
const frame = stack.pop();
|
|
20
|
+
switch (frame.kind) {
|
|
21
|
+
case MOUNT_ENTER: {
|
|
22
|
+
_mount(frame);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case MOUNT_EXIT: {
|
|
26
|
+
_mount(frame);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case PATCH_ENTER: {
|
|
30
|
+
_patch(frame);
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
case PATCH_EXIT: {
|
|
34
|
+
_patch(frame);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case PATCH_CHILDREN: {
|
|
38
|
+
_patchChildren(frame);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case PATCH_KEYED_CHILDREN: {
|
|
42
|
+
_patchKeyedChildren(frame);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case UNMOUNT_ENTER: {
|
|
46
|
+
_unmount(frame);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case UNMOUNT_EXIT: {
|
|
50
|
+
_unmount(frame);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case HOST_OPS_PLACE_ELEMENT_BEFORE_ANCHOR: {
|
|
54
|
+
const anchor = resolveAnchorReference(frame.meta.rightSibling);
|
|
55
|
+
placeElementBeforeAnchor(frame.node, anchor, frame.meta.parentReference, renderRuntime);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case HOST_OPS_REPLACE_CHILD: {
|
|
59
|
+
renderRuntime.hostAdapter.replaceChild(frame.meta.parentReference, frame.node.reference, frame.meta.prevElement.reference);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
package/core/ref.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { Nullable } from '../shared/index.js';
|
|
1
2
|
import type { SimpElement } from './createElement.js';
|
|
2
3
|
interface RefSimpElement extends SimpElement {
|
|
3
|
-
ref
|
|
4
|
+
ref: Nullable<{
|
|
4
5
|
value: NonNullable<Ref<unknown>>;
|
|
5
|
-
cleanup
|
|
6
|
-
}
|
|
6
|
+
cleanup: Nullable<() => void>;
|
|
7
|
+
}>;
|
|
7
8
|
}
|
|
8
9
|
export type RefObject<T> = {
|
|
9
10
|
current: T;
|
package/core/rerender.d.ts
CHANGED
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
_elementStores: Set<SimpElementStore>;
|
|
6
|
-
_last: SimpElementStore | undefined;
|
|
7
|
-
_track(element: SimpElementStore): void;
|
|
8
|
-
_untrack(element: SimpElementStore): void;
|
|
9
|
-
lock(): void;
|
|
10
|
-
flush(): void;
|
|
11
|
-
}
|
|
12
|
-
export declare const batchingRerenderLocker: IRendererLocker;
|
|
13
|
-
export declare const renderingRerenderLocker: IRendererLocker;
|
|
14
|
-
export {};
|
|
1
|
+
import type { SimpElementStore } from './createElement.js';
|
|
2
|
+
import type { SimpRenderRuntime } from './runtime.js';
|
|
3
|
+
export declare function rerender(store: SimpElementStore, renderRuntime: SimpRenderRuntime): void;
|
|
4
|
+
export declare function withSyncRerender(renderRuntime: SimpRenderRuntime, callback: () => void): void;
|