@domql/element 3.1.2 → 3.2.7

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 (135) hide show
  1. package/README.md +4 -6
  2. package/children.js +45 -18
  3. package/create.js +58 -46
  4. package/define.js +1 -1
  5. package/dist/cjs/children.js +43 -13
  6. package/dist/cjs/create.js +57 -27
  7. package/dist/cjs/define.js +1 -1
  8. package/dist/cjs/event/animationFrame.js +96 -0
  9. package/dist/cjs/event/can.js +28 -0
  10. package/dist/cjs/event/index.js +20 -0
  11. package/dist/cjs/event/on.js +84 -0
  12. package/dist/cjs/event/store.js +27 -0
  13. package/dist/cjs/extend.js +88 -0
  14. package/dist/cjs/index.js +9 -6
  15. package/dist/cjs/iterate.js +89 -33
  16. package/dist/cjs/methods/set.js +5 -0
  17. package/dist/cjs/methods/v2.js +1 -1
  18. package/dist/cjs/mixins/attr.js +3 -2
  19. package/dist/cjs/mixins/classList.js +11 -1
  20. package/dist/cjs/mixins/content.js +72 -0
  21. package/dist/cjs/mixins/html.js +1 -2
  22. package/dist/cjs/mixins/registry.js +2 -2
  23. package/dist/cjs/mixins/scope.js +1 -1
  24. package/dist/cjs/mixins/state.js +4 -4
  25. package/dist/cjs/mixins/style.js +11 -2
  26. package/dist/cjs/mixins/text.js +9 -5
  27. package/dist/cjs/node.js +22 -19
  28. package/dist/cjs/render/append.js +72 -0
  29. package/dist/cjs/render/cache.js +80 -0
  30. package/dist/cjs/render/create.js +25 -0
  31. package/dist/cjs/render/index.js +20 -0
  32. package/dist/cjs/set.js +33 -40
  33. package/dist/cjs/update.js +100 -69
  34. package/dist/cjs/utils/applyParam.js +7 -7
  35. package/dist/cjs/utils/extendUtils.js +132 -0
  36. package/dist/cjs/utils/index.js +2 -0
  37. package/dist/cjs/utils/propEvents.js +56 -0
  38. package/dist/esm/children.js +44 -14
  39. package/dist/esm/create.js +58 -27
  40. package/dist/esm/define.js +1 -1
  41. package/dist/esm/event/animationFrame.js +76 -0
  42. package/dist/esm/event/can.js +8 -0
  43. package/dist/esm/event/index.js +3 -0
  44. package/dist/esm/event/on.js +64 -0
  45. package/dist/esm/event/store.js +7 -0
  46. package/dist/esm/extend.js +74 -0
  47. package/dist/esm/index.js +8 -6
  48. package/dist/esm/iterate.js +90 -35
  49. package/dist/esm/methods/set.js +10 -0
  50. package/dist/esm/methods/v2.js +1 -1
  51. package/dist/esm/mixins/attr.js +4 -3
  52. package/dist/esm/mixins/classList.js +11 -1
  53. package/dist/esm/mixins/content.js +52 -0
  54. package/dist/esm/mixins/html.js +1 -2
  55. package/dist/esm/mixins/registry.js +1 -1
  56. package/dist/esm/mixins/scope.js +1 -1
  57. package/dist/esm/mixins/state.js +5 -5
  58. package/dist/esm/mixins/style.js +12 -3
  59. package/dist/esm/mixins/text.js +10 -6
  60. package/dist/esm/node.js +22 -19
  61. package/dist/esm/render/append.js +52 -0
  62. package/dist/esm/render/cache.js +60 -0
  63. package/dist/esm/render/create.js +5 -0
  64. package/dist/esm/render/index.js +3 -0
  65. package/dist/esm/set.js +34 -41
  66. package/dist/esm/update.js +100 -71
  67. package/dist/esm/utils/applyParam.js +8 -8
  68. package/dist/esm/utils/extendUtils.js +119 -0
  69. package/dist/esm/utils/index.js +1 -0
  70. package/dist/esm/utils/propEvents.js +36 -0
  71. package/dist/iife/index.js +4718 -0
  72. package/extend.js +95 -0
  73. package/index.js +9 -6
  74. package/iterate.js +100 -38
  75. package/node.js +25 -23
  76. package/package.json +44 -20
  77. package/set.js +28 -32
  78. package/update.js +111 -82
  79. package/__tests__/checkIfOnUpdate.test.js +0 -103
  80. package/__tests__/children.test.js +0 -213
  81. package/__tests__/define.test.js +0 -75
  82. package/__tests__/inheritStateUpdates.test.js +0 -79
  83. package/__tests__/renderElement.test.js +0 -131
  84. package/__tests__/resetElement.test.js +0 -44
  85. package/__tests__/set.test.js +0 -316
  86. package/__tests__/throughExecProps.test.js +0 -86
  87. package/__tests__/throughInitialDefine.test.js +0 -104
  88. package/__tests__/throughInitialExec.test.js +0 -92
  89. package/__tests__/throughUpdatedDefine.test.js +0 -92
  90. package/__tests__/throughUpdatedExec.test.js +0 -110
  91. package/__tests__/tree.test.js +0 -15
  92. package/__tests__/update.test.js +0 -256
  93. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +0 -73
  94. package/dist/cjs/__tests__/children.test.js +0 -177
  95. package/dist/cjs/__tests__/define.test.js +0 -75
  96. package/dist/cjs/__tests__/inheritStateUpdates.test.js +0 -62
  97. package/dist/cjs/__tests__/renderElement.test.js +0 -138
  98. package/dist/cjs/__tests__/resetElement.test.js +0 -35
  99. package/dist/cjs/__tests__/set.test.js +0 -256
  100. package/dist/cjs/__tests__/throughExecProps.test.js +0 -62
  101. package/dist/cjs/__tests__/throughInitialDefine.test.js +0 -79
  102. package/dist/cjs/__tests__/throughInitialExec.test.js +0 -73
  103. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +0 -69
  104. package/dist/cjs/__tests__/throughUpdatedExec.test.js +0 -84
  105. package/dist/cjs/__tests__/tree.test.js +0 -11
  106. package/dist/cjs/__tests__/update.test.js +0 -222
  107. package/dist/cjs/package.json +0 -4
  108. package/dist/esm/__tests__/checkIfOnUpdate.test.js +0 -73
  109. package/dist/esm/__tests__/children.test.js +0 -177
  110. package/dist/esm/__tests__/define.test.js +0 -53
  111. package/dist/esm/__tests__/inheritStateUpdates.test.js +0 -62
  112. package/dist/esm/__tests__/renderElement.test.js +0 -116
  113. package/dist/esm/__tests__/resetElement.test.js +0 -35
  114. package/dist/esm/__tests__/set.test.js +0 -256
  115. package/dist/esm/__tests__/throughExecProps.test.js +0 -62
  116. package/dist/esm/__tests__/throughInitialDefine.test.js +0 -79
  117. package/dist/esm/__tests__/throughInitialExec.test.js +0 -73
  118. package/dist/esm/__tests__/throughUpdatedDefine.test.js +0 -69
  119. package/dist/esm/__tests__/throughUpdatedExec.test.js +0 -84
  120. package/dist/esm/__tests__/tree.test.js +0 -11
  121. package/dist/esm/__tests__/update.test.js +0 -222
  122. package/methods/set.js +0 -63
  123. package/methods/v2.js +0 -83
  124. package/mixins/attr.js +0 -32
  125. package/mixins/classList.js +0 -54
  126. package/mixins/data.js +0 -26
  127. package/mixins/html.js +0 -21
  128. package/mixins/index.js +0 -23
  129. package/mixins/registry.js +0 -46
  130. package/mixins/scope.js +0 -23
  131. package/mixins/state.js +0 -19
  132. package/mixins/style.js +0 -16
  133. package/mixins/text.js +0 -26
  134. package/utils/applyParam.js +0 -34
  135. package/utils/index.js +0 -3
@@ -33,7 +33,7 @@ __export(update_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(update_exports);
35
35
  var import_utils = require("@domql/utils");
36
- var import_event = require("@domql/event");
36
+ var import_event = require("./event/index.js");
37
37
  var import_state = require("@domql/state");
38
38
  var import_create = require("./create.js");
39
39
  var import_iterate = require("./iterate.js");
@@ -50,13 +50,8 @@ const UPDATE_DEFAULT_OPTIONS = {
50
50
  calleeElement: false,
51
51
  exclude: import_utils2.METHODS_EXL
52
52
  };
53
- const update = async function(params = {}, opts) {
54
- const calleeElementCache = opts == null ? void 0 : opts.calleeElement;
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
- );
59
- options.calleeElement = calleeElementCache;
53
+ const update = function(params = {}, opts) {
54
+ const options = (0, import_utils.isObject)(opts) ? { ...UPDATE_DEFAULT_OPTIONS, ...opts } : { ...UPDATE_DEFAULT_OPTIONS };
60
55
  const element = this;
61
56
  let ref = element.__ref;
62
57
  if (!ref) ref = element.__ref = {};
@@ -66,7 +61,7 @@ const update = async function(params = {}, opts) {
66
61
  );
67
62
  if (snapshotHasUpdated) return;
68
63
  if (!options.preventListeners) {
69
- await (0, import_event.triggerEventOnUpdate)("startUpdate", params, element, options);
64
+ (0, import_event.triggerEventOnUpdate)("startUpdate", params, element, options);
70
65
  }
71
66
  const { parent, node, key } = element;
72
67
  const { exclude, preventInheritAtCurrentState } = options;
@@ -78,37 +73,38 @@ const update = async function(params = {}, opts) {
78
73
  params = { text: params };
79
74
  }
80
75
  params = import_utils.propertizeUpdate.call(element, params);
81
- const inheritState = await inheritStateUpdates(element, options);
76
+ const inheritState = inheritStateUpdates(element, options);
82
77
  if (inheritState === false) return;
83
- const ifFails = await checkIfOnUpdate(element, parent, options);
78
+ const ifFails = checkIfOnUpdate(element, parent, options);
84
79
  if (ifFails) return;
85
80
  if (ref.__if && !options.preventPropsUpdate) {
86
81
  const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
87
- const hasFunctionInProps = ref.__propsStack.filter((v) => (0, import_utils.isFunction)(v));
88
- const props = params.props || hasParentProps || hasFunctionInProps.length;
82
+ const hasFunctionInProps = ref.__propsStack.some(import_utils.isFunction);
83
+ const props = params.props || hasParentProps || hasFunctionInProps;
89
84
  if (props) (0, import_utils.updateProps)(props, element, parent);
90
85
  }
91
86
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
92
- const simulate = { ...params, ...element };
93
- const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
94
- "beforeUpdate",
95
- params,
96
- simulate,
97
- options
98
- );
99
- if (beforeUpdateReturns === false) return element;
87
+ const hasBeforeUpdate = element.on?.beforeUpdate || element.props?.onBeforeUpdate;
88
+ if (hasBeforeUpdate) {
89
+ const simulate = { ...params, ...element };
90
+ const beforeUpdateReturns = (0, import_event.triggerEventOnUpdate)(
91
+ "beforeUpdate",
92
+ params,
93
+ simulate,
94
+ options
95
+ );
96
+ if (beforeUpdateReturns === false) return element;
97
+ }
100
98
  }
101
99
  (0, import_utils.overwriteDeep)(element, params);
102
100
  (0, import_iterate.throughExecProps)(element);
103
101
  (0, import_iterate.throughUpdatedExec)(element, { ignore: UPDATE_DEFAULT_OPTIONS });
104
102
  (0, import_iterate.throughUpdatedDefine)(element);
105
103
  if (!options.isForced && !options.preventListeners) {
106
- await (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
104
+ (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
107
105
  }
108
106
  if (!ref.__if) return false;
109
- if (!node) {
110
- return;
111
- }
107
+ if (!node) return;
112
108
  const {
113
109
  preventUpdate,
114
110
  preventDefineUpdate,
@@ -126,16 +122,20 @@ const update = async function(params = {}, opts) {
126
122
  options.preventUpdateAfterCount = 1;
127
123
  } else options.preventUpdateAfterCount++;
128
124
  }
125
+ const preventUpdateSet = (0, import_utils.isArray)(preventUpdate) ? new Set(preventUpdate) : null;
126
+ const preventDefineUpdateSet = (0, import_utils.isArray)(preventDefineUpdate) ? new Set(preventDefineUpdate) : null;
129
127
  for (const param in element) {
130
128
  const prop = element[param];
131
- if (!Object.hasOwnProperty.call(element, param)) continue;
132
- const isInPreventUpdate = (0, import_utils.isArray)(preventUpdate) && preventUpdate.includes(param);
133
- const isInPreventDefineUpdate = (0, import_utils.isArray)(preventDefineUpdate) && preventDefineUpdate.includes(param);
134
- 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])) {
129
+ if (!Object.prototype.hasOwnProperty.call(element, param)) continue;
130
+ const isInPreventUpdate = preventUpdateSet && preventUpdateSet.has(param);
131
+ const isInPreventDefineUpdate = preventDefineUpdateSet && preventDefineUpdateSet.has(param);
132
+ const isRootEventHandler = (0, import_utils.isFunction)(prop) && param.length > 2 && param.charCodeAt(0) === 111 && param.charCodeAt(1) === 110 && // 'on'
133
+ param.charCodeAt(2) >= 65 && param.charCodeAt(2) <= 90;
134
+ if ((0, import_utils.isUndefined)(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || preventStateUpdate && param === "state" || (0, import_utils.isMethod)(param, element) || isRootEventHandler || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
135
135
  continue;
136
136
  }
137
137
  if (preventStateUpdate === "once") options.preventStateUpdate = false;
138
- const isElement = await (0, import_applyParam.applyParam)(param, element, options);
138
+ const isElement = (0, import_applyParam.applyParam)(param, element, options);
139
139
  if (isElement) {
140
140
  const { hasDefine, hasContextDefine } = isElement;
141
141
  const canUpdate = (0, import_utils.isObject)(prop) && !hasDefine && !hasContextDefine && !preventRecursive;
@@ -144,39 +144,79 @@ const update = async function(params = {}, opts) {
144
144
  if (options.onEachUpdate) {
145
145
  options.onEachUpdate(param, element, element.state, element.context);
146
146
  }
147
- const childUpdateCall = async () => await update.call(prop, params[prop], {
147
+ const childParams = params[param];
148
+ if (childParams === void 0 && !options.isForced) continue;
149
+ const childUpdateCall = () => update.call(prop, childParams, {
148
150
  ...options,
149
151
  currentSnapshot: snapshotOnCallee,
150
152
  calleeElement
151
153
  });
152
154
  if (lazyLoad) {
153
- import_utils.window.requestAnimationFrame(async () => {
154
- await childUpdateCall();
155
- if (!options.preventUpdateListener) {
156
- await (0, import_event.triggerEventOn)("lazyLoad", element, options);
155
+ import_utils.window.requestAnimationFrame(() => {
156
+ childUpdateCall();
157
+ if (!options.preventUpdateListener && !options.preventListeners) {
158
+ (0, import_event.triggerEventOn)("lazyLoad", element, options);
157
159
  }
158
160
  });
159
- } else await childUpdateCall();
161
+ } else childUpdateCall();
160
162
  }
161
163
  }
162
164
  if (!preventContentUpdate) {
163
- const children = params.children || element.children;
164
- const content = children ? await (0, import_children.default)(children, element, opts) : element.children || params.content;
165
- if (content) {
166
- await (0, import_set.setContent)(content, element, options);
165
+ const contentKey = ref.contentElementKey || "content";
166
+ const existingContent = element[contentKey];
167
+ const childrenProp = params.children || element.children;
168
+ if (childrenProp) {
169
+ const content = (0, import_children.default)(childrenProp, element, opts);
170
+ if (content && !ref.__noChildrenDifference) {
171
+ (0, import_set.setContent)(content, element, options);
172
+ } else if (existingContent?.__ref && (0, import_utils.isFunction)(existingContent.update)) {
173
+ const lazyLoad = element.props?.lazyLoad || options.lazyLoad;
174
+ const contentUpdateCall = () => update.call(existingContent, params[contentKey], {
175
+ ...options,
176
+ currentSnapshot: snapshotOnCallee,
177
+ calleeElement
178
+ });
179
+ if (lazyLoad) {
180
+ import_utils.window.requestAnimationFrame(() => {
181
+ contentUpdateCall();
182
+ if (!options.preventUpdateListener && !options.preventListeners) {
183
+ (0, import_event.triggerEventOn)("lazyLoad", element, options);
184
+ }
185
+ });
186
+ } else contentUpdateCall();
187
+ }
188
+ } else if (existingContent?.__ref && (0, import_utils.isFunction)(existingContent.update)) {
189
+ const lazyLoad = element.props?.lazyLoad || options.lazyLoad;
190
+ const contentUpdateCall = () => update.call(existingContent, params[contentKey], {
191
+ ...options,
192
+ currentSnapshot: snapshotOnCallee,
193
+ calleeElement
194
+ });
195
+ if (lazyLoad) {
196
+ import_utils.window.requestAnimationFrame(() => {
197
+ contentUpdateCall();
198
+ if (!options.preventUpdateListener && !options.preventListeners) {
199
+ (0, import_event.triggerEventOn)("lazyLoad", element, options);
200
+ }
201
+ });
202
+ } else contentUpdateCall();
203
+ } else {
204
+ const content = element.children || params.content;
205
+ if (content) {
206
+ (0, import_set.setContent)(content, element, options);
207
+ }
167
208
  }
168
209
  }
169
- if (!preventUpdateListener) {
170
- await (0, import_event.triggerEventOn)("update", element, options);
210
+ if (!preventUpdateListener && !options.preventListeners) {
211
+ (0, import_event.triggerEventOn)("update", element, options);
171
212
  }
172
213
  };
173
- const checkIfOnUpdate = async (element, parent, options) => {
174
- var _a, _b, _c;
175
- if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent) {
214
+ const checkIfOnUpdate = (element, parent, options) => {
215
+ if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)(element.props?.if) || !parent) {
176
216
  return;
177
217
  }
178
218
  const ref = element.__ref;
179
- const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
219
+ const ifPassed = (element.if || element.props?.if)(
180
220
  element,
181
221
  element.state,
182
222
  element.context,
@@ -204,22 +244,22 @@ const checkIfOnUpdate = async (element, parent, options) => {
204
244
  const contentKey = ref.contentElementKey;
205
245
  if (element.children) {
206
246
  element.removeContent();
207
- } else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep) {
247
+ } else if (element[contentKey]?.parseDeep) {
208
248
  element[contentKey] = element[contentKey].parseDeep();
209
249
  }
210
250
  const previousElement = element.previousElement();
211
- const previousNode = previousElement == null ? void 0 : previousElement.node;
212
- const hasPrevious = previousNode == null ? void 0 : previousNode.parentNode;
251
+ const previousNode = previousElement?.node;
252
+ const hasPrevious = previousNode?.parentNode;
213
253
  const nextElement = element.nextElement();
214
- const nextNode = nextElement == null ? void 0 : nextElement.node;
215
- const hasNext = nextNode == null ? void 0 : nextNode.parentNode;
254
+ const nextNode = nextElement?.node;
255
+ const hasNext = nextNode?.parentNode;
216
256
  const attachOptions = (hasPrevious || hasNext) && {
217
257
  position: hasPrevious ? "after" : hasNext ? "before" : null,
218
258
  node: hasPrevious && previousNode || hasNext && nextNode
219
259
  };
220
260
  delete element.__ref;
221
261
  delete element.parent;
222
- const createdElement = await (0, import_create.create)(
262
+ const createdElement = (0, import_create.create)(
223
263
  element,
224
264
  parent,
225
265
  element.key,
@@ -227,11 +267,7 @@ const checkIfOnUpdate = async (element, parent, options) => {
227
267
  attachOptions
228
268
  );
229
269
  if (options.preventUpdate !== true && element.on && (0, import_utils.isFunction)(element.on.update)) {
230
- await (0, import_event.applyEvent)(
231
- element.on.update,
232
- createdElement,
233
- createdElement.state
234
- );
270
+ (0, import_event.applyEvent)(element.on.update, createdElement, createdElement.state);
235
271
  }
236
272
  return createdElement;
237
273
  }
@@ -240,14 +276,14 @@ const checkIfOnUpdate = async (element, parent, options) => {
240
276
  delete ref.__if;
241
277
  }
242
278
  };
243
- const inheritStateUpdates = async (element, options) => {
279
+ const inheritStateUpdates = (element, options) => {
244
280
  const { __ref: ref } = element;
245
281
  const stateKey = ref.__state;
246
282
  const { parent, state } = element;
247
283
  const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } = options;
248
284
  if (preventUpdateTriggerStateUpdate) return;
249
285
  if (!stateKey && !ref.__hasRootState) {
250
- element.state = parent && parent.state || {};
286
+ element.state = parent?.state || {};
251
287
  return;
252
288
  }
253
289
  const shouldForceFunctionState = (0, import_utils.isFunction)(stateKey) && !isHoisted && execStateFunction;
@@ -264,7 +300,7 @@ const inheritStateUpdates = async (element, options) => {
264
300
  const keyInParentState = (0, import_utils.findInheritedState)(element, element.parent);
265
301
  if (!keyInParentState || options.preventInheritedStateUpdate) return;
266
302
  if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
267
- const initStateReturns = await (0, import_event.triggerEventOnUpdate)(
303
+ const initStateReturns = (0, import_event.triggerEventOnUpdate)(
268
304
  "beforeStateUpdate",
269
305
  keyInParentState,
270
306
  element,
@@ -272,19 +308,14 @@ const inheritStateUpdates = async (element, options) => {
272
308
  );
273
309
  if (initStateReturns === false) return element;
274
310
  }
275
- const newState = await createStateUpdate(element, parent, options);
311
+ const newState = createStateUpdate(element, parent, options);
276
312
  if (!options.preventStateUpdateListener && !options.preventListeners) {
277
- await (0, import_event.triggerEventOnUpdate)(
278
- "stateUpdate",
279
- newState.parse(),
280
- element,
281
- options
282
- );
313
+ (0, import_event.triggerEventOnUpdate)("stateUpdate", newState.parse(), element, options);
283
314
  }
284
315
  };
285
- const createStateUpdate = async (element, parent, options) => {
316
+ const createStateUpdate = (element, parent, options) => {
286
317
  const __stateChildren = element.state.__children;
287
- const newState = await (0, import_state.createState)(element, parent);
318
+ const newState = (0, import_state.createState)(element, parent);
288
319
  element.state = newState;
289
320
  for (const child in __stateChildren) {
290
321
  if (newState[child]) newState.__children[child] = __stateChildren[child];
@@ -23,22 +23,22 @@ __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 = async (param, element, options) => {
26
+ const applyParam = (param, element, options) => {
27
27
  const { node, context, __ref: ref } = element;
28
- const prop = element[param];
28
+ const prop = (0, import_utils.exec)(element[param], element);
29
29
  const { onlyUpdate } = options;
30
30
  const DOMQLProperty = import_mixins.REGISTRY[param];
31
- const DOMQLPropertyFromContext = context && context.registry && context.registry[param];
31
+ const DOMQLPropertyFromContext = context?.registry?.[param];
32
32
  const isGlobalTransformer = DOMQLPropertyFromContext || DOMQLProperty;
33
- const hasDefine = element.define && element.define[param];
34
- const hasContextDefine = context && context.define && context.define[param];
33
+ const hasDefine = element.define?.[param];
34
+ const hasContextDefine = context?.define?.[param];
35
35
  if (!ref.__if) return;
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
- await isGlobalTransformer(prop, element, node, options);
40
- return;
39
+ isGlobalTransformer(prop, element, node, options);
41
40
  }
41
+ return;
42
42
  }
43
43
  return { hasDefine, hasContextDefine };
44
44
  };
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
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
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var extendUtils_exports = {};
20
+ __export(extendUtils_exports, {
21
+ cloneAndMergeArrayExtend: () => cloneAndMergeArrayExtend,
22
+ deepExtend: () => deepExtend,
23
+ deepMergeExtend: () => deepMergeExtend,
24
+ extendCachedRegistry: () => extendCachedRegistry,
25
+ extendStackRegistry: () => extendStackRegistry,
26
+ extractArrayExtend: () => extractArrayExtend,
27
+ fallbackStringExtend: () => fallbackStringExtend,
28
+ flattenExtend: () => flattenExtend,
29
+ generateHash: () => generateHash,
30
+ getExtendMerged: () => getExtendMerged,
31
+ getExtendStack: () => getExtendStack,
32
+ getExtendStackRegistry: () => getExtendStackRegistry,
33
+ getHashedExtend: () => getHashedExtend,
34
+ jointStacks: () => jointStacks,
35
+ setHashedExtend: () => setHashedExtend
36
+ });
37
+ module.exports = __toCommonJS(extendUtils_exports);
38
+ var import_utils = require("@domql/utils");
39
+ const generateHash = () => Math.random().toString(36).substring(2);
40
+ const extendStackRegistry = {};
41
+ const extendCachedRegistry = {};
42
+ const getHashedExtend = (extend) => {
43
+ return extendStackRegistry[extend.__hash];
44
+ };
45
+ const setHashedExtend = (extend, stack) => {
46
+ const hash = generateHash();
47
+ if (!(0, import_utils.isString)(extend)) {
48
+ extend.__hash = hash;
49
+ }
50
+ extendStackRegistry[hash] = stack;
51
+ return stack;
52
+ };
53
+ const getExtendStackRegistry = (extend, stack) => {
54
+ if (extend.__hash) {
55
+ return stack.concat(getHashedExtend(extend));
56
+ }
57
+ return setHashedExtend(extend, stack);
58
+ };
59
+ const extractArrayExtend = (extend, stack, context) => {
60
+ for (let i = 0; i < extend.length; i++) flattenExtend(extend[i], stack, context);
61
+ return stack;
62
+ };
63
+ const deepExtend = (extend, stack, context) => {
64
+ const extendOflattenExtend = extend.extend;
65
+ if (extendOflattenExtend) {
66
+ flattenExtend(extendOflattenExtend, stack, context);
67
+ }
68
+ return stack;
69
+ };
70
+ const flattenExtend = (extend, stack, context) => {
71
+ if (!extend) return stack;
72
+ if ((0, import_utils.isArray)(extend)) return extractArrayExtend(extend, stack, context);
73
+ if ((0, import_utils.isString)(extend)) extend = fallbackStringExtend(extend, context);
74
+ stack.push(extend);
75
+ if (extend.extend) deepExtend(extend, stack, context);
76
+ return stack;
77
+ };
78
+ const deepMergeExtend = (element, extend) => {
79
+ for (const e in extend) {
80
+ if (e === "parent" || e === "node" || e === "__element") continue;
81
+ const elementProp = element[e];
82
+ const extendProp = extend[e];
83
+ if (elementProp === void 0) {
84
+ element[e] = extendProp;
85
+ } else if ((0, import_utils.isObject)(elementProp) && (0, import_utils.isObject)(extendProp)) {
86
+ deepMergeExtend(elementProp, extendProp);
87
+ } else if ((0, import_utils.isArray)(elementProp) && (0, import_utils.isArray)(extendProp)) {
88
+ element[e] = elementProp.concat(extendProp);
89
+ } else if ((0, import_utils.isArray)(elementProp) && (0, import_utils.isObject)(extendProp)) {
90
+ const obj = deepMergeExtend({}, elementProp);
91
+ element[e] = deepMergeExtend(obj, extendProp);
92
+ } else if (elementProp === void 0 && (0, import_utils.isFunction)(extendProp)) {
93
+ element[e] = extendProp;
94
+ }
95
+ }
96
+ return element;
97
+ };
98
+ const cloneAndMergeArrayExtend = (stack) => {
99
+ return stack.reduce((a, c) => {
100
+ return deepMergeExtend(a, (0, import_utils.deepClone)(c));
101
+ }, {});
102
+ };
103
+ const fallbackStringExtend = (extend, context, options = {}, variant) => {
104
+ const COMPONENTS = context?.components || options.components;
105
+ const PAGES = context?.pages || options.pages;
106
+ if ((0, import_utils.isString)(extend)) {
107
+ const componentExists = COMPONENTS && (COMPONENTS[extend + "." + variant] || COMPONENTS[extend] || COMPONENTS["smbls." + extend]);
108
+ const pageExists = PAGES && extend.charCodeAt(0) === 47 && PAGES[extend];
109
+ if (componentExists) return componentExists;
110
+ else if (pageExists) return pageExists;
111
+ else {
112
+ if (options.verbose && (0, import_utils.isNotProduction)()) {
113
+ console.warn("Extend is string but component was not found:", extend);
114
+ }
115
+ return {};
116
+ }
117
+ }
118
+ return extend;
119
+ };
120
+ const jointStacks = (extendStack, childExtendStack) => {
121
+ return [].concat(extendStack.slice(0, 1)).concat(childExtendStack.slice(0, 1)).concat(extendStack.slice(1)).concat(childExtendStack.slice(1));
122
+ };
123
+ const getExtendStack = (extend, context) => {
124
+ if (!extend) return [];
125
+ if (extend.__hash) return getHashedExtend(extend) || [];
126
+ const stack = flattenExtend(extend, [], context);
127
+ return getExtendStackRegistry(extend, stack);
128
+ };
129
+ const getExtendMerged = (extend) => {
130
+ const stack = getExtendStack(extend);
131
+ return cloneAndMergeArrayExtend(stack);
132
+ };
@@ -15,10 +15,12 @@ var __copyProps = (to, from, except, desc) => {
15
15
  }
16
16
  return to;
17
17
  };
18
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
20
  var utils_exports = {};
20
21
  __export(utils_exports, {
21
22
  METHODS_EXL: () => METHODS_EXL
22
23
  });
23
24
  module.exports = __toCommonJS(utils_exports);
25
+ __reExport(utils_exports, require("./extendUtils.js"), module.exports);
24
26
  const METHODS_EXL = [];
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
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
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var propEvents_exports = {};
20
+ __export(propEvents_exports, {
21
+ propagateEventsFromElement: () => propagateEventsFromElement,
22
+ propagateEventsFromProps: () => propagateEventsFromProps
23
+ });
24
+ module.exports = __toCommonJS(propEvents_exports);
25
+ var import_utils = require("@domql/utils");
26
+ const propagateEventsFromProps = (element) => {
27
+ const { props, on } = element;
28
+ for (const v in props) {
29
+ if (v.charCodeAt(0) !== 111 || v.charCodeAt(1) !== 110) continue;
30
+ const eventName = (0, import_utils.lowercaseFirstLetter)(v.slice(2));
31
+ const origEvent = on[eventName];
32
+ const funcFromProps = props[v];
33
+ if ((0, import_utils.isFunction)(origEvent)) {
34
+ on[eventName] = (...args) => {
35
+ const originalEventRetunrs = origEvent(...args);
36
+ if (originalEventRetunrs !== false) return funcFromProps(...args);
37
+ };
38
+ } else on[eventName] = funcFromProps;
39
+ }
40
+ };
41
+ const propagateEventsFromElement = (element) => {
42
+ const { on } = element;
43
+ for (const param in element) {
44
+ if (param.charCodeAt(0) !== 111 || param.charCodeAt(1) !== 110 || !Object.prototype.hasOwnProperty.call(element, param)) continue;
45
+ const fn = element[param];
46
+ if (!(0, import_utils.isFunction)(fn)) continue;
47
+ const eventName = (0, import_utils.lowercaseFirstLetter)(param.slice(2));
48
+ const origEvent = on[eventName];
49
+ if ((0, import_utils.isFunction)(origEvent)) {
50
+ on[eventName] = (...args) => {
51
+ const ret = origEvent(...args);
52
+ if (ret !== false) return fn(...args);
53
+ };
54
+ } else on[eventName] = fn;
55
+ }
56
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  concatAddExtends,
3
3
  deepClone,
4
- execPromise,
4
+ exec,
5
5
  getChildStateInKey,
6
6
  isArray,
7
7
  isDefined,
@@ -13,10 +13,34 @@ import {
13
13
  isString,
14
14
  matchesComponentNaming
15
15
  } from "@domql/utils";
16
- async function setChildren(param, element, opts) {
16
+ const shallowChildrenEqual = (a, b) => {
17
+ if (a === b) return true;
18
+ if (!a || !b) return false;
19
+ if (isArray(a) && isArray(b)) {
20
+ if (a.length !== b.length) return false;
21
+ for (let i = 0; i < a.length; i++) {
22
+ if (a[i] !== b[i]) return false;
23
+ }
24
+ return true;
25
+ }
26
+ if (isObject(a) && isObject(b)) {
27
+ const keysA = Object.keys(a);
28
+ const keysB = Object.keys(b);
29
+ if (keysA.length !== keysB.length) return false;
30
+ for (let i = 0; i < keysA.length; i++) {
31
+ const key = keysA[i];
32
+ if (a[key] !== b[key]) return false;
33
+ }
34
+ return true;
35
+ }
36
+ return a === b;
37
+ };
38
+ function setChildren(param, element, opts) {
17
39
  let { children, __ref: ref, state } = element;
18
40
  let { childrenAs } = element.props || {};
19
- children = await execPromise(param, element, state) || await execPromise(children, element, state);
41
+ let execParam = exec(param, element, state);
42
+ let execChildren = exec(children, element, state);
43
+ children = execParam || execChildren;
20
44
  if (children) {
21
45
  if (isState(children)) children = children.parse();
22
46
  if (isString(children) || isNumber(children)) {
@@ -43,31 +67,37 @@ async function setChildren(param, element, opts) {
43
67
  }
44
68
  }
45
69
  if (!children || isNot(children)("array", "object")) return;
46
- if (isArray(children) && children.find((v) => v == null ? void 0 : v.$$typeof)) {
47
- const filterReact = children.filter((v) => !(v == null ? void 0 : v.$$typeof));
48
- if (filterReact.length !== children.length) {
49
- const extractedReactComponents = children.filter((v) => v == null ? void 0 : v.$$typeof);
50
- element.call("renderReact", extractedReactComponents, element);
70
+ if (isArray(children) && children.some((v) => v?.$$typeof)) {
71
+ const filterReact = [];
72
+ const reactComponents = [];
73
+ for (let i = 0; i < children.length; i++) {
74
+ if (children[i]?.$$typeof) reactComponents.push(children[i]);
75
+ else filterReact.push(children[i]);
76
+ }
77
+ if (reactComponents.length) {
78
+ element.call("renderReact", reactComponents, element);
51
79
  }
52
80
  children = filterReact;
53
81
  }
82
+ let cloned;
54
83
  if (ref.__childrenCache) {
55
- const equals = JSON.stringify(children) === JSON.stringify(ref.__childrenCache);
56
- if (equals) {
84
+ if (shallowChildrenEqual(children, ref.__childrenCache)) {
57
85
  ref.__noChildrenDifference = true;
58
86
  } else {
59
- ref.__childrenCache = deepClone(children);
87
+ cloned = deepClone(children);
88
+ ref.__childrenCache = cloned;
60
89
  delete ref.__noChildrenDifference;
61
90
  }
62
91
  } else {
63
- ref.__childrenCache = deepClone(children);
92
+ cloned = deepClone(children);
93
+ ref.__childrenCache = cloned;
64
94
  }
65
95
  if (isObject(children) || isArray(children)) {
66
- children = deepClone(children);
96
+ children = cloned || deepClone(children);
67
97
  }
68
98
  const content = { tag: "fragment" };
69
99
  for (const key in children) {
70
- const value = Object.hasOwnProperty.call(children, key) && children[key];
100
+ const value = Object.prototype.hasOwnProperty.call(children, key) && children[key];
71
101
  if (isDefined(value) && value !== null && value !== false) {
72
102
  content[key] = isObjectLike(value) ? childrenAs ? { [childrenAs]: value } : value : childrenAs ? { [childrenAs]: childrenAs === "state" ? { value } : { text: value } } : { text: value };
73
103
  }