@domql/element 2.5.198 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/__tests__/checkIfOnUpdate.test.js +103 -0
- package/__tests__/children.test.js +213 -0
- package/__tests__/define.test.js +75 -0
- package/__tests__/inheritStateUpdates.test.js +79 -0
- package/__tests__/renderElement.test.js +131 -0
- package/__tests__/resetElement.test.js +44 -0
- package/__tests__/set.test.js +316 -0
- package/__tests__/throughExecProps.test.js +86 -0
- package/__tests__/throughInitialDefine.test.js +104 -0
- package/__tests__/throughInitialExec.test.js +92 -0
- package/__tests__/throughUpdatedDefine.test.js +92 -0
- package/__tests__/throughUpdatedExec.test.js +110 -0
- package/__tests__/tree.test.js +15 -0
- package/__tests__/update.test.js +253 -0
- package/children.js +105 -0
- package/create.js +125 -255
- package/dist/cjs/__tests__/checkIfOnUpdate.test.js +73 -0
- package/dist/cjs/__tests__/children.test.js +177 -0
- package/dist/cjs/__tests__/define.test.js +75 -0
- package/dist/cjs/__tests__/inheritStateUpdates.test.js +62 -0
- package/dist/cjs/__tests__/renderElement.test.js +138 -0
- package/dist/cjs/__tests__/resetElement.test.js +35 -0
- package/dist/cjs/__tests__/set.test.js +256 -0
- package/dist/cjs/__tests__/throughExecProps.test.js +62 -0
- package/dist/cjs/__tests__/throughInitialDefine.test.js +79 -0
- package/dist/cjs/__tests__/throughInitialExec.test.js +73 -0
- package/dist/cjs/__tests__/throughUpdatedDefine.test.js +69 -0
- package/dist/cjs/__tests__/throughUpdatedExec.test.js +84 -0
- package/dist/cjs/__tests__/tree.test.js +11 -0
- package/dist/cjs/__tests__/update.test.js +219 -0
- package/dist/cjs/children.js +87 -0
- package/dist/cjs/create.js +74 -215
- package/dist/cjs/define.js +1 -2
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/iterate.js +37 -30
- package/dist/cjs/methods/set.js +26 -25
- package/dist/cjs/methods/v2.js +7 -17
- package/dist/cjs/mixins/attr.js +7 -10
- package/dist/cjs/mixins/classList.js +8 -16
- package/dist/cjs/mixins/data.js +2 -4
- package/dist/cjs/mixins/html.js +2 -4
- package/dist/cjs/mixins/index.js +0 -4
- package/dist/cjs/mixins/registry.js +7 -67
- package/dist/cjs/mixins/scope.js +2 -3
- package/dist/cjs/mixins/state.js +4 -7
- package/dist/cjs/mixins/style.js +2 -4
- package/dist/cjs/mixins/text.js +5 -8
- package/dist/cjs/node.js +34 -30
- package/dist/cjs/set.js +112 -47
- package/dist/cjs/update.js +123 -92
- package/dist/cjs/utils/applyParam.js +3 -4
- package/dist/cjs/utils/index.js +8 -4
- package/dist/cjs/utils/onlyResolveExtends.js +14 -30
- package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
- package/dist/esm/__tests__/children.test.js +177 -0
- package/dist/esm/__tests__/define.test.js +53 -0
- package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
- package/dist/esm/__tests__/renderElement.test.js +116 -0
- package/dist/esm/__tests__/resetElement.test.js +35 -0
- package/dist/esm/__tests__/set.test.js +256 -0
- package/dist/esm/__tests__/throughExecProps.test.js +62 -0
- package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
- package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
- package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
- package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
- package/dist/esm/__tests__/tree.test.js +11 -0
- package/dist/esm/__tests__/update.test.js +219 -0
- package/dist/esm/children.js +81 -0
- package/dist/esm/create.js +79 -226
- package/dist/esm/define.js +1 -2
- package/dist/esm/iterate.js +41 -33
- package/dist/esm/methods/set.js +5 -4
- package/dist/esm/methods/v2.js +7 -17
- package/dist/esm/mixins/attr.js +8 -11
- package/dist/esm/mixins/classList.js +8 -16
- package/dist/esm/mixins/data.js +3 -5
- package/dist/esm/mixins/html.js +2 -4
- package/dist/esm/mixins/index.js +0 -4
- package/dist/esm/mixins/registry.js +7 -67
- package/dist/esm/mixins/scope.js +2 -3
- package/dist/esm/mixins/state.js +5 -8
- package/dist/esm/mixins/style.js +2 -4
- package/dist/esm/mixins/text.js +6 -12
- package/dist/esm/node.js +25 -31
- package/dist/esm/set.js +112 -47
- package/dist/esm/update.js +127 -97
- package/dist/esm/utils/applyParam.js +3 -4
- package/dist/esm/utils/index.js +4 -3
- package/dist/esm/utils/onlyResolveExtends.js +22 -31
- package/iterate.js +44 -26
- package/methods/set.js +5 -4
- package/methods/v2.js +5 -4
- package/mixins/attr.js +13 -7
- package/mixins/classList.js +7 -2
- package/mixins/data.js +1 -1
- package/mixins/index.js +1 -6
- package/mixins/registry.js +6 -53
- package/mixins/scope.js +1 -1
- package/mixins/state.js +4 -5
- package/mixins/text.js +4 -7
- package/node.js +31 -28
- package/package.json +7 -6
- package/set.js +129 -41
- package/update.js +169 -89
- package/utils/applyParam.js +7 -4
- package/utils/index.js +1 -3
- package/utils/onlyResolveExtends.js +27 -16
- package/cache/index.js +0 -3
- package/cache/options.js +0 -4
- package/dist/cjs/cache/index.js +0 -24
- package/dist/cjs/cache/options.js +0 -26
- package/dist/cjs/extend.js +0 -85
- package/dist/cjs/methods/index.js +0 -353
- package/dist/cjs/mixins/content.js +0 -74
- package/dist/cjs/props/create.js +0 -98
- package/dist/cjs/props/ignore.js +0 -24
- package/dist/cjs/props/index.js +0 -21
- package/dist/cjs/props/inherit.js +0 -53
- package/dist/cjs/props/update.js +0 -37
- package/dist/cjs/utils/component.js +0 -77
- package/dist/cjs/utils/extendUtils.js +0 -142
- package/dist/cjs/utils/object.js +0 -179
- package/dist/cjs/utils/propEvents.js +0 -41
- package/dist/esm/cache/index.js +0 -4
- package/dist/esm/cache/options.js +0 -6
- package/dist/esm/extend.js +0 -71
- package/dist/esm/methods/index.js +0 -333
- package/dist/esm/mixins/content.js +0 -54
- package/dist/esm/props/create.js +0 -78
- package/dist/esm/props/ignore.js +0 -4
- package/dist/esm/props/index.js +0 -4
- package/dist/esm/props/inherit.js +0 -33
- package/dist/esm/props/update.js +0 -17
- package/dist/esm/utils/component.js +0 -65
- package/dist/esm/utils/extendUtils.js +0 -122
- package/dist/esm/utils/object.js +0 -159
- package/dist/esm/utils/propEvents.js +0 -21
- package/extend.js +0 -90
- package/methods/index.js +0 -317
- package/mixins/content.js +0 -55
- package/props/create.js +0 -87
- package/props/ignore.js +0 -3
- package/props/index.js +0 -6
- package/props/inherit.js +0 -35
- package/props/update.js +0 -17
- package/utils/component.js +0 -68
- package/utils/extendUtils.js +0 -134
- package/utils/object.js +0 -172
- package/utils/propEvents.js +0 -19
package/dist/esm/set.js
CHANGED
|
@@ -1,79 +1,144 @@
|
|
|
1
|
-
import { deepContains,
|
|
2
|
-
import { OPTIONS } from "./cache/options.js";
|
|
1
|
+
import { deepContains, execPromise, isFunction, OPTIONS } from "@domql/utils";
|
|
3
2
|
import { create } from "./create.js";
|
|
4
|
-
import { registry } from "./mixins/index.js";
|
|
5
|
-
import { removeContent } from "./mixins/content.js";
|
|
6
3
|
import { triggerEventOn, triggerEventOnUpdate } from "@domql/event";
|
|
7
|
-
const
|
|
8
|
-
if (!options.preventRemove)
|
|
9
|
-
removeContent(element, options);
|
|
4
|
+
const setContentKey = (element, opts = {}) => {
|
|
10
5
|
const { __ref: ref } = element;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
6
|
+
const contentElementKey = opts.contentElementKey;
|
|
7
|
+
if (!ref.contentElementKey || contentElementKey !== ref.contentElementKey) {
|
|
8
|
+
ref.contentElementKey = contentElementKey || "content";
|
|
9
|
+
}
|
|
10
|
+
return ref.contentElementKey;
|
|
17
11
|
};
|
|
18
|
-
const reset = (options) => {
|
|
12
|
+
const reset = async (options) => {
|
|
19
13
|
const element = void 0;
|
|
20
|
-
create(element, element.parent, void 0, {
|
|
21
|
-
|
|
22
|
-
...
|
|
14
|
+
await create(element, element.parent, void 0, {
|
|
15
|
+
ignoreChildExtends: true,
|
|
16
|
+
...OPTIONS.defaultOptions,
|
|
23
17
|
...OPTIONS.create,
|
|
24
18
|
...options
|
|
25
19
|
});
|
|
26
20
|
};
|
|
21
|
+
const resetContent = async (params, element, opts) => {
|
|
22
|
+
var _a;
|
|
23
|
+
const contentElementKey = setContentKey(element, opts);
|
|
24
|
+
if ((_a = element[contentElementKey]) == null ? void 0 : _a.node) removeContent(element, opts);
|
|
25
|
+
const contentElem = await create(
|
|
26
|
+
params,
|
|
27
|
+
element,
|
|
28
|
+
contentElementKey || "content",
|
|
29
|
+
{
|
|
30
|
+
ignoreChildExtends: true,
|
|
31
|
+
...OPTIONS.defaultOptions,
|
|
32
|
+
...OPTIONS.create,
|
|
33
|
+
...opts
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
if (contentElementKey !== "content") opts.contentElementKey = "content";
|
|
37
|
+
return contentElem;
|
|
38
|
+
};
|
|
39
|
+
const updateContent = async function(params, opts) {
|
|
40
|
+
const element = this;
|
|
41
|
+
const contentElementKey = setContentKey(element, opts);
|
|
42
|
+
if (!element[contentElementKey]) return;
|
|
43
|
+
if (element[contentElementKey].update) {
|
|
44
|
+
await element[contentElementKey].update(params, opts);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
async function setContent(param, element, opts) {
|
|
48
|
+
const content = await execPromise(param, element);
|
|
49
|
+
if (content && element) {
|
|
50
|
+
set.call(element, content, opts);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const removeContent = function(el, opts = {}) {
|
|
54
|
+
var _a;
|
|
55
|
+
const element = el || this;
|
|
56
|
+
const contentElementKey = setContentKey(element, opts);
|
|
57
|
+
if (opts.contentElementKey !== "content") {
|
|
58
|
+
opts.contentElementKey = "content";
|
|
59
|
+
}
|
|
60
|
+
const content = element[contentElementKey];
|
|
61
|
+
if (!content) return;
|
|
62
|
+
if (content.tag === "fragment" && ((_a = content.__ref) == null ? void 0 : _a.__children)) {
|
|
63
|
+
content.__ref.__children.forEach((key) => {
|
|
64
|
+
const child = content[key];
|
|
65
|
+
if (child.node && child.node.parentNode) {
|
|
66
|
+
child.node.parentNode.removeChild(child.node);
|
|
67
|
+
}
|
|
68
|
+
if (isFunction(child.remove)) {
|
|
69
|
+
child.remove();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
if (content.node && content.node.parentNode) {
|
|
74
|
+
content.node.parentNode.removeChild(content.node);
|
|
75
|
+
}
|
|
76
|
+
if (isFunction(content.remove)) {
|
|
77
|
+
content.remove();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
delete element[contentElementKey];
|
|
81
|
+
};
|
|
27
82
|
const set = async function(params, options = {}, el) {
|
|
28
83
|
var _a;
|
|
29
84
|
const element = el || this;
|
|
30
85
|
const { __ref: ref } = element;
|
|
31
|
-
const
|
|
86
|
+
const contentElementKey = setContentKey(element, options);
|
|
87
|
+
const content = element[contentElementKey];
|
|
32
88
|
const __contentRef = content && content.__ref;
|
|
33
89
|
const lazyLoad = element.props && element.props.lazyLoad;
|
|
34
|
-
const
|
|
35
|
-
if (options.preventContentUpdate === true && !
|
|
36
|
-
|
|
37
|
-
|
|
90
|
+
const hasChildren = element.children;
|
|
91
|
+
if (options.preventContentUpdate === true && !hasChildren) return;
|
|
92
|
+
const childHasChanged = !ref.__noChildrenDifference;
|
|
93
|
+
const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && deepContains(params, content);
|
|
94
|
+
if ((content == null ? void 0 : content.update) && !childHasChanged && !childrenIsDifferentFromCache) {
|
|
38
95
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
39
|
-
const beforeUpdateReturns = await triggerEventOnUpdate(
|
|
40
|
-
|
|
41
|
-
|
|
96
|
+
const beforeUpdateReturns = await triggerEventOnUpdate(
|
|
97
|
+
"beforeUpdate",
|
|
98
|
+
params,
|
|
99
|
+
element,
|
|
100
|
+
options
|
|
101
|
+
);
|
|
102
|
+
if (beforeUpdateReturns === false) return element;
|
|
42
103
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (!options.preventUpdateListener)
|
|
104
|
+
await content.update(params);
|
|
105
|
+
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
46
106
|
await triggerEventOn("update", element, options);
|
|
107
|
+
}
|
|
47
108
|
return;
|
|
48
109
|
}
|
|
49
|
-
if (params)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!
|
|
54
|
-
params.
|
|
55
|
-
props.
|
|
110
|
+
if (!params) return element;
|
|
111
|
+
let { childExtends, props, tag } = params;
|
|
112
|
+
if (!props) props = params.props = {};
|
|
113
|
+
if (tag === "fragment") {
|
|
114
|
+
if (!childExtends && element.childExtends) {
|
|
115
|
+
params.childExtends = element.childExtends;
|
|
116
|
+
props.ignoreChildExtends = true;
|
|
56
117
|
}
|
|
57
118
|
if (!(props == null ? void 0 : props.childProps) && ((_a = element.props) == null ? void 0 : _a.childProps)) {
|
|
58
119
|
props.childProps = element.props.childProps;
|
|
59
120
|
props.ignoreChildProps = true;
|
|
60
121
|
}
|
|
61
|
-
if (lazyLoad) {
|
|
62
|
-
window.requestAnimationFrame(async () => {
|
|
63
|
-
await resetElement(params, element, options);
|
|
64
|
-
if (!options.preventUpdateListener) {
|
|
65
|
-
triggerEventOn("lazyLoad", element, options);
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
} else
|
|
69
|
-
await resetElement(params, element, options);
|
|
70
122
|
}
|
|
71
|
-
|
|
123
|
+
if (lazyLoad) {
|
|
124
|
+
window.requestAnimationFrame(async () => {
|
|
125
|
+
await resetContent(params, element, options);
|
|
126
|
+
if (!options.preventUpdateListener) {
|
|
127
|
+
await triggerEventOn("lazyLoad", element, options);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
} else {
|
|
131
|
+
await resetContent(params, element, options);
|
|
132
|
+
}
|
|
72
133
|
};
|
|
73
134
|
var set_default = set;
|
|
74
135
|
export {
|
|
75
136
|
set_default as default,
|
|
137
|
+
removeContent,
|
|
76
138
|
reset,
|
|
77
|
-
|
|
78
|
-
set
|
|
139
|
+
resetContent,
|
|
140
|
+
set,
|
|
141
|
+
setContent,
|
|
142
|
+
setContentKey,
|
|
143
|
+
updateContent
|
|
79
144
|
};
|
package/dist/esm/update.js
CHANGED
|
@@ -8,81 +8,92 @@ import {
|
|
|
8
8
|
isString,
|
|
9
9
|
isUndefined,
|
|
10
10
|
merge,
|
|
11
|
-
isVariant,
|
|
12
11
|
overwriteDeep,
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
deepClone,
|
|
13
|
+
propertizeElement,
|
|
14
|
+
isMethod,
|
|
15
|
+
findInheritedState,
|
|
16
|
+
deepMerge,
|
|
17
|
+
OPTIONS,
|
|
18
|
+
updateProps,
|
|
19
|
+
captureSnapshot
|
|
15
20
|
} from "@domql/utils";
|
|
16
21
|
import { applyEvent, triggerEventOn, triggerEventOnUpdate } from "@domql/event";
|
|
17
|
-
import {
|
|
18
|
-
import { updateProps } from "./props/index.js";
|
|
19
|
-
import { createState, findInheritedState } from "@domql/state";
|
|
22
|
+
import { createState } from "@domql/state";
|
|
20
23
|
import { create } from "./create.js";
|
|
21
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
throughExecProps,
|
|
26
|
+
throughUpdatedDefine,
|
|
27
|
+
throughUpdatedExec
|
|
28
|
+
} from "./iterate.js";
|
|
22
29
|
import { REGISTRY } from "./mixins/index.js";
|
|
23
30
|
import { applyParam } from "./utils/applyParam.js";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
snapshotId: createSnapshotId
|
|
28
|
-
};
|
|
31
|
+
import { METHODS_EXL } from "./utils/index.js";
|
|
32
|
+
import { setContent } from "./set.js";
|
|
33
|
+
import setChildren from "./children.js";
|
|
29
34
|
const UPDATE_DEFAULT_OPTIONS = {
|
|
30
35
|
stackChanges: false,
|
|
31
36
|
cleanExec: true,
|
|
32
37
|
preventRecursive: false,
|
|
33
38
|
currentSnapshot: false,
|
|
34
39
|
calleeElement: false,
|
|
35
|
-
|
|
40
|
+
exclude: METHODS_EXL
|
|
36
41
|
};
|
|
37
42
|
const update = async function(params = {}, opts) {
|
|
38
43
|
const calleeElementCache = opts == null ? void 0 : opts.calleeElement;
|
|
39
|
-
const options = deepClone(
|
|
44
|
+
const options = deepClone(
|
|
45
|
+
isObject(opts) ? deepMerge(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS,
|
|
46
|
+
{ exclude: ["calleeElement"] }
|
|
47
|
+
);
|
|
40
48
|
options.calleeElement = calleeElementCache;
|
|
41
49
|
const element = this;
|
|
42
|
-
const { parent, node, key } = element;
|
|
43
|
-
const { excludes, preventInheritAtCurrentState } = options;
|
|
44
50
|
let ref = element.__ref;
|
|
45
|
-
if (!ref)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (
|
|
51
|
+
if (!ref) ref = element.__ref = {};
|
|
52
|
+
const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = captureSnapshot(
|
|
53
|
+
element,
|
|
54
|
+
options
|
|
55
|
+
);
|
|
56
|
+
if (snapshotHasUpdated) return;
|
|
57
|
+
if (!options.preventListeners) {
|
|
51
58
|
await triggerEventOnUpdate("startUpdate", params, element, options);
|
|
52
|
-
|
|
59
|
+
}
|
|
60
|
+
const { parent, node, key } = element;
|
|
61
|
+
const { exclude, preventInheritAtCurrentState } = options;
|
|
62
|
+
if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element) {
|
|
53
63
|
return;
|
|
54
|
-
|
|
55
|
-
|
|
64
|
+
}
|
|
65
|
+
if (!exclude) merge(options, UPDATE_DEFAULT_OPTIONS);
|
|
56
66
|
if (isString(params) || isNumber(params)) {
|
|
57
67
|
params = { text: params };
|
|
58
68
|
}
|
|
69
|
+
params = propertizeElement(params);
|
|
59
70
|
const inheritState = await inheritStateUpdates(element, options);
|
|
60
|
-
if (inheritState === false)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (ifFails)
|
|
64
|
-
return;
|
|
71
|
+
if (inheritState === false) return;
|
|
72
|
+
const ifFails = await checkIfOnUpdate(element, parent, options);
|
|
73
|
+
if (ifFails) return;
|
|
65
74
|
if (ref.__if && !options.preventPropsUpdate) {
|
|
66
75
|
const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
|
|
67
|
-
const hasFunctionInProps = ref.
|
|
76
|
+
const hasFunctionInProps = ref.__propsStack.filter((v) => isFunction(v));
|
|
68
77
|
const props = params.props || hasParentProps || hasFunctionInProps.length;
|
|
69
|
-
if (props)
|
|
70
|
-
updateProps(props, element, parent);
|
|
78
|
+
if (props) updateProps(props, element, parent);
|
|
71
79
|
}
|
|
72
80
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
73
|
-
const beforeUpdateReturns = await triggerEventOnUpdate(
|
|
74
|
-
|
|
75
|
-
|
|
81
|
+
const beforeUpdateReturns = await triggerEventOnUpdate(
|
|
82
|
+
"beforeUpdate",
|
|
83
|
+
params,
|
|
84
|
+
element,
|
|
85
|
+
options
|
|
86
|
+
);
|
|
87
|
+
if (beforeUpdateReturns === false) return element;
|
|
76
88
|
}
|
|
77
|
-
overwriteDeep(element, params
|
|
89
|
+
overwriteDeep(element, params);
|
|
78
90
|
throughExecProps(element);
|
|
79
91
|
throughUpdatedExec(element, { ignore: UPDATE_DEFAULT_OPTIONS });
|
|
80
92
|
throughUpdatedDefine(element);
|
|
81
93
|
if (!options.isForced && !options.preventListeners) {
|
|
82
|
-
triggerEventOn("beforeClassAssign", element, options);
|
|
94
|
+
await triggerEventOn("beforeClassAssign", element, options);
|
|
83
95
|
}
|
|
84
|
-
if (!ref.__if)
|
|
85
|
-
return false;
|
|
96
|
+
if (!ref.__if) return false;
|
|
86
97
|
if (!node) {
|
|
87
98
|
return;
|
|
88
99
|
}
|
|
@@ -97,78 +108,75 @@ const update = async function(params = {}, opts) {
|
|
|
97
108
|
preventUpdateAfterCount
|
|
98
109
|
} = options;
|
|
99
110
|
if (preventUpdateAfter) {
|
|
100
|
-
if (isNumber(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount)
|
|
111
|
+
if (isNumber(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount) {
|
|
101
112
|
return;
|
|
102
|
-
else if (options.preventUpdateAfterCount === void 0)
|
|
113
|
+
} else if (options.preventUpdateAfterCount === void 0) {
|
|
103
114
|
options.preventUpdateAfterCount = 1;
|
|
104
|
-
else
|
|
105
|
-
options.preventUpdateAfterCount++;
|
|
115
|
+
} else options.preventUpdateAfterCount++;
|
|
106
116
|
}
|
|
107
117
|
for (const param in element) {
|
|
108
118
|
const prop = element[param];
|
|
109
|
-
if (!Object.hasOwnProperty.call(element, param))
|
|
110
|
-
continue;
|
|
119
|
+
if (!Object.hasOwnProperty.call(element, param)) continue;
|
|
111
120
|
const isInPreventUpdate = isArray(preventUpdate) && preventUpdate.includes(param);
|
|
112
121
|
const isInPreventDefineUpdate = isArray(preventDefineUpdate) && preventDefineUpdate.includes(param);
|
|
113
|
-
|
|
114
|
-
if (isUndefined(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || preventContentUpdate && param === "content" && !hasCollection || (preventStateUpdate && param) === "state" || isMethod(param, element) || isObject(REGISTRY[param]) || isVariant(param))
|
|
122
|
+
if (isUndefined(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || (preventStateUpdate && param) === "state" || isMethod(param, element) || isObject(REGISTRY[param])) {
|
|
115
123
|
continue;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const isElement = applyParam(param, element, options);
|
|
124
|
+
}
|
|
125
|
+
if (preventStateUpdate === "once") options.preventStateUpdate = false;
|
|
126
|
+
const isElement = await applyParam(param, element, options);
|
|
119
127
|
if (isElement) {
|
|
120
128
|
const { hasDefine, hasContextDefine } = isElement;
|
|
121
129
|
const canUpdate = isObject(prop) && !hasDefine && !hasContextDefine && !preventRecursive;
|
|
122
|
-
if (!canUpdate)
|
|
123
|
-
continue;
|
|
130
|
+
if (!canUpdate) continue;
|
|
124
131
|
const lazyLoad = element.props.lazyLoad || options.lazyLoad;
|
|
125
132
|
if (options.onEachUpdate) {
|
|
126
133
|
options.onEachUpdate(param, element, element.state, element.context);
|
|
127
134
|
}
|
|
128
|
-
const childUpdateCall = () => update.call(prop, params[prop], {
|
|
135
|
+
const childUpdateCall = async () => await update.call(prop, params[prop], {
|
|
129
136
|
...options,
|
|
130
137
|
currentSnapshot: snapshotOnCallee,
|
|
131
138
|
calleeElement
|
|
132
139
|
});
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
140
|
+
if (lazyLoad) {
|
|
141
|
+
window.requestAnimationFrame(async () => {
|
|
142
|
+
await childUpdateCall();
|
|
143
|
+
if (!options.preventUpdateListener) {
|
|
144
|
+
await triggerEventOn("lazyLoad", element, options);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
} else await childUpdateCall();
|
|
139
148
|
}
|
|
140
149
|
}
|
|
141
|
-
if (!
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const isCallee = calleeElement === element;
|
|
148
|
-
if (!calleeElement || isCallee) {
|
|
149
|
-
const createdStanpshot = snapshot.snapshotId();
|
|
150
|
-
ref.__currentSnapshot = createdStanpshot;
|
|
151
|
-
return [createdStanpshot, element];
|
|
150
|
+
if (!preventContentUpdate) {
|
|
151
|
+
const children = params.children || element.children;
|
|
152
|
+
const content = children ? await setChildren(children, element, opts) : element.children || params.content;
|
|
153
|
+
if (content) {
|
|
154
|
+
await setContent(content, element, options);
|
|
155
|
+
}
|
|
152
156
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return [snapshotOnCallee, calleeElement, true];
|
|
157
|
+
if (!preventUpdateListener) {
|
|
158
|
+
await triggerEventOn("update", element, options);
|
|
156
159
|
}
|
|
157
|
-
return [snapshotOnCallee, calleeElement];
|
|
158
160
|
};
|
|
159
|
-
const checkIfOnUpdate = (element, parent, options) => {
|
|
161
|
+
const checkIfOnUpdate = async (element, parent, options) => {
|
|
160
162
|
var _a, _b, _c;
|
|
161
|
-
if (!isFunction(element.if) && !isFunction((_a = element.props) == null ? void 0 : _a.if) || !parent)
|
|
163
|
+
if (!isFunction(element.if) && !isFunction((_a = element.props) == null ? void 0 : _a.if) || !parent) {
|
|
162
164
|
return;
|
|
165
|
+
}
|
|
163
166
|
const ref = element.__ref;
|
|
164
|
-
const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
|
|
167
|
+
const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
|
|
168
|
+
element,
|
|
169
|
+
element.state,
|
|
170
|
+
element.context,
|
|
171
|
+
options
|
|
172
|
+
);
|
|
165
173
|
const itWasFalse = ref.__if !== true;
|
|
166
174
|
if (ifPassed) {
|
|
167
175
|
ref.__if = true;
|
|
168
176
|
if (itWasFalse) {
|
|
169
177
|
delete element.__hash;
|
|
170
178
|
delete element.__text;
|
|
171
|
-
delete element.
|
|
179
|
+
delete element.extends;
|
|
172
180
|
if (!ref.__hasRootState) {
|
|
173
181
|
delete element.state;
|
|
174
182
|
}
|
|
@@ -182,10 +190,11 @@ const checkIfOnUpdate = (element, parent, options) => {
|
|
|
182
190
|
delete element.node;
|
|
183
191
|
}
|
|
184
192
|
const contentKey = ref.contentElementKey;
|
|
185
|
-
if (element
|
|
193
|
+
if (element.children) {
|
|
186
194
|
element.removeContent();
|
|
187
|
-
} else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep)
|
|
195
|
+
} else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep) {
|
|
188
196
|
element[contentKey] = element[contentKey].parseDeep();
|
|
197
|
+
}
|
|
189
198
|
const previousElement = element.previousElement();
|
|
190
199
|
const previousNode = previousElement == null ? void 0 : previousElement.node;
|
|
191
200
|
const hasPrevious = previousNode == null ? void 0 : previousNode.parentNode;
|
|
@@ -198,9 +207,19 @@ const checkIfOnUpdate = (element, parent, options) => {
|
|
|
198
207
|
};
|
|
199
208
|
delete element.__ref;
|
|
200
209
|
delete element.parent;
|
|
201
|
-
const createdElement = create(
|
|
210
|
+
const createdElement = await create(
|
|
211
|
+
element,
|
|
212
|
+
parent,
|
|
213
|
+
element.key,
|
|
214
|
+
OPTIONS.create,
|
|
215
|
+
attachOptions
|
|
216
|
+
);
|
|
202
217
|
if (options.preventUpdate !== true && element.on && isFunction(element.on.update)) {
|
|
203
|
-
applyEvent(
|
|
218
|
+
await applyEvent(
|
|
219
|
+
element.on.update,
|
|
220
|
+
createdElement,
|
|
221
|
+
createdElement.state
|
|
222
|
+
);
|
|
204
223
|
}
|
|
205
224
|
return createdElement;
|
|
206
225
|
}
|
|
@@ -214,8 +233,7 @@ const inheritStateUpdates = async (element, options) => {
|
|
|
214
233
|
const stateKey = ref.__state;
|
|
215
234
|
const { parent, state } = element;
|
|
216
235
|
const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } = options;
|
|
217
|
-
if (preventUpdateTriggerStateUpdate)
|
|
218
|
-
return;
|
|
236
|
+
if (preventUpdateTriggerStateUpdate) return;
|
|
219
237
|
if (!stateKey && !ref.__hasRootState) {
|
|
220
238
|
element.state = parent && parent.state || {};
|
|
221
239
|
return;
|
|
@@ -223,29 +241,41 @@ const inheritStateUpdates = async (element, options) => {
|
|
|
223
241
|
const shouldForceFunctionState = isFunction(stateKey) && !isHoisted && execStateFunction;
|
|
224
242
|
if (shouldForceFunctionState) {
|
|
225
243
|
const execState = exec(stateKey, element);
|
|
226
|
-
state.set(execState, {
|
|
244
|
+
state.set(execState, {
|
|
245
|
+
...options,
|
|
246
|
+
preventUpdate: true,
|
|
247
|
+
preventStateUpdateListener: false,
|
|
248
|
+
updatedByStateFunction: true
|
|
249
|
+
});
|
|
227
250
|
return;
|
|
228
251
|
}
|
|
229
252
|
const keyInParentState = findInheritedState(element, element.parent);
|
|
230
|
-
if (!keyInParentState || options.preventInheritedStateUpdate)
|
|
231
|
-
return;
|
|
253
|
+
if (!keyInParentState || options.preventInheritedStateUpdate) return;
|
|
232
254
|
if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
|
|
233
|
-
const initStateReturns = await triggerEventOnUpdate(
|
|
234
|
-
|
|
235
|
-
|
|
255
|
+
const initStateReturns = await triggerEventOnUpdate(
|
|
256
|
+
"beforeStateUpdate",
|
|
257
|
+
keyInParentState,
|
|
258
|
+
element,
|
|
259
|
+
options
|
|
260
|
+
);
|
|
261
|
+
if (initStateReturns === false) return element;
|
|
236
262
|
}
|
|
237
|
-
const newState = createStateUpdate(element, parent, options);
|
|
263
|
+
const newState = await createStateUpdate(element, parent, options);
|
|
238
264
|
if (!options.preventStateUpdateListener && !options.preventListeners) {
|
|
239
|
-
await triggerEventOnUpdate(
|
|
265
|
+
await triggerEventOnUpdate(
|
|
266
|
+
"stateUpdate",
|
|
267
|
+
newState.parse(),
|
|
268
|
+
element,
|
|
269
|
+
options
|
|
270
|
+
);
|
|
240
271
|
}
|
|
241
272
|
};
|
|
242
|
-
const createStateUpdate = (element, parent, options) => {
|
|
273
|
+
const createStateUpdate = async (element, parent, options) => {
|
|
243
274
|
const __stateChildren = element.state.__children;
|
|
244
|
-
const newState = createState(element, parent);
|
|
275
|
+
const newState = await createState(element, parent);
|
|
245
276
|
element.state = newState;
|
|
246
277
|
for (const child in __stateChildren) {
|
|
247
|
-
if (newState[child])
|
|
248
|
-
newState.__children[child] = __stateChildren[child];
|
|
278
|
+
if (newState[child]) newState.__children[child] = __stateChildren[child];
|
|
249
279
|
Object.getPrototypeOf(__stateChildren[child]).parent = newState;
|
|
250
280
|
}
|
|
251
281
|
return newState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isFunction } from "@domql/utils";
|
|
2
2
|
import { REGISTRY } from "../mixins/index.js";
|
|
3
|
-
const applyParam = (param, element, options) => {
|
|
3
|
+
const applyParam = async (param, element, options) => {
|
|
4
4
|
const { node, context, __ref: ref } = element;
|
|
5
5
|
const prop = element[param];
|
|
6
6
|
const { onlyUpdate } = options;
|
|
@@ -9,12 +9,11 @@ const applyParam = (param, element, options) => {
|
|
|
9
9
|
const isGlobalTransformer = DOMQLPropertyFromContext || DOMQLProperty;
|
|
10
10
|
const hasDefine = element.define && element.define[param];
|
|
11
11
|
const hasContextDefine = context && context.define && context.define[param];
|
|
12
|
-
if (!ref.__if)
|
|
13
|
-
return;
|
|
12
|
+
if (!ref.__if) return;
|
|
14
13
|
const hasOnlyUpdate = onlyUpdate ? onlyUpdate === param || element.lookup(onlyUpdate) : true;
|
|
15
14
|
if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
|
|
16
15
|
if (isFunction(isGlobalTransformer)) {
|
|
17
|
-
isGlobalTransformer(prop, element, node, options);
|
|
16
|
+
await isGlobalTransformer(prop, element, node, options);
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
19
|
}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
1
|
+
const METHODS_EXL = [];
|
|
2
|
+
export {
|
|
3
|
+
METHODS_EXL
|
|
4
|
+
};
|
|
@@ -1,36 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
exec,
|
|
3
|
+
initProps,
|
|
4
|
+
isFunction,
|
|
5
|
+
isMethod,
|
|
6
|
+
isObject,
|
|
7
|
+
isUndefined
|
|
8
|
+
} from "@domql/utils";
|
|
2
9
|
import { create } from "..";
|
|
3
10
|
import { REGISTRY } from "../mixins/index.js";
|
|
4
|
-
import { applyVariant, isVariant } from ".";
|
|
5
|
-
import { isMethod } from "../methods";
|
|
6
11
|
import { addMethods } from "../methods/set";
|
|
7
12
|
import { createState } from "@domql/state";
|
|
8
13
|
import { detectTag } from "@domql/render";
|
|
9
|
-
import { createProps } from "../props";
|
|
10
14
|
import { throughInitialDefine, throughInitialExec } from "../iterate";
|
|
11
15
|
const onlyResolveExtends = (element, parent, key, options) => {
|
|
12
16
|
const { __ref } = element;
|
|
13
17
|
element.tag = detectTag(element);
|
|
14
18
|
{
|
|
15
19
|
const { __ref: ref2 } = element;
|
|
16
|
-
if (!ref2.
|
|
17
|
-
|
|
18
|
-
if (!ref2.
|
|
19
|
-
|
|
20
|
-
if (!ref2.
|
|
21
|
-
|
|
22
|
-
if (!ref2.
|
|
23
|
-
|
|
24
|
-
if (!ref2.__class)
|
|
25
|
-
ref2.__class = {};
|
|
26
|
-
if (!ref2.__classNames)
|
|
27
|
-
ref2.__classNames = {};
|
|
28
|
-
if (!ref2.__attr)
|
|
29
|
-
ref2.__attr = {};
|
|
30
|
-
if (!ref2.__changes)
|
|
31
|
-
ref2.__changes = [];
|
|
32
|
-
if (!ref2.__children)
|
|
33
|
-
ref2.__children = [];
|
|
20
|
+
if (!ref2.__defineCache) ref2.__defineCache = {};
|
|
21
|
+
if (!ref2.__exec) ref2.__exec = {};
|
|
22
|
+
if (!ref2.__execProps) ref2.__execProps = {};
|
|
23
|
+
if (!ref2.__class) ref2.__class = {};
|
|
24
|
+
if (!ref2.__classNames) ref2.__classNames = {};
|
|
25
|
+
if (!ref2.__attr) ref2.__attr = {};
|
|
26
|
+
if (!ref2.__changes) ref2.__changes = [];
|
|
27
|
+
if (!ref2.__children) ref2.__children = [];
|
|
34
28
|
}
|
|
35
29
|
addMethods(element, parent, options);
|
|
36
30
|
createState(element, parent);
|
|
@@ -39,22 +33,20 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
39
33
|
const ifPassed = element.if(element, element.state, element.context);
|
|
40
34
|
if (!ifPassed) {
|
|
41
35
|
delete ref.__if;
|
|
42
|
-
} else
|
|
43
|
-
|
|
44
|
-
} else
|
|
45
|
-
ref.__if = true;
|
|
36
|
+
} else ref.__if = true;
|
|
37
|
+
} else ref.__if = true;
|
|
46
38
|
if (element.node && ref.__if) {
|
|
47
39
|
parent[key || element.key] = element;
|
|
48
40
|
}
|
|
49
|
-
|
|
50
|
-
applyVariant(element, parent);
|
|
41
|
+
initProps(element, parent, options);
|
|
51
42
|
if (element.tag !== "string" && element.tag !== "fragment") {
|
|
52
43
|
throughInitialDefine(element);
|
|
53
44
|
throughInitialExec(element);
|
|
54
45
|
for (const param in element) {
|
|
55
46
|
const prop = element[param];
|
|
56
|
-
if (isUndefined(prop) || isMethod(param, element) || isObject(REGISTRY[param])
|
|
47
|
+
if (isUndefined(prop) || isMethod(param, element) || isObject(REGISTRY[param])) {
|
|
57
48
|
continue;
|
|
49
|
+
}
|
|
58
50
|
const hasDefine = element.define && element.define[param];
|
|
59
51
|
const contextHasDefine = element.context && element.context.define && element.context.define[param];
|
|
60
52
|
const optionsHasDefine = options.define && options.define[param];
|
|
@@ -72,8 +64,7 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
72
64
|
delete element.props.update;
|
|
73
65
|
delete element.props.__element;
|
|
74
66
|
}
|
|
75
|
-
if (!options.keepRef)
|
|
76
|
-
delete element.__ref;
|
|
67
|
+
if (!options.keepRef) delete element.__ref;
|
|
77
68
|
return element;
|
|
78
69
|
};
|
|
79
70
|
export {
|