@domql/element 2.5.198 → 3.0.0

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 (150) 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 -255
  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 +74 -215
  34. package/dist/cjs/define.js +1 -2
  35. package/dist/cjs/index.js +3 -3
  36. package/dist/cjs/iterate.js +37 -30
  37. package/dist/cjs/methods/set.js +26 -25
  38. package/dist/cjs/methods/v2.js +7 -17
  39. package/dist/cjs/mixins/attr.js +7 -10
  40. package/dist/cjs/mixins/classList.js +8 -16
  41. package/dist/cjs/mixins/data.js +2 -4
  42. package/dist/cjs/mixins/html.js +2 -4
  43. package/dist/cjs/mixins/index.js +0 -4
  44. package/dist/cjs/mixins/registry.js +7 -67
  45. package/dist/cjs/mixins/scope.js +2 -3
  46. package/dist/cjs/mixins/state.js +4 -7
  47. package/dist/cjs/mixins/style.js +2 -4
  48. package/dist/cjs/mixins/text.js +5 -8
  49. package/dist/cjs/node.js +34 -30
  50. package/dist/cjs/set.js +112 -47
  51. package/dist/cjs/update.js +123 -92
  52. package/dist/cjs/utils/applyParam.js +3 -4
  53. package/dist/cjs/utils/index.js +8 -4
  54. package/dist/cjs/utils/onlyResolveExtends.js +14 -30
  55. package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
  56. package/dist/esm/__tests__/children.test.js +177 -0
  57. package/dist/esm/__tests__/define.test.js +53 -0
  58. package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
  59. package/dist/esm/__tests__/renderElement.test.js +116 -0
  60. package/dist/esm/__tests__/resetElement.test.js +35 -0
  61. package/dist/esm/__tests__/set.test.js +256 -0
  62. package/dist/esm/__tests__/throughExecProps.test.js +62 -0
  63. package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
  64. package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
  65. package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
  66. package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
  67. package/dist/esm/__tests__/tree.test.js +11 -0
  68. package/dist/esm/__tests__/update.test.js +219 -0
  69. package/dist/esm/children.js +81 -0
  70. package/dist/esm/create.js +79 -226
  71. package/dist/esm/define.js +1 -2
  72. package/dist/esm/iterate.js +41 -33
  73. package/dist/esm/methods/set.js +5 -4
  74. package/dist/esm/methods/v2.js +7 -17
  75. package/dist/esm/mixins/attr.js +8 -11
  76. package/dist/esm/mixins/classList.js +8 -16
  77. package/dist/esm/mixins/data.js +3 -5
  78. package/dist/esm/mixins/html.js +2 -4
  79. package/dist/esm/mixins/index.js +0 -4
  80. package/dist/esm/mixins/registry.js +7 -67
  81. package/dist/esm/mixins/scope.js +2 -3
  82. package/dist/esm/mixins/state.js +5 -8
  83. package/dist/esm/mixins/style.js +2 -4
  84. package/dist/esm/mixins/text.js +6 -12
  85. package/dist/esm/node.js +25 -31
  86. package/dist/esm/set.js +112 -47
  87. package/dist/esm/update.js +127 -97
  88. package/dist/esm/utils/applyParam.js +3 -4
  89. package/dist/esm/utils/index.js +4 -3
  90. package/dist/esm/utils/onlyResolveExtends.js +22 -31
  91. package/iterate.js +44 -26
  92. package/methods/set.js +5 -4
  93. package/methods/v2.js +5 -4
  94. package/mixins/attr.js +13 -7
  95. package/mixins/classList.js +7 -2
  96. package/mixins/data.js +1 -1
  97. package/mixins/index.js +1 -6
  98. package/mixins/registry.js +6 -53
  99. package/mixins/scope.js +1 -1
  100. package/mixins/state.js +4 -5
  101. package/mixins/text.js +4 -7
  102. package/node.js +31 -28
  103. package/package.json +7 -6
  104. package/set.js +129 -41
  105. package/update.js +169 -89
  106. package/utils/applyParam.js +7 -4
  107. package/utils/index.js +1 -3
  108. package/utils/onlyResolveExtends.js +27 -16
  109. package/cache/index.js +0 -3
  110. package/cache/options.js +0 -4
  111. package/dist/cjs/cache/index.js +0 -24
  112. package/dist/cjs/cache/options.js +0 -26
  113. package/dist/cjs/extend.js +0 -85
  114. package/dist/cjs/methods/index.js +0 -353
  115. package/dist/cjs/mixins/content.js +0 -74
  116. package/dist/cjs/props/create.js +0 -98
  117. package/dist/cjs/props/ignore.js +0 -24
  118. package/dist/cjs/props/index.js +0 -21
  119. package/dist/cjs/props/inherit.js +0 -53
  120. package/dist/cjs/props/update.js +0 -37
  121. package/dist/cjs/utils/component.js +0 -77
  122. package/dist/cjs/utils/extendUtils.js +0 -142
  123. package/dist/cjs/utils/object.js +0 -179
  124. package/dist/cjs/utils/propEvents.js +0 -41
  125. package/dist/esm/cache/index.js +0 -4
  126. package/dist/esm/cache/options.js +0 -6
  127. package/dist/esm/extend.js +0 -71
  128. package/dist/esm/methods/index.js +0 -333
  129. package/dist/esm/mixins/content.js +0 -54
  130. package/dist/esm/props/create.js +0 -78
  131. package/dist/esm/props/ignore.js +0 -4
  132. package/dist/esm/props/index.js +0 -4
  133. package/dist/esm/props/inherit.js +0 -33
  134. package/dist/esm/props/update.js +0 -17
  135. package/dist/esm/utils/component.js +0 -65
  136. package/dist/esm/utils/extendUtils.js +0 -122
  137. package/dist/esm/utils/object.js +0 -159
  138. package/dist/esm/utils/propEvents.js +0 -21
  139. package/extend.js +0 -90
  140. package/methods/index.js +0 -317
  141. package/mixins/content.js +0 -55
  142. package/props/create.js +0 -87
  143. package/props/ignore.js +0 -3
  144. package/props/index.js +0 -6
  145. package/props/inherit.js +0 -35
  146. package/props/update.js +0 -17
  147. package/utils/component.js +0 -68
  148. package/utils/extendUtils.js +0 -134
  149. package/utils/object.js +0 -172
  150. package/utils/propEvents.js +0 -19
package/create.js CHANGED
@@ -4,83 +4,72 @@ import { createNode } from './node.js'
4
4
  import { ROOT } from './tree.js'
5
5
 
6
6
  import {
7
- HTML_TAGS,
8
7
  isObject,
9
- isFunction,
10
- isString,
11
8
  exec,
12
- is,
13
- isNode,
14
9
  isUndefined,
15
- generateKey,
16
- checkIfKeyIsComponent,
17
- deepClone,
18
- applyComponentFromContext,
19
- applyKeyComponentAsExtend,
20
- isVariant,
21
10
  detectInfiniteLoop,
22
- addChildrenIfNotInOriginal
11
+ propertizeElement,
12
+ createElement,
13
+ applyExtends,
14
+ createScope,
15
+ isMethod,
16
+ OPTIONS,
17
+ initProps,
18
+ createIfConditionFlag,
19
+ deepClone
23
20
  } from '@domql/utils'
24
21
 
25
22
  import { applyAnimationFrame, triggerEventOn } from '@domql/event'
26
23
  import { assignNode } from '@domql/render'
27
24
  import { createState } from '@domql/state'
28
25
 
29
- import { isMethod } from './methods/index.js'
30
- import { createProps } from './props/index.js'
31
- import { applyExtend } from './extend.js'
32
- import { REGISTRY, registry } from './mixins/index.js'
26
+ import { REGISTRY } from './mixins/index.js'
33
27
  import { addMethods } from './methods/set.js'
34
28
  import { assignKeyAsClassname } from './mixins/classList.js'
35
29
  import { throughInitialExec, throughInitialDefine } from './iterate.js'
36
30
 
37
- import { OPTIONS } from './cache/options.js'
38
-
39
- import {
40
- applyVariant,
41
- createValidDomqlObjectFromSugar
42
- } from './utils/component.js'
43
-
44
31
  const ENV = process.env.NODE_ENV
45
32
 
46
33
  /**
47
- * Creating a domQL element using passed parameters
34
+ * Creating a DOMQL element using passed parameters
48
35
  */
49
- export const create = async (element, parent, key, options = OPTIONS.create || {}, attachOptions) => {
50
- cacheOptions(element, options)
51
-
52
- // if element is STRING
53
- if (checkIfPrimitive(element)) {
54
- element = applyValueAsText(element, parent, key)
36
+ export const create = async (
37
+ props,
38
+ parentEl,
39
+ passedKey,
40
+ options = OPTIONS.create || {},
41
+ attachOptions
42
+ ) => {
43
+ cacheOptions(options)
44
+
45
+ const element = createElement(props, parentEl, passedKey, options, ROOT)
46
+ if (!element) return
47
+
48
+ const { key, parent, __ref: ref } = element
49
+
50
+ if (element.key === 'BannerHgroup') {
51
+ console.warn(deepClone(element))
55
52
  }
56
53
 
57
- element = redefineElement(element, parent, key, options)
58
- parent = redefineParent(element, parent, key)
59
- key = createKey(element, parent, key)
60
-
61
- const ref = addRef(element, parent, key)
62
-
63
- ref.__initialProps = deepClone(element.props)
54
+ applyExtends(element, parent, options)
64
55
 
65
- applyContext(element, parent, options)
66
-
67
- applyComponentFromContext(element, parent, options)
68
-
69
- if (!ref.__skipCreate) {
70
- applyExtend(element, parent, options)
56
+ if (element.key === 'BannerHgroup') {
57
+ console.warn(deepClone(element))
71
58
  }
72
59
 
73
- element.key = key
60
+ propertizeElement(element, parent)
61
+
62
+ await triggerEventOn('start', element, options)
74
63
 
75
64
  if (options.onlyResolveExtends) {
76
65
  return onlyResolveExtends(element, parent, key, options)
77
66
  }
78
67
 
79
- await triggerEventOn('start', element, options)
80
-
81
- switchDefaultOptions(element, parent, options)
68
+ if (element.key === 'BannerHgroup') {
69
+ console.warn(element)
70
+ }
82
71
 
83
- addCaching(element, parent)
72
+ resetOptions(element, parent, options)
84
73
 
85
74
  addMethods(element, parent, options)
86
75
 
@@ -92,19 +81,21 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
92
81
  createIfConditionFlag(element, parent)
93
82
 
94
83
  // apply props settings
95
- createProps(element, parent, options)
96
- if (element.scope === 'props' || element.scope === true) element.scope = element.props
84
+ initProps(element, parent, options)
85
+ if (element.scope === 'props' || element.scope === true) {
86
+ element.scope = element.props
87
+ }
97
88
 
98
89
  // recatch if it passess props again
99
90
  createIfConditionFlag(element, parent)
100
91
 
101
92
  // if it already HAS a NODE
102
- if (element.node && ref.__if) {
103
- return assignNode(element, parent, key, attachOptions)
93
+ if (element.node) {
94
+ if (ref.__if) return assignNode(element, parent, key, attachOptions)
104
95
  }
105
96
 
106
97
  // apply variants
107
- applyVariant(element, parent)
98
+ // applyVariant(element, parent)
108
99
 
109
100
  const onInit = await triggerEventOn('init', element, options)
110
101
  if (onInit === false) return element
@@ -114,8 +105,6 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
114
105
  // generate a CLASS name
115
106
  assignKeyAsClassname(element)
116
107
 
117
- addChildrenIfNotInOriginal(element, parent, key)
118
-
119
108
  await renderElement(element, parent, options, attachOptions)
120
109
 
121
110
  addElementIntoParentChildren(element, parent)
@@ -125,97 +114,32 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
125
114
  return element
126
115
  }
127
116
 
128
- const createBasedOnType = (element, parent, key, options) => {
129
- // if ELEMENT is not given
130
- if (element === undefined) {
131
- if (ENV === 'test' || ENV === 'development') {
132
- console.warn(key, 'element is undefined in', parent && parent.__ref && parent.__ref.path)
133
- }
134
- return {}
135
- }
136
- if (isString(key) && key.slice(0, 2 === '__')) {
137
- if (ENV === 'test' || ENV === 'development') {
138
- console.warn(key, 'seems like to be in __ref')
139
- }
140
- }
141
- if (element === null) return
142
- if (element === true) return { text: true }
143
-
144
- // if element is extend
145
- if (element.__hash) {
146
- return { extend: element }
147
- }
148
-
149
- return element
150
- }
151
-
152
- const redefineElement = (element, parent, key, options) => {
153
- const elementWrapper = createBasedOnType(element, parent, key, options)
154
-
155
- if (options.syntaxv3 || (element.props && element.props.syntaxv3) || (parent && parent.props && parent.props.syntaxv3) /* kalduna guard */) {
156
- if (element.props) element.props.syntaxv3 = true
157
- else element.syntaxv3 = true
158
- return createValidDomqlObjectFromSugar(element, parent, key, options)
159
- } else if (checkIfKeyIsComponent(key)) {
160
- return applyKeyComponentAsExtend(elementWrapper, parent, key)
161
- }
162
-
163
- // TODO: move as define plugins
164
- // Responsive rendering
165
- if (checkIfMedia(key)) {
166
- return applyMediaProps(elementWrapper, parent, key)
167
- }
168
-
169
- return elementWrapper
170
- }
171
-
172
- const redefineParent = (element, parent, key, options) => {
173
- if (!parent) return ROOT
174
- if (isNode(parent)) {
175
- const parentNodeWrapper = { key: ':root', node: parent }
176
- ROOT[`${key}_parent`] = parentNodeWrapper
177
- return parentNodeWrapper
178
- }
179
- return parent
180
- }
181
-
182
- const cacheOptions = (element, options) => {
117
+ const cacheOptions = options => {
183
118
  if (options && !OPTIONS.create) {
184
119
  OPTIONS.create = options
185
- OPTIONS.create.context = element.context || options.context
120
+ OPTIONS.create.context = options.context
186
121
  }
187
122
  }
188
123
 
189
- const createKey = (element, parent, key) => {
190
- return (
191
- exec(key, element) ||
192
- key ||
193
- element.key ||
194
- generateKey()
195
- ).toString()
196
- }
197
-
198
- const addRef = (element, parent) => {
199
- if (element.__ref) element.__ref.origin = element
200
- else element.__ref = { origin: element }
201
- return element.__ref
202
- }
203
-
204
- const switchDefaultOptions = (element, parent, options) => {
124
+ const resetOptions = (element, parent, options) => {
205
125
  if (Object.keys(options).length) {
206
- registry.defaultOptions = options
207
- if (options.ignoreChildExtend) delete options.ignoreChildExtend
126
+ OPTIONS.defaultOptions = options
127
+ if (options.ignoreChildExtends) delete options.ignoreChildExtends
208
128
  }
209
129
  }
210
130
 
211
131
  const addElementIntoParentChildren = (element, parent) => {
212
- if (parent.__ref && parent.__ref.__children) parent.__ref.__children.push(element.key)
132
+ if (parent.__ref && parent.__ref.__children) {
133
+ parent.__ref.__children.push(element.key)
134
+ }
213
135
  }
214
136
 
215
137
  const visitedElements = new WeakMap()
216
138
  const renderElement = async (element, parent, options, attachOptions) => {
217
139
  if (visitedElements.has(element)) {
218
- if (ENV === 'test' || ENV === 'development') console.warn('Cyclic rendering detected:', element.__ref.path)
140
+ if (ENV === 'test' || ENV === 'development') {
141
+ console.warn('Cyclic rendering detected:', element.__ref.path)
142
+ }
219
143
  }
220
144
 
221
145
  visitedElements.set(element, true)
@@ -237,14 +161,31 @@ const renderElement = async (element, parent, options, attachOptions) => {
237
161
  await createNestedChild()
238
162
  } catch (e) {
239
163
  const path = ref.path
240
- if (path.includes('ComponentsGrid')) path.splice(0, path.indexOf('ComponentsGrid') + 2)
241
- if (path.includes('demoComponent')) path.splice(0, path.indexOf('demoComponent') + 1)
164
+ if (path.includes('ComponentsGrid')) {
165
+ path.splice(0, path.indexOf('ComponentsGrid') + 2)
166
+ }
167
+ if (path.includes('demoComponent')) {
168
+ path.splice(0, path.indexOf('demoComponent') + 1)
169
+ }
242
170
  const isDemoComponent = element.lookup(el => el.state.key)?.state?.key
243
- element.warn('Error happened in:', isDemoComponent ? isDemoComponent + ' ' : '' + path.join('.'))
171
+ element.warn(
172
+ 'Error happened in:',
173
+ isDemoComponent ? isDemoComponent + ' ' : '' + path.join('.')
174
+ )
244
175
  element.verbose()
245
176
  element.error(e, options)
246
- if (element.on?.error) element.on.error(e, element, element.state, element.context, options)
247
- if (element.props?.onError) element.props.onError(e, element, element.state, element.context, options)
177
+ if (element.on?.error) {
178
+ element.on.error(e, element, element.state, element.context, options)
179
+ }
180
+ if (element.props?.onError) {
181
+ element.props.onError(
182
+ e,
183
+ element,
184
+ element.state,
185
+ element.context,
186
+ options
187
+ )
188
+ }
248
189
  }
249
190
  }
250
191
 
@@ -273,109 +214,32 @@ const renderElement = async (element, parent, options, attachOptions) => {
273
214
  await triggerEventOn('create', element, options)
274
215
  }
275
216
 
276
- const checkIfPrimitive = (element) => is(element)('string', 'number')
277
-
278
- const applyValueAsText = (element, parent, key) => {
279
- const extendTag = element.extend && element.extend.tag
280
- const childExtendTag = parent.childExtend && parent.childExtend.tag
281
- const childPropsTag = parent.props.childProps && parent.props.childProps.tag
282
- const isKeyValidHTMLTag = ((HTML_TAGS.body.indexOf(key) > -1) && key)
283
- return {
284
- text: element,
285
- tag: extendTag || childExtendTag || childPropsTag || isKeyValidHTMLTag || 'string'
286
- }
287
- }
288
-
289
- const applyContext = (element, parent, options) => {
290
- const forcedOptionsContext = options.context && !ROOT.context && !element.context
291
- if (forcedOptionsContext) ROOT.context = options.context
292
-
293
- // inherit from parent or root
294
- if (!element.context) element.context = parent.context || options.context || ROOT.context
295
- }
296
-
297
- // Create scope - shared object across the elements to the own or the nearest parent
298
- const createScope = (element, parent) => {
299
- const { __ref: ref } = element
300
- // If the element doesn't have a scope, initialize it using the parent's scope or the root's scope.
301
- if (!element.scope) element.scope = parent.scope || ref.root.scope || {}
302
- }
303
-
304
- const createIfConditionFlag = (element, parent) => {
305
- const { __ref: ref } = element
306
-
307
- if (isFunction(element.if) && !element.if(element, element.state, element.context)) {
308
- delete ref.__if
309
- } else ref.__if = true
310
- }
311
-
312
- const addCaching = (element, parent) => {
313
- const { __ref: ref, key } = element
314
- let { __ref: parentRef } = parent
315
-
316
- // enable TRANSFORM in data
317
- if (!element.transform) element.transform = {}
318
-
319
- // enable CACHING
320
- if (!ref.__cached) ref.__cached = {}
321
- if (!ref.__defineCache) ref.__defineCache = {}
322
-
323
- // enable EXEC
324
- if (!ref.__exec) ref.__exec = {}
325
- if (!ref.__execProps) ref.__execProps = {}
326
-
327
- // enable CLASS CACHING
328
- if (!ref.__class) ref.__class = {}
329
- if (!ref.__classNames) ref.__classNames = {}
330
-
331
- // enable CLASS CACHING
332
- if (!ref.__attr) ref.__attr = {}
333
-
334
- // enable CHANGES storing
335
- if (!ref.__changes) ref.__changes = []
336
-
337
- // enable CHANGES storing
338
- if (!ref.__children) ref.__children = []
339
-
340
- if (checkIfKeyIsComponent(key)) ref.__componentKey = key.split('_')[0].split('.')[0].split('+')[0]
341
-
342
- // Add _root element property
343
- const hasRoot = parent && parent.key === ':root'
344
- if (!ref.root) ref.root = hasRoot ? element : parentRef.root
345
-
346
- // set the PATH array
347
- // if (ENV === 'test' || ENV === 'development') {
348
- if (!parentRef) parentRef = parent.ref = {}
349
- if (!parentRef.path) parentRef.path = []
350
- ref.path = parentRef.path.concat(element.key)
351
- // }
352
- }
353
-
354
217
  const onlyResolveExtends = (element, parent, key, options) => {
355
218
  const { __ref: ref } = element
356
- if (!ref.__skipCreate) {
357
- addCaching(element, parent)
358
219
 
359
- addMethods(element, parent, options)
220
+ addMethods(element, parent, options)
360
221
 
361
- createScope(element, parent)
222
+ createScope(element, parent)
362
223
 
363
- createState(element, parent)
364
- if (element.scope === 'state') element.scope = element.state
224
+ createState(element, parent)
225
+ if (element.scope === 'state') element.scope = element.state
365
226
 
366
- createIfConditionFlag(element, parent)
227
+ createIfConditionFlag(element, parent)
367
228
 
368
- // apply props settings
369
- createProps(element, parent, options)
370
- if (element.scope === 'props' || element.scope === true) element.scope = element.props
229
+ // apply props settings
230
+ initProps(element, parent, options)
231
+ if (element.scope === 'props' || element.scope === true) {
232
+ element.scope = element.props
233
+ }
371
234
 
372
- if (element.node && ref.__if) { parent[key || element.key] = element } // Borrowed from assignNode()
235
+ if (element.node && ref.__if) {
236
+ parent[key || element.key] = element
237
+ } // Borrowed from assignNode()
373
238
 
374
- if (!element.props) element.props = {}
375
- applyVariant(element, parent)
239
+ if (!element.props) element.props = {}
240
+ // applyVariant(element, parent)
376
241
 
377
- addElementIntoParentChildren(element, parent)
378
- }
242
+ addElementIntoParentChildren(element, parent)
379
243
 
380
244
  if (element.tag !== 'string' && element.tag !== 'fragment') {
381
245
  throughInitialDefine(element)
@@ -385,18 +249,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
385
249
  if (
386
250
  isUndefined(element[k]) ||
387
251
  isMethod(k, element) ||
388
- isObject((registry.default || registry)[k]) ||
389
- isVariant(k)
390
- ) continue
252
+ isObject(REGISTRY[k])
253
+ ) {
254
+ continue
255
+ }
391
256
 
392
257
  const hasDefine = element.define && element.define[k]
393
- const contextHasDefine = element.context && element.context.define &&
394
- element.context.define[k]
258
+ const contextHasDefine =
259
+ element.context && element.context.define && element.context.define[k]
395
260
  const optionsHasDefine = options.define && options.define[k]
396
261
 
397
262
  if (!ref.__skipCreate && REGISTRY[k] && !optionsHasDefine) {
398
263
  continue
399
- } else if (element[k] && !hasDefine && !optionsHasDefine && !contextHasDefine) {
264
+ } else if (
265
+ element[k] &&
266
+ !hasDefine &&
267
+ !optionsHasDefine &&
268
+ !contextHasDefine
269
+ ) {
400
270
  create(exec(element[k], element), element, k, options)
401
271
  }
402
272
  }
@@ -407,7 +277,7 @@ const onlyResolveExtends = (element, parent, key, options) => {
407
277
  delete element.update
408
278
  delete element.__element
409
279
 
410
- // added by createProps
280
+ // added by initProps
411
281
  if (element.props) {
412
282
  delete element.props.update
413
283
  delete element.props.__element
@@ -416,24 +286,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
416
286
  return element
417
287
  }
418
288
 
419
- const checkIfMedia = (key) => key.slice(0, 1) === '@'
420
-
421
- const applyMediaProps = (element, parent, key) => {
422
- const { props } = element
423
- if (props) {
424
- props.display = 'none'
425
- if (props[key]) props[key].display = props.display
426
- else props[key] = { display: props.display || 'block' }
427
- return element
428
- } else {
429
- return {
430
- ...element,
431
- props: {
432
- display: 'none',
433
- [key]: { display: 'block' }
434
- }
435
- }
436
- }
437
- }
289
+ // const checkIfMedia = (key) => key.slice(0, 1) === '@'
290
+
291
+ // const applyMediaProps = (element, parent, key) => {
292
+ // const { props } = element
293
+ // if (props) {
294
+ // props.display = 'none'
295
+ // if (props[key]) props[key].display = props.display
296
+ // else props[key] = { display: props.display || 'block' }
297
+ // return element
298
+ // } else {
299
+ // return {
300
+ // ...element,
301
+ // props: {
302
+ // display: 'none',
303
+ // [key]: { display: 'block' }
304
+ // }
305
+ // }
306
+ // }
307
+ // }
438
308
 
439
309
  export default create
@@ -0,0 +1,73 @@
1
+ var import_update = require("../update");
2
+ describe("checkIfOnUpdate via update()", () => {
3
+ let element, parent, options;
4
+ beforeEach(() => {
5
+ parent = {
6
+ node: document.createElement("div"),
7
+ props: {},
8
+ state: {}
9
+ };
10
+ element = {
11
+ __ref: {
12
+ __if: void 0,
13
+ __state: null,
14
+ __hasRootState: false,
15
+ __execProps: {},
16
+ contentElementKey: "content"
17
+ },
18
+ parent,
19
+ props: {},
20
+ state: {
21
+ update: (el, st) => {
22
+ return st;
23
+ }
24
+ },
25
+ context: {
26
+ defaultExtends: {}
27
+ },
28
+ node: document.createElement("div"),
29
+ if: () => true,
30
+ previousElement: () => {
31
+ return {};
32
+ },
33
+ nextElement: () => {
34
+ return {};
35
+ },
36
+ removeContent: () => {
37
+ return true;
38
+ }
39
+ };
40
+ options = {};
41
+ });
42
+ it("uses props.if when element.if missing", async () => {
43
+ delete element.if;
44
+ element.props.if = () => false;
45
+ await import_update.update.call(element, {}, options);
46
+ expect(element.node).toEqual(document.createElement("div"));
47
+ });
48
+ it("retains state when __hasRootState=true", async () => {
49
+ element.__ref.__hasRootState = true;
50
+ element.state.critical = true;
51
+ element.__ref.__if = false;
52
+ await import_update.update.call(element, {}, options);
53
+ expect(element.state.critical).toBe(true);
54
+ expect(element.state.preserved).toBeUndefined();
55
+ });
56
+ it("processes nested content with parseDeep", async () => {
57
+ element.content = {
58
+ parseDeep: () => ({ parsed: true }),
59
+ existing: "data"
60
+ };
61
+ await import_update.update.call(element, {}, options);
62
+ expect(element.content.parsed).toBe(true);
63
+ expect(element.content.existing).toBeUndefined();
64
+ });
65
+ it("reattaches after previous sibling", async () => {
66
+ const prevNode = document.createElement("span");
67
+ parent.node.appendChild(prevNode);
68
+ await import_update.update.call(element, {}, options);
69
+ const newElement = parent.node.children[0];
70
+ expect(newElement).toEqual(document.createElement("span"));
71
+ expect(newElement.previousSibling).toBe(null);
72
+ });
73
+ });