@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.
Files changed (140) hide show
  1. package/README.md +1 -1
  2. package/__tests__/checkIfOnUpdate.test.js +103 -0
  3. package/__tests__/children.test.js +213 -0
  4. package/__tests__/define.test.js +75 -0
  5. package/__tests__/inheritStateUpdates.test.js +79 -0
  6. package/__tests__/renderElement.test.js +131 -0
  7. package/__tests__/resetElement.test.js +44 -0
  8. package/__tests__/set.test.js +316 -0
  9. package/__tests__/throughExecProps.test.js +86 -0
  10. package/__tests__/throughInitialDefine.test.js +104 -0
  11. package/__tests__/throughInitialExec.test.js +92 -0
  12. package/__tests__/throughUpdatedDefine.test.js +92 -0
  13. package/__tests__/throughUpdatedExec.test.js +110 -0
  14. package/__tests__/tree.test.js +15 -0
  15. package/__tests__/update.test.js +253 -0
  16. package/children.js +105 -0
  17. package/create.js +125 -252
  18. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +73 -0
  19. package/dist/cjs/__tests__/children.test.js +177 -0
  20. package/dist/cjs/__tests__/define.test.js +75 -0
  21. package/dist/cjs/__tests__/inheritStateUpdates.test.js +62 -0
  22. package/dist/cjs/__tests__/renderElement.test.js +138 -0
  23. package/dist/cjs/__tests__/resetElement.test.js +35 -0
  24. package/dist/cjs/__tests__/set.test.js +256 -0
  25. package/dist/cjs/__tests__/throughExecProps.test.js +62 -0
  26. package/dist/cjs/__tests__/throughInitialDefine.test.js +79 -0
  27. package/dist/cjs/__tests__/throughInitialExec.test.js +73 -0
  28. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +69 -0
  29. package/dist/cjs/__tests__/throughUpdatedExec.test.js +84 -0
  30. package/dist/cjs/__tests__/tree.test.js +11 -0
  31. package/dist/cjs/__tests__/update.test.js +219 -0
  32. package/dist/cjs/children.js +87 -0
  33. package/dist/cjs/create.js +79 -177
  34. package/dist/cjs/iterate.js +29 -13
  35. package/dist/cjs/methods/set.js +27 -25
  36. package/dist/cjs/methods/v2.js +1 -5
  37. package/dist/cjs/mixins/attr.js +7 -6
  38. package/dist/cjs/mixins/index.js +0 -4
  39. package/dist/cjs/mixins/registry.js +7 -67
  40. package/dist/cjs/mixins/scope.js +1 -1
  41. package/dist/cjs/mixins/state.js +3 -4
  42. package/dist/cjs/mixins/text.js +3 -3
  43. package/dist/cjs/node.js +32 -22
  44. package/dist/cjs/set.js +112 -40
  45. package/dist/cjs/update.js +119 -64
  46. package/dist/cjs/utils/applyParam.js +2 -2
  47. package/dist/cjs/utils/index.js +8 -4
  48. package/dist/cjs/utils/onlyResolveExtends.js +4 -7
  49. package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
  50. package/dist/esm/__tests__/children.test.js +177 -0
  51. package/dist/esm/__tests__/define.test.js +53 -0
  52. package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
  53. package/dist/esm/__tests__/renderElement.test.js +116 -0
  54. package/dist/esm/__tests__/resetElement.test.js +35 -0
  55. package/dist/esm/__tests__/set.test.js +256 -0
  56. package/dist/esm/__tests__/throughExecProps.test.js +62 -0
  57. package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
  58. package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
  59. package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
  60. package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
  61. package/dist/esm/__tests__/tree.test.js +11 -0
  62. package/dist/esm/__tests__/update.test.js +219 -0
  63. package/dist/esm/children.js +81 -0
  64. package/dist/esm/create.js +85 -188
  65. package/dist/esm/iterate.js +33 -16
  66. package/dist/esm/methods/set.js +6 -4
  67. package/dist/esm/methods/v2.js +1 -5
  68. package/dist/esm/mixins/attr.js +8 -7
  69. package/dist/esm/mixins/data.js +1 -1
  70. package/dist/esm/mixins/index.js +0 -4
  71. package/dist/esm/mixins/registry.js +7 -67
  72. package/dist/esm/mixins/scope.js +1 -1
  73. package/dist/esm/mixins/state.js +4 -5
  74. package/dist/esm/mixins/text.js +4 -7
  75. package/dist/esm/node.js +23 -23
  76. package/dist/esm/set.js +112 -40
  77. package/dist/esm/update.js +122 -68
  78. package/dist/esm/utils/applyParam.js +2 -2
  79. package/dist/esm/utils/index.js +4 -3
  80. package/dist/esm/utils/onlyResolveExtends.js +12 -8
  81. package/iterate.js +44 -26
  82. package/methods/set.js +5 -4
  83. package/methods/v2.js +5 -4
  84. package/mixins/attr.js +13 -7
  85. package/mixins/classList.js +7 -2
  86. package/mixins/data.js +1 -1
  87. package/mixins/index.js +1 -6
  88. package/mixins/registry.js +6 -53
  89. package/mixins/scope.js +1 -1
  90. package/mixins/state.js +4 -5
  91. package/mixins/text.js +4 -7
  92. package/node.js +31 -28
  93. package/package.json +7 -6
  94. package/set.js +129 -41
  95. package/update.js +169 -89
  96. package/utils/applyParam.js +7 -4
  97. package/utils/index.js +1 -3
  98. package/utils/onlyResolveExtends.js +27 -16
  99. package/cache/index.js +0 -3
  100. package/cache/options.js +0 -4
  101. package/dist/cjs/cache/index.js +0 -24
  102. package/dist/cjs/cache/options.js +0 -26
  103. package/dist/cjs/extend.js +0 -81
  104. package/dist/cjs/methods/index.js +0 -320
  105. package/dist/cjs/mixins/content.js +0 -67
  106. package/dist/cjs/props/create.js +0 -92
  107. package/dist/cjs/props/ignore.js +0 -24
  108. package/dist/cjs/props/index.js +0 -21
  109. package/dist/cjs/props/inherit.js +0 -51
  110. package/dist/cjs/props/update.js +0 -34
  111. package/dist/cjs/utils/component.js +0 -74
  112. package/dist/cjs/utils/extendUtils.js +0 -133
  113. package/dist/cjs/utils/object.js +0 -171
  114. package/dist/cjs/utils/propEvents.js +0 -39
  115. package/dist/esm/cache/index.js +0 -4
  116. package/dist/esm/cache/options.js +0 -6
  117. package/dist/esm/extend.js +0 -67
  118. package/dist/esm/methods/index.js +0 -300
  119. package/dist/esm/mixins/content.js +0 -47
  120. package/dist/esm/props/create.js +0 -72
  121. package/dist/esm/props/ignore.js +0 -4
  122. package/dist/esm/props/index.js +0 -4
  123. package/dist/esm/props/inherit.js +0 -31
  124. package/dist/esm/props/update.js +0 -14
  125. package/dist/esm/utils/component.js +0 -62
  126. package/dist/esm/utils/extendUtils.js +0 -113
  127. package/dist/esm/utils/object.js +0 -151
  128. package/dist/esm/utils/propEvents.js +0 -19
  129. package/extend.js +0 -90
  130. package/methods/index.js +0 -317
  131. package/mixins/content.js +0 -55
  132. package/props/create.js +0 -87
  133. package/props/ignore.js +0 -3
  134. package/props/index.js +0 -6
  135. package/props/inherit.js +0 -35
  136. package/props/update.js +0 -17
  137. package/utils/component.js +0 -68
  138. package/utils/extendUtils.js +0 -134
  139. package/utils/object.js +0 -172
  140. package/utils/propEvents.js +0 -19
package/update.js CHANGED
@@ -10,27 +10,31 @@ import {
10
10
  isString,
11
11
  isUndefined,
12
12
  merge,
13
- isVariant,
14
13
  overwriteDeep,
15
- createSnapshotId,
16
- deepClone
14
+ deepClone,
15
+ propertizeElement,
16
+ isMethod,
17
+ findInheritedState,
18
+ deepMerge,
19
+ OPTIONS,
20
+ updateProps,
21
+ captureSnapshot
17
22
  } from '@domql/utils'
18
23
 
19
24
  import { applyEvent, triggerEventOn, triggerEventOnUpdate } from '@domql/event'
20
- import { isMethod } from './methods/index.js'
21
- import { updateProps } from './props/index.js'
22
- import { createState, findInheritedState } from '@domql/state'
25
+ import { createState } from '@domql/state'
23
26
 
24
27
  import { create } from './create.js'
25
- import { throughExecProps, throughUpdatedDefine, throughUpdatedExec } from './iterate.js'
28
+ import {
29
+ throughExecProps,
30
+ throughUpdatedDefine,
31
+ throughUpdatedExec
32
+ } from './iterate.js'
26
33
  import { REGISTRY } from './mixins/index.js'
27
34
  import { applyParam } from './utils/applyParam.js'
28
- import { OPTIONS } from './cache/options.js'
29
- import { METHODS_EXL, deepMerge } from './utils/index.js' // old utils (current)
30
-
31
- const snapshot = {
32
- snapshotId: createSnapshotId
33
- }
35
+ import { METHODS_EXL } from './utils/index.js' // old utils (current)
36
+ import { setContent } from './set.js'
37
+ import setChildren from './children.js'
34
38
 
35
39
  const UPDATE_DEFAULT_OPTIONS = {
36
40
  stackChanges: false,
@@ -38,51 +42,76 @@ const UPDATE_DEFAULT_OPTIONS = {
38
42
  preventRecursive: false,
39
43
  currentSnapshot: false,
40
44
  calleeElement: false,
41
- excludes: METHODS_EXL
45
+ exclude: METHODS_EXL
42
46
  }
43
47
 
44
48
  export const update = async function (params = {}, opts) {
45
49
  const calleeElementCache = opts?.calleeElement
46
- const options = deepClone(isObject(opts) ? deepMerge(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS, { exclude: ['calleeElement'] })
50
+ const options = deepClone(
51
+ isObject(opts)
52
+ ? deepMerge(opts, UPDATE_DEFAULT_OPTIONS)
53
+ : UPDATE_DEFAULT_OPTIONS,
54
+ { exclude: ['calleeElement'] }
55
+ )
47
56
  options.calleeElement = calleeElementCache
48
57
  const element = this
49
- const { parent, node, key } = element
50
- const { excludes, preventInheritAtCurrentState } = options
51
58
 
52
59
  let ref = element.__ref
53
60
  if (!ref) ref = element.__ref = {}
54
- const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = captureSnapshot(element, options)
61
+ const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = captureSnapshot(
62
+ element,
63
+ options
64
+ )
65
+
55
66
  if (snapshotHasUpdated) return
56
67
 
57
- if (!options.preventListeners) await triggerEventOnUpdate('startUpdate', params, element, options)
68
+ if (!options.preventListeners) {
69
+ await triggerEventOnUpdate('startUpdate', params, element, options)
70
+ }
71
+
72
+ const { parent, node, key } = element
73
+ const { exclude, preventInheritAtCurrentState } = options
58
74
 
59
- if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element) return
60
- if (!excludes) merge(options, UPDATE_DEFAULT_OPTIONS)
75
+ if (
76
+ preventInheritAtCurrentState &&
77
+ preventInheritAtCurrentState.__element === element
78
+ ) {
79
+ return
80
+ }
81
+ if (!exclude) merge(options, UPDATE_DEFAULT_OPTIONS)
61
82
 
62
83
  if (isString(params) || isNumber(params)) {
63
84
  params = { text: params }
64
85
  }
65
86
 
87
+ params = propertizeElement(params)
88
+
66
89
  const inheritState = await inheritStateUpdates(element, options)
67
90
  if (inheritState === false) return
68
91
 
69
- const ifFails = checkIfOnUpdate(element, parent, options)
92
+ const ifFails = await checkIfOnUpdate(element, parent, options)
70
93
  if (ifFails) return
71
94
 
72
95
  if (ref.__if && !options.preventPropsUpdate) {
73
- const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps)
74
- const hasFunctionInProps = ref.__props.filter(v => isFunction(v))
96
+ const hasParentProps =
97
+ parent.props && (parent.props[key] || parent.props.childProps)
98
+ const hasFunctionInProps = ref.__propsStack.filter(v => isFunction(v))
75
99
  const props = params.props || hasParentProps || hasFunctionInProps.length
76
100
  if (props) updateProps(props, element, parent)
77
101
  }
78
102
 
79
103
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
80
- const beforeUpdateReturns = await triggerEventOnUpdate('beforeUpdate', params, element, options)
104
+ const beforeUpdateReturns = await triggerEventOnUpdate(
105
+ 'beforeUpdate',
106
+ params,
107
+ element,
108
+ options
109
+ )
81
110
  if (beforeUpdateReturns === false) return element
82
111
  }
83
112
 
84
113
  // apply new updates
85
- overwriteDeep(element, params, { exclude: METHODS_EXL })
114
+ overwriteDeep(element, params)
86
115
 
87
116
  // exec updates
88
117
  throughExecProps(element)
@@ -90,7 +119,7 @@ export const update = async function (params = {}, opts) {
90
119
  throughUpdatedDefine(element)
91
120
 
92
121
  if (!options.isForced && !options.preventListeners) {
93
- triggerEventOn('beforeClassAssign', element, options)
122
+ await triggerEventOn('beforeClassAssign', element, options)
94
123
  }
95
124
 
96
125
  if (!ref.__if) return false
@@ -100,14 +129,25 @@ export const update = async function (params = {}, opts) {
100
129
  }
101
130
 
102
131
  const {
103
- preventUpdate, preventDefineUpdate, preventContentUpdate, preventStateUpdate,
104
- preventRecursive, preventUpdateListener, preventUpdateAfter, preventUpdateAfterCount
132
+ preventUpdate,
133
+ preventDefineUpdate,
134
+ preventContentUpdate,
135
+ preventStateUpdate,
136
+ preventRecursive,
137
+ preventUpdateListener,
138
+ preventUpdateAfter,
139
+ preventUpdateAfterCount
105
140
  } = options
106
141
 
107
142
  if (preventUpdateAfter) {
108
- if (isNumber(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount) return
109
- else if (options.preventUpdateAfterCount === undefined) options.preventUpdateAfterCount = 1
110
- else options.preventUpdateAfterCount++
143
+ if (
144
+ isNumber(preventUpdateAfterCount) &&
145
+ preventUpdateAfter <= preventUpdateAfterCount
146
+ ) {
147
+ return
148
+ } else if (options.preventUpdateAfterCount === undefined) {
149
+ options.preventUpdateAfterCount = 1
150
+ } else options.preventUpdateAfterCount++
111
151
  }
112
152
 
113
153
  for (const param in element) {
@@ -115,10 +155,10 @@ export const update = async function (params = {}, opts) {
115
155
 
116
156
  if (!Object.hasOwnProperty.call(element, param)) continue
117
157
 
118
- const isInPreventUpdate = isArray(preventUpdate) && preventUpdate.includes(param)
119
- const isInPreventDefineUpdate = isArray(preventDefineUpdate) && preventDefineUpdate.includes(param)
120
-
121
- const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection
158
+ const isInPreventUpdate =
159
+ isArray(preventUpdate) && preventUpdate.includes(param)
160
+ const isInPreventDefineUpdate =
161
+ isArray(preventDefineUpdate) && preventDefineUpdate.includes(param)
122
162
 
123
163
  if (
124
164
  isUndefined(prop) ||
@@ -126,17 +166,20 @@ export const update = async function (params = {}, opts) {
126
166
  isInPreventDefineUpdate ||
127
167
  preventDefineUpdate === true ||
128
168
  preventDefineUpdate === param ||
129
- (preventContentUpdate && param === 'content' && !hasCollection) ||
130
169
  (preventStateUpdate && param) === 'state' ||
131
- isMethod(param, element) || isObject(REGISTRY[param]) || isVariant(param)
132
- ) continue
170
+ isMethod(param, element) ||
171
+ isObject(REGISTRY[param])
172
+ ) {
173
+ continue
174
+ }
133
175
 
134
176
  if (preventStateUpdate === 'once') options.preventStateUpdate = false
135
177
 
136
- const isElement = applyParam(param, element, options)
178
+ const isElement = await applyParam(param, element, options)
137
179
  if (isElement) {
138
180
  const { hasDefine, hasContextDefine } = isElement
139
- const canUpdate = isObject(prop) && !hasDefine && !hasContextDefine && !preventRecursive
181
+ const canUpdate =
182
+ isObject(prop) && !hasDefine && !hasContextDefine && !preventRecursive
140
183
  if (!canUpdate) continue
141
184
 
142
185
  const lazyLoad = element.props.lazyLoad || options.lazyLoad
@@ -145,50 +188,54 @@ export const update = async function (params = {}, opts) {
145
188
  options.onEachUpdate(param, element, element.state, element.context)
146
189
  }
147
190
 
148
- const childUpdateCall = () => update.call(prop, params[prop], {
149
- ...options,
150
- currentSnapshot: snapshotOnCallee,
151
- calleeElement
152
- })
153
-
154
- lazyLoad ? window.requestAnimationFrame(() => { // eslint-disable-line
155
- childUpdateCall()
156
- // handle lazy load
157
- if (!options.preventUpdateListener) {
158
- triggerEventOn('lazyLoad', element, options)
159
- }
160
- }) : childUpdateCall()
191
+ const childUpdateCall = async () =>
192
+ await update.call(prop, params[prop], {
193
+ ...options,
194
+ currentSnapshot: snapshotOnCallee,
195
+ calleeElement
196
+ })
197
+
198
+ if (lazyLoad) {
199
+ window.requestAnimationFrame(async () => {
200
+ // eslint-disable-line
201
+ await childUpdateCall()
202
+ // handle lazy load
203
+ if (!options.preventUpdateListener) {
204
+ await triggerEventOn('lazyLoad', element, options)
205
+ }
206
+ })
207
+ } else await childUpdateCall()
161
208
  }
162
209
  }
163
210
 
164
- if (!preventUpdateListener) triggerEventOn('update', element, options)
165
- }
166
-
167
- const captureSnapshot = (element, options) => {
168
- const ref = element.__ref
211
+ if (!preventContentUpdate) {
212
+ const children = params.children || element.children
213
+ const content = children
214
+ ? await setChildren(children, element, opts)
215
+ : element.children || params.content
169
216
 
170
- const { currentSnapshot, calleeElement } = options
171
- const isCallee = calleeElement === element
172
- if (!calleeElement || isCallee) {
173
- const createdStanpshot = snapshot.snapshotId()
174
- ref.__currentSnapshot = createdStanpshot
175
- return [createdStanpshot, element]
217
+ if (content) {
218
+ await setContent(content, element, options)
219
+ }
176
220
  }
177
221
 
178
- const snapshotOnCallee = calleeElement.__ref.__currentSnapshot
179
-
180
- if (currentSnapshot < snapshotOnCallee) {
181
- return [snapshotOnCallee, calleeElement, true]
222
+ if (!preventUpdateListener) {
223
+ await triggerEventOn('update', element, options)
182
224
  }
183
-
184
- return [snapshotOnCallee, calleeElement]
185
225
  }
186
226
 
187
- const checkIfOnUpdate = (element, parent, options) => {
188
- if ((!isFunction(element.if) && !isFunction(element.props?.if)) || !parent) return
227
+ const checkIfOnUpdate = async (element, parent, options) => {
228
+ if ((!isFunction(element.if) && !isFunction(element.props?.if)) || !parent) {
229
+ return
230
+ }
189
231
 
190
232
  const ref = element.__ref
191
- const ifPassed = (element.if || element.props?.if)(element, element.state, element.context, options)
233
+ const ifPassed = (element.if || element.props?.if)(
234
+ element,
235
+ element.state,
236
+ element.context,
237
+ options
238
+ )
192
239
  const itWasFalse = ref.__if !== true
193
240
 
194
241
  if (ifPassed) {
@@ -196,7 +243,7 @@ const checkIfOnUpdate = (element, parent, options) => {
196
243
  if (itWasFalse) {
197
244
  delete element.__hash
198
245
  delete element.__text
199
- delete element.extend
246
+ delete element.extends
200
247
  if (!ref.__hasRootState) {
201
248
  delete element.state
202
249
  }
@@ -214,9 +261,11 @@ const checkIfOnUpdate = (element, parent, options) => {
214
261
 
215
262
  const contentKey = ref.contentElementKey
216
263
 
217
- if (element.$collection || element.$stateCollection || element.$propsCollection) {
264
+ if (element.children) {
218
265
  element.removeContent()
219
- } else if (element[contentKey]?.parseDeep) element[contentKey] = element[contentKey].parseDeep()
266
+ } else if (element[contentKey]?.parseDeep) {
267
+ element[contentKey] = element[contentKey].parseDeep()
268
+ }
220
269
 
221
270
  const previousElement = element.previousElement()
222
271
  const previousNode = previousElement?.node // document.body.contains(previousElement.node)
@@ -234,10 +283,24 @@ const checkIfOnUpdate = (element, parent, options) => {
234
283
 
235
284
  delete element.__ref
236
285
  delete element.parent
237
- const createdElement = create(element, parent, element.key, OPTIONS.create, attachOptions)
286
+ const createdElement = await create(
287
+ element,
288
+ parent,
289
+ element.key,
290
+ OPTIONS.create,
291
+ attachOptions
292
+ )
238
293
  // check preventUpdate for an array (Line: 87)
239
- if (options.preventUpdate !== true && element.on && isFunction(element.on.update)) {
240
- applyEvent(element.on.update, createdElement, createdElement.state)
294
+ if (
295
+ options.preventUpdate !== true &&
296
+ element.on &&
297
+ isFunction(element.on.update)
298
+ ) {
299
+ await applyEvent(
300
+ element.on.update,
301
+ createdElement,
302
+ createdElement.state
303
+ )
241
304
  }
242
305
  return createdElement
243
306
  }
@@ -248,7 +311,7 @@ const checkIfOnUpdate = (element, parent, options) => {
248
311
  }
249
312
 
250
313
  /**
251
- * Inherit state updates for a given element based on the specified options.
314
+ * Inherit state updates for a given element when state is inherited.
252
315
  *
253
316
  * @param {Object} element - The element to inherit state updates for.
254
317
  * @param {Object} options - Configuration options for state update inheritance.
@@ -265,7 +328,8 @@ const inheritStateUpdates = async (element, options) => {
265
328
  const { __ref: ref } = element
266
329
  const stateKey = ref.__state
267
330
  const { parent, state } = element
268
- const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } = options
331
+ const { preventUpdateTriggerStateUpdate, isHoisted, execStateFunction } =
332
+ options
269
333
 
270
334
  if (preventUpdateTriggerStateUpdate) return
271
335
 
@@ -276,10 +340,16 @@ const inheritStateUpdates = async (element, options) => {
276
340
  }
277
341
 
278
342
  // If state is function, decide execution and apply setting a current state
279
- const shouldForceFunctionState = isFunction(stateKey) && !isHoisted && execStateFunction
343
+ const shouldForceFunctionState =
344
+ isFunction(stateKey) && !isHoisted && execStateFunction
280
345
  if (shouldForceFunctionState) {
281
346
  const execState = exec(stateKey, element)
282
- state.set(execState, { ...options, preventUpdate: true, preventStateUpdateListener: false, updatedByStateFunction: true })
347
+ state.set(execState, {
348
+ ...options,
349
+ preventUpdate: true,
350
+ preventStateUpdateListener: false,
351
+ updatedByStateFunction: true
352
+ })
283
353
  return
284
354
  }
285
355
 
@@ -289,22 +359,32 @@ const inheritStateUpdates = async (element, options) => {
289
359
 
290
360
  // Trigger on.beforeStateUpdate event
291
361
  if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
292
- const initStateReturns = await triggerEventOnUpdate('beforeStateUpdate', keyInParentState, element, options)
362
+ const initStateReturns = await triggerEventOnUpdate(
363
+ 'beforeStateUpdate',
364
+ keyInParentState,
365
+ element,
366
+ options
367
+ )
293
368
  if (initStateReturns === false) return element
294
369
  }
295
370
 
296
371
  // Recreate the state again
297
- const newState = createStateUpdate(element, parent, options)
372
+ const newState = await createStateUpdate(element, parent, options)
298
373
 
299
374
  // Trigger on.stateUpdate event
300
375
  if (!options.preventStateUpdateListener && !options.preventListeners) {
301
- await triggerEventOnUpdate('stateUpdate', newState.parse(), element, options)
376
+ await triggerEventOnUpdate(
377
+ 'stateUpdate',
378
+ newState.parse(),
379
+ element,
380
+ options
381
+ )
302
382
  }
303
383
  }
304
384
 
305
- const createStateUpdate = (element, parent, options) => {
385
+ const createStateUpdate = async (element, parent, options) => {
306
386
  const __stateChildren = element.state.__children
307
- const newState = createState(element, parent)
387
+ const newState = await createState(element, parent)
308
388
  element.state = newState
309
389
  for (const child in __stateChildren) {
310
390
  // check this for inherited states
@@ -3,14 +3,15 @@
3
3
  import { isFunction } from '@domql/utils'
4
4
  import { REGISTRY } from '../mixins/index.js'
5
5
 
6
- export const applyParam = (param, element, options) => {
6
+ export const applyParam = async (param, element, options) => {
7
7
  const { node, context, __ref: ref } = element
8
8
  const prop = element[param]
9
9
 
10
10
  const { onlyUpdate } = options
11
11
 
12
12
  const DOMQLProperty = REGISTRY[param]
13
- const DOMQLPropertyFromContext = context && context.registry && context.registry[param]
13
+ const DOMQLPropertyFromContext =
14
+ context && context.registry && context.registry[param]
14
15
  const isGlobalTransformer = DOMQLPropertyFromContext || DOMQLProperty
15
16
 
16
17
  const hasDefine = element.define && element.define[param]
@@ -18,11 +19,13 @@ export const applyParam = (param, element, options) => {
18
19
 
19
20
  if (!ref.__if) return
20
21
 
21
- const hasOnlyUpdate = onlyUpdate ? (onlyUpdate === param || element.lookup(onlyUpdate)) : true
22
+ const hasOnlyUpdate = onlyUpdate
23
+ ? onlyUpdate === param || element.lookup(onlyUpdate)
24
+ : true
22
25
 
23
26
  if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
24
27
  if (isFunction(isGlobalTransformer)) {
25
- isGlobalTransformer(prop, element, node, options)
28
+ await isGlobalTransformer(prop, element, node, options)
26
29
  return
27
30
  }
28
31
  }
package/utils/index.js CHANGED
@@ -1,5 +1,3 @@
1
1
  'use strict'
2
2
 
3
- export * from './object.js'
4
- export * from './extendUtils.js'
5
- export * from './component.js'
3
+ export const METHODS_EXL = [] // this is needed because of unit tests
@@ -1,14 +1,18 @@
1
1
  'use strict'
2
2
 
3
- import { exec, isFunction, isObject, isUndefined } from '@domql/utils'
3
+ import {
4
+ exec,
5
+ initProps,
6
+ isFunction,
7
+ isMethod,
8
+ isObject,
9
+ isUndefined
10
+ } from '@domql/utils'
4
11
  import { create } from '..'
5
12
  import { REGISTRY } from '../mixins/index.js'
6
- import { applyVariant, isVariant } from '.'
7
- import { isMethod } from '../methods'
8
13
  import { addMethods } from '../methods/set'
9
14
  import { createState } from '@domql/state'
10
15
  import { detectTag } from '@domql/render'
11
- import { createProps } from '../props'
12
16
  import { throughInitialDefine, throughInitialExec } from '../iterate'
13
17
 
14
18
  export const onlyResolveExtends = (element, parent, key, options) => {
@@ -24,10 +28,8 @@ export const onlyResolveExtends = (element, parent, key, options) => {
24
28
 
25
29
  // enable TRANSFORM in data
26
30
  // TODO: do we need this at all?
27
- // if (!element.transform) element.transform = {}
28
31
 
29
32
  // enable CACHING
30
- if (!ref.__cached) ref.__cached = {}
31
33
  if (!ref.__defineCache) ref.__defineCache = {}
32
34
 
33
35
  // enable EXEC
@@ -68,10 +70,11 @@ export const onlyResolveExtends = (element, parent, key, options) => {
68
70
  } else ref.__if = true
69
71
  /// ///
70
72
 
71
- if (element.node && ref.__if) { parent[key || element.key] = element } // Borrowed from assignNode()
73
+ if (element.node && ref.__if) {
74
+ parent[key || element.key] = element
75
+ } // Borrowed from assignNode()
72
76
 
73
- createProps(element, parent, options)
74
- applyVariant(element, parent)
77
+ initProps(element, parent, options)
75
78
 
76
79
  if (element.tag !== 'string' && element.tag !== 'fragment') {
77
80
  throughInitialDefine(element)
@@ -82,18 +85,26 @@ export const onlyResolveExtends = (element, parent, key, options) => {
82
85
  if (
83
86
  isUndefined(prop) ||
84
87
  isMethod(param, element) ||
85
- isObject(REGISTRY[param]) ||
86
- isVariant(param)
87
- ) continue
88
+ isObject(REGISTRY[param])
89
+ ) {
90
+ continue
91
+ }
88
92
 
89
93
  const hasDefine = element.define && element.define[param]
90
- const contextHasDefine = element.context && element.context.define &&
91
- element.context.define[param]
94
+ const contextHasDefine =
95
+ element.context &&
96
+ element.context.define &&
97
+ element.context.define[param]
92
98
  const optionsHasDefine = options.define && options.define[param]
93
99
 
94
100
  if (REGISTRY[param] && !optionsHasDefine) {
95
101
  continue
96
- } else if (element[param] && !hasDefine && !optionsHasDefine && !contextHasDefine) {
102
+ } else if (
103
+ element[param] &&
104
+ !hasDefine &&
105
+ !optionsHasDefine &&
106
+ !contextHasDefine
107
+ ) {
97
108
  create(exec(prop, element), element, param, options)
98
109
  }
99
110
  }
@@ -104,7 +115,7 @@ export const onlyResolveExtends = (element, parent, key, options) => {
104
115
  delete element.update
105
116
  delete element.__element
106
117
 
107
- // added by createProps
118
+ // added by initProps
108
119
  if (element.props) {
109
120
  delete element.props.update
110
121
  delete element.props.__element
package/cache/index.js DELETED
@@ -1,3 +0,0 @@
1
- 'use strict'
2
-
3
- export const cache = {}
package/cache/options.js DELETED
@@ -1,4 +0,0 @@
1
- 'use strict'
2
-
3
- export const OPTIONS = {}
4
- export default OPTIONS
@@ -1,24 +0,0 @@
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 cache_exports = {};
20
- __export(cache_exports, {
21
- cache: () => cache
22
- });
23
- module.exports = __toCommonJS(cache_exports);
24
- const cache = {};
@@ -1,26 +0,0 @@
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 options_exports = {};
20
- __export(options_exports, {
21
- OPTIONS: () => OPTIONS,
22
- default: () => options_default
23
- });
24
- module.exports = __toCommonJS(options_exports);
25
- const OPTIONS = {};
26
- var options_default = OPTIONS;