@domql/element 3.1.1 → 3.2.3

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 (90) hide show
  1. package/README.md +4 -6
  2. package/__tests__/checkIfOnUpdate.test.js +12 -12
  3. package/__tests__/children.test.js +34 -38
  4. package/__tests__/inheritStateUpdates.test.js +12 -12
  5. package/__tests__/renderElement.test.js +11 -11
  6. package/__tests__/resetElement.test.js +6 -6
  7. package/__tests__/set.test.js +32 -36
  8. package/__tests__/throughExecProps.test.js +12 -12
  9. package/__tests__/throughInitialDefine.test.js +16 -16
  10. package/__tests__/throughInitialExec.test.js +16 -16
  11. package/__tests__/throughUpdatedDefine.test.js +14 -14
  12. package/__tests__/throughUpdatedExec.test.js +17 -16
  13. package/__tests__/update.test.js +54 -54
  14. package/children.js +5 -6
  15. package/create.js +18 -20
  16. package/dist/cjs/children.js +4 -2
  17. package/dist/cjs/create.js +16 -16
  18. package/dist/cjs/extend.js +88 -0
  19. package/dist/cjs/iterate.js +76 -20
  20. package/dist/cjs/mixins/content.js +73 -0
  21. package/dist/cjs/mixins/html.js +1 -1
  22. package/dist/cjs/mixins/registry.js +2 -2
  23. package/dist/cjs/mixins/scope.js +1 -1
  24. package/dist/cjs/mixins/state.js +2 -2
  25. package/dist/cjs/mixins/text.js +4 -4
  26. package/dist/cjs/node.js +15 -15
  27. package/dist/cjs/set.js +22 -27
  28. package/dist/cjs/update.js +24 -33
  29. package/dist/cjs/utils/applyParam.js +4 -4
  30. package/dist/cjs/utils/extendUtils.js +132 -0
  31. package/dist/cjs/utils/propEvents.js +39 -0
  32. package/dist/esm/children.js +5 -3
  33. package/dist/esm/create.js +16 -16
  34. package/dist/esm/extend.js +74 -0
  35. package/dist/esm/iterate.js +77 -22
  36. package/dist/esm/mixins/content.js +53 -0
  37. package/dist/esm/mixins/html.js +1 -1
  38. package/dist/esm/mixins/registry.js +1 -1
  39. package/dist/esm/mixins/scope.js +1 -1
  40. package/dist/esm/mixins/state.js +3 -3
  41. package/dist/esm/mixins/text.js +4 -4
  42. package/dist/esm/node.js +15 -15
  43. package/dist/esm/set.js +23 -28
  44. package/dist/esm/update.js +24 -33
  45. package/dist/esm/utils/applyParam.js +5 -5
  46. package/dist/esm/utils/extendUtils.js +119 -0
  47. package/dist/esm/utils/propEvents.js +19 -0
  48. package/extend.js +98 -0
  49. package/iterate.js +80 -25
  50. package/mixins/content.js +65 -0
  51. package/mixins/html.js +1 -1
  52. package/mixins/registry.js +1 -1
  53. package/mixins/scope.js +1 -1
  54. package/mixins/state.js +3 -3
  55. package/mixins/text.js +4 -4
  56. package/node.js +15 -15
  57. package/package.json +8 -8
  58. package/set.js +23 -28
  59. package/update.js +25 -34
  60. package/utils/applyParam.js +5 -5
  61. package/utils/extendUtils.js +149 -0
  62. package/utils/propEvents.js +19 -0
  63. package/dist/cjs/__tests__/checkIfOnUpdate.test.js +0 -73
  64. package/dist/cjs/__tests__/children.test.js +0 -177
  65. package/dist/cjs/__tests__/define.test.js +0 -75
  66. package/dist/cjs/__tests__/inheritStateUpdates.test.js +0 -62
  67. package/dist/cjs/__tests__/renderElement.test.js +0 -138
  68. package/dist/cjs/__tests__/resetElement.test.js +0 -35
  69. package/dist/cjs/__tests__/set.test.js +0 -256
  70. package/dist/cjs/__tests__/throughExecProps.test.js +0 -62
  71. package/dist/cjs/__tests__/throughInitialDefine.test.js +0 -79
  72. package/dist/cjs/__tests__/throughInitialExec.test.js +0 -73
  73. package/dist/cjs/__tests__/throughUpdatedDefine.test.js +0 -69
  74. package/dist/cjs/__tests__/throughUpdatedExec.test.js +0 -84
  75. package/dist/cjs/__tests__/tree.test.js +0 -11
  76. package/dist/cjs/__tests__/update.test.js +0 -222
  77. package/dist/esm/__tests__/checkIfOnUpdate.test.js +0 -73
  78. package/dist/esm/__tests__/children.test.js +0 -177
  79. package/dist/esm/__tests__/define.test.js +0 -53
  80. package/dist/esm/__tests__/inheritStateUpdates.test.js +0 -62
  81. package/dist/esm/__tests__/renderElement.test.js +0 -116
  82. package/dist/esm/__tests__/resetElement.test.js +0 -35
  83. package/dist/esm/__tests__/set.test.js +0 -256
  84. package/dist/esm/__tests__/throughExecProps.test.js +0 -62
  85. package/dist/esm/__tests__/throughInitialDefine.test.js +0 -79
  86. package/dist/esm/__tests__/throughInitialExec.test.js +0 -73
  87. package/dist/esm/__tests__/throughUpdatedDefine.test.js +0 -69
  88. package/dist/esm/__tests__/throughUpdatedExec.test.js +0 -84
  89. package/dist/esm/__tests__/tree.test.js +0 -11
  90. package/dist/esm/__tests__/update.test.js +0 -222
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
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
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var extendUtils_exports = {};
20
+ __export(extendUtils_exports, {
21
+ cloneAndMergeArrayExtend: () => cloneAndMergeArrayExtend,
22
+ deepExtend: () => deepExtend,
23
+ deepMergeExtend: () => deepMergeExtend,
24
+ extendCachedRegistry: () => extendCachedRegistry,
25
+ extendStackRegistry: () => extendStackRegistry,
26
+ extractArrayExtend: () => extractArrayExtend,
27
+ fallbackStringExtend: () => fallbackStringExtend,
28
+ flattenExtend: () => flattenExtend,
29
+ generateHash: () => generateHash,
30
+ getExtendMerged: () => getExtendMerged,
31
+ getExtendStack: () => getExtendStack,
32
+ getExtendStackRegistry: () => getExtendStackRegistry,
33
+ getHashedExtend: () => getHashedExtend,
34
+ jointStacks: () => jointStacks,
35
+ setHashedExtend: () => setHashedExtend
36
+ });
37
+ module.exports = __toCommonJS(extendUtils_exports);
38
+ var import_utils = require("@domql/utils");
39
+ const generateHash = () => Math.random().toString(36).substring(2);
40
+ const extendStackRegistry = {};
41
+ const extendCachedRegistry = {};
42
+ const getHashedExtend = (extend) => {
43
+ return extendStackRegistry[extend.__hash];
44
+ };
45
+ const setHashedExtend = (extend, stack) => {
46
+ const hash = generateHash();
47
+ if (!(0, import_utils.isString)(extend)) {
48
+ extend.__hash = hash;
49
+ }
50
+ extendStackRegistry[hash] = stack;
51
+ return stack;
52
+ };
53
+ const getExtendStackRegistry = (extend, stack) => {
54
+ if (extend.__hash) {
55
+ return stack.concat(getHashedExtend(extend));
56
+ }
57
+ return setHashedExtend(extend, stack);
58
+ };
59
+ const extractArrayExtend = (extend, stack, context) => {
60
+ extend.forEach((each) => flattenExtend(each, stack, context));
61
+ return stack;
62
+ };
63
+ const deepExtend = (extend, stack, context) => {
64
+ const extendOflattenExtend = extend.extend;
65
+ if (extendOflattenExtend) {
66
+ flattenExtend(extendOflattenExtend, stack, context);
67
+ }
68
+ return stack;
69
+ };
70
+ const flattenExtend = (extend, stack, context) => {
71
+ if (!extend) return stack;
72
+ if ((0, import_utils.isArray)(extend)) return extractArrayExtend(extend, stack, context);
73
+ if ((0, import_utils.isString)(extend)) extend = fallbackStringExtend(extend, context);
74
+ stack.push(extend);
75
+ if (extend.extend) deepExtend(extend, stack, context);
76
+ return stack;
77
+ };
78
+ const deepMergeExtend = (element, extend) => {
79
+ for (const e in extend) {
80
+ if (["parent", "node", "__element"].indexOf(e) > -1) continue;
81
+ const elementProp = element[e];
82
+ const extendProp = extend[e];
83
+ if (elementProp === void 0) {
84
+ element[e] = extendProp;
85
+ } else if ((0, import_utils.isObject)(elementProp) && (0, import_utils.isObject)(extendProp)) {
86
+ deepMergeExtend(elementProp, extendProp);
87
+ } else if ((0, import_utils.isArray)(elementProp) && (0, import_utils.isArray)(extendProp)) {
88
+ element[e] = elementProp.concat(extendProp);
89
+ } else if ((0, import_utils.isArray)(elementProp) && (0, import_utils.isObject)(extendProp)) {
90
+ const obj = deepMergeExtend({}, elementProp);
91
+ element[e] = deepMergeExtend(obj, extendProp);
92
+ } else if (elementProp === void 0 && (0, import_utils.isFunction)(extendProp)) {
93
+ element[e] = extendProp;
94
+ }
95
+ }
96
+ return element;
97
+ };
98
+ const cloneAndMergeArrayExtend = (stack) => {
99
+ return stack.reduce((a, c) => {
100
+ return deepMergeExtend(a, (0, import_utils.deepClone)(c));
101
+ }, {});
102
+ };
103
+ const fallbackStringExtend = (extend, context, options = {}, variant) => {
104
+ const COMPONENTS = context && context.components || options.components;
105
+ const PAGES = context && context.pages || options.pages;
106
+ if ((0, import_utils.isString)(extend)) {
107
+ const componentExists = COMPONENTS && (COMPONENTS[extend + "." + variant] || COMPONENTS[extend] || COMPONENTS["smbls." + extend]);
108
+ const pageExists = PAGES && extend.startsWith("/") && PAGES[extend];
109
+ if (componentExists) return componentExists;
110
+ else if (pageExists) return pageExists;
111
+ else {
112
+ if (options.verbose && (0, import_utils.isNotProduction)()) {
113
+ console.warn("Extend is string but component was not found:", extend);
114
+ }
115
+ return {};
116
+ }
117
+ }
118
+ return extend;
119
+ };
120
+ const jointStacks = (extendStack, childExtendStack) => {
121
+ return [].concat(extendStack.slice(0, 1)).concat(childExtendStack.slice(0, 1)).concat(extendStack.slice(1)).concat(childExtendStack.slice(1));
122
+ };
123
+ const getExtendStack = (extend, context) => {
124
+ if (!extend) return [];
125
+ if (extend.__hash) return getHashedExtend(extend) || [];
126
+ const stack = flattenExtend(extend, [], context);
127
+ return getExtendStackRegistry(extend, stack);
128
+ };
129
+ const getExtendMerged = (extend) => {
130
+ const stack = getExtendStack(extend);
131
+ return cloneAndMergeArrayExtend(stack);
132
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
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
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var propEvents_exports = {};
20
+ __export(propEvents_exports, {
21
+ propagateEventsFromProps: () => propagateEventsFromProps
22
+ });
23
+ module.exports = __toCommonJS(propEvents_exports);
24
+ var import_utils = require("@domql/utils");
25
+ const propagateEventsFromProps = (element) => {
26
+ const { props, on } = element;
27
+ const eventKeysFromProps = Object.keys(props).filter((key) => key.startsWith("on"));
28
+ eventKeysFromProps.forEach((v) => {
29
+ const eventName = (0, import_utils.lowercaseFirstLetter)(v.split("on")[1]);
30
+ const origEvent = on[eventName];
31
+ const funcFromProps = props[v];
32
+ if ((0, import_utils.isFunction)(origEvent)) {
33
+ on[eventName] = (...args) => {
34
+ const originalEventRetunrs = origEvent(...args);
35
+ if (originalEventRetunrs !== false) return funcFromProps(...args);
36
+ };
37
+ } else on[eventName] = funcFromProps;
38
+ });
39
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  concatAddExtends,
3
3
  deepClone,
4
- execPromise,
4
+ exec,
5
5
  getChildStateInKey,
6
6
  isArray,
7
7
  isDefined,
@@ -13,10 +13,12 @@ import {
13
13
  isString,
14
14
  matchesComponentNaming
15
15
  } from "@domql/utils";
16
- async function setChildren(param, element, opts) {
16
+ function setChildren(param, element, opts) {
17
17
  let { children, __ref: ref, state } = element;
18
18
  let { childrenAs } = element.props || {};
19
- children = await execPromise(param, element, state) || await execPromise(children, element, state);
19
+ let execParam = exec(param, element, state);
20
+ let execChildren = exec(children, element, state);
21
+ children = execParam || execChildren;
20
22
  if (children) {
21
23
  if (isState(children)) children = children.parse();
22
24
  if (isString(children) || isNumber(children)) {
@@ -23,22 +23,22 @@ import { addMethods } from "./methods/set.js";
23
23
  import { assignKeyAsClassname } from "./mixins/classList.js";
24
24
  import { throughInitialExec, throughInitialDefine } from "./iterate.js";
25
25
  const ENV = "development";
26
- const create = async (props, parentEl, passedKey, options = OPTIONS.create || {}, attachOptions) => {
26
+ const create = (props, parentEl, passedKey, options = OPTIONS.create || {}, attachOptions) => {
27
27
  cacheOptions(options);
28
28
  const element = createElement(props, parentEl, passedKey, options, ROOT);
29
29
  if (!element) return;
30
30
  const { key, parent, __ref: ref } = element;
31
31
  createRoot(element, parent);
32
32
  applyExtends(element, parent, options);
33
- propertizeElement.call(element, element);
34
- await triggerEventOn("start", element, options);
35
33
  if (options.onlyResolveExtends) {
36
34
  return onlyResolveExtends(element, parent, key, options);
37
35
  }
36
+ propertizeElement.call(element, element);
37
+ triggerEventOn("start", element, options);
38
38
  resetOptions(element, parent, options);
39
39
  addMethods(element, parent, options);
40
40
  createScope(element, parent);
41
- await createState(element, parent);
41
+ createState(element, parent);
42
42
  if (element.scope === "state") element.scope = element.state;
43
43
  createIfConditionFlag(element, parent);
44
44
  initProps(element, parent, options);
@@ -49,13 +49,13 @@ const create = async (props, parentEl, passedKey, options = OPTIONS.create || {}
49
49
  if (element.node) {
50
50
  if (ref.__if) return assignNode(element, parent, key, attachOptions);
51
51
  }
52
- const onInit = await triggerEventOn("init", element, options);
52
+ const onInit = triggerEventOn("init", element, options);
53
53
  if (onInit === false) return element;
54
54
  triggerEventOn("beforeClassAssign", element, options);
55
55
  assignKeyAsClassname(element);
56
- await renderElement(element, parent, options, attachOptions);
56
+ renderElement(element, parent, options, attachOptions);
57
57
  addElementIntoParentChildren(element, parent);
58
- await triggerEventOn("complete", element, options);
58
+ triggerEventOn("complete", element, options);
59
59
  return element;
60
60
  };
61
61
  const cacheOptions = (options) => {
@@ -76,7 +76,7 @@ const addElementIntoParentChildren = (element, parent) => {
76
76
  }
77
77
  };
78
78
  const visitedElements = /* @__PURE__ */ new WeakMap();
79
- const renderElement = async (element, parent, options, attachOptions) => {
79
+ const renderElement = (element, parent, options, attachOptions) => {
80
80
  var _a, _b, _c;
81
81
  if (visitedElements.has(element)) {
82
82
  if (ENV === "test" || ENV === "development") {
@@ -85,17 +85,17 @@ const renderElement = async (element, parent, options, attachOptions) => {
85
85
  }
86
86
  visitedElements.set(element, true);
87
87
  const { __ref: ref, key } = element;
88
- const createNestedChild = async () => {
88
+ const createNestedChild = () => {
89
89
  const isInfiniteLoopDetected = detectInfiniteLoop(ref.path);
90
90
  if (ref.__uniqId || isInfiniteLoopDetected) return;
91
- await createNode(element, options);
91
+ createNode(element, options);
92
92
  ref.__uniqId = Math.random();
93
93
  };
94
94
  if (ENV === "test" || ENV === "development") {
95
- await createNestedChild();
95
+ createNestedChild();
96
96
  } else {
97
97
  try {
98
- await createNestedChild();
98
+ createNestedChild();
99
99
  } catch (e) {
100
100
  const path = ref.path;
101
101
  if (path.includes("ComponentsGrid")) {
@@ -122,10 +122,10 @@ const renderElement = async (element, parent, options, attachOptions) => {
122
122
  }
123
123
  assignNode(element, parent, key, attachOptions);
124
124
  applyAnimationFrame(element, options);
125
- await triggerEventOn("render", element, options);
126
- await triggerEventOn("renderRouter", element, options);
127
- await triggerEventOn("done", element, options);
128
- await triggerEventOn("create", element, options);
125
+ triggerEventOn("render", element, options);
126
+ triggerEventOn("renderRouter", element, options);
127
+ triggerEventOn("done", element, options);
128
+ triggerEventOn("create", element, options);
129
129
  };
130
130
  const onlyResolveExtends = (element, parent, key, options) => {
131
131
  const { __ref: ref } = element;
@@ -0,0 +1,74 @@
1
+ import { isFunction, exec, isProduction } from "@domql/utils";
2
+ import {
3
+ getExtendStack,
4
+ jointStacks,
5
+ cloneAndMergeArrayExtend,
6
+ deepMergeExtend,
7
+ fallbackStringExtend
8
+ } from "./utils/index.js";
9
+ let mainExtend;
10
+ const applyExtend = (element, parent, options = {}) => {
11
+ if (isFunction(element)) element = exec(element, parent);
12
+ const { props, __ref } = element;
13
+ let extend = (props == null ? void 0 : props.extends) || element.extends || element.extend;
14
+ const variant = props == null ? void 0 : props.variant;
15
+ const context = element.context || parent.context;
16
+ extend = fallbackStringExtend(extend, context, options, variant);
17
+ const extendStack = getExtendStack(extend, context);
18
+ delete element.extend;
19
+ let childExtendStack = [];
20
+ if (parent) {
21
+ element.parent = parent;
22
+ if (!options.ignoreChildExtend && !(props && props.ignoreChildExtend)) {
23
+ childExtendStack = getExtendStack(parent.childExtend, context);
24
+ const ignoreChildExtendRecursive = props && props.ignoreChildExtendRecursive;
25
+ if (parent.childExtendRecursive && !ignoreChildExtendRecursive) {
26
+ const canExtendRecursive = element.key !== "__text";
27
+ if (canExtendRecursive) {
28
+ const childExtendRecursiveStack = getExtendStack(
29
+ parent.childExtendRecursive,
30
+ context
31
+ );
32
+ childExtendStack = childExtendStack.concat(childExtendRecursiveStack);
33
+ element.childExtendRecursive = parent.childExtendRecursive;
34
+ }
35
+ }
36
+ }
37
+ }
38
+ const extendLength = extendStack.length;
39
+ const childExtendLength = childExtendStack.length;
40
+ let stack = [];
41
+ if (extendLength && childExtendLength) {
42
+ stack = jointStacks(extendStack, childExtendStack);
43
+ } else if (extendLength) {
44
+ stack = extendStack;
45
+ } else if (childExtendLength) {
46
+ stack = childExtendStack;
47
+ } else if (!context.defaultExtends) return element;
48
+ if (context.defaultExtends) {
49
+ if (!mainExtend) {
50
+ const defaultOptionsExtend = getExtendStack(
51
+ context.defaultExtends,
52
+ context
53
+ );
54
+ mainExtend = cloneAndMergeArrayExtend(defaultOptionsExtend);
55
+ delete mainExtend.extend;
56
+ }
57
+ stack = [].concat(stack, mainExtend);
58
+ }
59
+ if (__ref) __ref.__extend = stack;
60
+ let mergedExtend = cloneAndMergeArrayExtend(stack);
61
+ const COMPONENTS = context && context.components || options.components;
62
+ const component = exec(element.component || mergedExtend.component, element);
63
+ if (component && COMPONENTS && COMPONENTS[component]) {
64
+ const componentExtend = cloneAndMergeArrayExtend(
65
+ getExtendStack(COMPONENTS[component])
66
+ );
67
+ mergedExtend = deepMergeExtend(componentExtend, mergedExtend);
68
+ }
69
+ const merged = deepMergeExtend(element, mergedExtend);
70
+ return merged;
71
+ };
72
+ export {
73
+ applyExtend
74
+ };
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  isObject,
3
- exec,
4
3
  isFunction,
5
4
  isNumber,
6
5
  isString,
@@ -8,16 +7,23 @@ import {
8
7
  isContextComponent,
9
8
  isMethod,
10
9
  overwrite,
11
- execPromise
10
+ exec
12
11
  } from "@domql/utils";
13
- const throughInitialExec = async (element, exclude = {}) => {
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
17
  if (isFunction(prop) && !isMethod(param, element)) {
19
18
  ref.__exec[param] = prop;
20
- element[param] = await prop(element, element.state, element.context);
19
+ const result = prop(element, element.state, element.context);
20
+ if (result && typeof result.then === "function") {
21
+ result.then((resolved) => {
22
+ element[param] = resolved;
23
+ });
24
+ } else {
25
+ element[param] = result;
26
+ }
21
27
  }
22
28
  }
23
29
  };
@@ -29,6 +35,12 @@ const throughUpdatedExec = (element, options = {}) => {
29
35
  const isDefinedParam = ref.__defineCache[param];
30
36
  if (isDefinedParam) continue;
31
37
  const newExec = ref.__exec[param](element, element.state, element.context);
38
+ if (newExec && typeof newExec.then === "function") {
39
+ newExec.then((resolved) => {
40
+ element[param] = resolved;
41
+ });
42
+ continue;
43
+ }
32
44
  const execReturnsString = isString(newExec) || isNumber(newExec);
33
45
  if (prop && prop.node && execReturnsString) {
34
46
  overwrite(prop, { text: newExec });
@@ -48,23 +60,37 @@ const throughUpdatedExec = (element, options = {}) => {
48
60
  }
49
61
  return changes;
50
62
  };
51
- const throughExecProps = async (element) => {
63
+ const throughExecProps = (element) => {
52
64
  const { __ref: ref } = element;
53
65
  const { props } = element;
54
66
  for (const k in props) {
55
67
  const isDefine = k.startsWith("is") || k.startsWith("has") || k.startsWith("use");
56
68
  const cachedExecProp = ref.__execProps[k];
57
69
  if (isFunction(cachedExecProp)) {
58
- props[k] = await execPromise(cachedExecProp, element);
70
+ const result = exec(cachedExecProp, element);
71
+ if (result && typeof result.then === "function") {
72
+ result.then((resolved) => {
73
+ props[k] = resolved;
74
+ });
75
+ } else {
76
+ props[k] = result;
77
+ }
59
78
  } else if (isDefine && isFunction(props[k])) {
60
79
  ref.__execProps[k] = props[k];
61
- props[k] = await execPromise(props[k], element);
80
+ const result = exec(props[k], element);
81
+ if (result && typeof result.then === "function") {
82
+ result.then((resolved) => {
83
+ props[k] = resolved;
84
+ });
85
+ } else {
86
+ props[k] = result;
87
+ }
62
88
  }
63
89
  }
64
90
  };
65
91
  const isPropertyInDefines = (key, element) => {
66
92
  };
67
- const throughInitialDefine = async (element) => {
93
+ const throughInitialDefine = (element) => {
68
94
  const { define, context, __ref: ref } = element;
69
95
  let defineObj = {};
70
96
  const hasGlobalDefine = context && isObject(context.define);
@@ -74,23 +100,38 @@ const throughInitialDefine = async (element) => {
74
100
  let elementProp = element[param];
75
101
  if (isFunction(elementProp) && !isMethod(param, element)) {
76
102
  ref.__exec[param] = elementProp;
77
- const execParam2 = elementProp = await execPromise(elementProp, element);
78
- if (execParam2) {
79
- elementProp = element[param] = execParam2.parse ? execParam2.parse() : execParam2;
80
- ref.__defineCache[param] = elementProp;
103
+ let execParam2 = exec(elementProp, element);
104
+ if (execParam2 && typeof execParam2.then === "function") {
105
+ execParam2.then((resolved) => {
106
+ elementProp = element[param] = resolved && resolved.parse ? resolved.parse() : resolved;
107
+ if (resolved) {
108
+ ref.__defineCache[param] = elementProp;
109
+ }
110
+ });
111
+ } else {
112
+ elementProp = element[param] = execParam2 && execParam2.parse ? execParam2.parse() : execParam2;
113
+ if (execParam2) {
114
+ ref.__defineCache[param] = elementProp;
115
+ }
81
116
  }
82
117
  }
83
- const execParam = await defineObj[param](
118
+ const execParam = defineObj[param](
84
119
  elementProp,
85
120
  element,
86
121
  element.state,
87
122
  element.context
88
123
  );
89
- if (execParam) element[param] = execParam;
124
+ if (execParam && typeof execParam.then === "function") {
125
+ execParam.then((resolved) => {
126
+ if (resolved) element[param] = resolved;
127
+ });
128
+ } else if (execParam) {
129
+ element[param] = execParam;
130
+ }
90
131
  }
91
132
  return element;
92
133
  };
93
- const throughUpdatedDefine = async (element) => {
134
+ const throughUpdatedDefine = (element) => {
94
135
  const { context, define, __ref: ref } = element;
95
136
  const changes = {};
96
137
  let obj = {};
@@ -99,15 +140,29 @@ const throughUpdatedDefine = async (element) => {
99
140
  for (const param in obj) {
100
141
  const execParam = ref.__exec[param];
101
142
  if (execParam) {
102
- ref.__defineCache[param] = await execParam(
103
- element,
104
- element.state,
105
- element.context
106
- );
143
+ const result = execParam(element, element.state, element.context);
144
+ if (result && typeof result.then === "function") {
145
+ result.then((resolved) => {
146
+ ref.__defineCache[param] = resolved;
147
+ });
148
+ } else {
149
+ ref.__defineCache[param] = result;
150
+ }
151
+ }
152
+ const cached = exec(ref.__defineCache[param], element);
153
+ if (cached && typeof cached.then === "function") {
154
+ cached.then((resolved) => {
155
+ });
156
+ continue;
107
157
  }
108
- const cached = await execPromise(ref.__defineCache[param], element);
109
158
  const newExecParam = typeof obj[param] === "function" ? obj[param](cached, element, element.state, element.context) : void 0;
110
- if (newExecParam) element[param] = newExecParam;
159
+ if (newExecParam && typeof newExecParam.then === "function") {
160
+ newExecParam.then((resolved) => {
161
+ element[param] = resolved;
162
+ });
163
+ } else if (newExecParam) {
164
+ element[param] = newExecParam;
165
+ }
111
166
  }
112
167
  return changes;
113
168
  };
@@ -0,0 +1,53 @@
1
+ import { isFunction, setContentKey } from "@domql/utils";
2
+ import { set } from "../set.js";
3
+ const updateContent = function(params, options) {
4
+ const element = this;
5
+ const ref = element.__ref;
6
+ const contentKey = ref.contentElementKey;
7
+ if (!element[contentKey]) return;
8
+ if (element[contentKey].update) element[contentKey].update(params, options);
9
+ };
10
+ const removeContent = function(el, opts = {}) {
11
+ const element = el || this;
12
+ const { __ref: ref } = element;
13
+ const contentElementKey = setContentKey(element, opts);
14
+ if (opts.contentElementKey !== "content") opts.contentElementKey = "content";
15
+ if (element[contentElementKey]) {
16
+ if (element[contentElementKey].node && element.node) {
17
+ if (element[contentElementKey].tag === "fragment")
18
+ element.node.innerHTML = "";
19
+ else {
20
+ const contentNode = element[contentElementKey].node;
21
+ if (contentNode.parentNode === element.node)
22
+ element.node.removeChild(element[contentElementKey].node);
23
+ }
24
+ }
25
+ const { __cached } = ref;
26
+ if (__cached && __cached[contentElementKey]) {
27
+ if (__cached[contentElementKey].tag === "fragment")
28
+ __cached[contentElementKey].parent.node.innerHTML = "";
29
+ else if (__cached[contentElementKey] && isFunction(__cached[contentElementKey].remove))
30
+ __cached[contentElementKey].remove();
31
+ }
32
+ ref.__children.splice(ref.__children.indexOf(element[contentElementKey]), 1);
33
+ delete element[contentElementKey];
34
+ }
35
+ };
36
+ function setContent(param, element, node, opts) {
37
+ var _a;
38
+ const contentElementKey = setContentKey(element, opts);
39
+ if (param && element) {
40
+ if ((_a = element[contentElementKey]) == null ? void 0 : _a.update) {
41
+ element[contentElementKey].update({}, opts);
42
+ } else {
43
+ set.call(element, param, opts);
44
+ }
45
+ }
46
+ }
47
+ var content_default = setContent;
48
+ export {
49
+ content_default as default,
50
+ removeContent,
51
+ setContent,
52
+ updateContent
53
+ };
@@ -1,7 +1,7 @@
1
1
  import { exec } from "@domql/utils";
2
2
  function html(param, element, node) {
3
3
  var _a;
4
- const prop = exec(param, element) || exec((_a = element == null ? void 0 : element.props) == null ? void 0 : _a.html, element);
4
+ const prop = exec(((_a = element == null ? void 0 : element.props) == null ? void 0 : _a.html) || param, element);
5
5
  const { __ref } = element;
6
6
  if (prop !== __ref.__html) {
7
7
  if (node.nodeName === "SVG") node.textContent = prop;
@@ -1,4 +1,4 @@
1
- import attr from "./attr.js";
1
+ import { attr } from "./attr.js";
2
2
  import { classList } from "./classList.js";
3
3
  import data from "./data.js";
4
4
  import html from "./html.js";
@@ -1,5 +1,5 @@
1
1
  import { isFunction, isObject } from "@domql/utils";
2
- async function scope(params, element, node) {
2
+ 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,6 +1,6 @@
1
- import { execPromise, isObject, STATE_METHODS } from "@domql/utils";
2
- async function state(params, element, node) {
3
- const state2 = await execPromise(params, element);
1
+ import { exec, isObject, STATE_METHODS } from "@domql/utils";
2
+ function state(params, element, node) {
3
+ const state2 = exec(params, element);
4
4
  if (isObject(state2)) {
5
5
  for (const param in state2) {
6
6
  if (STATE_METHODS.includes(param)) continue;
@@ -1,9 +1,9 @@
1
1
  import { create } from "../create.js";
2
2
  import { exec, isString } from "@domql/utils";
3
- async function text(param, element, node) {
4
- let prop = exec(param || element.props.text, element);
3
+ function text(param, element, node) {
4
+ let prop = exec(element.props.text || param, element);
5
5
  if (isString(prop) && prop.includes("{{")) {
6
- prop = element.call("replaceLiteralsWithObjectFields", prop);
6
+ prop = element.call("replaceLiteralsWithObjectFields", prop, element.state);
7
7
  }
8
8
  if (element.tag === "string") {
9
9
  node.nodeValue = prop;
@@ -12,7 +12,7 @@ async function text(param, element, node) {
12
12
  if (element.__text.text === prop) return;
13
13
  element.__text.text = prop;
14
14
  if (element.__text.node) element.__text.node.nodeValue = prop;
15
- } else await create({ tag: "string", text: prop }, element, "__text");
15
+ } else create({ tag: "string", text: prop }, element, "__text");
16
16
  }
17
17
  }
18
18
  var text_default = text;