@domql/element 2.5.200 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 -252
- 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 +79 -177
- package/dist/cjs/iterate.js +29 -13
- package/dist/cjs/methods/set.js +27 -25
- package/dist/cjs/methods/v2.js +1 -5
- package/dist/cjs/mixins/attr.js +7 -6
- package/dist/cjs/mixins/index.js +0 -4
- package/dist/cjs/mixins/registry.js +7 -67
- package/dist/cjs/mixins/scope.js +1 -1
- package/dist/cjs/mixins/state.js +3 -4
- package/dist/cjs/mixins/text.js +3 -3
- package/dist/cjs/node.js +32 -22
- package/dist/cjs/set.js +112 -40
- package/dist/cjs/update.js +119 -64
- package/dist/cjs/utils/applyParam.js +2 -2
- package/dist/cjs/utils/index.js +8 -4
- package/dist/cjs/utils/onlyResolveExtends.js +4 -7
- 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 +85 -188
- package/dist/esm/iterate.js +33 -16
- package/dist/esm/methods/set.js +6 -4
- package/dist/esm/methods/v2.js +1 -5
- package/dist/esm/mixins/attr.js +8 -7
- package/dist/esm/mixins/data.js +1 -1
- package/dist/esm/mixins/index.js +0 -4
- package/dist/esm/mixins/registry.js +7 -67
- package/dist/esm/mixins/scope.js +1 -1
- package/dist/esm/mixins/state.js +4 -5
- package/dist/esm/mixins/text.js +4 -7
- package/dist/esm/node.js +23 -23
- package/dist/esm/set.js +112 -40
- package/dist/esm/update.js +122 -68
- package/dist/esm/utils/applyParam.js +2 -2
- package/dist/esm/utils/index.js +4 -3
- package/dist/esm/utils/onlyResolveExtends.js +12 -8
- 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 -81
- package/dist/cjs/methods/index.js +0 -320
- package/dist/cjs/mixins/content.js +0 -67
- package/dist/cjs/props/create.js +0 -92
- package/dist/cjs/props/ignore.js +0 -24
- package/dist/cjs/props/index.js +0 -21
- package/dist/cjs/props/inherit.js +0 -51
- package/dist/cjs/props/update.js +0 -34
- package/dist/cjs/utils/component.js +0 -74
- package/dist/cjs/utils/extendUtils.js +0 -133
- package/dist/cjs/utils/object.js +0 -171
- package/dist/cjs/utils/propEvents.js +0 -39
- package/dist/esm/cache/index.js +0 -4
- package/dist/esm/cache/options.js +0 -6
- package/dist/esm/extend.js +0 -67
- package/dist/esm/methods/index.js +0 -300
- package/dist/esm/mixins/content.js +0 -47
- package/dist/esm/props/create.js +0 -72
- package/dist/esm/props/ignore.js +0 -4
- package/dist/esm/props/index.js +0 -4
- package/dist/esm/props/inherit.js +0 -31
- package/dist/esm/props/update.js +0 -14
- package/dist/esm/utils/component.js +0 -62
- package/dist/esm/utils/extendUtils.js +0 -113
- package/dist/esm/utils/object.js +0 -151
- package/dist/esm/utils/propEvents.js +0 -19
- 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/cjs/set.js
CHANGED
|
@@ -19,74 +19,146 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var set_exports = {};
|
|
20
20
|
__export(set_exports, {
|
|
21
21
|
default: () => set_default,
|
|
22
|
+
removeContent: () => removeContent,
|
|
22
23
|
reset: () => reset,
|
|
23
|
-
|
|
24
|
-
set: () => set
|
|
24
|
+
resetContent: () => resetContent,
|
|
25
|
+
set: () => set,
|
|
26
|
+
setContent: () => setContent,
|
|
27
|
+
setContentKey: () => setContentKey,
|
|
28
|
+
updateContent: () => updateContent
|
|
25
29
|
});
|
|
26
30
|
module.exports = __toCommonJS(set_exports);
|
|
27
31
|
var import_utils = require("@domql/utils");
|
|
28
|
-
var import_options = require("./cache/options.js");
|
|
29
32
|
var import_create = require("./create.js");
|
|
30
|
-
var import_mixins = require("./mixins/index.js");
|
|
31
|
-
var import_content = require("./mixins/content.js");
|
|
32
33
|
var import_event = require("@domql/event");
|
|
33
|
-
const
|
|
34
|
-
if (!options.preventRemove) (0, import_content.removeContent)(element, options);
|
|
34
|
+
const setContentKey = (element, opts = {}) => {
|
|
35
35
|
const { __ref: ref } = element;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
36
|
+
const contentElementKey = opts.contentElementKey;
|
|
37
|
+
if (!ref.contentElementKey || contentElementKey !== ref.contentElementKey) {
|
|
38
|
+
ref.contentElementKey = contentElementKey || "content";
|
|
39
|
+
}
|
|
40
|
+
return ref.contentElementKey;
|
|
42
41
|
};
|
|
43
|
-
const reset = (options) => {
|
|
42
|
+
const reset = async (options) => {
|
|
44
43
|
const element = void 0;
|
|
45
|
-
(0, import_create.create)(element, element.parent, void 0, {
|
|
46
|
-
|
|
47
|
-
...
|
|
48
|
-
...
|
|
44
|
+
await (0, import_create.create)(element, element.parent, void 0, {
|
|
45
|
+
ignoreChildExtends: true,
|
|
46
|
+
...import_utils.OPTIONS.defaultOptions,
|
|
47
|
+
...import_utils.OPTIONS.create,
|
|
49
48
|
...options
|
|
50
49
|
});
|
|
51
50
|
};
|
|
51
|
+
const resetContent = async (params, element, opts) => {
|
|
52
|
+
var _a;
|
|
53
|
+
const contentElementKey = setContentKey(element, opts);
|
|
54
|
+
if ((_a = element[contentElementKey]) == null ? void 0 : _a.node) removeContent(element, opts);
|
|
55
|
+
const contentElem = await (0, import_create.create)(
|
|
56
|
+
params,
|
|
57
|
+
element,
|
|
58
|
+
contentElementKey || "content",
|
|
59
|
+
{
|
|
60
|
+
ignoreChildExtends: true,
|
|
61
|
+
...import_utils.OPTIONS.defaultOptions,
|
|
62
|
+
...import_utils.OPTIONS.create,
|
|
63
|
+
...opts
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
if (contentElementKey !== "content") opts.contentElementKey = "content";
|
|
67
|
+
return contentElem;
|
|
68
|
+
};
|
|
69
|
+
const updateContent = async function(params, opts) {
|
|
70
|
+
const element = this;
|
|
71
|
+
const contentElementKey = setContentKey(element, opts);
|
|
72
|
+
if (!element[contentElementKey]) return;
|
|
73
|
+
if (element[contentElementKey].update) {
|
|
74
|
+
await element[contentElementKey].update(params, opts);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
async function setContent(param, element, opts) {
|
|
78
|
+
const content = await (0, import_utils.execPromise)(param, element);
|
|
79
|
+
if (content && element) {
|
|
80
|
+
set.call(element, content, opts);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const removeContent = function(el, opts = {}) {
|
|
84
|
+
var _a;
|
|
85
|
+
const element = el || this;
|
|
86
|
+
const contentElementKey = setContentKey(element, opts);
|
|
87
|
+
if (opts.contentElementKey !== "content") {
|
|
88
|
+
opts.contentElementKey = "content";
|
|
89
|
+
}
|
|
90
|
+
const content = element[contentElementKey];
|
|
91
|
+
if (!content) return;
|
|
92
|
+
if (content.tag === "fragment" && ((_a = content.__ref) == null ? void 0 : _a.__children)) {
|
|
93
|
+
content.__ref.__children.forEach((key) => {
|
|
94
|
+
const child = content[key];
|
|
95
|
+
if (child.node && child.node.parentNode) {
|
|
96
|
+
child.node.parentNode.removeChild(child.node);
|
|
97
|
+
}
|
|
98
|
+
if ((0, import_utils.isFunction)(child.remove)) {
|
|
99
|
+
child.remove();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
} else {
|
|
103
|
+
if (content.node && content.node.parentNode) {
|
|
104
|
+
content.node.parentNode.removeChild(content.node);
|
|
105
|
+
}
|
|
106
|
+
if ((0, import_utils.isFunction)(content.remove)) {
|
|
107
|
+
content.remove();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
delete element[contentElementKey];
|
|
111
|
+
};
|
|
52
112
|
const set = async function(params, options = {}, el) {
|
|
53
113
|
var _a;
|
|
54
114
|
const element = el || this;
|
|
55
115
|
const { __ref: ref } = element;
|
|
56
|
-
const
|
|
116
|
+
const contentElementKey = setContentKey(element, options);
|
|
117
|
+
const content = element[contentElementKey];
|
|
57
118
|
const __contentRef = content && content.__ref;
|
|
58
119
|
const lazyLoad = element.props && element.props.lazyLoad;
|
|
59
|
-
const
|
|
60
|
-
if (options.preventContentUpdate === true && !
|
|
61
|
-
|
|
120
|
+
const hasChildren = element.children;
|
|
121
|
+
if (options.preventContentUpdate === true && !hasChildren) return;
|
|
122
|
+
const childHasChanged = !ref.__noChildrenDifference;
|
|
123
|
+
const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && (0, import_utils.deepContains)(params, content);
|
|
124
|
+
if ((content == null ? void 0 : content.update) && !childHasChanged && !childrenIsDifferentFromCache) {
|
|
62
125
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
63
|
-
const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
|
|
126
|
+
const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
|
|
127
|
+
"beforeUpdate",
|
|
128
|
+
params,
|
|
129
|
+
element,
|
|
130
|
+
options
|
|
131
|
+
);
|
|
64
132
|
if (beforeUpdateReturns === false) return element;
|
|
65
133
|
}
|
|
66
|
-
|
|
67
|
-
if (!options.preventUpdateListener
|
|
134
|
+
await content.update(params);
|
|
135
|
+
if (!options.preventUpdateListener && !options.preventListeners) {
|
|
136
|
+
await (0, import_event.triggerEventOn)("update", element, options);
|
|
137
|
+
}
|
|
68
138
|
return;
|
|
69
139
|
}
|
|
70
|
-
if (params)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
140
|
+
if (!params) return element;
|
|
141
|
+
let { childExtends, props, tag } = params;
|
|
142
|
+
if (!props) props = params.props = {};
|
|
143
|
+
if (tag === "fragment") {
|
|
144
|
+
if (!childExtends && element.childExtends) {
|
|
145
|
+
params.childExtends = element.childExtends;
|
|
146
|
+
props.ignoreChildExtends = true;
|
|
76
147
|
}
|
|
77
148
|
if (!(props == null ? void 0 : props.childProps) && ((_a = element.props) == null ? void 0 : _a.childProps)) {
|
|
78
149
|
props.childProps = element.props.childProps;
|
|
79
150
|
props.ignoreChildProps = true;
|
|
80
151
|
}
|
|
81
|
-
if (lazyLoad) {
|
|
82
|
-
window.requestAnimationFrame(async () => {
|
|
83
|
-
await resetElement(params, element, options);
|
|
84
|
-
if (!options.preventUpdateListener) {
|
|
85
|
-
(0, import_event.triggerEventOn)("lazyLoad", element, options);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
} else await resetElement(params, element, options);
|
|
89
152
|
}
|
|
90
|
-
|
|
153
|
+
if (lazyLoad) {
|
|
154
|
+
window.requestAnimationFrame(async () => {
|
|
155
|
+
await resetContent(params, element, options);
|
|
156
|
+
if (!options.preventUpdateListener) {
|
|
157
|
+
await (0, import_event.triggerEventOn)("lazyLoad", element, options);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
} else {
|
|
161
|
+
await resetContent(params, element, options);
|
|
162
|
+
}
|
|
91
163
|
};
|
|
92
164
|
var set_default = set;
|
package/dist/cjs/update.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var update_exports = {};
|
|
20
30
|
__export(update_exports, {
|
|
@@ -24,63 +34,75 @@ __export(update_exports, {
|
|
|
24
34
|
module.exports = __toCommonJS(update_exports);
|
|
25
35
|
var import_utils = require("@domql/utils");
|
|
26
36
|
var import_event = require("@domql/event");
|
|
27
|
-
var import_methods = require("./methods/index.js");
|
|
28
|
-
var import_props = require("./props/index.js");
|
|
29
37
|
var import_state = require("@domql/state");
|
|
30
38
|
var import_create = require("./create.js");
|
|
31
39
|
var import_iterate = require("./iterate.js");
|
|
32
40
|
var import_mixins = require("./mixins/index.js");
|
|
33
41
|
var import_applyParam = require("./utils/applyParam.js");
|
|
34
|
-
var import_options = require("./cache/options.js");
|
|
35
42
|
var import_utils2 = require("./utils/index.js");
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
};
|
|
43
|
+
var import_set = require("./set.js");
|
|
44
|
+
var import_children = __toESM(require("./children.js"), 1);
|
|
39
45
|
const UPDATE_DEFAULT_OPTIONS = {
|
|
40
46
|
stackChanges: false,
|
|
41
47
|
cleanExec: true,
|
|
42
48
|
preventRecursive: false,
|
|
43
49
|
currentSnapshot: false,
|
|
44
50
|
calleeElement: false,
|
|
45
|
-
|
|
51
|
+
exclude: import_utils2.METHODS_EXL
|
|
46
52
|
};
|
|
47
53
|
const update = async function(params = {}, opts) {
|
|
48
54
|
const calleeElementCache = opts == null ? void 0 : opts.calleeElement;
|
|
49
|
-
const options = (0, import_utils.deepClone)(
|
|
55
|
+
const options = (0, import_utils.deepClone)(
|
|
56
|
+
(0, import_utils.isObject)(opts) ? (0, import_utils.deepMerge)(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS,
|
|
57
|
+
{ exclude: ["calleeElement"] }
|
|
58
|
+
);
|
|
50
59
|
options.calleeElement = calleeElementCache;
|
|
51
60
|
const element = this;
|
|
52
|
-
const { parent, node, key } = element;
|
|
53
|
-
const { excludes, preventInheritAtCurrentState } = options;
|
|
54
61
|
let ref = element.__ref;
|
|
55
62
|
if (!ref) ref = element.__ref = {};
|
|
56
|
-
const [snapshotOnCallee, calleeElement, snapshotHasUpdated] =
|
|
63
|
+
const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = (0, import_utils.captureSnapshot)(
|
|
64
|
+
element,
|
|
65
|
+
options
|
|
66
|
+
);
|
|
57
67
|
if (snapshotHasUpdated) return;
|
|
58
|
-
if (!options.preventListeners)
|
|
59
|
-
|
|
60
|
-
|
|
68
|
+
if (!options.preventListeners) {
|
|
69
|
+
await (0, import_event.triggerEventOnUpdate)("startUpdate", params, element, options);
|
|
70
|
+
}
|
|
71
|
+
const { parent, node, key } = element;
|
|
72
|
+
const { exclude, preventInheritAtCurrentState } = options;
|
|
73
|
+
if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (!exclude) (0, import_utils.merge)(options, UPDATE_DEFAULT_OPTIONS);
|
|
61
77
|
if ((0, import_utils.isString)(params) || (0, import_utils.isNumber)(params)) {
|
|
62
78
|
params = { text: params };
|
|
63
79
|
}
|
|
80
|
+
params = (0, import_utils.propertizeElement)(params);
|
|
64
81
|
const inheritState = await inheritStateUpdates(element, options);
|
|
65
82
|
if (inheritState === false) return;
|
|
66
|
-
const ifFails = checkIfOnUpdate(element, parent, options);
|
|
83
|
+
const ifFails = await checkIfOnUpdate(element, parent, options);
|
|
67
84
|
if (ifFails) return;
|
|
68
85
|
if (ref.__if && !options.preventPropsUpdate) {
|
|
69
86
|
const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
|
|
70
|
-
const hasFunctionInProps = ref.
|
|
87
|
+
const hasFunctionInProps = ref.__propsStack.filter((v) => (0, import_utils.isFunction)(v));
|
|
71
88
|
const props = params.props || hasParentProps || hasFunctionInProps.length;
|
|
72
|
-
if (props) (0,
|
|
89
|
+
if (props) (0, import_utils.updateProps)(props, element, parent);
|
|
73
90
|
}
|
|
74
91
|
if (!options.preventBeforeUpdateListener && !options.preventListeners) {
|
|
75
|
-
const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
|
|
92
|
+
const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
|
|
93
|
+
"beforeUpdate",
|
|
94
|
+
params,
|
|
95
|
+
element,
|
|
96
|
+
options
|
|
97
|
+
);
|
|
76
98
|
if (beforeUpdateReturns === false) return element;
|
|
77
99
|
}
|
|
78
|
-
(0, import_utils.overwriteDeep)(element, params
|
|
100
|
+
(0, import_utils.overwriteDeep)(element, params);
|
|
79
101
|
(0, import_iterate.throughExecProps)(element);
|
|
80
102
|
(0, import_iterate.throughUpdatedExec)(element, { ignore: UPDATE_DEFAULT_OPTIONS });
|
|
81
103
|
(0, import_iterate.throughUpdatedDefine)(element);
|
|
82
104
|
if (!options.isForced && !options.preventListeners) {
|
|
83
|
-
(0, import_event.triggerEventOn)("beforeClassAssign", element, options);
|
|
105
|
+
await (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
|
|
84
106
|
}
|
|
85
107
|
if (!ref.__if) return false;
|
|
86
108
|
if (!node) {
|
|
@@ -97,19 +119,22 @@ const update = async function(params = {}, opts) {
|
|
|
97
119
|
preventUpdateAfterCount
|
|
98
120
|
} = options;
|
|
99
121
|
if (preventUpdateAfter) {
|
|
100
|
-
if ((0, import_utils.isNumber)(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount)
|
|
101
|
-
|
|
102
|
-
else options.preventUpdateAfterCount
|
|
122
|
+
if ((0, import_utils.isNumber)(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount) {
|
|
123
|
+
return;
|
|
124
|
+
} else if (options.preventUpdateAfterCount === void 0) {
|
|
125
|
+
options.preventUpdateAfterCount = 1;
|
|
126
|
+
} else options.preventUpdateAfterCount++;
|
|
103
127
|
}
|
|
104
128
|
for (const param in element) {
|
|
105
129
|
const prop = element[param];
|
|
106
130
|
if (!Object.hasOwnProperty.call(element, param)) continue;
|
|
107
131
|
const isInPreventUpdate = (0, import_utils.isArray)(preventUpdate) && preventUpdate.includes(param);
|
|
108
132
|
const isInPreventDefineUpdate = (0, import_utils.isArray)(preventDefineUpdate) && preventDefineUpdate.includes(param);
|
|
109
|
-
|
|
110
|
-
|
|
133
|
+
if ((0, import_utils.isUndefined)(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || (preventStateUpdate && param) === "state" || (0, import_utils.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
111
136
|
if (preventStateUpdate === "once") options.preventStateUpdate = false;
|
|
112
|
-
const isElement = (0, import_applyParam.applyParam)(param, element, options);
|
|
137
|
+
const isElement = await (0, import_applyParam.applyParam)(param, element, options);
|
|
113
138
|
if (isElement) {
|
|
114
139
|
const { hasDefine, hasContextDefine } = isElement;
|
|
115
140
|
const canUpdate = (0, import_utils.isObject)(prop) && !hasDefine && !hasContextDefine && !preventRecursive;
|
|
@@ -118,48 +143,51 @@ const update = async function(params = {}, opts) {
|
|
|
118
143
|
if (options.onEachUpdate) {
|
|
119
144
|
options.onEachUpdate(param, element, element.state, element.context);
|
|
120
145
|
}
|
|
121
|
-
const childUpdateCall = () => update.call(prop, params[prop], {
|
|
146
|
+
const childUpdateCall = async () => await update.call(prop, params[prop], {
|
|
122
147
|
...options,
|
|
123
148
|
currentSnapshot: snapshotOnCallee,
|
|
124
149
|
calleeElement
|
|
125
150
|
});
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
(
|
|
130
|
-
|
|
131
|
-
|
|
151
|
+
if (lazyLoad) {
|
|
152
|
+
import_utils.window.requestAnimationFrame(async () => {
|
|
153
|
+
await childUpdateCall();
|
|
154
|
+
if (!options.preventUpdateListener) {
|
|
155
|
+
await (0, import_event.triggerEventOn)("lazyLoad", element, options);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
} else await childUpdateCall();
|
|
132
159
|
}
|
|
133
160
|
}
|
|
134
|
-
if (!
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
const snapshotOnCallee = calleeElement.__ref.__currentSnapshot;
|
|
146
|
-
if (currentSnapshot < snapshotOnCallee) {
|
|
147
|
-
return [snapshotOnCallee, calleeElement, true];
|
|
148
|
-
}
|
|
149
|
-
return [snapshotOnCallee, calleeElement];
|
|
161
|
+
if (!preventContentUpdate) {
|
|
162
|
+
const children = params.children || element.children;
|
|
163
|
+
const content = children ? await (0, import_children.default)(children, element, opts) : element.children || params.content;
|
|
164
|
+
if (content) {
|
|
165
|
+
await (0, import_set.setContent)(content, element, options);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!preventUpdateListener) {
|
|
169
|
+
await (0, import_event.triggerEventOn)("update", element, options);
|
|
170
|
+
}
|
|
150
171
|
};
|
|
151
|
-
const checkIfOnUpdate = (element, parent, options) => {
|
|
172
|
+
const checkIfOnUpdate = async (element, parent, options) => {
|
|
152
173
|
var _a, _b, _c;
|
|
153
|
-
if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent)
|
|
174
|
+
if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
154
177
|
const ref = element.__ref;
|
|
155
|
-
const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
|
|
178
|
+
const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
|
|
179
|
+
element,
|
|
180
|
+
element.state,
|
|
181
|
+
element.context,
|
|
182
|
+
options
|
|
183
|
+
);
|
|
156
184
|
const itWasFalse = ref.__if !== true;
|
|
157
185
|
if (ifPassed) {
|
|
158
186
|
ref.__if = true;
|
|
159
187
|
if (itWasFalse) {
|
|
160
188
|
delete element.__hash;
|
|
161
189
|
delete element.__text;
|
|
162
|
-
delete element.
|
|
190
|
+
delete element.extends;
|
|
163
191
|
if (!ref.__hasRootState) {
|
|
164
192
|
delete element.state;
|
|
165
193
|
}
|
|
@@ -173,9 +201,11 @@ const checkIfOnUpdate = (element, parent, options) => {
|
|
|
173
201
|
delete element.node;
|
|
174
202
|
}
|
|
175
203
|
const contentKey = ref.contentElementKey;
|
|
176
|
-
if (element
|
|
204
|
+
if (element.children) {
|
|
177
205
|
element.removeContent();
|
|
178
|
-
} else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep)
|
|
206
|
+
} else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep) {
|
|
207
|
+
element[contentKey] = element[contentKey].parseDeep();
|
|
208
|
+
}
|
|
179
209
|
const previousElement = element.previousElement();
|
|
180
210
|
const previousNode = previousElement == null ? void 0 : previousElement.node;
|
|
181
211
|
const hasPrevious = previousNode == null ? void 0 : previousNode.parentNode;
|
|
@@ -188,9 +218,19 @@ const checkIfOnUpdate = (element, parent, options) => {
|
|
|
188
218
|
};
|
|
189
219
|
delete element.__ref;
|
|
190
220
|
delete element.parent;
|
|
191
|
-
const createdElement = (0, import_create.create)(
|
|
221
|
+
const createdElement = await (0, import_create.create)(
|
|
222
|
+
element,
|
|
223
|
+
parent,
|
|
224
|
+
element.key,
|
|
225
|
+
import_utils.OPTIONS.create,
|
|
226
|
+
attachOptions
|
|
227
|
+
);
|
|
192
228
|
if (options.preventUpdate !== true && element.on && (0, import_utils.isFunction)(element.on.update)) {
|
|
193
|
-
(0, import_event.applyEvent)(
|
|
229
|
+
await (0, import_event.applyEvent)(
|
|
230
|
+
element.on.update,
|
|
231
|
+
createdElement,
|
|
232
|
+
createdElement.state
|
|
233
|
+
);
|
|
194
234
|
}
|
|
195
235
|
return createdElement;
|
|
196
236
|
}
|
|
@@ -212,23 +252,38 @@ const inheritStateUpdates = async (element, options) => {
|
|
|
212
252
|
const shouldForceFunctionState = (0, import_utils.isFunction)(stateKey) && !isHoisted && execStateFunction;
|
|
213
253
|
if (shouldForceFunctionState) {
|
|
214
254
|
const execState = (0, import_utils.exec)(stateKey, element);
|
|
215
|
-
state.set(execState, {
|
|
255
|
+
state.set(execState, {
|
|
256
|
+
...options,
|
|
257
|
+
preventUpdate: true,
|
|
258
|
+
preventStateUpdateListener: false,
|
|
259
|
+
updatedByStateFunction: true
|
|
260
|
+
});
|
|
216
261
|
return;
|
|
217
262
|
}
|
|
218
|
-
const keyInParentState = (0,
|
|
263
|
+
const keyInParentState = (0, import_utils.findInheritedState)(element, element.parent);
|
|
219
264
|
if (!keyInParentState || options.preventInheritedStateUpdate) return;
|
|
220
265
|
if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
|
|
221
|
-
const initStateReturns = await (0, import_event.triggerEventOnUpdate)(
|
|
266
|
+
const initStateReturns = await (0, import_event.triggerEventOnUpdate)(
|
|
267
|
+
"beforeStateUpdate",
|
|
268
|
+
keyInParentState,
|
|
269
|
+
element,
|
|
270
|
+
options
|
|
271
|
+
);
|
|
222
272
|
if (initStateReturns === false) return element;
|
|
223
273
|
}
|
|
224
|
-
const newState = createStateUpdate(element, parent, options);
|
|
274
|
+
const newState = await createStateUpdate(element, parent, options);
|
|
225
275
|
if (!options.preventStateUpdateListener && !options.preventListeners) {
|
|
226
|
-
await (0, import_event.triggerEventOnUpdate)(
|
|
276
|
+
await (0, import_event.triggerEventOnUpdate)(
|
|
277
|
+
"stateUpdate",
|
|
278
|
+
newState.parse(),
|
|
279
|
+
element,
|
|
280
|
+
options
|
|
281
|
+
);
|
|
227
282
|
}
|
|
228
283
|
};
|
|
229
|
-
const createStateUpdate = (element, parent, options) => {
|
|
284
|
+
const createStateUpdate = async (element, parent, options) => {
|
|
230
285
|
const __stateChildren = element.state.__children;
|
|
231
|
-
const newState = (0, import_state.createState)(element, parent);
|
|
286
|
+
const newState = await (0, import_state.createState)(element, parent);
|
|
232
287
|
element.state = newState;
|
|
233
288
|
for (const child in __stateChildren) {
|
|
234
289
|
if (newState[child]) newState.__children[child] = __stateChildren[child];
|
|
@@ -23,7 +23,7 @@ __export(applyParam_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(applyParam_exports);
|
|
24
24
|
var import_utils = require("@domql/utils");
|
|
25
25
|
var import_mixins = require("../mixins/index.js");
|
|
26
|
-
const applyParam = (param, element, options) => {
|
|
26
|
+
const applyParam = async (param, element, options) => {
|
|
27
27
|
const { node, context, __ref: ref } = element;
|
|
28
28
|
const prop = element[param];
|
|
29
29
|
const { onlyUpdate } = options;
|
|
@@ -36,7 +36,7 @@ const applyParam = (param, element, options) => {
|
|
|
36
36
|
const hasOnlyUpdate = onlyUpdate ? onlyUpdate === param || element.lookup(onlyUpdate) : true;
|
|
37
37
|
if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
|
|
38
38
|
if ((0, import_utils.isFunction)(isGlobalTransformer)) {
|
|
39
|
-
isGlobalTransformer(prop, element, node, options);
|
|
39
|
+
await isGlobalTransformer(prop, element, node, options);
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
}
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
6
10
|
var __copyProps = (to, from, except, desc) => {
|
|
7
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
12
|
for (let key of __getOwnPropNames(from))
|
|
@@ -11,10 +15,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
11
15
|
}
|
|
12
16
|
return to;
|
|
13
17
|
};
|
|
14
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
19
|
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
METHODS_EXL: () => METHODS_EXL
|
|
22
|
+
});
|
|
17
23
|
module.exports = __toCommonJS(utils_exports);
|
|
18
|
-
|
|
19
|
-
__reExport(utils_exports, require("./extendUtils.js"), module.exports);
|
|
20
|
-
__reExport(utils_exports, require("./component.js"), module.exports);
|
|
24
|
+
const METHODS_EXL = [];
|
|
@@ -24,19 +24,15 @@ module.exports = __toCommonJS(onlyResolveExtends_exports);
|
|
|
24
24
|
var import_utils = require("@domql/utils");
|
|
25
25
|
var import__ = require("..");
|
|
26
26
|
var import_mixins = require("../mixins/index.js");
|
|
27
|
-
var import__2 = require(".");
|
|
28
|
-
var import_methods = require("../methods");
|
|
29
27
|
var import_set = require("../methods/set");
|
|
30
28
|
var import_state = require("@domql/state");
|
|
31
29
|
var import_render = require("@domql/render");
|
|
32
|
-
var import_props = require("../props");
|
|
33
30
|
var import_iterate = require("../iterate");
|
|
34
31
|
const onlyResolveExtends = (element, parent, key, options) => {
|
|
35
32
|
const { __ref } = element;
|
|
36
33
|
element.tag = (0, import_render.detectTag)(element);
|
|
37
34
|
{
|
|
38
35
|
const { __ref: ref2 } = element;
|
|
39
|
-
if (!ref2.__cached) ref2.__cached = {};
|
|
40
36
|
if (!ref2.__defineCache) ref2.__defineCache = {};
|
|
41
37
|
if (!ref2.__exec) ref2.__exec = {};
|
|
42
38
|
if (!ref2.__execProps) ref2.__execProps = {};
|
|
@@ -58,14 +54,15 @@ const onlyResolveExtends = (element, parent, key, options) => {
|
|
|
58
54
|
if (element.node && ref.__if) {
|
|
59
55
|
parent[key || element.key] = element;
|
|
60
56
|
}
|
|
61
|
-
(0,
|
|
62
|
-
(0, import__2.applyVariant)(element, parent);
|
|
57
|
+
(0, import_utils.initProps)(element, parent, options);
|
|
63
58
|
if (element.tag !== "string" && element.tag !== "fragment") {
|
|
64
59
|
(0, import_iterate.throughInitialDefine)(element);
|
|
65
60
|
(0, import_iterate.throughInitialExec)(element);
|
|
66
61
|
for (const param in element) {
|
|
67
62
|
const prop = element[param];
|
|
68
|
-
if ((0, import_utils.isUndefined)(prop) || (0,
|
|
63
|
+
if ((0, import_utils.isUndefined)(prop) || (0, import_utils.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
69
66
|
const hasDefine = element.define && element.define[param];
|
|
70
67
|
const contextHasDefine = element.context && element.context.define && element.context.define[param];
|
|
71
68
|
const optionsHasDefine = options.define && options.define[param];
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { update } from "../update";
|
|
2
|
+
describe("checkIfOnUpdate via update()", () => {
|
|
3
|
+
let element, parent, options;
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
parent = {
|
|
6
|
+
node: document.createElement("div"),
|
|
7
|
+
props: {},
|
|
8
|
+
state: {}
|
|
9
|
+
};
|
|
10
|
+
element = {
|
|
11
|
+
__ref: {
|
|
12
|
+
__if: void 0,
|
|
13
|
+
__state: null,
|
|
14
|
+
__hasRootState: false,
|
|
15
|
+
__execProps: {},
|
|
16
|
+
contentElementKey: "content"
|
|
17
|
+
},
|
|
18
|
+
parent,
|
|
19
|
+
props: {},
|
|
20
|
+
state: {
|
|
21
|
+
update: (el, st) => {
|
|
22
|
+
return st;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
context: {
|
|
26
|
+
defaultExtends: {}
|
|
27
|
+
},
|
|
28
|
+
node: document.createElement("div"),
|
|
29
|
+
if: () => true,
|
|
30
|
+
previousElement: () => {
|
|
31
|
+
return {};
|
|
32
|
+
},
|
|
33
|
+
nextElement: () => {
|
|
34
|
+
return {};
|
|
35
|
+
},
|
|
36
|
+
removeContent: () => {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
options = {};
|
|
41
|
+
});
|
|
42
|
+
it("uses props.if when element.if missing", async () => {
|
|
43
|
+
delete element.if;
|
|
44
|
+
element.props.if = () => false;
|
|
45
|
+
await update.call(element, {}, options);
|
|
46
|
+
expect(element.node).toEqual(document.createElement("div"));
|
|
47
|
+
});
|
|
48
|
+
it("retains state when __hasRootState=true", async () => {
|
|
49
|
+
element.__ref.__hasRootState = true;
|
|
50
|
+
element.state.critical = true;
|
|
51
|
+
element.__ref.__if = false;
|
|
52
|
+
await update.call(element, {}, options);
|
|
53
|
+
expect(element.state.critical).toBe(true);
|
|
54
|
+
expect(element.state.preserved).toBeUndefined();
|
|
55
|
+
});
|
|
56
|
+
it("processes nested content with parseDeep", async () => {
|
|
57
|
+
element.content = {
|
|
58
|
+
parseDeep: () => ({ parsed: true }),
|
|
59
|
+
existing: "data"
|
|
60
|
+
};
|
|
61
|
+
await update.call(element, {}, options);
|
|
62
|
+
expect(element.content.parsed).toBe(true);
|
|
63
|
+
expect(element.content.existing).toBeUndefined();
|
|
64
|
+
});
|
|
65
|
+
it("reattaches after previous sibling", async () => {
|
|
66
|
+
const prevNode = document.createElement("span");
|
|
67
|
+
parent.node.appendChild(prevNode);
|
|
68
|
+
await update.call(element, {}, options);
|
|
69
|
+
const newElement = parent.node.children[0];
|
|
70
|
+
expect(newElement).toEqual(document.createElement("span"));
|
|
71
|
+
expect(newElement.previousSibling).toBe(null);
|
|
72
|
+
});
|
|
73
|
+
});
|