@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
@@ -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,153 +1,97 @@
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,
17
+ createRoot
20
18
  } from "@domql/utils";
21
19
  import { applyAnimationFrame, triggerEventOn } from "@domql/event";
22
20
  import { assignNode } from "@domql/render";
23
21
  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";
22
+ import { REGISTRY } from "./mixins/index.js";
28
23
  import { addMethods } from "./methods/set.js";
29
24
  import { assignKeyAsClassname } from "./mixins/classList.js";
30
25
  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
26
  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;
27
+ const create = async (props, parentEl, passedKey, options = OPTIONS.create || {}, attachOptions) => {
28
+ cacheOptions(options);
29
+ const element = createElement(props, parentEl, passedKey, options, ROOT);
30
+ if (!element) return;
31
+ const { key, parent, __ref: ref } = element;
32
+ createRoot(element, parent);
33
+ if (element.key === "BannerHgroup") {
34
+ console.warn(deepClone(element));
35
+ }
36
+ applyExtends(element, parent, options);
37
+ if (element.key === "BannerHgroup") {
38
+ console.warn(deepClone(element));
39
+ }
40
+ propertizeElement(element, parent);
41
+ await triggerEventOn("start", element, options);
53
42
  if (options.onlyResolveExtends) {
54
43
  return onlyResolveExtends(element, parent, key, options);
55
44
  }
56
- await triggerEventOn("start", element, options);
57
- switchDefaultOptions(element, parent, options);
58
- addCaching(element, parent);
45
+ if (element.key === "BannerHgroup") {
46
+ console.warn(element);
47
+ }
48
+ resetOptions(element, parent, options);
59
49
  addMethods(element, parent, options);
60
50
  createScope(element, parent);
61
51
  await createState(element, parent);
62
52
  if (element.scope === "state") element.scope = element.state;
63
53
  createIfConditionFlag(element, parent);
64
- createProps(element, parent, options);
65
- if (element.scope === "props" || element.scope === true) element.scope = element.props;
54
+ initProps(element, parent, options);
55
+ if (element.scope === "props" || element.scope === true) {
56
+ element.scope = element.props;
57
+ }
66
58
  createIfConditionFlag(element, parent);
67
- if (element.node && ref.__if) {
68
- return assignNode(element, parent, key, attachOptions);
59
+ if (element.node) {
60
+ if (ref.__if) return assignNode(element, parent, key, attachOptions);
69
61
  }
70
- applyVariant(element, parent);
71
62
  const onInit = await triggerEventOn("init", element, options);
72
63
  if (onInit === false) return element;
73
64
  triggerEventOn("beforeClassAssign", element, options);
74
65
  assignKeyAsClassname(element);
75
- addChildrenIfNotInOriginal(element, parent, key);
76
66
  await renderElement(element, parent, options, attachOptions);
77
67
  addElementIntoParentChildren(element, parent);
78
68
  await triggerEventOn("complete", element, options);
79
69
  return element;
80
70
  };
81
- const createBasedOnType = (element, parent, key, options) => {
82
- if (element === void 0) {
83
- if (ENV === "test" || ENV === "development") {
84
- console.warn(key, "element is undefined in", parent && parent.__ref && parent.__ref.path);
85
- }
86
- return {};
87
- }
88
- if (isString(key) && key.slice(0, false)) {
89
- if (ENV === "test" || ENV === "development") {
90
- console.warn(key, "seems like to be in __ref");
91
- }
92
- }
93
- if (element === null) return;
94
- if (element === true) return { text: true };
95
- if (element.__hash) {
96
- return { extend: element };
97
- }
98
- return element;
99
- };
100
- const redefineElement = (element, parent, key, options) => {
101
- const elementWrapper = createBasedOnType(element, parent, key, options);
102
- if (options.syntaxv3 || element.props && element.props.syntaxv3 || parent && parent.props && parent.props.syntaxv3) {
103
- if (element.props) element.props.syntaxv3 = true;
104
- else element.syntaxv3 = true;
105
- return createValidDomqlObjectFromSugar(element, parent, key, options);
106
- } else if (checkIfKeyIsComponent(key)) {
107
- return applyKeyComponentAsExtend(elementWrapper, parent, key);
108
- }
109
- if (checkIfMedia(key)) {
110
- return applyMediaProps(elementWrapper, parent, key);
111
- }
112
- return elementWrapper;
113
- };
114
- const redefineParent = (element, parent, key, options) => {
115
- if (!parent) return ROOT;
116
- if (isNode(parent)) {
117
- const parentNodeWrapper = { key: ":root", node: parent };
118
- ROOT[`${key}_parent`] = parentNodeWrapper;
119
- return parentNodeWrapper;
120
- }
121
- return parent;
122
- };
123
- const cacheOptions = (element, options) => {
71
+ const cacheOptions = (options) => {
124
72
  if (options && !OPTIONS.create) {
125
73
  OPTIONS.create = options;
126
- OPTIONS.create.context = element.context || options.context;
74
+ OPTIONS.create.context = options.context;
127
75
  }
128
76
  };
129
- const createKey = (element, parent, key) => {
130
- return (exec(key, element) || key || element.key || generateKey()).toString();
131
- };
132
- const addRef = (element, parent) => {
133
- if (element.__ref) element.__ref.origin = element;
134
- else element.__ref = { origin: element };
135
- return element.__ref;
136
- };
137
- const switchDefaultOptions = (element, parent, options) => {
77
+ const resetOptions = (element, parent, options) => {
138
78
  if (Object.keys(options).length) {
139
- registry.defaultOptions = options;
140
- if (options.ignoreChildExtend) delete options.ignoreChildExtend;
79
+ OPTIONS.defaultOptions = options;
80
+ if (options.ignoreChildExtends) delete options.ignoreChildExtends;
141
81
  }
142
82
  };
143
83
  const addElementIntoParentChildren = (element, parent) => {
144
- if (parent.__ref && parent.__ref.__children) parent.__ref.__children.push(element.key);
84
+ if (parent.__ref && parent.__ref.__children) {
85
+ parent.__ref.__children.push(element.key);
86
+ }
145
87
  };
146
88
  const visitedElements = /* @__PURE__ */ new WeakMap();
147
89
  const renderElement = async (element, parent, options, attachOptions) => {
148
90
  var _a, _b, _c, _d;
149
91
  if (visitedElements.has(element)) {
150
- if (ENV === "test" || ENV === "development") console.warn("Cyclic rendering detected:", element.__ref.path);
92
+ if (ENV === "test" || ENV === "development") {
93
+ console.warn("Cyclic rendering detected:", element.__ref.path);
94
+ }
151
95
  }
152
96
  visitedElements.set(element, true);
153
97
  const { __ref: ref, key } = element;
@@ -164,14 +108,31 @@ const renderElement = async (element, parent, options, attachOptions) => {
164
108
  await createNestedChild();
165
109
  } catch (e) {
166
110
  const path = ref.path;
167
- if (path.includes("ComponentsGrid")) path.splice(0, path.indexOf("ComponentsGrid") + 2);
168
- if (path.includes("demoComponent")) path.splice(0, path.indexOf("demoComponent") + 1);
111
+ if (path.includes("ComponentsGrid")) {
112
+ path.splice(0, path.indexOf("ComponentsGrid") + 2);
113
+ }
114
+ if (path.includes("demoComponent")) {
115
+ path.splice(0, path.indexOf("demoComponent") + 1);
116
+ }
169
117
  const isDemoComponent = (_b = (_a = element.lookup((el) => el.state.key)) == null ? void 0 : _a.state) == null ? void 0 : _b.key;
170
- element.warn("Error happened in:", isDemoComponent ? isDemoComponent + " " : "" + path.join("."));
118
+ element.warn(
119
+ "Error happened in:",
120
+ isDemoComponent ? isDemoComponent + " " : "" + path.join(".")
121
+ );
171
122
  element.verbose();
172
123
  element.error(e, options);
173
- if ((_c = element.on) == null ? void 0 : _c.error) element.on.error(e, element, element.state, element.context, options);
174
- if ((_d = element.props) == null ? void 0 : _d.onError) element.props.onError(e, element, element.state, element.context, options);
124
+ if ((_c = element.on) == null ? void 0 : _c.error) {
125
+ element.on.error(e, element, element.state, element.context, options);
126
+ }
127
+ if ((_d = element.props) == null ? void 0 : _d.onError) {
128
+ element.props.onError(
129
+ e,
130
+ element,
131
+ element.state,
132
+ element.context,
133
+ options
134
+ );
135
+ }
175
136
  }
176
137
  }
177
138
  if (!ref.__if) {
@@ -185,75 +146,29 @@ const renderElement = async (element, parent, options, attachOptions) => {
185
146
  await triggerEventOn("done", element, options);
186
147
  await triggerEventOn("create", element, options);
187
148
  };
188
- const checkIfPrimitive = (element) => is(element)("string", "number");
189
- const applyValueAsText = (element, parent, key) => {
190
- const extendTag = element.extend && element.extend.tag;
191
- const childExtendTag = parent.childExtend && parent.childExtend.tag;
192
- const childPropsTag = parent.props.childProps && parent.props.childProps.tag;
193
- const isKeyValidHTMLTag = HTML_TAGS.body.indexOf(key) > -1 && key;
194
- return {
195
- text: element,
196
- tag: extendTag || childExtendTag || childPropsTag || isKeyValidHTMLTag || "string"
197
- };
198
- };
199
- const applyContext = (element, parent, options) => {
200
- const forcedOptionsContext = options.context && !ROOT.context && !element.context;
201
- if (forcedOptionsContext) ROOT.context = options.context;
202
- if (!element.context) element.context = parent.context || options.context || ROOT.context;
203
- };
204
- const createScope = (element, parent) => {
205
- const { __ref: ref } = element;
206
- if (!element.scope) element.scope = parent.scope || ref.root.scope || {};
207
- };
208
- const createIfConditionFlag = (element, parent) => {
209
- const { __ref: ref } = element;
210
- if (isFunction(element.if) && !element.if(element, element.state, element.context)) {
211
- delete ref.__if;
212
- } else ref.__if = true;
213
- };
214
- const addCaching = (element, parent) => {
215
- const { __ref: ref, key } = element;
216
- let { __ref: parentRef } = parent;
217
- if (!element.transform) element.transform = {};
218
- if (!ref.__cached) ref.__cached = {};
219
- if (!ref.__defineCache) ref.__defineCache = {};
220
- if (!ref.__exec) ref.__exec = {};
221
- if (!ref.__execProps) ref.__execProps = {};
222
- if (!ref.__class) ref.__class = {};
223
- if (!ref.__classNames) ref.__classNames = {};
224
- if (!ref.__attr) ref.__attr = {};
225
- if (!ref.__changes) ref.__changes = [];
226
- if (!ref.__children) ref.__children = [];
227
- if (checkIfKeyIsComponent(key)) ref.__componentKey = key.split("_")[0].split(".")[0].split("+")[0];
228
- const hasRoot = parent && parent.key === ":root";
229
- if (!ref.root) ref.root = hasRoot ? element : parentRef.root;
230
- if (!parentRef) parentRef = parent.ref = {};
231
- if (!parentRef.path) parentRef.path = [];
232
- ref.path = parentRef.path.concat(element.key);
233
- };
234
149
  const onlyResolveExtends = (element, parent, key, options) => {
235
150
  const { __ref: ref } = element;
236
- if (!ref.__skipCreate) {
237
- addCaching(element, parent);
238
- addMethods(element, parent, options);
239
- createScope(element, parent);
240
- createState(element, parent);
241
- if (element.scope === "state") element.scope = element.state;
242
- createIfConditionFlag(element, parent);
243
- createProps(element, parent, options);
244
- if (element.scope === "props" || element.scope === true) element.scope = element.props;
245
- if (element.node && ref.__if) {
246
- parent[key || element.key] = element;
247
- }
248
- if (!element.props) element.props = {};
249
- applyVariant(element, parent);
250
- addElementIntoParentChildren(element, parent);
151
+ addMethods(element, parent, options);
152
+ createScope(element, parent);
153
+ createState(element, parent);
154
+ if (element.scope === "state") element.scope = element.state;
155
+ createIfConditionFlag(element, parent);
156
+ initProps(element, parent, options);
157
+ if (element.scope === "props" || element.scope === true) {
158
+ element.scope = element.props;
251
159
  }
160
+ if (element.node && ref.__if) {
161
+ parent[key || element.key] = element;
162
+ }
163
+ if (!element.props) element.props = {};
164
+ addElementIntoParentChildren(element, parent);
252
165
  if (element.tag !== "string" && element.tag !== "fragment") {
253
166
  throughInitialDefine(element);
254
167
  throughInitialExec(element);
255
168
  for (const k in element) {
256
- if (isUndefined(element[k]) || isMethod(k, element) || isObject((registry.default || registry)[k]) || isVariant(k)) continue;
169
+ if (isUndefined(element[k]) || isMethod(k, element) || isObject(REGISTRY[k])) {
170
+ continue;
171
+ }
257
172
  const hasDefine = element.define && element.define[k];
258
173
  const contextHasDefine = element.context && element.context.define && element.context.define[k];
259
174
  const optionsHasDefine = options.define && options.define[k];
@@ -273,24 +188,6 @@ const onlyResolveExtends = (element, parent, key, options) => {
273
188
  }
274
189
  return element;
275
190
  };
276
- const checkIfMedia = (key) => key.slice(0, 1) === "@";
277
- const applyMediaProps = (element, parent, key) => {
278
- const { props } = element;
279
- if (props) {
280
- props.display = "none";
281
- if (props[key]) props[key].display = props.display;
282
- else props[key] = { display: props.display || "block" };
283
- return element;
284
- } else {
285
- return {
286
- ...element,
287
- props: {
288
- display: "none",
289
- [key]: { display: "block" }
290
- }
291
- };
292
- }
293
- };
294
191
  var create_default = create;
295
192
  export {
296
193
  create,