@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
package/extend.js ADDED
@@ -0,0 +1,95 @@
1
+ 'use strict'
2
+
3
+ import { isFunction, exec } from '@domql/utils'
4
+ import {
5
+ getExtendStack,
6
+ jointStacks,
7
+ cloneAndMergeArrayExtend,
8
+ deepMergeExtend,
9
+ fallbackStringExtend
10
+ } from './utils/index.js'
11
+
12
+ // Module-level cache for context.defaultExtends merged result.
13
+ // Set once on first use, never invalidated — assumes defaultExtends is static.
14
+ let mainExtend
15
+
16
+ /**
17
+ * Checks whether element has `extend` or is a part
18
+ * of parent's `childExtend` extend
19
+ */
20
+ export const applyExtend = (element, parent, options = {}) => {
21
+ if (isFunction(element)) element = exec(element, parent)
22
+
23
+ const { props, __ref } = element
24
+ let extend = props?.extends || element.extends || element.extend
25
+ const variant = props?.variant
26
+ const context = element.context || parent.context
27
+
28
+ extend = fallbackStringExtend(extend, context, options, variant)
29
+
30
+ const extendStack = getExtendStack(extend, context)
31
+
32
+ delete element.extend
33
+
34
+ let childExtendStack = []
35
+ if (parent) {
36
+ element.parent = parent
37
+ // Assign parent attr to the element
38
+ if (!options.ignoreChildExtend && !props?.ignoreChildExtend) {
39
+ childExtendStack = getExtendStack(parent.childExtend, context)
40
+
41
+ const ignoreChildExtendRecursive = props?.ignoreChildExtendRecursive
42
+ if (parent.childExtendRecursive && !ignoreChildExtendRecursive) {
43
+ const canExtendRecursive = element.key !== '__text'
44
+ if (canExtendRecursive) {
45
+ const childExtendRecursiveStack = getExtendStack(
46
+ parent.childExtendRecursive,
47
+ context
48
+ )
49
+ // add error if childExtendRecursive contains element which goes to infinite loop
50
+ childExtendStack = childExtendStack.concat(childExtendRecursiveStack)
51
+ element.childExtendRecursive = parent.childExtendRecursive
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ const extendLength = extendStack.length
58
+ const childExtendLength = childExtendStack.length
59
+
60
+ let stack = []
61
+ if (extendLength && childExtendLength) {
62
+ stack = jointStacks(extendStack, childExtendStack)
63
+ } else if (extendLength) {
64
+ stack = extendStack
65
+ } else if (childExtendLength) {
66
+ stack = childExtendStack
67
+ } else if (!context.defaultExtends) return element
68
+
69
+ if (context.defaultExtends) {
70
+ if (!mainExtend) {
71
+ const defaultOptionsExtend = getExtendStack(
72
+ context.defaultExtends,
73
+ context
74
+ )
75
+ mainExtend = cloneAndMergeArrayExtend(defaultOptionsExtend)
76
+ delete mainExtend.extend
77
+ }
78
+ stack = [].concat(stack, mainExtend)
79
+ }
80
+
81
+ if (__ref) __ref.__extend = stack
82
+ let mergedExtend = cloneAndMergeArrayExtend(stack)
83
+
84
+ const COMPONENTS = context?.components || options.components
85
+ const component = exec(element.component || mergedExtend.component, element)
86
+ if (component && COMPONENTS?.[component]) {
87
+ const componentExtend = cloneAndMergeArrayExtend(
88
+ getExtendStack(COMPONENTS[component])
89
+ )
90
+ mergedExtend = deepMergeExtend(componentExtend, mergedExtend)
91
+ }
92
+
93
+ const merged = deepMergeExtend(element, mergedExtend)
94
+ return merged
95
+ }
package/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
- import { TREE } from './tree'
4
- import create from './create'
5
- import createNode from './node'
6
- import define from './define'
7
- import update from './update'
8
- import set from './set'
3
+ import { TREE } from './tree.js'
4
+ import create from './create.js'
5
+ import createNode from './node.js'
6
+ import define from './define.js'
7
+ import update from './update.js'
8
+ import set from './set.js'
9
9
 
10
10
  export {
11
11
  TREE,
@@ -15,3 +15,6 @@ export {
15
15
  update,
16
16
  set
17
17
  }
18
+
19
+ export * from './event/index.js'
20
+ export * from './render/index.js'
package/iterate.js CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  import {
4
4
  isObject,
5
- exec,
6
5
  isFunction,
7
6
  isNumber,
8
7
  isString,
@@ -10,17 +9,24 @@ import {
10
9
  isContextComponent,
11
10
  isMethod,
12
11
  overwrite,
13
- execPromise
12
+ exec
14
13
  } from '@domql/utils'
15
14
 
16
- export const throughInitialExec = async (element, exclude = {}) => {
15
+ export const throughInitialExec = (element, exclude = {}) => {
17
16
  const { __ref: ref } = element
18
17
  for (const param in element) {
19
18
  if (exclude[param]) continue
20
19
  const prop = element[param]
21
20
  if (isFunction(prop) && !isMethod(param, element)) {
22
21
  ref.__exec[param] = prop
23
- element[param] = await prop(element, element.state, element.context)
22
+ const result = prop(element, element.state, element.context)
23
+ if (result && typeof result.then === 'function') {
24
+ result.then(resolved => {
25
+ element[param] = resolved
26
+ })
27
+ } else {
28
+ element[param] = result
29
+ }
24
30
  }
25
31
  }
26
32
  }
@@ -36,9 +42,14 @@ export const throughUpdatedExec = (element, options = {}) => {
36
42
  if (isDefinedParam) continue
37
43
 
38
44
  const newExec = ref.__exec[param](element, element.state, element.context)
45
+ if (newExec && typeof newExec.then === 'function') {
46
+ newExec.then(resolved => {
47
+ element[param] = resolved
48
+ })
49
+ continue
50
+ }
39
51
  const execReturnsString = isString(newExec) || isNumber(newExec)
40
- // if (prop && prop.node && execReturnsString) {
41
- if (prop && prop.node && execReturnsString) {
52
+ if (prop?.node && execReturnsString) {
42
53
  overwrite(prop, { text: newExec })
43
54
  } else if (newExec !== prop) {
44
55
  if (matchesComponentNaming(param)) {
@@ -58,81 +69,132 @@ export const throughUpdatedExec = (element, options = {}) => {
58
69
  return changes
59
70
  }
60
71
 
61
- export const throughExecProps = async element => {
72
+ export const throughExecProps = element => {
62
73
  const { __ref: ref } = element
63
74
  const { props } = element
64
75
  for (const k in props) {
76
+ // Check for 'is', 'has', 'use' prefixes using charCodeAt
77
+ const c0 = k.charCodeAt(0)
78
+ const c1 = k.charCodeAt(1)
65
79
  const isDefine =
66
- k.startsWith('is') || k.startsWith('has') || k.startsWith('use')
80
+ (c0 === 105 && c1 === 115) || // 'is'
81
+ (c0 === 104 && c1 === 97 && k.charCodeAt(2) === 115) || // 'has'
82
+ (c0 === 117 && c1 === 115 && k.charCodeAt(2) === 101) // 'use'
67
83
  const cachedExecProp = ref.__execProps[k]
68
84
  if (isFunction(cachedExecProp)) {
69
- props[k] = await execPromise(cachedExecProp, element)
85
+ const result = exec(cachedExecProp, element)
86
+ if (result && typeof result.then === 'function') {
87
+ result.then(resolved => {
88
+ props[k] = resolved
89
+ })
90
+ } else {
91
+ props[k] = result
92
+ }
70
93
  } else if (isDefine && isFunction(props[k])) {
71
94
  ref.__execProps[k] = props[k]
72
- props[k] = await execPromise(props[k], element)
95
+ const result = exec(props[k], element)
96
+ if (result && typeof result.then === 'function') {
97
+ result.then(resolved => {
98
+ props[k] = resolved
99
+ })
100
+ } else {
101
+ props[k] = result
102
+ }
73
103
  }
74
104
  }
75
105
  }
76
106
 
77
- export const isPropertyInDefines = (key, element) => {}
78
-
79
- export const throughInitialDefine = async element => {
107
+ export const throughInitialDefine = element => {
80
108
  const { define, context, __ref: ref } = element
81
109
 
82
- let defineObj = {}
110
+ const hasLocalDefine = isObject(define)
83
111
  const hasGlobalDefine = context && isObject(context.define)
84
- if (isObject(define)) defineObj = { ...define }
85
- if (hasGlobalDefine) defineObj = { ...defineObj, ...context.define }
112
+ if (!hasLocalDefine && !hasGlobalDefine) return element
113
+
114
+ const defineObj = hasLocalDefine && hasGlobalDefine
115
+ ? { ...define, ...context.define }
116
+ : hasLocalDefine ? define : context.define
86
117
 
87
118
  for (const param in defineObj) {
88
119
  let elementProp = element[param]
89
120
 
90
121
  if (isFunction(elementProp) && !isMethod(param, element)) {
91
122
  ref.__exec[param] = elementProp
92
- const execParam = (elementProp = await execPromise(elementProp, element))
93
-
94
- if (execParam) {
95
- elementProp = element[param] = execParam.parse
96
- ? execParam.parse()
97
- : execParam
98
- ref.__defineCache[param] = elementProp
123
+ let execParam = exec(elementProp, element)
124
+ if (execParam && typeof execParam.then === 'function') {
125
+ execParam.then(resolved => {
126
+ elementProp = element[param] =
127
+ resolved && resolved.parse ? resolved.parse() : resolved
128
+ if (resolved) {
129
+ ref.__defineCache[param] = elementProp
130
+ }
131
+ })
132
+ } else {
133
+ elementProp = element[param] =
134
+ execParam && execParam.parse ? execParam.parse() : execParam
135
+ if (execParam) {
136
+ ref.__defineCache[param] = elementProp
137
+ }
99
138
  }
100
139
  }
101
140
 
102
- const execParam = await defineObj[param](
141
+ const execParam = defineObj[param](
103
142
  elementProp,
104
143
  element,
105
144
  element.state,
106
145
  element.context
107
146
  )
108
- if (execParam) element[param] = execParam
147
+ if (execParam && typeof execParam.then === 'function') {
148
+ execParam.then(resolved => {
149
+ if (resolved) element[param] = resolved
150
+ })
151
+ } else if (execParam) {
152
+ element[param] = execParam
153
+ }
109
154
  }
110
155
  return element
111
156
  }
112
157
 
113
- export const throughUpdatedDefine = async element => {
158
+ export const throughUpdatedDefine = element => {
114
159
  const { context, define, __ref: ref } = element
115
- const changes = {}
116
160
 
117
- let obj = {}
118
- if (isObject(define)) obj = { ...define }
119
- if (isObject(context && context.define)) obj = { ...obj, ...context.define }
161
+ const hasLocalDefine = isObject(define)
162
+ const hasGlobalDefine = isObject(context?.define)
163
+ if (!hasLocalDefine && !hasGlobalDefine) return
164
+
165
+ const obj = hasLocalDefine && hasGlobalDefine
166
+ ? { ...define, ...context.define }
167
+ : hasLocalDefine ? define : context.define
120
168
 
121
169
  for (const param in obj) {
122
170
  const execParam = ref.__exec[param]
123
171
  if (execParam) {
124
- ref.__defineCache[param] = await execParam(
125
- element,
126
- element.state,
127
- element.context
128
- )
172
+ const result = execParam(element, element.state, element.context)
173
+ if (result && typeof result.then === 'function') {
174
+ result.then(resolved => {
175
+ ref.__defineCache[param] = resolved
176
+ })
177
+ } else {
178
+ ref.__defineCache[param] = result
179
+ }
180
+ }
181
+ const cached = exec(ref.__defineCache[param], element)
182
+ if (cached && typeof cached.then === 'function') {
183
+ cached.then(resolved => {
184
+ // Optionally assign or use resolved value if needed
185
+ })
186
+ continue
129
187
  }
130
- const cached = await execPromise(ref.__defineCache[param], element)
131
188
  const newExecParam =
132
189
  typeof obj[param] === 'function'
133
190
  ? obj[param](cached, element, element.state, element.context)
134
191
  : undefined
135
- if (newExecParam) element[param] = newExecParam
192
+ if (newExecParam && typeof newExecParam.then === 'function') {
193
+ newExecParam.then(resolved => {
194
+ element[param] = resolved
195
+ })
196
+ } else if (newExecParam) {
197
+ element[param] = newExecParam
198
+ }
136
199
  }
137
- return changes
138
200
  }
package/node.js CHANGED
@@ -1,8 +1,9 @@
1
1
  'use strict'
2
2
 
3
3
  import { isFunction, isMethod, isObject, isUndefined } from '@domql/utils'
4
- import { applyEventsOnNode, triggerEventOn } from '@domql/event'
5
- import { cacheNode } from '@domql/render'
4
+ import { applyEventsOnNode, triggerEventOn } from './event/index.js'
5
+ import { propagateEventsFromProps, propagateEventsFromElement } from './utils/propEvents.js'
6
+ import { cacheNode } from './render/index.js'
6
7
  import { create } from './create.js'
7
8
 
8
9
  import {
@@ -14,11 +15,9 @@ import { REGISTRY } from './mixins/index.js'
14
15
  import { applyParam } from './utils/applyParam.js'
15
16
  import setChildren from './children.js'
16
17
  import { setContent } from './set.js'
17
- // import { defineSetter } from './methods'
18
-
19
18
  const ENV = process.env.NODE_ENV
20
19
 
21
- export const createNode = async (element, opts) => {
20
+ export const createNode = (element, opts) => {
22
21
  // create and assign a node
23
22
  let { node, tag, __ref: ref } = element
24
23
 
@@ -34,7 +33,7 @@ export const createNode = async (element, opts) => {
34
33
  } else node = element.node = cacheNode(element)
35
34
 
36
35
  // trigger `on.attachNode`
37
- await triggerEventOn('attachNode', element, opts)
36
+ triggerEventOn('attachNode', element, opts)
38
37
  }
39
38
  // node.dataset // .key = element.key
40
39
 
@@ -44,56 +43,59 @@ export const createNode = async (element, opts) => {
44
43
  }
45
44
 
46
45
  // iterate through exec props
47
- await throughExecProps(element)
46
+ throughExecProps(element)
48
47
 
49
48
  // iterate through define
50
- await throughInitialDefine(element)
49
+ throughInitialDefine(element)
51
50
 
52
51
  // iterate through exec
53
- await throughInitialExec(element)
52
+ throughInitialExec(element)
54
53
 
55
- await applyEventsOnNode(element, { isNewNode, ...opts })
54
+ propagateEventsFromProps(element)
55
+ propagateEventsFromElement(element)
56
+ applyEventsOnNode(element, { isNewNode, ...opts })
56
57
 
57
58
  for (const param in element) {
58
59
  const value = element[param]
59
60
 
60
61
  if (
61
- !Object.hasOwnProperty.call(element, param) ||
62
- isUndefined(value) ||
62
+ !Object.prototype.hasOwnProperty.call(element, param) ||
63
+ value === undefined ||
63
64
  isMethod(param, element) ||
64
- isObject(REGISTRY[param])
65
+ isObject(REGISTRY[param]) ||
66
+ (param.length > 2 && param.charCodeAt(0) === 111 && param.charCodeAt(1) === 110 && param.charCodeAt(2) >= 65 && param.charCodeAt(2) <= 90)
65
67
  ) {
66
68
  continue
67
69
  }
68
70
 
69
- const isElement = await applyParam(param, element, opts)
71
+ const isElement = applyParam(param, element, opts)
70
72
  if (isElement) {
71
73
  const { hasDefine, hasContextDefine } = isElement
72
74
  if (element[param] && !hasDefine && !hasContextDefine) {
73
- const createAsync = async () => {
74
- await create(value, element, param, opts)
75
+ const createAsync = () => {
76
+ create(value, element, param, opts)
75
77
  }
76
78
 
77
79
  // TODO: test this with promise
78
80
  // handle lazy load
79
81
  if ((element.props && element.props.lazyLoad) || opts.lazyLoad) {
80
- window.requestAnimationFrame(async () => {
81
- await createAsync()
82
+ window.requestAnimationFrame(() => {
83
+ createAsync()
82
84
  if (!opts.preventUpdateListener) {
83
- await triggerEventOn('lazyLoad', element, opts)
85
+ triggerEventOn('lazyLoad', element, opts)
84
86
  }
85
87
  })
86
- } else await createAsync()
88
+ } else createAsync()
87
89
  }
88
90
  }
89
91
  }
90
92
 
91
93
  const content = element.children
92
- ? await setChildren(element.children, element, opts)
93
- : element.content || element.content
94
+ ? setChildren(element.children, element, opts)
95
+ : element.children || element.content
94
96
 
95
97
  if (content) {
96
- await setContent(content, element, opts)
98
+ setContent(content, element, opts)
97
99
  }
98
100
 
99
101
  // node.dataset.key = key
package/package.json CHANGED
@@ -1,39 +1,63 @@
1
1
  {
2
2
  "name": "@domql/element",
3
- "version": "3.1.2",
3
+ "version": "3.2.7",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
- "module": "index.js",
7
- "main": "index.js",
6
+ "module": "./dist/esm/index.js",
7
+ "main": "./dist/cjs/index.js",
8
8
  "exports": {
9
9
  ".": {
10
- "kalduna": "./index.js",
11
- "default": "./dist/cjs/index.js"
10
+ "import": "./dist/esm/index.js",
11
+ "require": "./dist/cjs/index.js",
12
+ "browser": "./dist/iife/index.js",
13
+ "default": "./dist/esm/index.js"
12
14
  },
13
- "./utils/component": "./utils/component.js",
14
- "./methods/index.js": "./methods/index.js"
15
+ "./event": {
16
+ "import": "./dist/esm/event/index.js",
17
+ "require": "./dist/cjs/event/index.js",
18
+ "default": "./dist/esm/event/index.js"
19
+ },
20
+ "./render": {
21
+ "import": "./dist/esm/render/index.js",
22
+ "require": "./dist/cjs/render/index.js",
23
+ "default": "./dist/esm/render/index.js"
24
+ },
25
+ "./*.js": {
26
+ "import": "./dist/esm/*.js",
27
+ "require": "./dist/cjs/*.js",
28
+ "default": "./dist/esm/*.js"
29
+ },
30
+ "./*": {
31
+ "import": "./dist/esm/*.js",
32
+ "require": "./dist/cjs/*.js",
33
+ "default": "./dist/esm/*.js"
34
+ }
15
35
  },
16
36
  "source": "index.js",
17
37
  "files": [
18
- "*/**.js",
19
- "*.js",
20
- "dist"
38
+ "dist",
39
+ "*.js"
21
40
  ],
22
41
  "scripts": {
23
42
  "copy:package:cjs": "cp ../../build/package-cjs.json dist/cjs/package.json",
24
- "build:esm": "npx esbuild *.js **/*.js --target=es2019 --format=esm --outdir=dist/esm",
25
- "build:cjs": "npx esbuild *.js **/*.js --target=node16 --format=cjs --outdir=dist/cjs",
26
- "build": "npx rimraf -I dist; npm run build:cjs; npm run build:esm",
27
- "prepublish": "npx rimraf -I dist && npm run build && npm run copy:package:cjs"
43
+ "build:esm": "cross-env NODE_ENV=$NODE_ENV esbuild *.js methods/*.js mixins/*.js utils/*.js event/*.js render/*.js --target=es2020 --format=esm --outdir=dist/esm --define:process.env.NODE_ENV=process.env.NODE_ENV",
44
+ "build:cjs": "cross-env NODE_ENV=$NODE_ENV esbuild *.js methods/*.js mixins/*.js utils/*.js event/*.js render/*.js --target=node18 --format=cjs --outdir=dist/cjs --define:process.env.NODE_ENV=process.env.NODE_ENV",
45
+ "build": "node ../../build/build.js",
46
+ "prepublish": "npm run build && npm run copy:package:cjs",
47
+ "build:iife": "cross-env NODE_ENV=$NODE_ENV esbuild index.js --bundle --target=es2020 --format=iife --global-name=DomqlElement --outfile=dist/iife/index.js --define:process.env.NODE_ENV=process.env.NODE_ENV"
28
48
  },
29
49
  "dependencies": {
30
- "@domql/event": "^3.1.2",
31
- "@domql/render": "^3.1.2",
32
- "@domql/state": "^3.1.2",
33
- "@domql/utils": "^3.1.2"
50
+ "@domql/report": "^3.2.3",
51
+ "@domql/state": "^3.2.3",
52
+ "@domql/utils": "^3.2.3",
53
+ "attrs-in-props": "^3.2.3"
34
54
  },
35
- "gitHead": "429b36616aa04c8587a26ce3c129815115e35897",
55
+ "gitHead": "9fc1b79b41cdc725ca6b24aec64920a599634681",
36
56
  "devDependencies": {
37
57
  "@babel/core": "^7.26.0"
38
- }
58
+ },
59
+ "browser": "./dist/iife/index.js",
60
+ "unpkg": "./dist/iife/index.js",
61
+ "jsdelivr": "./dist/iife/index.js",
62
+ "sideEffects": false
39
63
  }
package/set.js CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
- import { deepContains, execPromise, isFunction, OPTIONS } from '@domql/utils'
3
+ import { deepContains, exec, isFunction, OPTIONS } from '@domql/utils'
4
4
  import { create } from './create.js'
5
- import { triggerEventOn, triggerEventOnUpdate } from '@domql/event'
5
+ import { triggerEventOn, triggerEventOnUpdate } from './event/index.js'
6
6
 
7
7
  export const setContentKey = (element, opts = {}) => {
8
8
  const { __ref: ref } = element
@@ -13,9 +13,9 @@ export const setContentKey = (element, opts = {}) => {
13
13
  return ref.contentElementKey
14
14
  }
15
15
 
16
- export const reset = async options => {
16
+ export function reset (options) {
17
17
  const element = this
18
- await create(element, element.parent, undefined, {
18
+ create(element, element.parent, undefined, {
19
19
  ignoreChildExtends: true,
20
20
  ...OPTIONS.defaultOptions,
21
21
  ...OPTIONS.create,
@@ -23,30 +23,25 @@ export const reset = async options => {
23
23
  })
24
24
  }
25
25
 
26
- export const resetContent = async (params, element, opts) => {
26
+ export const resetContent = (params, element, opts) => {
27
27
  const contentElementKey = setContentKey(element, opts)
28
28
  if (element[contentElementKey]?.node) removeContent(element, opts)
29
- const contentElem = await create(
30
- params,
31
- element,
32
- contentElementKey || 'content',
33
- {
34
- ignoreChildExtends: true,
35
- ...OPTIONS.defaultOptions,
36
- ...OPTIONS.create,
37
- ...opts
38
- }
39
- )
29
+ const contentElem = create(params, element, contentElementKey || 'content', {
30
+ ignoreChildExtends: true,
31
+ ...OPTIONS.defaultOptions,
32
+ ...OPTIONS.create,
33
+ ...opts
34
+ })
40
35
  if (contentElementKey !== 'content') opts.contentElementKey = 'content' // reset to default
41
36
  return contentElem
42
37
  }
43
38
 
44
- export const updateContent = async function (params, opts) {
39
+ export const updateContent = function (params, opts) {
45
40
  const element = this
46
41
  const contentElementKey = setContentKey(element, opts)
47
42
  if (!element[contentElementKey]) return
48
43
  if (element[contentElementKey].update) {
49
- await element[contentElementKey].update(params, opts)
44
+ element[contentElementKey].update(params, opts)
50
45
  }
51
46
  }
52
47
 
@@ -54,11 +49,11 @@ export const updateContent = async function (params, opts) {
54
49
  * Appends anything as content
55
50
  * an original one as a child
56
51
  */
57
- export async function setContent (param, element, opts) {
58
- const content = await execPromise(param, element)
52
+ export function setContent (param, element, opts) {
53
+ const content = exec(param, element)
59
54
 
60
55
  if (content && element) {
61
- await set.call(element, content, opts)
56
+ set.call(element, content, opts)
62
57
  }
63
58
  }
64
59
 
@@ -76,15 +71,16 @@ export const removeContent = function (el, opts = {}) {
76
71
  // Handle fragment removal
77
72
  if (content.tag === 'fragment' && content.__ref?.__children) {
78
73
  // Remove all child nodes
79
- content.__ref.__children.forEach(key => {
80
- const child = content[key]
74
+ const __children = content.__ref.__children
75
+ for (let i = 0; i < __children.length; i++) {
76
+ const child = content[__children[i]]
81
77
  if (child.node && child.node.parentNode) {
82
78
  child.node.parentNode.removeChild(child.node)
83
79
  }
84
80
  if (isFunction(child.remove)) {
85
81
  child.remove()
86
82
  }
87
- })
83
+ }
88
84
  } else {
89
85
  // Handle regular element removal
90
86
  if (content.node && content.node.parentNode) {
@@ -98,7 +94,7 @@ export const removeContent = function (el, opts = {}) {
98
94
  delete element[contentElementKey]
99
95
  }
100
96
 
101
- export const set = async function (params, options = {}, el) {
97
+ export const set = function (params, options = {}, el) {
102
98
  const element = el || this
103
99
  const { __ref: ref } = element
104
100
 
@@ -119,7 +115,7 @@ export const set = async function (params, options = {}, el) {
119
115
 
120
116
  if (content?.update && !childHasChanged && !childrenIsDifferentFromCache) {
121
117
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
122
- const beforeUpdateReturns = await triggerEventOnUpdate(
118
+ const beforeUpdateReturns = triggerEventOnUpdate(
123
119
  'beforeUpdate',
124
120
  params,
125
121
  element,
@@ -127,9 +123,9 @@ export const set = async function (params, options = {}, el) {
127
123
  )
128
124
  if (beforeUpdateReturns === false) return element
129
125
  }
130
- await content.update(params)
126
+ content.update(params)
131
127
  if (!options.preventUpdateListener && !options.preventListeners) {
132
- await triggerEventOn('update', element, options)
128
+ triggerEventOn('update', element, options)
133
129
  }
134
130
  return
135
131
  }
@@ -152,15 +148,15 @@ export const set = async function (params, options = {}, el) {
152
148
  }
153
149
 
154
150
  if (lazyLoad) {
155
- window.requestAnimationFrame(async () => {
156
- await resetContent(params, element, options)
151
+ window.requestAnimationFrame(() => {
152
+ resetContent(params, element, options)
157
153
  // handle lazy load
158
154
  if (!options.preventUpdateListener) {
159
- await triggerEventOn('lazyLoad', element, options)
155
+ triggerEventOn('lazyLoad', element, options)
160
156
  }
161
157
  })
162
158
  } else {
163
- await resetContent(params, element, options)
159
+ resetContent(params, element, options)
164
160
  }
165
161
  }
166
162