@domql/element 2.5.200 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +1 -1
  2. package/__tests__/checkIfOnUpdate.test.js +103 -0
  3. package/__tests__/children.test.js +213 -0
  4. package/__tests__/define.test.js +75 -0
  5. package/__tests__/inheritStateUpdates.test.js +79 -0
  6. package/__tests__/renderElement.test.js +131 -0
  7. package/__tests__/resetElement.test.js +44 -0
  8. package/__tests__/set.test.js +316 -0
  9. package/__tests__/throughExecProps.test.js +86 -0
  10. package/__tests__/throughInitialDefine.test.js +104 -0
  11. package/__tests__/throughInitialExec.test.js +92 -0
  12. package/__tests__/throughUpdatedDefine.test.js +92 -0
  13. package/__tests__/throughUpdatedExec.test.js +110 -0
  14. package/__tests__/tree.test.js +15 -0
  15. package/__tests__/update.test.js +253 -0
  16. package/children.js +105 -0
  17. package/create.js +125 -252
  18. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +73 -0
  19. package/dist/cjs/__tests__/children.test.js +177 -0
  20. package/dist/cjs/__tests__/define.test.js +75 -0
  21. package/dist/cjs/__tests__/inheritStateUpdates.test.js +62 -0
  22. package/dist/cjs/__tests__/renderElement.test.js +138 -0
  23. package/dist/cjs/__tests__/resetElement.test.js +35 -0
  24. package/dist/cjs/__tests__/set.test.js +256 -0
  25. package/dist/cjs/__tests__/throughExecProps.test.js +62 -0
  26. package/dist/cjs/__tests__/throughInitialDefine.test.js +79 -0
  27. package/dist/cjs/__tests__/throughInitialExec.test.js +73 -0
  28. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +69 -0
  29. package/dist/cjs/__tests__/throughUpdatedExec.test.js +84 -0
  30. package/dist/cjs/__tests__/tree.test.js +11 -0
  31. package/dist/cjs/__tests__/update.test.js +219 -0
  32. package/dist/cjs/children.js +87 -0
  33. package/dist/cjs/create.js +79 -177
  34. package/dist/cjs/iterate.js +29 -13
  35. package/dist/cjs/methods/set.js +27 -25
  36. package/dist/cjs/methods/v2.js +1 -5
  37. package/dist/cjs/mixins/attr.js +7 -6
  38. package/dist/cjs/mixins/index.js +0 -4
  39. package/dist/cjs/mixins/registry.js +7 -67
  40. package/dist/cjs/mixins/scope.js +1 -1
  41. package/dist/cjs/mixins/state.js +3 -4
  42. package/dist/cjs/mixins/text.js +3 -3
  43. package/dist/cjs/node.js +32 -22
  44. package/dist/cjs/set.js +112 -40
  45. package/dist/cjs/update.js +119 -64
  46. package/dist/cjs/utils/applyParam.js +2 -2
  47. package/dist/cjs/utils/index.js +8 -4
  48. package/dist/cjs/utils/onlyResolveExtends.js +4 -7
  49. package/dist/esm/__tests__/checkIfOnUpdate.test.js +73 -0
  50. package/dist/esm/__tests__/children.test.js +177 -0
  51. package/dist/esm/__tests__/define.test.js +53 -0
  52. package/dist/esm/__tests__/inheritStateUpdates.test.js +62 -0
  53. package/dist/esm/__tests__/renderElement.test.js +116 -0
  54. package/dist/esm/__tests__/resetElement.test.js +35 -0
  55. package/dist/esm/__tests__/set.test.js +256 -0
  56. package/dist/esm/__tests__/throughExecProps.test.js +62 -0
  57. package/dist/esm/__tests__/throughInitialDefine.test.js +79 -0
  58. package/dist/esm/__tests__/throughInitialExec.test.js +73 -0
  59. package/dist/esm/__tests__/throughUpdatedDefine.test.js +69 -0
  60. package/dist/esm/__tests__/throughUpdatedExec.test.js +84 -0
  61. package/dist/esm/__tests__/tree.test.js +11 -0
  62. package/dist/esm/__tests__/update.test.js +219 -0
  63. package/dist/esm/children.js +81 -0
  64. package/dist/esm/create.js +85 -188
  65. package/dist/esm/iterate.js +33 -16
  66. package/dist/esm/methods/set.js +6 -4
  67. package/dist/esm/methods/v2.js +1 -5
  68. package/dist/esm/mixins/attr.js +8 -7
  69. package/dist/esm/mixins/data.js +1 -1
  70. package/dist/esm/mixins/index.js +0 -4
  71. package/dist/esm/mixins/registry.js +7 -67
  72. package/dist/esm/mixins/scope.js +1 -1
  73. package/dist/esm/mixins/state.js +4 -5
  74. package/dist/esm/mixins/text.js +4 -7
  75. package/dist/esm/node.js +23 -23
  76. package/dist/esm/set.js +112 -40
  77. package/dist/esm/update.js +122 -68
  78. package/dist/esm/utils/applyParam.js +2 -2
  79. package/dist/esm/utils/index.js +4 -3
  80. package/dist/esm/utils/onlyResolveExtends.js +12 -8
  81. package/iterate.js +44 -26
  82. package/methods/set.js +5 -4
  83. package/methods/v2.js +5 -4
  84. package/mixins/attr.js +13 -7
  85. package/mixins/classList.js +7 -2
  86. package/mixins/data.js +1 -1
  87. package/mixins/index.js +1 -6
  88. package/mixins/registry.js +6 -53
  89. package/mixins/scope.js +1 -1
  90. package/mixins/state.js +4 -5
  91. package/mixins/text.js +4 -7
  92. package/node.js +31 -28
  93. package/package.json +7 -6
  94. package/set.js +129 -41
  95. package/update.js +169 -89
  96. package/utils/applyParam.js +7 -4
  97. package/utils/index.js +1 -3
  98. package/utils/onlyResolveExtends.js +27 -16
  99. package/cache/index.js +0 -3
  100. package/cache/options.js +0 -4
  101. package/dist/cjs/cache/index.js +0 -24
  102. package/dist/cjs/cache/options.js +0 -26
  103. package/dist/cjs/extend.js +0 -81
  104. package/dist/cjs/methods/index.js +0 -320
  105. package/dist/cjs/mixins/content.js +0 -67
  106. package/dist/cjs/props/create.js +0 -92
  107. package/dist/cjs/props/ignore.js +0 -24
  108. package/dist/cjs/props/index.js +0 -21
  109. package/dist/cjs/props/inherit.js +0 -51
  110. package/dist/cjs/props/update.js +0 -34
  111. package/dist/cjs/utils/component.js +0 -74
  112. package/dist/cjs/utils/extendUtils.js +0 -133
  113. package/dist/cjs/utils/object.js +0 -171
  114. package/dist/cjs/utils/propEvents.js +0 -39
  115. package/dist/esm/cache/index.js +0 -4
  116. package/dist/esm/cache/options.js +0 -6
  117. package/dist/esm/extend.js +0 -67
  118. package/dist/esm/methods/index.js +0 -300
  119. package/dist/esm/mixins/content.js +0 -47
  120. package/dist/esm/props/create.js +0 -72
  121. package/dist/esm/props/ignore.js +0 -4
  122. package/dist/esm/props/index.js +0 -4
  123. package/dist/esm/props/inherit.js +0 -31
  124. package/dist/esm/props/update.js +0 -14
  125. package/dist/esm/utils/component.js +0 -62
  126. package/dist/esm/utils/extendUtils.js +0 -113
  127. package/dist/esm/utils/object.js +0 -151
  128. package/dist/esm/utils/propEvents.js +0 -19
  129. package/extend.js +0 -90
  130. package/methods/index.js +0 -317
  131. package/mixins/content.js +0 -55
  132. package/props/create.js +0 -87
  133. package/props/ignore.js +0 -3
  134. package/props/index.js +0 -6
  135. package/props/inherit.js +0 -35
  136. package/props/update.js +0 -17
  137. package/utils/component.js +0 -68
  138. package/utils/extendUtils.js +0 -134
  139. package/utils/object.js +0 -172
  140. package/utils/propEvents.js +0 -19
package/dist/cjs/set.js CHANGED
@@ -19,74 +19,146 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var set_exports = {};
20
20
  __export(set_exports, {
21
21
  default: () => set_default,
22
+ removeContent: () => removeContent,
22
23
  reset: () => reset,
23
- resetElement: () => resetElement,
24
- set: () => set
24
+ resetContent: () => resetContent,
25
+ set: () => set,
26
+ setContent: () => setContent,
27
+ setContentKey: () => setContentKey,
28
+ updateContent: () => updateContent
25
29
  });
26
30
  module.exports = __toCommonJS(set_exports);
27
31
  var import_utils = require("@domql/utils");
28
- var import_options = require("./cache/options.js");
29
32
  var import_create = require("./create.js");
30
- var import_mixins = require("./mixins/index.js");
31
- var import_content = require("./mixins/content.js");
32
33
  var import_event = require("@domql/event");
33
- const resetElement = async (params, element, options) => {
34
- if (!options.preventRemove) (0, import_content.removeContent)(element, options);
34
+ const setContentKey = (element, opts = {}) => {
35
35
  const { __ref: ref } = element;
36
- await (0, import_create.create)(params, element, ref.contentElementKey || "content", {
37
- ignoreChildExtend: true,
38
- ...import_mixins.registry.defaultOptions,
39
- ...import_options.OPTIONS.create,
40
- ...options
41
- });
36
+ const contentElementKey = opts.contentElementKey;
37
+ if (!ref.contentElementKey || contentElementKey !== ref.contentElementKey) {
38
+ ref.contentElementKey = contentElementKey || "content";
39
+ }
40
+ return ref.contentElementKey;
42
41
  };
43
- const reset = (options) => {
42
+ const reset = async (options) => {
44
43
  const element = void 0;
45
- (0, import_create.create)(element, element.parent, void 0, {
46
- ignoreChildExtend: true,
47
- ...import_mixins.registry.defaultOptions,
48
- ...import_options.OPTIONS.create,
44
+ await (0, import_create.create)(element, element.parent, void 0, {
45
+ ignoreChildExtends: true,
46
+ ...import_utils.OPTIONS.defaultOptions,
47
+ ...import_utils.OPTIONS.create,
49
48
  ...options
50
49
  });
51
50
  };
51
+ const resetContent = async (params, element, opts) => {
52
+ var _a;
53
+ const contentElementKey = setContentKey(element, opts);
54
+ if ((_a = element[contentElementKey]) == null ? void 0 : _a.node) removeContent(element, opts);
55
+ const contentElem = await (0, import_create.create)(
56
+ params,
57
+ element,
58
+ contentElementKey || "content",
59
+ {
60
+ ignoreChildExtends: true,
61
+ ...import_utils.OPTIONS.defaultOptions,
62
+ ...import_utils.OPTIONS.create,
63
+ ...opts
64
+ }
65
+ );
66
+ if (contentElementKey !== "content") opts.contentElementKey = "content";
67
+ return contentElem;
68
+ };
69
+ const updateContent = async function(params, opts) {
70
+ const element = this;
71
+ const contentElementKey = setContentKey(element, opts);
72
+ if (!element[contentElementKey]) return;
73
+ if (element[contentElementKey].update) {
74
+ await element[contentElementKey].update(params, opts);
75
+ }
76
+ };
77
+ async function setContent(param, element, opts) {
78
+ const content = await (0, import_utils.execPromise)(param, element);
79
+ if (content && element) {
80
+ set.call(element, content, opts);
81
+ }
82
+ }
83
+ const removeContent = function(el, opts = {}) {
84
+ var _a;
85
+ const element = el || this;
86
+ const contentElementKey = setContentKey(element, opts);
87
+ if (opts.contentElementKey !== "content") {
88
+ opts.contentElementKey = "content";
89
+ }
90
+ const content = element[contentElementKey];
91
+ if (!content) return;
92
+ if (content.tag === "fragment" && ((_a = content.__ref) == null ? void 0 : _a.__children)) {
93
+ content.__ref.__children.forEach((key) => {
94
+ const child = content[key];
95
+ if (child.node && child.node.parentNode) {
96
+ child.node.parentNode.removeChild(child.node);
97
+ }
98
+ if ((0, import_utils.isFunction)(child.remove)) {
99
+ child.remove();
100
+ }
101
+ });
102
+ } else {
103
+ if (content.node && content.node.parentNode) {
104
+ content.node.parentNode.removeChild(content.node);
105
+ }
106
+ if ((0, import_utils.isFunction)(content.remove)) {
107
+ content.remove();
108
+ }
109
+ }
110
+ delete element[contentElementKey];
111
+ };
52
112
  const set = async function(params, options = {}, el) {
53
113
  var _a;
54
114
  const element = el || this;
55
115
  const { __ref: ref } = element;
56
- const content = (0, import_utils.setContentKey)(element, options);
116
+ const contentElementKey = setContentKey(element, options);
117
+ const content = element[contentElementKey];
57
118
  const __contentRef = content && content.__ref;
58
119
  const lazyLoad = element.props && element.props.lazyLoad;
59
- const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection;
60
- if (options.preventContentUpdate === true && !hasCollection) return;
61
- if (ref.__noCollectionDifference || __contentRef && __contentRef.__cached && (0, import_utils.deepContains)(params, content)) {
120
+ const hasChildren = element.children;
121
+ if (options.preventContentUpdate === true && !hasChildren) return;
122
+ const childHasChanged = !ref.__noChildrenDifference;
123
+ const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && (0, import_utils.deepContains)(params, content);
124
+ if ((content == null ? void 0 : content.update) && !childHasChanged && !childrenIsDifferentFromCache) {
62
125
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
63
- const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)("beforeUpdate", params, element, options);
126
+ const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
127
+ "beforeUpdate",
128
+ params,
129
+ element,
130
+ options
131
+ );
64
132
  if (beforeUpdateReturns === false) return element;
65
133
  }
66
- if (content == null ? void 0 : content.update) content.update();
67
- if (!options.preventUpdateListener) await (0, import_event.triggerEventOn)("update", element, options);
134
+ await content.update(params);
135
+ if (!options.preventUpdateListener && !options.preventListeners) {
136
+ await (0, import_event.triggerEventOn)("update", element, options);
137
+ }
68
138
  return;
69
139
  }
70
- if (params) {
71
- let { childExtend, props } = params;
72
- if (!props) props = params.props = {};
73
- if (!childExtend && element.childExtend) {
74
- params.childExtend = element.childExtend;
75
- props.ignoreChildExtend = true;
140
+ if (!params) return element;
141
+ let { childExtends, props, tag } = params;
142
+ if (!props) props = params.props = {};
143
+ if (tag === "fragment") {
144
+ if (!childExtends && element.childExtends) {
145
+ params.childExtends = element.childExtends;
146
+ props.ignoreChildExtends = true;
76
147
  }
77
148
  if (!(props == null ? void 0 : props.childProps) && ((_a = element.props) == null ? void 0 : _a.childProps)) {
78
149
  props.childProps = element.props.childProps;
79
150
  props.ignoreChildProps = true;
80
151
  }
81
- if (lazyLoad) {
82
- window.requestAnimationFrame(async () => {
83
- await resetElement(params, element, options);
84
- if (!options.preventUpdateListener) {
85
- (0, import_event.triggerEventOn)("lazyLoad", element, options);
86
- }
87
- });
88
- } else await resetElement(params, element, options);
89
152
  }
90
- return element;
153
+ if (lazyLoad) {
154
+ window.requestAnimationFrame(async () => {
155
+ await resetContent(params, element, options);
156
+ if (!options.preventUpdateListener) {
157
+ await (0, import_event.triggerEventOn)("lazyLoad", element, options);
158
+ }
159
+ });
160
+ } else {
161
+ await resetContent(params, element, options);
162
+ }
91
163
  };
92
164
  var set_default = set;
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var update_exports = {};
20
30
  __export(update_exports, {
@@ -24,63 +34,75 @@ __export(update_exports, {
24
34
  module.exports = __toCommonJS(update_exports);
25
35
  var import_utils = require("@domql/utils");
26
36
  var import_event = require("@domql/event");
27
- var import_methods = require("./methods/index.js");
28
- var import_props = require("./props/index.js");
29
37
  var import_state = require("@domql/state");
30
38
  var import_create = require("./create.js");
31
39
  var import_iterate = require("./iterate.js");
32
40
  var import_mixins = require("./mixins/index.js");
33
41
  var import_applyParam = require("./utils/applyParam.js");
34
- var import_options = require("./cache/options.js");
35
42
  var import_utils2 = require("./utils/index.js");
36
- const snapshot = {
37
- snapshotId: import_utils.createSnapshotId
38
- };
43
+ var import_set = require("./set.js");
44
+ var import_children = __toESM(require("./children.js"), 1);
39
45
  const UPDATE_DEFAULT_OPTIONS = {
40
46
  stackChanges: false,
41
47
  cleanExec: true,
42
48
  preventRecursive: false,
43
49
  currentSnapshot: false,
44
50
  calleeElement: false,
45
- excludes: import_utils2.METHODS_EXL
51
+ exclude: import_utils2.METHODS_EXL
46
52
  };
47
53
  const update = async function(params = {}, opts) {
48
54
  const calleeElementCache = opts == null ? void 0 : opts.calleeElement;
49
- const options = (0, import_utils.deepClone)((0, import_utils.isObject)(opts) ? (0, import_utils2.deepMerge)(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS, { exclude: ["calleeElement"] });
55
+ const options = (0, import_utils.deepClone)(
56
+ (0, import_utils.isObject)(opts) ? (0, import_utils.deepMerge)(opts, UPDATE_DEFAULT_OPTIONS) : UPDATE_DEFAULT_OPTIONS,
57
+ { exclude: ["calleeElement"] }
58
+ );
50
59
  options.calleeElement = calleeElementCache;
51
60
  const element = this;
52
- const { parent, node, key } = element;
53
- const { excludes, preventInheritAtCurrentState } = options;
54
61
  let ref = element.__ref;
55
62
  if (!ref) ref = element.__ref = {};
56
- const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = captureSnapshot(element, options);
63
+ const [snapshotOnCallee, calleeElement, snapshotHasUpdated] = (0, import_utils.captureSnapshot)(
64
+ element,
65
+ options
66
+ );
57
67
  if (snapshotHasUpdated) return;
58
- if (!options.preventListeners) await (0, import_event.triggerEventOnUpdate)("startUpdate", params, element, options);
59
- if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element) return;
60
- if (!excludes) (0, import_utils.merge)(options, UPDATE_DEFAULT_OPTIONS);
68
+ if (!options.preventListeners) {
69
+ await (0, import_event.triggerEventOnUpdate)("startUpdate", params, element, options);
70
+ }
71
+ const { parent, node, key } = element;
72
+ const { exclude, preventInheritAtCurrentState } = options;
73
+ if (preventInheritAtCurrentState && preventInheritAtCurrentState.__element === element) {
74
+ return;
75
+ }
76
+ if (!exclude) (0, import_utils.merge)(options, UPDATE_DEFAULT_OPTIONS);
61
77
  if ((0, import_utils.isString)(params) || (0, import_utils.isNumber)(params)) {
62
78
  params = { text: params };
63
79
  }
80
+ params = (0, import_utils.propertizeElement)(params);
64
81
  const inheritState = await inheritStateUpdates(element, options);
65
82
  if (inheritState === false) return;
66
- const ifFails = checkIfOnUpdate(element, parent, options);
83
+ const ifFails = await checkIfOnUpdate(element, parent, options);
67
84
  if (ifFails) return;
68
85
  if (ref.__if && !options.preventPropsUpdate) {
69
86
  const hasParentProps = parent.props && (parent.props[key] || parent.props.childProps);
70
- const hasFunctionInProps = ref.__props.filter((v) => (0, import_utils.isFunction)(v));
87
+ const hasFunctionInProps = ref.__propsStack.filter((v) => (0, import_utils.isFunction)(v));
71
88
  const props = params.props || hasParentProps || hasFunctionInProps.length;
72
- if (props) (0, import_props.updateProps)(props, element, parent);
89
+ if (props) (0, import_utils.updateProps)(props, element, parent);
73
90
  }
74
91
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
75
- const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)("beforeUpdate", params, element, options);
92
+ const beforeUpdateReturns = await (0, import_event.triggerEventOnUpdate)(
93
+ "beforeUpdate",
94
+ params,
95
+ element,
96
+ options
97
+ );
76
98
  if (beforeUpdateReturns === false) return element;
77
99
  }
78
- (0, import_utils.overwriteDeep)(element, params, { exclude: import_utils2.METHODS_EXL });
100
+ (0, import_utils.overwriteDeep)(element, params);
79
101
  (0, import_iterate.throughExecProps)(element);
80
102
  (0, import_iterate.throughUpdatedExec)(element, { ignore: UPDATE_DEFAULT_OPTIONS });
81
103
  (0, import_iterate.throughUpdatedDefine)(element);
82
104
  if (!options.isForced && !options.preventListeners) {
83
- (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
105
+ await (0, import_event.triggerEventOn)("beforeClassAssign", element, options);
84
106
  }
85
107
  if (!ref.__if) return false;
86
108
  if (!node) {
@@ -97,19 +119,22 @@ const update = async function(params = {}, opts) {
97
119
  preventUpdateAfterCount
98
120
  } = options;
99
121
  if (preventUpdateAfter) {
100
- if ((0, import_utils.isNumber)(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount) return;
101
- else if (options.preventUpdateAfterCount === void 0) options.preventUpdateAfterCount = 1;
102
- else options.preventUpdateAfterCount++;
122
+ if ((0, import_utils.isNumber)(preventUpdateAfterCount) && preventUpdateAfter <= preventUpdateAfterCount) {
123
+ return;
124
+ } else if (options.preventUpdateAfterCount === void 0) {
125
+ options.preventUpdateAfterCount = 1;
126
+ } else options.preventUpdateAfterCount++;
103
127
  }
104
128
  for (const param in element) {
105
129
  const prop = element[param];
106
130
  if (!Object.hasOwnProperty.call(element, param)) continue;
107
131
  const isInPreventUpdate = (0, import_utils.isArray)(preventUpdate) && preventUpdate.includes(param);
108
132
  const isInPreventDefineUpdate = (0, import_utils.isArray)(preventDefineUpdate) && preventDefineUpdate.includes(param);
109
- const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection;
110
- if ((0, import_utils.isUndefined)(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || preventContentUpdate && param === "content" && !hasCollection || (preventStateUpdate && param) === "state" || (0, import_methods.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param]) || (0, import_utils.isVariant)(param)) continue;
133
+ if ((0, import_utils.isUndefined)(prop) || isInPreventUpdate || isInPreventDefineUpdate || preventDefineUpdate === true || preventDefineUpdate === param || (preventStateUpdate && param) === "state" || (0, import_utils.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
134
+ continue;
135
+ }
111
136
  if (preventStateUpdate === "once") options.preventStateUpdate = false;
112
- const isElement = (0, import_applyParam.applyParam)(param, element, options);
137
+ const isElement = await (0, import_applyParam.applyParam)(param, element, options);
113
138
  if (isElement) {
114
139
  const { hasDefine, hasContextDefine } = isElement;
115
140
  const canUpdate = (0, import_utils.isObject)(prop) && !hasDefine && !hasContextDefine && !preventRecursive;
@@ -118,48 +143,51 @@ const update = async function(params = {}, opts) {
118
143
  if (options.onEachUpdate) {
119
144
  options.onEachUpdate(param, element, element.state, element.context);
120
145
  }
121
- const childUpdateCall = () => update.call(prop, params[prop], {
146
+ const childUpdateCall = async () => await update.call(prop, params[prop], {
122
147
  ...options,
123
148
  currentSnapshot: snapshotOnCallee,
124
149
  calleeElement
125
150
  });
126
- lazyLoad ? import_utils.window.requestAnimationFrame(() => {
127
- childUpdateCall();
128
- if (!options.preventUpdateListener) {
129
- (0, import_event.triggerEventOn)("lazyLoad", element, options);
130
- }
131
- }) : childUpdateCall();
151
+ if (lazyLoad) {
152
+ import_utils.window.requestAnimationFrame(async () => {
153
+ await childUpdateCall();
154
+ if (!options.preventUpdateListener) {
155
+ await (0, import_event.triggerEventOn)("lazyLoad", element, options);
156
+ }
157
+ });
158
+ } else await childUpdateCall();
132
159
  }
133
160
  }
134
- if (!preventUpdateListener) (0, import_event.triggerEventOn)("update", element, options);
135
- };
136
- const captureSnapshot = (element, options) => {
137
- const ref = element.__ref;
138
- const { currentSnapshot, calleeElement } = options;
139
- const isCallee = calleeElement === element;
140
- if (!calleeElement || isCallee) {
141
- const createdStanpshot = snapshot.snapshotId();
142
- ref.__currentSnapshot = createdStanpshot;
143
- return [createdStanpshot, element];
144
- }
145
- const snapshotOnCallee = calleeElement.__ref.__currentSnapshot;
146
- if (currentSnapshot < snapshotOnCallee) {
147
- return [snapshotOnCallee, calleeElement, true];
148
- }
149
- return [snapshotOnCallee, calleeElement];
161
+ if (!preventContentUpdate) {
162
+ const children = params.children || element.children;
163
+ const content = children ? await (0, import_children.default)(children, element, opts) : element.children || params.content;
164
+ if (content) {
165
+ await (0, import_set.setContent)(content, element, options);
166
+ }
167
+ }
168
+ if (!preventUpdateListener) {
169
+ await (0, import_event.triggerEventOn)("update", element, options);
170
+ }
150
171
  };
151
- const checkIfOnUpdate = (element, parent, options) => {
172
+ const checkIfOnUpdate = async (element, parent, options) => {
152
173
  var _a, _b, _c;
153
- if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent) return;
174
+ if (!(0, import_utils.isFunction)(element.if) && !(0, import_utils.isFunction)((_a = element.props) == null ? void 0 : _a.if) || !parent) {
175
+ return;
176
+ }
154
177
  const ref = element.__ref;
155
- const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(element, element.state, element.context, options);
178
+ const ifPassed = (element.if || ((_b = element.props) == null ? void 0 : _b.if))(
179
+ element,
180
+ element.state,
181
+ element.context,
182
+ options
183
+ );
156
184
  const itWasFalse = ref.__if !== true;
157
185
  if (ifPassed) {
158
186
  ref.__if = true;
159
187
  if (itWasFalse) {
160
188
  delete element.__hash;
161
189
  delete element.__text;
162
- delete element.extend;
190
+ delete element.extends;
163
191
  if (!ref.__hasRootState) {
164
192
  delete element.state;
165
193
  }
@@ -173,9 +201,11 @@ const checkIfOnUpdate = (element, parent, options) => {
173
201
  delete element.node;
174
202
  }
175
203
  const contentKey = ref.contentElementKey;
176
- if (element.$collection || element.$stateCollection || element.$propsCollection) {
204
+ if (element.children) {
177
205
  element.removeContent();
178
- } else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep) element[contentKey] = element[contentKey].parseDeep();
206
+ } else if ((_c = element[contentKey]) == null ? void 0 : _c.parseDeep) {
207
+ element[contentKey] = element[contentKey].parseDeep();
208
+ }
179
209
  const previousElement = element.previousElement();
180
210
  const previousNode = previousElement == null ? void 0 : previousElement.node;
181
211
  const hasPrevious = previousNode == null ? void 0 : previousNode.parentNode;
@@ -188,9 +218,19 @@ const checkIfOnUpdate = (element, parent, options) => {
188
218
  };
189
219
  delete element.__ref;
190
220
  delete element.parent;
191
- const createdElement = (0, import_create.create)(element, parent, element.key, import_options.OPTIONS.create, attachOptions);
221
+ const createdElement = await (0, import_create.create)(
222
+ element,
223
+ parent,
224
+ element.key,
225
+ import_utils.OPTIONS.create,
226
+ attachOptions
227
+ );
192
228
  if (options.preventUpdate !== true && element.on && (0, import_utils.isFunction)(element.on.update)) {
193
- (0, import_event.applyEvent)(element.on.update, createdElement, createdElement.state);
229
+ await (0, import_event.applyEvent)(
230
+ element.on.update,
231
+ createdElement,
232
+ createdElement.state
233
+ );
194
234
  }
195
235
  return createdElement;
196
236
  }
@@ -212,23 +252,38 @@ const inheritStateUpdates = async (element, options) => {
212
252
  const shouldForceFunctionState = (0, import_utils.isFunction)(stateKey) && !isHoisted && execStateFunction;
213
253
  if (shouldForceFunctionState) {
214
254
  const execState = (0, import_utils.exec)(stateKey, element);
215
- state.set(execState, { ...options, preventUpdate: true, preventStateUpdateListener: false, updatedByStateFunction: true });
255
+ state.set(execState, {
256
+ ...options,
257
+ preventUpdate: true,
258
+ preventStateUpdateListener: false,
259
+ updatedByStateFunction: true
260
+ });
216
261
  return;
217
262
  }
218
- const keyInParentState = (0, import_state.findInheritedState)(element, element.parent);
263
+ const keyInParentState = (0, import_utils.findInheritedState)(element, element.parent);
219
264
  if (!keyInParentState || options.preventInheritedStateUpdate) return;
220
265
  if (!options.preventBeforeStateUpdateListener && !options.preventListeners) {
221
- const initStateReturns = await (0, import_event.triggerEventOnUpdate)("beforeStateUpdate", keyInParentState, element, options);
266
+ const initStateReturns = await (0, import_event.triggerEventOnUpdate)(
267
+ "beforeStateUpdate",
268
+ keyInParentState,
269
+ element,
270
+ options
271
+ );
222
272
  if (initStateReturns === false) return element;
223
273
  }
224
- const newState = createStateUpdate(element, parent, options);
274
+ const newState = await createStateUpdate(element, parent, options);
225
275
  if (!options.preventStateUpdateListener && !options.preventListeners) {
226
- await (0, import_event.triggerEventOnUpdate)("stateUpdate", newState.parse(), element, options);
276
+ await (0, import_event.triggerEventOnUpdate)(
277
+ "stateUpdate",
278
+ newState.parse(),
279
+ element,
280
+ options
281
+ );
227
282
  }
228
283
  };
229
- const createStateUpdate = (element, parent, options) => {
284
+ const createStateUpdate = async (element, parent, options) => {
230
285
  const __stateChildren = element.state.__children;
231
- const newState = (0, import_state.createState)(element, parent);
286
+ const newState = await (0, import_state.createState)(element, parent);
232
287
  element.state = newState;
233
288
  for (const child in __stateChildren) {
234
289
  if (newState[child]) newState.__children[child] = __stateChildren[child];
@@ -23,7 +23,7 @@ __export(applyParam_exports, {
23
23
  module.exports = __toCommonJS(applyParam_exports);
24
24
  var import_utils = require("@domql/utils");
25
25
  var import_mixins = require("../mixins/index.js");
26
- const applyParam = (param, element, options) => {
26
+ const applyParam = async (param, element, options) => {
27
27
  const { node, context, __ref: ref } = element;
28
28
  const prop = element[param];
29
29
  const { onlyUpdate } = options;
@@ -36,7 +36,7 @@ const applyParam = (param, element, options) => {
36
36
  const hasOnlyUpdate = onlyUpdate ? onlyUpdate === param || element.lookup(onlyUpdate) : true;
37
37
  if (isGlobalTransformer && !hasContextDefine && hasOnlyUpdate) {
38
38
  if ((0, import_utils.isFunction)(isGlobalTransformer)) {
39
- isGlobalTransformer(prop, element, node, options);
39
+ await isGlobalTransformer(prop, element, node, options);
40
40
  return;
41
41
  }
42
42
  }
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
6
10
  var __copyProps = (to, from, except, desc) => {
7
11
  if (from && typeof from === "object" || typeof from === "function") {
8
12
  for (let key of __getOwnPropNames(from))
@@ -11,10 +15,10 @@ var __copyProps = (to, from, except, desc) => {
11
15
  }
12
16
  return to;
13
17
  };
14
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
19
  var utils_exports = {};
20
+ __export(utils_exports, {
21
+ METHODS_EXL: () => METHODS_EXL
22
+ });
17
23
  module.exports = __toCommonJS(utils_exports);
18
- __reExport(utils_exports, require("./object.js"), module.exports);
19
- __reExport(utils_exports, require("./extendUtils.js"), module.exports);
20
- __reExport(utils_exports, require("./component.js"), module.exports);
24
+ const METHODS_EXL = [];
@@ -24,19 +24,15 @@ module.exports = __toCommonJS(onlyResolveExtends_exports);
24
24
  var import_utils = require("@domql/utils");
25
25
  var import__ = require("..");
26
26
  var import_mixins = require("../mixins/index.js");
27
- var import__2 = require(".");
28
- var import_methods = require("../methods");
29
27
  var import_set = require("../methods/set");
30
28
  var import_state = require("@domql/state");
31
29
  var import_render = require("@domql/render");
32
- var import_props = require("../props");
33
30
  var import_iterate = require("../iterate");
34
31
  const onlyResolveExtends = (element, parent, key, options) => {
35
32
  const { __ref } = element;
36
33
  element.tag = (0, import_render.detectTag)(element);
37
34
  {
38
35
  const { __ref: ref2 } = element;
39
- if (!ref2.__cached) ref2.__cached = {};
40
36
  if (!ref2.__defineCache) ref2.__defineCache = {};
41
37
  if (!ref2.__exec) ref2.__exec = {};
42
38
  if (!ref2.__execProps) ref2.__execProps = {};
@@ -58,14 +54,15 @@ const onlyResolveExtends = (element, parent, key, options) => {
58
54
  if (element.node && ref.__if) {
59
55
  parent[key || element.key] = element;
60
56
  }
61
- (0, import_props.createProps)(element, parent, options);
62
- (0, import__2.applyVariant)(element, parent);
57
+ (0, import_utils.initProps)(element, parent, options);
63
58
  if (element.tag !== "string" && element.tag !== "fragment") {
64
59
  (0, import_iterate.throughInitialDefine)(element);
65
60
  (0, import_iterate.throughInitialExec)(element);
66
61
  for (const param in element) {
67
62
  const prop = element[param];
68
- if ((0, import_utils.isUndefined)(prop) || (0, import_methods.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param]) || (0, import__2.isVariant)(param)) continue;
63
+ if ((0, import_utils.isUndefined)(prop) || (0, import_utils.isMethod)(param, element) || (0, import_utils.isObject)(import_mixins.REGISTRY[param])) {
64
+ continue;
65
+ }
69
66
  const hasDefine = element.define && element.define[param];
70
67
  const contextHasDefine = element.context && element.context.define && element.context.define[param];
71
68
  const optionsHasDefine = options.define && options.define[param];
@@ -0,0 +1,73 @@
1
+ import { update } from "../update";
2
+ describe("checkIfOnUpdate via update()", () => {
3
+ let element, parent, options;
4
+ beforeEach(() => {
5
+ parent = {
6
+ node: document.createElement("div"),
7
+ props: {},
8
+ state: {}
9
+ };
10
+ element = {
11
+ __ref: {
12
+ __if: void 0,
13
+ __state: null,
14
+ __hasRootState: false,
15
+ __execProps: {},
16
+ contentElementKey: "content"
17
+ },
18
+ parent,
19
+ props: {},
20
+ state: {
21
+ update: (el, st) => {
22
+ return st;
23
+ }
24
+ },
25
+ context: {
26
+ defaultExtends: {}
27
+ },
28
+ node: document.createElement("div"),
29
+ if: () => true,
30
+ previousElement: () => {
31
+ return {};
32
+ },
33
+ nextElement: () => {
34
+ return {};
35
+ },
36
+ removeContent: () => {
37
+ return true;
38
+ }
39
+ };
40
+ options = {};
41
+ });
42
+ it("uses props.if when element.if missing", async () => {
43
+ delete element.if;
44
+ element.props.if = () => false;
45
+ await update.call(element, {}, options);
46
+ expect(element.node).toEqual(document.createElement("div"));
47
+ });
48
+ it("retains state when __hasRootState=true", async () => {
49
+ element.__ref.__hasRootState = true;
50
+ element.state.critical = true;
51
+ element.__ref.__if = false;
52
+ await update.call(element, {}, options);
53
+ expect(element.state.critical).toBe(true);
54
+ expect(element.state.preserved).toBeUndefined();
55
+ });
56
+ it("processes nested content with parseDeep", async () => {
57
+ element.content = {
58
+ parseDeep: () => ({ parsed: true }),
59
+ existing: "data"
60
+ };
61
+ await update.call(element, {}, options);
62
+ expect(element.content.parsed).toBe(true);
63
+ expect(element.content.existing).toBeUndefined();
64
+ });
65
+ it("reattaches after previous sibling", async () => {
66
+ const prevNode = document.createElement("span");
67
+ parent.node.appendChild(prevNode);
68
+ await update.call(element, {}, options);
69
+ const newElement = parent.node.children[0];
70
+ expect(newElement).toEqual(document.createElement("span"));
71
+ expect(newElement.previousSibling).toBe(null);
72
+ });
73
+ });