@domql/element 2.5.185 → 2.5.187

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.
Files changed (76) hide show
  1. package/create.js +11 -11
  2. package/dist/cjs/create.js +11 -11
  3. package/dist/cjs/extend.js +1 -1
  4. package/dist/cjs/iterate.js +2 -2
  5. package/dist/cjs/methods/index.js +1 -1
  6. package/dist/cjs/methods/set.js +24 -24
  7. package/dist/cjs/mixins/attr.js +1 -1
  8. package/dist/cjs/mixins/content.js +1 -1
  9. package/dist/cjs/mixins/index.js +11 -11
  10. package/dist/cjs/mixins/registry.js +9 -9
  11. package/dist/cjs/mixins/text.js +1 -1
  12. package/dist/cjs/node.js +6 -6
  13. package/dist/cjs/props/create.js +2 -2
  14. package/dist/cjs/props/index.js +4 -4
  15. package/dist/cjs/props/update.js +2 -2
  16. package/dist/cjs/set.js +4 -4
  17. package/dist/cjs/update.js +8 -8
  18. package/dist/cjs/utils/component.js +1 -1
  19. package/dist/cjs/utils/index.js +3 -3
  20. package/dist/cjs/utils/object.js +1 -1
  21. package/dist/esm/cache/index.js +4 -0
  22. package/dist/esm/cache/options.js +6 -0
  23. package/dist/esm/create.js +334 -0
  24. package/dist/esm/define.js +14 -0
  25. package/dist/esm/extend.js +71 -0
  26. package/dist/esm/index.js +14 -0
  27. package/dist/esm/iterate.js +112 -0
  28. package/dist/esm/methods/index.js +333 -0
  29. package/dist/esm/methods/set.js +61 -0
  30. package/dist/esm/methods/v2.js +89 -0
  31. package/dist/esm/mixins/attr.js +26 -0
  32. package/dist/esm/mixins/classList.js +55 -0
  33. package/dist/esm/mixins/content.js +54 -0
  34. package/dist/esm/mixins/data.js +22 -0
  35. package/dist/esm/mixins/html.js +18 -0
  36. package/dist/esm/mixins/index.js +23 -0
  37. package/dist/esm/mixins/registry.js +105 -0
  38. package/dist/esm/mixins/scope.js +18 -0
  39. package/dist/esm/mixins/state.js +19 -0
  40. package/dist/esm/mixins/style.js +15 -0
  41. package/dist/esm/mixins/text.js +28 -0
  42. package/dist/esm/node.js +69 -0
  43. package/dist/esm/props/create.js +78 -0
  44. package/dist/esm/props/ignore.js +4 -0
  45. package/dist/esm/props/index.js +4 -0
  46. package/dist/esm/props/inherit.js +33 -0
  47. package/dist/esm/props/update.js +17 -0
  48. package/dist/esm/set.js +73 -0
  49. package/dist/esm/tree.js +11 -0
  50. package/dist/esm/update.js +255 -0
  51. package/dist/esm/utils/applyParam.js +25 -0
  52. package/dist/esm/utils/component.js +65 -0
  53. package/dist/esm/utils/extendUtils.js +122 -0
  54. package/dist/esm/utils/index.js +3 -0
  55. package/dist/esm/utils/object.js +159 -0
  56. package/dist/esm/utils/onlyResolveExtends.js +81 -0
  57. package/dist/esm/utils/propEvents.js +21 -0
  58. package/extend.js +1 -1
  59. package/iterate.js +2 -2
  60. package/methods/index.js +1 -1
  61. package/methods/set.js +18 -19
  62. package/mixins/attr.js +1 -1
  63. package/mixins/content.js +1 -1
  64. package/mixins/index.js +11 -11
  65. package/mixins/registry.js +9 -9
  66. package/mixins/text.js +1 -1
  67. package/node.js +6 -6
  68. package/package.json +7 -7
  69. package/props/create.js +2 -2
  70. package/props/index.js +4 -4
  71. package/props/update.js +2 -2
  72. package/set.js +4 -4
  73. package/update.js +8 -8
  74. package/utils/component.js +1 -1
  75. package/utils/index.js +3 -3
  76. package/utils/object.js +1 -1
@@ -0,0 +1,255 @@
1
+ import {
2
+ window,
3
+ exec,
4
+ isArray,
5
+ isFunction,
6
+ isNumber,
7
+ isObject,
8
+ isString,
9
+ isUndefined,
10
+ merge,
11
+ isVariant,
12
+ overwriteDeep,
13
+ createSnapshotId,
14
+ deepClone
15
+ } from "@domql/utils";
16
+ import { applyEvent, triggerEventOn, triggerEventOnUpdate } from "@domql/event";
17
+ import { isMethod } from "./methods/index.js";
18
+ import { updateProps } from "./props/index.js";
19
+ import { createState, findInheritedState } from "@domql/state";
20
+ import { create } from "./create.js";
21
+ import { throughExecProps, throughUpdatedDefine, throughUpdatedExec } from "./iterate.js";
22
+ import { REGISTRY } from "./mixins/index.js";
23
+ import { applyParam } from "./utils/applyParam.js";
24
+ import { OPTIONS } from "./cache/options.js";
25
+ import { METHODS_EXL, deepMerge } from "./utils/index.js";
26
+ const snapshot = {
27
+ snapshotId: createSnapshotId
28
+ };
29
+ const UPDATE_DEFAULT_OPTIONS = {
30
+ stackChanges: false,
31
+ cleanExec: true,
32
+ preventRecursive: false,
33
+ currentSnapshot: false,
34
+ calleeElement: false,
35
+ excludes: METHODS_EXL
36
+ };
37
+ const update = function(params = {}, opts) {
38
+ const calleeElementCache = opts == null ? void 0 : opts.calleeElement;
39
+ const options = deepClone(isObject(opts) ? deepMerge(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS, { exclude: ["calleeElement"] });
40
+ options.calleeElement = calleeElementCache;
41
+ const element = this;
42
+ const { parent, node, key } = element;
43
+ const { excludes, preventInheritAtCurrentState } = options;
44
+ let ref = element.__ref;
45
+ if (!ref)
46
+ ref = element.__ref = {};
47
+ const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = captureSnapshot(element, options);
48
+ if (snapshotHasUpdated)
49
+ return;
50
+ if (!options.preventListeners)
51
+ triggerEventOnUpdate("startUpdate", params, element, options);
52
+ if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element)
53
+ return;
54
+ if (!excludes)
55
+ merge(options, UPDATE_DEFAULT_OPTIONS);
56
+ if (isString(params) || isNumber(params)) {
57
+ params = { text: params };
58
+ }
59
+ const inheritState = inheritStateUpdates(element, options);
60
+ if (inheritState === false)
61
+ return;
62
+ const ifFails = checkIfOnUpdate(element, parent, options);
63
+ if (ifFails)
64
+ return;
65
+ if (ref.__if && !options.preventPropsUpdate) {
66
+ const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
67
+ const hasFunctionInProps = ref.__props.filter((v) => isFunction(v));
68
+ const props = params.props || hasParentProps || hasFunctionInProps.length;
69
+ if (props)
70
+ updateProps(props, element, parent);
71
+ }
72
+ if (!options.preventBeforeUpdateListener && !options.preventListeners) {
73
+ const beforeUpdateReturns = triggerEventOnUpdate("beforeUpdate", params, element, options);
74
+ if (beforeUpdateReturns === false)
75
+ return element;
76
+ }
77
+ overwriteDeep(element, params, { exclude: METHODS_EXL });
78
+ throughExecProps(element);
79
+ throughUpdatedExec(element, { ignore: UPDATE_DEFAULT_OPTIONS });
80
+ throughUpdatedDefine(element);
81
+ if (!options.isForced && !options.preventListeners) {
82
+ triggerEventOn("beforeClassAssign", element, options);
83
+ }
84
+ if (!ref.__if)
85
+ return false;
86
+ if (!node) {
87
+ return;
88
+ }
89
+ const {
90
+ preventUpdate,
91
+ preventDefineUpdate,
92
+ preventContentUpdate,
93
+ preventStateUpdate,
94
+ preventRecursive,
95
+ preventUpdateListener,
96
+ preventUpdateAfter,
97
+ preventUpdateAfterCount
98
+ } = options;
99
+ if (preventUpdateAfter) {
100
+ if (isNumber(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount)
101
+ return;
102
+ else if (options.preventUpdateAfterCount === void 0)
103
+ options.preventUpdateAfterCount = 1;
104
+ else
105
+ options.preventUpdateAfterCount++;
106
+ }
107
+ for (const param in element) {
108
+ const prop = element[param];
109
+ if (element.Iframe && element.Overlay && element.ComponentFrameCanvas && param === "Iframe") {
110
+ console.log("isframe");
111
+ }
112
+ if (!Object.hasOwnProperty.call(element, param))
113
+ continue;
114
+ const isInPreventUpdate = isArray(preventUpdate) && preventUpdate.includes(param);
115
+ const isInPreventDefineUpdate = isArray(preventDefineUpdate) && preventDefineUpdate.includes(param);
116
+ const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection;
117
+ if (isUndefined(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || preventContentUpdate && param === "content" && !hasCollection || (preventStateUpdate && param) === "state" || isMethod(param, element) || isObject(REGISTRY[param]) || isVariant(param))
118
+ continue;
119
+ if (preventStateUpdate === "once")
120
+ options.preventStateUpdate = false;
121
+ const isElement = applyParam(param, element, options);
122
+ if (isElement) {
123
+ const { hasDefine, hasContextDefine } = isElement;
124
+ const canUpdate = isObject(prop) && !hasDefine && !hasContextDefine && !preventRecursive;
125
+ if (!canUpdate)
126
+ continue;
127
+ const lazyLoad = element.props.lazyLoad || options.lazyLoad;
128
+ if (options.onEachUpdate) {
129
+ options.onEachUpdate(param, element, element.state, element.context);
130
+ }
131
+ const childUpdateCall = () => update.call(prop, params[prop], {
132
+ ...options,
133
+ currentSnapshot: snapshotOnCallee,
134
+ calleeElement
135
+ });
136
+ lazyLoad ? window.requestAnimationFrame(() => childUpdateCall()) : childUpdateCall();
137
+ }
138
+ }
139
+ if (!preventUpdateListener)
140
+ triggerEventOn("update", element, options);
141
+ };
142
+ const captureSnapshot = (element, options) => {
143
+ const ref = element.__ref;
144
+ const { currentSnapshot, calleeElement } = options;
145
+ const isCallee = calleeElement === element;
146
+ if (!calleeElement || isCallee) {
147
+ const createdStanpshot = snapshot.snapshotId();
148
+ ref.__currentSnapshot = createdStanpshot;
149
+ return [createdStanpshot, element];
150
+ }
151
+ const snapshotOnCallee = calleeElement.__ref.__currentSnapshot;
152
+ if (currentSnapshot < snapshotOnCallee) {
153
+ return [snapshotOnCallee, calleeElement, true];
154
+ }
155
+ return [snapshotOnCallee, calleeElement];
156
+ };
157
+ const checkIfOnUpdate = (element, parent, options) => {
158
+ var _a, _b, _c;
159
+ if (!isFunction(element.if) && !isFunction((_a = element.props) == null ? void 0 : _a.if) || !parent)
160
+ return;
161
+ const ref = element.__ref;
162
+ const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(element, element.state, element.context, options);
163
+ const itWasFalse = ref.__if !== true;
164
+ if (ifPassed) {
165
+ ref.__if = true;
166
+ if (itWasFalse) {
167
+ delete element.__hash;
168
+ delete element.__text;
169
+ delete element.extend;
170
+ if (!ref.__hasRootState) {
171
+ delete element.state;
172
+ }
173
+ if (ref.__state) {
174
+ element.state = ref.__state;
175
+ } else if (!ref.__hasRootState) {
176
+ delete element.state;
177
+ }
178
+ if (element.node) {
179
+ element.node.remove();
180
+ delete element.node;
181
+ }
182
+ const contentKey = ref.contentElementKey;
183
+ if (element.$collection || element.$stateCollection || element.$propsCollection) {
184
+ element.removeContent();
185
+ } else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep)
186
+ element[contentKey] = element[contentKey].parseDeep();
187
+ const previousElement = element.previousElement();
188
+ const previousNode = previousElement == null ? void 0 : previousElement.node;
189
+ const hasPrevious = previousNode == null ? void 0 : previousNode.parentNode;
190
+ const nextElement = element.nextElement();
191
+ const nextNode = nextElement == null ? void 0 : nextElement.node;
192
+ const hasNext = nextNode == null ? void 0 : nextNode.parentNode;
193
+ const attachOptions = (hasPrevious || hasNext) && {
194
+ position: hasPrevious ? "after" : hasNext ? "before" : null,
195
+ node: hasPrevious && previousNode || hasNext && nextNode
196
+ };
197
+ delete element.__ref;
198
+ delete element.parent;
199
+ const createdElement = create(element, parent, element.key, OPTIONS.create, attachOptions);
200
+ if (options.preventUpdate !== true && element.on && isFunction(element.on.update)) {
201
+ applyEvent(element.on.update, createdElement, createdElement.state);
202
+ }
203
+ return createdElement;
204
+ }
205
+ } else if (element.node && !ifPassed) {
206
+ element.node.remove();
207
+ delete ref.__if;
208
+ }
209
+ };
210
+ const inheritStateUpdates = (element, options) => {
211
+ const { __ref: ref } = element;
212
+ const stateKey = ref.__state;
213
+ const { parent, state } = element;
214
+ const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } = options;
215
+ if (preventUpdateTriggerStateUpdate)
216
+ return;
217
+ if (!stateKey && !ref.__hasRootState) {
218
+ element.state = parent && parent.state || {};
219
+ return;
220
+ }
221
+ const shouldForceFunctionState = isFunction(stateKey) && !isHoisted && execStateFunction;
222
+ if (shouldForceFunctionState) {
223
+ const execState = exec(stateKey, element);
224
+ state.set(execState, { ...options, preventUpdate: true, preventStateUpdateListener: false, updatedByStateFunction: true });
225
+ return;
226
+ }
227
+ const keyInParentState = findInheritedState(element, element.parent);
228
+ if (!keyInParentState || options.preventInheritedStateUpdate)
229
+ return;
230
+ if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
231
+ const initStateReturns = triggerEventOnUpdate("beforeStateUpdate", keyInParentState, element, options);
232
+ if (initStateReturns === false)
233
+ return element;
234
+ }
235
+ const newState = createStateUpdate(element, parent, options);
236
+ if (!options.preventStateUpdateListener && !options.preventListeners) {
237
+ triggerEventOnUpdate("stateUpdate", newState.parse(), element, options);
238
+ }
239
+ };
240
+ const createStateUpdate = (element, parent, options) => {
241
+ const __stateChildren = element.state.__children;
242
+ const newState = createState(element, parent);
243
+ element.state = newState;
244
+ for (const child in __stateChildren) {
245
+ if (newState[child])
246
+ newState.__children[child] = __stateChildren[child];
247
+ Object.getPrototypeOf(__stateChildren[child]).parent = newState;
248
+ }
249
+ return newState;
250
+ };
251
+ var update_default = update;
252
+ export {
253
+ update_default as default,
254
+ update
255
+ };
@@ -0,0 +1,25 @@
1
+ import { isFunction } from "@domql/utils";
2
+ import { REGISTRY } from "../mixins/index.js";
3
+ const applyParam = (param, element, options) => {
4
+ const { node, context, __ref: ref } = element;
5
+ const prop = element[param];
6
+ const { onlyUpdate } = options;
7
+ const DOMQLProperty = REGISTRY[param];
8
+ const DOMQLPropertyFromContext = context && context.registry && context.registry[param];
9
+ const isGlobalTransformer = DOMQLPropertyFromContext || DOMQLProperty;
10
+ const hasDefine = element.define && element.define[param];
11
+ const hasContextDefine = context && context.define && context.define[param];
12
+ if (!ref.__if)
13
+ return;
14
+ const hasOnlyUpdate = onlyUpdate ? onlyUpdate === param || element.lookup(onlyUpdate) : true;
15
+ if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
16
+ if (isFunction(isGlobalTransformer)) {
17
+ isGlobalTransformer(prop, element, node, options);
18
+ return;
19
+ }
20
+ }
21
+ return { hasDefine, hasContextDefine };
22
+ };
23
+ export {
24
+ applyParam
25
+ };
@@ -0,0 +1,65 @@
1
+ import {
2
+ isObject,
3
+ isString,
4
+ overwriteDeep,
5
+ checkIfKeyIsComponent,
6
+ addAdditionalExtend,
7
+ hasVariantProp,
8
+ isVariant
9
+ } from "@domql/utils";
10
+ import { applyExtend } from "../extend.js";
11
+ import { REGISTRY } from "../mixins/index.js";
12
+ const createValidDomqlObjectFromSugar = (el, parent, key, options) => {
13
+ const newElem = {
14
+ props: {},
15
+ define: {}
16
+ };
17
+ for (const k in el) {
18
+ const value = el[k];
19
+ const isComponent = checkIfKeyIsComponent(k);
20
+ const isRegistry = REGISTRY[k];
21
+ const allowedKeys = ["data", "state", "attr", "if"];
22
+ if (isComponent || isRegistry || allowedKeys.includes(k)) {
23
+ newElem[k] = value;
24
+ } else {
25
+ newElem.props[k] = value;
26
+ }
27
+ }
28
+ return newElem;
29
+ };
30
+ const overwriteVariant = (element, variant, variantProps) => {
31
+ let variantElement = element[variant];
32
+ if (!variantElement)
33
+ return;
34
+ const props = isObject(variantProps) ? variantProps : {};
35
+ if (isString(variantElement)) {
36
+ variantElement = {
37
+ extend: [{ props }, variantElement]
38
+ };
39
+ } else if (variantElement.extend) {
40
+ variantElement = addAdditionalExtend({ props }, variantElement);
41
+ }
42
+ const extendedVariant = applyExtend(variantElement, element.parent);
43
+ const { parent, ...rest } = extendedVariant;
44
+ return overwriteDeep(element, rest);
45
+ };
46
+ const applyVariant = (element) => {
47
+ const { props } = element;
48
+ if (!hasVariantProp(element))
49
+ return element;
50
+ const { variant } = props;
51
+ overwriteVariant(element, `.${variant}`);
52
+ const elKeys = Object.keys(element).filter((key) => isVariant(key));
53
+ elKeys.forEach((variant2) => {
54
+ const slicedVariantElementKey = variant2.slice(1);
55
+ const variantElementProps = props[slicedVariantElementKey];
56
+ if (variantElementProps)
57
+ overwriteVariant(element, variant2, variantElementProps);
58
+ });
59
+ return element;
60
+ };
61
+ export {
62
+ applyVariant,
63
+ createValidDomqlObjectFromSugar,
64
+ overwriteVariant
65
+ };
@@ -0,0 +1,122 @@
1
+ import { isArray, isFunction, isObject, isString, deepClone } from "@domql/utils";
2
+ const ENV = "development";
3
+ const generateHash = () => Math.random().toString(36).substring(2);
4
+ const extendStackRegistry = {};
5
+ const extendCachedRegistry = {};
6
+ const getHashedExtend = (extend) => {
7
+ return extendStackRegistry[extend.__hash];
8
+ };
9
+ const setHashedExtend = (extend, stack) => {
10
+ const hash = generateHash();
11
+ if (!isString(extend)) {
12
+ extend.__hash = hash;
13
+ }
14
+ extendStackRegistry[hash] = stack;
15
+ return stack;
16
+ };
17
+ const getExtendStackRegistry = (extend, stack) => {
18
+ if (extend.__hash) {
19
+ return stack.concat(getHashedExtend(extend));
20
+ }
21
+ return setHashedExtend(extend, stack);
22
+ };
23
+ const extractArrayExtend = (extend, stack, context) => {
24
+ extend.forEach((each) => flattenExtend(each, stack, context));
25
+ return stack;
26
+ };
27
+ const deepExtend = (extend, stack, context) => {
28
+ const extendOflattenExtend = extend.extend;
29
+ if (extendOflattenExtend) {
30
+ flattenExtend(extendOflattenExtend, stack, context);
31
+ }
32
+ return stack;
33
+ };
34
+ const flattenExtend = (extend, stack, context) => {
35
+ if (!extend)
36
+ return stack;
37
+ if (isArray(extend))
38
+ return extractArrayExtend(extend, stack, context);
39
+ if (isString(extend))
40
+ extend = fallbackStringExtend(extend, context);
41
+ stack.push(extend);
42
+ if (extend.extend)
43
+ deepExtend(extend, stack, context);
44
+ return stack;
45
+ };
46
+ const deepMergeExtend = (element, extend) => {
47
+ for (const e in extend) {
48
+ if (["parent", "node", "__element"].indexOf(e) > -1)
49
+ continue;
50
+ const elementProp = element[e];
51
+ const extendProp = extend[e];
52
+ if (elementProp === void 0) {
53
+ element[e] = extendProp;
54
+ } else if (isObject(elementProp) && isObject(extendProp)) {
55
+ deepMergeExtend(elementProp, extendProp);
56
+ } else if (isArray(elementProp) && isArray(extendProp)) {
57
+ element[e] = elementProp.concat(extendProp);
58
+ } else if (isArray(elementProp) && isObject(extendProp)) {
59
+ const obj = deepMergeExtend({}, elementProp);
60
+ element[e] = deepMergeExtend(obj, extendProp);
61
+ } else if (elementProp === void 0 && isFunction(extendProp)) {
62
+ element[e] = extendProp;
63
+ }
64
+ }
65
+ return element;
66
+ };
67
+ const cloneAndMergeArrayExtend = (stack) => {
68
+ return stack.reduce((a, c) => {
69
+ return deepMergeExtend(a, deepClone(c));
70
+ }, {});
71
+ };
72
+ const fallbackStringExtend = (extend, context, options = {}, variant) => {
73
+ const COMPONENTS = context && context.components || options.components;
74
+ const PAGES = context && context.pages || options.pages;
75
+ if (isString(extend)) {
76
+ const componentExists = COMPONENTS && (COMPONENTS[extend + "." + variant] || COMPONENTS[extend] || COMPONENTS["smbls." + extend]);
77
+ const pageExists = PAGES && extend.startsWith("/") && PAGES[extend];
78
+ if (componentExists)
79
+ return componentExists;
80
+ else if (pageExists)
81
+ return pageExists;
82
+ else {
83
+ if (options.verbose && (ENV === "test" || ENV === "development")) {
84
+ console.warn("Extend is string but component was not found:", extend);
85
+ }
86
+ return {};
87
+ }
88
+ }
89
+ return extend;
90
+ };
91
+ const jointStacks = (extendStack, childExtendStack) => {
92
+ return [].concat(extendStack.slice(0, 1)).concat(childExtendStack.slice(0, 1)).concat(extendStack.slice(1)).concat(childExtendStack.slice(1));
93
+ };
94
+ const getExtendStack = (extend, context) => {
95
+ if (!extend)
96
+ return [];
97
+ if (extend.__hash)
98
+ return getHashedExtend(extend) || [];
99
+ const stack = flattenExtend(extend, [], context);
100
+ return getExtendStackRegistry(extend, stack);
101
+ };
102
+ const getExtendMerged = (extend) => {
103
+ const stack = getExtendStack(extend);
104
+ return cloneAndMergeArrayExtend(stack);
105
+ };
106
+ export {
107
+ cloneAndMergeArrayExtend,
108
+ deepExtend,
109
+ deepMergeExtend,
110
+ extendCachedRegistry,
111
+ extendStackRegistry,
112
+ extractArrayExtend,
113
+ fallbackStringExtend,
114
+ flattenExtend,
115
+ generateHash,
116
+ getExtendMerged,
117
+ getExtendStack,
118
+ getExtendStackRegistry,
119
+ getHashedExtend,
120
+ jointStacks,
121
+ setHashedExtend
122
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./object.js";
2
+ export * from "./extendUtils.js";
3
+ export * from "./component.js";
@@ -0,0 +1,159 @@
1
+ import { isArray, isObject, isObjectLike, joinArrays, deepClone } from "@domql/utils";
2
+ import { IGNORE_PROPS_PARAMS } from "../props/index.js";
3
+ const IGNORE_STATE_PARAMS = [
4
+ "update",
5
+ "parse",
6
+ "clean",
7
+ "create",
8
+ "destroy",
9
+ "add",
10
+ "toggle",
11
+ "remove",
12
+ "apply",
13
+ "set",
14
+ "reset",
15
+ "replace",
16
+ "quietReplace",
17
+ "quietUpdate",
18
+ "applyReplace",
19
+ "applyFunction",
20
+ "rootUpdate",
21
+ "parentUpdate",
22
+ "parent",
23
+ "__element",
24
+ "__depends",
25
+ "__ref",
26
+ "__children",
27
+ "root",
28
+ "setByPath",
29
+ "setPathCollection",
30
+ "removeByPath",
31
+ "removePathCollection",
32
+ "getByPath"
33
+ ];
34
+ const METHODS = [
35
+ "set",
36
+ "reset",
37
+ "update",
38
+ "remove",
39
+ "updateContent",
40
+ "removeContent",
41
+ "lookup",
42
+ "lookdown",
43
+ "lookdownAll",
44
+ "getRef",
45
+ "getPath",
46
+ "setNodeStyles",
47
+ "spotByPath",
48
+ "keys",
49
+ "parse",
50
+ "setProps",
51
+ "parseDeep",
52
+ "variables",
53
+ "if",
54
+ "log",
55
+ "nextElement",
56
+ "previousElement"
57
+ ];
58
+ const METHODS_EXL = joinArrays(
59
+ ["node", "state", "context", "extend", "__element"],
60
+ METHODS,
61
+ IGNORE_STATE_PARAMS,
62
+ IGNORE_PROPS_PARAMS
63
+ );
64
+ const deepMerge = (element, extend, exclude = METHODS_EXL) => {
65
+ for (const e in extend) {
66
+ if (exclude.includes(e))
67
+ continue;
68
+ const elementProp = element[e];
69
+ const extendProp = extend[e];
70
+ if (elementProp === void 0) {
71
+ element[e] = extendProp;
72
+ } else if (isObjectLike(elementProp) && isObject(extendProp)) {
73
+ deepMerge(elementProp, extendProp);
74
+ }
75
+ }
76
+ return element;
77
+ };
78
+ const clone = (obj, exclude = METHODS_EXL) => {
79
+ const o = {};
80
+ for (const e in obj) {
81
+ if (exclude.includes(e))
82
+ continue;
83
+ o[e] = obj[e];
84
+ }
85
+ return o;
86
+ };
87
+ const overwrite = (element, params, options) => {
88
+ const changes = {};
89
+ const { __ref } = element;
90
+ const { __exec, __cached } = __ref;
91
+ for (const e in params) {
92
+ if (e === "props" || e === "state" || e === "__ref")
93
+ continue;
94
+ const elementProp = element[e];
95
+ const paramsProp = params[e];
96
+ if (paramsProp !== void 0) {
97
+ __cached[e] = changes[e] = elementProp;
98
+ element[e] = paramsProp;
99
+ }
100
+ if (options.cleanExec)
101
+ delete __exec[e];
102
+ }
103
+ return changes;
104
+ };
105
+ const overwriteShallow = (obj, params, exclude = METHODS_EXL) => {
106
+ for (const e in params) {
107
+ if (exclude.includes(e))
108
+ continue;
109
+ obj[e] = params[e];
110
+ }
111
+ return obj;
112
+ };
113
+ const overwriteDeep = (obj, params, exclude = METHODS_EXL) => {
114
+ for (const e in params) {
115
+ if (exclude.includes(e))
116
+ continue;
117
+ const objProp = obj[e];
118
+ const paramsProp = params[e];
119
+ if (isObjectLike(objProp) && isObjectLike(paramsProp)) {
120
+ overwriteDeep(objProp, paramsProp);
121
+ } else if (paramsProp !== void 0) {
122
+ obj[e] = paramsProp;
123
+ }
124
+ }
125
+ return obj;
126
+ };
127
+ const mergeIfExisted = (a, b) => {
128
+ if (isObjectLike(a) && isObjectLike(b))
129
+ return deepMerge(a, b);
130
+ return a || b;
131
+ };
132
+ const mergeArray = (arr, exclude = ["parent", "node", "__element", "state", "context", "__ref"]) => {
133
+ return arr.reduce((a, c) => deepMerge(a, deepClone(c, { exclude })), {});
134
+ };
135
+ const mergeAndCloneIfArray = (obj) => {
136
+ return isArray(obj) ? mergeArray(obj) : deepClone(obj);
137
+ };
138
+ const flattenRecursive = (param, prop, stack = []) => {
139
+ const objectized = mergeAndCloneIfArray(param);
140
+ stack.push(objectized);
141
+ const extendOfExtend = objectized[prop];
142
+ if (extendOfExtend)
143
+ flattenRecursive(extendOfExtend, prop, stack);
144
+ delete objectized[prop];
145
+ return stack;
146
+ };
147
+ export {
148
+ METHODS,
149
+ METHODS_EXL,
150
+ clone,
151
+ deepMerge,
152
+ flattenRecursive,
153
+ mergeAndCloneIfArray,
154
+ mergeArray,
155
+ mergeIfExisted,
156
+ overwrite,
157
+ overwriteDeep,
158
+ overwriteShallow
159
+ };