@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/create.js CHANGED
@@ -4,83 +4,75 @@ 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,
20
+ createRoot
23
21
  } from '@domql/utils'
24
22
 
25
23
  import { applyAnimationFrame, triggerEventOn } from '@domql/event'
26
24
  import { assignNode } from '@domql/render'
27
25
  import { createState } from '@domql/state'
28
26
 
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'
27
+ import { REGISTRY } from './mixins/index.js'
33
28
  import { addMethods } from './methods/set.js'
34
29
  import { assignKeyAsClassname } from './mixins/classList.js'
35
30
  import { throughInitialExec, throughInitialDefine } from './iterate.js'
36
31
 
37
- import { OPTIONS } from './cache/options.js'
38
-
39
- import {
40
- applyVariant,
41
- createValidDomqlObjectFromSugar
42
- } from './utils/component.js'
43
-
44
32
  const ENV = process.env.NODE_ENV
45
33
 
46
34
  /**
47
- * Creating a domQL element using passed parameters
35
+ * Creating a DOMQL element using passed parameters
48
36
  */
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)
55
- }
37
+ export const create = async (
38
+ props,
39
+ parentEl,
40
+ passedKey,
41
+ options = OPTIONS.create || {},
42
+ attachOptions
43
+ ) => {
44
+ cacheOptions(options)
56
45
 
57
- element = redefineElement(element, parent, key, options)
58
- parent = redefineParent(element, parent, key)
59
- key = createKey(element, parent, key)
46
+ const element = createElement(props, parentEl, passedKey, options, ROOT)
47
+ if (!element) return
60
48
 
61
- const ref = addRef(element, parent, key)
49
+ const { key, parent, __ref: ref } = element
62
50
 
63
- ref.__initialProps = deepClone(element.props)
51
+ createRoot(element, parent) // Call createRoot after addCaching
64
52
 
65
- applyContext(element, parent, options)
53
+ if (element.key === 'BannerHgroup') {
54
+ console.warn(deepClone(element))
55
+ }
66
56
 
67
- applyComponentFromContext(element, parent, options)
57
+ applyExtends(element, parent, options)
68
58
 
69
- if (!ref.__skipCreate) {
70
- applyExtend(element, parent, options)
59
+ if (element.key === 'BannerHgroup') {
60
+ console.warn(deepClone(element))
71
61
  }
72
62
 
73
- element.key = key
63
+ propertizeElement(element, parent)
64
+
65
+ await triggerEventOn('start', element, options)
74
66
 
75
67
  if (options.onlyResolveExtends) {
76
68
  return onlyResolveExtends(element, parent, key, options)
77
69
  }
78
70
 
79
- await triggerEventOn('start', element, options)
80
-
81
- switchDefaultOptions(element, parent, options)
71
+ if (element.key === 'BannerHgroup') {
72
+ console.warn(element)
73
+ }
82
74
 
83
- addCaching(element, parent)
75
+ resetOptions(element, parent, options)
84
76
 
85
77
  addMethods(element, parent, options)
86
78
 
@@ -92,19 +84,21 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
92
84
  createIfConditionFlag(element, parent)
93
85
 
94
86
  // apply props settings
95
- createProps(element, parent, options)
96
- if (element.scope === 'props' || element.scope === true) element.scope = element.props
87
+ initProps(element, parent, options)
88
+ if (element.scope === 'props' || element.scope === true) {
89
+ element.scope = element.props
90
+ }
97
91
 
98
92
  // recatch if it passess props again
99
93
  createIfConditionFlag(element, parent)
100
94
 
101
95
  // if it already HAS a NODE
102
- if (element.node && ref.__if) {
103
- return assignNode(element, parent, key, attachOptions)
96
+ if (element.node) {
97
+ if (ref.__if) return assignNode(element, parent, key, attachOptions)
104
98
  }
105
99
 
106
100
  // apply variants
107
- applyVariant(element, parent)
101
+ // applyVariant(element, parent)
108
102
 
109
103
  const onInit = await triggerEventOn('init', element, options)
110
104
  if (onInit === false) return element
@@ -114,8 +108,6 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
114
108
  // generate a CLASS name
115
109
  assignKeyAsClassname(element)
116
110
 
117
- addChildrenIfNotInOriginal(element, parent, key)
118
-
119
111
  await renderElement(element, parent, options, attachOptions)
120
112
 
121
113
  addElementIntoParentChildren(element, parent)
@@ -125,97 +117,32 @@ export const create = async (element, parent, key, options = OPTIONS.create || {
125
117
  return element
126
118
  }
127
119
 
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) => {
120
+ const cacheOptions = options => {
183
121
  if (options && !OPTIONS.create) {
184
122
  OPTIONS.create = options
185
- OPTIONS.create.context = element.context || options.context
123
+ OPTIONS.create.context = options.context
186
124
  }
187
125
  }
188
126
 
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) => {
127
+ const resetOptions = (element, parent, options) => {
205
128
  if (Object.keys(options).length) {
206
- registry.defaultOptions = options
207
- if (options.ignoreChildExtend) delete options.ignoreChildExtend
129
+ OPTIONS.defaultOptions = options
130
+ if (options.ignoreChildExtends) delete options.ignoreChildExtends
208
131
  }
209
132
  }
210
133
 
211
134
  const addElementIntoParentChildren = (element, parent) => {
212
- if (parent.__ref && parent.__ref.__children) parent.__ref.__children.push(element.key)
135
+ if (parent.__ref && parent.__ref.__children) {
136
+ parent.__ref.__children.push(element.key)
137
+ }
213
138
  }
214
139
 
215
140
  const visitedElements = new WeakMap()
216
141
  const renderElement = async (element, parent, options, attachOptions) => {
217
142
  if (visitedElements.has(element)) {
218
- if (ENV === 'test' || ENV === 'development') console.warn('Cyclic rendering detected:', element.__ref.path)
143
+ if (ENV === 'test' || ENV === 'development') {
144
+ console.warn('Cyclic rendering detected:', element.__ref.path)
145
+ }
219
146
  }
220
147
 
221
148
  visitedElements.set(element, true)
@@ -237,14 +164,31 @@ const renderElement = async (element, parent, options, attachOptions) => {
237
164
  await createNestedChild()
238
165
  } catch (e) {
239
166
  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)
167
+ if (path.includes('ComponentsGrid')) {
168
+ path.splice(0, path.indexOf('ComponentsGrid') + 2)
169
+ }
170
+ if (path.includes('demoComponent')) {
171
+ path.splice(0, path.indexOf('demoComponent') + 1)
172
+ }
242
173
  const isDemoComponent = element.lookup(el => el.state.key)?.state?.key
243
- element.warn('Error happened in:', isDemoComponent ? isDemoComponent + ' ' : '' + path.join('.'))
174
+ element.warn(
175
+ 'Error happened in:',
176
+ isDemoComponent ? isDemoComponent + ' ' : '' + path.join('.')
177
+ )
244
178
  element.verbose()
245
179
  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)
180
+ if (element.on?.error) {
181
+ element.on.error(e, element, element.state, element.context, options)
182
+ }
183
+ if (element.props?.onError) {
184
+ element.props.onError(
185
+ e,
186
+ element,
187
+ element.state,
188
+ element.context,
189
+ options
190
+ )
191
+ }
248
192
  }
249
193
  }
250
194
 
@@ -273,109 +217,32 @@ const renderElement = async (element, parent, options, attachOptions) => {
273
217
  await triggerEventOn('create', element, options)
274
218
  }
275
219
 
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
220
  const onlyResolveExtends = (element, parent, key, options) => {
355
221
  const { __ref: ref } = element
356
- if (!ref.__skipCreate) {
357
- addCaching(element, parent)
358
222
 
359
- addMethods(element, parent, options)
223
+ addMethods(element, parent, options)
360
224
 
361
- createScope(element, parent)
225
+ createScope(element, parent)
362
226
 
363
- createState(element, parent)
364
- if (element.scope === 'state') element.scope = element.state
227
+ createState(element, parent)
228
+ if (element.scope === 'state') element.scope = element.state
365
229
 
366
- createIfConditionFlag(element, parent)
230
+ createIfConditionFlag(element, parent)
367
231
 
368
- // apply props settings
369
- createProps(element, parent, options)
370
- if (element.scope === 'props' || element.scope === true) element.scope = element.props
232
+ // apply props settings
233
+ initProps(element, parent, options)
234
+ if (element.scope === 'props' || element.scope === true) {
235
+ element.scope = element.props
236
+ }
371
237
 
372
- if (element.node && ref.__if) { parent[key || element.key] = element } // Borrowed from assignNode()
238
+ if (element.node && ref.__if) {
239
+ parent[key || element.key] = element
240
+ } // Borrowed from assignNode()
373
241
 
374
- if (!element.props) element.props = {}
375
- applyVariant(element, parent)
242
+ if (!element.props) element.props = {}
243
+ // applyVariant(element, parent)
376
244
 
377
- addElementIntoParentChildren(element, parent)
378
- }
245
+ addElementIntoParentChildren(element, parent)
379
246
 
380
247
  if (element.tag !== 'string' && element.tag !== 'fragment') {
381
248
  throughInitialDefine(element)
@@ -385,18 +252,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
385
252
  if (
386
253
  isUndefined(element[k]) ||
387
254
  isMethod(k, element) ||
388
- isObject((registry.default || registry)[k]) ||
389
- isVariant(k)
390
- ) continue
255
+ isObject(REGISTRY[k])
256
+ ) {
257
+ continue
258
+ }
391
259
 
392
260
  const hasDefine = element.define && element.define[k]
393
- const contextHasDefine = element.context && element.context.define &&
394
- element.context.define[k]
261
+ const contextHasDefine =
262
+ element.context && element.context.define && element.context.define[k]
395
263
  const optionsHasDefine = options.define && options.define[k]
396
264
 
397
265
  if (!ref.__skipCreate && REGISTRY[k] && !optionsHasDefine) {
398
266
  continue
399
- } else if (element[k] && !hasDefine && !optionsHasDefine && !contextHasDefine) {
267
+ } else if (
268
+ element[k] &&
269
+ !hasDefine &&
270
+ !optionsHasDefine &&
271
+ !contextHasDefine
272
+ ) {
400
273
  create(exec(element[k], element), element, k, options)
401
274
  }
402
275
  }
@@ -407,7 +280,7 @@ const onlyResolveExtends = (element, parent, key, options) => {
407
280
  delete element.update
408
281
  delete element.__element
409
282
 
410
- // added by createProps
283
+ // added by initProps
411
284
  if (element.props) {
412
285
  delete element.props.update
413
286
  delete element.props.__element
@@ -416,24 +289,24 @@ const onlyResolveExtends = (element, parent, key, options) => {
416
289
  return element
417
290
  }
418
291
 
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
- }
292
+ // const checkIfMedia = (key) => key.slice(0, 1) === '@'
293
+
294
+ // const applyMediaProps = (element, parent, key) => {
295
+ // const { props } = element
296
+ // if (props) {
297
+ // props.display = 'none'
298
+ // if (props[key]) props[key].display = props.display
299
+ // else props[key] = { display: props.display || 'block' }
300
+ // return element
301
+ // } else {
302
+ // return {
303
+ // ...element,
304
+ // props: {
305
+ // display: 'none',
306
+ // [key]: { display: 'block' }
307
+ // }
308
+ // }
309
+ // }
310
+ // }
438
311
 
439
312
  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
+ });