@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
@@ -4,24 +4,23 @@ import {
4
4
  isFunction,
5
5
  isNumber,
6
6
  isString,
7
- checkIfKeyIsComponent,
8
- extendizeByKey,
9
- isVariant
7
+ matchesComponentNaming,
8
+ isContextComponent,
9
+ isMethod,
10
+ overwrite
10
11
  } from "@domql/utils";
11
- import { METHODS_EXL, overwrite } from "./utils/index.js";
12
- import { isMethod } from "./methods/index.js";
13
12
  const throughInitialExec = (element, exclude = {}) => {
14
13
  const { __ref: ref } = element;
15
14
  for (const param in element) {
16
15
  if (exclude[param]) continue;
17
16
  const prop = element[param];
18
- if (isFunction(prop) && !isMethod(param, element) && !isVariant(param)) {
17
+ if (isFunction(prop) && !isMethod(param, element)) {
19
18
  ref.__exec[param] = prop;
20
19
  element[param] = prop(element, element.state, element.context);
21
20
  }
22
21
  }
23
22
  };
24
- const throughUpdatedExec = (element, options = { excludes: METHODS_EXL }) => {
23
+ const throughUpdatedExec = (element, options = {}) => {
25
24
  const { __ref: ref } = element;
26
25
  const changes = {};
27
26
  for (const param in ref.__exec) {
@@ -31,13 +30,17 @@ const throughUpdatedExec = (element, options = { excludes: METHODS_EXL }) => {
31
30
  const newExec = ref.__exec[param](element, element.state, element.context);
32
31
  const execReturnsString = isString(newExec) || isNumber(newExec);
33
32
  if (prop && prop.node && execReturnsString) {
34
- overwrite(prop, { text: newExec }, options);
33
+ overwrite(prop, { text: newExec });
35
34
  } else if (newExec !== prop) {
36
- if (checkIfKeyIsComponent(param)) {
37
- const { extend, ...newElem } = extendizeByKey(newExec, element, param);
38
- overwrite(prop, newElem, options);
35
+ if (matchesComponentNaming(param)) {
36
+ const { extends: extend, ...newElem } = isContextComponent(
37
+ newExec,
38
+ element,
39
+ param
40
+ );
41
+ overwrite(prop, newElem);
39
42
  } else {
40
- ref.__cached[param] = changes[param] = prop;
43
+ changes[param] = prop;
41
44
  element[param] = newExec;
42
45
  }
43
46
  }
@@ -58,6 +61,8 @@ const throughExecProps = (element) => {
58
61
  }
59
62
  }
60
63
  };
64
+ const isPropertyInDefines = (key, element) => {
65
+ };
61
66
  const throughInitialDefine = (element) => {
62
67
  const { define, context, __ref: ref } = element;
63
68
  let defineObj = {};
@@ -66,7 +71,7 @@ const throughInitialDefine = (element) => {
66
71
  if (hasGlobalDefine) defineObj = { ...defineObj, ...context.define };
67
72
  for (const param in defineObj) {
68
73
  let elementProp = element[param];
69
- if (isFunction(elementProp) && !isMethod(param, element) && !isVariant(param)) {
74
+ if (isFunction(elementProp) && !isMethod(param, element)) {
70
75
  ref.__exec[param] = elementProp;
71
76
  const execParam2 = elementProp = exec(elementProp, element);
72
77
  if (execParam2) {
@@ -74,7 +79,12 @@ const throughInitialDefine = (element) => {
74
79
  ref.__defineCache[param] = elementProp;
75
80
  }
76
81
  }
77
- const execParam = defineObj[param](elementProp, element, element.state, element.context);
82
+ const execParam = defineObj[param](
83
+ elementProp,
84
+ element,
85
+ element.state,
86
+ element.context
87
+ );
78
88
  if (execParam) element[param] = execParam;
79
89
  }
80
90
  return element;
@@ -87,14 +97,21 @@ const throughUpdatedDefine = (element) => {
87
97
  if (isObject(context && context.define)) obj = { ...obj, ...context.define };
88
98
  for (const param in obj) {
89
99
  const execParam = ref.__exec[param];
90
- if (execParam) ref.__defineCache[param] = execParam(element, element.state, element.context);
100
+ if (execParam) {
101
+ ref.__defineCache[param] = execParam(
102
+ element,
103
+ element.state,
104
+ element.context
105
+ );
106
+ }
91
107
  const cached = exec(ref.__defineCache[param], element);
92
- const newExecParam = obj[param](cached, element, element.state, element.context);
108
+ const newExecParam = typeof obj[param] === "function" ? obj[param](cached, element, element.state, element.context) : void 0;
93
109
  if (newExecParam) element[param] = newExecParam;
94
110
  }
95
111
  return changes;
96
112
  };
97
113
  export {
114
+ isPropertyInDefines,
98
115
  throughExecProps,
99
116
  throughInitialDefine,
100
117
  throughInitialExec,
@@ -1,7 +1,6 @@
1
1
  import { merge, overwrite } from "@domql/utils";
2
- import { set, reset } from "../set.js";
2
+ import { set, reset, updateContent, removeContent } from "../set.js";
3
3
  import { update } from "../update.js";
4
- import { removeContent, updateContent } from "../mixins/content.js";
5
4
  import {
6
5
  call,
7
6
  error,
@@ -23,7 +22,7 @@ import {
23
22
  variables,
24
23
  verbose,
25
24
  warn
26
- } from "./index.js";
25
+ } from "@domql/utils/methods";
27
26
  const addMethods = (element, parent, options = {}) => {
28
27
  const proto = {
29
28
  set,
@@ -52,7 +51,10 @@ const addMethods = (element, parent, options = {}) => {
52
51
  error,
53
52
  call
54
53
  };
55
- if (element.context.methods) (options.strict ? merge : overwrite)(proto, element.context.methods);
54
+ if (element.context.methods) {
55
+ ;
56
+ (options.strict ? merge : overwrite)(proto, element.context.methods);
57
+ }
56
58
  Object.setPrototypeOf(element, proto);
57
59
  };
58
60
  export {
@@ -1,13 +1,9 @@
1
1
  import { isDefined, isFunction, isObjectLike } from "@domql/utils";
2
- import { parseFilters, REGISTRY } from "../mixins/index.js";
3
2
  const defineSetter = (element, key, get, set) => Object.defineProperty(element, key, { get, set });
4
3
  const keys = function() {
5
4
  const element = this;
6
5
  const keys2 = [];
7
6
  for (const param in element) {
8
- if (REGISTRY[param] && !parseFilters.elementKeys.includes(param)) {
9
- continue;
10
- }
11
7
  keys2.push(param);
12
8
  }
13
9
  return keys2;
@@ -48,7 +44,7 @@ const log = function(...args) {
48
44
  args.forEach((v) => console.log(`%c${v}:
49
45
  `, "font-weight: bold", element[v]));
50
46
  } else {
51
- console.log(__ref.path);
47
+ console.log(__ref == null ? void 0 : __ref.path);
52
48
  const keys2 = element.keys();
53
49
  keys2.forEach((v) => console.log(`%c${v}:
54
50
  `, "font-weight: bold", element[v]));
@@ -1,16 +1,17 @@
1
- import { exec, isNot, isNull, isUndefined } from "@domql/utils";
1
+ import { deepMerge, exec, isNot, isNull, isUndefined } from "@domql/utils";
2
2
  import { report } from "@domql/report";
3
- import { deepMerge } from "../utils/index.js";
4
3
  function attr(params, element, node) {
5
4
  const { __ref: ref, props } = element;
6
5
  const { __attr } = ref;
7
6
  if (isNot("object")) report("HTMLInvalidAttr", params);
8
7
  if (params) {
9
- if (props.attr) deepMerge(params, props.attr);
10
- for (const attr2 in params) {
11
- const val = exec(params[attr2], element);
12
- if (val !== false && !isUndefined(val) && !isNull(val) && node.setAttribute) node.setAttribute(attr2, val);
13
- else if (node.removeAttribute) node.removeAttribute(attr2);
8
+ const attrs = exec(params, element);
9
+ if (props.attr) deepMerge(attrs, props.attr);
10
+ for (const attr2 in attrs) {
11
+ const val = exec(attrs[attr2], element);
12
+ if (val !== false && !isUndefined(val) && !isNull(val) && node.setAttribute) {
13
+ node.setAttribute(attr2, val);
14
+ } else if (node.removeAttribute) node.removeAttribute(attr2);
14
15
  __attr[attr2] = val;
15
16
  }
16
17
  }
@@ -1,4 +1,4 @@
1
- import { exec, isObject, deepMerge } from "@domql/utils";
1
+ import { isObject, deepMerge, exec } from "@domql/utils";
2
2
  import { report } from "@domql/report";
3
3
  function data(params, element, node) {
4
4
  if (params) {
@@ -1,21 +1,17 @@
1
1
  import { attr } from "./attr.js";
2
2
  import { applyClasslist } from "./classList.js";
3
- import { setContent } from "./content.js";
4
3
  import { data } from "./data.js";
5
4
  import { html } from "./html.js";
6
5
  import { style } from "./style.js";
7
6
  import { text } from "./text.js";
8
7
  import { state } from "./state.js";
9
8
  import { scope } from "./scope.js";
10
- import { REGISTRY } from "./registry.js";
11
9
  export * from "./registry.js";
12
10
  export {
13
11
  attr,
14
12
  applyClasslist as classList,
15
- setContent as content,
16
13
  data,
17
14
  html,
18
- REGISTRY as registry,
19
15
  scope,
20
16
  state,
21
17
  style,
@@ -1,6 +1,5 @@
1
1
  import attr from "./attr.js";
2
2
  import { classList } from "./classList.js";
3
- import content from "./content.js";
4
3
  import data from "./data.js";
5
4
  import html from "./html.js";
6
5
  import scope from "./scope.js";
@@ -12,94 +11,35 @@ const REGISTRY = {
12
11
  style,
13
12
  text,
14
13
  html,
15
- content,
16
14
  data,
17
15
  class: classList,
18
16
  state,
19
17
  scope,
20
18
  deps: (param, el) => param || el.parent.deps,
21
- extend: {},
22
- childExtend: {},
23
- childExtendRecursive: {},
19
+ extends: {},
20
+ children: {},
21
+ content: {},
22
+ childExtends: {},
23
+ childExtendsRecursive: {},
24
24
  props: {},
25
- path: {},
26
25
  if: {},
27
26
  define: {},
28
- transform: {},
29
27
  __name: {},
30
28
  __ref: {},
31
29
  __hash: {},
32
30
  __text: {},
33
- nextElement: {},
34
- previousElement: {},
35
31
  key: {},
36
32
  tag: {},
37
33
  query: {},
38
34
  parent: {},
39
35
  node: {},
40
- set: {},
41
- reset: {},
42
- update: {},
43
- error: {},
44
- warn: {},
45
- call: {},
46
- setProps: {},
47
- remove: {},
48
- updateContent: {},
49
- removeContent: {},
50
36
  variables: {},
51
- lookup: {},
52
- lookdown: {},
53
- getRef: {},
54
- getPath: {},
55
- lookdownAll: {},
56
- setNodeStyles: {},
57
- spotByPath: {},
58
- keys: {},
59
- log: {},
60
- parse: {},
61
- parseDeep: {},
62
37
  on: {},
63
38
  component: {},
64
- context: {},
65
- $collection: {},
66
- $stateCollection: {},
67
- $propsCollection: {},
68
- $setCollection: {},
69
- $setStateCollection: {},
70
- $setPropsCollection: {}
39
+ context: {}
71
40
  };
72
41
  var registry_default = REGISTRY;
73
- const parseFilters = {
74
- elementKeys: [
75
- "tag",
76
- "text",
77
- "style",
78
- "attr",
79
- "class",
80
- "state",
81
- "props",
82
- "data",
83
- "content",
84
- "html",
85
- "on",
86
- "key",
87
- "extend",
88
- "childExtend",
89
- "childExtendRecursive",
90
- "scope",
91
- "query",
92
- "$collection",
93
- "$stateCollection",
94
- "$propsCollection"
95
- ],
96
- propsKeys: ["__element", "update"],
97
- stateKeys: []
98
- };
99
- const collectionFilters = ["$collection", "$stateCollection", "$propsCollection"];
100
42
  export {
101
43
  REGISTRY,
102
- collectionFilters,
103
- registry_default as default,
104
- parseFilters
44
+ registry_default as default
105
45
  };
@@ -1,5 +1,5 @@
1
1
  import { isFunction, isObject } from "@domql/utils";
2
- function scope(params, element, node) {
2
+ async function scope(params, element, node) {
3
3
  if (!isObject(params)) return;
4
4
  for (const scopeItem in params) {
5
5
  const value = params[scopeItem];
@@ -1,10 +1,9 @@
1
- import { IGNORE_STATE_PARAMS } from "@domql/state";
2
- import { exec, isObject } from "@domql/utils";
3
- function state(params, element, node) {
4
- const state2 = exec(params, element);
1
+ import { execPromise, isObject, STATE_METHODS } from "@domql/utils";
2
+ async function state(params, element, node) {
3
+ const state2 = await execPromise(params, element);
5
4
  if (isObject(state2)) {
6
5
  for (const param in state2) {
7
- if (IGNORE_STATE_PARAMS.includes(param)) continue;
6
+ if (STATE_METHODS.includes(param)) continue;
8
7
  if (!Object.hasOwnProperty.call(state2, param)) continue;
9
8
  }
10
9
  }
@@ -1,10 +1,7 @@
1
1
  import { create } from "../create.js";
2
- import {
3
- exec,
4
- isString
5
- } from "@domql/utils";
6
- function text(param, element, node) {
7
- let prop = exec(param, element);
2
+ import { exec, isString } from "@domql/utils";
3
+ async function text(param, element, node) {
4
+ let prop = exec(param || element.props.text, element);
8
5
  if (isString(prop) && prop.includes("{{")) {
9
6
  prop = element.call("replaceLiteralsWithObjectFields", prop);
10
7
  }
@@ -15,7 +12,7 @@ function text(param, element, node) {
15
12
  if (element.__text.text === prop) return;
16
13
  element.__text.text = prop;
17
14
  if (element.__text.node) element.__text.node.nodeValue = prop;
18
- } else create({ tag: "string", text: prop }, element, "__text");
15
+ } else await create({ tag: "string", text: prop }, element, "__text");
19
16
  }
20
17
  }
21
18
  var text_default = text;
package/dist/esm/node.js CHANGED
@@ -1,7 +1,6 @@
1
- import { exec, isFunction, isObject, isUndefined, isVariant } from "@domql/utils";
1
+ import { isFunction, isMethod, isObject, isUndefined } from "@domql/utils";
2
2
  import { applyEventsOnNode, triggerEventOn } from "@domql/event";
3
3
  import { cacheNode } from "@domql/render";
4
- import { isMethod } from "./methods/index.js";
5
4
  import { create } from "./create.js";
6
5
  import {
7
6
  throughExecProps,
@@ -10,54 +9,55 @@ import {
10
9
  } from "./iterate.js";
11
10
  import { REGISTRY } from "./mixins/index.js";
12
11
  import { applyParam } from "./utils/applyParam.js";
13
- import { propagateEventsFromProps } from "./utils/propEvents.js";
12
+ import setChildren from "./children.js";
13
+ import { setContent } from "./set.js";
14
14
  const ENV = "development";
15
- const createNode = async (element, options) => {
15
+ const createNode = async (element, opts) => {
16
16
  let { node, tag, __ref: ref } = element;
17
+ if (!ref.__if) return element;
17
18
  let isNewNode;
18
19
  if (!node) {
19
20
  isNewNode = true;
20
- if (!ref.__if) return element;
21
21
  if (tag === "shadow") {
22
22
  node = element.node = element.parent.node.attachShadow({ mode: "open" });
23
23
  } else node = element.node = cacheNode(element);
24
- triggerEventOn("attachNode", element, options);
24
+ await triggerEventOn("attachNode", element, opts);
25
25
  }
26
- if (ENV === "test" || ENV === "development" || options.alowRefReference) {
26
+ if (ENV === "test" || ENV === "development" || opts.alowRefReference) {
27
27
  node.ref = element;
28
28
  if (isFunction(node.setAttribute)) node.setAttribute("key", element.key);
29
29
  }
30
- throughExecProps(element);
31
- throughInitialDefine(element);
32
- throughInitialExec(element);
33
- if (element.tag !== "string" && element.tag !== "fragment") {
34
- propagateEventsFromProps(element);
35
- if (isNewNode && isObject(element.on)) {
36
- applyEventsOnNode(element, options);
37
- }
38
- }
30
+ await throughExecProps(element);
31
+ await throughInitialDefine(element);
32
+ await throughInitialExec(element);
33
+ await applyEventsOnNode(element, { isNewNode, ...opts });
39
34
  for (const param in element) {
40
35
  const value = element[param];
41
- if (!Object.hasOwnProperty.call(element, param)) continue;
42
- if (isUndefined(value) || isMethod(param, element) || isVariant(param) || isObject(REGISTRY[param])) continue;
43
- const isElement = applyParam(param, element, options);
36
+ if (!Object.hasOwnProperty.call(element, param) || isUndefined(value) || isMethod(param, element) || isObject(REGISTRY[param])) {
37
+ continue;
38
+ }
39
+ const isElement = await applyParam(param, element, opts);
44
40
  if (isElement) {
45
41
  const { hasDefine, hasContextDefine } = isElement;
46
42
  if (element[param] && !hasDefine && !hasContextDefine) {
47
43
  const createAsync = async () => {
48
- await create(exec(value, element), element, param, options);
44
+ await create(value, element, param, opts);
49
45
  };
50
- if (element.props && element.props.lazyLoad || options.lazyLoad) {
46
+ if (element.props && element.props.lazyLoad || opts.lazyLoad) {
51
47
  window.requestAnimationFrame(async () => {
52
48
  await createAsync();
53
- if (!options.preventUpdateListener) {
54
- triggerEventOn("lazyLoad", element, options);
49
+ if (!opts.preventUpdateListener) {
50
+ await triggerEventOn("lazyLoad", element, opts);
55
51
  }
56
52
  });
57
53
  } else await createAsync();
58
54
  }
59
55
  }
60
56
  }
57
+ const content = element.children ? await setChildren(element.children, element, opts) : element.content || element.content;
58
+ if (content) {
59
+ await setContent(content, element, opts);
60
+ }
61
61
  return element;
62
62
  };
63
63
  var node_default = createNode;
package/dist/esm/set.js CHANGED
@@ -1,72 +1,144 @@
1
- import { deepContains, setContentKey } from "@domql/utils";
2
- import { OPTIONS } from "./cache/options.js";
1
+ import { deepContains, execPromise, isFunction, OPTIONS } from "@domql/utils";
3
2
  import { create } from "./create.js";
4
- import { registry } from "./mixins/index.js";
5
- import { removeContent } from "./mixins/content.js";
6
3
  import { triggerEventOn, triggerEventOnUpdate } from "@domql/event";
7
- const resetElement = async (params, element, options) => {
8
- if (!options.preventRemove) removeContent(element, options);
4
+ const setContentKey = (element, opts = {}) => {
9
5
  const { __ref: ref } = element;
10
- await create(params, element, ref.contentElementKey || "content", {
11
- ignoreChildExtend: true,
12
- ...registry.defaultOptions,
13
- ...OPTIONS.create,
14
- ...options
15
- });
6
+ const contentElementKey = opts.contentElementKey;
7
+ if (!ref.contentElementKey || contentElementKey !== ref.contentElementKey) {
8
+ ref.contentElementKey = contentElementKey || "content";
9
+ }
10
+ return ref.contentElementKey;
16
11
  };
17
- const reset = (options) => {
12
+ const reset = async (options) => {
18
13
  const element = void 0;
19
- create(element, element.parent, void 0, {
20
- ignoreChildExtend: true,
21
- ...registry.defaultOptions,
14
+ await create(element, element.parent, void 0, {
15
+ ignoreChildExtends: true,
16
+ ...OPTIONS.defaultOptions,
22
17
  ...OPTIONS.create,
23
18
  ...options
24
19
  });
25
20
  };
21
+ const resetContent = async (params, element, opts) => {
22
+ var _a;
23
+ const contentElementKey = setContentKey(element, opts);
24
+ if ((_a = element[contentElementKey]) == null ? void 0 : _a.node) removeContent(element, opts);
25
+ const contentElem = await create(
26
+ params,
27
+ element,
28
+ contentElementKey || "content",
29
+ {
30
+ ignoreChildExtends: true,
31
+ ...OPTIONS.defaultOptions,
32
+ ...OPTIONS.create,
33
+ ...opts
34
+ }
35
+ );
36
+ if (contentElementKey !== "content") opts.contentElementKey = "content";
37
+ return contentElem;
38
+ };
39
+ const updateContent = async function(params, opts) {
40
+ const element = this;
41
+ const contentElementKey = setContentKey(element, opts);
42
+ if (!element[contentElementKey]) return;
43
+ if (element[contentElementKey].update) {
44
+ await element[contentElementKey].update(params, opts);
45
+ }
46
+ };
47
+ async function setContent(param, element, opts) {
48
+ const content = await execPromise(param, element);
49
+ if (content && element) {
50
+ set.call(element, content, opts);
51
+ }
52
+ }
53
+ const removeContent = function(el, opts = {}) {
54
+ var _a;
55
+ const element = el || this;
56
+ const contentElementKey = setContentKey(element, opts);
57
+ if (opts.contentElementKey !== "content") {
58
+ opts.contentElementKey = "content";
59
+ }
60
+ const content = element[contentElementKey];
61
+ if (!content) return;
62
+ if (content.tag === "fragment" && ((_a = content.__ref) == null ? void 0 : _a.__children)) {
63
+ content.__ref.__children.forEach((key) => {
64
+ const child = content[key];
65
+ if (child.node && child.node.parentNode) {
66
+ child.node.parentNode.removeChild(child.node);
67
+ }
68
+ if (isFunction(child.remove)) {
69
+ child.remove();
70
+ }
71
+ });
72
+ } else {
73
+ if (content.node && content.node.parentNode) {
74
+ content.node.parentNode.removeChild(content.node);
75
+ }
76
+ if (isFunction(content.remove)) {
77
+ content.remove();
78
+ }
79
+ }
80
+ delete element[contentElementKey];
81
+ };
26
82
  const set = async function(params, options = {}, el) {
27
83
  var _a;
28
84
  const element = el || this;
29
85
  const { __ref: ref } = element;
30
- const content = setContentKey(element, options);
86
+ const contentElementKey = setContentKey(element, options);
87
+ const content = element[contentElementKey];
31
88
  const __contentRef = content && content.__ref;
32
89
  const lazyLoad = element.props && element.props.lazyLoad;
33
- const hasCollection = element.$collection || element.$stateCollection || element.$propsCollection;
34
- if (options.preventContentUpdate === true && !hasCollection) return;
35
- if (ref.__noCollectionDifference || __contentRef && __contentRef.__cached && deepContains(params, content)) {
90
+ const hasChildren = element.children;
91
+ if (options.preventContentUpdate === true && !hasChildren) return;
92
+ const childHasChanged = !ref.__noChildrenDifference;
93
+ const childrenIsDifferentFromCache = childHasChanged && __contentRef && Object.keys(params).length === Object.keys(content).length && deepContains(params, content);
94
+ if ((content == null ? void 0 : content.update) && !childHasChanged && !childrenIsDifferentFromCache) {
36
95
  if (!options.preventBeforeUpdateListener && !options.preventListeners) {
37
- const beforeUpdateReturns = await triggerEventOnUpdate("beforeUpdate", params, element, options);
96
+ const beforeUpdateReturns = await triggerEventOnUpdate(
97
+ "beforeUpdate",
98
+ params,
99
+ element,
100
+ options
101
+ );
38
102
  if (beforeUpdateReturns === false) return element;
39
103
  }
40
- if (content == null ? void 0 : content.update) content.update();
41
- if (!options.preventUpdateListener) await triggerEventOn("update", element, options);
104
+ await content.update(params);
105
+ if (!options.preventUpdateListener && !options.preventListeners) {
106
+ await triggerEventOn("update", element, options);
107
+ }
42
108
  return;
43
109
  }
44
- if (params) {
45
- let { childExtend, props } = params;
46
- if (!props) props = params.props = {};
47
- if (!childExtend && element.childExtend) {
48
- params.childExtend = element.childExtend;
49
- props.ignoreChildExtend = true;
110
+ if (!params) return element;
111
+ let { childExtends, props, tag } = params;
112
+ if (!props) props = params.props = {};
113
+ if (tag === "fragment") {
114
+ if (!childExtends && element.childExtends) {
115
+ params.childExtends = element.childExtends;
116
+ props.ignoreChildExtends = true;
50
117
  }
51
118
  if (!(props == null ? void 0 : props.childProps) && ((_a = element.props) == null ? void 0 : _a.childProps)) {
52
119
  props.childProps = element.props.childProps;
53
120
  props.ignoreChildProps = true;
54
121
  }
55
- if (lazyLoad) {
56
- window.requestAnimationFrame(async () => {
57
- await resetElement(params, element, options);
58
- if (!options.preventUpdateListener) {
59
- triggerEventOn("lazyLoad", element, options);
60
- }
61
- });
62
- } else await resetElement(params, element, options);
63
122
  }
64
- return element;
123
+ if (lazyLoad) {
124
+ window.requestAnimationFrame(async () => {
125
+ await resetContent(params, element, options);
126
+ if (!options.preventUpdateListener) {
127
+ await triggerEventOn("lazyLoad", element, options);
128
+ }
129
+ });
130
+ } else {
131
+ await resetContent(params, element, options);
132
+ }
65
133
  };
66
134
  var set_default = set;
67
135
  export {
68
136
  set_default as default,
137
+ removeContent,
69
138
  reset,
70
- resetElement,
71
- set
139
+ resetContent,
140
+ set,
141
+ setContent,
142
+ setContentKey,
143
+ updateContent
72
144
  };