@domql/element 3.1.1 → 3.2.3
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 +4 -6
- package/__tests__/checkIfOnUpdate.test.js +12 -12
- package/__tests__/children.test.js +34 -38
- package/__tests__/inheritStateUpdates.test.js +12 -12
- package/__tests__/renderElement.test.js +11 -11
- package/__tests__/resetElement.test.js +6 -6
- package/__tests__/set.test.js +32 -36
- package/__tests__/throughExecProps.test.js +12 -12
- package/__tests__/throughInitialDefine.test.js +16 -16
- package/__tests__/throughInitialExec.test.js +16 -16
- package/__tests__/throughUpdatedDefine.test.js +14 -14
- package/__tests__/throughUpdatedExec.test.js +17 -16
- package/__tests__/update.test.js +54 -54
- package/children.js +5 -6
- package/create.js +18 -20
- package/dist/cjs/children.js +4 -2
- package/dist/cjs/create.js +16 -16
- package/dist/cjs/extend.js +88 -0
- package/dist/cjs/iterate.js +76 -20
- package/dist/cjs/mixins/content.js +73 -0
- package/dist/cjs/mixins/html.js +1 -1
- package/dist/cjs/mixins/registry.js +2 -2
- package/dist/cjs/mixins/scope.js +1 -1
- package/dist/cjs/mixins/state.js +2 -2
- package/dist/cjs/mixins/text.js +4 -4
- package/dist/cjs/node.js +15 -15
- package/dist/cjs/set.js +22 -27
- package/dist/cjs/update.js +24 -33
- package/dist/cjs/utils/applyParam.js +4 -4
- package/dist/cjs/utils/extendUtils.js +132 -0
- package/dist/cjs/utils/propEvents.js +39 -0
- package/dist/esm/children.js +5 -3
- package/dist/esm/create.js +16 -16
- package/dist/esm/extend.js +74 -0
- package/dist/esm/iterate.js +77 -22
- package/dist/esm/mixins/content.js +53 -0
- package/dist/esm/mixins/html.js +1 -1
- package/dist/esm/mixins/registry.js +1 -1
- package/dist/esm/mixins/scope.js +1 -1
- package/dist/esm/mixins/state.js +3 -3
- package/dist/esm/mixins/text.js +4 -4
- package/dist/esm/node.js +15 -15
- package/dist/esm/set.js +23 -28
- package/dist/esm/update.js +24 -33
- package/dist/esm/utils/applyParam.js +5 -5
- package/dist/esm/utils/extendUtils.js +119 -0
- package/dist/esm/utils/propEvents.js +19 -0
- package/extend.js +98 -0
- package/iterate.js +80 -25
- package/mixins/content.js +65 -0
- package/mixins/html.js +1 -1
- package/mixins/registry.js +1 -1
- package/mixins/scope.js +1 -1
- package/mixins/state.js +3 -3
- package/mixins/text.js +4 -4
- package/node.js +15 -15
- package/package.json +8 -8
- package/set.js +23 -28
- package/update.js +25 -34
- package/utils/applyParam.js +5 -5
- package/utils/extendUtils.js +149 -0
- package/utils/propEvents.js +19 -0
- package/dist/cjs/__tests__/checkIfOnUpdate.test.js +0 -73
- package/dist/cjs/__tests__/children.test.js +0 -177
- package/dist/cjs/__tests__/define.test.js +0 -75
- package/dist/cjs/__tests__/inheritStateUpdates.test.js +0 -62
- package/dist/cjs/__tests__/renderElement.test.js +0 -138
- package/dist/cjs/__tests__/resetElement.test.js +0 -35
- package/dist/cjs/__tests__/set.test.js +0 -256
- package/dist/cjs/__tests__/throughExecProps.test.js +0 -62
- package/dist/cjs/__tests__/throughInitialDefine.test.js +0 -79
- package/dist/cjs/__tests__/throughInitialExec.test.js +0 -73
- package/dist/cjs/__tests__/throughUpdatedDefine.test.js +0 -69
- package/dist/cjs/__tests__/throughUpdatedExec.test.js +0 -84
- package/dist/cjs/__tests__/tree.test.js +0 -11
- package/dist/cjs/__tests__/update.test.js +0 -222
- package/dist/esm/__tests__/checkIfOnUpdate.test.js +0 -73
- package/dist/esm/__tests__/children.test.js +0 -177
- package/dist/esm/__tests__/define.test.js +0 -53
- package/dist/esm/__tests__/inheritStateUpdates.test.js +0 -62
- package/dist/esm/__tests__/renderElement.test.js +0 -116
- package/dist/esm/__tests__/resetElement.test.js +0 -35
- package/dist/esm/__tests__/set.test.js +0 -256
- package/dist/esm/__tests__/throughExecProps.test.js +0 -62
- package/dist/esm/__tests__/throughInitialDefine.test.js +0 -79
- package/dist/esm/__tests__/throughInitialExec.test.js +0 -73
- package/dist/esm/__tests__/throughUpdatedDefine.test.js +0 -69
- package/dist/esm/__tests__/throughUpdatedExec.test.js +0 -84
- package/dist/esm/__tests__/tree.test.js +0 -11
- package/dist/esm/__tests__/update.test.js +0 -222
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { update } from "../update";
|
|
2
|
-
describe("update()", () => {
|
|
3
|
-
let element, params, opts;
|
|
4
|
-
beforeEach(() => {
|
|
5
|
-
element = {
|
|
6
|
-
__ref: {
|
|
7
|
-
__if: true,
|
|
8
|
-
__execProps: {},
|
|
9
|
-
__exec: {},
|
|
10
|
-
__defineCache: {},
|
|
11
|
-
__propsStack: [],
|
|
12
|
-
__props: [],
|
|
13
|
-
__state: "state"
|
|
14
|
-
},
|
|
15
|
-
state: "string",
|
|
16
|
-
props: {},
|
|
17
|
-
parent: {
|
|
18
|
-
props: {}
|
|
19
|
-
},
|
|
20
|
-
context: {},
|
|
21
|
-
define: {},
|
|
22
|
-
node: document.createElement("div"),
|
|
23
|
-
key: "testElement",
|
|
24
|
-
on: {},
|
|
25
|
-
update
|
|
26
|
-
};
|
|
27
|
-
opts = {
|
|
28
|
-
preventUpdate: [],
|
|
29
|
-
preventDefineUpdate: [],
|
|
30
|
-
preventBeforeStateUpdateListener: false,
|
|
31
|
-
preventListeners: false,
|
|
32
|
-
preventStateUpdateListener: false
|
|
33
|
-
};
|
|
34
|
-
params = {};
|
|
35
|
-
});
|
|
36
|
-
it("does not modify opts when params and opts are empty", async () => {
|
|
37
|
-
await element.update({}, opts);
|
|
38
|
-
expect(opts).toEqual({
|
|
39
|
-
calleeElement: false,
|
|
40
|
-
cleanExec: true,
|
|
41
|
-
currentSnapshot: false,
|
|
42
|
-
exclude: [],
|
|
43
|
-
preventRecursive: false,
|
|
44
|
-
stackChanges: false,
|
|
45
|
-
preventUpdate: [],
|
|
46
|
-
preventDefineUpdate: [],
|
|
47
|
-
preventBeforeStateUpdateListener: false,
|
|
48
|
-
preventListeners: false,
|
|
49
|
-
preventStateUpdateListener: false
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
it("initializes options with UPDATE_DEFAULT_OPTIONS when opts is empty", async () => {
|
|
53
|
-
await element.update({}, opts);
|
|
54
|
-
expect(opts.calleeElement).toBe(false);
|
|
55
|
-
expect(element.__ref).toBeDefined();
|
|
56
|
-
});
|
|
57
|
-
it("merges opts with UPDATE_DEFAULT_OPTIONS using deepMerge", async () => {
|
|
58
|
-
opts.customOption = true;
|
|
59
|
-
await element.update({}, opts);
|
|
60
|
-
expect(opts.customOption).toBe(true);
|
|
61
|
-
});
|
|
62
|
-
it("converts string params to { text: params }", async () => {
|
|
63
|
-
await element.update("testString", opts);
|
|
64
|
-
expect(element.text).toBe("testString");
|
|
65
|
-
});
|
|
66
|
-
it("converts number params to { text: params }", async () => {
|
|
67
|
-
await element.update(123, opts);
|
|
68
|
-
expect(element.text).toBe(123);
|
|
69
|
-
});
|
|
70
|
-
it("returns early if preventInheritAtCurrentState matches element", async () => {
|
|
71
|
-
opts.preventInheritAtCurrentState = { __element: element };
|
|
72
|
-
await element.update({}, opts);
|
|
73
|
-
expect(element.__ref.__currentSnapshot).toBe(6);
|
|
74
|
-
});
|
|
75
|
-
it("initializes __ref if not present", async () => {
|
|
76
|
-
delete element.__ref;
|
|
77
|
-
await element.update({}, opts);
|
|
78
|
-
expect(element.__ref).toBeDefined();
|
|
79
|
-
});
|
|
80
|
-
it("merges options with UPDATE_DEFAULT_OPTIONS when exclude is missing", async () => {
|
|
81
|
-
await element.update({}, opts);
|
|
82
|
-
expect(opts.exclude).toBeDefined();
|
|
83
|
-
});
|
|
84
|
-
it("does not throw or modify opts when params is undefined", async () => {
|
|
85
|
-
await element.update(void 0, opts);
|
|
86
|
-
expect(opts).toEqual({
|
|
87
|
-
calleeElement: false,
|
|
88
|
-
cleanExec: true,
|
|
89
|
-
currentSnapshot: false,
|
|
90
|
-
exclude: [],
|
|
91
|
-
preventRecursive: false,
|
|
92
|
-
preventUpdate: [],
|
|
93
|
-
preventDefineUpdate: [],
|
|
94
|
-
stackChanges: false,
|
|
95
|
-
preventBeforeStateUpdateListener: false,
|
|
96
|
-
preventListeners: false,
|
|
97
|
-
preventStateUpdateListener: false
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
it("does not throw when opts is undefined", async () => {
|
|
101
|
-
await element.update({}, void 0);
|
|
102
|
-
expect(element.__ref).toBeDefined();
|
|
103
|
-
});
|
|
104
|
-
it("does not throw when opts is null", async () => {
|
|
105
|
-
await element.update({}, null);
|
|
106
|
-
expect(element.__ref).toBeDefined();
|
|
107
|
-
});
|
|
108
|
-
it("does not modify the params object", async () => {
|
|
109
|
-
params = { key: "value" };
|
|
110
|
-
await element.update(params, opts);
|
|
111
|
-
expect(params).toEqual({ key: "value" });
|
|
112
|
-
});
|
|
113
|
-
it("does modify opts when params is an empty object", async () => {
|
|
114
|
-
await element.update({}, opts);
|
|
115
|
-
expect(opts).toEqual({
|
|
116
|
-
calleeElement: false,
|
|
117
|
-
cleanExec: true,
|
|
118
|
-
currentSnapshot: false,
|
|
119
|
-
exclude: [],
|
|
120
|
-
preventRecursive: false,
|
|
121
|
-
stackChanges: false,
|
|
122
|
-
preventUpdate: [],
|
|
123
|
-
preventDefineUpdate: [],
|
|
124
|
-
preventBeforeStateUpdateListener: false,
|
|
125
|
-
preventListeners: false,
|
|
126
|
-
preventStateUpdateListener: false
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
it("moves regular properties to element.props", async () => {
|
|
130
|
-
params = { props: { title: "Test", description: "Content" } };
|
|
131
|
-
await element.update(params, opts);
|
|
132
|
-
expect(element.props).toEqual({
|
|
133
|
-
title: "Test",
|
|
134
|
-
description: "Content"
|
|
135
|
-
});
|
|
136
|
-
expect(element.title).toBeUndefined();
|
|
137
|
-
});
|
|
138
|
-
it("keeps element-rooted properties", async () => {
|
|
139
|
-
params = { Header: {}, Footer: {}, 0: "index" };
|
|
140
|
-
await element.update(params, opts);
|
|
141
|
-
expect(element.Header).toBeDefined();
|
|
142
|
-
expect(element.Footer).toBeDefined();
|
|
143
|
-
expect(element["0"]).toBe("index");
|
|
144
|
-
expect(element.props).toEqual({});
|
|
145
|
-
});
|
|
146
|
-
it("preserves built-in properties on element", async () => {
|
|
147
|
-
params = { props: { className: "container", hidden: true } };
|
|
148
|
-
await element.update(params, opts);
|
|
149
|
-
expect(element.props.className).toBe("container");
|
|
150
|
-
expect(element.props.hidden).toBe(true);
|
|
151
|
-
expect(element.props).toEqual({ className: "container", hidden: true });
|
|
152
|
-
});
|
|
153
|
-
it("moves element-like properties from props to root", async () => {
|
|
154
|
-
params = { props: { Header: {} } };
|
|
155
|
-
await element.update(params, opts);
|
|
156
|
-
expect(element.Header).toBeDefined();
|
|
157
|
-
expect(element.props.Header).toBeUndefined();
|
|
158
|
-
});
|
|
159
|
-
it("exits early when inheritStateUpdates returns false", async () => {
|
|
160
|
-
element.__ref.__stateBlocked = true;
|
|
161
|
-
await element.update({ props: { shouldChange: true } }, opts);
|
|
162
|
-
expect(element.props.shouldChange).toBe(true);
|
|
163
|
-
expect(element.__ref.__stateBlocked).toBe(true);
|
|
164
|
-
});
|
|
165
|
-
it("exits early when checkIfOnUpdate fails", async () => {
|
|
166
|
-
element.parent.props.ifCondition = false;
|
|
167
|
-
await element.update({ state: { newState: true } }, opts);
|
|
168
|
-
expect(element.state.newState).toBe(true);
|
|
169
|
-
});
|
|
170
|
-
it("updates props from parent key match", async () => {
|
|
171
|
-
element.parent.props.testKey = { inherited: true };
|
|
172
|
-
await element.update({}, opts);
|
|
173
|
-
expect(element.props.inherited).toBeUndefined();
|
|
174
|
-
});
|
|
175
|
-
it("updates props when functions exist in __props", async () => {
|
|
176
|
-
element.__ref.__props.push(() => "dynamic");
|
|
177
|
-
await element.update({}, opts);
|
|
178
|
-
expect(element.props).toEqual(expect.any(Object));
|
|
179
|
-
});
|
|
180
|
-
it("skips props update when preventPropsUpdate=true", async () => {
|
|
181
|
-
opts.preventPropsUpdate = true;
|
|
182
|
-
opts.preventUpdateAfter = true;
|
|
183
|
-
element.parent.props.testKey = { shouldExist: true };
|
|
184
|
-
await element.update({}, opts);
|
|
185
|
-
expect(element.props.shouldExist).toBeUndefined();
|
|
186
|
-
});
|
|
187
|
-
it("should not skips props update when preventPropsUpdate=false", async () => {
|
|
188
|
-
opts.preventPropsUpdate = false;
|
|
189
|
-
opts.lazyLoad = true;
|
|
190
|
-
opts.onEachUpdate = () => {
|
|
191
|
-
return true;
|
|
192
|
-
};
|
|
193
|
-
element.parent.props.testKey = { shouldExist: true };
|
|
194
|
-
element.__ref.__propsStack = [];
|
|
195
|
-
element.__ref.__if = true;
|
|
196
|
-
element.off = { text: "off" };
|
|
197
|
-
await element.update({}, opts);
|
|
198
|
-
expect(element.props.shouldExist).toBeUndefined();
|
|
199
|
-
});
|
|
200
|
-
it("should set preventUpdateAfterCount to 1 when is not a number", async () => {
|
|
201
|
-
opts.preventPropsUpdate = true;
|
|
202
|
-
opts.preventUpdateAfter = 2;
|
|
203
|
-
opts.preventUpdateAfterCount = void 0;
|
|
204
|
-
element.parent.props.testKey = { shouldExist: true };
|
|
205
|
-
await element.update({}, opts);
|
|
206
|
-
expect(element.props.shouldExist).toBeUndefined();
|
|
207
|
-
});
|
|
208
|
-
it("processes parent.childProps", async () => {
|
|
209
|
-
element.parent.props.childProps = { global: true };
|
|
210
|
-
await element.update({}, opts);
|
|
211
|
-
expect(element.props.global).toBe(true);
|
|
212
|
-
});
|
|
213
|
-
it("processes function props", async () => {
|
|
214
|
-
await element.update({ props: { calc: () => 42 } }, opts);
|
|
215
|
-
expect(element.props.calc()).toBe(42);
|
|
216
|
-
});
|
|
217
|
-
it("returns element when beforeUpdate rejects", async () => {
|
|
218
|
-
element.on.beforeUpdate = () => false;
|
|
219
|
-
const result = await element.update({}, opts);
|
|
220
|
-
expect(result).toBe(element);
|
|
221
|
-
});
|
|
222
|
-
});
|