lithent 0.37.0 → 1.0.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/README.md +7 -7
- package/dist/hook/mountCallback.d.ts +3 -1
- package/dist/hook/ref.d.ts +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/lithent.mjs +31 -19
- package/dist/lithent.mjs.map +1 -1
- package/dist/lithent.umd.js +1 -1
- package/dist/lithent.umd.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/utils/predicator.d.ts +1 -0
- package/dist/utils/universalRef.d.ts +0 -9
- package/examples/dist/assets/index.2b484d3b.js +2 -0
- package/examples/dist/assets/index.2b484d3b.js.map +1 -0
- package/examples/dist/index.html +1 -1
- package/package.json +11 -5
- package/src/hook/mountCallback.ts +11 -4
- package/src/hook/ref.ts +1 -0
- package/src/hook/updateCallback.ts +1 -9
- package/src/index.ts +11 -2
- package/src/render.ts +12 -10
- package/src/{examples → tests}/callback.tsx +0 -1
- package/src/tests/example1.tsx +75 -0
- package/src/tests/example10.tsx +90 -0
- package/src/tests/example11.tsx +82 -0
- package/src/tests/example12.tsx +76 -0
- package/src/tests/example13.tsx +59 -0
- package/src/tests/example14.tsx +115 -0
- package/src/tests/example15.tsx +68 -0
- package/src/tests/example16.tsx +49 -0
- package/src/tests/example17.tsx +50 -0
- package/src/tests/example2.tsx +104 -0
- package/src/tests/example3.tsx +96 -0
- package/src/tests/example4.tsx +138 -0
- package/src/tests/example5.tsx +63 -0
- package/src/tests/example6.tsx +54 -0
- package/src/tests/example7.tsx +21 -0
- package/src/tests/example8.tsx +68 -0
- package/src/tests/example9.tsx +46 -0
- package/src/tests/renew.tsx +56 -0
- package/src/types/index.ts +12 -13
- package/src/utils/predicator.ts +3 -0
- package/src/utils/universalRef.ts +14 -9
- package/examples/dist/assets/index.b6b5ca4e.js +0 -2
- package/examples/dist/assets/index.b6b5ca4e.js.map +0 -1
- package/src/examples/renew.tsx +0 -29
- /package/src/{examples → tests}/insert.tsx +0 -0
- /package/src/{examples → tests}/loop.tsx +0 -0
- /package/src/{examples → tests}/nested.tsx +0 -0
- /package/src/{examples → tests}/selectbox.tsx +0 -0
- /package/src/{examples → tests}/svg.tsx +0 -0
- /package/src/{examples → tests}/textarea.tsx +0 -0
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ used lightly in a variety of situations.
|
|
|
9
9
|
- https://superlucky84.github.io/lithent
|
|
10
10
|
- (This guide page is written in lithent.)
|
|
11
11
|
|
|
12
|
-
`(9.
|
|
12
|
+
`(9.62 KiB / gzip: 3.58 KiB)`
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
## 🚩 Table of Contents
|
|
@@ -60,10 +60,10 @@ pnpm add lithent
|
|
|
60
60
|
|
|
61
61
|
#### Or Use CDN
|
|
62
62
|
|
|
63
|
-
* UMD : https://cdn.jsdelivr.net/npm/lithent@0.
|
|
64
|
-
* UMD-HELPER: https://cdn.jsdelivr.net/npm/lithent@0.
|
|
65
|
-
* ESM : https://cdn.jsdelivr.net/npm/lithent@0.
|
|
66
|
-
* ESM-HELPER: https://cdn.jsdelivr.net/npm/lithent@0.
|
|
63
|
+
* UMD : https://cdn.jsdelivr.net/npm/lithent@1.0.0/dist/lithent.umd.js
|
|
64
|
+
* UMD-HELPER: https://cdn.jsdelivr.net/npm/lithent@1.0.0/helper/dist/lithentHelper.umd.js
|
|
65
|
+
* ESM : https://cdn.jsdelivr.net/npm/lithent@1.0.0/dist/lithent.mjs
|
|
66
|
+
* ESM-HELPER: https://cdn.jsdelivr.net/npm/lithent@1.0.0/helper/dist/lithentHelper.mjs
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
It's easier to use lithent with JSX or HTM.
|
|
@@ -121,8 +121,8 @@ render(html`<${Component} />`, document.getElementById('root'));
|
|
|
121
121
|
#### With UMD
|
|
122
122
|
|
|
123
123
|
```html
|
|
124
|
-
<script src="https://cdn.jsdelivr.net/npm/lithent@0.
|
|
125
|
-
<!--script src="https://cdn.jsdelivr.net/npm/lithent@0.
|
|
124
|
+
<script src="https://cdn.jsdelivr.net/npm/lithent@1.0.0/dist/lithent.umd.js"></script>
|
|
125
|
+
<!--script src="https://cdn.jsdelivr.net/npm/lithent@1.0.0/helper/dist/lithentHelper.umd.js"></script-->
|
|
126
126
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/htm/3.1.1/htm.js"></script>
|
|
127
127
|
|
|
128
128
|
<div id="root"></div>
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { WDom } from '../types';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const execMountedQueue: () => void;
|
|
3
|
+
export declare const addMountedQueue: (wDom: WDom) => void;
|
|
4
|
+
export declare const mountCallback: (effectAction: () => void) => number;
|
|
3
5
|
export declare const runMountedQueueFromWDom: (newWDom: WDom) => void;
|
package/dist/hook/ref.d.ts
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { h, Fragment, mount } from './wDom';
|
|
|
2
2
|
import { render } from './render';
|
|
3
3
|
import { mountCallback } from './hook/mountCallback';
|
|
4
4
|
import { updateCallback } from './hook/updateCallback';
|
|
5
|
-
import { ref } from './hook/ref';
|
|
5
|
+
import { ref, nextTick } from './hook/ref';
|
|
6
6
|
export type { WDom, TagFunction, TagFunctionResolver, FragmentFunction, ComponentSubKey, ComponentRef, Props, Renew, MiddleStateWDomChildren, MiddleStateWDom, NodePointer, Param, } from './types';
|
|
7
7
|
declare global {
|
|
8
8
|
namespace JSX {
|
|
@@ -11,4 +11,4 @@ declare global {
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
-
export { h, Fragment, render, mount, mountCallback, updateCallback, ref };
|
|
14
|
+
export { h, Fragment, render, mount, mountCallback, updateCallback, ref, nextTick, };
|
package/dist/lithent.mjs
CHANGED
|
@@ -13,6 +13,7 @@ const checkNormalTypeElement = (newWDom, originalWDom) => {
|
|
|
13
13
|
var _a, _b;
|
|
14
14
|
return checkPlainWDomType(newWDom) && (originalWDom == null ? void 0 : originalWDom.type) === newWDom.type && (((_a = originalWDom == null ? void 0 : originalWDom.children) == null ? void 0 : _a.length) === ((_b = newWDom == null ? void 0 : newWDom.children) == null ? void 0 : _b.length) || newWDom.type === "loop");
|
|
15
15
|
};
|
|
16
|
+
const checkVirtualType = (type) => type && ["fragment", "loop"].includes(type);
|
|
16
17
|
const checkCustemComponentFunction = (target) => typeof target === "function" && !checkFragmentFunction(target) || typeof target === "object" && "resolve" in target;
|
|
17
18
|
const checkFragmentFunction = (target) => typeof target === "function" && target === Fragment;
|
|
18
19
|
const checkEmptyElement = (wDom) => checkPlainWDomType(wDom) && !wDom.type;
|
|
@@ -82,12 +83,12 @@ const updateChildren = (children, infoChidren) => {
|
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
};
|
|
86
|
+
let redrawQueue = [];
|
|
87
|
+
let redrawQueueTimeout = false;
|
|
85
88
|
const xmlnsRef = { value: "" };
|
|
86
89
|
const componentKeyRef = { value: {} };
|
|
87
90
|
const needDiffRef = { value: false };
|
|
88
91
|
const componentRef = /* @__PURE__ */ new WeakMap();
|
|
89
|
-
const redrawQueue = { value: [] };
|
|
90
|
-
const redrawQueueTimeout = { value: null };
|
|
91
92
|
const componentRender = (componentKey) => () => {
|
|
92
93
|
var _a;
|
|
93
94
|
const up = (_a = componentRef.get(componentKey)) == null ? void 0 : _a.up;
|
|
@@ -115,12 +116,13 @@ const getComponentKey = () => componentKeyRef.value;
|
|
|
115
116
|
const getComponentSubInfo = (componentKey, subKey) => componentRef.get(componentKey)[subKey];
|
|
116
117
|
const setRedrawAction = (componentKey, exec) => {
|
|
117
118
|
componentRef.get(componentKey).up = () => {
|
|
118
|
-
redrawQueue.
|
|
119
|
+
redrawQueue.push({
|
|
119
120
|
componentKey,
|
|
120
121
|
exec
|
|
121
122
|
});
|
|
122
|
-
if (!redrawQueueTimeout
|
|
123
|
-
redrawQueueTimeout
|
|
123
|
+
if (!redrawQueueTimeout) {
|
|
124
|
+
redrawQueueTimeout = true;
|
|
125
|
+
queueMicrotask(execRedrawQueue);
|
|
124
126
|
}
|
|
125
127
|
};
|
|
126
128
|
};
|
|
@@ -140,7 +142,7 @@ const recursiveGetChildKeys = (wDom, result) => {
|
|
|
140
142
|
};
|
|
141
143
|
const execRedrawQueue = () => {
|
|
142
144
|
let childItemList = [];
|
|
143
|
-
redrawQueue.
|
|
145
|
+
redrawQueue.forEach((item) => {
|
|
144
146
|
var _a, _b;
|
|
145
147
|
const childVd = (_b = (_a = componentRef.get(item.componentKey)) == null ? void 0 : _a.vd) == null ? void 0 : _b.value;
|
|
146
148
|
if (childVd) {
|
|
@@ -148,7 +150,7 @@ const execRedrawQueue = () => {
|
|
|
148
150
|
}
|
|
149
151
|
});
|
|
150
152
|
const addedKey = [];
|
|
151
|
-
const result = redrawQueue.
|
|
153
|
+
const result = redrawQueue.reduce((acc, item) => {
|
|
152
154
|
const { componentKey } = item;
|
|
153
155
|
if (childItemList.includes(componentKey) || addedKey.includes(componentKey)) {
|
|
154
156
|
return acc;
|
|
@@ -163,6 +165,8 @@ const execRedrawQueue = () => {
|
|
|
163
165
|
action.exec();
|
|
164
166
|
}
|
|
165
167
|
}
|
|
168
|
+
redrawQueue = [];
|
|
169
|
+
redrawQueueTimeout = false;
|
|
166
170
|
};
|
|
167
171
|
const unmount = (effectAction) => {
|
|
168
172
|
componentRef.get(getComponentKey()).umts.push(effectAction);
|
|
@@ -192,10 +196,17 @@ const removeItem = (componentKey) => {
|
|
|
192
196
|
componentRef.delete(componentKey);
|
|
193
197
|
}
|
|
194
198
|
};
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
199
|
+
let mountedQueue = [];
|
|
200
|
+
const execMountedQueue = () => {
|
|
201
|
+
mountedQueue.forEach((item) => runMountedQueueFromWDom(item));
|
|
202
|
+
mountedQueue = [];
|
|
198
203
|
};
|
|
204
|
+
const addMountedQueue = (wDom) => {
|
|
205
|
+
if (wDom.componentKey) {
|
|
206
|
+
mountedQueue.push(wDom);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
const mountCallback = (effectAction) => componentRef.get(getComponentKey()).mts.push(effectAction);
|
|
199
210
|
const runMountedQueueFromWDom = (newWDom) => {
|
|
200
211
|
const { componentKey } = newWDom;
|
|
201
212
|
if (componentKey) {
|
|
@@ -258,6 +269,7 @@ const render = (wDom, wrapElement, afterElement) => {
|
|
|
258
269
|
} else {
|
|
259
270
|
wrapElement.appendChild(Dom);
|
|
260
271
|
}
|
|
272
|
+
execMountedQueue();
|
|
261
273
|
return () => {
|
|
262
274
|
var _a;
|
|
263
275
|
const component = (_a = componentRef.get(wDom.componentProps || {})) == null ? void 0 : _a.vd.value;
|
|
@@ -345,9 +357,9 @@ const typeAdd = (newWDom, newElement) => {
|
|
|
345
357
|
} else {
|
|
346
358
|
parentEl.appendChild(newElement);
|
|
347
359
|
}
|
|
360
|
+
execMountedQueue();
|
|
348
361
|
}
|
|
349
362
|
}
|
|
350
|
-
runMountedQueueFromWDom(newWDom);
|
|
351
363
|
};
|
|
352
364
|
const startFindNextBrotherElement = (wDom, parentWDom) => {
|
|
353
365
|
const brothers = parentWDom.children || [];
|
|
@@ -359,7 +371,7 @@ const startFindNextBrotherElement = (wDom, parentWDom) => {
|
|
|
359
371
|
if (finedNextEl) {
|
|
360
372
|
return finedNextEl;
|
|
361
373
|
}
|
|
362
|
-
if (!parentWDom.isRoot &&
|
|
374
|
+
if (!parentWDom.isRoot && checkVirtualType(parentType)) {
|
|
363
375
|
return startFindNextBrotherElement(parentWDom, getParent(parentWDom));
|
|
364
376
|
} else if (parentWDom.isRoot && parentWDom.afterElement) {
|
|
365
377
|
return parentWDom.afterElement;
|
|
@@ -370,7 +382,7 @@ const findChildFragmentNextElement = (candidiateBrothers) => candidiateBrothers.
|
|
|
370
382
|
(targetEl, bItem) => {
|
|
371
383
|
const type = bItem.type;
|
|
372
384
|
const el = bItem.el;
|
|
373
|
-
const isFragment = type &&
|
|
385
|
+
const isFragment = type && checkVirtualType(type);
|
|
374
386
|
if (targetEl) {
|
|
375
387
|
return targetEl;
|
|
376
388
|
} else if (isFragment) {
|
|
@@ -394,9 +406,9 @@ const typeReplace = (newWDom) => {
|
|
|
394
406
|
if (parentElement) {
|
|
395
407
|
parentElement.replaceChild(newElement, orignalElement);
|
|
396
408
|
}
|
|
409
|
+
execMountedQueue();
|
|
397
410
|
}
|
|
398
411
|
}
|
|
399
|
-
runMountedQueueFromWDom(newWDom);
|
|
400
412
|
};
|
|
401
413
|
const removeEvent = (oldProps, element) => {
|
|
402
414
|
Object.entries(oldProps || {}).forEach(
|
|
@@ -487,7 +499,7 @@ const updateProps = (props, element, oldProps) => {
|
|
|
487
499
|
const wDomToDom = (wDom) => {
|
|
488
500
|
let element;
|
|
489
501
|
const { type, tag, text, props, children = [] } = wDom;
|
|
490
|
-
const isVirtualType = type
|
|
502
|
+
const isVirtualType = checkVirtualType(type);
|
|
491
503
|
if (tag === "svg") {
|
|
492
504
|
xmlnsRef.value = String(props == null ? void 0 : props.xmlns);
|
|
493
505
|
}
|
|
@@ -503,7 +515,7 @@ const wDomToDom = (wDom) => {
|
|
|
503
515
|
wDomChildrenToDom(children, element);
|
|
504
516
|
updateProps(props, element);
|
|
505
517
|
wDom.el = element;
|
|
506
|
-
|
|
518
|
+
addMountedQueue(wDom);
|
|
507
519
|
if (tag === "svg") {
|
|
508
520
|
xmlnsRef.value = "";
|
|
509
521
|
}
|
|
@@ -548,7 +560,7 @@ const updateStyle = (style, oldStyle, element) => {
|
|
|
548
560
|
}
|
|
549
561
|
};
|
|
550
562
|
const findRealParentElement = (vDom) => {
|
|
551
|
-
const isVirtualType = vDom.type
|
|
563
|
+
const isVirtualType = checkVirtualType(vDom.type);
|
|
552
564
|
if (vDom.isRoot && isVirtualType) {
|
|
553
565
|
return vDom.wrapElement;
|
|
554
566
|
}
|
|
@@ -678,8 +690,6 @@ const runUpdateCallback = () => {
|
|
|
678
690
|
if (updateReqs == null ? void 0 : updateReqs.length) {
|
|
679
691
|
updateReqs.forEach((callback) => callback());
|
|
680
692
|
}
|
|
681
|
-
redrawQueue.value = [];
|
|
682
|
-
redrawQueueTimeout.value = null;
|
|
683
693
|
};
|
|
684
694
|
const Fragment = (_props, ...children) => ({
|
|
685
695
|
type: "fragment",
|
|
@@ -818,11 +828,13 @@ const makeChildrenItem = (item) => {
|
|
|
818
828
|
return item;
|
|
819
829
|
};
|
|
820
830
|
const ref = (initValue) => ({ value: initValue });
|
|
831
|
+
const nextTick = () => Promise.resolve();
|
|
821
832
|
export {
|
|
822
833
|
Fragment,
|
|
823
834
|
h,
|
|
824
835
|
mount,
|
|
825
836
|
mountCallback,
|
|
837
|
+
nextTick,
|
|
826
838
|
ref,
|
|
827
839
|
render,
|
|
828
840
|
updateCallback
|
package/dist/lithent.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lithent.mjs","sources":["../src/utils/predicator.ts","../src/utils/index.ts","../src/utils/universalRef.ts","../src/hook/unmount.ts","../src/hook/mountCallback.ts","../src/hook/useUpdate.ts","../src/render.ts","../src/diff.ts","../src/hook/updateCallback.ts","../src/wDom.ts","../src/hook/ref.ts"],"sourcesContent":["import { Fragment } from '@/wDom';\nimport {\n WDom,\n TagFunction,\n TagFunctionResolver,\n FragmentFunction,\n WDomType,\n} from '@/types';\n\ntype WDomParam =\n | string\n | WDom\n | TagFunction\n | TagFunctionResolver\n | FragmentFunction;\n\n/**\n * Predicator\n */\n\nconst checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nconst checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nconst checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => newWDom.constructor === originalWDom?.constructor;\n\nconst checkSameFragment = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'fragment' &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkSameTagElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'element' &&\n originalWDom?.tag === newWDom.tag &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n (originalWDom?.children?.length === newWDom?.children?.length ||\n newWDom.type === 'loop');\n\nexport const checkCustemComponentFunction = (\n target: WDomParam\n): target is TagFunction | TagFunctionResolver =>\n (typeof target === 'function' && !checkFragmentFunction(target)) ||\n (typeof target === 'object' && 'resolve' in target);\n\nexport const checkFragmentFunction = (\n target: unknown\n): target is FragmentFunction =>\n typeof target === 'function' && target === Fragment;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkStyleData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is Record<string, string> =>\n dataKey === 'style' && typeof dataValue === 'object';\n\nexport const checkRefData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is {\n value: HTMLElement | Element | DocumentFragment | Text | undefined;\n} => dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const checkOptionElement = (element: any): element is HTMLElement =>\n element.nodeType === 1 && element.tagName === 'OPTION';\n\nexport const checkTextareaElement = (element: any): element is HTMLElement =>\n element.nodeType === 1 && element.tagName === 'TEXTAREA';\n\nexport const checkCheckableElement = (element: any): element is HTMLElement =>\n element.nodeType === 1 && ['radio', 'checkbox'].includes(element.type);\n\nexport const checkNormalAttribute = (\n dataValue: unknown\n): dataValue is number | string =>\n typeof dataValue === 'number' || typeof dataValue === 'string';\n\nexport const getWDomType = (\n wDom: WDom | TagFunction | TagFunctionResolver\n): WDomType => {\n let result: WDomType = 'et';\n\n if (checkCustemComponentFunction(wDom)) {\n result = 'c';\n } else if (checkPlainType(wDom, 'fragment')) {\n result = 'f';\n } else if (checkPlainType(wDom, 'element')) {\n result = 'e';\n } else if (checkPlainType(wDom, 'loop')) {\n result = 'l';\n } else if (checkPlainType(wDom, 'text')) {\n result = 't';\n } else if (checkEmptyElement(wDom)) {\n result = 'et';\n }\n\n return result;\n};\n\nexport const checkSameWDomWithOriginal = {\n c: checkSameCustomComponent,\n l: checkNormalTypeElement,\n t: checkNormalTypeElement,\n e: checkSameTagElement,\n f: checkSameFragment,\n et: checkNormalTypeElement,\n};\n","import { WDom, TagFunctionResolver, Props } from '@/types';\n\nexport const getParent = (vDom: WDom) => {\n const parentVDom = vDom.getParent && vDom.getParent();\n\n return parentVDom as WDom;\n};\n\nexport const reRender = (vDom: WDom, infoVdom: TagFunctionResolver) => {\n const { componentProps: props, componentChildren: children } = vDom;\n const { props: infoProps, children: infoChidren } = infoVdom;\n\n if (props) {\n updateProps(props, infoProps);\n }\n\n if (children) {\n updateChildren(children, infoChidren);\n }\n\n const newVDom = vDom.reRender && vDom.reRender();\n\n return newVDom as WDom;\n};\n\nexport const getEventName = (eventKey: string) =>\n eventKey.replace(/^on(.*)/, (_match, p1) => p1.toLowerCase());\n\nexport const getAttrKey = (keyName: string) =>\n keyName === 'className' ? 'class' : keyName;\n\nconst updateProps = (props: Props, infoProps: Props) => {\n if (props && infoProps !== props) {\n Object.keys(props).forEach(key => delete props[key]);\n\n Object.entries(infoProps || {}).forEach(\n ([key, value]) => (props[key] = value)\n );\n }\n};\n\nconst updateChildren = (children: WDom[], infoChidren: WDom[]) => {\n if (children && infoChidren !== children) {\n children.splice(0, children.length);\n\n if (infoChidren) {\n infoChidren.forEach(childrenItem => children.push(childrenItem));\n }\n }\n};\n","import { ComponentRef, ComponentSubKey, Props, WDom } from '@/types';\n\ntype RedrawQueueList = {\n componentKey: Props;\n exec: () => void;\n}[];\n\n/**\n * Common\n */\nexport const xmlnsRef: { value: string } = { value: '' };\nexport const componentKeyRef: { value: Props } = { value: {} };\nexport const needDiffRef: { value: boolean } = { value: false };\nexport const componentRef: ComponentRef = new WeakMap();\nexport const redrawQueue: {\n value: { componentKey: Props; exec: () => void }[];\n} = { value: [] };\nexport const redrawQueueTimeout: { value: null | number } = { value: null };\nexport const componentRender = (componentKey: Props) => () => {\n const up = componentRef.get(componentKey)?.up;\n let result = false;\n if (up) {\n up();\n result = true;\n }\n\n return result;\n};\n\nconst setComponetRef = (componentKey: Props) => {\n componentRef.set(componentKey, {\n vd: { value: null },\n up: () => {},\n upR: [],\n upS: { value: 0 },\n upD: [],\n upCB: [],\n mts: [],\n umts: [],\n });\n};\n\nexport const getComponentKey = () => componentKeyRef.value;\n\nexport const getComponentSubInfo = (\n componentKey: Props,\n subKey: ComponentSubKey\n) => componentRef.get(componentKey)![subKey];\n\nexport const setRedrawAction = (componentKey: Props, exec: () => void) => {\n componentRef.get(componentKey)!.up = () => {\n redrawQueue.value.push({\n componentKey,\n exec,\n });\n if (!redrawQueueTimeout.value) {\n redrawQueueTimeout.value = setTimeout(execRedrawQueue);\n }\n };\n};\n\nexport const initUpdateHookState = (componentKey: Props) =>\n (componentKeyRef.value = componentKey);\n\nexport const initMountHookState = (componentKey: Props) => {\n componentKeyRef.value = componentKey;\n setComponetRef(componentKey);\n};\n\nconst recursiveGetChildKeys = (wDom: WDom, result: Props[]) => {\n (wDom.children || []).forEach(item => {\n const childComKey = item.componentKey;\n if (childComKey) {\n result.push(childComKey);\n }\n\n recursiveGetChildKeys(item, result);\n });\n};\n\nconst execRedrawQueue = () => {\n let childItemList: Props[] = [];\n\n redrawQueue.value.forEach(item => {\n const childVd = componentRef.get(item.componentKey)?.vd?.value;\n if (childVd) {\n recursiveGetChildKeys(childVd, childItemList);\n }\n });\n\n const addedKey: Props[] = [];\n const result = redrawQueue.value.reduce((acc, item) => {\n const { componentKey } = item;\n\n if (\n childItemList.includes(componentKey) ||\n addedKey.includes(componentKey)\n ) {\n return acc;\n }\n\n addedKey.push(componentKey);\n acc.push(item);\n\n return acc;\n }, [] as RedrawQueueList);\n\n while (result.length) {\n const action = result.shift();\n if (action) {\n action.exec();\n }\n }\n};\n","import { WDom, Props } from '@/types';\nimport { componentRef, getComponentKey } from '@/utils/universalRef';\n\nexport const unmount = (effectAction: () => void) => {\n componentRef.get(getComponentKey())!.umts.push(effectAction);\n};\n\nexport const runUnmountQueueFromWDom = (newWDom: WDom) => {\n const { componentKey } = newWDom;\n\n if (componentKey) {\n removeItem(componentKey);\n }\n recursiveRunUnmount(newWDom);\n};\n\nconst recursiveRunUnmount = (wDom: WDom) => {\n (wDom.children || []).forEach(item => {\n const childComKey = item.componentKey;\n if (childComKey) {\n runUnmountQueueFromWDom(item);\n } else {\n recursiveRunUnmount(item);\n }\n });\n};\n\nconst removeItem = (componentKey: Props) => {\n const subInfo = componentRef.get(componentKey);\n if (subInfo) {\n subInfo!.umts.forEach(effect => effect());\n subInfo!.umts = [];\n componentRef.delete(componentKey);\n }\n};\n","import { WDom } from '@/types';\nimport {\n componentKeyRef,\n componentRef,\n getComponentKey,\n} from '@/utils/universalRef';\n\nimport { unmount } from '@/hook/unmount';\n\nexport const mountCallback = (effectAction: () => void) => {\n const mts = componentRef.get(getComponentKey())!.mts;\n\n mts.push(effectAction);\n};\n\nexport const runMountedQueueFromWDom = (newWDom: WDom) => {\n const { componentKey } = newWDom;\n\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component?.mts;\n const sequence = component?.upS;\n\n componentKeyRef.value = componentKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (queue) {\n component.mts = [];\n\n queue.forEach((effect: Function) => {\n const callback = effect();\n if (callback) {\n unmount(callback);\n }\n });\n }\n }\n};\n","import { WDom } from '@/types';\nimport {\n componentKeyRef,\n componentRef,\n getComponentKey,\n} from '@/utils/universalRef';\n\nexport const useUpdated = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const component = componentRef.get(getComponentKey());\n const { upD, upS } = component!;\n const def = upD[upS.value];\n\n if (def && checkNeedPushQueue(def, dependencies())) {\n const callback = effectAction();\n if (callback) {\n component!.upCB.push(callback);\n }\n }\n\n upD[upS.value] = dependencies();\n upS.value += 1;\n};\n\nexport const runUpdatedQueueFromWDom = (newWDom: WDom) => {\n const { componentKey } = newWDom;\n\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component?.upCB;\n const sequence = component?.upS;\n\n componentKeyRef.value = componentKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (newWDom.constructor && queue) {\n component.upCB = [];\n queue.forEach((effect: Function) => effect());\n }\n }\n};\n\nconst checkNeedPushQueue = (originalDefs: unknown[], newDefs: unknown[]) =>\n !originalDefs.length && !originalDefs.length\n ? true\n : originalDefs.some((def, index) => def !== newDefs[index]);\n","import { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkNormalAttribute,\n checkExisty,\n checkOptionElement,\n checkTextareaElement,\n checkCheckableElement,\n} from '@/utils/predicator';\n\nimport { componentRef, xmlnsRef } from '@/utils/universalRef';\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\nimport { runMountedQueueFromWDom } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent, getEventName, getAttrKey } from '@/utils';\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null\n) => {\n wrapElement ??= document.body;\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom);\n\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n\n return () => {\n const component = componentRef.get(wDom.componentProps || {})?.vd.value;\n if (component) {\n runUnmountQueueFromWDom(component);\n recursiveRemoveEvent(component);\n rootDelete(component);\n }\n };\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n ({\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n })[needRerender](newWDomTree);\n }\n};\n\nexport const recursiveRemoveEvent = (originalWDom: WDom) => {\n if (originalWDom.props && originalWDom.el) {\n removeEvent(originalWDom.props, originalWDom.el);\n }\n\n (originalWDom.children || []).forEach((childItem: WDom) => {\n recursiveRemoveEvent(childItem);\n });\n};\n\nconst rootDelete = (newWDom: WDom) => {\n deleteRealDom(newWDom, newWDom.wrapElement as HTMLElement);\n};\n\nconst typeDelete = (newWDom: WDom) => {\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\n deleteRealDom(\n newWDom,\n findRealParentElement(getParent(newWDom)) as HTMLElement\n );\n};\n\nconst deleteRealDom = (newWDom: WDom, parent: HTMLElement) => {\n if (parent && newWDom.el) {\n if (newWDom.el?.nodeType === 1) {\n parent.removeChild(newWDom.el);\n } else if (newWDom.el?.nodeType === 11) {\n findChildWithRemoveElement(newWDom, parent as HTMLElement);\n }\n delete newWDom.el;\n }\n};\n\nconst findChildWithRemoveElement = (newWDom: WDom, parent: HTMLElement) => {\n (newWDom?.oldChildren || newWDom?.children || []).forEach(item => {\n if (item.el?.nodeType === 1) {\n parent.removeChild(item?.el);\n } else if (item.el?.nodeType === 11) {\n findChildWithRemoveElement(item, parent);\n }\n });\n};\n\nconst typeSortedReplace = (newWDom: WDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom);\n};\n\nconst typeSortedUpdate = (newWDom: WDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom, newWDom.el);\n};\n\nconst typeAdd = (\n newWDom: WDom,\n newElement?: HTMLElement | DocumentFragment | Text\n) => {\n if (!newElement) {\n newElement = wDomToDom(newWDom) as HTMLElement;\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === 'loop';\n const nextEl = isLoop\n ? startFindNextBrotherElement(parentWDom, getParent(parentWDom))\n : startFindNextBrotherElement(newWDom, parentWDom);\n\n if (newElement && parentEl) {\n if (nextEl) {\n parentEl.insertBefore(newElement, nextEl);\n } else {\n parentEl.appendChild(newElement);\n }\n }\n }\n\n runMountedQueueFromWDom(newWDom);\n};\n\nconst startFindNextBrotherElement = (\n wDom: WDom,\n parentWDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const brothers = parentWDom.children || [];\n const index = brothers.indexOf(wDom);\n const nextIndex = index + 1;\n const candidiateBrothers = brothers.slice(nextIndex);\n\n const finedNextEl = findChildFragmentNextElement(candidiateBrothers);\n const parentType = parentWDom.type || '';\n\n if (finedNextEl) {\n return finedNextEl;\n }\n\n if (!parentWDom.isRoot && ['fragment', 'loop'].includes(parentType)) {\n return startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else if (parentWDom.isRoot && parentWDom.afterElement) {\n return parentWDom.afterElement;\n }\n\n return undefined;\n};\n\nconst findChildFragmentNextElement = (\n candidiateBrothers: WDom[]\n): HTMLElement | DocumentFragment | Text | undefined =>\n candidiateBrothers.reduce(\n (\n targetEl: HTMLElement | DocumentFragment | Text | undefined,\n bItem: WDom\n ) => {\n const type = bItem.type;\n const el = bItem.el;\n const isFragment = type && ['fragment', 'loop'].includes(type);\n\n if (targetEl) {\n return targetEl;\n } else if (isFragment) {\n return findChildFragmentNextElement(bItem.children || []);\n } else if (el && el.nodeType !== 11) {\n return el;\n }\n\n return targetEl;\n },\n undefined\n );\n\nconst typeReplace = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const orignalElement = newWDom.el;\n\n if (parentWDom.type && orignalElement) {\n if (orignalElement.nodeType === 11) {\n typeSortedReplace(newWDom);\n } else {\n const parentElement = findRealParentElement(parentWDom);\n const newElement = wDomToDom(newWDom);\n\n if (parentElement) {\n parentElement.replaceChild(newElement, orignalElement);\n }\n }\n }\n\n runMountedQueueFromWDom(newWDom);\n};\n\nconst removeEvent = (\n oldProps: Props,\n element: HTMLElement | DocumentFragment | Text\n) => {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(\n getEventName(dataKey),\n dataValue as (e: Event) => void\n );\n }\n }\n );\n};\n\nconst typeUpdate = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (newWDom.type === 'text') {\n updateText(newWDom);\n\n return;\n }\n\n if (element) {\n const { oldProps, props } = newWDom;\n\n updateProps(props, element, oldProps);\n\n delete newWDom.oldProps;\n\n if (newWDom.tag === 'input') {\n (element as HTMLInputElement).value = String(newWDom?.props?.value || '');\n }\n }\n\n (newWDom.children || []).forEach((childItem: WDom) => wDomUpdate(childItem));\n\n runUpdatedQueueFromWDom(newWDom);\n};\n\nconst updateText = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (element) {\n element.nodeValue = String(newWDom.text);\n }\n};\n\nconst updateProps = (\n props?: Props,\n element?: HTMLElement | Element | DocumentFragment | Text,\n oldProps?: Props\n) => {\n const originalProps = { ...oldProps };\n\n Object.entries(props || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey === 'key') {\n // Do nothing\n } else if (dataKey === 'innerHTML' && typeof dataValue === 'string') {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n updateStyle(\n dataValue,\n checkStyleData(dataKey, originalProps.style)\n ? originalProps.style\n : {},\n element\n );\n } else if (checkRefData(dataKey, dataValue)) {\n dataValue.value = element;\n } else if (dataKey.match(/^on/)) {\n updateEvent(\n element as HTMLElement,\n dataKey,\n dataValue as (e: Event) => void,\n originalProps[dataKey] as (e: Event) => void\n );\n } else if (checkCheckableElement(element) && dataKey === 'checked') {\n (element as HTMLInputElement).checked = !!dataValue;\n } else if (checkTextareaElement(element) && dataKey === 'value') {\n (element as HTMLInputElement).value = dataValue as string;\n } else if (checkOptionElement(element) && dataKey === 'selected') {\n (element as HTMLOptionElement).selected = !!dataValue;\n } else if (checkNormalAttribute(dataValue)) {\n if (xmlnsRef.value && dataKey !== 'xmlns') {\n (element as HTMLElement).setAttributeNS(\n null,\n getAttrKey(dataKey),\n String(dataValue)\n );\n } else {\n (element as HTMLElement).setAttribute(\n getAttrKey(dataKey),\n String(dataValue)\n );\n }\n }\n\n delete originalProps[dataKey];\n }\n );\n\n Object.keys(originalProps).forEach(dataKey =>\n (element as HTMLElement).removeAttribute(dataKey)\n );\n};\n\nconst wDomToDom = (wDom: WDom) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === 'fragment' || type === 'loop';\n\n if (tag === 'svg') {\n xmlnsRef.value = String(props?.xmlns);\n }\n\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === 'element' && tag) {\n element = xmlnsRef.value\n ? document.createElementNS(xmlnsRef.value, tag)\n : document.createElement(tag);\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n } else {\n element = document.createElement('e');\n }\n\n wDomChildrenToDom(children, element);\n updateProps(props, element);\n\n wDom.el = element as HTMLElement;\n\n runMountedQueueFromWDom(wDom);\n\n if (tag === 'svg') {\n xmlnsRef.value = '';\n }\n\n return element;\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | Element | DocumentFragment | Text\n) => {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem));\n }\n\n return acc;\n },\n new DocumentFragment()\n );\n\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\n};\n\nconst updateEvent = (\n element: HTMLElement,\n eventKey: string,\n newEventHandler: (e: Event) => void,\n oldEventHandler: (e: Event) => void\n) => {\n const eventName = getEventName(eventKey);\n\n if (oldEventHandler !== newEventHandler) {\n if (oldEventHandler) {\n element.removeEventListener(eventName, oldEventHandler);\n }\n\n if (newEventHandler) {\n element.addEventListener(eventName, newEventHandler);\n }\n }\n};\n\nconst updateStyle = (\n style: Record<string, string>,\n oldStyle: Record<string, string>,\n element?: HTMLElement | Element | DocumentFragment | Text\n) => {\n const originalStyle = { ...oldStyle };\n const elementStyle = (element as HTMLElement)?.style;\n\n if (elementStyle) {\n Object.entries(style).forEach(([styleKey, dataValue]) => {\n (elementStyle as any)[styleKey] = dataValue;\n delete originalStyle[styleKey];\n });\n\n Object.entries(originalStyle).forEach(\n ([styleKey]) => ((elementStyle as any)[styleKey] = '')\n );\n }\n};\n\nconst findRealParentElement = (\n vDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const isVirtualType = vDom.type === 'fragment' || vDom.type === 'loop';\n if (vDom.isRoot && isVirtualType) {\n return vDom.wrapElement;\n }\n\n if (!isVirtualType) {\n return vDom.el as HTMLElement;\n }\n\n return findRealParentElement(getParent(vDom));\n};\n","import { WDom, TagFunctionResolver, RenderType } from '@/types';\nimport { checkCustemComponentFunction } from '@/utils/predicator';\nimport { getParent, reRender } from '@/utils';\nimport { recursiveRemoveEvent } from '@/render';\nimport {\n checkEmptyElement,\n checkSameWDomWithOriginal,\n getWDomType,\n checkExisty,\n} from '@/utils/predicator';\n\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\n\nexport const makeNewWDomTree = (\n newWDom: WDom | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n remakeNewWDom(\n newWDom,\n checkSameWDomWithOriginal[getWDomType(newWDom)](newWDom, originalWDom),\n originalWDom\n );\n\nconst remakeNewWDom = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n) => {\n const remakeWDom = generalize(newWDom, isSameType, originalWDom);\n\n remakeWDom.children = remakeChildrenForDiff(\n remakeWDom,\n isSameType,\n originalWDom\n );\n\n const needRerender = addReRenderTypeProperty(\n remakeWDom,\n isSameType,\n originalWDom\n );\n\n remakeWDom.needRerender = needRerender;\n\n if (needRerender !== 'A' && originalWDom) {\n remakeWDom.el = originalWDom.el;\n }\n\n if (\n needRerender &&\n ['D', 'R', 'SR'].includes(needRerender) &&\n originalWDom?.componentKey\n ) {\n runUnmountQueueFromWDom(originalWDom);\n recursiveRemoveEvent(originalWDom);\n remakeWDom.oldChildren = originalWDom.children;\n }\n\n remakeWDom.oldProps = originalWDom?.props;\n\n return remakeWDom;\n};\n\nconst addReRenderTypeProperty = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n): RenderType | undefined => {\n const existOriginalWDom = originalWDom && originalWDom.type;\n const isEmptyElement = checkEmptyElement(newWDom);\n const isRoot = !newWDom.getParent;\n const parentType = !isRoot && getParent(newWDom).type;\n const key = getKey(newWDom);\n const isKeyCheckedWDom = parentType === 'loop' && checkExisty(key);\n const isSameText =\n newWDom.type === 'text' &&\n isSameType &&\n newWDom.text === originalWDom?.text;\n\n let result: RenderType | undefined;\n if (isEmptyElement) {\n result = 'D';\n } else if (isSameText) {\n result = 'N';\n } else if (!existOriginalWDom) {\n result = 'A';\n } else if (isSameType) {\n result = isKeyCheckedWDom ? 'SU' : 'U';\n } else {\n result = isKeyCheckedWDom ? 'SR' : 'R';\n }\n\n return result;\n};\n\nconst generalize = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n): WDom => {\n if (checkCustemComponentFunction(newWDom)) {\n return isSameType && originalWDom\n ? reRender(originalWDom, newWDom)\n : newWDom.resolve();\n }\n\n return newWDom;\n};\n\nconst remakeChildrenForDiff = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n) =>\n isSameType && originalWDom\n ? remakeChildrenForUpdate(newWDom, originalWDom)\n : remakeChildrenForAdd(newWDom);\n\nconst remakeChildrenForAdd = (newWDom: WDom) =>\n (newWDom.children || []).map((item: WDom) => {\n const childItem = makeNewWDomTree(item);\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n\nconst remakeChildrenForUpdate = (newWDom: WDom, originalWDom: WDom) => {\n if (\n newWDom.type === 'loop' &&\n checkExisty(getKey((newWDom.children || [])[0]))\n ) {\n return remakeChildrenForLoopUpdate(newWDom, originalWDom);\n }\n\n return (newWDom.children || []).map((item: WDom, index: number) => {\n const childItem = makeNewWDomTree(\n item,\n (originalWDom.children || [])[index]\n );\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n};\n\nconst remakeChildrenForLoopUpdate = (newWDom: WDom, originalWDom: WDom) => {\n const [remakedChildren, unUsedChildren] = diffLoopChildren(\n newWDom,\n originalWDom\n );\n\n unUsedChildren.map(unusedItem => {\n const el = unusedItem.el;\n\n if (el?.parentNode) {\n el.parentNode.removeChild(el);\n }\n });\n\n return remakedChildren;\n};\n\nconst diffLoopChildren = (newWDom: WDom, originalWDom: WDom) => {\n const newChildren = [...(newWDom.children || [])];\n const originalChildren = [...(originalWDom.children || [])];\n const remakedChildren = newChildren.map(item => {\n const originalItem = findSameKeyOriginalItem(item, originalChildren);\n const childItem = makeNewWDomTree(item, originalItem);\n\n if (originalItem) {\n originalChildren.splice(originalChildren.indexOf(originalItem), 1);\n }\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n\n return [remakedChildren, originalChildren];\n};\n\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) =>\n originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === getKey(item)\n );\n\nconst getKey = (target: WDom) =>\n target?.componentProps?.key ?? target?.props?.key;\n","import {\n componentRef,\n redrawQueue,\n redrawQueueTimeout,\n getComponentKey,\n} from '@/utils/universalRef';\n\nimport { useUpdated } from '@/hook/useUpdate';\n\nexport const updateCallback = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const updateReqs = componentRef.get(getComponentKey())!.upR;\n\n updateReqs.push(() => useUpdated(effectAction, dependencies));\n useUpdated(effectAction, dependencies);\n};\n\nexport const runUpdateCallback = () => {\n const updateReqs = componentRef.get(getComponentKey())?.upR;\n\n if (updateReqs?.length) {\n updateReqs.forEach(callback => callback());\n }\n\n redrawQueue.value = [];\n redrawQueueTimeout.value = null;\n};\n","import {\n WDom,\n TagFunction,\n FragmentFunction,\n Props,\n MiddleStateWDomChildren,\n MiddleStateWDom,\n NodePointer,\n Component,\n} from '@/types';\n\nimport { makeNewWDomTree } from '@/diff';\nimport { wDomUpdate } from '@/render';\nimport {\n initUpdateHookState,\n initMountHookState,\n setRedrawAction,\n needDiffRef,\n componentRender,\n getComponentSubInfo,\n} from '@/utils/universalRef';\nimport { runUpdateCallback } from '@/hook/updateCallback';\nimport {\n checkFragmentFunction,\n checkCustemComponentFunction,\n} from '@/utils/predicator';\n\nexport const Fragment = (_props: Props, ...children: WDom[]) => ({\n type: 'fragment',\n children,\n});\n\nexport const h = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n ...children: MiddleStateWDomChildren\n) => {\n const nodeParentPointer: NodePointer = { value: undefined };\n const newProps = props || {};\n const newChildren = remakeChildren(nodeParentPointer, children);\n const node = makeNode(tag, newProps, newChildren);\n\n if (!checkCustemComponentFunction(node)) {\n nodeParentPointer.value = node;\n }\n\n return node;\n};\n\nexport const mount =\n <T>(component: Component<T>) =>\n (_props: T, _children: WDom[]) =>\n component;\n\nconst reRenderCustomComponent = (\n tag: TagFunction,\n props: Props,\n children: WDom[],\n originalWDom: WDom\n) => {\n needDiffRef.value = true;\n\n const newWDom = makeWDomResolver(tag, props, children);\n const newWDomTree = makeNewWDomTree(newWDom, originalWDom);\n const { isRoot, getParent, wrapElement, afterElement } = originalWDom;\n\n newWDomTree.getParent = getParent;\n\n if (!isRoot && getParent) {\n const brothers = getParent()?.children || [];\n const index = brothers.indexOf(originalWDom);\n\n brothers.splice(index, 1, newWDomTree);\n } else {\n newWDomTree.isRoot = true;\n newWDomTree.wrapElement = wrapElement;\n newWDomTree.afterElement = afterElement;\n }\n\n needDiffRef.value = false;\n wDomUpdate(newWDomTree);\n};\n\nconst makeWDomResolver = (tag: TagFunction, props: Props, children: WDom[]) => {\n const tagName = tag.name;\n const constructor = tag;\n // 리졸브는 컴포넌트를 새로 만든다.\n const resolve = (componentKey = props) => {\n initMountHookState(componentKey);\n\n const component = tag(props, children);\n const componentMaker = component(\n componentRender(componentKey),\n props,\n children\n );\n\n const customNode = makeCustomNode(\n componentMaker,\n componentKey,\n tag,\n props,\n children\n );\n\n const originalWDom = customNode;\n\n setRedrawAction(componentKey, () =>\n reRenderCustomComponent(tag, props, children, originalWDom)\n );\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n customNode;\n\n return customNode;\n };\n\n return { tagName, constructor, props, children, resolve };\n};\n\nconst makeCustomNode = (\n componentMaker: (props: Props) => WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n const customNode = componentMaker(props);\n\n addComponentProps(\n customNode,\n componentKey,\n tag,\n props,\n children,\n makeReRender(componentMaker, componentKey, tag, props, children)\n );\n\n return customNode;\n};\n\nconst makeReRender = (\n componentMaker: (props: Props) => WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n const reRender = () =>\n wDomMaker(componentMaker, componentKey, tag, props, children, reRender);\n return reRender;\n};\n\nconst wDomMaker = (\n componentMaker: (props: Props) => WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n initUpdateHookState(componentKey);\n runUpdateCallback();\n\n const originalWDom = componentMaker(props);\n\n setRedrawAction(componentKey, () =>\n reRenderCustomComponent(tag, props, children, originalWDom)\n );\n\n addComponentProps(originalWDom, componentKey, tag, props, children, reRender);\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n originalWDom;\n\n return originalWDom;\n};\n\nconst addComponentProps = (\n wDom: WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n Object.assign(wDom, {\n componentProps: props,\n componentChildren: children,\n constructor: tag,\n tagName: tag.name,\n componentKey,\n reRender,\n });\n};\n\nconst makeNode = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n children: WDom[]\n) => {\n if (checkFragmentFunction(tag)) {\n return Fragment(props, ...children);\n } else if (checkCustemComponentFunction(tag)) {\n const componetMakeResolver = makeWDomResolver(tag, props, children);\n\n return needDiffRef.value\n ? componetMakeResolver\n : componetMakeResolver.resolve();\n }\n\n return {\n type: 'element',\n tag,\n props,\n children,\n };\n};\n\nconst remakeChildren = (\n nodeParentPointer: NodePointer,\n children: MiddleStateWDomChildren\n): WDom[] =>\n children.map((item: MiddleStateWDom) => {\n const childItem = makeChildrenItem(item);\n\n childItem.getParent = () => nodeParentPointer.value;\n\n return childItem;\n });\n\nconst makeChildrenItem = (item: MiddleStateWDom): WDom => {\n if (item === null || item === undefined || item === false) {\n return { type: null };\n } else if (Array.isArray(item)) {\n const nodeParentPointer: NodePointer = { value: undefined };\n const children = remakeChildren(nodeParentPointer, item);\n const node = {\n type: 'loop',\n children,\n };\n nodeParentPointer.value = node;\n\n return node;\n } else if (typeof item === 'string' || typeof item === 'number') {\n return { type: 'text', text: item };\n }\n\n return item;\n};\n","export const ref = <T>(initValue: T) => ({ value: initValue });\n"],"names":["updateProps","getParent","reRender"],"mappings":"AAoBA,MAAM,qBAAqB,CAAC,SAC1B,OAAO,SAAS,YAAY,EAAE,aAAa;AAE7C,MAAM,iBAAiB,CAAC,MAAiB,aACvC,mBAAmB,IAAI,KAAK,KAAK,SAAS;AAE5C,MAAM,2BAA2B,CAC/B,SACA,iBACG,QAAQ,iBAAgB,6CAAc;AAE3C,MAAM,oBAAoB,CACxB,SACA,iBAEA;AAfF;AAeE,4BAAmB,OAAO,MAC1B,6CAAc,UAAS,gBACvB,kDAAc,aAAd,mBAAwB,cAAW,wCAAS,aAAT,mBAAmB;AAAA;AAExD,MAAM,sBAAsB,CAC1B,SACA,iBAEA;AAvBF;AAuBE,4BAAmB,OAAO,MAC1B,6CAAc,UAAS,cACvB,6CAAc,SAAQ,QAAQ,SAC9B,kDAAc,aAAd,mBAAwB,cAAW,wCAAS,aAAT,mBAAmB;AAAA;AAExD,MAAM,yBAAyB,CAC7B,SACA,iBAEA;AAhCF;AAgCE,4BAAmB,OAAO,MAC1B,6CAAc,UAAS,QAAQ,WAC9B,kDAAc,aAAd,mBAAwB,cAAW,wCAAS,aAAT,mBAAmB,WACrD,QAAQ,SAAS;AAAA;AAEd,MAAM,+BAA+B,CAC1C,WAEC,OAAO,WAAW,cAAc,CAAC,sBAAsB,MAAM,KAC7D,OAAO,WAAW,YAAY,aAAa;AAEvC,MAAM,wBAAwB,CACnC,WAEA,OAAO,WAAW,cAAc,WAAW;AAEtC,MAAM,oBAAoB,CAAC,SAChC,mBAAmB,IAAI,KAAK,CAAC,KAAK;AAE7B,MAAM,cAAc,CAAC,UAC1B,UAAU,QAAQ,UAAU;AAEvB,MAAM,iBAAiB,CAC5B,SACA,cAEA,YAAY,WAAW,OAAO,cAAc;AAEvC,MAAM,eAAe,CAC1B,SACA,cAGG,YAAY,SAAS,OAAO,cAAc;AAExC,MAAM,qBAAqB,CAAC,YACjC,QAAQ,aAAa,KAAK,QAAQ,YAAY;AAEzC,MAAM,uBAAuB,CAAC,YACnC,QAAQ,aAAa,KAAK,QAAQ,YAAY;AAEzC,MAAM,wBAAwB,CAAC,YACpC,QAAQ,aAAa,KAAK,CAAC,SAAS,UAAU,EAAE,SAAS,QAAQ,IAAI;AAEhE,MAAM,uBAAuB,CAClC,cAEA,OAAO,cAAc,YAAY,OAAO,cAAc;AAE3C,MAAA,cAAc,CACzB,SACa;AACb,MAAI,SAAmB;AAEnB,MAAA,6BAA6B,IAAI,GAAG;AAC7B,aAAA;AAAA,EACA,WAAA,eAAe,MAAM,UAAU,GAAG;AAClC,aAAA;AAAA,EACA,WAAA,eAAe,MAAM,SAAS,GAAG;AACjC,aAAA;AAAA,EACA,WAAA,eAAe,MAAM,MAAM,GAAG;AAC9B,aAAA;AAAA,EACA,WAAA,eAAe,MAAM,MAAM,GAAG;AAC9B,aAAA;AAAA,EAAA,WACA,kBAAkB,IAAI,GAAG;AACzB,aAAA;AAAA,EACX;AAEO,SAAA;AACT;AAEO,MAAM,4BAA4B;AAAA,EACvC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AACN;AChIa,MAAA,YAAY,CAAC,SAAe;AACvC,QAAM,aAAa,KAAK,aAAa,KAAK,UAAU;AAE7C,SAAA;AACT;AAEa,MAAA,WAAW,CAAC,MAAY,aAAkC;AACrE,QAAM,EAAE,gBAAgB,OAAO,mBAAmB,aAAa;AAC/D,QAAM,EAAE,OAAO,WAAW,UAAU,gBAAgB;AAEpD,MAAI,OAAO;AACTA,kBAAY,OAAO,SAAS;AAAA,EAC9B;AAEA,MAAI,UAAU;AACZ,mBAAe,UAAU,WAAW;AAAA,EACtC;AAEA,QAAM,UAAU,KAAK,YAAY,KAAK,SAAS;AAExC,SAAA;AACT;AAEa,MAAA,eAAe,CAAC,aAC3B,SAAS,QAAQ,WAAW,CAAC,QAAQ,OAAO,GAAG,YAAa,CAAA;AAEvD,MAAM,aAAa,CAAC,YACzB,YAAY,cAAc,UAAU;AAEtC,MAAMA,gBAAc,CAAC,OAAc,cAAqB;AAClD,MAAA,SAAS,cAAc,OAAO;AAChC,WAAO,KAAK,KAAK,EAAE,QAAQ,CAAO,QAAA,OAAO,MAAM,IAAI;AAEnD,WAAO,QAAQ,aAAa,CAAA,CAAE,EAAE;AAAA,MAC9B,CAAC,CAAC,KAAK,KAAK,MAAO,MAAM,OAAO;AAAA,IAAA;AAAA,EAEpC;AACF;AAEA,MAAM,iBAAiB,CAAC,UAAkB,gBAAwB;AAC5D,MAAA,YAAY,gBAAgB,UAAU;AAC/B,aAAA,OAAO,GAAG,SAAS,MAAM;AAElC,QAAI,aAAa;AACf,kBAAY,QAAQ,CAAA,iBAAgB,SAAS,KAAK,YAAY,CAAC;AAAA,IACjE;AAAA,EACF;AACF;ACvCa,MAAA,WAA8B,EAAE,OAAO;AAC7C,MAAM,kBAAoC,EAAE,OAAO,CAAA;AAC7C,MAAA,cAAkC,EAAE,OAAO;AAC3C,MAAA,mCAAiC;AACvC,MAAM,cAET,EAAE,OAAO,CAAA;AACA,MAAA,qBAA+C,EAAE,OAAO;AACxD,MAAA,kBAAkB,CAAC,iBAAwB,MAAM;AFE9D;AEDE,QAAM,MAAK,kBAAa,IAAI,YAAY,MAA7B,mBAAgC;AAC3C,MAAI,SAAS;AACb,MAAI,IAAI;AACH;AACM,aAAA;AAAA,EACX;AAEO,SAAA;AACT;AAEA,MAAM,iBAAiB,CAAC,iBAAwB;AAC9C,eAAa,IAAI,cAAc;AAAA,IAC7B,IAAI,EAAE,OAAO,KAAK;AAAA,IAClB,IAAI,MAAM;AAAA,IAAC;AAAA,IACX,KAAK,CAAC;AAAA,IACN,KAAK,EAAE,OAAO,EAAE;AAAA,IAChB,KAAK,CAAC;AAAA,IACN,MAAM,CAAC;AAAA,IACP,KAAK,CAAC;AAAA,IACN,MAAM,CAAC;AAAA,EAAA,CACR;AACH;AAEa,MAAA,kBAAkB,MAAM,gBAAgB;AAE9C,MAAM,sBAAsB,CACjC,cACA,WACG,aAAa,IAAI,YAAY,EAAG;AAExB,MAAA,kBAAkB,CAAC,cAAqB,SAAqB;AACxE,eAAa,IAAI,YAAY,EAAG,KAAK,MAAM;AACzC,gBAAY,MAAM,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,IAAA,CACD;AACG,QAAA,CAAC,mBAAmB,OAAO;AACV,yBAAA,QAAQ,WAAW,eAAe;AAAA,IACvD;AAAA,EAAA;AAEJ;AAEO,MAAM,sBAAsB,CAAC,iBACjC,gBAAgB,QAAQ;AAEd,MAAA,qBAAqB,CAAC,iBAAwB;AACzD,kBAAgB,QAAQ;AACxB,iBAAe,YAAY;AAC7B;AAEA,MAAM,wBAAwB,CAAC,MAAY,WAAoB;AAC7D,GAAC,KAAK,YAAY,CAAC,GAAG,QAAQ,CAAQ,SAAA;AACpC,UAAM,cAAc,KAAK;AACzB,QAAI,aAAa;AACf,aAAO,KAAK,WAAW;AAAA,IACzB;AAEA,0BAAsB,MAAM,MAAM;AAAA,EAAA,CACnC;AACH;AAEA,MAAM,kBAAkB,MAAM;AAC5B,MAAI,gBAAyB,CAAA;AAEjB,cAAA,MAAM,QAAQ,CAAQ,SAAA;AF/DpC;AEgEI,UAAM,WAAU,wBAAa,IAAI,KAAK,YAAY,MAAlC,mBAAqC,OAArC,mBAAyC;AACzD,QAAI,SAAS;AACX,4BAAsB,SAAS,aAAa;AAAA,IAC9C;AAAA,EAAA,CACD;AAED,QAAM,WAAoB,CAAA;AAC1B,QAAM,SAAS,YAAY,MAAM,OAAO,CAAC,KAAK,SAAS;AAC/C,UAAA,EAAE,aAAiB,IAAA;AAEzB,QACE,cAAc,SAAS,YAAY,KACnC,SAAS,SAAS,YAAY,GAC9B;AACO,aAAA;AAAA,IACT;AAEA,aAAS,KAAK,YAAY;AAC1B,QAAI,KAAK,IAAI;AAEN,WAAA;AAAA,EACT,GAAG,CAAqB,CAAA;AAExB,SAAO,OAAO,QAAQ;AACd,UAAA,SAAS,OAAO;AACtB,QAAI,QAAQ;AACV,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;AC9Ga,MAAA,UAAU,CAAC,iBAA6B;AACnD,eAAa,IAAI,gBAAiB,CAAA,EAAG,KAAK,KAAK,YAAY;AAC7D;AAEa,MAAA,0BAA0B,CAAC,YAAkB;AAClD,QAAA,EAAE,aAAiB,IAAA;AAEzB,MAAI,cAAc;AAChB,eAAW,YAAY;AAAA,EACzB;AACA,sBAAoB,OAAO;AAC7B;AAEA,MAAM,sBAAsB,CAAC,SAAe;AAC1C,GAAC,KAAK,YAAY,CAAC,GAAG,QAAQ,CAAQ,SAAA;AACpC,UAAM,cAAc,KAAK;AACzB,QAAI,aAAa;AACf,8BAAwB,IAAI;AAAA,IAAA,OACvB;AACL,0BAAoB,IAAI;AAAA,IAC1B;AAAA,EAAA,CACD;AACH;AAEA,MAAM,aAAa,CAAC,iBAAwB;AACpC,QAAA,UAAU,aAAa,IAAI,YAAY;AAC7C,MAAI,SAAS;AACX,YAAS,KAAK,QAAQ,CAAU,WAAA,OAAQ,CAAA;AACxC,YAAS,OAAO;AAChB,iBAAa,OAAO,YAAY;AAAA,EAClC;AACF;ACzBa,MAAA,gBAAgB,CAAC,iBAA6B;AACzD,QAAM,MAAM,aAAa,IAAI,gBAAiB,CAAA,EAAG;AAEjD,MAAI,KAAK,YAAY;AACvB;AAEa,MAAA,0BAA0B,CAAC,YAAkB;AAClD,QAAA,EAAE,aAAiB,IAAA;AAEzB,MAAI,cAAc;AACV,UAAA,YAAY,aAAa,IAAI,YAAY;AAC/C,UAAM,QAAQ,uCAAW;AACzB,UAAM,WAAW,uCAAW;AAE5B,oBAAgB,QAAQ;AAExB,QAAI,UAAU;AACZ,eAAS,QAAQ;AAAA,IACnB;AAEA,QAAI,OAAO;AACT,gBAAU,MAAM;AAEV,YAAA,QAAQ,CAAC,WAAqB;AAClC,cAAM,WAAW;AACjB,YAAI,UAAU;AACZ,kBAAQ,QAAQ;AAAA,QAClB;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF;AACF;ACjCO,MAAM,aAAa,CACxB,cACA,eAA4B,MAAM,CAAA,MAC/B;AACH,QAAM,YAAY,aAAa,IAAI,gBAAiB,CAAA;AAC9C,QAAA,EAAE,KAAK,IAAQ,IAAA;AACf,QAAA,MAAM,IAAI,IAAI;AAEpB,MAAI,OAAO,mBAAmB,KAAK,aAAc,CAAA,GAAG;AAClD,UAAM,WAAW;AACjB,QAAI,UAAU;AACD,gBAAA,KAAK,KAAK,QAAQ;AAAA,IAC/B;AAAA,EACF;AAEI,MAAA,IAAI,SAAS,aAAa;AAC9B,MAAI,SAAS;AACf;AAEa,MAAA,0BAA0B,CAAC,YAAkB;AAClD,QAAA,EAAE,aAAiB,IAAA;AAEzB,MAAI,cAAc;AACV,UAAA,YAAY,aAAa,IAAI,YAAY;AAC/C,UAAM,QAAQ,uCAAW;AACzB,UAAM,WAAW,uCAAW;AAE5B,oBAAgB,QAAQ;AAExB,QAAI,UAAU;AACZ,eAAS,QAAQ;AAAA,IACnB;AAEI,QAAA,QAAQ,eAAe,OAAO;AAChC,gBAAU,OAAO;AACjB,YAAM,QAAQ,CAAC,WAAqB,OAAQ,CAAA;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,MAAM,qBAAqB,CAAC,cAAyB,YACnD,CAAC,aAAa,UAAU,CAAC,aAAa,SAClC,OACA,aAAa,KAAK,CAAC,KAAK,UAAU,QAAQ,QAAQ,MAAM;ACjCvD,MAAM,SAAS,CACpB,MACA,aACA,iBACG;AACH,oDAAgB,SAAS;AACzB,OAAK,SAAS;AACd,OAAK,cAAc;AAEb,QAAA,MAAM,UAAU,IAAI;AAE1B,MAAI,cAAc;AAChB,SAAK,eAAe;AACR,gBAAA,aAAa,KAAK,YAAY;AAAA,EAAA,OACrC;AACL,gBAAY,YAAY,GAAG;AAAA,EAC7B;AAEA,SAAO,MAAM;ANff;AMgBU,UAAA,aAAY,kBAAa,IAAI,KAAK,kBAAkB,CAAE,CAAA,MAA1C,mBAA6C,GAAG;AAClE,QAAI,WAAW;AACb,8BAAwB,SAAS;AACjC,2BAAqB,SAAS;AAC9B,iBAAW,SAAS;AAAA,IACtB;AAAA,EAAA;AAEJ;AAEa,MAAA,aAAa,CAAC,gBAAsB;AACzC,QAAA,EAAE,aAAiB,IAAA;AAErB,MAAA,gBAAgB,iBAAiB,KAAK;AACvC,KAAA;AAAA,MACC,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GACH,cAAc,WAAW;AAAA,EAC9B;AACF;AAEa,MAAA,uBAAuB,CAAC,iBAAuB;AACtD,MAAA,aAAa,SAAS,aAAa,IAAI;AAC7B,gBAAA,aAAa,OAAO,aAAa,EAAE;AAAA,EACjD;AAEA,GAAC,aAAa,YAAY,CAAI,GAAA,QAAQ,CAAC,cAAoB;AACzD,yBAAqB,SAAS;AAAA,EAAA,CAC/B;AACH;AAEA,MAAM,aAAa,CAAC,YAAkB;AACtB,gBAAA,SAAS,QAAQ,WAA0B;AAC3D;AAEA,MAAM,aAAa,CAAC,YAAkB;AAChC,MAAA,QAAQ,YAAY,QAAQ,IAAI;AACtB,gBAAA,QAAQ,UAAU,QAAQ,EAAE;AAAA,EAC1C;AAEA;AAAA,IACE;AAAA,IACA,sBAAsB,UAAU,OAAO,CAAC;AAAA,EAAA;AAE5C;AAEA,MAAM,gBAAgB,CAAC,SAAe,WAAwB;ANjE9D;AMkEM,MAAA,UAAU,QAAQ,IAAI;AACpB,UAAA,aAAQ,OAAR,mBAAY,cAAa,GAAG;AACvB,aAAA,YAAY,QAAQ,EAAE;AAAA,IACpB,aAAA,aAAQ,OAAR,mBAAY,cAAa,IAAI;AACtC,iCAA2B,SAAS,MAAqB;AAAA,IAC3D;AACA,WAAO,QAAQ;AAAA,EACjB;AACF;AAEA,MAAM,6BAA6B,CAAC,SAAe,WAAwB;AACzE,IAAC,mCAAS,iBAAe,mCAAS,aAAY,IAAI,QAAQ,CAAQ,SAAA;AN7EpE;AM8EQ,UAAA,UAAK,OAAL,mBAAS,cAAa,GAAG;AACpB,aAAA,YAAY,6BAAM,EAAE;AAAA,IAClB,aAAA,UAAK,OAAL,mBAAS,cAAa,IAAI;AACnC,iCAA2B,MAAM,MAAM;AAAA,IACzC;AAAA,EAAA,CACD;AACH;AAEA,MAAM,oBAAoB,CAAC,YAAkB;AAC3C,aAAW,OAAO;AAClB,UAAQ,OAAO;AACjB;AAEA,MAAM,mBAAmB,CAAC,YAAkB;AAC1C,aAAW,OAAO;AACV,UAAA,SAAS,QAAQ,EAAE;AAC7B;AAEA,MAAM,UAAU,CACd,SACA,eACG;AACH,MAAI,CAAC,YAAY;AACf,iBAAa,UAAU,OAAO;AAAA,EAChC;AAEM,QAAA,aAAa,UAAU,OAAO;AACpC,MAAI,WAAW,MAAM;AACb,UAAA,WAAW,sBAAsB,UAAU;AAC3C,UAAA,SAAS,WAAW,SAAS;AAC7B,UAAA,SAAS,SACX,4BAA4B,YAAY,UAAU,UAAU,CAAC,IAC7D,4BAA4B,SAAS,UAAU;AAEnD,QAAI,cAAc,UAAU;AAC1B,UAAI,QAAQ;AACD,iBAAA,aAAa,YAAY,MAAM;AAAA,MAAA,OACnC;AACL,iBAAS,YAAY,UAAU;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,0BAAwB,OAAO;AACjC;AAEA,MAAM,8BAA8B,CAClC,MACA,eACsD;AAChD,QAAA,WAAW,WAAW,YAAY;AAClC,QAAA,QAAQ,SAAS,QAAQ,IAAI;AACnC,QAAM,YAAY,QAAQ;AACpB,QAAA,qBAAqB,SAAS,MAAM,SAAS;AAE7C,QAAA,cAAc,6BAA6B,kBAAkB;AAC7D,QAAA,aAAa,WAAW,QAAQ;AAEtC,MAAI,aAAa;AACR,WAAA;AAAA,EACT;AAEI,MAAA,CAAC,WAAW,UAAU,CAAC,YAAY,MAAM,EAAE,SAAS,UAAU,GAAG;AACnE,WAAO,4BAA4B,YAAY,UAAU,UAAU,CAAC;AAAA,EAC3D,WAAA,WAAW,UAAU,WAAW,cAAc;AACvD,WAAO,WAAW;AAAA,EACpB;AAEO,SAAA;AACT;AAEA,MAAM,+BAA+B,CACnC,uBAEA,mBAAmB;AAAA,EACjB,CACE,UACA,UACG;AACH,UAAM,OAAO,MAAM;AACnB,UAAM,KAAK,MAAM;AACjB,UAAM,aAAa,QAAQ,CAAC,YAAY,MAAM,EAAE,SAAS,IAAI;AAE7D,QAAI,UAAU;AACL,aAAA;AAAA,eACE,YAAY;AACrB,aAAO,6BAA6B,MAAM,YAAY,CAAE,CAAA;AAAA,IAC/C,WAAA,MAAM,GAAG,aAAa,IAAI;AAC5B,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACT;AAAA,EACA;AACF;AAEF,MAAM,cAAc,CAAC,YAAkB;AAC/B,QAAA,aAAa,UAAU,OAAO;AACpC,QAAM,iBAAiB,QAAQ;AAE3B,MAAA,WAAW,QAAQ,gBAAgB;AACjC,QAAA,eAAe,aAAa,IAAI;AAClC,wBAAkB,OAAO;AAAA,IAAA,OACpB;AACC,YAAA,gBAAgB,sBAAsB,UAAU;AAChD,YAAA,aAAa,UAAU,OAAO;AAEpC,UAAI,eAAe;AACH,sBAAA,aAAa,YAAY,cAAc;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAEA,0BAAwB,OAAO;AACjC;AAEA,MAAM,cAAc,CAClB,UACA,YACG;AACH,SAAO,QAAQ,YAAY,CAAA,CAAE,EAAE;AAAA,IAC7B,CAAC,CAAC,SAAS,SAAS,MAAyB;AACvC,UAAA,QAAQ,MAAM,KAAK,GAAG;AAChB,gBAAA;AAAA,UACN,aAAa,OAAO;AAAA,UACpB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,MAAM,aAAa,CAAC,YAAkB;ANlNtC;AMmNE,QAAM,UAAU,QAAQ;AAEpB,MAAA,QAAQ,SAAS,QAAQ;AAC3B,eAAW,OAAO;AAElB;AAAA,EACF;AAEA,MAAI,SAAS;AACL,UAAA,EAAE,UAAU,MAAU,IAAA;AAEhB,gBAAA,OAAO,SAAS,QAAQ;AAEpC,WAAO,QAAQ;AAEX,QAAA,QAAQ,QAAQ,SAAS;AAC1B,cAA6B,QAAQ,SAAO,wCAAS,UAAT,mBAAgB,UAAS,EAAE;AAAA,IAC1E;AAAA,EACF;AAEC,GAAA,QAAQ,YAAY,IAAI,QAAQ,CAAC,cAAoB,WAAW,SAAS,CAAC;AAE3E,0BAAwB,OAAO;AACjC;AAEA,MAAM,aAAa,CAAC,YAAkB;AACpC,QAAM,UAAU,QAAQ;AAExB,MAAI,SAAS;AACH,YAAA,YAAY,OAAO,QAAQ,IAAI;AAAA,EACzC;AACF;AAEA,MAAM,cAAc,CAClB,OACA,SACA,aACG;AACG,QAAA,gBAAgB,EAAE,GAAG;AAE3B,SAAO,QAAQ,SAAS,CAAA,CAAE,EAAE;AAAA,IAC1B,CAAC,CAAC,SAAS,SAAS,MAAyB;AAC3C,UAAI,YAAY;AAAO;AAAA,eAEZ,YAAY,eAAe,OAAO,cAAc,UAAU;AAClE,gBAAwB,YAAY;AAAA,MAC5B,WAAA,eAAe,SAAS,SAAS,GAAG;AAC7C;AAAA,UACE;AAAA,UACA,eAAe,SAAS,cAAc,KAAK,IACvC,cAAc,QACd,CAAC;AAAA,UACL;AAAA,QAAA;AAAA,MAEO,WAAA,aAAa,SAAS,SAAS,GAAG;AAC3C,kBAAU,QAAQ;AAAA,MACT,WAAA,QAAQ,MAAM,KAAK,GAAG;AAC/B;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,QAAA;AAAA,MAEP,WAAA,sBAAsB,OAAO,KAAK,YAAY,WAAW;AACjE,gBAA6B,UAAU,CAAC,CAAC;AAAA,MACjC,WAAA,qBAAqB,OAAO,KAAK,YAAY,SAAS;AAC9D,gBAA6B,QAAQ;AAAA,MAC7B,WAAA,mBAAmB,OAAO,KAAK,YAAY,YAAY;AAC/D,gBAA8B,WAAW,CAAC,CAAC;AAAA,MAAA,WACnC,qBAAqB,SAAS,GAAG;AACtC,YAAA,SAAS,SAAS,YAAY,SAAS;AACxC,kBAAwB;AAAA,YACvB;AAAA,YACA,WAAW,OAAO;AAAA,YAClB,OAAO,SAAS;AAAA,UAAA;AAAA,QAClB,OACK;AACJ,kBAAwB;AAAA,YACvB,WAAW,OAAO;AAAA,YAClB,OAAO,SAAS;AAAA,UAAA;AAAA,QAEpB;AAAA,MACF;AAEA,aAAO,cAAc;AAAA,IACvB;AAAA,EAAA;AAGK,SAAA,KAAK,aAAa,EAAE;AAAA,IAAQ,CAAA,YAChC,QAAwB,gBAAgB,OAAO;AAAA,EAAA;AAEpD;AAEA,MAAM,YAAY,CAAC,SAAe;AAC5B,MAAA;AACE,QAAA,EAAE,MAAM,KAAK,MAAM,OAAO,WAAW,CAAA,EAAO,IAAA;AAC5C,QAAA,gBAAgB,SAAS,cAAc,SAAS;AAEtD,MAAI,QAAQ,OAAO;AACR,aAAA,QAAQ,OAAO,+BAAO,KAAK;AAAA,EACtC;AAEA,MAAI,eAAe;AACjB,cAAU,IAAI;EAAiB,WACtB,SAAS,aAAa,KAAK;AAC1B,cAAA,SAAS,QACf,SAAS,gBAAgB,SAAS,OAAO,GAAG,IAC5C,SAAS,cAAc,GAAG;AAAA,EACrB,WAAA,SAAS,UAAU,YAAY,IAAI,GAAG;AAC/C,cAAU,SAAS,eAAe,OAAO,IAAI,CAAC;AAAA,EAAA,OACzC;AACK,cAAA,SAAS,cAAc,GAAG;AAAA,EACtC;AAEA,oBAAkB,UAAU,OAAO;AACnC,cAAY,OAAO,OAAO;AAE1B,OAAK,KAAK;AAEV,0BAAwB,IAAI;AAE5B,MAAI,QAAQ,OAAO;AACjB,aAAS,QAAQ;AAAA,EACnB;AAEO,SAAA;AACT;AAEA,MAAM,oBAAoB,CACxB,UACA,kBACG;AACH,QAAM,kBAAkB,SAAS;AAAA,IAC/B,CAAC,KAAuB,cAAoB;AAC1C,UAAI,UAAU,MAAM;AACd,YAAA,YAAY,UAAU,SAAS,CAAC;AAAA,MACtC;AAEO,aAAA;AAAA,IACT;AAAA,IACA,IAAI,iBAAiB;AAAA,EAAA;AAGnB,MAAA,iBAAiB,gBAAgB,iBAAiB;AACpD,kBAAc,YAAY,eAAe;AAAA,EAC3C;AACF;AAEA,MAAM,cAAc,CAClB,SACA,UACA,iBACA,oBACG;AACG,QAAA,YAAY,aAAa,QAAQ;AAEvC,MAAI,oBAAoB,iBAAiB;AACvC,QAAI,iBAAiB;AACX,cAAA,oBAAoB,WAAW,eAAe;AAAA,IACxD;AAEA,QAAI,iBAAiB;AACX,cAAA,iBAAiB,WAAW,eAAe;AAAA,IACrD;AAAA,EACF;AACF;AAEA,MAAM,cAAc,CAClB,OACA,UACA,YACG;AACG,QAAA,gBAAgB,EAAE,GAAG;AAC3B,QAAM,eAAgB,mCAAyB;AAE/C,MAAI,cAAc;AACT,WAAA,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,SAAS,MAAM;AACtD,mBAAqB,YAAY;AAClC,aAAO,cAAc;AAAA,IAAA,CACtB;AAEM,WAAA,QAAQ,aAAa,EAAE;AAAA,MAC5B,CAAC,CAAC,QAAQ,MAAQ,aAAqB,YAAY;AAAA,IAAA;AAAA,EAEvD;AACF;AAEA,MAAM,wBAAwB,CAC5B,SACsD;AACtD,QAAM,gBAAgB,KAAK,SAAS,cAAc,KAAK,SAAS;AAC5D,MAAA,KAAK,UAAU,eAAe;AAChC,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,CAAC,eAAe;AAClB,WAAO,KAAK;AAAA,EACd;AAEO,SAAA,sBAAsB,UAAU,IAAI,CAAC;AAC9C;AClaa,MAAA,kBAAkB,CAC7B,SACA,iBAEA;AAAA,EACE;AAAA,EACA,0BAA0B,YAAY,OAAO,GAAG,SAAS,YAAY;AAAA,EACrE;AACF;AAEF,MAAM,gBAAgB,CACpB,SACA,YACA,iBACG;AACH,QAAM,aAAa,WAAW,SAAS,YAAY,YAAY;AAE/D,aAAW,WAAW;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,aAAW,eAAe;AAEtB,MAAA,iBAAiB,OAAO,cAAc;AACxC,eAAW,KAAK,aAAa;AAAA,EAC/B;AAGE,MAAA,gBACA,CAAC,KAAK,KAAK,IAAI,EAAE,SAAS,YAAY,MACtC,6CAAc,eACd;AACA,4BAAwB,YAAY;AACpC,yBAAqB,YAAY;AACjC,eAAW,cAAc,aAAa;AAAA,EACxC;AAEA,aAAW,WAAW,6CAAc;AAE7B,SAAA;AACT;AAEA,MAAM,0BAA0B,CAC9B,SACA,YACA,iBAC2B;AACrB,QAAA,oBAAoB,gBAAgB,aAAa;AACjD,QAAA,iBAAiB,kBAAkB,OAAO;AAC1C,QAAA,SAAS,CAAC,QAAQ;AACxB,QAAM,aAAa,CAAC,UAAU,UAAU,OAAO,EAAE;AAC3C,QAAA,MAAM,OAAO,OAAO;AAC1B,QAAM,mBAAmB,eAAe,UAAU,YAAY,GAAG;AACjE,QAAM,aACJ,QAAQ,SAAS,UACjB,cACA,QAAQ,UAAS,6CAAc;AAE7B,MAAA;AACJ,MAAI,gBAAgB;AACT,aAAA;AAAA,aACA,YAAY;AACZ,aAAA;AAAA,EAAA,WACA,CAAC,mBAAmB;AACpB,aAAA;AAAA,aACA,YAAY;AACrB,aAAS,mBAAmB,OAAO;AAAA,EAAA,OAC9B;AACL,aAAS,mBAAmB,OAAO;AAAA,EACrC;AAEO,SAAA;AACT;AAEA,MAAM,aAAa,CACjB,SACA,YACA,iBACS;AACL,MAAA,6BAA6B,OAAO,GAAG;AACzC,WAAO,cAAc,eACjB,SAAS,cAAc,OAAO,IAC9B,QAAQ;EACd;AAEO,SAAA;AACT;AAEA,MAAM,wBAAwB,CAC5B,SACA,YACA,iBAEA,cAAc,eACV,wBAAwB,SAAS,YAAY,IAC7C,qBAAqB,OAAO;AAElC,MAAM,uBAAuB,CAAC,aAC3B,QAAQ,YAAY,IAAI,IAAI,CAAC,SAAe;AACrC,QAAA,YAAY,gBAAgB,IAAI;AAEtC,YAAU,YAAY,MAAM;AAErB,SAAA;AACT,CAAC;AAEH,MAAM,0BAA0B,CAAC,SAAe,iBAAuB;AAEnE,MAAA,QAAQ,SAAS,UACjB,YAAY,QAAQ,QAAQ,YAAY,CAAA,GAAI,EAAE,CAAC,GAC/C;AACO,WAAA,4BAA4B,SAAS,YAAY;AAAA,EAC1D;AAEA,UAAQ,QAAQ,YAAY,CAAA,GAAI,IAAI,CAAC,MAAY,UAAkB;AACjE,UAAM,YAAY;AAAA,MAChB;AAAA,OACC,aAAa,YAAY,CAAI,GAAA;AAAA,IAAA;AAGhC,cAAU,YAAY,MAAM;AAErB,WAAA;AAAA,EAAA,CACR;AACH;AAEA,MAAM,8BAA8B,CAAC,SAAe,iBAAuB;AACnE,QAAA,CAAC,iBAAiB,cAAc,IAAI;AAAA,IACxC;AAAA,IACA;AAAA,EAAA;AAGF,iBAAe,IAAI,CAAc,eAAA;AAC/B,UAAM,KAAK,WAAW;AAEtB,QAAI,yBAAI,YAAY;AACf,SAAA,WAAW,YAAY,EAAE;AAAA,IAC9B;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAEA,MAAM,mBAAmB,CAAC,SAAe,iBAAuB;AAC9D,QAAM,cAAc,CAAC,GAAI,QAAQ,YAAY,CAAG,CAAA;AAChD,QAAM,mBAAmB,CAAC,GAAI,aAAa,YAAY,CAAG,CAAA;AACpD,QAAA,kBAAkB,YAAY,IAAI,CAAQ,SAAA;AACxC,UAAA,eAAe,wBAAwB,MAAM,gBAAgB;AAC7D,UAAA,YAAY,gBAAgB,MAAM,YAAY;AAEpD,QAAI,cAAc;AAChB,uBAAiB,OAAO,iBAAiB,QAAQ,YAAY,GAAG,CAAC;AAAA,IACnE;AAEA,cAAU,YAAY,MAAM;AAErB,WAAA;AAAA,EAAA,CACR;AAEM,SAAA,CAAC,iBAAiB,gBAAgB;AAC3C;AAEA,MAAM,0BAA0B,CAAC,MAAY,qBAC3C,iBAAiB;AAAA,EACf,CAAoB,qBAAA,OAAO,gBAAgB,MAAM,OAAO,IAAI;AAC9D;AAEF,MAAM,SAAS,CAAC;APxKhB;AOyKE,sDAAQ,mBAAR,mBAAwB,QAAxB,aAA+B,sCAAQ,UAAR,mBAAe;AAAA;ACpLzC,MAAM,iBAAiB,CAC5B,cACA,eAA4B,MAAM,CAAA,MAC/B;AACH,QAAM,aAAa,aAAa,IAAI,gBAAiB,CAAA,EAAG;AAExD,aAAW,KAAK,MAAM,WAAW,cAAc,YAAY,CAAC;AAC5D,aAAW,cAAc,YAAY;AACvC;AAEO,MAAM,oBAAoB,MAAM;ARCvC;AQAE,QAAM,cAAa,kBAAa,IAAI,gBAAiB,CAAA,MAAlC,mBAAqC;AAExD,MAAI,yCAAY,QAAQ;AACX,eAAA,QAAQ,CAAY,aAAA,SAAU,CAAA;AAAA,EAC3C;AAEA,cAAY,QAAQ;AACpB,qBAAmB,QAAQ;AAC7B;ACDa,MAAA,WAAW,CAAC,WAAkB,cAAsB;AAAA,EAC/D,MAAM;AAAA,EACN;AACF;AAEO,MAAM,IAAI,CACf,KACA,UACG,aACA;AACG,QAAA,oBAAiC,EAAE,OAAO,OAAU;AACpD,QAAA,WAAW,SAAS;AACpB,QAAA,cAAc,eAAe,mBAAmB,QAAQ;AAC9D,QAAM,OAAO,SAAS,KAAK,UAAU,WAAW;AAE5C,MAAA,CAAC,6BAA6B,IAAI,GAAG;AACvC,sBAAkB,QAAQ;AAAA,EAC5B;AAEO,SAAA;AACT;AAEO,MAAM,QACX,CAAI,cACJ,CAAC,QAAW,cACV;AAEJ,MAAM,0BAA0B,CAC9B,KACA,OACA,UACA,iBACG;ATvCL;ASwCE,cAAY,QAAQ;AAEpB,QAAM,UAAU,iBAAiB,KAAK,OAAO,QAAQ;AAC/C,QAAA,cAAc,gBAAgB,SAAS,YAAY;AACzD,QAAM,EAAE,QAAQ,WAAAC,YAAW,aAAa,iBAAiB;AAEzD,cAAY,YAAYA;AAEpB,MAAA,CAAC,UAAUA,YAAW;AACxB,UAAM,aAAW,KAAAA,iBAAA,mBAAa,aAAY,CAAA;AACpC,UAAA,QAAQ,SAAS,QAAQ,YAAY;AAElC,aAAA,OAAO,OAAO,GAAG,WAAW;AAAA,EAAA,OAChC;AACL,gBAAY,SAAS;AACrB,gBAAY,cAAc;AAC1B,gBAAY,eAAe;AAAA,EAC7B;AAEA,cAAY,QAAQ;AACpB,aAAW,WAAW;AACxB;AAEA,MAAM,mBAAmB,CAAC,KAAkB,OAAc,aAAqB;AAC7E,QAAM,UAAU,IAAI;AACpB,QAAM,cAAc;AAEd,QAAA,UAAU,CAAC,eAAe,UAAU;AACxC,uBAAmB,YAAY;AAEzB,UAAA,YAAY,IAAI,OAAO,QAAQ;AACrC,UAAM,iBAAiB;AAAA,MACrB,gBAAgB,YAAY;AAAA,MAC5B;AAAA,MACA;AAAA,IAAA;AAGF,UAAM,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,UAAM,eAAe;AAErB;AAAA,MAAgB;AAAA,MAAc,MAC5B,wBAAwB,KAAK,OAAO,UAAU,YAAY;AAAA,IAAA;AAG3D,wBAAoB,cAAc,IAAI,EAAsB,QAC3D;AAEK,WAAA;AAAA,EAAA;AAGT,SAAO,EAAE,SAAS,aAAa,OAAO,UAAU,QAAQ;AAC1D;AAEA,MAAM,iBAAiB,CACrB,gBACA,cACA,KACA,OACA,aACG;AACG,QAAA,aAAa,eAAe,KAAK;AAEvC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,gBAAgB,cAAc,KAAK,OAAO,QAAQ;AAAA,EAAA;AAG1D,SAAA;AACT;AAEA,MAAM,eAAe,CACnB,gBACA,cACA,KACA,OACA,aACG;AACG,QAAAC,YAAW,MACf,UAAU,gBAAgB,cAAc,KAAK,OAAO,UAAUA,SAAQ;AACjE,SAAAA;AACT;AAEA,MAAM,YAAY,CAChB,gBACA,cACA,KACA,OACA,UACAA,cACG;AACH,sBAAoB,YAAY;AACd;AAEZ,QAAA,eAAe,eAAe,KAAK;AAEzC;AAAA,IAAgB;AAAA,IAAc,MAC5B,wBAAwB,KAAK,OAAO,UAAU,YAAY;AAAA,EAAA;AAG5D,oBAAkB,cAAc,cAAc,KAAK,OAAO,UAAUA,SAAQ;AAE3E,sBAAoB,cAAc,IAAI,EAAsB,QAC3D;AAEK,SAAA;AACT;AAEA,MAAM,oBAAoB,CACxB,MACA,cACA,KACA,OACA,UACAA,cACG;AACH,SAAO,OAAO,MAAM;AAAA,IAClB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,SAAS,IAAI;AAAA,IACb;AAAA,IACA,UAAAA;AAAA,EAAA,CACD;AACH;AAEA,MAAM,WAAW,CACf,KACA,OACA,aACG;AACC,MAAA,sBAAsB,GAAG,GAAG;AACvB,WAAA,SAAS,OAAO,GAAG,QAAQ;AAAA,EAAA,WACzB,6BAA6B,GAAG,GAAG;AAC5C,UAAM,uBAAuB,iBAAiB,KAAK,OAAO,QAAQ;AAElE,WAAO,YAAY,QACf,uBACA,qBAAqB,QAAQ;AAAA,EACnC;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,MAAM,iBAAiB,CACrB,mBACA,aAEA,SAAS,IAAI,CAAC,SAA0B;AAChC,QAAA,YAAY,iBAAiB,IAAI;AAE7B,YAAA,YAAY,MAAM,kBAAkB;AAEvC,SAAA;AACT,CAAC;AAEH,MAAM,mBAAmB,CAAC,SAAgC;AACxD,MAAI,SAAS,QAAQ,SAAS,UAAa,SAAS,OAAO;AAClD,WAAA,EAAE,MAAM;EACN,WAAA,MAAM,QAAQ,IAAI,GAAG;AACxB,UAAA,oBAAiC,EAAE,OAAO,OAAU;AACpD,UAAA,WAAW,eAAe,mBAAmB,IAAI;AACvD,UAAM,OAAO;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAEF,sBAAkB,QAAQ;AAEnB,WAAA;AAAA,aACE,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AAC/D,WAAO,EAAE,MAAM,QAAQ,MAAM,KAAK;AAAA,EACpC;AAEO,SAAA;AACT;ACzPO,MAAM,MAAM,CAAI,eAAkB,EAAE,OAAO,UAAU;"}
|
|
1
|
+
{"version":3,"file":"lithent.mjs","sources":["../src/utils/predicator.ts","../src/utils/index.ts","../src/utils/universalRef.ts","../src/hook/unmount.ts","../src/hook/mountCallback.ts","../src/hook/useUpdate.ts","../src/render.ts","../src/diff.ts","../src/hook/updateCallback.ts","../src/wDom.ts","../src/hook/ref.ts"],"sourcesContent":["import { Fragment } from '@/wDom';\nimport {\n WDom,\n TagFunction,\n TagFunctionResolver,\n FragmentFunction,\n WDomType,\n} from '@/types';\n\ntype WDomParam =\n | string\n | WDom\n | TagFunction\n | TagFunctionResolver\n | FragmentFunction;\n\n/**\n * Predicator\n */\n\nconst checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nconst checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nconst checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => newWDom.constructor === originalWDom?.constructor;\n\nconst checkSameFragment = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'fragment' &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkSameTagElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === 'element' &&\n originalWDom?.tag === newWDom.tag &&\n originalWDom?.children?.length === newWDom?.children?.length;\n\nconst checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n (originalWDom?.children?.length === newWDom?.children?.length ||\n newWDom.type === 'loop');\n\nexport const checkVirtualType = (type: string | null) =>\n type && ['fragment', 'loop'].includes(type);\n\nexport const checkCustemComponentFunction = (\n target: WDomParam\n): target is TagFunction | TagFunctionResolver =>\n (typeof target === 'function' && !checkFragmentFunction(target)) ||\n (typeof target === 'object' && 'resolve' in target);\n\nexport const checkFragmentFunction = (\n target: unknown\n): target is FragmentFunction =>\n typeof target === 'function' && target === Fragment;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkStyleData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is Record<string, string> =>\n dataKey === 'style' && typeof dataValue === 'object';\n\nexport const checkRefData = (\n dataKey: string,\n dataValue: unknown\n): dataValue is {\n value: HTMLElement | Element | DocumentFragment | Text | undefined;\n} => dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const checkOptionElement = (element: any): element is HTMLElement =>\n element.nodeType === 1 && element.tagName === 'OPTION';\n\nexport const checkTextareaElement = (element: any): element is HTMLElement =>\n element.nodeType === 1 && element.tagName === 'TEXTAREA';\n\nexport const checkCheckableElement = (element: any): element is HTMLElement =>\n element.nodeType === 1 && ['radio', 'checkbox'].includes(element.type);\n\nexport const checkNormalAttribute = (\n dataValue: unknown\n): dataValue is number | string =>\n typeof dataValue === 'number' || typeof dataValue === 'string';\n\nexport const getWDomType = (\n wDom: WDom | TagFunction | TagFunctionResolver\n): WDomType => {\n let result: WDomType = 'et';\n\n if (checkCustemComponentFunction(wDom)) {\n result = 'c';\n } else if (checkPlainType(wDom, 'fragment')) {\n result = 'f';\n } else if (checkPlainType(wDom, 'element')) {\n result = 'e';\n } else if (checkPlainType(wDom, 'loop')) {\n result = 'l';\n } else if (checkPlainType(wDom, 'text')) {\n result = 't';\n } else if (checkEmptyElement(wDom)) {\n result = 'et';\n }\n\n return result;\n};\n\nexport const checkSameWDomWithOriginal = {\n c: checkSameCustomComponent,\n l: checkNormalTypeElement,\n t: checkNormalTypeElement,\n e: checkSameTagElement,\n f: checkSameFragment,\n et: checkNormalTypeElement,\n};\n","import { WDom, TagFunctionResolver, Props } from '@/types';\n\nexport const getParent = (vDom: WDom) => {\n const parentVDom = vDom.getParent && vDom.getParent();\n\n return parentVDom as WDom;\n};\n\nexport const reRender = (vDom: WDom, infoVdom: TagFunctionResolver) => {\n const { componentProps: props, componentChildren: children } = vDom;\n const { props: infoProps, children: infoChidren } = infoVdom;\n\n if (props) {\n updateProps(props, infoProps);\n }\n\n if (children) {\n updateChildren(children, infoChidren);\n }\n\n const newVDom = vDom.reRender && vDom.reRender();\n\n return newVDom as WDom;\n};\n\nexport const getEventName = (eventKey: string) =>\n eventKey.replace(/^on(.*)/, (_match, p1) => p1.toLowerCase());\n\nexport const getAttrKey = (keyName: string) =>\n keyName === 'className' ? 'class' : keyName;\n\nconst updateProps = (props: Props, infoProps: Props) => {\n if (props && infoProps !== props) {\n Object.keys(props).forEach(key => delete props[key]);\n\n Object.entries(infoProps || {}).forEach(\n ([key, value]) => (props[key] = value)\n );\n }\n};\n\nconst updateChildren = (children: WDom[], infoChidren: WDom[]) => {\n if (children && infoChidren !== children) {\n children.splice(0, children.length);\n\n if (infoChidren) {\n infoChidren.forEach(childrenItem => children.push(childrenItem));\n }\n }\n};\n","import { ComponentRef, ComponentSubKey, Props, WDom } from '@/types';\n\ntype RedrawQueueList = {\n componentKey: Props;\n exec: () => void;\n}[];\n\nlet redrawQueue: { componentKey: Props; exec: () => void }[] = [];\nlet redrawQueueTimeout: boolean = false;\n\n/**\n * Common\n */\nexport const xmlnsRef: { value: string } = { value: '' };\nexport const componentKeyRef: { value: Props } = { value: {} };\nexport const needDiffRef: { value: boolean } = { value: false };\nexport const componentRef: ComponentRef = new WeakMap();\n\nexport const componentRender = (componentKey: Props) => () => {\n const up = componentRef.get(componentKey)?.up;\n let result = false;\n if (up) {\n up();\n result = true;\n }\n\n return result;\n};\n\nconst setComponetRef = (componentKey: Props) => {\n componentRef.set(componentKey, {\n vd: { value: null },\n up: () => {},\n upR: [],\n upS: { value: 0 },\n upD: [],\n upCB: [],\n mts: [],\n umts: [],\n });\n};\n\nexport const getComponentKey = () => componentKeyRef.value;\n\nexport const getComponentSubInfo = (\n componentKey: Props,\n subKey: ComponentSubKey\n) => componentRef.get(componentKey)![subKey];\n\nexport const setRedrawAction = (componentKey: Props, exec: () => void) => {\n componentRef.get(componentKey)!.up = () => {\n redrawQueue.push({\n componentKey,\n exec,\n });\n\n if (!redrawQueueTimeout) {\n redrawQueueTimeout = true;\n queueMicrotask(execRedrawQueue);\n }\n };\n};\n\nexport const initUpdateHookState = (componentKey: Props) =>\n (componentKeyRef.value = componentKey);\n\nexport const initMountHookState = (componentKey: Props) => {\n componentKeyRef.value = componentKey;\n setComponetRef(componentKey);\n};\n\nconst recursiveGetChildKeys = (wDom: WDom, result: Props[]) => {\n (wDom.children || []).forEach(item => {\n const childComKey = item.componentKey;\n if (childComKey) {\n result.push(childComKey);\n }\n\n recursiveGetChildKeys(item, result);\n });\n};\n\nconst execRedrawQueue = () => {\n let childItemList: Props[] = [];\n\n redrawQueue.forEach(item => {\n const childVd = componentRef.get(item.componentKey)?.vd?.value;\n if (childVd) {\n recursiveGetChildKeys(childVd, childItemList);\n }\n });\n\n const addedKey: Props[] = [];\n const result = redrawQueue.reduce((acc, item) => {\n const { componentKey } = item;\n\n if (\n childItemList.includes(componentKey) ||\n addedKey.includes(componentKey)\n ) {\n return acc;\n }\n\n addedKey.push(componentKey);\n acc.push(item);\n\n return acc;\n }, [] as RedrawQueueList);\n\n while (result.length) {\n const action = result.shift();\n if (action) {\n action.exec();\n }\n }\n\n redrawQueue = [];\n redrawQueueTimeout = false;\n};\n","import { WDom, Props } from '@/types';\nimport { componentRef, getComponentKey } from '@/utils/universalRef';\n\nexport const unmount = (effectAction: () => void) => {\n componentRef.get(getComponentKey())!.umts.push(effectAction);\n};\n\nexport const runUnmountQueueFromWDom = (newWDom: WDom) => {\n const { componentKey } = newWDom;\n\n if (componentKey) {\n removeItem(componentKey);\n }\n recursiveRunUnmount(newWDom);\n};\n\nconst recursiveRunUnmount = (wDom: WDom) => {\n (wDom.children || []).forEach(item => {\n const childComKey = item.componentKey;\n if (childComKey) {\n runUnmountQueueFromWDom(item);\n } else {\n recursiveRunUnmount(item);\n }\n });\n};\n\nconst removeItem = (componentKey: Props) => {\n const subInfo = componentRef.get(componentKey);\n if (subInfo) {\n subInfo!.umts.forEach(effect => effect());\n subInfo!.umts = [];\n componentRef.delete(componentKey);\n }\n};\n","import { WDom } from '@/types';\nimport {\n componentKeyRef,\n componentRef,\n getComponentKey,\n} from '@/utils/universalRef';\nimport { unmount } from '@/hook/unmount';\n\nlet mountedQueue: WDom[] = [];\n\nexport const execMountedQueue = () => {\n mountedQueue.forEach(item => runMountedQueueFromWDom(item));\n mountedQueue = [];\n};\nexport const addMountedQueue = (wDom: WDom) => {\n if (wDom.componentKey) {\n mountedQueue.push(wDom);\n }\n};\nexport const mountCallback = (effectAction: () => void) =>\n componentRef.get(getComponentKey())!.mts.push(effectAction);\n\nexport const runMountedQueueFromWDom = (newWDom: WDom) => {\n const { componentKey } = newWDom;\n\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component?.mts;\n const sequence = component?.upS;\n\n componentKeyRef.value = componentKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (queue) {\n component.mts = [];\n\n queue.forEach((effect: Function) => {\n const callback = effect();\n if (callback) {\n unmount(callback);\n }\n });\n }\n }\n};\n","import { WDom } from '@/types';\nimport {\n componentKeyRef,\n componentRef,\n getComponentKey,\n} from '@/utils/universalRef';\n\nexport const useUpdated = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const component = componentRef.get(getComponentKey());\n const { upD, upS } = component!;\n const def = upD[upS.value];\n\n if (def && checkNeedPushQueue(def, dependencies())) {\n const callback = effectAction();\n if (callback) {\n component!.upCB.push(callback);\n }\n }\n\n upD[upS.value] = dependencies();\n upS.value += 1;\n};\n\nexport const runUpdatedQueueFromWDom = (newWDom: WDom) => {\n const { componentKey } = newWDom;\n\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component?.upCB;\n const sequence = component?.upS;\n\n componentKeyRef.value = componentKey;\n\n if (sequence) {\n sequence.value = 0;\n }\n\n if (newWDom.constructor && queue) {\n component.upCB = [];\n queue.forEach((effect: Function) => effect());\n }\n }\n};\n\nconst checkNeedPushQueue = (originalDefs: unknown[], newDefs: unknown[]) =>\n !originalDefs.length && !originalDefs.length\n ? true\n : originalDefs.some((def, index) => def !== newDefs[index]);\n","import { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkNormalAttribute,\n checkExisty,\n checkOptionElement,\n checkTextareaElement,\n checkCheckableElement,\n checkVirtualType,\n} from '@/utils/predicator';\n\nimport { componentRef, xmlnsRef } from '@/utils/universalRef';\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\nimport { execMountedQueue, addMountedQueue } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent, getEventName, getAttrKey } from '@/utils';\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null\n) => {\n wrapElement ??= document.body;\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom);\n\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n\n execMountedQueue();\n\n return () => {\n const component = componentRef.get(wDom.componentProps || {})?.vd.value;\n if (component) {\n runUnmountQueueFromWDom(component);\n recursiveRemoveEvent(component);\n rootDelete(component);\n }\n };\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n ({\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n })[needRerender](newWDomTree);\n }\n};\n\nexport const recursiveRemoveEvent = (originalWDom: WDom) => {\n if (originalWDom.props && originalWDom.el) {\n removeEvent(originalWDom.props, originalWDom.el);\n }\n\n (originalWDom.children || []).forEach((childItem: WDom) => {\n recursiveRemoveEvent(childItem);\n });\n};\n\nconst rootDelete = (newWDom: WDom) => {\n deleteRealDom(newWDom, newWDom.wrapElement as HTMLElement);\n};\n\nconst typeDelete = (newWDom: WDom) => {\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\n deleteRealDom(\n newWDom,\n findRealParentElement(getParent(newWDom)) as HTMLElement\n );\n};\n\nconst deleteRealDom = (newWDom: WDom, parent: HTMLElement) => {\n if (parent && newWDom.el) {\n if (newWDom.el?.nodeType === 1) {\n parent.removeChild(newWDom.el);\n } else if (newWDom.el?.nodeType === 11) {\n findChildWithRemoveElement(newWDom, parent as HTMLElement);\n }\n delete newWDom.el;\n }\n};\n\nconst findChildWithRemoveElement = (newWDom: WDom, parent: HTMLElement) => {\n (newWDom?.oldChildren || newWDom?.children || []).forEach(item => {\n if (item.el?.nodeType === 1) {\n parent.removeChild(item?.el);\n } else if (item.el?.nodeType === 11) {\n findChildWithRemoveElement(item, parent);\n }\n });\n};\n\nconst typeSortedReplace = (newWDom: WDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom);\n};\n\nconst typeSortedUpdate = (newWDom: WDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom, newWDom.el);\n};\n\nconst typeAdd = (\n newWDom: WDom,\n newElement?: HTMLElement | DocumentFragment | Text\n) => {\n if (!newElement) {\n newElement = wDomToDom(newWDom) as HTMLElement;\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === 'loop';\n const nextEl = isLoop\n ? startFindNextBrotherElement(parentWDom, getParent(parentWDom))\n : startFindNextBrotherElement(newWDom, parentWDom);\n\n if (newElement && parentEl) {\n if (nextEl) {\n parentEl.insertBefore(newElement, nextEl);\n } else {\n parentEl.appendChild(newElement);\n }\n\n execMountedQueue();\n }\n }\n};\n\nconst startFindNextBrotherElement = (\n wDom: WDom,\n parentWDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const brothers = parentWDom.children || [];\n const index = brothers.indexOf(wDom);\n const nextIndex = index + 1;\n const candidiateBrothers = brothers.slice(nextIndex);\n\n const finedNextEl = findChildFragmentNextElement(candidiateBrothers);\n const parentType = parentWDom.type || '';\n\n if (finedNextEl) {\n return finedNextEl;\n }\n\n if (!parentWDom.isRoot && checkVirtualType(parentType)) {\n return startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else if (parentWDom.isRoot && parentWDom.afterElement) {\n return parentWDom.afterElement;\n }\n\n return undefined;\n};\n\nconst findChildFragmentNextElement = (\n candidiateBrothers: WDom[]\n): HTMLElement | DocumentFragment | Text | undefined =>\n candidiateBrothers.reduce(\n (\n targetEl: HTMLElement | DocumentFragment | Text | undefined,\n bItem: WDom\n ) => {\n const type = bItem.type;\n const el = bItem.el;\n const isFragment = type && checkVirtualType(type);\n\n if (targetEl) {\n return targetEl;\n } else if (isFragment) {\n return findChildFragmentNextElement(bItem.children || []);\n } else if (el && el.nodeType !== 11) {\n return el;\n }\n\n return targetEl;\n },\n undefined\n );\n\nconst typeReplace = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const orignalElement = newWDom.el;\n\n if (parentWDom.type && orignalElement) {\n if (orignalElement.nodeType === 11) {\n typeSortedReplace(newWDom);\n } else {\n const parentElement = findRealParentElement(parentWDom);\n const newElement = wDomToDom(newWDom);\n\n if (parentElement) {\n parentElement.replaceChild(newElement, orignalElement);\n }\n execMountedQueue();\n }\n }\n};\n\nconst removeEvent = (\n oldProps: Props,\n element: HTMLElement | DocumentFragment | Text\n) => {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(\n getEventName(dataKey),\n dataValue as (e: Event) => void\n );\n }\n }\n );\n};\n\nconst typeUpdate = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (newWDom.type === 'text') {\n updateText(newWDom);\n\n return;\n }\n\n if (element) {\n const { oldProps, props } = newWDom;\n\n updateProps(props, element, oldProps);\n\n delete newWDom.oldProps;\n\n if (newWDom.tag === 'input') {\n (element as HTMLInputElement).value = String(newWDom?.props?.value || '');\n }\n }\n\n (newWDom.children || []).forEach((childItem: WDom) => wDomUpdate(childItem));\n\n runUpdatedQueueFromWDom(newWDom);\n};\n\nconst updateText = (newWDom: WDom) => {\n const element = newWDom.el;\n\n if (element) {\n element.nodeValue = String(newWDom.text);\n }\n};\n\nconst updateProps = (\n props?: Props,\n element?: HTMLElement | Element | DocumentFragment | Text,\n oldProps?: Props\n) => {\n const originalProps = { ...oldProps };\n\n Object.entries(props || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey === 'key') {\n // Do nothing\n } else if (dataKey === 'innerHTML' && typeof dataValue === 'string') {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n updateStyle(\n dataValue,\n checkStyleData(dataKey, originalProps.style)\n ? originalProps.style\n : {},\n element\n );\n } else if (checkRefData(dataKey, dataValue)) {\n dataValue.value = element;\n } else if (dataKey.match(/^on/)) {\n updateEvent(\n element as HTMLElement,\n dataKey,\n dataValue as (e: Event) => void,\n originalProps[dataKey] as (e: Event) => void\n );\n } else if (checkCheckableElement(element) && dataKey === 'checked') {\n (element as HTMLInputElement).checked = !!dataValue;\n } else if (checkTextareaElement(element) && dataKey === 'value') {\n (element as HTMLInputElement).value = dataValue as string;\n } else if (checkOptionElement(element) && dataKey === 'selected') {\n (element as HTMLOptionElement).selected = !!dataValue;\n } else if (checkNormalAttribute(dataValue)) {\n if (xmlnsRef.value && dataKey !== 'xmlns') {\n (element as HTMLElement).setAttributeNS(\n null,\n getAttrKey(dataKey),\n String(dataValue)\n );\n } else {\n (element as HTMLElement).setAttribute(\n getAttrKey(dataKey),\n String(dataValue)\n );\n }\n }\n\n delete originalProps[dataKey];\n }\n );\n\n Object.keys(originalProps).forEach(dataKey =>\n (element as HTMLElement).removeAttribute(dataKey)\n );\n};\n\nconst wDomToDom = (wDom: WDom) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = checkVirtualType(type);\n\n if (tag === 'svg') {\n xmlnsRef.value = String(props?.xmlns);\n }\n\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === 'element' && tag) {\n element = xmlnsRef.value\n ? document.createElementNS(xmlnsRef.value, tag)\n : document.createElement(tag);\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n } else {\n element = document.createElement('e');\n }\n\n wDomChildrenToDom(children, element);\n updateProps(props, element);\n\n wDom.el = element as HTMLElement;\n\n addMountedQueue(wDom);\n\n if (tag === 'svg') {\n xmlnsRef.value = '';\n }\n\n return element;\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | Element | DocumentFragment | Text\n) => {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem));\n }\n\n return acc;\n },\n new DocumentFragment()\n );\n\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\n};\n\nconst updateEvent = (\n element: HTMLElement,\n eventKey: string,\n newEventHandler: (e: Event) => void,\n oldEventHandler: (e: Event) => void\n) => {\n const eventName = getEventName(eventKey);\n\n if (oldEventHandler !== newEventHandler) {\n if (oldEventHandler) {\n element.removeEventListener(eventName, oldEventHandler);\n }\n\n if (newEventHandler) {\n element.addEventListener(eventName, newEventHandler);\n }\n }\n};\n\nconst updateStyle = (\n style: Record<string, string>,\n oldStyle: Record<string, string>,\n element?: HTMLElement | Element | DocumentFragment | Text\n) => {\n const originalStyle = { ...oldStyle };\n const elementStyle = (element as HTMLElement)?.style;\n\n if (elementStyle) {\n Object.entries(style).forEach(([styleKey, dataValue]) => {\n (elementStyle as any)[styleKey] = dataValue;\n delete originalStyle[styleKey];\n });\n\n Object.entries(originalStyle).forEach(\n ([styleKey]) => ((elementStyle as any)[styleKey] = '')\n );\n }\n};\n\nconst findRealParentElement = (\n vDom: WDom\n): HTMLElement | DocumentFragment | Text | undefined => {\n const isVirtualType = checkVirtualType(vDom.type);\n if (vDom.isRoot && isVirtualType) {\n return vDom.wrapElement;\n }\n\n if (!isVirtualType) {\n return vDom.el as HTMLElement;\n }\n\n return findRealParentElement(getParent(vDom));\n};\n","import { WDom, TagFunctionResolver, RenderType } from '@/types';\nimport { checkCustemComponentFunction } from '@/utils/predicator';\nimport { getParent, reRender } from '@/utils';\nimport { recursiveRemoveEvent } from '@/render';\nimport {\n checkEmptyElement,\n checkSameWDomWithOriginal,\n getWDomType,\n checkExisty,\n} from '@/utils/predicator';\n\nimport { runUnmountQueueFromWDom } from '@/hook/unmount';\n\nexport const makeNewWDomTree = (\n newWDom: WDom | TagFunctionResolver,\n originalWDom?: WDom\n) =>\n remakeNewWDom(\n newWDom,\n checkSameWDomWithOriginal[getWDomType(newWDom)](newWDom, originalWDom),\n originalWDom\n );\n\nconst remakeNewWDom = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n) => {\n const remakeWDom = generalize(newWDom, isSameType, originalWDom);\n\n remakeWDom.children = remakeChildrenForDiff(\n remakeWDom,\n isSameType,\n originalWDom\n );\n\n const needRerender = addReRenderTypeProperty(\n remakeWDom,\n isSameType,\n originalWDom\n );\n\n remakeWDom.needRerender = needRerender;\n\n if (needRerender !== 'A' && originalWDom) {\n remakeWDom.el = originalWDom.el;\n }\n\n if (\n needRerender &&\n ['D', 'R', 'SR'].includes(needRerender) &&\n originalWDom?.componentKey\n ) {\n runUnmountQueueFromWDom(originalWDom);\n recursiveRemoveEvent(originalWDom);\n remakeWDom.oldChildren = originalWDom.children;\n }\n\n remakeWDom.oldProps = originalWDom?.props;\n\n return remakeWDom;\n};\n\nconst addReRenderTypeProperty = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n): RenderType | undefined => {\n const existOriginalWDom = originalWDom && originalWDom.type;\n const isEmptyElement = checkEmptyElement(newWDom);\n const isRoot = !newWDom.getParent;\n const parentType = !isRoot && getParent(newWDom).type;\n const key = getKey(newWDom);\n const isKeyCheckedWDom = parentType === 'loop' && checkExisty(key);\n const isSameText =\n newWDom.type === 'text' &&\n isSameType &&\n newWDom.text === originalWDom?.text;\n\n let result: RenderType | undefined;\n if (isEmptyElement) {\n result = 'D';\n } else if (isSameText) {\n result = 'N';\n } else if (!existOriginalWDom) {\n result = 'A';\n } else if (isSameType) {\n result = isKeyCheckedWDom ? 'SU' : 'U';\n } else {\n result = isKeyCheckedWDom ? 'SR' : 'R';\n }\n\n return result;\n};\n\nconst generalize = (\n newWDom: WDom | TagFunctionResolver,\n isSameType: boolean,\n originalWDom?: WDom\n): WDom => {\n if (checkCustemComponentFunction(newWDom)) {\n return isSameType && originalWDom\n ? reRender(originalWDom, newWDom)\n : newWDom.resolve();\n }\n\n return newWDom;\n};\n\nconst remakeChildrenForDiff = (\n newWDom: WDom,\n isSameType: boolean,\n originalWDom?: WDom\n) =>\n isSameType && originalWDom\n ? remakeChildrenForUpdate(newWDom, originalWDom)\n : remakeChildrenForAdd(newWDom);\n\nconst remakeChildrenForAdd = (newWDom: WDom) =>\n (newWDom.children || []).map((item: WDom) => {\n const childItem = makeNewWDomTree(item);\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n\nconst remakeChildrenForUpdate = (newWDom: WDom, originalWDom: WDom) => {\n if (\n newWDom.type === 'loop' &&\n checkExisty(getKey((newWDom.children || [])[0]))\n ) {\n return remakeChildrenForLoopUpdate(newWDom, originalWDom);\n }\n\n return (newWDom.children || []).map((item: WDom, index: number) => {\n const childItem = makeNewWDomTree(\n item,\n (originalWDom.children || [])[index]\n );\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n};\n\nconst remakeChildrenForLoopUpdate = (newWDom: WDom, originalWDom: WDom) => {\n const [remakedChildren, unUsedChildren] = diffLoopChildren(\n newWDom,\n originalWDom\n );\n\n unUsedChildren.map(unusedItem => {\n const el = unusedItem.el;\n\n if (el?.parentNode) {\n el.parentNode.removeChild(el);\n }\n });\n\n return remakedChildren;\n};\n\nconst diffLoopChildren = (newWDom: WDom, originalWDom: WDom) => {\n const newChildren = [...(newWDom.children || [])];\n const originalChildren = [...(originalWDom.children || [])];\n const remakedChildren = newChildren.map(item => {\n const originalItem = findSameKeyOriginalItem(item, originalChildren);\n const childItem = makeNewWDomTree(item, originalItem);\n\n if (originalItem) {\n originalChildren.splice(originalChildren.indexOf(originalItem), 1);\n }\n\n childItem.getParent = () => newWDom;\n\n return childItem;\n });\n\n return [remakedChildren, originalChildren];\n};\n\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) =>\n originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === getKey(item)\n );\n\nconst getKey = (target: WDom) =>\n target?.componentProps?.key ?? target?.props?.key;\n","import { componentRef, getComponentKey } from '@/utils/universalRef';\n\nimport { useUpdated } from '@/hook/useUpdate';\n\nexport const updateCallback = (\n effectAction: () => (() => void) | void,\n dependencies: () => any[] = () => []\n) => {\n const updateReqs = componentRef.get(getComponentKey())!.upR;\n\n updateReqs.push(() => useUpdated(effectAction, dependencies));\n useUpdated(effectAction, dependencies);\n};\n\nexport const runUpdateCallback = () => {\n const updateReqs = componentRef.get(getComponentKey())?.upR;\n\n if (updateReqs?.length) {\n updateReqs.forEach(callback => callback());\n }\n};\n","import {\n WDom,\n TagFunction,\n FragmentFunction,\n Props,\n MiddleStateWDomChildren,\n MiddleStateWDom,\n NodePointer,\n Component,\n} from '@/types';\n\nimport { makeNewWDomTree } from '@/diff';\nimport { wDomUpdate } from '@/render';\nimport {\n initUpdateHookState,\n initMountHookState,\n setRedrawAction,\n needDiffRef,\n componentRender,\n getComponentSubInfo,\n} from '@/utils/universalRef';\nimport { runUpdateCallback } from '@/hook/updateCallback';\nimport {\n checkFragmentFunction,\n checkCustemComponentFunction,\n} from '@/utils/predicator';\n\nexport const Fragment = (_props: Props, ...children: WDom[]) => ({\n type: 'fragment',\n children,\n});\n\nexport const h = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n ...children: MiddleStateWDomChildren\n) => {\n const nodeParentPointer: NodePointer = { value: undefined };\n const newProps = props || {};\n const newChildren = remakeChildren(nodeParentPointer, children);\n const node = makeNode(tag, newProps, newChildren);\n\n if (!checkCustemComponentFunction(node)) {\n nodeParentPointer.value = node;\n }\n\n return node;\n};\n\nexport const mount =\n <T>(component: Component<T>) =>\n (_props: T, _children: WDom[]) =>\n component;\n\nconst reRenderCustomComponent = (\n tag: TagFunction,\n props: Props,\n children: WDom[],\n originalWDom: WDom\n) => {\n needDiffRef.value = true;\n\n const newWDom = makeWDomResolver(tag, props, children);\n const newWDomTree = makeNewWDomTree(newWDom, originalWDom);\n const { isRoot, getParent, wrapElement, afterElement } = originalWDom;\n\n newWDomTree.getParent = getParent;\n\n if (!isRoot && getParent) {\n const brothers = getParent()?.children || [];\n const index = brothers.indexOf(originalWDom);\n\n brothers.splice(index, 1, newWDomTree);\n } else {\n newWDomTree.isRoot = true;\n newWDomTree.wrapElement = wrapElement;\n newWDomTree.afterElement = afterElement;\n }\n\n needDiffRef.value = false;\n wDomUpdate(newWDomTree);\n};\n\nconst makeWDomResolver = (tag: TagFunction, props: Props, children: WDom[]) => {\n const tagName = tag.name;\n const constructor = tag;\n // 리졸브는 컴포넌트를 새로 만든다.\n const resolve = (componentKey = props) => {\n initMountHookState(componentKey);\n\n const component = tag(props, children);\n const componentMaker = component(\n componentRender(componentKey),\n props,\n children\n );\n\n const customNode = makeCustomNode(\n componentMaker,\n componentKey,\n tag,\n props,\n children\n );\n\n const originalWDom = customNode;\n\n setRedrawAction(componentKey, () =>\n reRenderCustomComponent(tag, props, children, originalWDom)\n );\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n customNode;\n\n return customNode;\n };\n\n return { tagName, constructor, props, children, resolve };\n};\n\nconst makeCustomNode = (\n componentMaker: (props: Props) => WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n const customNode = componentMaker(props);\n\n addComponentProps(\n customNode,\n componentKey,\n tag,\n props,\n children,\n makeReRender(componentMaker, componentKey, tag, props, children)\n );\n\n return customNode;\n};\n\nconst makeReRender = (\n componentMaker: (props: Props) => WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[]\n) => {\n const reRender = () =>\n wDomMaker(componentMaker, componentKey, tag, props, children, reRender);\n return reRender;\n};\n\nconst wDomMaker = (\n componentMaker: (props: Props) => WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n initUpdateHookState(componentKey);\n runUpdateCallback();\n\n const originalWDom = componentMaker(props);\n\n setRedrawAction(componentKey, () =>\n reRenderCustomComponent(tag, props, children, originalWDom)\n );\n\n addComponentProps(originalWDom, componentKey, tag, props, children, reRender);\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n originalWDom;\n\n return originalWDom;\n};\n\nconst addComponentProps = (\n wDom: WDom,\n componentKey: Props,\n tag: TagFunction,\n props: Props,\n children: WDom[],\n reRender: () => WDom\n) => {\n Object.assign(wDom, {\n componentProps: props,\n componentChildren: children,\n constructor: tag,\n tagName: tag.name,\n componentKey,\n reRender,\n });\n};\n\nconst makeNode = (\n tag: TagFunction | FragmentFunction | string,\n props: Props,\n children: WDom[]\n) => {\n if (checkFragmentFunction(tag)) {\n return Fragment(props, ...children);\n } else if (checkCustemComponentFunction(tag)) {\n const componetMakeResolver = makeWDomResolver(tag, props, children);\n\n return needDiffRef.value\n ? componetMakeResolver\n : componetMakeResolver.resolve();\n }\n\n return {\n type: 'element',\n tag,\n props,\n children,\n };\n};\n\nconst remakeChildren = (\n nodeParentPointer: NodePointer,\n children: MiddleStateWDomChildren\n): WDom[] =>\n children.map((item: MiddleStateWDom) => {\n const childItem = makeChildrenItem(item);\n\n childItem.getParent = () => nodeParentPointer.value;\n\n return childItem;\n });\n\nconst makeChildrenItem = (item: MiddleStateWDom): WDom => {\n if (item === null || item === undefined || item === false) {\n return { type: null };\n } else if (Array.isArray(item)) {\n const nodeParentPointer: NodePointer = { value: undefined };\n const children = remakeChildren(nodeParentPointer, item);\n const node = {\n type: 'loop',\n children,\n };\n nodeParentPointer.value = node;\n\n return node;\n } else if (typeof item === 'string' || typeof item === 'number') {\n return { type: 'text', text: item };\n }\n\n return item;\n};\n","export const ref = <T>(initValue: T) => ({ value: initValue });\nexport const nextTick = () => Promise.resolve();\n"],"names":["updateProps","getParent","reRender"],"mappings":"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"}
|
package/dist/lithent.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lithent={})}(this,(function(e){"use strict";const t=e=>"object"==typeof e&&!("resolve"in e),n=(e,n)=>t(e)&&e.type===n,l=(e,n)=>{var l,o;return t(e)&&(null==n?void 0:n.type)===e.type&&((null==(l=null==n?void 0:n.children)?void 0:l.length)===(null==(o=null==e?void 0:e.children)?void 0:o.length)||"loop"===e.type)},o=e=>"function"==typeof e&&!
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lithent={})}(this,(function(e){"use strict";const t=e=>"object"==typeof e&&!("resolve"in e),n=(e,n)=>t(e)&&e.type===n,l=(e,n)=>{var l,o;return t(e)&&(null==n?void 0:n.type)===e.type&&((null==(l=null==n?void 0:n.children)?void 0:l.length)===(null==(o=null==e?void 0:e.children)?void 0:o.length)||"loop"===e.type)},o=e=>e&&["fragment","loop"].includes(e),r=e=>"function"==typeof e&&!u(e)||"object"==typeof e&&"resolve"in e,u=e=>"function"==typeof e&&e===he,c=e=>t(e)&&!e.type,i=e=>null!=e,s=(e,t)=>"style"===e&&"object"==typeof t,d={c:(e,t)=>e.constructor===(null==t?void 0:t.constructor),l:l,t:l,e:(e,n)=>{var l,o;return t(e)&&"element"===(null==n?void 0:n.type)&&(null==n?void 0:n.tag)===e.tag&&(null==(l=null==n?void 0:n.children)?void 0:l.length)===(null==(o=null==e?void 0:e.children)?void 0:o.length)},f:(e,n)=>{var l,o;return t(e)&&"fragment"===(null==n?void 0:n.type)&&(null==(l=null==n?void 0:n.children)?void 0:l.length)===(null==(o=null==e?void 0:e.children)?void 0:o.length)},et:l},p=e=>e.getParent&&e.getParent(),a=e=>e.replace(/^on(.*)/,((e,t)=>t.toLowerCase())),v=e=>"className"===e?"class":e,h=(e,t)=>{e&&t!==e&&(Object.keys(e).forEach((t=>delete e[t])),Object.entries(t||{}).forEach((([t,n])=>e[t]=n)))},m=(e,t)=>{e&&t!==e&&(e.splice(0,e.length),t&&t.forEach((t=>e.push(t))))};let f=[],y=!1;const g={value:""},E={value:{}},b={value:!1},x=new WeakMap,P=()=>E.value,R=(e,t)=>x.get(e)[t],C=(e,t)=>{x.get(e).up=()=>{f.push({componentKey:e,exec:t}),y||(y=!0,queueMicrotask(j))}},S=e=>{E.value=e,(e=>{x.set(e,{vd:{value:null},up:()=>{},upR:[],upS:{value:0},upD:[],upCB:[],mts:[],umts:[]})})(e)},T=(e,t)=>{(e.children||[]).forEach((e=>{const n=e.componentKey;n&&t.push(n),T(e,t)}))},j=()=>{let e=[];f.forEach((t=>{var n,l;const o=null==(l=null==(n=x.get(t.componentKey))?void 0:n.vd)?void 0:l.value;o&&T(o,e)}));const t=[],n=f.reduce(((n,l)=>{const{componentKey:o}=l;return e.includes(o)||t.includes(o)||(t.push(o),n.push(l)),n}),[]);for(;n.length;){const e=n.shift();e&&e.exec()}f=[],y=!1},N=e=>{const{componentKey:t}=e;t&&k(t),O(e)},O=e=>{(e.children||[]).forEach((e=>{e.componentKey?N(e):O(e)}))},k=e=>{const t=x.get(e);t&&(t.umts.forEach((e=>e())),t.umts=[],x.delete(e))};let K=[];const A=()=>{K.forEach((e=>w(e))),K=[]},w=e=>{const{componentKey:t}=e;if(t){const e=x.get(t),n=null==e?void 0:e.mts,l=null==e?void 0:e.upS;E.value=t,l&&(l.value=0),n&&(e.mts=[],n.forEach((e=>{const t=e();var n;t&&(n=t,x.get(P()).umts.push(n))})))}},D=(e,t=(()=>[]))=>{const n=x.get(P()),{upD:l,upS:o}=n,r=l[o.value];if(r&&B(r,t())){const t=e();t&&n.upCB.push(t)}l[o.value]=t(),o.value+=1},B=(e,t)=>!e.length&&!e.length||e.some(((e,n)=>e!==t[n])),L=e=>{const{needRerender:t}=e;t&&"N"!==t&&{A:V,D:F,R:z,U:J,SR:q,SU:I}[t](e)},M=e=>{e.props&&e.el&&G(e.props,e.el),(e.children||[]).forEach((e=>{M(e)}))},U=e=>{H(e,e.wrapElement)},F=e=>{e.oldProps&&e.el&&G(e.oldProps,e.el),H(e,ne(p(e)))},H=(e,t)=>{var n,l;t&&e.el&&(1===(null==(n=e.el)?void 0:n.nodeType)?t.removeChild(e.el):11===(null==(l=e.el)?void 0:l.nodeType)&&_(e,t),delete e.el)},_=(e,t)=>{((null==e?void 0:e.oldChildren)||(null==e?void 0:e.children)||[]).forEach((e=>{var n,l;1===(null==(n=e.el)?void 0:n.nodeType)?t.removeChild(null==e?void 0:e.el):11===(null==(l=e.el)?void 0:l.nodeType)&&_(e,t)}))},q=e=>{F(e),V(e)},I=e=>{F(e),V(e,e.el)},V=(e,t)=>{t||(t=Z(e));const n=p(e);if(n.type){const l=ne(n),o="loop"===n.type?W(n,p(n)):W(e,n);t&&l&&(o?l.insertBefore(t,o):l.appendChild(t),A())}},W=(e,t)=>{const n=t.children||[],l=n.indexOf(e)+1,r=n.slice(l),u=X(r),c=t.type||"";return u||(!t.isRoot&&o(c)?W(t,p(t)):t.isRoot&&t.afterElement?t.afterElement:void 0)},X=e=>e.reduce(((e,t)=>{const n=t.type,l=t.el,r=n&&o(n);return e||(r?X(t.children||[]):l&&11!==l.nodeType?l:e)}),void 0),z=e=>{const t=p(e),n=e.el;if(t.type&&n)if(11===n.nodeType)q(e);else{const l=ne(t),o=Z(e);l&&l.replaceChild(o,n),A()}},G=(e,t)=>{Object.entries(e||{}).forEach((([e,n])=>{e.match(/^on/)&&t.removeEventListener(a(e),n)}))},J=e=>{var t;const n=e.el;if("text"!==e.type){if(n){const{oldProps:l,props:o}=e;Y(o,n,l),delete e.oldProps,"input"===e.tag&&(n.value=String((null==(t=null==e?void 0:e.props)?void 0:t.value)||""))}(e.children||[]).forEach((e=>L(e))),(e=>{const{componentKey:t}=e;if(t){const n=x.get(t),l=null==n?void 0:n.upCB,o=null==n?void 0:n.upS;E.value=t,o&&(o.value=0),e.constructor&&l&&(n.upCB=[],l.forEach((e=>e())))}})(e)}else Q(e)},Q=e=>{const t=e.el;t&&(t.nodeValue=String(e.text))},Y=(e,t,n)=>{const l={...n};Object.entries(e||{}).forEach((([e,n])=>{"key"===e||("innerHTML"===e&&"string"==typeof n?t.innerHTML=n:s(e,n)?te(n,s(e,l.style)?l.style:{},t):((e,t)=>"ref"===e&&"object"==typeof t)(e,n)?n.value=t:e.match(/^on/)?ee(t,e,n,l[e]):(e=>1===e.nodeType&&["radio","checkbox"].includes(e.type))(t)&&"checked"===e?t.checked=!!n:(e=>1===e.nodeType&&"TEXTAREA"===e.tagName)(t)&&"value"===e?t.value=n:(e=>1===e.nodeType&&"OPTION"===e.tagName)(t)&&"selected"===e?t.selected=!!n:(e=>"number"==typeof e||"string"==typeof e)(n)&&(g.value&&"xmlns"!==e?t.setAttributeNS(null,v(e),String(n)):t.setAttribute(v(e),String(n)))),delete l[e]})),Object.keys(l).forEach((e=>t.removeAttribute(e)))},Z=e=>{let t;const{type:n,tag:l,text:r,props:u,children:c=[]}=e,s=o(n);return"svg"===l&&(g.value=String(null==u?void 0:u.xmlns)),t=s?new DocumentFragment:"element"===n&&l?g.value?document.createElementNS(g.value,l):document.createElement(l):"text"===n&&i(r)?document.createTextNode(String(r)):document.createElement("e"),$(c,t),Y(u,t),e.el=t,(e=>{e.componentKey&&K.push(e)})(e),"svg"===l&&(g.value=""),t},$=(e,t)=>{const n=e.reduce(((e,t)=>(t.type&&e.appendChild(Z(t)),e)),new DocumentFragment);t&&n.hasChildNodes()&&t.appendChild(n)},ee=(e,t,n,l)=>{const o=a(t);l!==n&&(l&&e.removeEventListener(o,l),n&&e.addEventListener(o,n))},te=(e,t,n)=>{const l={...t},o=null==n?void 0:n.style;o&&(Object.entries(e).forEach((([e,t])=>{o[e]=t,delete l[e]})),Object.entries(l).forEach((([e])=>o[e]="")))},ne=e=>{const t=o(e.type);return e.isRoot&&t?e.wrapElement:t?ne(p(e)):e.el},le=(e,t)=>oe(e,d[(e=>{let t="et";return r(e)?t="c":n(e,"fragment")?t="f":n(e,"element")?t="e":n(e,"loop")?t="l":n(e,"text")?t="t":c(e)&&(t="et"),t})(e)](e,t),t),oe=(e,t,n)=>{const l=ue(e,t,n);l.children=ce(l,t,n);const o=re(l,t,n);return l.needRerender=o,"A"!==o&&n&&(l.el=n.el),o&&["D","R","SR"].includes(o)&&(null==n?void 0:n.componentKey)&&(N(n),M(n),l.oldChildren=n.children),l.oldProps=null==n?void 0:n.props,l},re=(e,t,n)=>{const l=n&&n.type,o=c(e),r=!!e.getParent&&p(e).type,u=ve(e),s="loop"===r&&i(u),d="text"===e.type&&t&&e.text===(null==n?void 0:n.text);let a;return a=o?"D":d?"N":l?t?s?"SU":"U":s?"SR":"R":"A",a},ue=(e,t,n)=>r(e)?t&&n?((e,t)=>{const{componentProps:n,componentChildren:l}=e,{props:o,children:r}=t;return n&&h(n,o),l&&m(l,r),e.reRender&&e.reRender()})(n,e):e.resolve():e,ce=(e,t,n)=>t&&n?se(e,n):ie(e),ie=e=>(e.children||[]).map((t=>{const n=le(t);return n.getParent=()=>e,n})),se=(e,t)=>"loop"===e.type&&i(ve((e.children||[])[0]))?de(e,t):(e.children||[]).map(((n,l)=>{const o=le(n,(t.children||[])[l]);return o.getParent=()=>e,o})),de=(e,t)=>{const[n,l]=pe(e,t);return l.map((e=>{const t=e.el;(null==t?void 0:t.parentNode)&&t.parentNode.removeChild(t)})),n},pe=(e,t)=>{const n=[...e.children||[]],l=[...t.children||[]];return[n.map((t=>{const n=ae(t,l),o=le(t,n);return n&&l.splice(l.indexOf(n),1),o.getParent=()=>e,o})),l]},ae=(e,t)=>t.find((t=>ve(t)===ve(e))),ve=e=>{var t,n,l;return null!=(l=null==(t=null==e?void 0:e.componentProps)?void 0:t.key)?l:null==(n=null==e?void 0:e.props)?void 0:n.key},he=(e,...t)=>({type:"fragment",children:t}),me=(e,t,n,l)=>{var o;b.value=!0;const r=fe(e,t,n),u=le(r,l),{isRoot:c,getParent:i,wrapElement:s,afterElement:d}=l;if(u.getParent=i,!c&&i){const e=(null==(o=i())?void 0:o.children)||[],t=e.indexOf(l);e.splice(t,1,u)}else u.isRoot=!0,u.wrapElement=s,u.afterElement=d;b.value=!1,L(u)},fe=(e,t,n)=>({tagName:e.name,constructor:e,props:t,children:n,resolve:(l=t)=>{S(l);const o=e(t,n)((e=>()=>{var t;const n=null==(t=x.get(e))?void 0:t.up;let l=!1;return n&&(n(),l=!0),l})(l),t,n),r=ye(o,l,e,t,n),u=r;return C(l,(()=>me(e,t,n,u))),R(l,"vd").value=r,r}}),ye=(e,t,n,l,o)=>{const r=e(l);return be(r,t,n,l,o,ge(e,t,n,l,o)),r},ge=(e,t,n,l,o)=>{const r=()=>Ee(e,t,n,l,o,r);return r},Ee=(e,t,n,l,o,r)=>{(e=>{E.value=e})(t),(()=>{var e;const t=null==(e=x.get(P()))?void 0:e.upR;(null==t?void 0:t.length)&&t.forEach((e=>e()))})();const u=e(l);return C(t,(()=>me(n,l,o,u))),be(u,t,n,l,o,r),R(t,"vd").value=u,u},be=(e,t,n,l,o,r)=>{Object.assign(e,{componentProps:l,componentChildren:o,constructor:n,tagName:n.name,componentKey:t,reRender:r})},xe=(e,t,n)=>{if(u(e))return he(t,...n);if(r(e)){const l=fe(e,t,n);return b.value?l:l.resolve()}return{type:"element",tag:e,props:t,children:n}},Pe=(e,t)=>t.map((t=>{const n=Re(t);return n.getParent=()=>e.value,n})),Re=e=>{if(null==e||!1===e)return{type:null};if(Array.isArray(e)){const t={value:void 0},n={type:"loop",children:Pe(t,e)};return t.value=n,n}return"string"==typeof e||"number"==typeof e?{type:"text",text:e}:e};e.Fragment=he,e.h=(e,t,...n)=>{const l={value:void 0},o=t||{},u=Pe(l,n),c=xe(e,o,u);return r(c)||(l.value=c),c},e.mount=e=>(t,n)=>e,e.mountCallback=e=>x.get(P()).mts.push(e),e.nextTick=()=>Promise.resolve(),e.ref=e=>({value:e}),e.render=(e,t,n)=>{null!=t||(t=document.body),e.isRoot=!0,e.wrapElement=t;const l=Z(e);return n?(e.afterElement=n,t.insertBefore(l,n)):t.appendChild(l),A(),()=>{var t;const n=null==(t=x.get(e.componentProps||{}))?void 0:t.vd.value;n&&(N(n),M(n),U(n))}},e.updateCallback=(e,t=(()=>[]))=>{x.get(P()).upR.push((()=>D(e,t))),D(e,t)},Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
2
2
|
//# sourceMappingURL=lithent.umd.js.map
|