@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
@@ -0,0 +1,219 @@
1
+ import { update } from "../update";
2
+ describe("update()", () => {
3
+ let element, params, opts;
4
+ beforeEach(() => {
5
+ element = {
6
+ __ref: {
7
+ __execProps: {},
8
+ __exec: {},
9
+ __defineCache: {},
10
+ __props: [],
11
+ __state: "state"
12
+ },
13
+ state: "string",
14
+ props: {},
15
+ parent: {
16
+ props: {}
17
+ },
18
+ define: {},
19
+ node: document.createElement("div"),
20
+ key: "testElement",
21
+ on: {},
22
+ update
23
+ };
24
+ opts = {
25
+ preventUpdate: [],
26
+ preventDefineUpdate: [],
27
+ preventBeforeStateUpdateListener: false,
28
+ preventListeners: false,
29
+ preventStateUpdateListener: false
30
+ };
31
+ params = {};
32
+ });
33
+ it("does not modify opts when params and opts are empty", async () => {
34
+ await element.update({}, opts);
35
+ expect(opts).toEqual({
36
+ calleeElement: false,
37
+ cleanExec: true,
38
+ currentSnapshot: false,
39
+ exclude: [],
40
+ preventRecursive: false,
41
+ stackChanges: false,
42
+ preventUpdate: [],
43
+ preventDefineUpdate: [],
44
+ preventBeforeStateUpdateListener: false,
45
+ preventListeners: false,
46
+ preventStateUpdateListener: false
47
+ });
48
+ });
49
+ it("initializes options with UPDATE_DEFAULT_OPTIONS when opts is empty", async () => {
50
+ await element.update({}, opts);
51
+ expect(opts.calleeElement).toBe(false);
52
+ expect(element.__ref).toBeDefined();
53
+ });
54
+ it("merges opts with UPDATE_DEFAULT_OPTIONS using deepMerge", async () => {
55
+ opts.customOption = true;
56
+ await element.update({}, opts);
57
+ expect(opts.customOption).toBe(true);
58
+ });
59
+ it("converts string params to { text: params }", async () => {
60
+ await element.update("testString", opts);
61
+ expect(element.text).toBe("testString");
62
+ });
63
+ it("converts number params to { text: params }", async () => {
64
+ await element.update(123, opts);
65
+ expect(element.text).toBe(123);
66
+ });
67
+ it("returns early if preventInheritAtCurrentState matches element", async () => {
68
+ opts.preventInheritAtCurrentState = { __element: element };
69
+ await element.update({}, opts);
70
+ expect(element.__ref.__currentSnapshot).toBe(6);
71
+ });
72
+ it("initializes __ref if not present", async () => {
73
+ delete element.__ref;
74
+ await element.update({}, opts);
75
+ expect(element.__ref).toBeDefined();
76
+ });
77
+ it("merges options with UPDATE_DEFAULT_OPTIONS when exclude is missing", async () => {
78
+ await element.update({}, opts);
79
+ expect(opts.exclude).toBeDefined();
80
+ });
81
+ it("does not throw or modify opts when params is undefined", async () => {
82
+ await element.update(void 0, opts);
83
+ expect(opts).toEqual({
84
+ calleeElement: false,
85
+ cleanExec: true,
86
+ currentSnapshot: false,
87
+ exclude: [],
88
+ preventRecursive: false,
89
+ preventUpdate: [],
90
+ preventDefineUpdate: [],
91
+ stackChanges: false,
92
+ preventBeforeStateUpdateListener: false,
93
+ preventListeners: false,
94
+ preventStateUpdateListener: false
95
+ });
96
+ });
97
+ it("does not throw when opts is undefined", async () => {
98
+ await element.update({}, void 0);
99
+ expect(element.__ref).toBeDefined();
100
+ });
101
+ it("does not throw when opts is null", async () => {
102
+ await element.update({}, null);
103
+ expect(element.__ref).toBeDefined();
104
+ });
105
+ it("does not modify the params object", async () => {
106
+ params = { key: "value" };
107
+ await element.update(params, opts);
108
+ expect(params).toEqual({ key: "value" });
109
+ });
110
+ it("does modify opts when params is an empty object", async () => {
111
+ await element.update({}, opts);
112
+ expect(opts).toEqual({
113
+ calleeElement: false,
114
+ cleanExec: true,
115
+ currentSnapshot: false,
116
+ exclude: [],
117
+ preventRecursive: false,
118
+ stackChanges: false,
119
+ preventUpdate: [],
120
+ preventDefineUpdate: [],
121
+ preventBeforeStateUpdateListener: false,
122
+ preventListeners: false,
123
+ preventStateUpdateListener: false
124
+ });
125
+ });
126
+ it("moves regular properties to element.props", async () => {
127
+ params = { props: { title: "Test", description: "Content" } };
128
+ await element.update(params, opts);
129
+ expect(element.props).toEqual({
130
+ title: "Test",
131
+ description: "Content"
132
+ });
133
+ expect(element.title).toBeUndefined();
134
+ });
135
+ it("keeps element-rooted properties", async () => {
136
+ params = { Header: {}, Footer: {}, 0: "index" };
137
+ await element.update(params, opts);
138
+ expect(element.Header).toBeDefined();
139
+ expect(element.Footer).toBeDefined();
140
+ expect(element["0"]).toBe("index");
141
+ expect(element.props).toEqual({});
142
+ });
143
+ it("preserves built-in properties on element", async () => {
144
+ params = { props: { className: "container", hidden: true } };
145
+ await element.update(params, opts);
146
+ expect(element.props.className).toBe("container");
147
+ expect(element.props.hidden).toBe(true);
148
+ expect(element.props).toEqual({ className: "container", hidden: true });
149
+ });
150
+ it("moves element-like properties from props to root", async () => {
151
+ params = { props: { Header: {} } };
152
+ await element.update(params, opts);
153
+ expect(element.Header).toBeDefined();
154
+ expect(element.props.Header).toBeUndefined();
155
+ });
156
+ it("exits early when inheritStateUpdates returns false", async () => {
157
+ element.__ref.__stateBlocked = true;
158
+ await element.update({ props: { shouldChange: true } }, opts);
159
+ expect(element.props.shouldChange).toBe(true);
160
+ expect(element.__ref.__stateBlocked).toBe(true);
161
+ });
162
+ it("exits early when checkIfOnUpdate fails", async () => {
163
+ element.parent.props.ifCondition = false;
164
+ await element.update({ state: { newState: true } }, opts);
165
+ expect(element.state.newState).toBe(true);
166
+ });
167
+ it("updates props from parent key match", async () => {
168
+ element.parent.props.testKey = { inherited: true };
169
+ await element.update({}, opts);
170
+ expect(element.props.inherited).toBeUndefined();
171
+ });
172
+ it("updates props when functions exist in __props", async () => {
173
+ element.__ref.__props.push(() => "dynamic");
174
+ await element.update({}, opts);
175
+ expect(element.props).toEqual(expect.any(Object));
176
+ });
177
+ it("skips props update when preventPropsUpdate=true", async () => {
178
+ opts.preventPropsUpdate = true;
179
+ opts.preventUpdateAfter = true;
180
+ element.parent.props.testKey = { shouldExist: true };
181
+ await element.update({}, opts);
182
+ expect(element.props.shouldExist).toBeUndefined();
183
+ });
184
+ it("should not skips props update when preventPropsUpdate=false", async () => {
185
+ opts.preventPropsUpdate = false;
186
+ opts.lazyLoad = true;
187
+ opts.onEachUpdate = () => {
188
+ return true;
189
+ };
190
+ element.parent.props.testKey = { shouldExist: true };
191
+ element.__ref.__propsStack = [];
192
+ element.__ref.__if = true;
193
+ element.off = { text: "off" };
194
+ await element.update({}, opts);
195
+ expect(element.props.shouldExist).toBeUndefined();
196
+ });
197
+ it("should set preventUpdateAfterCount to 1 when is not a number", async () => {
198
+ opts.preventPropsUpdate = true;
199
+ opts.preventUpdateAfter = 2;
200
+ opts.preventUpdateAfterCount = void 0;
201
+ element.parent.props.testKey = { shouldExist: true };
202
+ await element.update({}, opts);
203
+ expect(element.props.shouldExist).toBeUndefined();
204
+ });
205
+ it("returns element when beforeUpdate rejects", async () => {
206
+ element.props.onBeforeUpdate = () => false;
207
+ const result = await element.update({}, opts);
208
+ expect(result).toBe(element);
209
+ });
210
+ it("processes parent.childProps", async () => {
211
+ element.parent.props.childProps = { global: true };
212
+ await element.update({}, opts);
213
+ expect(element.props.global).toBeUndefined();
214
+ });
215
+ it("processes function props", async () => {
216
+ await element.update({ props: { calc: () => 42 } }, opts);
217
+ expect(element.props.calc()).toBe(42);
218
+ });
219
+ });
@@ -0,0 +1,81 @@
1
+ import {
2
+ concatAddExtends,
3
+ deepClone,
4
+ execPromise,
5
+ getChildStateInKey,
6
+ isArray,
7
+ isDefined,
8
+ isNot,
9
+ isNumber,
10
+ isObject,
11
+ isObjectLike,
12
+ isState,
13
+ isString,
14
+ matchesComponentNaming
15
+ } from "@domql/utils";
16
+ async function setChildren(param, element, opts) {
17
+ let { children, __ref: ref, state } = element;
18
+ let { childrenAs } = element.props || {};
19
+ children = await execPromise(param, element, state) || await execPromise(children, element, state);
20
+ if (children) {
21
+ if (isState(children)) children = children.parse();
22
+ if (isString(children) || isNumber(children)) {
23
+ if (children === "state") children = state.parse();
24
+ else {
25
+ const pathInState = getChildStateInKey(children, state);
26
+ if (pathInState) {
27
+ childrenAs = "state";
28
+ children = getChildStateInKey(children, state) || { value: children };
29
+ } else {
30
+ children = { text: children };
31
+ }
32
+ }
33
+ }
34
+ if (isObject(children)) {
35
+ if (children.$$typeof) {
36
+ return element.call("renderReact", children, element);
37
+ }
38
+ children = Object.keys(children).map((v) => {
39
+ const val = children[v];
40
+ if (matchesComponentNaming(v)) return concatAddExtends(v, val);
41
+ return val;
42
+ });
43
+ }
44
+ }
45
+ if (!children || isNot(children)("array", "object")) return;
46
+ if (isArray(children) && children.find((v) => v == null ? void 0 : v.$$typeof)) {
47
+ const filterReact = children.filter((v) => !(v == null ? void 0 : v.$$typeof));
48
+ if (filterReact.length !== children.length) {
49
+ const extractedReactComponents = children.filter((v) => v == null ? void 0 : v.$$typeof);
50
+ element.call("renderReact", extractedReactComponents, element);
51
+ }
52
+ children = filterReact;
53
+ }
54
+ if (ref.__childrenCache) {
55
+ const equals = JSON.stringify(children) === JSON.stringify(ref.__childrenCache);
56
+ if (equals) {
57
+ ref.__noChildrenDifference = true;
58
+ } else {
59
+ ref.__childrenCache = deepClone(children);
60
+ delete ref.__noChildrenDifference;
61
+ }
62
+ } else {
63
+ ref.__childrenCache = deepClone(children);
64
+ }
65
+ if (isObject(children) || isArray(children)) {
66
+ children = deepClone(children);
67
+ }
68
+ const content = { tag: "fragment" };
69
+ for (const key in children) {
70
+ const value = Object.hasOwnProperty.call(children, key) && children[key];
71
+ if (isDefined(value) && value !== null && value !== false) {
72
+ content[key] = isObjectLike(value) ? childrenAs ? { [childrenAs]: value } : value : childrenAs ? { [childrenAs]: childrenAs === "state" ? { value } : { text: value } } : { text: value };
73
+ }
74
+ }
75
+ return content;
76
+ }
77
+ var children_default = setChildren;
78
+ export {
79
+ children_default as default,
80
+ setChildren
81
+ };
@@ -1,173 +1,101 @@
1
1
  import { createNode } from "./node.js";
2
2
  import { ROOT } from "./tree.js";
3
3
  import {
4
- HTML_TAGS,
5
4
  isObject,
6
- isFunction,
7
- isString,
8
5
  exec,
9
- is,
10
- isNode,
11
6
  isUndefined,
12
- generateKey,
13
- checkIfKeyIsComponent,
14
- deepClone,
15
- applyComponentFromContext,
16
- applyKeyComponentAsExtend,
17
- isVariant,
18
7
  detectInfiniteLoop,
19
- addChildrenIfNotInOriginal
8
+ propertizeElement,
9
+ createElement,
10
+ applyExtends,
11
+ createScope,
12
+ isMethod,
13
+ OPTIONS,
14
+ initProps,
15
+ createIfConditionFlag,
16
+ deepClone
20
17
  } from "@domql/utils";
21
18
  import { applyAnimationFrame, triggerEventOn } from "@domql/event";
22
19
  import { assignNode } from "@domql/render";
23
20
  import { createState } from "@domql/state";
24
- import { isMethod } from "./methods/index.js";
25
- import { createProps } from "./props/index.js";
26
- import { applyExtend } from "./extend.js";
27
- import { REGISTRY, registry } from "./mixins/index.js";
21
+ import { REGISTRY } from "./mixins/index.js";
28
22
  import { addMethods } from "./methods/set.js";
29
23
  import { assignKeyAsClassname } from "./mixins/classList.js";
30
24
  import { throughInitialExec, throughInitialDefine } from "./iterate.js";
31
- import { OPTIONS } from "./cache/options.js";
32
- import {
33
- applyVariant,
34
- createValidDomqlObjectFromSugar
35
- } from "./utils/component.js";
36
25
  const ENV = "development";
37
- const create = async (element, parent, key, options = OPTIONS.create || {}, attachOptions) => {
38
- cacheOptions(element, options);
39
- if (checkIfPrimitive(element)) {
40
- element = applyValueAsText(element, parent, key);
41
- }
42
- element = redefineElement(element, parent, key, options);
43
- parent = redefineParent(element, parent, key);
44
- key = createKey(element, parent, key);
45
- const ref = addRef(element, parent, key);
46
- ref.__initialProps = deepClone(element.props);
47
- applyContext(element, parent, options);
48
- applyComponentFromContext(element, parent, options);
49
- if (!ref.__skipCreate) {
50
- applyExtend(element, parent, options);
51
- }
52
- element.key = key;
26
+ const create = async (props, parentEl, passedKey, options = OPTIONS.create || {}, attachOptions) => {
27
+ cacheOptions(options);
28
+ const element = createElement(props, parentEl, passedKey, options, ROOT);
29
+ if (!element) return;
30
+ const { key, parent, __ref: ref } = element;
31
+ if (element.key === "BannerHgroup") {
32
+ console.warn(deepClone(element));
33
+ }
34
+ applyExtends(element, parent, options);
35
+ if (element.key === "BannerHgroup") {
36
+ console.warn(deepClone(element));
37
+ }
38
+ propertizeElement(element, parent);
39
+ await triggerEventOn("start", element, options);
53
40
  if (options.onlyResolveExtends) {
54
41
  return onlyResolveExtends(element, parent, key, options);
55
42
  }
56
- await triggerEventOn("start", element, options);
57
- switchDefaultOptions(element, parent, options);
58
- addCaching(element, parent);
43
+ if (element.key === "BannerHgroup") {
44
+ console.warn(element);
45
+ }
46
+ resetOptions(element, parent, options);
59
47
  addMethods(element, parent, options);
60
48
  createScope(element, parent);
61
49
  await createState(element, parent);
62
- if (element.scope === "state")
63
- element.scope = element.state;
50
+ if (element.scope === "state") element.scope = element.state;
64
51
  createIfConditionFlag(element, parent);
65
- createProps(element, parent, options);
66
- if (element.scope === "props" || element.scope === true)
52
+ initProps(element, parent, options);
53
+ if (element.scope === "props" || element.scope === true) {
67
54
  element.scope = element.props;
55
+ }
68
56
  createIfConditionFlag(element, parent);
69
- if (element.node && ref.__if) {
70
- return assignNode(element, parent, key, attachOptions);
57
+ if (element.node) {
58
+ if (ref.__if) return assignNode(element, parent, key, attachOptions);
71
59
  }
72
- applyVariant(element, parent);
73
60
  const onInit = await triggerEventOn("init", element, options);
74
- if (onInit === false)
75
- return element;
61
+ if (onInit === false) return element;
76
62
  triggerEventOn("beforeClassAssign", element, options);
77
63
  assignKeyAsClassname(element);
78
- addChildrenIfNotInOriginal(element, parent, key);
79
64
  await renderElement(element, parent, options, attachOptions);
80
65
  addElementIntoParentChildren(element, parent);
81
66
  await triggerEventOn("complete", element, options);
82
67
  return element;
83
68
  };
84
- const createBasedOnType = (element, parent, key, options) => {
85
- if (element === void 0) {
86
- if (ENV === "test" || ENV === "development") {
87
- console.warn(key, "element is undefined in", parent && parent.__ref && parent.__ref.path);
88
- }
89
- return {};
90
- }
91
- if (isString(key) && key.slice(0, 2 === "__")) {
92
- if (ENV === "test" || ENV === "development") {
93
- console.warn(key, "seems like to be in __ref");
94
- }
95
- }
96
- if (element === null)
97
- return;
98
- if (element === true)
99
- return { text: true };
100
- if (element.__hash) {
101
- return { extend: element };
102
- }
103
- return element;
104
- };
105
- const redefineElement = (element, parent, key, options) => {
106
- const elementWrapper = createBasedOnType(element, parent, key, options);
107
- if (options.syntaxv3 || element.props && element.props.syntaxv3 || parent && parent.props && parent.props.syntaxv3) {
108
- if (element.props)
109
- element.props.syntaxv3 = true;
110
- else
111
- element.syntaxv3 = true;
112
- return createValidDomqlObjectFromSugar(element, parent, key, options);
113
- } else if (checkIfKeyIsComponent(key)) {
114
- return applyKeyComponentAsExtend(elementWrapper, parent, key);
115
- }
116
- if (checkIfMedia(key)) {
117
- return applyMediaProps(elementWrapper, parent, key);
118
- }
119
- return elementWrapper;
120
- };
121
- const redefineParent = (element, parent, key, options) => {
122
- if (!parent)
123
- return ROOT;
124
- if (isNode(parent)) {
125
- const parentNodeWrapper = { key: ":root", node: parent };
126
- ROOT[`${key}_parent`] = parentNodeWrapper;
127
- return parentNodeWrapper;
128
- }
129
- return parent;
130
- };
131
- const cacheOptions = (element, options) => {
69
+ const cacheOptions = (options) => {
132
70
  if (options && !OPTIONS.create) {
133
71
  OPTIONS.create = options;
134
- OPTIONS.create.context = element.context || options.context;
72
+ OPTIONS.create.context = options.context;
135
73
  }
136
74
  };
137
- const createKey = (element, parent, key) => {
138
- return (exec(key, element) || key || element.key || generateKey()).toString();
139
- };
140
- const addRef = (element, parent) => {
141
- if (element.__ref)
142
- element.__ref.origin = element;
143
- else
144
- element.__ref = { origin: element };
145
- return element.__ref;
146
- };
147
- const switchDefaultOptions = (element, parent, options) => {
75
+ const resetOptions = (element, parent, options) => {
148
76
  if (Object.keys(options).length) {
149
- registry.defaultOptions = options;
150
- if (options.ignoreChildExtend)
151
- delete options.ignoreChildExtend;
77
+ OPTIONS.defaultOptions = options;
78
+ if (options.ignoreChildExtends) delete options.ignoreChildExtends;
152
79
  }
153
80
  };
154
81
  const addElementIntoParentChildren = (element, parent) => {
155
- if (parent.__ref && parent.__ref.__children)
82
+ if (parent.__ref && parent.__ref.__children) {
156
83
  parent.__ref.__children.push(element.key);
84
+ }
157
85
  };
158
86
  const visitedElements = /* @__PURE__ */ new WeakMap();
159
87
  const renderElement = async (element, parent, options, attachOptions) => {
160
88
  var _a, _b, _c, _d;
161
89
  if (visitedElements.has(element)) {
162
- if (ENV === "test" || ENV === "development")
90
+ if (ENV === "test" || ENV === "development") {
163
91
  console.warn("Cyclic rendering detected:", element.__ref.path);
92
+ }
164
93
  }
165
94
  visitedElements.set(element, true);
166
95
  const { __ref: ref, key } = element;
167
96
  const createNestedChild = async () => {
168
97
  const isInfiniteLoopDetected = detectInfiniteLoop(ref.path);
169
- if (ref.__uniqId || isInfiniteLoopDetected)
170
- return;
98
+ if (ref.__uniqId || isInfiniteLoopDetected) return;
171
99
  await createNode(element, options);
172
100
  ref.__uniqId = Math.random();
173
101
  };
@@ -178,18 +106,31 @@ const renderElement = async (element, parent, options, attachOptions) => {
178
106
  await createNestedChild();
179
107
  } catch (e) {
180
108
  const path = ref.path;
181
- if (path.includes("ComponentsGrid"))
109
+ if (path.includes("ComponentsGrid")) {
182
110
  path.splice(0, path.indexOf("ComponentsGrid") + 2);
183
- if (path.includes("demoComponent"))
111
+ }
112
+ if (path.includes("demoComponent")) {
184
113
  path.splice(0, path.indexOf("demoComponent") + 1);
114
+ }
185
115
  const isDemoComponent = (_b = (_a = element.lookup((el) => el.state.key)) == null ? void 0 : _a.state) == null ? void 0 : _b.key;
186
- element.warn("Error happened in:", isDemoComponent ? isDemoComponent + " " : "" + path.join("."));
116
+ element.warn(
117
+ "Error happened in:",
118
+ isDemoComponent ? isDemoComponent + " " : "" + path.join(".")
119
+ );
187
120
  element.verbose();
188
121
  element.error(e, options);
189
- if ((_c = element.on) == null ? void 0 : _c.error)
122
+ if ((_c = element.on) == null ? void 0 : _c.error) {
190
123
  element.on.error(e, element, element.state, element.context, options);
191
- if ((_d = element.props) == null ? void 0 : _d.onError)
192
- element.props.onError(e, element, element.state, element.context, options);
124
+ }
125
+ if ((_d = element.props) == null ? void 0 : _d.onError) {
126
+ element.props.onError(
127
+ e,
128
+ element,
129
+ element.state,
130
+ element.context,
131
+ options
132
+ );
133
+ }
193
134
  }
194
135
  }
195
136
  if (!ref.__if) {
@@ -203,97 +144,29 @@ const renderElement = async (element, parent, options, attachOptions) => {
203
144
  await triggerEventOn("done", element, options);
204
145
  await triggerEventOn("create", element, options);
205
146
  };
206
- const checkIfPrimitive = (element) => is(element)("string", "number");
207
- const applyValueAsText = (element, parent, key) => {
208
- const extendTag = element.extend && element.extend.tag;
209
- const childExtendTag = parent.childExtend && parent.childExtend.tag;
210
- const childPropsTag = parent.props.childProps && parent.props.childProps.tag;
211
- const isKeyValidHTMLTag = HTML_TAGS.body.indexOf(key) > -1 && key;
212
- return {
213
- text: element,
214
- tag: extendTag || childExtendTag || childPropsTag || isKeyValidHTMLTag || "string"
215
- };
216
- };
217
- const applyContext = (element, parent, options) => {
218
- const forcedOptionsContext = options.context && !ROOT.context && !element.context;
219
- if (forcedOptionsContext)
220
- ROOT.context = options.context;
221
- if (!element.context)
222
- element.context = parent.context || options.context || ROOT.context;
223
- };
224
- const createScope = (element, parent) => {
225
- const { __ref: ref } = element;
226
- if (!element.scope)
227
- element.scope = parent.scope || ref.root.scope || {};
228
- };
229
- const createIfConditionFlag = (element, parent) => {
230
- const { __ref: ref } = element;
231
- if (isFunction(element.if) && !element.if(element, element.state, element.context)) {
232
- delete ref.__if;
233
- } else
234
- ref.__if = true;
235
- };
236
- const addCaching = (element, parent) => {
237
- const { __ref: ref, key } = element;
238
- let { __ref: parentRef } = parent;
239
- if (!element.transform)
240
- element.transform = {};
241
- if (!ref.__cached)
242
- ref.__cached = {};
243
- if (!ref.__defineCache)
244
- ref.__defineCache = {};
245
- if (!ref.__exec)
246
- ref.__exec = {};
247
- if (!ref.__execProps)
248
- ref.__execProps = {};
249
- if (!ref.__class)
250
- ref.__class = {};
251
- if (!ref.__classNames)
252
- ref.__classNames = {};
253
- if (!ref.__attr)
254
- ref.__attr = {};
255
- if (!ref.__changes)
256
- ref.__changes = [];
257
- if (!ref.__children)
258
- ref.__children = [];
259
- if (checkIfKeyIsComponent(key))
260
- ref.__componentKey = key.split("_")[0].split(".")[0].split("+")[0];
261
- const hasRoot = parent && parent.key === ":root";
262
- if (!ref.root)
263
- ref.root = hasRoot ? element : parentRef.root;
264
- if (!parentRef)
265
- parentRef = parent.ref = {};
266
- if (!parentRef.path)
267
- parentRef.path = [];
268
- ref.path = parentRef.path.concat(element.key);
269
- };
270
147
  const onlyResolveExtends = (element, parent, key, options) => {
271
148
  const { __ref: ref } = element;
272
- if (!ref.__skipCreate) {
273
- addCaching(element, parent);
274
- addMethods(element, parent, options);
275
- createScope(element, parent);
276
- createState(element, parent);
277
- if (element.scope === "state")
278
- element.scope = element.state;
279
- createIfConditionFlag(element, parent);
280
- createProps(element, parent, options);
281
- if (element.scope === "props" || element.scope === true)
282
- element.scope = element.props;
283
- if (element.node && ref.__if) {
284
- parent[key || element.key] = element;
285
- }
286
- if (!element.props)
287
- element.props = {};
288
- applyVariant(element, parent);
289
- addElementIntoParentChildren(element, parent);
149
+ addMethods(element, parent, options);
150
+ createScope(element, parent);
151
+ createState(element, parent);
152
+ if (element.scope === "state") element.scope = element.state;
153
+ createIfConditionFlag(element, parent);
154
+ initProps(element, parent, options);
155
+ if (element.scope === "props" || element.scope === true) {
156
+ element.scope = element.props;
157
+ }
158
+ if (element.node && ref.__if) {
159
+ parent[key || element.key] = element;
290
160
  }
161
+ if (!element.props) element.props = {};
162
+ addElementIntoParentChildren(element, parent);
291
163
  if (element.tag !== "string" && element.tag !== "fragment") {
292
164
  throughInitialDefine(element);
293
165
  throughInitialExec(element);
294
166
  for (const k in element) {
295
- if (isUndefined(element[k]) || isMethod(k, element) || isObject((registry.default || registry)[k]) || isVariant(k))
167
+ if (isUndefined(element[k]) || isMethod(k, element) || isObject(REGISTRY[k])) {
296
168
  continue;
169
+ }
297
170
  const hasDefine = element.define && element.define[k];
298
171
  const contextHasDefine = element.context && element.context.define && element.context.define[k];
299
172
  const optionsHasDefine = options.define && options.define[k];
@@ -313,26 +186,6 @@ const onlyResolveExtends = (element, parent, key, options) => {
313
186
  }
314
187
  return element;
315
188
  };
316
- const checkIfMedia = (key) => key.slice(0, 1) === "@";
317
- const applyMediaProps = (element, parent, key) => {
318
- const { props } = element;
319
- if (props) {
320
- props.display = "none";
321
- if (props[key])
322
- props[key].display = props.display;
323
- else
324
- props[key] = { display: props.display || "block" };
325
- return element;
326
- } else {
327
- return {
328
- ...element,
329
- props: {
330
- display: "none",
331
- [key]: { display: "block" }
332
- }
333
- };
334
- }
335
- };
336
189
  var create_default = create;
337
190
  export {
338
191
  create,