lithent 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lithent.mjs +22 -2
- 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 +1 -0
- package/dist/utils/predicator.d.ts +2 -0
- package/examples/dist/assets/index.1a4d787f.js +2 -0
- package/examples/dist/assets/index.1a4d787f.js.map +1 -0
- package/examples/dist/index.html +1 -1
- package/package.json +1 -1
- package/src/render.ts +17 -1
- package/src/types/index.ts +1 -0
- package/src/utils/predicator.ts +8 -0
- package/src/wDom.ts +2 -1
- package/examples/dist/assets/index.32d7fabc.js +0 -2
- package/examples/dist/assets/index.32d7fabc.js.map +0 -1
package/dist/lithent.mjs
CHANGED
|
@@ -25,6 +25,12 @@ const checkOptionElement = (element) => {
|
|
|
25
25
|
const checkTextareaElement = (element) => {
|
|
26
26
|
return element.nodeType === 1 && element.tagName === "TEXTAREA";
|
|
27
27
|
};
|
|
28
|
+
const checkCheckboxElement = (element) => {
|
|
29
|
+
return element.nodeType === 1 && element.type === "checkbox";
|
|
30
|
+
};
|
|
31
|
+
const checkRadioElement = (element) => {
|
|
32
|
+
return element.nodeType === 1 && element.type === "radio";
|
|
33
|
+
};
|
|
28
34
|
const checkNormalAttribute = (dataValue) => typeof dataValue === "number" || typeof dataValue === "string";
|
|
29
35
|
const getWDomType = (wDom) => {
|
|
30
36
|
let result;
|
|
@@ -261,6 +267,7 @@ const render = (wDom, wrapElement, afterElement) => {
|
|
|
261
267
|
wDom.wrapElement = wrapElement;
|
|
262
268
|
const Dom = wDomToDom(wDom, true);
|
|
263
269
|
if (afterElement) {
|
|
270
|
+
wDom.afterElement = afterElement;
|
|
264
271
|
wrapElement.insertBefore(Dom, afterElement);
|
|
265
272
|
} else {
|
|
266
273
|
wrapElement.appendChild(Dom);
|
|
@@ -329,7 +336,13 @@ const typeAdd = (newWDom, newElement) => {
|
|
|
329
336
|
const parentWDom = getParent(newWDom);
|
|
330
337
|
if (parentWDom.type) {
|
|
331
338
|
const parentEl = findRealParentElement(parentWDom);
|
|
332
|
-
const
|
|
339
|
+
const isLoop = parentWDom.type === "loop";
|
|
340
|
+
let nextEl;
|
|
341
|
+
if (isLoop) {
|
|
342
|
+
nextEl = startFindNextBrotherElement(parentWDom, getParent(parentWDom));
|
|
343
|
+
} else {
|
|
344
|
+
nextEl = startFindNextBrotherElement(newWDom, parentWDom);
|
|
345
|
+
}
|
|
333
346
|
if (newElement && parentEl) {
|
|
334
347
|
if (nextEl) {
|
|
335
348
|
parentEl.insertBefore(newElement, nextEl);
|
|
@@ -352,6 +365,8 @@ const startFindNextBrotherElement = (wDom, parentWDom) => {
|
|
|
352
365
|
}
|
|
353
366
|
if (!parentWDom.isRoot && ["fragment", "loop"].includes(parentType)) {
|
|
354
367
|
return startFindNextBrotherElement(parentWDom, getParent(parentWDom));
|
|
368
|
+
} else if (parentWDom.isRoot && parentWDom.afterElement) {
|
|
369
|
+
return parentWDom.afterElement;
|
|
355
370
|
}
|
|
356
371
|
return void 0;
|
|
357
372
|
};
|
|
@@ -443,6 +458,10 @@ const updateProps = (props, element, oldProps) => {
|
|
|
443
458
|
dataValue,
|
|
444
459
|
originalProps[dataKey]
|
|
445
460
|
);
|
|
461
|
+
} else if (checkRadioElement(element) && dataKey === "checked") {
|
|
462
|
+
element.checked = !!dataValue;
|
|
463
|
+
} else if (checkCheckboxElement(element) && dataKey === "checked") {
|
|
464
|
+
element.checked = !!dataValue;
|
|
446
465
|
} else if (checkTextareaElement(element) && dataKey === "value") {
|
|
447
466
|
element.value = dataValue;
|
|
448
467
|
} else if (checkOptionElement(element) && dataKey === "selected") {
|
|
@@ -682,7 +701,7 @@ const reRenderCustomComponent = (tag, props, children, originalWDom) => {
|
|
|
682
701
|
needDiffRef.value = true;
|
|
683
702
|
const newWDom = makeWDomResolver(tag, props, children);
|
|
684
703
|
const newWDomTree = makeNewWDomTree(newWDom, originalWDom);
|
|
685
|
-
const { isRoot, getParent: getParent2, wrapElement } = originalWDom;
|
|
704
|
+
const { isRoot, getParent: getParent2, wrapElement, afterElement } = originalWDom;
|
|
686
705
|
newWDomTree.getParent = getParent2;
|
|
687
706
|
if (!isRoot && getParent2) {
|
|
688
707
|
const brothers = ((_a = getParent2()) == null ? void 0 : _a.children) || [];
|
|
@@ -691,6 +710,7 @@ const reRenderCustomComponent = (tag, props, children, originalWDom) => {
|
|
|
691
710
|
} else {
|
|
692
711
|
newWDomTree.isRoot = true;
|
|
693
712
|
newWDomTree.wrapElement = wrapElement;
|
|
713
|
+
newWDomTree.afterElement = afterElement;
|
|
694
714
|
}
|
|
695
715
|
needDiffRef.value = false;
|
|
696
716
|
wDomUpdate(newWDomTree);
|
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 */\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 checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nexport const checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => newWDom.constructor === originalWDom?.constructor;\n\nexport const 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\nexport const 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\nexport const checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => {\n return (\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n (originalWDom?.children?.length === newWDom?.children?.length ||\n newWDom.type === 'loop')\n );\n};\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkFunction = (target: unknown): target is Function =>\n typeof target === 'function';\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 { value: HTMLElement | DocumentFragment | Text | undefined } =>\n dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const checkOptionElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'OPTION';\n};\n\nexport const checkTextareaElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'TEXTAREA';\n};\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 | undefined => {\n let result: WDomType | undefined;\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 if (!parentVDom) {\n throw Error('Not found parent vDom');\n }\n\n return parentVDom;\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 if (!newVDom) {\n throw Error('Unable reRender');\n }\n\n return newVDom;\n};\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 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\nexport const 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","/**\n * Rerender시 실제 dom에 반영해줘야 하는 상태\n *\n * 1. (ADD). 가상돔 비교시 오리지날이 없으면 새로 추가되는 dom으로 판단한다.\n * 2. (REPLACE). 오리지날이 있고 같은 엘리먼트타입이 아닌 경우 해당 위치의 태그 자체를 교체해준다.\n * 3. (UPDATE). 오리지날이 있고 같은 타입이면 dom의 속성만 변경해 주며, 텍스트 노드일 경우는 텍스트를 교체해준다.\n * 4. (DELETE). 오리지날이 있고 새로운 엘리먼트 타입은 null타입일 경우 dom을 삭제한다.\n * 5. (SORTED-REPLACE). loop의 경우 REPLACE라도 키값에 의해 순서가 변경될 수 있으므로 새로운 dom을 단순히 기존 위치에 교체하지 않고 새로 삼입하여 정렬한다.\n * 6. (SORTED-UPDATE). loop의 경우 UPDATE라도 키값에 의해 순서가 변경될수 있으므로 재 삽입하여 정렬한다.\n * 7. (NONE). text타입의 경우 text가 같다면 변경이 필요 없으므로 방치한다. (Todo. 다른 타입의 경우 처리필요)\n */\n\nimport { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkNormalAttribute,\n checkExisty,\n checkOptionElement,\n checkTextareaElement,\n} from '@/utils/predicator';\n\nimport { runMountedQueueFromWDom } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent } from '@/utils';\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null\n) => {\n if (!wrapElement) {\n throw Error('WrapELement is null');\n }\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom, true);\n\n if (afterElement) {\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n const exec = {\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n }[needRerender];\n exec(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 typeDelete = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const parent = findRealParentElement(parentWDom);\n\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\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, true);\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const nextEl = 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 }\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, true);\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 if (element) {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(dataKey, 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 | 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 (\n dataKey === 'innerHTML' &&\n element &&\n typeof dataValue === 'string'\n ) {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n const style = dataValue;\n const oldStyle = checkStyleData(dataKey, originalProps.style) || {};\n\n updateStyle(style, oldStyle, element);\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 (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 (element as HTMLElement).setAttribute(dataKey, String(dataValue));\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, init: boolean) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === 'fragment' || type === 'loop';\n\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === 'element' && tag) {\n element = document.createElement(tag);\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n }\n\n wDomChildrenToDom(children, element, init);\n updateProps(props, element);\n\n wDom.el = element;\n\n runMountedQueueFromWDom(wDom);\n\n return element || document.createElement('div');\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | DocumentFragment | Text,\n init?: boolean\n) => {\n if (init) {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem, init));\n }\n\n return acc;\n },\n new DocumentFragment()\n );\n\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\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 = eventKey.replace(/^on(.*)/, (_match, p1) =>\n p1.toLowerCase()\n );\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 | 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 const parentVDom = getParent(vDom);\n\n return findRealParentElement(parentVDom);\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 const type = getWDomType(newWDom);\n\n if (!type) {\n throw new Error('Unknown type wdom');\n }\n\n const isSameType = checkSameWDomWithOriginal[type](newWDom, originalWDom);\n\n const result = remakeNewWDom(newWDom, isSameType, originalWDom);\n\n return result;\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 && 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\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 {\n remakedChildren,\n unUsedChildren: originalChildren,\n };\n};\n\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) => {\n const key = getKey(item);\n\n return originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === key\n );\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 type Children = WDom[];\n\ntype WDomInfoParam = {\n componentMaker: (props: Props) => WDom;\n componentKey: Props;\n tag: TagFunction;\n props: Props;\n children: WDom[];\n};\ntype WDomInfoWithRenderParam = WDomInfoParam & {\n reRender: () => WDom;\n};\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 } = 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 }\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 = (wDomInfo: WDomInfoParam) => {\n const { componentMaker, props } = wDomInfo;\n const customNode = componentMaker(props);\n const reRender = makeReRender(wDomInfo);\n\n addComponentProps(customNode, { ...wDomInfo, reRender });\n\n return customNode;\n};\n\nconst makeReRender = (wDomInfo: WDomInfoParam) => {\n const reRender = () => wDomMaker({ ...wDomInfo, reRender });\n\n return reRender;\n};\n\nconst wDomMaker = (wDomInfo: WDomInfoWithRenderParam) => {\n const { componentMaker, componentKey, tag, props, children } = wDomInfo;\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, wDomInfo);\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n originalWDom;\n\n return originalWDom;\n};\n\nconst addComponentProps = (wDom: WDom, info: WDomInfoWithRenderParam) => {\n const { componentKey, tag, props, children, reRender } = info;\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":"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"}
|
|
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 */\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 checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nexport const checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => newWDom.constructor === originalWDom?.constructor;\n\nexport const 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\nexport const 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\nexport const checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => {\n return (\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n (originalWDom?.children?.length === newWDom?.children?.length ||\n newWDom.type === 'loop')\n );\n};\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkFunction = (target: unknown): target is Function =>\n typeof target === 'function';\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 { value: HTMLElement | DocumentFragment | Text | undefined } =>\n dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const checkOptionElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'OPTION';\n};\n\nexport const checkTextareaElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'TEXTAREA';\n};\n\nexport const checkCheckboxElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.type === 'checkbox';\n};\n\nexport const checkRadioElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.type === 'radio';\n};\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 | undefined => {\n let result: WDomType | undefined;\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 if (!parentVDom) {\n throw Error('Not found parent vDom');\n }\n\n return parentVDom;\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 if (!newVDom) {\n throw Error('Unable reRender');\n }\n\n return newVDom;\n};\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 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\nexport const 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","/**\n * Rerender시 실제 dom에 반영해줘야 하는 상태\n *\n * 1. (ADD). 가상돔 비교시 오리지날이 없으면 새로 추가되는 dom으로 판단한다.\n * 2. (REPLACE). 오리지날이 있고 같은 엘리먼트타입이 아닌 경우 해당 위치의 태그 자체를 교체해준다.\n * 3. (UPDATE). 오리지날이 있고 같은 타입이면 dom의 속성만 변경해 주며, 텍스트 노드일 경우는 텍스트를 교체해준다.\n * 4. (DELETE). 오리지날이 있고 새로운 엘리먼트 타입은 null타입일 경우 dom을 삭제한다.\n * 5. (SORTED-REPLACE). loop의 경우 REPLACE라도 키값에 의해 순서가 변경될 수 있으므로 새로운 dom을 단순히 기존 위치에 교체하지 않고 새로 삼입하여 정렬한다.\n * 6. (SORTED-UPDATE). loop의 경우 UPDATE라도 키값에 의해 순서가 변경될수 있으므로 재 삽입하여 정렬한다.\n * 7. (NONE). text타입의 경우 text가 같다면 변경이 필요 없으므로 방치한다. (Todo. 다른 타입의 경우 처리필요)\n */\n\nimport { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkNormalAttribute,\n checkExisty,\n checkOptionElement,\n checkTextareaElement,\n checkCheckboxElement,\n checkRadioElement,\n} from '@/utils/predicator';\n\nimport { runMountedQueueFromWDom } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent } from '@/utils';\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null\n) => {\n if (!wrapElement) {\n throw Error('WrapELement is null');\n }\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom, true);\n\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n const exec = {\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n }[needRerender];\n exec(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 typeDelete = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const parent = findRealParentElement(parentWDom);\n\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\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, true);\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === 'loop';\n\n let nextEl;\n if (isLoop) {\n nextEl = startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else {\n nextEl = startFindNextBrotherElement(newWDom, parentWDom);\n }\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, true);\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 if (element) {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(dataKey, 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 | 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 (\n dataKey === 'innerHTML' &&\n element &&\n typeof dataValue === 'string'\n ) {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n const style = dataValue;\n const oldStyle = checkStyleData(dataKey, originalProps.style) || {};\n\n updateStyle(style, oldStyle, element);\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 (checkRadioElement(element) && dataKey === 'checked') {\n (element as HTMLInputElement).checked = !!dataValue;\n } else if (checkCheckboxElement(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 (element as HTMLElement).setAttribute(dataKey, String(dataValue));\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, init: boolean) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === 'fragment' || type === 'loop';\n\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === 'element' && tag) {\n element = document.createElement(tag);\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n }\n\n wDomChildrenToDom(children, element, init);\n updateProps(props, element);\n\n wDom.el = element;\n\n runMountedQueueFromWDom(wDom);\n\n return element || document.createElement('div');\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | DocumentFragment | Text,\n init?: boolean\n) => {\n if (init) {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem, init));\n }\n\n return acc;\n },\n new DocumentFragment()\n );\n\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\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 = eventKey.replace(/^on(.*)/, (_match, p1) =>\n p1.toLowerCase()\n );\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 | 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 const parentVDom = getParent(vDom);\n\n return findRealParentElement(parentVDom);\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 const type = getWDomType(newWDom);\n\n if (!type) {\n throw new Error('Unknown type wdom');\n }\n\n const isSameType = checkSameWDomWithOriginal[type](newWDom, originalWDom);\n\n const result = remakeNewWDom(newWDom, isSameType, originalWDom);\n\n return result;\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 && 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\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 {\n remakedChildren,\n unUsedChildren: originalChildren,\n };\n};\n\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) => {\n const key = getKey(item);\n\n return originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === key\n );\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 type Children = WDom[];\n\ntype WDomInfoParam = {\n componentMaker: (props: Props) => WDom;\n componentKey: Props;\n tag: TagFunction;\n props: Props;\n children: WDom[];\n};\ntype WDomInfoWithRenderParam = WDomInfoParam & {\n reRender: () => WDom;\n};\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 = (wDomInfo: WDomInfoParam) => {\n const { componentMaker, props } = wDomInfo;\n const customNode = componentMaker(props);\n const reRender = makeReRender(wDomInfo);\n\n addComponentProps(customNode, { ...wDomInfo, reRender });\n\n return customNode;\n};\n\nconst makeReRender = (wDomInfo: WDomInfoParam) => {\n const reRender = () => wDomMaker({ ...wDomInfo, reRender });\n\n return reRender;\n};\n\nconst wDomMaker = (wDomInfo: WDomInfoWithRenderParam) => {\n const { componentMaker, componentKey, tag, props, children } = wDomInfo;\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, wDomInfo);\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n originalWDom;\n\n return originalWDom;\n};\n\nconst addComponentProps = (wDom: WDom, info: WDomInfoWithRenderParam) => {\n const { componentKey, tag, props, children, reRender } = info;\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":"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"}
|
package/dist/lithent.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).lithent={})}(this,(function(e){"use strict";const n=e=>"function"==typeof e&&!t(e)||"object"==typeof e&&"resolve"in e,t=e=>"function"==typeof e&&e===ue,o=e=>"object"==typeof e&&!("resolve"in e),l=(e,n)=>o(e)&&e.type===n,r=e=>o(e)&&!e.type,u=(e,n)=>{var t,l;return o(e)&&(null==n?void 0:n.type)===e.type&&((null==(t=null==n?void 0:n.children)?void 0:t.length)===(null==(l=null==e?void 0:e.children)?void 0:l.length)||"loop"===e.type)},c=e=>null!=e,i=(e,n)=>"style"===e&&"object"==typeof n,d={c:(e,n)=>e.constructor===(null==n?void 0:n.constructor),l:u,t:u,e:(e,n)=>{var t,l;return o(e)&&"element"===(null==n?void 0:n.type)&&(null==n?void 0:n.tag)===e.tag&&(null==(t=null==n?void 0:n.children)?void 0:t.length)===(null==(l=null==e?void 0:e.children)?void 0:l.length)},f:(e,n)=>{var t,l;return o(e)&&"fragment"===(null==n?void 0:n.type)&&(null==(t=null==n?void 0:n.children)?void 0:t.length)===(null==(l=null==e?void 0:e.children)?void 0:l.length)},et:u},s=e=>{const n=e.getParent&&e.getParent();if(!n)throw Error("Not found parent vDom");return n},p=(e,n)=>{e&&n!==e&&(Object.keys(e).forEach((n=>delete e[n])),Object.entries(n||{}).forEach((([n,t])=>e[n]=t)))},a=(e,n)=>{e&&n!==e&&(e.splice(0,e.length),n&&n.forEach((n=>e.push(n))))},v={value:{}},h={value:!1},f=new WeakMap,m={value:[]},y={value:null},g=()=>v.value,E=(e,n)=>f.get(e)[n],b=(e,n)=>{f.get(e).up=()=>{m.value.push({componentKey:e,exec:n}),y.value||(y.value=setTimeout(x))}},C=e=>{v.value=e,(e=>{f.set(e,{vd:{value:null},up:()=>{},upR:[],upS:{value:0},upD:[],upCB:[],mts:[],umts:[]})})(e)},R=(e,n)=>{(e.children||[]).forEach((e=>{const t=e.componentKey;t&&n.push(t),R(e,n)}))},x=()=>{let e=[];m.value.forEach((n=>{var t,o;const l=null==(o=null==(t=f.get(n.componentKey))?void 0:t.vd)?void 0:o.value;l&&R(l,e)}));const n=[],t=m.value.reduce(((t,o)=>{const{componentKey:l}=o;return e.includes(l)||n.includes(l)||(n.push(l),t.push(o)),t}),[]);for(;t.length;){const e=t.shift();e&&e.exec()}},P=e=>{const{componentKey:n}=e;n&&w(n),T(e)},T=e=>{(e.children||[]).forEach((e=>{e.componentKey?P(e):T(e)}))},w=e=>{const n=f.get(e);n&&(n.umts.forEach((e=>e())),n.umts=[],f.delete(e))},S=e=>{const{componentKey:n}=e;if(n){const e=f.get(n),t=null==e?void 0:e.mts,o=null==e?void 0:e.upS;v.value=n,o&&(o.value=0),t&&(e.mts=[],t.forEach((e=>{const n=e();var t;n&&(t=n,f.get(g()).umts.push(t))})))}},j=(e,n=(()=>[]))=>{const t=f.get(g()),{upD:o,upS:l}=t,r=o[l.value];if(r&&k(r,n())){const n=e();n&&t.upCB.push(n)}o[l.value]=n(),l.value+=1},k=(e,n)=>!e.length&&!e.length||e.some(((e,t)=>e!==n[t])),O=e=>{const{needRerender:n}=e;if(n&&"N"!==n){(0,{A:U,D:N,R:F,U:W,SR:D,SU:M}[n])(e)}},K=e=>{e.props&&e.el&&H(e.props,e.el),(e.children||[]).forEach((e=>{K(e)}))},N=e=>{var n,t;const o=s(e),l=G(o);e.oldProps&&e.el&&H(e.oldProps,e.el),l&&e.el&&(1===(null==(n=e.el)?void 0:n.nodeType)?l.removeChild(e.el):11===(null==(t=e.el)?void 0:t.nodeType)&&A(e,l),delete e.el)},A=(e,n)=>{((null==e?void 0:e.oldChildren)||(null==e?void 0:e.children)||[]).forEach((e=>{var t,o;1===(null==(t=e.el)?void 0:t.nodeType)?n.removeChild(null==e?void 0:e.el):11===(null==(o=e.el)?void 0:o.nodeType)&&A(e,n)}))},D=e=>{N(e),U(e)},M=e=>{N(e),U(e,e.el)},U=(e,n)=>{n||(n=V(e,!0));const t=s(e);if(t.type){const o=G(t),l=L(e,t);n&&o&&(l?o.insertBefore(n,l):o.appendChild(n))}S(e)},L=(e,n)=>{const t=n.children||[],o=t.indexOf(e)+1,l=t.slice(o),r=B(l),u=n.type||"";return r||(!n.isRoot&&["fragment","loop"].includes(u)?L(n,s(n)):void 0)},B=e=>e.reduce(((e,n)=>{const t=n.type,o=n.el,l=t&&["fragment","loop"].includes(t);return e||(l?B(n.children||[]):o&&11!==o.nodeType?o:e)}),void 0),F=e=>{const n=s(e),t=e.el;if(n.type&&t)if(11===t.nodeType)D(e);else{const o=G(n),l=V(e,!0);o&&o.replaceChild(l,t)}S(e)},H=(e,n)=>{n&&Object.entries(e||{}).forEach((([e,t])=>{e.match(/^on/)&&n.removeEventListener(e,t)}))},W=e=>{var n;const t=e.el;if("text"!==e.type){if(t){const{oldProps:o,props:l}=e;I(l,t,o),delete e.oldProps,"input"===e.tag&&(t.value=String((null==(n=null==e?void 0:e.props)?void 0:n.value)||""))}(e.children||[]).forEach((e=>O(e))),(e=>{const{componentKey:n}=e;if(n){const t=f.get(n),o=null==t?void 0:t.upCB,l=null==t?void 0:t.upS;v.value=n,l&&(l.value=0),e.constructor&&o&&(t.upCB=[],o.forEach((e=>e())))}})(e)}else _(e)},_=e=>{const n=e.el;n&&(n.nodeValue=String(e.text))},I=(e,n,t)=>{const o={...t};Object.entries(e||{}).forEach((([e,t])=>{if("key"===e);else if("innerHTML"===e&&n&&"string"==typeof t)n.innerHTML=t;else if(i(e,t)){const l=t,r=i(e,o.style)||{};z(l,r,n)}else((e,n)=>"ref"===e&&"object"==typeof n)(e,t)?t.value=n:e.match(/^on/)?q(n,e,t,o[e]):(e=>1===e.nodeType&&"TEXTAREA"===e.tagName)(n)&&"value"===e?n.value=t:(e=>1===e.nodeType&&"OPTION"===e.tagName)(n)&&"selected"===e?n.selected=!!t:(e=>"number"==typeof e||"string"==typeof e)(t)&&n.setAttribute(e,String(t));delete o[e]})),Object.keys(o).forEach((e=>n.removeAttribute(e)))},V=(e,n)=>{let t;const{type:o,tag:l,text:r,props:u,children:i=[]}=e;return"fragment"===o||"loop"===o?t=new DocumentFragment:"element"===o&&l?t=document.createElement(l):"text"===o&&c(r)&&(t=document.createTextNode(String(r))),X(i,t,n),I(u,t),e.el=t,S(e),t||document.createElement("div")},X=(e,n,t)=>{if(t){const o=e.reduce(((e,n)=>(n.type&&e.appendChild(V(n,t)),e)),new DocumentFragment);n&&o.hasChildNodes()&&n.appendChild(o)}},q=(e,n,t,o)=>{const l=n.replace(/^on(.*)/,((e,n)=>n.toLowerCase()));o!==t&&(o&&e.removeEventListener(l,o),t&&e.addEventListener(l,t))},z=(e,n,t)=>{const o={...n},l=null==t?void 0:t.style;l&&(Object.entries(e).forEach((([e,n])=>{l[e]=n,delete o[e]})),Object.entries(o).forEach((([e])=>l[e]="")))},G=e=>{const n="fragment"===e.type||"loop"===e.type;if(e.isRoot&&n)return e.wrapElement;if(!n)return e.el;const t=s(e);return G(t)},J=(e,t)=>{const o=(e=>{let t;return n(e)?t="c":l(e,"fragment")?t="f":l(e,"element")?t="e":l(e,"loop")?t="l":l(e,"text")?t="t":r(e)&&(t="et"),t})(e);if(!o)throw new Error("Unknown type wdom");const u=d[o](e,t);return Q(e,u,t)},Q=(e,n,t)=>{const o=Z(e,n,t);o.children=$(o,n,t);const l=Y(o,n,t);return o.needRerender=l,"A"!==l&&t&&(o.el=t.el),l&&["D","R","SR"].includes(l)&&(null==t?void 0:t.componentKey)&&(P(t),K(t),o.oldChildren=t.children),o.oldProps=null==t?void 0:t.props,o},Y=(e,n,t)=>{const o=t&&t.type,l=r(e),u=!!e.getParent&&s(e).type,i=re(e),d="loop"===u&&c(i),p="text"===e.type&&n&&e.text===(null==t?void 0:t.text);let a;return a=l?"D":p?"N":o?n?d?"SU":"U":d?"SR":"R":"A",a},Z=(e,t,o)=>n(e)?t&&o?((e,n)=>{const{componentProps:t,componentChildren:o}=e,{props:l,children:r}=n;t&&p(t,l),o&&a(o,r);const u=e.reRender&&e.reRender();if(!u)throw Error("Unable reRender");return u})(o,e):e.resolve():e,$=(e,n,t)=>n&&t?ne(e,t):ee(e),ee=e=>(e.children||[]).map((n=>{const t=J(n);return t.getParent=()=>e,t})),ne=(e,n)=>"loop"===e.type&&c(re((e.children||[])[0]))?te(e,n):(e.children||[]).map(((t,o)=>{const l=J(t,(n.children||[])[o]);return l.getParent=()=>e,l})),te=(e,n)=>{const{remakedChildren:t,unUsedChildren:o}=oe(e,n);return o.map((e=>{const n=e.el;n&&n.parentNode&&n.parentNode.removeChild(n)})),t},oe=(e,n)=>{const t=[...e.children||[]],o=[...n.children||[]];return{remakedChildren:t.map((n=>{const t=le(n,o),l=J(n,t);return t&&o.splice(o.indexOf(t),1),l.getParent=()=>e,l})),unUsedChildren:o}},le=(e,n)=>{const t=re(e);return n.find((e=>re(e)===t))},re=e=>{var n,t,o;return null!=(o=null==(n=null==e?void 0:e.componentProps)?void 0:n.key)?o:null==(t=null==e?void 0:e.props)?void 0:t.key},ue=(e,...n)=>({type:"fragment",children:n}),ce=(e,n,t,o)=>{var l;h.value=!0;const r=ie(e,n,t),u=J(r,o),{isRoot:c,getParent:i,wrapElement:d}=o;if(u.getParent=i,!c&&i){const e=(null==(l=i())?void 0:l.children)||[],n=e.indexOf(o);e.splice(n,1,u)}else u.isRoot=!0,u.wrapElement=d;h.value=!1,O(u)},ie=(e,n,t)=>({tagName:e.name,constructor:e,props:n,children:t,resolve:(o=n)=>{C(o);const l=e(n,t)((e=>()=>{var n;const t=null==(n=f.get(e))?void 0:n.up;let o=!1;return t&&(t(),o=!0),o})(o),n,t),r=de({componentMaker:l,componentKey:o,tag:e,props:n,children:t}),u=r;return b(o,(()=>ce(e,n,t,u))),E(o,"vd").value=r,r}}),de=e=>{const{componentMaker:n,props:t}=e,o=n(t),l=se(e);return ae(o,{...e,reRender:l}),o},se=e=>{const n=()=>pe({...e,reRender:n});return n},pe=e=>{const{componentMaker:n,componentKey:t,tag:o,props:l,children:r}=e;(e=>{v.value=e})(t),(()=>{var e;const n=null==(e=f.get(g()))?void 0:e.upR;(null==n?void 0:n.length)&&n.forEach((e=>e())),m.value=[],y.value=null})();const u=n(l);return b(t,(()=>ce(o,l,r,u))),ae(u,e),E(t,"vd").value=u,u},ae=(e,n)=>{const{componentKey:t,tag:o,props:l,children:r,reRender:u}=n;Object.assign(e,{componentProps:l,componentChildren:r,constructor:o,tagName:o.name,componentKey:t,reRender:u})},ve=(e,o,l)=>{if(t(e))return ue(o,...l);if(n(e)){const n=ie(e,o,l);return h.value?n:n.resolve()}return{type:"element",tag:e,props:o,children:l}},he=(e,n)=>n.map((n=>{const t=fe(n);return t.getParent=()=>e.value,t})),fe=e=>{if(null==e||!1===e)return{type:null};if(Array.isArray(e)){const n={value:void 0},t={type:"loop",children:he(n,e)};return n.value=t,t}return"string"==typeof e||"number"==typeof e?{type:"text",text:e}:e};e.Fragment=ue,e.h=(e,t,...o)=>{const l={value:void 0},r=t||{},u=he(l,o),c=ve(e,r,u);return n(c)||(l.value=c),c},e.mount=e=>(n,t)=>e,e.mountCallback=e=>{f.get(g()).mts.push(e)},e.ref=e=>({value:e}),e.render=(e,n,t)=>{if(!n)throw Error("WrapELement is null");e.isRoot=!0,e.wrapElement=n;const o=V(e,!0);t?n.insertBefore(o,t):n.appendChild(o)},e.updateCallback=(e,n=(()=>[]))=>{f.get(g()).upR.push((()=>j(e,n))),j(e,n)},Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
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=>"function"==typeof e&&!n(e)||"object"==typeof e&&"resolve"in e,n=e=>"function"==typeof e&&e===ce,o=e=>"object"==typeof e&&!("resolve"in e),l=(e,t)=>o(e)&&e.type===t,r=e=>o(e)&&!e.type,c=(e,t)=>{var n,l;return o(e)&&(null==t?void 0:t.type)===e.type&&((null==(n=null==t?void 0:t.children)?void 0:n.length)===(null==(l=null==e?void 0:e.children)?void 0:l.length)||"loop"===e.type)},u=e=>null!=e,i=(e,t)=>"style"===e&&"object"==typeof t,d={c:(e,t)=>e.constructor===(null==t?void 0:t.constructor),l:c,t:c,e:(e,t)=>{var n,l;return o(e)&&"element"===(null==t?void 0:t.type)&&(null==t?void 0:t.tag)===e.tag&&(null==(n=null==t?void 0:t.children)?void 0:n.length)===(null==(l=null==e?void 0:e.children)?void 0:l.length)},f:(e,t)=>{var n,l;return o(e)&&"fragment"===(null==t?void 0:t.type)&&(null==(n=null==t?void 0:t.children)?void 0:n.length)===(null==(l=null==e?void 0:e.children)?void 0:l.length)},et:c},p=e=>{const t=e.getParent&&e.getParent();if(!t)throw Error("Not found parent vDom");return t},s=(e,t)=>{e&&t!==e&&(Object.keys(e).forEach((t=>delete e[t])),Object.entries(t||{}).forEach((([t,n])=>e[t]=n)))},a=(e,t)=>{e&&t!==e&&(e.splice(0,e.length),t&&t.forEach((t=>e.push(t))))},v={value:{}},h={value:!1},f=new WeakMap,m={value:[]},y={value:null},g=()=>v.value,E=(e,t)=>f.get(e)[t],b=(e,t)=>{f.get(e).up=()=>{m.value.push({componentKey:e,exec:t}),y.value||(y.value=setTimeout(x))}},R=e=>{v.value=e,(e=>{f.set(e,{vd:{value:null},up:()=>{},upR:[],upS:{value:0},upD:[],upCB:[],mts:[],umts:[]})})(e)},C=(e,t)=>{(e.children||[]).forEach((e=>{const n=e.componentKey;n&&t.push(n),C(e,t)}))},x=()=>{let e=[];m.value.forEach((t=>{var n,o;const l=null==(o=null==(n=f.get(t.componentKey))?void 0:n.vd)?void 0:o.value;l&&C(l,e)}));const t=[],n=m.value.reduce(((n,o)=>{const{componentKey:l}=o;return e.includes(l)||t.includes(l)||(t.push(l),n.push(o)),n}),[]);for(;n.length;){const e=n.shift();e&&e.exec()}},T=e=>{const{componentKey:t}=e;t&&k(t),P(e)},P=e=>{(e.children||[]).forEach((e=>{e.componentKey?T(e):P(e)}))},k=e=>{const t=f.get(e);t&&(t.umts.forEach((e=>e())),t.umts=[],f.delete(e))},w=e=>{const{componentKey:t}=e;if(t){const e=f.get(t),n=null==e?void 0:e.mts,o=null==e?void 0:e.upS;v.value=t,o&&(o.value=0),n&&(e.mts=[],n.forEach((e=>{const t=e();var n;t&&(n=t,f.get(g()).umts.push(n))})))}},S=(e,t=(()=>[]))=>{const n=f.get(g()),{upD:o,upS:l}=n,r=o[l.value];if(r&&j(r,t())){const t=e();t&&n.upCB.push(t)}o[l.value]=t(),l.value+=1},j=(e,t)=>!e.length&&!e.length||e.some(((e,n)=>e!==t[n])),O=e=>{const{needRerender:t}=e;if(t&&"N"!==t){(0,{A:U,D:N,R:F,U:W,SR:D,SU:M}[t])(e)}},K=e=>{e.props&&e.el&&H(e.props,e.el),(e.children||[]).forEach((e=>{K(e)}))},N=e=>{var t,n;const o=p(e),l=G(o);e.oldProps&&e.el&&H(e.oldProps,e.el),l&&e.el&&(1===(null==(t=e.el)?void 0:t.nodeType)?l.removeChild(e.el):11===(null==(n=e.el)?void 0:n.nodeType)&&A(e,l),delete e.el)},A=(e,t)=>{((null==e?void 0:e.oldChildren)||(null==e?void 0:e.children)||[]).forEach((e=>{var n,o;1===(null==(n=e.el)?void 0:n.nodeType)?t.removeChild(null==e?void 0:e.el):11===(null==(o=e.el)?void 0:o.nodeType)&&A(e,t)}))},D=e=>{N(e),U(e)},M=e=>{N(e),U(e,e.el)},U=(e,t)=>{t||(t=V(e,!0));const n=p(e);if(n.type){const o=G(n);let l;l="loop"===n.type?L(n,p(n)):L(e,n),t&&o&&(l?o.insertBefore(t,l):o.appendChild(t))}w(e)},L=(e,t)=>{const n=t.children||[],o=n.indexOf(e)+1,l=n.slice(o),r=B(l),c=t.type||"";return r||(!t.isRoot&&["fragment","loop"].includes(c)?L(t,p(t)):t.isRoot&&t.afterElement?t.afterElement:void 0)},B=e=>e.reduce(((e,t)=>{const n=t.type,o=t.el,l=n&&["fragment","loop"].includes(n);return e||(l?B(t.children||[]):o&&11!==o.nodeType?o:e)}),void 0),F=e=>{const t=p(e),n=e.el;if(t.type&&n)if(11===n.nodeType)D(e);else{const o=G(t),l=V(e,!0);o&&o.replaceChild(l,n)}w(e)},H=(e,t)=>{t&&Object.entries(e||{}).forEach((([e,n])=>{e.match(/^on/)&&t.removeEventListener(e,n)}))},W=e=>{var t;const n=e.el;if("text"!==e.type){if(n){const{oldProps:o,props:l}=e;I(l,n,o),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=>O(e))),(e=>{const{componentKey:t}=e;if(t){const n=f.get(t),o=null==n?void 0:n.upCB,l=null==n?void 0:n.upS;v.value=t,l&&(l.value=0),e.constructor&&o&&(n.upCB=[],o.forEach((e=>e())))}})(e)}else _(e)},_=e=>{const t=e.el;t&&(t.nodeValue=String(e.text))},I=(e,t,n)=>{const o={...n};Object.entries(e||{}).forEach((([e,n])=>{if("key"===e);else if("innerHTML"===e&&t&&"string"==typeof n)t.innerHTML=n;else if(i(e,n)){const l=n,r=i(e,o.style)||{};z(l,r,t)}else((e,t)=>"ref"===e&&"object"==typeof t)(e,n)?n.value=t:e.match(/^on/)?q(t,e,n,o[e]):(e=>1===e.nodeType&&"radio"===e.type)(t)&&"checked"===e||(e=>1===e.nodeType&&"checkbox"===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)&&t.setAttribute(e,String(n));delete o[e]})),Object.keys(o).forEach((e=>t.removeAttribute(e)))},V=(e,t)=>{let n;const{type:o,tag:l,text:r,props:c,children:i=[]}=e;return"fragment"===o||"loop"===o?n=new DocumentFragment:"element"===o&&l?n=document.createElement(l):"text"===o&&u(r)&&(n=document.createTextNode(String(r))),X(i,n,t),I(c,n),e.el=n,w(e),n||document.createElement("div")},X=(e,t,n)=>{if(n){const o=e.reduce(((e,t)=>(t.type&&e.appendChild(V(t,n)),e)),new DocumentFragment);t&&o.hasChildNodes()&&t.appendChild(o)}},q=(e,t,n,o)=>{const l=t.replace(/^on(.*)/,((e,t)=>t.toLowerCase()));o!==n&&(o&&e.removeEventListener(l,o),n&&e.addEventListener(l,n))},z=(e,t,n)=>{const o={...t},l=null==n?void 0:n.style;l&&(Object.entries(e).forEach((([e,t])=>{l[e]=t,delete o[e]})),Object.entries(o).forEach((([e])=>l[e]="")))},G=e=>{const t="fragment"===e.type||"loop"===e.type;if(e.isRoot&&t)return e.wrapElement;if(!t)return e.el;const n=p(e);return G(n)},J=(e,n)=>{const o=(e=>{let n;return t(e)?n="c":l(e,"fragment")?n="f":l(e,"element")?n="e":l(e,"loop")?n="l":l(e,"text")?n="t":r(e)&&(n="et"),n})(e);if(!o)throw new Error("Unknown type wdom");const c=d[o](e,n);return Q(e,c,n)},Q=(e,t,n)=>{const o=Z(e,t,n);o.children=$(o,t,n);const l=Y(o,t,n);return o.needRerender=l,"A"!==l&&n&&(o.el=n.el),l&&["D","R","SR"].includes(l)&&(null==n?void 0:n.componentKey)&&(T(n),K(n),o.oldChildren=n.children),o.oldProps=null==n?void 0:n.props,o},Y=(e,t,n)=>{const o=n&&n.type,l=r(e),c=!!e.getParent&&p(e).type,i=re(e),d="loop"===c&&u(i),s="text"===e.type&&t&&e.text===(null==n?void 0:n.text);let a;return a=l?"D":s?"N":o?t?d?"SU":"U":d?"SR":"R":"A",a},Z=(e,n,o)=>t(e)?n&&o?((e,t)=>{const{componentProps:n,componentChildren:o}=e,{props:l,children:r}=t;n&&s(n,l),o&&a(o,r);const c=e.reRender&&e.reRender();if(!c)throw Error("Unable reRender");return c})(o,e):e.resolve():e,$=(e,t,n)=>t&&n?te(e,n):ee(e),ee=e=>(e.children||[]).map((t=>{const n=J(t);return n.getParent=()=>e,n})),te=(e,t)=>"loop"===e.type&&u(re((e.children||[])[0]))?ne(e,t):(e.children||[]).map(((n,o)=>{const l=J(n,(t.children||[])[o]);return l.getParent=()=>e,l})),ne=(e,t)=>{const{remakedChildren:n,unUsedChildren:o}=oe(e,t);return o.map((e=>{const t=e.el;t&&t.parentNode&&t.parentNode.removeChild(t)})),n},oe=(e,t)=>{const n=[...e.children||[]],o=[...t.children||[]];return{remakedChildren:n.map((t=>{const n=le(t,o),l=J(t,n);return n&&o.splice(o.indexOf(n),1),l.getParent=()=>e,l})),unUsedChildren:o}},le=(e,t)=>{const n=re(e);return t.find((e=>re(e)===n))},re=e=>{var t,n,o;return null!=(o=null==(t=null==e?void 0:e.componentProps)?void 0:t.key)?o:null==(n=null==e?void 0:e.props)?void 0:n.key},ce=(e,...t)=>({type:"fragment",children:t}),ue=(e,t,n,o)=>{var l;h.value=!0;const r=ie(e,t,n),c=J(r,o),{isRoot:u,getParent:i,wrapElement:d,afterElement:p}=o;if(c.getParent=i,!u&&i){const e=(null==(l=i())?void 0:l.children)||[],t=e.indexOf(o);e.splice(t,1,c)}else c.isRoot=!0,c.wrapElement=d,c.afterElement=p;h.value=!1,O(c)},ie=(e,t,n)=>({tagName:e.name,constructor:e,props:t,children:n,resolve:(o=t)=>{R(o);const l=e(t,n)((e=>()=>{var t;const n=null==(t=f.get(e))?void 0:t.up;let o=!1;return n&&(n(),o=!0),o})(o),t,n),r=de({componentMaker:l,componentKey:o,tag:e,props:t,children:n}),c=r;return b(o,(()=>ue(e,t,n,c))),E(o,"vd").value=r,r}}),de=e=>{const{componentMaker:t,props:n}=e,o=t(n),l=pe(e);return ae(o,{...e,reRender:l}),o},pe=e=>{const t=()=>se({...e,reRender:t});return t},se=e=>{const{componentMaker:t,componentKey:n,tag:o,props:l,children:r}=e;(e=>{v.value=e})(n),(()=>{var e;const t=null==(e=f.get(g()))?void 0:e.upR;(null==t?void 0:t.length)&&t.forEach((e=>e())),m.value=[],y.value=null})();const c=t(l);return b(n,(()=>ue(o,l,r,c))),ae(c,e),E(n,"vd").value=c,c},ae=(e,t)=>{const{componentKey:n,tag:o,props:l,children:r,reRender:c}=t;Object.assign(e,{componentProps:l,componentChildren:r,constructor:o,tagName:o.name,componentKey:n,reRender:c})},ve=(e,o,l)=>{if(n(e))return ce(o,...l);if(t(e)){const t=ie(e,o,l);return h.value?t:t.resolve()}return{type:"element",tag:e,props:o,children:l}},he=(e,t)=>t.map((t=>{const n=fe(t);return n.getParent=()=>e.value,n})),fe=e=>{if(null==e||!1===e)return{type:null};if(Array.isArray(e)){const t={value:void 0},n={type:"loop",children:he(t,e)};return t.value=n,n}return"string"==typeof e||"number"==typeof e?{type:"text",text:e}:e};e.Fragment=ce,e.h=(e,n,...o)=>{const l={value:void 0},r=n||{},c=he(l,o),u=ve(e,r,c);return t(u)||(l.value=u),u},e.mount=e=>(t,n)=>e,e.mountCallback=e=>{f.get(g()).mts.push(e)},e.ref=e=>({value:e}),e.render=(e,t,n)=>{if(!t)throw Error("WrapELement is null");e.isRoot=!0,e.wrapElement=t;const o=V(e,!0);n?(e.afterElement=n,t.insertBefore(o,n)):t.appendChild(o)},e.updateCallback=(e,t=(()=>[]))=>{f.get(g()).upR.push((()=>S(e,t))),S(e,t)},Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
2
2
|
//# sourceMappingURL=lithent.umd.js.map
|
package/dist/lithent.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lithent.umd.js","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/wDom.ts","../src/hook/updateCallback.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 */\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 checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nexport const checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => newWDom.constructor === originalWDom?.constructor;\n\nexport const 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\nexport const 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\nexport const checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => {\n return (\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n (originalWDom?.children?.length === newWDom?.children?.length ||\n newWDom.type === 'loop')\n );\n};\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkFunction = (target: unknown): target is Function =>\n typeof target === 'function';\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 { value: HTMLElement | DocumentFragment | Text | undefined } =>\n dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const checkOptionElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'OPTION';\n};\n\nexport const checkTextareaElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'TEXTAREA';\n};\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 | undefined => {\n let result: WDomType | undefined;\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 if (!parentVDom) {\n throw Error('Not found parent vDom');\n }\n\n return parentVDom;\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 if (!newVDom) {\n throw Error('Unable reRender');\n }\n\n return newVDom;\n};\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 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\nexport const 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","/**\n * Rerender시 실제 dom에 반영해줘야 하는 상태\n *\n * 1. (ADD). 가상돔 비교시 오리지날이 없으면 새로 추가되는 dom으로 판단한다.\n * 2. (REPLACE). 오리지날이 있고 같은 엘리먼트타입이 아닌 경우 해당 위치의 태그 자체를 교체해준다.\n * 3. (UPDATE). 오리지날이 있고 같은 타입이면 dom의 속성만 변경해 주며, 텍스트 노드일 경우는 텍스트를 교체해준다.\n * 4. (DELETE). 오리지날이 있고 새로운 엘리먼트 타입은 null타입일 경우 dom을 삭제한다.\n * 5. (SORTED-REPLACE). loop의 경우 REPLACE라도 키값에 의해 순서가 변경될 수 있으므로 새로운 dom을 단순히 기존 위치에 교체하지 않고 새로 삼입하여 정렬한다.\n * 6. (SORTED-UPDATE). loop의 경우 UPDATE라도 키값에 의해 순서가 변경될수 있으므로 재 삽입하여 정렬한다.\n * 7. (NONE). text타입의 경우 text가 같다면 변경이 필요 없으므로 방치한다. (Todo. 다른 타입의 경우 처리필요)\n */\n\nimport { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkNormalAttribute,\n checkExisty,\n checkOptionElement,\n checkTextareaElement,\n} from '@/utils/predicator';\n\nimport { runMountedQueueFromWDom } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent } from '@/utils';\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null\n) => {\n if (!wrapElement) {\n throw Error('WrapELement is null');\n }\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom, true);\n\n if (afterElement) {\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n const exec = {\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n }[needRerender];\n exec(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 typeDelete = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const parent = findRealParentElement(parentWDom);\n\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\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, true);\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const nextEl = 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 }\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, true);\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 if (element) {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(dataKey, 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 | 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 (\n dataKey === 'innerHTML' &&\n element &&\n typeof dataValue === 'string'\n ) {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n const style = dataValue;\n const oldStyle = checkStyleData(dataKey, originalProps.style) || {};\n\n updateStyle(style, oldStyle, element);\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 (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 (element as HTMLElement).setAttribute(dataKey, String(dataValue));\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, init: boolean) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === 'fragment' || type === 'loop';\n\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === 'element' && tag) {\n element = document.createElement(tag);\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n }\n\n wDomChildrenToDom(children, element, init);\n updateProps(props, element);\n\n wDom.el = element;\n\n runMountedQueueFromWDom(wDom);\n\n return element || document.createElement('div');\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | DocumentFragment | Text,\n init?: boolean\n) => {\n if (init) {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem, init));\n }\n\n return acc;\n },\n new DocumentFragment()\n );\n\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\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 = eventKey.replace(/^on(.*)/, (_match, p1) =>\n p1.toLowerCase()\n );\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 | 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 const parentVDom = getParent(vDom);\n\n return findRealParentElement(parentVDom);\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 const type = getWDomType(newWDom);\n\n if (!type) {\n throw new Error('Unknown type wdom');\n }\n\n const isSameType = checkSameWDomWithOriginal[type](newWDom, originalWDom);\n\n const result = remakeNewWDom(newWDom, isSameType, originalWDom);\n\n return result;\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 && 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\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 {\n remakedChildren,\n unUsedChildren: originalChildren,\n };\n};\n\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) => {\n const key = getKey(item);\n\n return originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === key\n );\n};\n\nconst getKey = (target: WDom) =>\n target?.componentProps?.key ?? target?.props?.key;\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 type Children = WDom[];\n\ntype WDomInfoParam = {\n componentMaker: (props: Props) => WDom;\n componentKey: Props;\n tag: TagFunction;\n props: Props;\n children: WDom[];\n};\ntype WDomInfoWithRenderParam = WDomInfoParam & {\n reRender: () => WDom;\n};\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 } = 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 }\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 = (wDomInfo: WDomInfoParam) => {\n const { componentMaker, props } = wDomInfo;\n const customNode = componentMaker(props);\n const reRender = makeReRender(wDomInfo);\n\n addComponentProps(customNode, { ...wDomInfo, reRender });\n\n return customNode;\n};\n\nconst makeReRender = (wDomInfo: WDomInfoParam) => {\n const reRender = () => wDomMaker({ ...wDomInfo, reRender });\n\n return reRender;\n};\n\nconst wDomMaker = (wDomInfo: WDomInfoWithRenderParam) => {\n const { componentMaker, componentKey, tag, props, children } = wDomInfo;\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, wDomInfo);\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n originalWDom;\n\n return originalWDom;\n};\n\nconst addComponentProps = (wDom: WDom, info: WDomInfoWithRenderParam) => {\n const { componentKey, tag, props, children, reRender } = info;\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","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","export const ref = <T>(initValue: T) => ({ value: initValue });\n"],"names":["checkCustemComponentFunction","target","checkFragmentFunction","Fragment","checkPlainWDomType","wDom","checkPlainType","typeName","type","checkEmptyElement","checkNormalTypeElement","newWDom","originalWDom","_a","children","length","_b","checkExisty","value","checkStyleData","dataKey","dataValue","checkSameWDomWithOriginal","c","constructor","l","t","e","tag","f","et","getParent","vDom","parentVDom","Error","updateProps","props","infoProps","Object","keys","forEach","key","entries","updateChildren","infoChidren","splice","childrenItem","push","componentKeyRef","needDiffRef","componentRef","WeakMap","redrawQueue","redrawQueueTimeout","getComponentKey","getComponentSubInfo","componentKey","subKey","get","setRedrawAction","exec","up","setTimeout","execRedrawQueue","initMountHookState","set","vd","upR","upS","upD","upCB","mts","umts","setComponetRef","recursiveGetChildKeys","result","item","childComKey","childItemList","childVd","addedKey","reduce","acc","includes","action","shift","runUnmountQueueFromWDom","removeItem","recursiveRunUnmount","subInfo","effect","delete","runMountedQueueFromWDom","component","queue","sequence","callback","effectAction","useUpdated","dependencies","def","checkNeedPushQueue","originalDefs","newDefs","some","index","wDomUpdate","newWDomTree","needRerender","A","typeAdd","D","typeDelete","R","typeReplace","U","typeUpdate","SR","typeSortedReplace","SU","typeSortedUpdate","recursiveRemoveEvent","el","removeEvent","childItem","parentWDom","parent","findRealParentElement","oldProps","nodeType","removeChild","findChildWithRemoveElement","oldChildren","newElement","wDomToDom","parentEl","nextEl","startFindNextBrotherElement","insertBefore","appendChild","brothers","nextIndex","indexOf","candidiateBrothers","slice","finedNextEl","findChildFragmentNextElement","parentType","isRoot","targetEl","bItem","isFragment","orignalElement","parentElement","replaceChild","element","match","removeEventListener","String","runUpdatedQueueFromWDom","updateText","nodeValue","text","originalProps","innerHTML","style","oldStyle","updateStyle","checkRefData","updateEvent","tagName","checkTextareaElement","checkOptionElement","selected","checkNormalAttribute","setAttribute","removeAttribute","init","DocumentFragment","document","createElement","createTextNode","wDomChildrenToDom","elementChildren","hasChildNodes","eventKey","newEventHandler","oldEventHandler","eventName","replace","_match","p1","toLowerCase","addEventListener","originalStyle","elementStyle","styleKey","isVirtualType","wrapElement","makeNewWDomTree","getWDomType","isSameType","remakeNewWDom","remakeWDom","generalize","remakeChildrenForDiff","addReRenderTypeProperty","existOriginalWDom","isEmptyElement","getKey","isKeyCheckedWDom","isSameText","infoVdom","componentProps","componentChildren","newVDom","reRender","resolve","remakeChildrenForUpdate","remakeChildrenForAdd","map","remakeChildrenForLoopUpdate","remakedChildren","unUsedChildren","diffLoopChildren","unusedItem","parentNode","newChildren","originalChildren","originalItem","findSameKeyOriginalItem","find","orignalChildItem","_c","_props","reRenderCustomComponent","makeWDomResolver","name","componentMaker","componentRender","customNode","makeCustomNode","wDomInfo","makeReRender","addComponentProps","wDomMaker","initUpdateHookState","updateReqs","info","assign","makeNode","componetMakeResolver","remakeChildren","nodeParentPointer","makeChildrenItem","Array","isArray","node","newProps","_children","initValue","afterElement","Dom"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lithent.umd.js","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/wDom.ts","../src/hook/updateCallback.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 */\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 checkPlainWDomType = (wDom: WDomParam): wDom is WDom =>\n typeof wDom === 'object' && !('resolve' in wDom);\n\nexport const checkPlainType = (wDom: WDomParam, typeName: string) =>\n checkPlainWDomType(wDom) && wDom.type === typeName;\n\nexport const checkEmptyElement = (wDom: WDomParam) =>\n checkPlainWDomType(wDom) && !wDom.type;\n\nexport const checkSameCustomComponent = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => newWDom.constructor === originalWDom?.constructor;\n\nexport const 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\nexport const 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\nexport const checkNormalTypeElement = (\n newWDom: WDom | TagFunction | TagFunctionResolver,\n originalWDom?: WDom\n) => {\n return (\n checkPlainWDomType(newWDom) &&\n originalWDom?.type === newWDom.type &&\n (originalWDom?.children?.length === newWDom?.children?.length ||\n newWDom.type === 'loop')\n );\n};\n\nexport const checkExisty = (value: unknown) =>\n value !== null && value !== undefined;\n\nexport const checkFunction = (target: unknown): target is Function =>\n typeof target === 'function';\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 { value: HTMLElement | DocumentFragment | Text | undefined } =>\n dataKey === 'ref' && typeof dataValue === 'object';\n\nexport const checkOptionElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'OPTION';\n};\n\nexport const checkTextareaElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.tagName === 'TEXTAREA';\n};\n\nexport const checkCheckboxElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.type === 'checkbox';\n};\n\nexport const checkRadioElement = (element: any): element is HTMLElement => {\n return element.nodeType === 1 && element.type === 'radio';\n};\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 | undefined => {\n let result: WDomType | undefined;\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 if (!parentVDom) {\n throw Error('Not found parent vDom');\n }\n\n return parentVDom;\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 if (!newVDom) {\n throw Error('Unable reRender');\n }\n\n return newVDom;\n};\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 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\nexport const 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","/**\n * Rerender시 실제 dom에 반영해줘야 하는 상태\n *\n * 1. (ADD). 가상돔 비교시 오리지날이 없으면 새로 추가되는 dom으로 판단한다.\n * 2. (REPLACE). 오리지날이 있고 같은 엘리먼트타입이 아닌 경우 해당 위치의 태그 자체를 교체해준다.\n * 3. (UPDATE). 오리지날이 있고 같은 타입이면 dom의 속성만 변경해 주며, 텍스트 노드일 경우는 텍스트를 교체해준다.\n * 4. (DELETE). 오리지날이 있고 새로운 엘리먼트 타입은 null타입일 경우 dom을 삭제한다.\n * 5. (SORTED-REPLACE). loop의 경우 REPLACE라도 키값에 의해 순서가 변경될 수 있으므로 새로운 dom을 단순히 기존 위치에 교체하지 않고 새로 삼입하여 정렬한다.\n * 6. (SORTED-UPDATE). loop의 경우 UPDATE라도 키값에 의해 순서가 변경될수 있으므로 재 삽입하여 정렬한다.\n * 7. (NONE). text타입의 경우 text가 같다면 변경이 필요 없으므로 방치한다. (Todo. 다른 타입의 경우 처리필요)\n */\n\nimport { WDom, Props } from '@/types';\nimport {\n checkStyleData,\n checkRefData,\n checkNormalAttribute,\n checkExisty,\n checkOptionElement,\n checkTextareaElement,\n checkCheckboxElement,\n checkRadioElement,\n} from '@/utils/predicator';\n\nimport { runMountedQueueFromWDom } from '@/hook/mountCallback';\nimport { runUpdatedQueueFromWDom } from '@/hook/useUpdate';\nimport { getParent } from '@/utils';\n\nexport const render = (\n wDom: WDom,\n wrapElement: HTMLElement | null,\n afterElement?: HTMLElement | null\n) => {\n if (!wrapElement) {\n throw Error('WrapELement is null');\n }\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n\n const Dom = wDomToDom(wDom, true);\n\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n};\n\nexport const wDomUpdate = (newWDomTree: WDom) => {\n const { needRerender } = newWDomTree;\n\n if (needRerender && needRerender !== 'N') {\n const exec = {\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate,\n }[needRerender];\n exec(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 typeDelete = (newWDom: WDom) => {\n const parentWDom = getParent(newWDom);\n const parent = findRealParentElement(parentWDom);\n\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n\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, true);\n }\n\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === 'loop';\n\n let nextEl;\n if (isLoop) {\n nextEl = startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else {\n nextEl = startFindNextBrotherElement(newWDom, parentWDom);\n }\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, true);\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 if (element) {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]: [string, unknown]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(dataKey, 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 | 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 (\n dataKey === 'innerHTML' &&\n element &&\n typeof dataValue === 'string'\n ) {\n (element as HTMLElement).innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n const style = dataValue;\n const oldStyle = checkStyleData(dataKey, originalProps.style) || {};\n\n updateStyle(style, oldStyle, element);\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 (checkRadioElement(element) && dataKey === 'checked') {\n (element as HTMLInputElement).checked = !!dataValue;\n } else if (checkCheckboxElement(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 (element as HTMLElement).setAttribute(dataKey, String(dataValue));\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, init: boolean) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === 'fragment' || type === 'loop';\n\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === 'element' && tag) {\n element = document.createElement(tag);\n } else if (type === 'text' && checkExisty(text)) {\n element = document.createTextNode(String(text));\n }\n\n wDomChildrenToDom(children, element, init);\n updateProps(props, element);\n\n wDom.el = element;\n\n runMountedQueueFromWDom(wDom);\n\n return element || document.createElement('div');\n};\n\nconst wDomChildrenToDom = (\n children: WDom[],\n parentElement?: HTMLElement | DocumentFragment | Text,\n init?: boolean\n) => {\n if (init) {\n const elementChildren = children.reduce(\n (acc: DocumentFragment, childItem: WDom) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem, init));\n }\n\n return acc;\n },\n new DocumentFragment()\n );\n\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\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 = eventKey.replace(/^on(.*)/, (_match, p1) =>\n p1.toLowerCase()\n );\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 | 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 const parentVDom = getParent(vDom);\n\n return findRealParentElement(parentVDom);\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 const type = getWDomType(newWDom);\n\n if (!type) {\n throw new Error('Unknown type wdom');\n }\n\n const isSameType = checkSameWDomWithOriginal[type](newWDom, originalWDom);\n\n const result = remakeNewWDom(newWDom, isSameType, originalWDom);\n\n return result;\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 && 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\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 {\n remakedChildren,\n unUsedChildren: originalChildren,\n };\n};\n\nconst findSameKeyOriginalItem = (item: WDom, originalChildren: WDom[]) => {\n const key = getKey(item);\n\n return originalChildren.find(\n orignalChildItem => getKey(orignalChildItem) === key\n );\n};\n\nconst getKey = (target: WDom) =>\n target?.componentProps?.key ?? target?.props?.key;\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 type Children = WDom[];\n\ntype WDomInfoParam = {\n componentMaker: (props: Props) => WDom;\n componentKey: Props;\n tag: TagFunction;\n props: Props;\n children: WDom[];\n};\ntype WDomInfoWithRenderParam = WDomInfoParam & {\n reRender: () => WDom;\n};\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 = (wDomInfo: WDomInfoParam) => {\n const { componentMaker, props } = wDomInfo;\n const customNode = componentMaker(props);\n const reRender = makeReRender(wDomInfo);\n\n addComponentProps(customNode, { ...wDomInfo, reRender });\n\n return customNode;\n};\n\nconst makeReRender = (wDomInfo: WDomInfoParam) => {\n const reRender = () => wDomMaker({ ...wDomInfo, reRender });\n\n return reRender;\n};\n\nconst wDomMaker = (wDomInfo: WDomInfoWithRenderParam) => {\n const { componentMaker, componentKey, tag, props, children } = wDomInfo;\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, wDomInfo);\n\n (getComponentSubInfo(componentKey, 'vd') as { value: WDom }).value =\n originalWDom;\n\n return originalWDom;\n};\n\nconst addComponentProps = (wDom: WDom, info: WDomInfoWithRenderParam) => {\n const { componentKey, tag, props, children, reRender } = info;\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","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","export const ref = <T>(initValue: T) => ({ value: initValue });\n"],"names":["checkCustemComponentFunction","target","checkFragmentFunction","Fragment","checkPlainWDomType","wDom","checkPlainType","typeName","type","checkEmptyElement","checkNormalTypeElement","newWDom","originalWDom","_a","children","length","_b","checkExisty","value","checkStyleData","dataKey","dataValue","checkSameWDomWithOriginal","c","constructor","l","t","e","tag","f","et","getParent","vDom","parentVDom","Error","updateProps","props","infoProps","Object","keys","forEach","key","entries","updateChildren","infoChidren","splice","childrenItem","push","componentKeyRef","needDiffRef","componentRef","WeakMap","redrawQueue","redrawQueueTimeout","getComponentKey","getComponentSubInfo","componentKey","subKey","get","setRedrawAction","exec","up","setTimeout","execRedrawQueue","initMountHookState","set","vd","upR","upS","upD","upCB","mts","umts","setComponetRef","recursiveGetChildKeys","result","item","childComKey","childItemList","childVd","addedKey","reduce","acc","includes","action","shift","runUnmountQueueFromWDom","removeItem","recursiveRunUnmount","subInfo","effect","delete","runMountedQueueFromWDom","component","queue","sequence","callback","effectAction","useUpdated","dependencies","def","checkNeedPushQueue","originalDefs","newDefs","some","index","wDomUpdate","newWDomTree","needRerender","A","typeAdd","D","typeDelete","R","typeReplace","U","typeUpdate","SR","typeSortedReplace","SU","typeSortedUpdate","recursiveRemoveEvent","el","removeEvent","childItem","parentWDom","parent","findRealParentElement","oldProps","nodeType","removeChild","findChildWithRemoveElement","oldChildren","newElement","wDomToDom","parentEl","nextEl","startFindNextBrotherElement","insertBefore","appendChild","brothers","nextIndex","indexOf","candidiateBrothers","slice","finedNextEl","findChildFragmentNextElement","parentType","isRoot","afterElement","targetEl","bItem","isFragment","orignalElement","parentElement","replaceChild","element","match","removeEventListener","String","runUpdatedQueueFromWDom","updateText","nodeValue","text","originalProps","innerHTML","style","oldStyle","updateStyle","checkRefData","updateEvent","checkRadioElement","checkCheckboxElement","checked","tagName","checkTextareaElement","checkOptionElement","selected","checkNormalAttribute","setAttribute","removeAttribute","init","DocumentFragment","document","createElement","createTextNode","wDomChildrenToDom","elementChildren","hasChildNodes","eventKey","newEventHandler","oldEventHandler","eventName","replace","_match","p1","toLowerCase","addEventListener","originalStyle","elementStyle","styleKey","isVirtualType","wrapElement","makeNewWDomTree","getWDomType","isSameType","remakeNewWDom","remakeWDom","generalize","remakeChildrenForDiff","addReRenderTypeProperty","existOriginalWDom","isEmptyElement","getKey","isKeyCheckedWDom","isSameText","infoVdom","componentProps","componentChildren","newVDom","reRender","resolve","remakeChildrenForUpdate","remakeChildrenForAdd","map","remakeChildrenForLoopUpdate","remakedChildren","unUsedChildren","diffLoopChildren","unusedItem","parentNode","newChildren","originalChildren","originalItem","findSameKeyOriginalItem","find","orignalChildItem","_c","_props","reRenderCustomComponent","makeWDomResolver","name","componentMaker","componentRender","customNode","makeCustomNode","wDomInfo","makeReRender","addComponentProps","wDomMaker","initUpdateHookState","updateReqs","info","assign","makeNode","componetMakeResolver","remakeChildren","nodeParentPointer","makeChildrenItem","Array","isArray","node","newProps","_children","initValue","Dom"],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export declare const checkRefData: (dataKey: string, dataValue: unknown) => data
|
|
|
20
20
|
};
|
|
21
21
|
export declare const checkOptionElement: (element: any) => element is HTMLElement;
|
|
22
22
|
export declare const checkTextareaElement: (element: any) => element is HTMLElement;
|
|
23
|
+
export declare const checkCheckboxElement: (element: any) => element is HTMLElement;
|
|
24
|
+
export declare const checkRadioElement: (element: any) => element is HTMLElement;
|
|
23
25
|
export declare const checkNormalAttribute: (dataValue: unknown) => dataValue is string | number;
|
|
24
26
|
export declare const getWDomType: (wDom: WDom | TagFunction | TagFunctionResolver) => WDomType | undefined;
|
|
25
27
|
export declare const checkSameWDomWithOriginal: {
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const c of r)if(c.type==="childList")for(const s of c.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&o(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const c={};return r.integrity&&(c.integrity=r.integrity),r.referrerpolicy&&(c.referrerPolicy=r.referrerpolicy),r.crossorigin==="use-credentials"?c.credentials="include":r.crossorigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(r){if(r.ep)return;r.ep=!0;const c=n(r);fetch(r.href,c)}})();const E=e=>typeof e=="function"&&!q(e)||typeof e=="object"&&"resolve"in e,q=e=>typeof e=="function"&&e===T,h=e=>typeof e=="object"&&!("resolve"in e),C=(e,t)=>h(e)&&e.type===t,Q=e=>h(e)&&!e.type,pe=(e,t)=>e.constructor===(t==null?void 0:t.constructor),ae=(e,t)=>{var n,o;return h(e)&&(t==null?void 0:t.type)==="fragment"&&((n=t==null?void 0:t.children)==null?void 0:n.length)===((o=e==null?void 0:e.children)==null?void 0:o.length)},fe=(e,t)=>{var n,o;return h(e)&&(t==null?void 0:t.type)==="element"&&(t==null?void 0:t.tag)===e.tag&&((n=t==null?void 0:t.children)==null?void 0:n.length)===((o=e==null?void 0:e.children)==null?void 0:o.length)},U=(e,t)=>{var n,o;return h(e)&&(t==null?void 0:t.type)===e.type&&(((n=t==null?void 0:t.children)==null?void 0:n.length)===((o=e==null?void 0:e.children)==null?void 0:o.length)||e.type==="loop")},M=e=>e!=null,V=(e,t)=>e==="style"&&typeof t=="object",he=(e,t)=>e==="ref"&&typeof t=="object",ve=e=>e.nodeType===1&&e.tagName==="OPTION",ye=e=>e.nodeType===1&&e.tagName==="TEXTAREA",ke=e=>e.nodeType===1&&e.type==="checkbox",Ce=e=>e.nodeType===1&&e.type==="radio",ge=e=>typeof e=="number"||typeof e=="string",Re=e=>{let t;return E(e)?t="c":C(e,"fragment")?t="f":C(e,"element")?t="e":C(e,"loop")?t="l":C(e,"text")?t="t":Q(e)&&(t="et"),t},me={c:pe,l:U,t:U,e:fe,f:ae,et:U},f=e=>{const t=e.getParent&&e.getParent();if(!t)throw Error("Not found parent vDom");return t},Ee=(e,t)=>{const{componentProps:n,componentChildren:o}=e,{props:r,children:c}=t;n&&be(n,r),o&&Pe(o,c);const s=e.reRender&&e.reRender();if(!s)throw Error("Unable reRender");return s},be=(e,t)=>{e&&t!==e&&(Object.keys(e).forEach(n=>delete e[n]),Object.entries(t||{}).forEach(([n,o])=>e[n]=o))},Pe=(e,t)=>{e&&t!==e&&(e.splice(0,e.length),t&&t.forEach(n=>e.push(n)))},v={value:{}},F={value:!1},d=new WeakMap,R={value:[]},O={value:null},xe=e=>()=>{var t;const n=(t=d.get(e))==null?void 0:t.up;let o=!1;return n&&(n(),o=!0),o},Te=e=>{d.set(e,{vd:{value:null},up:()=>{},upR:[],upS:{value:0},upD:[],upCB:[],mts:[],umts:[]})},y=()=>v.value,Y=(e,t)=>d.get(e)[t],$=(e,t)=>{d.get(e).up=()=>{R.value.push({componentKey:e,exec:t}),O.value||(O.value=setTimeout(Ue))}},Ne=e=>v.value=e,Se=e=>{v.value=e,Te(e)},z=(e,t)=>{(e.children||[]).forEach(n=>{const o=n.componentKey;o&&t.push(o),z(n,t)})},Ue=()=>{let e=[];R.value.forEach(o=>{var r,c;const s=(c=(r=d.get(o.componentKey))==null?void 0:r.vd)==null?void 0:c.value;s&&z(s,e)});const t=[],n=R.value.reduce((o,r)=>{const{componentKey:c}=r;return e.includes(c)||t.includes(c)||(t.push(c),o.push(r)),o},[]);for(;n.length;){const o=n.shift();o&&o.exec()}},Fe=e=>{d.get(y()).umts.push(e)},G=e=>{const{componentKey:t}=e;t&&Oe(t),J(e)},J=e=>{(e.children||[]).forEach(t=>{t.componentKey?G(t):J(t)})},Oe=e=>{const t=d.get(e);t&&(t.umts.forEach(n=>n()),t.umts=[],d.delete(e))},X=e=>{d.get(y()).mts.push(e)},A=e=>{const{componentKey:t}=e;if(t){const n=d.get(t),o=n==null?void 0:n.mts,r=n==null?void 0:n.upS;v.value=t,r&&(r.value=0),o&&(n.mts=[],o.forEach(c=>{const s=c();s&&Fe(s)}))}},B=(e,t=()=>[])=>{const n=d.get(y()),{upD:o,upS:r}=n,c=o[r.value];if(c&&Le(c,t())){const s=e();s&&n.upCB.push(s)}o[r.value]=t(),r.value+=1},_e=e=>{const{componentKey:t}=e;if(t){const n=d.get(t),o=n==null?void 0:n.upCB,r=n==null?void 0:n.upS;v.value=t,r&&(r.value=0),e.constructor&&o&&(n.upCB=[],o.forEach(c=>c()))}},Le=(e,t)=>!e.length&&!e.length?!0:e.some((n,o)=>n!==t[o]),Me=(e,t,n)=>{if(!t)throw Error("WrapELement is null");e.isRoot=!0,e.wrapElement=t;const o=b(e,!0);n?(e.afterElement=n,t.insertBefore(o,n)):t.appendChild(o)},H=e=>{const{needRerender:t}=e;if(t&&t!=="N"){const n={A:j,D:I,R:Ie,U:je,SR:w,SU:Ae}[t];n(e)}},Z=e=>{e.props&&e.el&&W(e.props,e.el),(e.children||[]).forEach(t=>{Z(t)})},I=e=>{var t,n;const o=f(e),r=P(o);e.oldProps&&e.el&&W(e.oldProps,e.el),r&&e.el&&(((t=e.el)==null?void 0:t.nodeType)===1?r.removeChild(e.el):((n=e.el)==null?void 0:n.nodeType)===11&&K(e,r),delete e.el)},K=(e,t)=>{((e==null?void 0:e.oldChildren)||(e==null?void 0:e.children)||[]).forEach(n=>{var o,r;((o=n.el)==null?void 0:o.nodeType)===1?t.removeChild(n==null?void 0:n.el):((r=n.el)==null?void 0:r.nodeType)===11&&K(n,t)})},w=e=>{I(e),j(e)},Ae=e=>{I(e),j(e,e.el)},j=(e,t)=>{t||(t=b(e,!0));const n=f(e);if(n.type){const o=P(n),r=n.type==="loop";let c;r?c=_(n,f(n)):c=_(e,n),t&&o&&(c?o.insertBefore(t,c):o.appendChild(t))}A(e)},_=(e,t)=>{const n=t.children||[],r=n.indexOf(e)+1,c=n.slice(r),s=D(c),u=t.type||"";if(s)return s;if(!t.isRoot&&["fragment","loop"].includes(u))return _(t,f(t));if(t.isRoot&&t.afterElement)return t.afterElement},D=e=>e.reduce((t,n)=>{const o=n.type,r=n.el,c=o&&["fragment","loop"].includes(o);return t||(c?D(n.children||[]):r&&r.nodeType!==11?r:t)},void 0),Ie=e=>{const t=f(e),n=e.el;if(t.type&&n)if(n.nodeType===11)w(e);else{const o=P(t),r=b(e,!0);o&&o.replaceChild(r,n)}A(e)},W=(e,t)=>{t&&Object.entries(e||{}).forEach(([n,o])=>{n.match(/^on/)&&t.removeEventListener(n,o)})},je=e=>{var t;const n=e.el;if(e.type==="text"){Ve(e);return}if(n){const{oldProps:o,props:r}=e;ee(r,n,o),delete e.oldProps,e.tag==="input"&&(n.value=String(((t=e==null?void 0:e.props)==null?void 0:t.value)||""))}(e.children||[]).forEach(o=>H(o)),_e(e)},Ve=e=>{const t=e.el;t&&(t.nodeValue=String(e.text))},ee=(e,t,n)=>{const o={...n};Object.entries(e||{}).forEach(([r,c])=>{if(r!=="key")if(r==="innerHTML"&&t&&typeof c=="string")t.innerHTML=c;else if(V(r,c)){const s=c,u=V(r,o.style)||{};Qe(s,u,t)}else he(r,c)?c.value=t:r.match(/^on/)?qe(t,r,c,o[r]):Ce(t)&&r==="checked"||ke(t)&&r==="checked"?t.checked=!!c:ye(t)&&r==="value"?t.value=c:ve(t)&&r==="selected"?t.selected=!!c:ge(c)&&t.setAttribute(r,String(c));delete o[r]}),Object.keys(o).forEach(r=>t.removeAttribute(r))},b=(e,t)=>{let n;const{type:o,tag:r,text:c,props:s,children:u=[]}=e;return o==="fragment"||o==="loop"?n=new DocumentFragment:o==="element"&&r?n=document.createElement(r):o==="text"&&M(c)&&(n=document.createTextNode(String(c))),Be(u,n,t),ee(s,n),e.el=n,A(e),n||document.createElement("div")},Be=(e,t,n)=>{if(n){const o=e.reduce((r,c)=>(c.type&&r.appendChild(b(c,n)),r),new DocumentFragment);t&&o.hasChildNodes()&&t.appendChild(o)}},qe=(e,t,n,o)=>{const r=t.replace(/^on(.*)/,(c,s)=>s.toLowerCase());o!==n&&(o&&e.removeEventListener(r,o),n&&e.addEventListener(r,n))},Qe=(e,t,n)=>{const o={...t},r=n==null?void 0:n.style;r&&(Object.entries(e).forEach(([c,s])=>{r[c]=s,delete o[c]}),Object.entries(o).forEach(([c])=>r[c]=""))},P=e=>{const t=e.type==="fragment"||e.type==="loop";if(e.isRoot&&t)return e.wrapElement;if(!t)return e.el;const n=f(e);return P(n)},x=(e,t)=>{const n=Re(e);if(!n)throw new Error("Unknown type wdom");const o=me[n](e,t);return Ye(e,o,t)},Ye=(e,t,n)=>{const o=ze(e,t,n);o.children=Ge(o,t,n);const r=$e(o,t,n);return o.needRerender=r,r!=="A"&&n&&(o.el=n.el),r&&["D","R","SR"].includes(r)&&(n==null?void 0:n.componentKey)&&(G(n),Z(n),o.oldChildren=n.children),o.oldProps=n==null?void 0:n.props,o},$e=(e,t,n)=>{const o=n&&n.type,r=Q(e),s=!!e.getParent&&f(e).type,u=m(e),i=s==="loop"&&M(u),a=e.type==="text"&&t&&e.text===(n==null?void 0:n.text);let p;return r?p="D":a?p="N":o?t?p=i?"SU":"U":p=i?"SR":"R":p="A",p},ze=(e,t,n)=>E(e)?t&&n?Ee(n,e):e.resolve():e,Ge=(e,t,n)=>t&&n?Xe(e,n):Je(e),Je=e=>(e.children||[]).map(t=>{const n=x(t);return n.getParent=()=>e,n}),Xe=(e,t)=>e.type==="loop"&&M(m((e.children||[])[0]))?He(e,t):(e.children||[]).map((n,o)=>{const r=x(n,(t.children||[])[o]);return r.getParent=()=>e,r}),He=(e,t)=>{const{remakedChildren:n,unUsedChildren:o}=Ze(e,t);return o.map(r=>{const c=r.el;c&&c.parentNode&&c.parentNode.removeChild(c)}),n},Ze=(e,t)=>{const n=[...e.children||[]],o=[...t.children||[]];return{remakedChildren:n.map(c=>{const s=Ke(c,o),u=x(c,s);return s&&o.splice(o.indexOf(s),1),u.getParent=()=>e,u}),unUsedChildren:o}},Ke=(e,t)=>{const n=m(e);return t.find(o=>m(o)===n)},m=e=>{var t,n,o;return(o=(t=e==null?void 0:e.componentProps)==null?void 0:t.key)!=null?o:(n=e==null?void 0:e.props)==null?void 0:n.key},te=(e,t=()=>[])=>{d.get(y()).upR.push(()=>B(e,t)),B(e,t)},we=()=>{var e;const t=(e=d.get(y()))==null?void 0:e.upR;t!=null&&t.length&&t.forEach(n=>n()),R.value=[],O.value=null},T=(e,...t)=>({type:"fragment",children:t}),l=(e,t,...n)=>{const o={value:void 0},r=t||{},c=se(o,n),s=tt(e,r,c);return E(s)||(o.value=s),s},ne=e=>(t,n)=>e,oe=(e,t,n,o)=>{var r;F.value=!0;const c=re(e,t,n),s=x(c,o),{isRoot:u,getParent:i,wrapElement:a,afterElement:p}=o;if(s.getParent=i,!u&&i){const k=((r=i())==null?void 0:r.children)||[],N=k.indexOf(o);k.splice(N,1,s)}else s.isRoot=!0,s.wrapElement=a,s.afterElement=p;F.value=!1,H(s)},re=(e,t,n)=>({tagName:e.name,constructor:e,props:t,children:n,resolve:(s=t)=>{Se(s);const i=e(t,n)(xe(s),t,n),a=De({componentMaker:i,componentKey:s,tag:e,props:t,children:n}),p=a;return $(s,()=>oe(e,t,n,p)),Y(s,"vd").value=a,a}}),De=e=>{const{componentMaker:t,props:n}=e,o=t(n),r=We(e);return ce(o,{...e,reRender:r}),o},We=e=>{const t=()=>et({...e,reRender:t});return t},et=e=>{const{componentMaker:t,componentKey:n,tag:o,props:r,children:c}=e;Ne(n),we();const s=t(r);return $(n,()=>oe(o,r,c,s)),ce(s,e),Y(n,"vd").value=s,s},ce=(e,t)=>{const{componentKey:n,tag:o,props:r,children:c,reRender:s}=t;Object.assign(e,{componentProps:r,componentChildren:c,constructor:o,tagName:o.name,componentKey:n,reRender:s})},tt=(e,t,n)=>{if(q(e))return T(t,...n);if(E(e)){const o=re(e,t,n);return F.value?o:o.resolve()}return{type:"element",tag:e,props:t,children:n}},se=(e,t)=>t.map(n=>{const o=nt(n);return o.getParent=()=>e.value,o}),nt=e=>{if(e==null||e===!1)return{type:null};if(Array.isArray(e)){const t={value:void 0},o={type:"loop",children:se(t,e)};return t.value=o,o}else if(typeof e=="string"||typeof e=="number")return{type:"text",text:e};return e},ot=e=>({value:e}),L=(e,t)=>{let n=e;return{get value(){return n},get v(){return n},set value(o){n=o,t()},set v(o){n=o,t()}}},rt=e=>{let t=e;return{get value(){return t()},get v(){return t()},set value(n){throw new Error("You can't change 'computed'")},set v(n){throw new Error("You can't change 'computed'")}}},ct=(e,t=()=>{},n=()=>[])=>{X(()=>(e(),t)),te(()=>(t&&t(),e),n)},le=new Map,g={},st=e=>{const t=Symbol();return le.set(t,e),n=>(g[t]!=null||(g[t]=[]),g[t].push(n),lt(t))},lt=e=>new Proxy(le.get(e),{get(t,n){return t[n]},set(t,n,o){t[n]=o;const r=g[e],c=[];return r.forEach(s=>{s()||c.push(s)}),c.forEach(s=>r.splice(r.indexOf(s),1)),!0}}),ut=ne((e,t,n)=>{const o=L(1,e),r=L('"destructuring" the "props" value directly from the mount function will cause referencing issues, so if you want to use it, you need to "destructuring" it from the internal function (updater).',e),c=()=>t.parentValue,s=t.parentValue,u=rt(()=>o.v+a+t.parentValue),i=st({text:"s",count:0})(e);let a=t.parentValue;const p=ot(null),k=()=>{o.v=o.v+1,a+=1},N=S=>{r.v=S.target.value},ue=()=>{i.count+=1,i.text+="1"},ie=()=>(console.log("MOUNTED",p),()=>console.log("UNMOUNT")),de=()=>(console.log("UPDATE - parentValue"),()=>console.log("UPDATED"));return X(ie),te(de,()=>[t.parentValue]),ct(()=>console.log("INJECT"),()=>console.log("CLEAN_UP"),()=>[o.v]),({parentValue:S})=>l(T,null,l("div",null,l("textarea",{value:r.v,onInput:N,style:{width:"300px",height:"100px"}})),l("div",null,r.v),l("div",null,l("div",{style:{color:"blue"}},"parentValueFromRef: ",t.parentValue," (working)"),l("div",{style:{color:"blue"}},"parentValueFromFunction: ",c()," (working)"),l("div",{style:{color:"blue"}},"parentValueFromUpdaterDestructuring: ",S," (working)"),l("div",{style:{color:"red"}},"parentValueFromMounterDestructuring: ",s," (not working)")),l("div",null,l("div",{ref:p},"count: ",o.v),l("div",null,"sum: ",o.v+a+t.parentValue),l("div",null,"sum(computed): ",u.v),l("div",null,"notRefValue: ",a),l("div",null,"localStore(text): ",i.text),l("div",null,"localStore(count): ",i.count)),l("button",{onClick:k},"Increase"),l("button",{onClick:ue},"localStoreUpdate"),n)}),it=ne(e=>{const t=L(7,e),n=()=>{t.v=t.v+1},o=()=>{t.v=t.v-1};return()=>l(T,null,l(ut,{parentValue:t.v},l("button",{onClick:n},"Increase - Parent")),l("button",{onClick:o},"Decrease - Parent"))}),dt=l(it,null);Me(dt,document.getElementById("root"));
|
|
2
|
+
//# sourceMappingURL=index.1a4d787f.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.1a4d787f.js","sources":["../../vite/modulepreload-polyfill","../../../dist/lithent.mjs","../../../helper/dist/lithentHelper.mjs","../../src/index.tsx"],"sourcesContent":["__VITE_IS_MODERN__&&(function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n}());","const checkCustemComponentFunction = (target) => typeof target === \"function\" && !checkFragmentFunction(target) || typeof target === \"object\" && \"resolve\" in target;\nconst checkFragmentFunction = (target) => typeof target === \"function\" && target === Fragment;\nconst checkPlainWDomType = (wDom) => typeof wDom === \"object\" && !(\"resolve\" in wDom);\nconst checkPlainType = (wDom, typeName) => checkPlainWDomType(wDom) && wDom.type === typeName;\nconst checkEmptyElement = (wDom) => checkPlainWDomType(wDom) && !wDom.type;\nconst checkSameCustomComponent = (newWDom, originalWDom) => newWDom.constructor === (originalWDom == null ? void 0 : originalWDom.constructor);\nconst checkSameFragment = (newWDom, originalWDom) => {\n var _a, _b;\n return checkPlainWDomType(newWDom) && (originalWDom == null ? void 0 : originalWDom.type) === \"fragment\" && ((_a = originalWDom == null ? void 0 : originalWDom.children) == null ? void 0 : _a.length) === ((_b = newWDom == null ? void 0 : newWDom.children) == null ? void 0 : _b.length);\n};\nconst checkSameTagElement = (newWDom, originalWDom) => {\n var _a, _b;\n return checkPlainWDomType(newWDom) && (originalWDom == null ? void 0 : originalWDom.type) === \"element\" && (originalWDom == null ? void 0 : originalWDom.tag) === newWDom.tag && ((_a = originalWDom == null ? void 0 : originalWDom.children) == null ? void 0 : _a.length) === ((_b = newWDom == null ? void 0 : newWDom.children) == null ? void 0 : _b.length);\n};\nconst checkNormalTypeElement = (newWDom, originalWDom) => {\n var _a, _b;\n 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\");\n};\nconst checkExisty = (value) => value !== null && value !== void 0;\nconst checkStyleData = (dataKey, dataValue) => dataKey === \"style\" && typeof dataValue === \"object\";\nconst checkRefData = (dataKey, dataValue) => dataKey === \"ref\" && typeof dataValue === \"object\";\nconst checkOptionElement = (element) => {\n return element.nodeType === 1 && element.tagName === \"OPTION\";\n};\nconst checkTextareaElement = (element) => {\n return element.nodeType === 1 && element.tagName === \"TEXTAREA\";\n};\nconst checkCheckboxElement = (element) => {\n return element.nodeType === 1 && element.type === \"checkbox\";\n};\nconst checkRadioElement = (element) => {\n return element.nodeType === 1 && element.type === \"radio\";\n};\nconst checkNormalAttribute = (dataValue) => typeof dataValue === \"number\" || typeof dataValue === \"string\";\nconst getWDomType = (wDom) => {\n let result;\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 return result;\n};\nconst checkSameWDomWithOriginal = {\n c: checkSameCustomComponent,\n l: checkNormalTypeElement,\n t: checkNormalTypeElement,\n e: checkSameTagElement,\n f: checkSameFragment,\n et: checkNormalTypeElement\n};\nconst getParent = (vDom) => {\n const parentVDom = vDom.getParent && vDom.getParent();\n if (!parentVDom) {\n throw Error(\"Not found parent vDom\");\n }\n return parentVDom;\n};\nconst reRender = (vDom, infoVdom) => {\n const { componentProps: props, componentChildren: children } = vDom;\n const { props: infoProps, children: infoChidren } = infoVdom;\n if (props) {\n updateProps$1(props, infoProps);\n }\n if (children) {\n updateChildren(children, infoChidren);\n }\n const newVDom = vDom.reRender && vDom.reRender();\n if (!newVDom) {\n throw Error(\"Unable reRender\");\n }\n return newVDom;\n};\nconst updateProps$1 = (props, infoProps) => {\n if (props && infoProps !== props) {\n Object.keys(props).forEach((key) => delete props[key]);\n Object.entries(infoProps || {}).forEach(\n ([key, value]) => props[key] = value\n );\n }\n};\nconst updateChildren = (children, infoChidren) => {\n if (children && infoChidren !== children) {\n children.splice(0, children.length);\n if (infoChidren) {\n infoChidren.forEach((childrenItem) => children.push(childrenItem));\n }\n }\n};\nconst componentKeyRef = { value: {} };\nconst needDiffRef = { value: false };\nconst componentRef = /* @__PURE__ */ new WeakMap();\nconst redrawQueue = { value: [] };\nconst redrawQueueTimeout = { value: null };\nconst componentRender = (componentKey) => () => {\n var _a;\n const up = (_a = componentRef.get(componentKey)) == null ? void 0 : _a.up;\n let result = false;\n if (up) {\n up();\n result = true;\n }\n return result;\n};\nconst setComponetRef = (componentKey) => {\n componentRef.set(componentKey, {\n vd: { value: null },\n up: () => {\n },\n upR: [],\n upS: { value: 0 },\n upD: [],\n upCB: [],\n mts: [],\n umts: []\n });\n};\nconst getComponentKey = () => componentKeyRef.value;\nconst getComponentSubInfo = (componentKey, subKey) => componentRef.get(componentKey)[subKey];\nconst setRedrawAction = (componentKey, exec) => {\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};\nconst initUpdateHookState = (componentKey) => componentKeyRef.value = componentKey;\nconst initMountHookState = (componentKey) => {\n componentKeyRef.value = componentKey;\n setComponetRef(componentKey);\n};\nconst recursiveGetChildKeys = (wDom, result) => {\n (wDom.children || []).forEach((item) => {\n const childComKey = item.componentKey;\n if (childComKey) {\n result.push(childComKey);\n }\n recursiveGetChildKeys(item, result);\n });\n};\nconst execRedrawQueue = () => {\n let childItemList = [];\n redrawQueue.value.forEach((item) => {\n var _a, _b;\n const childVd = (_b = (_a = componentRef.get(item.componentKey)) == null ? void 0 : _a.vd) == null ? void 0 : _b.value;\n if (childVd) {\n recursiveGetChildKeys(childVd, childItemList);\n }\n });\n const addedKey = [];\n const result = redrawQueue.value.reduce((acc, item) => {\n const { componentKey } = item;\n if (childItemList.includes(componentKey) || addedKey.includes(componentKey)) {\n return acc;\n }\n addedKey.push(componentKey);\n acc.push(item);\n return acc;\n }, []);\n while (result.length) {\n const action = result.shift();\n if (action) {\n action.exec();\n }\n }\n};\nconst unmount = (effectAction) => {\n componentRef.get(getComponentKey()).umts.push(effectAction);\n};\nconst runUnmountQueueFromWDom = (newWDom) => {\n const { componentKey } = newWDom;\n if (componentKey) {\n removeItem(componentKey);\n }\n recursiveRunUnmount(newWDom);\n};\nconst recursiveRunUnmount = (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};\nconst removeItem = (componentKey) => {\n const subInfo = componentRef.get(componentKey);\n if (subInfo) {\n subInfo.umts.forEach((effect) => effect());\n subInfo.umts = [];\n componentRef.delete(componentKey);\n }\n};\nconst mountCallback = (effectAction) => {\n const mts = componentRef.get(getComponentKey()).mts;\n mts.push(effectAction);\n};\nconst runMountedQueueFromWDom = (newWDom) => {\n const { componentKey } = newWDom;\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component == null ? void 0 : component.mts;\n const sequence = component == null ? void 0 : component.upS;\n componentKeyRef.value = componentKey;\n if (sequence) {\n sequence.value = 0;\n }\n if (queue) {\n component.mts = [];\n queue.forEach((effect) => {\n const callback = effect();\n if (callback) {\n unmount(callback);\n }\n });\n }\n }\n};\nconst useUpdated = (effectAction, dependencies = () => []) => {\n const component = componentRef.get(getComponentKey());\n const { upD, upS } = component;\n const def = upD[upS.value];\n if (def && checkNeedPushQueue(def, dependencies())) {\n const callback = effectAction();\n if (callback) {\n component.upCB.push(callback);\n }\n }\n upD[upS.value] = dependencies();\n upS.value += 1;\n};\nconst runUpdatedQueueFromWDom = (newWDom) => {\n const { componentKey } = newWDom;\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component == null ? void 0 : component.upCB;\n const sequence = component == null ? void 0 : component.upS;\n componentKeyRef.value = componentKey;\n if (sequence) {\n sequence.value = 0;\n }\n if (newWDom.constructor && queue) {\n component.upCB = [];\n queue.forEach((effect) => effect());\n }\n }\n};\nconst checkNeedPushQueue = (originalDefs, newDefs) => !originalDefs.length && !originalDefs.length ? true : originalDefs.some((def, index) => def !== newDefs[index]);\nconst render = (wDom, wrapElement, afterElement) => {\n if (!wrapElement) {\n throw Error(\"WrapELement is null\");\n }\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n const Dom = wDomToDom(wDom, true);\n if (afterElement) {\n wDom.afterElement = afterElement;\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n};\nconst wDomUpdate = (newWDomTree) => {\n const { needRerender } = newWDomTree;\n if (needRerender && needRerender !== \"N\") {\n const exec = {\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate\n }[needRerender];\n exec(newWDomTree);\n }\n};\nconst recursiveRemoveEvent = (originalWDom) => {\n if (originalWDom.props && originalWDom.el) {\n removeEvent(originalWDom.props, originalWDom.el);\n }\n (originalWDom.children || []).forEach((childItem) => {\n recursiveRemoveEvent(childItem);\n });\n};\nconst typeDelete = (newWDom) => {\n var _a, _b;\n const parentWDom = getParent(newWDom);\n const parent = findRealParentElement(parentWDom);\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n if (parent && newWDom.el) {\n if (((_a = newWDom.el) == null ? void 0 : _a.nodeType) === 1) {\n parent.removeChild(newWDom.el);\n } else if (((_b = newWDom.el) == null ? void 0 : _b.nodeType) === 11) {\n findChildWithRemoveElement(newWDom, parent);\n }\n delete newWDom.el;\n }\n};\nconst findChildWithRemoveElement = (newWDom, parent) => {\n ((newWDom == null ? void 0 : newWDom.oldChildren) || (newWDom == null ? void 0 : newWDom.children) || []).forEach((item) => {\n var _a, _b;\n if (((_a = item.el) == null ? void 0 : _a.nodeType) === 1) {\n parent.removeChild(item == null ? void 0 : item.el);\n } else if (((_b = item.el) == null ? void 0 : _b.nodeType) === 11) {\n findChildWithRemoveElement(item, parent);\n }\n });\n};\nconst typeSortedReplace = (newWDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom);\n};\nconst typeSortedUpdate = (newWDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom, newWDom.el);\n};\nconst typeAdd = (newWDom, newElement) => {\n if (!newElement) {\n newElement = wDomToDom(newWDom, true);\n }\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const isLoop = parentWDom.type === \"loop\";\n let nextEl;\n if (isLoop) {\n nextEl = startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n } else {\n nextEl = 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 runMountedQueueFromWDom(newWDom);\n};\nconst startFindNextBrotherElement = (wDom, parentWDom) => {\n const brothers = parentWDom.children || [];\n const index = brothers.indexOf(wDom);\n const nextIndex = index + 1;\n const candidiateBrothers = brothers.slice(nextIndex);\n const finedNextEl = findChildFragmentNextElement(candidiateBrothers);\n const parentType = parentWDom.type || \"\";\n if (finedNextEl) {\n return finedNextEl;\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 return void 0;\n};\nconst findChildFragmentNextElement = (candidiateBrothers) => candidiateBrothers.reduce(\n (targetEl, bItem) => {\n const type = bItem.type;\n const el = bItem.el;\n const isFragment = type && [\"fragment\", \"loop\"].includes(type);\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 return targetEl;\n },\n void 0\n);\nconst typeReplace = (newWDom) => {\n const parentWDom = getParent(newWDom);\n const orignalElement = newWDom.el;\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, true);\n if (parentElement) {\n parentElement.replaceChild(newElement, orignalElement);\n }\n }\n }\n runMountedQueueFromWDom(newWDom);\n};\nconst removeEvent = (oldProps, element) => {\n if (element) {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(dataKey, dataValue);\n }\n }\n );\n }\n};\nconst typeUpdate = (newWDom) => {\n var _a;\n const element = newWDom.el;\n if (newWDom.type === \"text\") {\n updateText(newWDom);\n return;\n }\n if (element) {\n const { oldProps, props } = newWDom;\n updateProps(props, element, oldProps);\n delete newWDom.oldProps;\n if (newWDom.tag === \"input\") {\n element.value = String(((_a = newWDom == null ? void 0 : newWDom.props) == null ? void 0 : _a.value) || \"\");\n }\n }\n (newWDom.children || []).forEach((childItem) => wDomUpdate(childItem));\n runUpdatedQueueFromWDom(newWDom);\n};\nconst updateText = (newWDom) => {\n const element = newWDom.el;\n if (element) {\n element.nodeValue = String(newWDom.text);\n }\n};\nconst updateProps = (props, element, oldProps) => {\n const originalProps = { ...oldProps };\n Object.entries(props || {}).forEach(\n ([dataKey, dataValue]) => {\n if (dataKey === \"key\")\n ;\n else if (dataKey === \"innerHTML\" && element && typeof dataValue === \"string\") {\n element.innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n const style = dataValue;\n const oldStyle = checkStyleData(dataKey, originalProps.style) || {};\n updateStyle(style, oldStyle, element);\n } else if (checkRefData(dataKey, dataValue)) {\n dataValue.value = element;\n } else if (dataKey.match(/^on/)) {\n updateEvent(\n element,\n dataKey,\n dataValue,\n originalProps[dataKey]\n );\n } else if (checkRadioElement(element) && dataKey === \"checked\") {\n element.checked = !!dataValue;\n } else if (checkCheckboxElement(element) && dataKey === \"checked\") {\n element.checked = !!dataValue;\n } else if (checkTextareaElement(element) && dataKey === \"value\") {\n element.value = dataValue;\n } else if (checkOptionElement(element) && dataKey === \"selected\") {\n element.selected = !!dataValue;\n } else if (checkNormalAttribute(dataValue)) {\n element.setAttribute(dataKey, String(dataValue));\n }\n delete originalProps[dataKey];\n }\n );\n Object.keys(originalProps).forEach(\n (dataKey) => element.removeAttribute(dataKey)\n );\n};\nconst wDomToDom = (wDom, init) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === \"fragment\" || type === \"loop\";\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === \"element\" && tag) {\n element = document.createElement(tag);\n } else if (type === \"text\" && checkExisty(text)) {\n element = document.createTextNode(String(text));\n }\n wDomChildrenToDom(children, element, init);\n updateProps(props, element);\n wDom.el = element;\n runMountedQueueFromWDom(wDom);\n return element || document.createElement(\"div\");\n};\nconst wDomChildrenToDom = (children, parentElement, init) => {\n if (init) {\n const elementChildren = children.reduce(\n (acc, childItem) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem, init));\n }\n return acc;\n },\n new DocumentFragment()\n );\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\n }\n};\nconst updateEvent = (element, eventKey, newEventHandler, oldEventHandler) => {\n const eventName = eventKey.replace(\n /^on(.*)/,\n (_match, p1) => p1.toLowerCase()\n );\n if (oldEventHandler !== newEventHandler) {\n if (oldEventHandler) {\n element.removeEventListener(eventName, oldEventHandler);\n }\n if (newEventHandler) {\n element.addEventListener(eventName, newEventHandler);\n }\n }\n};\nconst updateStyle = (style, oldStyle, element) => {\n const originalStyle = { ...oldStyle };\n const elementStyle = element == null ? void 0 : element.style;\n if (elementStyle) {\n Object.entries(style).forEach(([styleKey, dataValue]) => {\n elementStyle[styleKey] = dataValue;\n delete originalStyle[styleKey];\n });\n Object.entries(originalStyle).forEach(\n ([styleKey]) => elementStyle[styleKey] = \"\"\n );\n }\n};\nconst findRealParentElement = (vDom) => {\n const isVirtualType = vDom.type === \"fragment\" || vDom.type === \"loop\";\n if (vDom.isRoot && isVirtualType) {\n return vDom.wrapElement;\n }\n if (!isVirtualType) {\n return vDom.el;\n }\n const parentVDom = getParent(vDom);\n return findRealParentElement(parentVDom);\n};\nconst makeNewWDomTree = (newWDom, originalWDom) => {\n const type = getWDomType(newWDom);\n if (!type) {\n throw new Error(\"Unknown type wdom\");\n }\n const isSameType = checkSameWDomWithOriginal[type](newWDom, originalWDom);\n const result = remakeNewWDom(newWDom, isSameType, originalWDom);\n return result;\n};\nconst remakeNewWDom = (newWDom, isSameType, originalWDom) => {\n const remakeWDom = generalize(newWDom, isSameType, originalWDom);\n remakeWDom.children = remakeChildrenForDiff(\n remakeWDom,\n isSameType,\n originalWDom\n );\n const needRerender = addReRenderTypeProperty(\n remakeWDom,\n isSameType,\n originalWDom\n );\n remakeWDom.needRerender = needRerender;\n if (needRerender !== \"A\" && originalWDom) {\n remakeWDom.el = originalWDom.el;\n }\n if (needRerender && [\"D\", \"R\", \"SR\"].includes(needRerender) && (originalWDom == null ? void 0 : originalWDom.componentKey)) {\n runUnmountQueueFromWDom(originalWDom);\n recursiveRemoveEvent(originalWDom);\n remakeWDom.oldChildren = originalWDom.children;\n }\n remakeWDom.oldProps = originalWDom == null ? void 0 : originalWDom.props;\n return remakeWDom;\n};\nconst addReRenderTypeProperty = (newWDom, isSameType, originalWDom) => {\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 = newWDom.type === \"text\" && isSameType && newWDom.text === (originalWDom == null ? void 0 : originalWDom.text);\n let result;\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 return result;\n};\nconst generalize = (newWDom, isSameType, originalWDom) => {\n if (checkCustemComponentFunction(newWDom)) {\n return isSameType && originalWDom ? reRender(originalWDom, newWDom) : newWDom.resolve();\n }\n return newWDom;\n};\nconst remakeChildrenForDiff = (newWDom, isSameType, originalWDom) => isSameType && originalWDom ? remakeChildrenForUpdate(newWDom, originalWDom) : remakeChildrenForAdd(newWDom);\nconst remakeChildrenForAdd = (newWDom) => (newWDom.children || []).map((item) => {\n const childItem = makeNewWDomTree(item);\n childItem.getParent = () => newWDom;\n return childItem;\n});\nconst remakeChildrenForUpdate = (newWDom, originalWDom) => {\n if (newWDom.type === \"loop\" && checkExisty(getKey((newWDom.children || [])[0]))) {\n return remakeChildrenForLoopUpdate(newWDom, originalWDom);\n }\n return (newWDom.children || []).map((item, index) => {\n const childItem = makeNewWDomTree(\n item,\n (originalWDom.children || [])[index]\n );\n childItem.getParent = () => newWDom;\n return childItem;\n });\n};\nconst remakeChildrenForLoopUpdate = (newWDom, originalWDom) => {\n const { remakedChildren, unUsedChildren } = diffLoopChildren(\n newWDom,\n originalWDom\n );\n unUsedChildren.map((unusedItem) => {\n const el = unusedItem.el;\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n });\n return remakedChildren;\n};\nconst diffLoopChildren = (newWDom, originalWDom) => {\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 if (originalItem) {\n originalChildren.splice(originalChildren.indexOf(originalItem), 1);\n }\n childItem.getParent = () => newWDom;\n return childItem;\n });\n return {\n remakedChildren,\n unUsedChildren: originalChildren\n };\n};\nconst findSameKeyOriginalItem = (item, originalChildren) => {\n const key = getKey(item);\n return originalChildren.find(\n (orignalChildItem) => getKey(orignalChildItem) === key\n );\n};\nconst getKey = (target) => {\n var _a, _b, _c;\n return (_c = (_a = target == null ? void 0 : target.componentProps) == null ? void 0 : _a.key) != null ? _c : (_b = target == null ? void 0 : target.props) == null ? void 0 : _b.key;\n};\nconst updateCallback = (effectAction, dependencies = () => []) => {\n const updateReqs = componentRef.get(getComponentKey()).upR;\n updateReqs.push(() => useUpdated(effectAction, dependencies));\n useUpdated(effectAction, dependencies);\n};\nconst runUpdateCallback = () => {\n var _a;\n const updateReqs = (_a = componentRef.get(getComponentKey())) == null ? void 0 : _a.upR;\n if (updateReqs == null ? void 0 : updateReqs.length) {\n updateReqs.forEach((callback) => callback());\n }\n redrawQueue.value = [];\n redrawQueueTimeout.value = null;\n};\nconst Fragment = (_props, ...children) => ({\n type: \"fragment\",\n children\n});\nconst h = (tag, props, ...children) => {\n const nodeParentPointer = { value: void 0 };\n const newProps = props || {};\n const newChildren = remakeChildren(nodeParentPointer, children);\n const node = makeNode(tag, newProps, newChildren);\n if (!checkCustemComponentFunction(node)) {\n nodeParentPointer.value = node;\n }\n return node;\n};\nconst mount = (component) => (_props, _children) => component;\nconst reRenderCustomComponent = (tag, props, children, originalWDom) => {\n var _a;\n needDiffRef.value = true;\n const newWDom = makeWDomResolver(tag, props, children);\n const newWDomTree = makeNewWDomTree(newWDom, originalWDom);\n const { isRoot, getParent: getParent2, wrapElement, afterElement } = originalWDom;\n newWDomTree.getParent = getParent2;\n if (!isRoot && getParent2) {\n const brothers = ((_a = getParent2()) == null ? void 0 : _a.children) || [];\n const index = brothers.indexOf(originalWDom);\n brothers.splice(index, 1, newWDomTree);\n } else {\n newWDomTree.isRoot = true;\n newWDomTree.wrapElement = wrapElement;\n newWDomTree.afterElement = afterElement;\n }\n needDiffRef.value = false;\n wDomUpdate(newWDomTree);\n};\nconst makeWDomResolver = (tag, props, children) => {\n const tagName = tag.name;\n const constructor = tag;\n const resolve = (componentKey = props) => {\n initMountHookState(componentKey);\n const component = tag(props, children);\n const componentMaker = component(\n componentRender(componentKey),\n props,\n children\n );\n const customNode = makeCustomNode({\n componentMaker,\n componentKey,\n tag,\n props,\n children\n });\n const originalWDom = customNode;\n setRedrawAction(\n componentKey,\n () => reRenderCustomComponent(tag, props, children, originalWDom)\n );\n getComponentSubInfo(componentKey, \"vd\").value = customNode;\n return customNode;\n };\n return { tagName, constructor, props, children, resolve };\n};\nconst makeCustomNode = (wDomInfo) => {\n const { componentMaker, props } = wDomInfo;\n const customNode = componentMaker(props);\n const reRender2 = makeReRender(wDomInfo);\n addComponentProps(customNode, { ...wDomInfo, reRender: reRender2 });\n return customNode;\n};\nconst makeReRender = (wDomInfo) => {\n const reRender2 = () => wDomMaker({ ...wDomInfo, reRender: reRender2 });\n return reRender2;\n};\nconst wDomMaker = (wDomInfo) => {\n const { componentMaker, componentKey, tag, props, children } = wDomInfo;\n initUpdateHookState(componentKey);\n runUpdateCallback();\n const originalWDom = componentMaker(props);\n setRedrawAction(\n componentKey,\n () => reRenderCustomComponent(tag, props, children, originalWDom)\n );\n addComponentProps(originalWDom, wDomInfo);\n getComponentSubInfo(componentKey, \"vd\").value = originalWDom;\n return originalWDom;\n};\nconst addComponentProps = (wDom, info) => {\n const { componentKey, tag, props, children, reRender: reRender2 } = info;\n Object.assign(wDom, {\n componentProps: props,\n componentChildren: children,\n constructor: tag,\n tagName: tag.name,\n componentKey,\n reRender: reRender2\n });\n};\nconst makeNode = (tag, props, children) => {\n if (checkFragmentFunction(tag)) {\n return Fragment(props, ...children);\n } else if (checkCustemComponentFunction(tag)) {\n const componetMakeResolver = makeWDomResolver(tag, props, children);\n return needDiffRef.value ? componetMakeResolver : componetMakeResolver.resolve();\n }\n return {\n type: \"element\",\n tag,\n props,\n children\n };\n};\nconst remakeChildren = (nodeParentPointer, children) => children.map((item) => {\n const childItem = makeChildrenItem(item);\n childItem.getParent = () => nodeParentPointer.value;\n return childItem;\n});\nconst makeChildrenItem = (item) => {\n if (item === null || item === void 0 || item === false) {\n return { type: null };\n } else if (Array.isArray(item)) {\n const nodeParentPointer = { value: void 0 };\n const children = remakeChildren(nodeParentPointer, item);\n const node = {\n type: \"loop\",\n children\n };\n nodeParentPointer.value = node;\n return node;\n } else if (typeof item === \"string\" || typeof item === \"number\") {\n return { type: \"text\", text: item };\n }\n return item;\n};\nconst ref = (initValue) => ({ value: initValue });\nexport {\n Fragment,\n h,\n mount,\n mountCallback,\n ref,\n render,\n updateCallback\n};\n//# sourceMappingURL=lithent.mjs.map\n","import { mountCallback as a, updateCallback as p } from \"lithent\";\nconst v = (r, t) => {\n let e = r;\n return {\n get value() {\n return e;\n },\n get v() {\n return e;\n },\n set value(n) {\n e = n, t();\n },\n set v(n) {\n e = n, t();\n }\n };\n}, f = (r) => {\n let t = r;\n return {\n get value() {\n return t();\n },\n get v() {\n return t();\n },\n set value(e) {\n throw new Error(\"You can't change 'computed'\");\n },\n set v(e) {\n throw new Error(\"You can't change 'computed'\");\n }\n };\n}, m = (r, t = () => {\n}, e = () => []) => {\n a(() => (r(), t)), p(() => (t && t(), r), e);\n}, l = /* @__PURE__ */ new Map(), u = {}, i = (r) => {\n const t = Symbol();\n return l.set(t, r), (e) => {\n var n;\n return (n = u[t]) != null || (u[t] = []), u[t].push(e), h(t);\n };\n}, h = (r) => new Proxy(l.get(r), {\n get(t, e) {\n return t[e];\n },\n set(t, e, n) {\n t[e] = n;\n const s = u[r], c = [];\n return s.forEach((o) => {\n o() || c.push(o);\n }), c.forEach(\n (o) => s.splice(s.indexOf(o), 1)\n ), !0;\n }\n});\nexport {\n f as computed,\n m as effect,\n v as state,\n i as store\n};\n//# sourceMappingURL=lithentHelper.mjs.map\n","// example.jsx\nimport {\n h,\n Fragment,\n render,\n ref,\n mountCallback,\n updateCallback,\n mount,\n} from 'lithent';\nimport { state, computed, effect, store } from 'lithent-helper';\n\n// This is the \"mount\" function.\n// This function is only executed on mount, and on update, only updates `props` and then executes the internal return function.\n// childen is passed as the second argument.\nconst ChildComponent = mount<{ parentValue: number }>(\n (renew, props, children) => {\n // The value is used as a \"getter\" to make it easy to get and write to in the higher-order functions it returns\n const count = state<number>(1, renew);\n const text = state<string>(\n '\"destructuring\" the \"props\" value directly from the mount function will cause referencing issues, so if you want to use it, you need to \"destructuring\" it from the internal function (updater).',\n renew\n );\n const getParentValue = () => props.parentValue;\n const parentValueFromMount = props.parentValue;\n const summ = computed<number>(\n () => count.v + notRefValue + props.parentValue\n );\n\n const localStore = store<{ text: string; count: number }>({\n text: 's',\n count: 0,\n })(renew);\n /*\n // To share a store, make it externally and use `asign`.\n const asignStore = store<{ text: string; count: number }>({ text: 's', count: 0 });\n\n const sharedStore = asignStore(nenew);\n */\n\n // Even if you don't use a ref, the private value is always maintained as a regular variable.\n let notRefValue = props.parentValue;\n\n // Ref is only used to reference the DOM.\n const domRef = ref(null);\n\n const increase = () => {\n count.v = count.v + 1;\n notRefValue += 1;\n };\n\n const handleInputChane = (event: InputEvent) => {\n text.v = (event.target as HTMLInputElement).value;\n };\n\n const localStoreUpdate = () => {\n localStore.count += 1;\n localStore.text += '1';\n };\n\n const handleMounted = () => {\n console.log('MOUNTED', domRef);\n\n return () => console.log('UNMOUNT');\n };\n const handleUpdated = () => {\n console.log('UPDATE - parentValue');\n\n return () => console.log('UPDATED');\n };\n\n mountCallback(handleMounted);\n updateCallback(handleUpdated, () => [props.parentValue]); // Only Defs Updated (using a closure to update a value)\n\n // Behaves like `react`'s `useEffect`\n effect(\n () => console.log('INJECT'),\n () => console.log('CLEAN_UP'),\n () => [count.v]\n );\n\n // Wrap in a function and return (using a closure to hold the value)\n // This is the \"update\" function.\n return ({ parentValue }) => (\n <Fragment>\n {/* Note that the event is onInput (we use the native event name to avoid confusion). */}\n <div>\n <textarea\n value={text.v}\n onInput={handleInputChane}\n style={{ width: '300px', height: '100px' }}\n />\n </div>\n <div>{text.v}</div>\n <div>\n <div style={{ color: 'blue' }}>\n parentValueFromRef: {props.parentValue} (working)\n </div>\n <div style={{ color: 'blue' }}>\n parentValueFromFunction: {getParentValue()} (working)\n </div>\n <div style={{ color: 'blue' }}>\n parentValueFromUpdaterDestructuring: {parentValue} (working)\n </div>\n <div style={{ color: 'red' }}>\n parentValueFromMounterDestructuring: {parentValueFromMount} (not\n working)\n </div>\n </div>\n <div>\n <div ref={domRef}>count: {count.v}</div>\n <div>sum: {count.v + notRefValue + props.parentValue}</div>\n <div>sum(computed): {summ.v}</div>\n {/* It doesn't pull it out from under the reference, it uses the value directly, so you can just use it. */}\n <div>notRefValue: {notRefValue}</div>\n <div>localStore(text): {localStore.text}</div>\n <div>localStore(count): {localStore.count}</div>\n </div>\n <button onClick={increase}>Increase</button>\n <button onClick={localStoreUpdate}>localStoreUpdate</button>\n {children}\n </Fragment>\n );\n }\n);\n\nconst Root = mount(renew => {\n const parentNumber = state<number>(7, renew);\n\n const increaseParent = () => {\n parentNumber.v = parentNumber.v + 1;\n };\n\n const decreaseParent = () => {\n parentNumber.v = parentNumber.v - 1;\n };\n\n return () => (\n <Fragment>\n <ChildComponent parentValue={parentNumber.v}>\n <button onClick={increaseParent}>Increase - Parent</button>\n </ChildComponent>\n <button onClick={decreaseParent}>Decrease - Parent</button>\n </Fragment>\n );\n});\nconst root = <Root />;\n\nrender(root, document.getElementById('root'));\n"],"names":["relList","link","processPreload","mutations","mutation","node","getFetchOpts","script","fetchOpts","checkCustemComponentFunction","target","checkFragmentFunction","Fragment","checkPlainWDomType","wDom","checkPlainType","typeName","checkEmptyElement","checkSameCustomComponent","newWDom","originalWDom","checkSameFragment","_a","_b","checkSameTagElement","checkNormalTypeElement","checkExisty","value","checkStyleData","dataKey","dataValue","checkRefData","checkOptionElement","element","checkTextareaElement","checkCheckboxElement","checkRadioElement","checkNormalAttribute","getWDomType","result","checkSameWDomWithOriginal","getParent","vDom","parentVDom","reRender","infoVdom","props","children","infoProps","infoChidren","updateProps$1","updateChildren","newVDom","key","childrenItem","componentKeyRef","needDiffRef","componentRef","redrawQueue","redrawQueueTimeout","componentRender","componentKey","up","setComponetRef","getComponentKey","getComponentSubInfo","subKey","setRedrawAction","exec","execRedrawQueue","initUpdateHookState","initMountHookState","recursiveGetChildKeys","item","childComKey","childItemList","childVd","addedKey","acc","action","unmount","effectAction","runUnmountQueueFromWDom","removeItem","recursiveRunUnmount","subInfo","effect","mountCallback","runMountedQueueFromWDom","component","queue","sequence","callback","useUpdated","dependencies","upD","upS","def","checkNeedPushQueue","runUpdatedQueueFromWDom","originalDefs","newDefs","index","render","wrapElement","afterElement","Dom","wDomToDom","wDomUpdate","newWDomTree","needRerender","typeAdd","typeDelete","typeReplace","typeUpdate","typeSortedReplace","typeSortedUpdate","recursiveRemoveEvent","removeEvent","childItem","parentWDom","parent","findRealParentElement","findChildWithRemoveElement","newElement","parentEl","isLoop","nextEl","startFindNextBrotherElement","brothers","nextIndex","candidiateBrothers","finedNextEl","findChildFragmentNextElement","parentType","targetEl","bItem","type","el","isFragment","orignalElement","parentElement","oldProps","updateText","updateProps","originalProps","style","oldStyle","updateStyle","updateEvent","init","tag","text","wDomChildrenToDom","elementChildren","eventKey","newEventHandler","oldEventHandler","eventName","_match","p1","originalStyle","elementStyle","styleKey","isVirtualType","makeNewWDomTree","isSameType","remakeNewWDom","remakeWDom","generalize","remakeChildrenForDiff","addReRenderTypeProperty","existOriginalWDom","isEmptyElement","getKey","isKeyCheckedWDom","isSameText","remakeChildrenForUpdate","remakeChildrenForAdd","remakeChildrenForLoopUpdate","remakedChildren","unUsedChildren","diffLoopChildren","unusedItem","newChildren","originalChildren","originalItem","findSameKeyOriginalItem","orignalChildItem","_c","updateCallback","runUpdateCallback","updateReqs","_props","h","nodeParentPointer","newProps","remakeChildren","makeNode","mount","_children","reRenderCustomComponent","makeWDomResolver","isRoot","getParent2","componentMaker","customNode","makeCustomNode","wDomInfo","reRender2","makeReRender","addComponentProps","wDomMaker","info","componetMakeResolver","makeChildrenItem","ref","initValue","v","r","e","n","f","m","a","p","l","u","i","s","o","ChildComponent","renew","count","state","getParentValue","parentValueFromMount","summ","computed","notRefValue","localStore","store","domRef","increase","handleInputChane","event","localStoreUpdate","handleMounted","handleUpdated","parentValue","Root","parentNumber","increaseParent","decreaseParent","root"],"mappings":"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"}
|
package/examples/dist/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>lithent</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index.
|
|
7
|
+
<script type="module" crossorigin src="/assets/index.1a4d787f.js"></script>
|
|
8
8
|
</head>
|
|
9
9
|
<body>
|
|
10
10
|
<section id="root"></section>
|
package/package.json
CHANGED
package/src/render.ts
CHANGED
|
@@ -18,6 +18,8 @@ import {
|
|
|
18
18
|
checkExisty,
|
|
19
19
|
checkOptionElement,
|
|
20
20
|
checkTextareaElement,
|
|
21
|
+
checkCheckboxElement,
|
|
22
|
+
checkRadioElement,
|
|
21
23
|
} from '@/utils/predicator';
|
|
22
24
|
|
|
23
25
|
import { runMountedQueueFromWDom } from '@/hook/mountCallback';
|
|
@@ -38,6 +40,7 @@ export const render = (
|
|
|
38
40
|
const Dom = wDomToDom(wDom, true);
|
|
39
41
|
|
|
40
42
|
if (afterElement) {
|
|
43
|
+
wDom.afterElement = afterElement;
|
|
41
44
|
wrapElement.insertBefore(Dom, afterElement);
|
|
42
45
|
} else {
|
|
43
46
|
wrapElement.appendChild(Dom);
|
|
@@ -119,7 +122,14 @@ const typeAdd = (
|
|
|
119
122
|
const parentWDom = getParent(newWDom);
|
|
120
123
|
if (parentWDom.type) {
|
|
121
124
|
const parentEl = findRealParentElement(parentWDom);
|
|
122
|
-
const
|
|
125
|
+
const isLoop = parentWDom.type === 'loop';
|
|
126
|
+
|
|
127
|
+
let nextEl;
|
|
128
|
+
if (isLoop) {
|
|
129
|
+
nextEl = startFindNextBrotherElement(parentWDom, getParent(parentWDom));
|
|
130
|
+
} else {
|
|
131
|
+
nextEl = startFindNextBrotherElement(newWDom, parentWDom);
|
|
132
|
+
}
|
|
123
133
|
|
|
124
134
|
if (newElement && parentEl) {
|
|
125
135
|
if (nextEl) {
|
|
@@ -151,6 +161,8 @@ const startFindNextBrotherElement = (
|
|
|
151
161
|
|
|
152
162
|
if (!parentWDom.isRoot && ['fragment', 'loop'].includes(parentType)) {
|
|
153
163
|
return startFindNextBrotherElement(parentWDom, getParent(parentWDom));
|
|
164
|
+
} else if (parentWDom.isRoot && parentWDom.afterElement) {
|
|
165
|
+
return parentWDom.afterElement;
|
|
154
166
|
}
|
|
155
167
|
|
|
156
168
|
return undefined;
|
|
@@ -281,6 +293,10 @@ const updateProps = (
|
|
|
281
293
|
dataValue as (e: Event) => void,
|
|
282
294
|
originalProps[dataKey] as (e: Event) => void
|
|
283
295
|
);
|
|
296
|
+
} else if (checkRadioElement(element) && dataKey === 'checked') {
|
|
297
|
+
(element as HTMLInputElement).checked = !!dataValue;
|
|
298
|
+
} else if (checkCheckboxElement(element) && dataKey === 'checked') {
|
|
299
|
+
(element as HTMLInputElement).checked = !!dataValue;
|
|
284
300
|
} else if (checkTextareaElement(element) && dataKey === 'value') {
|
|
285
301
|
(element as HTMLInputElement).value = dataValue as string;
|
|
286
302
|
} else if (checkOptionElement(element) && dataKey === 'selected') {
|
package/src/types/index.ts
CHANGED
package/src/utils/predicator.ts
CHANGED
|
@@ -97,6 +97,14 @@ export const checkTextareaElement = (element: any): element is HTMLElement => {
|
|
|
97
97
|
return element.nodeType === 1 && element.tagName === 'TEXTAREA';
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
+
export const checkCheckboxElement = (element: any): element is HTMLElement => {
|
|
101
|
+
return element.nodeType === 1 && element.type === 'checkbox';
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const checkRadioElement = (element: any): element is HTMLElement => {
|
|
105
|
+
return element.nodeType === 1 && element.type === 'radio';
|
|
106
|
+
};
|
|
107
|
+
|
|
100
108
|
export const checkNormalAttribute = (
|
|
101
109
|
dataValue: unknown
|
|
102
110
|
): dataValue is number | string =>
|
package/src/wDom.ts
CHANGED
|
@@ -75,7 +75,7 @@ const reRenderCustomComponent = (
|
|
|
75
75
|
|
|
76
76
|
const newWDom = makeWDomResolver(tag, props, children);
|
|
77
77
|
const newWDomTree = makeNewWDomTree(newWDom, originalWDom);
|
|
78
|
-
const { isRoot, getParent, wrapElement } = originalWDom;
|
|
78
|
+
const { isRoot, getParent, wrapElement, afterElement } = originalWDom;
|
|
79
79
|
|
|
80
80
|
newWDomTree.getParent = getParent;
|
|
81
81
|
|
|
@@ -87,6 +87,7 @@ const reRenderCustomComponent = (
|
|
|
87
87
|
} else {
|
|
88
88
|
newWDomTree.isRoot = true;
|
|
89
89
|
newWDomTree.wrapElement = wrapElement;
|
|
90
|
+
newWDomTree.afterElement = afterElement;
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
needDiffRef.value = false;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const c of r)if(c.type==="childList")for(const s of c.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&o(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const c={};return r.integrity&&(c.integrity=r.integrity),r.referrerpolicy&&(c.referrerPolicy=r.referrerpolicy),r.crossorigin==="use-credentials"?c.credentials="include":r.crossorigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(r){if(r.ep)return;r.ep=!0;const c=n(r);fetch(r.href,c)}})();const R=e=>typeof e=="function"&&!j(e)||typeof e=="object"&&"resolve"in e,j=e=>typeof e=="function"&&e===x,v=e=>typeof e=="object"&&!("resolve"in e),C=(e,t)=>v(e)&&e.type===t,B=e=>v(e)&&!e.type,ae=(e,t)=>e.constructor===(t==null?void 0:t.constructor),pe=(e,t)=>{var n,o;return v(e)&&(t==null?void 0:t.type)==="fragment"&&((n=t==null?void 0:t.children)==null?void 0:n.length)===((o=e==null?void 0:e.children)==null?void 0:o.length)},fe=(e,t)=>{var n,o;return v(e)&&(t==null?void 0:t.type)==="element"&&(t==null?void 0:t.tag)===e.tag&&((n=t==null?void 0:t.children)==null?void 0:n.length)===((o=e==null?void 0:e.children)==null?void 0:o.length)},S=(e,t)=>{var n,o;return v(e)&&(t==null?void 0:t.type)===e.type&&(((n=t==null?void 0:t.children)==null?void 0:n.length)===((o=e==null?void 0:e.children)==null?void 0:o.length)||e.type==="loop")},_=e=>e!=null,I=(e,t)=>e==="style"&&typeof t=="object",ve=(e,t)=>e==="ref"&&typeof t=="object",he=e=>e.nodeType===1&&e.tagName==="OPTION",ye=e=>e.nodeType===1&&e.tagName==="TEXTAREA",Ce=e=>typeof e=="number"||typeof e=="string",ge=e=>{let t;return R(e)?t="c":C(e,"fragment")?t="f":C(e,"element")?t="e":C(e,"loop")?t="l":C(e,"text")?t="t":B(e)&&(t="et"),t},ke={c:ae,l:S,t:S,e:fe,f:pe,et:S},f=e=>{const t=e.getParent&&e.getParent();if(!t)throw Error("Not found parent vDom");return t},me=(e,t)=>{const{componentProps:n,componentChildren:o}=e,{props:r,children:c}=t;n&&Re(n,r),o&&Ee(o,c);const s=e.reRender&&e.reRender();if(!s)throw Error("Unable reRender");return s},Re=(e,t)=>{e&&t!==e&&(Object.keys(e).forEach(n=>delete e[n]),Object.entries(t||{}).forEach(([n,o])=>e[n]=o))},Ee=(e,t)=>{e&&t!==e&&(e.splice(0,e.length),t&&t.forEach(n=>e.push(n)))},h={value:{}},U={value:!1},a=new WeakMap,k={value:[]},F={value:null},Pe=e=>()=>{var t;const n=(t=a.get(e))==null?void 0:t.up;let o=!1;return n&&(n(),o=!0),o},be=e=>{a.set(e,{vd:{value:null},up:()=>{},upR:[],upS:{value:0},upD:[],upCB:[],mts:[],umts:[]})},y=()=>h.value,q=(e,t)=>a.get(e)[t],Q=(e,t)=>{a.get(e).up=()=>{k.value.push({componentKey:e,exec:t}),F.value||(F.value=setTimeout(Ne))}},xe=e=>h.value=e,Te=e=>{h.value=e,be(e)},Y=(e,t)=>{(e.children||[]).forEach(n=>{const o=n.componentKey;o&&t.push(o),Y(n,t)})},Ne=()=>{let e=[];k.value.forEach(o=>{var r,c;const s=(c=(r=a.get(o.componentKey))==null?void 0:r.vd)==null?void 0:c.value;s&&Y(s,e)});const t=[],n=k.value.reduce((o,r)=>{const{componentKey:c}=r;return e.includes(c)||t.includes(c)||(t.push(c),o.push(r)),o},[]);for(;n.length;){const o=n.shift();o&&o.exec()}},Se=e=>{a.get(y()).umts.push(e)},$=e=>{const{componentKey:t}=e;t&&Ue(t),z(e)},z=e=>{(e.children||[]).forEach(t=>{t.componentKey?$(t):z(t)})},Ue=e=>{const t=a.get(e);t&&(t.umts.forEach(n=>n()),t.umts=[],a.delete(e))},G=e=>{a.get(y()).mts.push(e)},M=e=>{const{componentKey:t}=e;if(t){const n=a.get(t),o=n==null?void 0:n.mts,r=n==null?void 0:n.upS;h.value=t,r&&(r.value=0),o&&(n.mts=[],o.forEach(c=>{const s=c();s&&Se(s)}))}},V=(e,t=()=>[])=>{const n=a.get(y()),{upD:o,upS:r}=n,c=o[r.value];if(c&&Oe(c,t())){const s=e();s&&n.upCB.push(s)}o[r.value]=t(),r.value+=1},Fe=e=>{const{componentKey:t}=e;if(t){const n=a.get(t),o=n==null?void 0:n.upCB,r=n==null?void 0:n.upS;h.value=t,r&&(r.value=0),e.constructor&&o&&(n.upCB=[],o.forEach(c=>c()))}},Oe=(e,t)=>!e.length&&!e.length?!0:e.some((n,o)=>n!==t[o]),_e=(e,t,n)=>{if(!t)throw Error("WrapELement is null");e.isRoot=!0,e.wrapElement=t;const o=E(e,!0);n?t.insertBefore(o,n):t.appendChild(o)},J=e=>{const{needRerender:t}=e;if(t&&t!=="N"){const n={A:L,D:A,R:Ae,U:Le,SR:H,SU:Me}[t];n(e)}},K=e=>{e.props&&e.el&&D(e.props,e.el),(e.children||[]).forEach(t=>{K(t)})},A=e=>{var t,n;const o=f(e),r=P(o);e.oldProps&&e.el&&D(e.oldProps,e.el),r&&e.el&&(((t=e.el)==null?void 0:t.nodeType)===1?r.removeChild(e.el):((n=e.el)==null?void 0:n.nodeType)===11&&X(e,r),delete e.el)},X=(e,t)=>{((e==null?void 0:e.oldChildren)||(e==null?void 0:e.children)||[]).forEach(n=>{var o,r;((o=n.el)==null?void 0:o.nodeType)===1?t.removeChild(n==null?void 0:n.el):((r=n.el)==null?void 0:r.nodeType)===11&&X(n,t)})},H=e=>{A(e),L(e)},Me=e=>{A(e),L(e,e.el)},L=(e,t)=>{t||(t=E(e,!0));const n=f(e);if(n.type){const o=P(n),r=Z(e,n);t&&o&&(r?o.insertBefore(t,r):o.appendChild(t))}M(e)},Z=(e,t)=>{const n=t.children||[],r=n.indexOf(e)+1,c=n.slice(r),s=w(c),u=t.type||"";if(s)return s;if(!t.isRoot&&["fragment","loop"].includes(u))return Z(t,f(t))},w=e=>e.reduce((t,n)=>{const o=n.type,r=n.el,c=o&&["fragment","loop"].includes(o);return t||(c?w(n.children||[]):r&&r.nodeType!==11?r:t)},void 0),Ae=e=>{const t=f(e),n=e.el;if(t.type&&n)if(n.nodeType===11)H(e);else{const o=P(t),r=E(e,!0);o&&o.replaceChild(r,n)}M(e)},D=(e,t)=>{t&&Object.entries(e||{}).forEach(([n,o])=>{n.match(/^on/)&&t.removeEventListener(n,o)})},Le=e=>{var t;const n=e.el;if(e.type==="text"){Ie(e);return}if(n){const{oldProps:o,props:r}=e;W(r,n,o),delete e.oldProps,e.tag==="input"&&(n.value=String(((t=e==null?void 0:e.props)==null?void 0:t.value)||""))}(e.children||[]).forEach(o=>J(o)),Fe(e)},Ie=e=>{const t=e.el;t&&(t.nodeValue=String(e.text))},W=(e,t,n)=>{const o={...n};Object.entries(e||{}).forEach(([r,c])=>{if(r!=="key")if(r==="innerHTML"&&t&&typeof c=="string")t.innerHTML=c;else if(I(r,c)){const s=c,u=I(r,o.style)||{};Be(s,u,t)}else ve(r,c)?c.value=t:r.match(/^on/)?je(t,r,c,o[r]):ye(t)&&r==="value"?t.value=c:he(t)&&r==="selected"?t.selected=!!c:Ce(c)&&t.setAttribute(r,String(c));delete o[r]}),Object.keys(o).forEach(r=>t.removeAttribute(r))},E=(e,t)=>{let n;const{type:o,tag:r,text:c,props:s,children:u=[]}=e;return o==="fragment"||o==="loop"?n=new DocumentFragment:o==="element"&&r?n=document.createElement(r):o==="text"&&_(c)&&(n=document.createTextNode(String(c))),Ve(u,n,t),W(s,n),e.el=n,M(e),n||document.createElement("div")},Ve=(e,t,n)=>{if(n){const o=e.reduce((r,c)=>(c.type&&r.appendChild(E(c,n)),r),new DocumentFragment);t&&o.hasChildNodes()&&t.appendChild(o)}},je=(e,t,n,o)=>{const r=t.replace(/^on(.*)/,(c,s)=>s.toLowerCase());o!==n&&(o&&e.removeEventListener(r,o),n&&e.addEventListener(r,n))},Be=(e,t,n)=>{const o={...t},r=n==null?void 0:n.style;r&&(Object.entries(e).forEach(([c,s])=>{r[c]=s,delete o[c]}),Object.entries(o).forEach(([c])=>r[c]=""))},P=e=>{const t=e.type==="fragment"||e.type==="loop";if(e.isRoot&&t)return e.wrapElement;if(!t)return e.el;const n=f(e);return P(n)},b=(e,t)=>{const n=ge(e);if(!n)throw new Error("Unknown type wdom");const o=ke[n](e,t);return qe(e,o,t)},qe=(e,t,n)=>{const o=Ye(e,t,n);o.children=$e(o,t,n);const r=Qe(o,t,n);return o.needRerender=r,r!=="A"&&n&&(o.el=n.el),r&&["D","R","SR"].includes(r)&&(n==null?void 0:n.componentKey)&&($(n),K(n),o.oldChildren=n.children),o.oldProps=n==null?void 0:n.props,o},Qe=(e,t,n)=>{const o=n&&n.type,r=B(e),s=!!e.getParent&&f(e).type,u=m(e),i=s==="loop"&&_(u),p=e.type==="text"&&t&&e.text===(n==null?void 0:n.text);let d;return r?d="D":p?d="N":o?t?d=i?"SU":"U":d=i?"SR":"R":d="A",d},Ye=(e,t,n)=>R(e)?t&&n?me(n,e):e.resolve():e,$e=(e,t,n)=>t&&n?Ge(e,n):ze(e),ze=e=>(e.children||[]).map(t=>{const n=b(t);return n.getParent=()=>e,n}),Ge=(e,t)=>e.type==="loop"&&_(m((e.children||[])[0]))?Je(e,t):(e.children||[]).map((n,o)=>{const r=b(n,(t.children||[])[o]);return r.getParent=()=>e,r}),Je=(e,t)=>{const{remakedChildren:n,unUsedChildren:o}=Ke(e,t);return o.map(r=>{const c=r.el;c&&c.parentNode&&c.parentNode.removeChild(c)}),n},Ke=(e,t)=>{const n=[...e.children||[]],o=[...t.children||[]];return{remakedChildren:n.map(c=>{const s=Xe(c,o),u=b(c,s);return s&&o.splice(o.indexOf(s),1),u.getParent=()=>e,u}),unUsedChildren:o}},Xe=(e,t)=>{const n=m(e);return t.find(o=>m(o)===n)},m=e=>{var t,n,o;return(o=(t=e==null?void 0:e.componentProps)==null?void 0:t.key)!=null?o:(n=e==null?void 0:e.props)==null?void 0:n.key},ee=(e,t=()=>[])=>{a.get(y()).upR.push(()=>V(e,t)),V(e,t)},He=()=>{var e;const t=(e=a.get(y()))==null?void 0:e.upR;t!=null&&t.length&&t.forEach(n=>n()),k.value=[],F.value=null},x=(e,...t)=>({type:"fragment",children:t}),l=(e,t,...n)=>{const o={value:void 0},r=t||{},c=ce(o,n),s=We(e,r,c);return R(s)||(o.value=s),s},te=e=>(t,n)=>e,ne=(e,t,n,o)=>{var r;U.value=!0;const c=oe(e,t,n),s=b(c,o),{isRoot:u,getParent:i,wrapElement:p}=o;if(s.getParent=i,!u&&i){const d=((r=i())==null?void 0:r.children)||[],T=d.indexOf(o);d.splice(T,1,s)}else s.isRoot=!0,s.wrapElement=p;U.value=!1,J(s)},oe=(e,t,n)=>({tagName:e.name,constructor:e,props:t,children:n,resolve:(s=t)=>{Te(s);const i=e(t,n)(Pe(s),t,n),p=Ze({componentMaker:i,componentKey:s,tag:e,props:t,children:n}),d=p;return Q(s,()=>ne(e,t,n,d)),q(s,"vd").value=p,p}}),Ze=e=>{const{componentMaker:t,props:n}=e,o=t(n),r=we(e);return re(o,{...e,reRender:r}),o},we=e=>{const t=()=>De({...e,reRender:t});return t},De=e=>{const{componentMaker:t,componentKey:n,tag:o,props:r,children:c}=e;xe(n),He();const s=t(r);return Q(n,()=>ne(o,r,c,s)),re(s,e),q(n,"vd").value=s,s},re=(e,t)=>{const{componentKey:n,tag:o,props:r,children:c,reRender:s}=t;Object.assign(e,{componentProps:r,componentChildren:c,constructor:o,tagName:o.name,componentKey:n,reRender:s})},We=(e,t,n)=>{if(j(e))return x(t,...n);if(R(e)){const o=oe(e,t,n);return U.value?o:o.resolve()}return{type:"element",tag:e,props:t,children:n}},ce=(e,t)=>t.map(n=>{const o=et(n);return o.getParent=()=>e.value,o}),et=e=>{if(e==null||e===!1)return{type:null};if(Array.isArray(e)){const t={value:void 0},o={type:"loop",children:ce(t,e)};return t.value=o,o}else if(typeof e=="string"||typeof e=="number")return{type:"text",text:e};return e},tt=e=>({value:e}),O=(e,t)=>{let n=e;return{get value(){return n},get v(){return n},set value(o){n=o,t()},set v(o){n=o,t()}}},nt=e=>{let t=e;return{get value(){return t()},get v(){return t()},set value(n){throw new Error("You can't change 'computed'")},set v(n){throw new Error("You can't change 'computed'")}}},ot=(e,t=()=>{},n=()=>[])=>{G(()=>(e(),t)),ee(()=>(t&&t(),e),n)},se=new Map,g={},rt=e=>{const t=Symbol();return se.set(t,e),n=>(g[t]!=null||(g[t]=[]),g[t].push(n),ct(t))},ct=e=>new Proxy(se.get(e),{get(t,n){return t[n]},set(t,n,o){t[n]=o;const r=g[e],c=[];return r.forEach(s=>{s()||c.push(s)}),c.forEach(s=>r.splice(r.indexOf(s),1)),!0}}),st=te((e,t,n)=>{const o=O(1,e),r=O('"destructuring" the "props" value directly from the mount function will cause referencing issues, so if you want to use it, you need to "destructuring" it from the internal function (updater).',e),c=()=>t.parentValue,s=t.parentValue,u=nt(()=>o.v+p+t.parentValue),i=rt({text:"s",count:0})(e);let p=t.parentValue;const d=tt(null),T=()=>{o.v=o.v+1,p+=1},le=N=>{r.v=N.target.value},ue=()=>{i.count+=1,i.text+="1"},ie=()=>(console.log("MOUNTED",d),()=>console.log("UNMOUNT")),de=()=>(console.log("UPDATE - parentValue"),()=>console.log("UPDATED"));return G(ie),ee(de,()=>[t.parentValue]),ot(()=>console.log("INJECT"),()=>console.log("CLEAN_UP"),()=>[o.v]),({parentValue:N})=>l(x,null,l("div",null,l("textarea",{value:r.v,onInput:le,style:{width:"300px",height:"100px"}})),l("div",null,r.v),l("div",null,l("div",{style:{color:"blue"}},"parentValueFromRef: ",t.parentValue," (working)"),l("div",{style:{color:"blue"}},"parentValueFromFunction: ",c()," (working)"),l("div",{style:{color:"blue"}},"parentValueFromUpdaterDestructuring: ",N," (working)"),l("div",{style:{color:"red"}},"parentValueFromMounterDestructuring: ",s," (not working)")),l("div",null,l("div",{ref:d},"count: ",o.v),l("div",null,"sum: ",o.v+p+t.parentValue),l("div",null,"sum(computed): ",u.v),l("div",null,"notRefValue: ",p),l("div",null,"localStore(text): ",i.text),l("div",null,"localStore(count): ",i.count)),l("button",{onClick:T},"Increase"),l("button",{onClick:ue},"localStoreUpdate"),n)}),lt=te(e=>{const t=O(7,e),n=()=>{t.v=t.v+1},o=()=>{t.v=t.v-1};return()=>l(x,null,l(st,{parentValue:t.v},l("button",{onClick:n},"Increase - Parent")),l("button",{onClick:o},"Decrease - Parent"))}),ut=l(lt,null);_e(ut,document.getElementById("root"));
|
|
2
|
-
//# sourceMappingURL=index.32d7fabc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.32d7fabc.js","sources":["../../vite/modulepreload-polyfill","../../../dist/lithent.mjs","../../../helper/dist/lithentHelper.mjs","../../src/index.tsx"],"sourcesContent":["__VITE_IS_MODERN__&&(function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n}());","const checkCustemComponentFunction = (target) => typeof target === \"function\" && !checkFragmentFunction(target) || typeof target === \"object\" && \"resolve\" in target;\nconst checkFragmentFunction = (target) => typeof target === \"function\" && target === Fragment;\nconst checkPlainWDomType = (wDom) => typeof wDom === \"object\" && !(\"resolve\" in wDom);\nconst checkPlainType = (wDom, typeName) => checkPlainWDomType(wDom) && wDom.type === typeName;\nconst checkEmptyElement = (wDom) => checkPlainWDomType(wDom) && !wDom.type;\nconst checkSameCustomComponent = (newWDom, originalWDom) => newWDom.constructor === (originalWDom == null ? void 0 : originalWDom.constructor);\nconst checkSameFragment = (newWDom, originalWDom) => {\n var _a, _b;\n return checkPlainWDomType(newWDom) && (originalWDom == null ? void 0 : originalWDom.type) === \"fragment\" && ((_a = originalWDom == null ? void 0 : originalWDom.children) == null ? void 0 : _a.length) === ((_b = newWDom == null ? void 0 : newWDom.children) == null ? void 0 : _b.length);\n};\nconst checkSameTagElement = (newWDom, originalWDom) => {\n var _a, _b;\n return checkPlainWDomType(newWDom) && (originalWDom == null ? void 0 : originalWDom.type) === \"element\" && (originalWDom == null ? void 0 : originalWDom.tag) === newWDom.tag && ((_a = originalWDom == null ? void 0 : originalWDom.children) == null ? void 0 : _a.length) === ((_b = newWDom == null ? void 0 : newWDom.children) == null ? void 0 : _b.length);\n};\nconst checkNormalTypeElement = (newWDom, originalWDom) => {\n var _a, _b;\n 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\");\n};\nconst checkExisty = (value) => value !== null && value !== void 0;\nconst checkStyleData = (dataKey, dataValue) => dataKey === \"style\" && typeof dataValue === \"object\";\nconst checkRefData = (dataKey, dataValue) => dataKey === \"ref\" && typeof dataValue === \"object\";\nconst checkOptionElement = (element) => {\n return element.nodeType === 1 && element.tagName === \"OPTION\";\n};\nconst checkTextareaElement = (element) => {\n return element.nodeType === 1 && element.tagName === \"TEXTAREA\";\n};\nconst checkNormalAttribute = (dataValue) => typeof dataValue === \"number\" || typeof dataValue === \"string\";\nconst getWDomType = (wDom) => {\n let result;\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 return result;\n};\nconst checkSameWDomWithOriginal = {\n c: checkSameCustomComponent,\n l: checkNormalTypeElement,\n t: checkNormalTypeElement,\n e: checkSameTagElement,\n f: checkSameFragment,\n et: checkNormalTypeElement\n};\nconst getParent = (vDom) => {\n const parentVDom = vDom.getParent && vDom.getParent();\n if (!parentVDom) {\n throw Error(\"Not found parent vDom\");\n }\n return parentVDom;\n};\nconst reRender = (vDom, infoVdom) => {\n const { componentProps: props, componentChildren: children } = vDom;\n const { props: infoProps, children: infoChidren } = infoVdom;\n if (props) {\n updateProps$1(props, infoProps);\n }\n if (children) {\n updateChildren(children, infoChidren);\n }\n const newVDom = vDom.reRender && vDom.reRender();\n if (!newVDom) {\n throw Error(\"Unable reRender\");\n }\n return newVDom;\n};\nconst updateProps$1 = (props, infoProps) => {\n if (props && infoProps !== props) {\n Object.keys(props).forEach((key) => delete props[key]);\n Object.entries(infoProps || {}).forEach(\n ([key, value]) => props[key] = value\n );\n }\n};\nconst updateChildren = (children, infoChidren) => {\n if (children && infoChidren !== children) {\n children.splice(0, children.length);\n if (infoChidren) {\n infoChidren.forEach((childrenItem) => children.push(childrenItem));\n }\n }\n};\nconst componentKeyRef = { value: {} };\nconst needDiffRef = { value: false };\nconst componentRef = /* @__PURE__ */ new WeakMap();\nconst redrawQueue = { value: [] };\nconst redrawQueueTimeout = { value: null };\nconst componentRender = (componentKey) => () => {\n var _a;\n const up = (_a = componentRef.get(componentKey)) == null ? void 0 : _a.up;\n let result = false;\n if (up) {\n up();\n result = true;\n }\n return result;\n};\nconst setComponetRef = (componentKey) => {\n componentRef.set(componentKey, {\n vd: { value: null },\n up: () => {\n },\n upR: [],\n upS: { value: 0 },\n upD: [],\n upCB: [],\n mts: [],\n umts: []\n });\n};\nconst getComponentKey = () => componentKeyRef.value;\nconst getComponentSubInfo = (componentKey, subKey) => componentRef.get(componentKey)[subKey];\nconst setRedrawAction = (componentKey, exec) => {\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};\nconst initUpdateHookState = (componentKey) => componentKeyRef.value = componentKey;\nconst initMountHookState = (componentKey) => {\n componentKeyRef.value = componentKey;\n setComponetRef(componentKey);\n};\nconst recursiveGetChildKeys = (wDom, result) => {\n (wDom.children || []).forEach((item) => {\n const childComKey = item.componentKey;\n if (childComKey) {\n result.push(childComKey);\n }\n recursiveGetChildKeys(item, result);\n });\n};\nconst execRedrawQueue = () => {\n let childItemList = [];\n redrawQueue.value.forEach((item) => {\n var _a, _b;\n const childVd = (_b = (_a = componentRef.get(item.componentKey)) == null ? void 0 : _a.vd) == null ? void 0 : _b.value;\n if (childVd) {\n recursiveGetChildKeys(childVd, childItemList);\n }\n });\n const addedKey = [];\n const result = redrawQueue.value.reduce((acc, item) => {\n const { componentKey } = item;\n if (childItemList.includes(componentKey) || addedKey.includes(componentKey)) {\n return acc;\n }\n addedKey.push(componentKey);\n acc.push(item);\n return acc;\n }, []);\n while (result.length) {\n const action = result.shift();\n if (action) {\n action.exec();\n }\n }\n};\nconst unmount = (effectAction) => {\n componentRef.get(getComponentKey()).umts.push(effectAction);\n};\nconst runUnmountQueueFromWDom = (newWDom) => {\n const { componentKey } = newWDom;\n if (componentKey) {\n removeItem(componentKey);\n }\n recursiveRunUnmount(newWDom);\n};\nconst recursiveRunUnmount = (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};\nconst removeItem = (componentKey) => {\n const subInfo = componentRef.get(componentKey);\n if (subInfo) {\n subInfo.umts.forEach((effect) => effect());\n subInfo.umts = [];\n componentRef.delete(componentKey);\n }\n};\nconst mountCallback = (effectAction) => {\n const mts = componentRef.get(getComponentKey()).mts;\n mts.push(effectAction);\n};\nconst runMountedQueueFromWDom = (newWDom) => {\n const { componentKey } = newWDom;\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component == null ? void 0 : component.mts;\n const sequence = component == null ? void 0 : component.upS;\n componentKeyRef.value = componentKey;\n if (sequence) {\n sequence.value = 0;\n }\n if (queue) {\n component.mts = [];\n queue.forEach((effect) => {\n const callback = effect();\n if (callback) {\n unmount(callback);\n }\n });\n }\n }\n};\nconst useUpdated = (effectAction, dependencies = () => []) => {\n const component = componentRef.get(getComponentKey());\n const { upD, upS } = component;\n const def = upD[upS.value];\n if (def && checkNeedPushQueue(def, dependencies())) {\n const callback = effectAction();\n if (callback) {\n component.upCB.push(callback);\n }\n }\n upD[upS.value] = dependencies();\n upS.value += 1;\n};\nconst runUpdatedQueueFromWDom = (newWDom) => {\n const { componentKey } = newWDom;\n if (componentKey) {\n const component = componentRef.get(componentKey);\n const queue = component == null ? void 0 : component.upCB;\n const sequence = component == null ? void 0 : component.upS;\n componentKeyRef.value = componentKey;\n if (sequence) {\n sequence.value = 0;\n }\n if (newWDom.constructor && queue) {\n component.upCB = [];\n queue.forEach((effect) => effect());\n }\n }\n};\nconst checkNeedPushQueue = (originalDefs, newDefs) => !originalDefs.length && !originalDefs.length ? true : originalDefs.some((def, index) => def !== newDefs[index]);\nconst render = (wDom, wrapElement, afterElement) => {\n if (!wrapElement) {\n throw Error(\"WrapELement is null\");\n }\n wDom.isRoot = true;\n wDom.wrapElement = wrapElement;\n const Dom = wDomToDom(wDom, true);\n if (afterElement) {\n wrapElement.insertBefore(Dom, afterElement);\n } else {\n wrapElement.appendChild(Dom);\n }\n};\nconst wDomUpdate = (newWDomTree) => {\n const { needRerender } = newWDomTree;\n if (needRerender && needRerender !== \"N\") {\n const exec = {\n A: typeAdd,\n D: typeDelete,\n R: typeReplace,\n U: typeUpdate,\n SR: typeSortedReplace,\n SU: typeSortedUpdate\n }[needRerender];\n exec(newWDomTree);\n }\n};\nconst recursiveRemoveEvent = (originalWDom) => {\n if (originalWDom.props && originalWDom.el) {\n removeEvent(originalWDom.props, originalWDom.el);\n }\n (originalWDom.children || []).forEach((childItem) => {\n recursiveRemoveEvent(childItem);\n });\n};\nconst typeDelete = (newWDom) => {\n var _a, _b;\n const parentWDom = getParent(newWDom);\n const parent = findRealParentElement(parentWDom);\n if (newWDom.oldProps && newWDom.el) {\n removeEvent(newWDom.oldProps, newWDom.el);\n }\n if (parent && newWDom.el) {\n if (((_a = newWDom.el) == null ? void 0 : _a.nodeType) === 1) {\n parent.removeChild(newWDom.el);\n } else if (((_b = newWDom.el) == null ? void 0 : _b.nodeType) === 11) {\n findChildWithRemoveElement(newWDom, parent);\n }\n delete newWDom.el;\n }\n};\nconst findChildWithRemoveElement = (newWDom, parent) => {\n ((newWDom == null ? void 0 : newWDom.oldChildren) || (newWDom == null ? void 0 : newWDom.children) || []).forEach((item) => {\n var _a, _b;\n if (((_a = item.el) == null ? void 0 : _a.nodeType) === 1) {\n parent.removeChild(item == null ? void 0 : item.el);\n } else if (((_b = item.el) == null ? void 0 : _b.nodeType) === 11) {\n findChildWithRemoveElement(item, parent);\n }\n });\n};\nconst typeSortedReplace = (newWDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom);\n};\nconst typeSortedUpdate = (newWDom) => {\n typeDelete(newWDom);\n typeAdd(newWDom, newWDom.el);\n};\nconst typeAdd = (newWDom, newElement) => {\n if (!newElement) {\n newElement = wDomToDom(newWDom, true);\n }\n const parentWDom = getParent(newWDom);\n if (parentWDom.type) {\n const parentEl = findRealParentElement(parentWDom);\n const nextEl = startFindNextBrotherElement(newWDom, parentWDom);\n if (newElement && parentEl) {\n if (nextEl) {\n parentEl.insertBefore(newElement, nextEl);\n } else {\n parentEl.appendChild(newElement);\n }\n }\n }\n runMountedQueueFromWDom(newWDom);\n};\nconst startFindNextBrotherElement = (wDom, parentWDom) => {\n const brothers = parentWDom.children || [];\n const index = brothers.indexOf(wDom);\n const nextIndex = index + 1;\n const candidiateBrothers = brothers.slice(nextIndex);\n const finedNextEl = findChildFragmentNextElement(candidiateBrothers);\n const parentType = parentWDom.type || \"\";\n if (finedNextEl) {\n return finedNextEl;\n }\n if (!parentWDom.isRoot && [\"fragment\", \"loop\"].includes(parentType)) {\n return startFindNextBrotherElement(parentWDom, getParent(parentWDom));\n }\n return void 0;\n};\nconst findChildFragmentNextElement = (candidiateBrothers) => candidiateBrothers.reduce(\n (targetEl, bItem) => {\n const type = bItem.type;\n const el = bItem.el;\n const isFragment = type && [\"fragment\", \"loop\"].includes(type);\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 return targetEl;\n },\n void 0\n);\nconst typeReplace = (newWDom) => {\n const parentWDom = getParent(newWDom);\n const orignalElement = newWDom.el;\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, true);\n if (parentElement) {\n parentElement.replaceChild(newElement, orignalElement);\n }\n }\n }\n runMountedQueueFromWDom(newWDom);\n};\nconst removeEvent = (oldProps, element) => {\n if (element) {\n Object.entries(oldProps || {}).forEach(\n ([dataKey, dataValue]) => {\n if (dataKey.match(/^on/)) {\n element.removeEventListener(dataKey, dataValue);\n }\n }\n );\n }\n};\nconst typeUpdate = (newWDom) => {\n var _a;\n const element = newWDom.el;\n if (newWDom.type === \"text\") {\n updateText(newWDom);\n return;\n }\n if (element) {\n const { oldProps, props } = newWDom;\n updateProps(props, element, oldProps);\n delete newWDom.oldProps;\n if (newWDom.tag === \"input\") {\n element.value = String(((_a = newWDom == null ? void 0 : newWDom.props) == null ? void 0 : _a.value) || \"\");\n }\n }\n (newWDom.children || []).forEach((childItem) => wDomUpdate(childItem));\n runUpdatedQueueFromWDom(newWDom);\n};\nconst updateText = (newWDom) => {\n const element = newWDom.el;\n if (element) {\n element.nodeValue = String(newWDom.text);\n }\n};\nconst updateProps = (props, element, oldProps) => {\n const originalProps = { ...oldProps };\n Object.entries(props || {}).forEach(\n ([dataKey, dataValue]) => {\n if (dataKey === \"key\")\n ;\n else if (dataKey === \"innerHTML\" && element && typeof dataValue === \"string\") {\n element.innerHTML = dataValue;\n } else if (checkStyleData(dataKey, dataValue)) {\n const style = dataValue;\n const oldStyle = checkStyleData(dataKey, originalProps.style) || {};\n updateStyle(style, oldStyle, element);\n } else if (checkRefData(dataKey, dataValue)) {\n dataValue.value = element;\n } else if (dataKey.match(/^on/)) {\n updateEvent(\n element,\n dataKey,\n dataValue,\n originalProps[dataKey]\n );\n } else if (checkTextareaElement(element) && dataKey === \"value\") {\n element.value = dataValue;\n } else if (checkOptionElement(element) && dataKey === \"selected\") {\n element.selected = !!dataValue;\n } else if (checkNormalAttribute(dataValue)) {\n element.setAttribute(dataKey, String(dataValue));\n }\n delete originalProps[dataKey];\n }\n );\n Object.keys(originalProps).forEach(\n (dataKey) => element.removeAttribute(dataKey)\n );\n};\nconst wDomToDom = (wDom, init) => {\n let element;\n const { type, tag, text, props, children = [] } = wDom;\n const isVirtualType = type === \"fragment\" || type === \"loop\";\n if (isVirtualType) {\n element = new DocumentFragment();\n } else if (type === \"element\" && tag) {\n element = document.createElement(tag);\n } else if (type === \"text\" && checkExisty(text)) {\n element = document.createTextNode(String(text));\n }\n wDomChildrenToDom(children, element, init);\n updateProps(props, element);\n wDom.el = element;\n runMountedQueueFromWDom(wDom);\n return element || document.createElement(\"div\");\n};\nconst wDomChildrenToDom = (children, parentElement, init) => {\n if (init) {\n const elementChildren = children.reduce(\n (acc, childItem) => {\n if (childItem.type) {\n acc.appendChild(wDomToDom(childItem, init));\n }\n return acc;\n },\n new DocumentFragment()\n );\n if (parentElement && elementChildren.hasChildNodes()) {\n parentElement.appendChild(elementChildren);\n }\n }\n};\nconst updateEvent = (element, eventKey, newEventHandler, oldEventHandler) => {\n const eventName = eventKey.replace(\n /^on(.*)/,\n (_match, p1) => p1.toLowerCase()\n );\n if (oldEventHandler !== newEventHandler) {\n if (oldEventHandler) {\n element.removeEventListener(eventName, oldEventHandler);\n }\n if (newEventHandler) {\n element.addEventListener(eventName, newEventHandler);\n }\n }\n};\nconst updateStyle = (style, oldStyle, element) => {\n const originalStyle = { ...oldStyle };\n const elementStyle = element == null ? void 0 : element.style;\n if (elementStyle) {\n Object.entries(style).forEach(([styleKey, dataValue]) => {\n elementStyle[styleKey] = dataValue;\n delete originalStyle[styleKey];\n });\n Object.entries(originalStyle).forEach(\n ([styleKey]) => elementStyle[styleKey] = \"\"\n );\n }\n};\nconst findRealParentElement = (vDom) => {\n const isVirtualType = vDom.type === \"fragment\" || vDom.type === \"loop\";\n if (vDom.isRoot && isVirtualType) {\n return vDom.wrapElement;\n }\n if (!isVirtualType) {\n return vDom.el;\n }\n const parentVDom = getParent(vDom);\n return findRealParentElement(parentVDom);\n};\nconst makeNewWDomTree = (newWDom, originalWDom) => {\n const type = getWDomType(newWDom);\n if (!type) {\n throw new Error(\"Unknown type wdom\");\n }\n const isSameType = checkSameWDomWithOriginal[type](newWDom, originalWDom);\n const result = remakeNewWDom(newWDom, isSameType, originalWDom);\n return result;\n};\nconst remakeNewWDom = (newWDom, isSameType, originalWDom) => {\n const remakeWDom = generalize(newWDom, isSameType, originalWDom);\n remakeWDom.children = remakeChildrenForDiff(\n remakeWDom,\n isSameType,\n originalWDom\n );\n const needRerender = addReRenderTypeProperty(\n remakeWDom,\n isSameType,\n originalWDom\n );\n remakeWDom.needRerender = needRerender;\n if (needRerender !== \"A\" && originalWDom) {\n remakeWDom.el = originalWDom.el;\n }\n if (needRerender && [\"D\", \"R\", \"SR\"].includes(needRerender) && (originalWDom == null ? void 0 : originalWDom.componentKey)) {\n runUnmountQueueFromWDom(originalWDom);\n recursiveRemoveEvent(originalWDom);\n remakeWDom.oldChildren = originalWDom.children;\n }\n remakeWDom.oldProps = originalWDom == null ? void 0 : originalWDom.props;\n return remakeWDom;\n};\nconst addReRenderTypeProperty = (newWDom, isSameType, originalWDom) => {\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 = newWDom.type === \"text\" && isSameType && newWDom.text === (originalWDom == null ? void 0 : originalWDom.text);\n let result;\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 return result;\n};\nconst generalize = (newWDom, isSameType, originalWDom) => {\n if (checkCustemComponentFunction(newWDom)) {\n return isSameType && originalWDom ? reRender(originalWDom, newWDom) : newWDom.resolve();\n }\n return newWDom;\n};\nconst remakeChildrenForDiff = (newWDom, isSameType, originalWDom) => isSameType && originalWDom ? remakeChildrenForUpdate(newWDom, originalWDom) : remakeChildrenForAdd(newWDom);\nconst remakeChildrenForAdd = (newWDom) => (newWDom.children || []).map((item) => {\n const childItem = makeNewWDomTree(item);\n childItem.getParent = () => newWDom;\n return childItem;\n});\nconst remakeChildrenForUpdate = (newWDom, originalWDom) => {\n if (newWDom.type === \"loop\" && checkExisty(getKey((newWDom.children || [])[0]))) {\n return remakeChildrenForLoopUpdate(newWDom, originalWDom);\n }\n return (newWDom.children || []).map((item, index) => {\n const childItem = makeNewWDomTree(\n item,\n (originalWDom.children || [])[index]\n );\n childItem.getParent = () => newWDom;\n return childItem;\n });\n};\nconst remakeChildrenForLoopUpdate = (newWDom, originalWDom) => {\n const { remakedChildren, unUsedChildren } = diffLoopChildren(\n newWDom,\n originalWDom\n );\n unUsedChildren.map((unusedItem) => {\n const el = unusedItem.el;\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n });\n return remakedChildren;\n};\nconst diffLoopChildren = (newWDom, originalWDom) => {\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 if (originalItem) {\n originalChildren.splice(originalChildren.indexOf(originalItem), 1);\n }\n childItem.getParent = () => newWDom;\n return childItem;\n });\n return {\n remakedChildren,\n unUsedChildren: originalChildren\n };\n};\nconst findSameKeyOriginalItem = (item, originalChildren) => {\n const key = getKey(item);\n return originalChildren.find(\n (orignalChildItem) => getKey(orignalChildItem) === key\n );\n};\nconst getKey = (target) => {\n var _a, _b, _c;\n return (_c = (_a = target == null ? void 0 : target.componentProps) == null ? void 0 : _a.key) != null ? _c : (_b = target == null ? void 0 : target.props) == null ? void 0 : _b.key;\n};\nconst updateCallback = (effectAction, dependencies = () => []) => {\n const updateReqs = componentRef.get(getComponentKey()).upR;\n updateReqs.push(() => useUpdated(effectAction, dependencies));\n useUpdated(effectAction, dependencies);\n};\nconst runUpdateCallback = () => {\n var _a;\n const updateReqs = (_a = componentRef.get(getComponentKey())) == null ? void 0 : _a.upR;\n if (updateReqs == null ? void 0 : updateReqs.length) {\n updateReqs.forEach((callback) => callback());\n }\n redrawQueue.value = [];\n redrawQueueTimeout.value = null;\n};\nconst Fragment = (_props, ...children) => ({\n type: \"fragment\",\n children\n});\nconst h = (tag, props, ...children) => {\n const nodeParentPointer = { value: void 0 };\n const newProps = props || {};\n const newChildren = remakeChildren(nodeParentPointer, children);\n const node = makeNode(tag, newProps, newChildren);\n if (!checkCustemComponentFunction(node)) {\n nodeParentPointer.value = node;\n }\n return node;\n};\nconst mount = (component) => (_props, _children) => component;\nconst reRenderCustomComponent = (tag, props, children, originalWDom) => {\n var _a;\n needDiffRef.value = true;\n const newWDom = makeWDomResolver(tag, props, children);\n const newWDomTree = makeNewWDomTree(newWDom, originalWDom);\n const { isRoot, getParent: getParent2, wrapElement } = originalWDom;\n newWDomTree.getParent = getParent2;\n if (!isRoot && getParent2) {\n const brothers = ((_a = getParent2()) == null ? void 0 : _a.children) || [];\n const index = brothers.indexOf(originalWDom);\n brothers.splice(index, 1, newWDomTree);\n } else {\n newWDomTree.isRoot = true;\n newWDomTree.wrapElement = wrapElement;\n }\n needDiffRef.value = false;\n wDomUpdate(newWDomTree);\n};\nconst makeWDomResolver = (tag, props, children) => {\n const tagName = tag.name;\n const constructor = tag;\n const resolve = (componentKey = props) => {\n initMountHookState(componentKey);\n const component = tag(props, children);\n const componentMaker = component(\n componentRender(componentKey),\n props,\n children\n );\n const customNode = makeCustomNode({\n componentMaker,\n componentKey,\n tag,\n props,\n children\n });\n const originalWDom = customNode;\n setRedrawAction(\n componentKey,\n () => reRenderCustomComponent(tag, props, children, originalWDom)\n );\n getComponentSubInfo(componentKey, \"vd\").value = customNode;\n return customNode;\n };\n return { tagName, constructor, props, children, resolve };\n};\nconst makeCustomNode = (wDomInfo) => {\n const { componentMaker, props } = wDomInfo;\n const customNode = componentMaker(props);\n const reRender2 = makeReRender(wDomInfo);\n addComponentProps(customNode, { ...wDomInfo, reRender: reRender2 });\n return customNode;\n};\nconst makeReRender = (wDomInfo) => {\n const reRender2 = () => wDomMaker({ ...wDomInfo, reRender: reRender2 });\n return reRender2;\n};\nconst wDomMaker = (wDomInfo) => {\n const { componentMaker, componentKey, tag, props, children } = wDomInfo;\n initUpdateHookState(componentKey);\n runUpdateCallback();\n const originalWDom = componentMaker(props);\n setRedrawAction(\n componentKey,\n () => reRenderCustomComponent(tag, props, children, originalWDom)\n );\n addComponentProps(originalWDom, wDomInfo);\n getComponentSubInfo(componentKey, \"vd\").value = originalWDom;\n return originalWDom;\n};\nconst addComponentProps = (wDom, info) => {\n const { componentKey, tag, props, children, reRender: reRender2 } = info;\n Object.assign(wDom, {\n componentProps: props,\n componentChildren: children,\n constructor: tag,\n tagName: tag.name,\n componentKey,\n reRender: reRender2\n });\n};\nconst makeNode = (tag, props, children) => {\n if (checkFragmentFunction(tag)) {\n return Fragment(props, ...children);\n } else if (checkCustemComponentFunction(tag)) {\n const componetMakeResolver = makeWDomResolver(tag, props, children);\n return needDiffRef.value ? componetMakeResolver : componetMakeResolver.resolve();\n }\n return {\n type: \"element\",\n tag,\n props,\n children\n };\n};\nconst remakeChildren = (nodeParentPointer, children) => children.map((item) => {\n const childItem = makeChildrenItem(item);\n childItem.getParent = () => nodeParentPointer.value;\n return childItem;\n});\nconst makeChildrenItem = (item) => {\n if (item === null || item === void 0 || item === false) {\n return { type: null };\n } else if (Array.isArray(item)) {\n const nodeParentPointer = { value: void 0 };\n const children = remakeChildren(nodeParentPointer, item);\n const node = {\n type: \"loop\",\n children\n };\n nodeParentPointer.value = node;\n return node;\n } else if (typeof item === \"string\" || typeof item === \"number\") {\n return { type: \"text\", text: item };\n }\n return item;\n};\nconst ref = (initValue) => ({ value: initValue });\nexport {\n Fragment,\n h,\n mount,\n mountCallback,\n ref,\n render,\n updateCallback\n};\n//# sourceMappingURL=lithent.mjs.map\n","import { mountCallback as a, updateCallback as p } from \"lithent\";\nconst v = (r, t) => {\n let e = r;\n return {\n get value() {\n return e;\n },\n get v() {\n return e;\n },\n set value(n) {\n e = n, t();\n },\n set v(n) {\n e = n, t();\n }\n };\n}, f = (r) => {\n let t = r;\n return {\n get value() {\n return t();\n },\n get v() {\n return t();\n },\n set value(e) {\n throw new Error(\"You can't change 'computed'\");\n },\n set v(e) {\n throw new Error(\"You can't change 'computed'\");\n }\n };\n}, m = (r, t = () => {\n}, e = () => []) => {\n a(() => (r(), t)), p(() => (t && t(), r), e);\n}, l = /* @__PURE__ */ new Map(), u = {}, i = (r) => {\n const t = Symbol();\n return l.set(t, r), (e) => {\n var n;\n return (n = u[t]) != null || (u[t] = []), u[t].push(e), h(t);\n };\n}, h = (r) => new Proxy(l.get(r), {\n get(t, e) {\n return t[e];\n },\n set(t, e, n) {\n t[e] = n;\n const s = u[r], c = [];\n return s.forEach((o) => {\n o() || c.push(o);\n }), c.forEach(\n (o) => s.splice(s.indexOf(o), 1)\n ), !0;\n }\n});\nexport {\n f as computed,\n m as effect,\n v as state,\n i as store\n};\n//# sourceMappingURL=lithentHelper.mjs.map\n","// example.jsx\nimport {\n h,\n Fragment,\n render,\n ref,\n mountCallback,\n updateCallback,\n mount,\n} from 'lithent';\nimport { state, computed, effect, store } from 'lithent-helper';\n\n// This is the \"mount\" function.\n// This function is only executed on mount, and on update, only updates `props` and then executes the internal return function.\n// childen is passed as the second argument.\nconst ChildComponent = mount<{ parentValue: number }>(\n (renew, props, children) => {\n // The value is used as a \"getter\" to make it easy to get and write to in the higher-order functions it returns\n const count = state<number>(1, renew);\n const text = state<string>(\n '\"destructuring\" the \"props\" value directly from the mount function will cause referencing issues, so if you want to use it, you need to \"destructuring\" it from the internal function (updater).',\n renew\n );\n const getParentValue = () => props.parentValue;\n const parentValueFromMount = props.parentValue;\n const summ = computed<number>(\n () => count.v + notRefValue + props.parentValue\n );\n\n const localStore = store<{ text: string; count: number }>({\n text: 's',\n count: 0,\n })(renew);\n /*\n // To share a store, make it externally and use `asign`.\n const asignStore = store<{ text: string; count: number }>({ text: 's', count: 0 });\n\n const sharedStore = asignStore(nenew);\n */\n\n // Even if you don't use a ref, the private value is always maintained as a regular variable.\n let notRefValue = props.parentValue;\n\n // Ref is only used to reference the DOM.\n const domRef = ref(null);\n\n const increase = () => {\n count.v = count.v + 1;\n notRefValue += 1;\n };\n\n const handleInputChane = (event: InputEvent) => {\n text.v = (event.target as HTMLInputElement).value;\n };\n\n const localStoreUpdate = () => {\n localStore.count += 1;\n localStore.text += '1';\n };\n\n const handleMounted = () => {\n console.log('MOUNTED', domRef);\n\n return () => console.log('UNMOUNT');\n };\n const handleUpdated = () => {\n console.log('UPDATE - parentValue');\n\n return () => console.log('UPDATED');\n };\n\n mountCallback(handleMounted);\n updateCallback(handleUpdated, () => [props.parentValue]); // Only Defs Updated (using a closure to update a value)\n\n // Behaves like `react`'s `useEffect`\n effect(\n () => console.log('INJECT'),\n () => console.log('CLEAN_UP'),\n () => [count.v]\n );\n\n // Wrap in a function and return (using a closure to hold the value)\n // This is the \"update\" function.\n return ({ parentValue }) => (\n <Fragment>\n {/* Note that the event is onInput (we use the native event name to avoid confusion). */}\n <div>\n <textarea\n value={text.v}\n onInput={handleInputChane}\n style={{ width: '300px', height: '100px' }}\n />\n </div>\n <div>{text.v}</div>\n <div>\n <div style={{ color: 'blue' }}>\n parentValueFromRef: {props.parentValue} (working)\n </div>\n <div style={{ color: 'blue' }}>\n parentValueFromFunction: {getParentValue()} (working)\n </div>\n <div style={{ color: 'blue' }}>\n parentValueFromUpdaterDestructuring: {parentValue} (working)\n </div>\n <div style={{ color: 'red' }}>\n parentValueFromMounterDestructuring: {parentValueFromMount} (not\n working)\n </div>\n </div>\n <div>\n <div ref={domRef}>count: {count.v}</div>\n <div>sum: {count.v + notRefValue + props.parentValue}</div>\n <div>sum(computed): {summ.v}</div>\n {/* It doesn't pull it out from under the reference, it uses the value directly, so you can just use it. */}\n <div>notRefValue: {notRefValue}</div>\n <div>localStore(text): {localStore.text}</div>\n <div>localStore(count): {localStore.count}</div>\n </div>\n <button onClick={increase}>Increase</button>\n <button onClick={localStoreUpdate}>localStoreUpdate</button>\n {children}\n </Fragment>\n );\n }\n);\n\nconst Root = mount(renew => {\n const parentNumber = state<number>(7, renew);\n\n const increaseParent = () => {\n parentNumber.v = parentNumber.v + 1;\n };\n\n const decreaseParent = () => {\n parentNumber.v = parentNumber.v - 1;\n };\n\n return () => (\n <Fragment>\n <ChildComponent parentValue={parentNumber.v}>\n <button onClick={increaseParent}>Increase - Parent</button>\n </ChildComponent>\n <button onClick={decreaseParent}>Decrease - Parent</button>\n </Fragment>\n );\n});\nconst root = <Root />;\n\nrender(root, document.getElementById('root'));\n"],"names":["relList","link","processPreload","mutations","mutation","node","getFetchOpts","script","fetchOpts","checkCustemComponentFunction","target","checkFragmentFunction","Fragment","checkPlainWDomType","wDom","checkPlainType","typeName","checkEmptyElement","checkSameCustomComponent","newWDom","originalWDom","checkSameFragment","_a","_b","checkSameTagElement","checkNormalTypeElement","checkExisty","value","checkStyleData","dataKey","dataValue","checkRefData","checkOptionElement","element","checkTextareaElement","checkNormalAttribute","getWDomType","result","checkSameWDomWithOriginal","getParent","vDom","parentVDom","reRender","infoVdom","props","children","infoProps","infoChidren","updateProps$1","updateChildren","newVDom","key","childrenItem","componentKeyRef","needDiffRef","componentRef","redrawQueue","redrawQueueTimeout","componentRender","componentKey","up","setComponetRef","getComponentKey","getComponentSubInfo","subKey","setRedrawAction","exec","execRedrawQueue","initUpdateHookState","initMountHookState","recursiveGetChildKeys","item","childComKey","childItemList","childVd","addedKey","acc","action","unmount","effectAction","runUnmountQueueFromWDom","removeItem","recursiveRunUnmount","subInfo","effect","mountCallback","runMountedQueueFromWDom","component","queue","sequence","callback","useUpdated","dependencies","upD","upS","def","checkNeedPushQueue","runUpdatedQueueFromWDom","originalDefs","newDefs","index","render","wrapElement","afterElement","Dom","wDomToDom","wDomUpdate","newWDomTree","needRerender","typeAdd","typeDelete","typeReplace","typeUpdate","typeSortedReplace","typeSortedUpdate","recursiveRemoveEvent","removeEvent","childItem","parentWDom","parent","findRealParentElement","findChildWithRemoveElement","newElement","parentEl","nextEl","startFindNextBrotherElement","brothers","nextIndex","candidiateBrothers","finedNextEl","findChildFragmentNextElement","parentType","targetEl","bItem","type","el","isFragment","orignalElement","parentElement","oldProps","updateText","updateProps","originalProps","style","oldStyle","updateStyle","updateEvent","init","tag","text","wDomChildrenToDom","elementChildren","eventKey","newEventHandler","oldEventHandler","eventName","_match","p1","originalStyle","elementStyle","styleKey","isVirtualType","makeNewWDomTree","isSameType","remakeNewWDom","remakeWDom","generalize","remakeChildrenForDiff","addReRenderTypeProperty","existOriginalWDom","isEmptyElement","getKey","isKeyCheckedWDom","isSameText","remakeChildrenForUpdate","remakeChildrenForAdd","remakeChildrenForLoopUpdate","remakedChildren","unUsedChildren","diffLoopChildren","unusedItem","newChildren","originalChildren","originalItem","findSameKeyOriginalItem","orignalChildItem","_c","updateCallback","runUpdateCallback","updateReqs","_props","h","nodeParentPointer","newProps","remakeChildren","makeNode","mount","_children","reRenderCustomComponent","makeWDomResolver","isRoot","getParent2","componentMaker","customNode","makeCustomNode","wDomInfo","reRender2","makeReRender","addComponentProps","wDomMaker","info","componetMakeResolver","makeChildrenItem","ref","initValue","v","r","e","n","f","m","a","p","l","u","i","s","o","ChildComponent","renew","count","state","getParentValue","parentValueFromMount","summ","computed","notRefValue","localStore","store","domRef","increase","handleInputChane","event","localStoreUpdate","handleMounted","handleUpdated","parentValue","Root","parentNumber","increaseParent","decreaseParent","root"],"mappings":"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"}
|