@schukai/monster 1.25.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/CHANGELOG +43 -0
  2. package/README.md +4 -4
  3. package/dist/modules/constants.js +1 -1
  4. package/dist/modules/constraints/abstract.js +1 -1
  5. package/dist/modules/constraints/abstractoperator.js +1 -1
  6. package/dist/modules/constraints/andoperator.js +1 -1
  7. package/dist/modules/constraints/invalid.js +1 -1
  8. package/dist/modules/constraints/isarray.js +1 -1
  9. package/dist/modules/constraints/isobject.js +1 -1
  10. package/dist/modules/constraints/namespace.js +1 -1
  11. package/dist/modules/constraints/oroperator.js +1 -1
  12. package/dist/modules/constraints/valid.js +1 -1
  13. package/dist/modules/data/buildmap.js +2 -2
  14. package/dist/modules/data/buildtree.js +2 -0
  15. package/dist/modules/data/datasource/namespace.js +1 -1
  16. package/dist/modules/data/datasource/restapi/writeerror.js +1 -1
  17. package/dist/modules/data/datasource/restapi.js +1 -1
  18. package/dist/modules/data/datasource/storage/localstorage.js +1 -1
  19. package/dist/modules/data/datasource/storage/namespace.js +1 -1
  20. package/dist/modules/data/datasource/storage/sessionstorage.js +1 -1
  21. package/dist/modules/data/datasource/storage.js +1 -1
  22. package/dist/modules/data/datasource.js +1 -1
  23. package/dist/modules/data/diff.js +1 -1
  24. package/dist/modules/data/extend.js +1 -1
  25. package/dist/modules/data/namespace.js +1 -1
  26. package/dist/modules/data/pathfinder.js +1 -1
  27. package/dist/modules/data/pipe.js +1 -1
  28. package/dist/modules/data/transformer.js +1 -1
  29. package/dist/modules/dom/assembler.js +1 -1
  30. package/dist/modules/dom/attributes.js +2 -2
  31. package/dist/modules/dom/constants.js +2 -2
  32. package/dist/modules/dom/customcontrol.js +1 -1
  33. package/dist/modules/dom/customelement.js +1 -1
  34. package/dist/modules/dom/events.js +1 -1
  35. package/dist/modules/dom/focusmanager.js +1 -1
  36. package/dist/modules/dom/locale.js +1 -1
  37. package/dist/modules/dom/namespace.js +1 -1
  38. package/dist/modules/dom/resource/data.js +1 -1
  39. package/dist/modules/dom/resource/link/stylesheet.js +1 -1
  40. package/dist/modules/dom/resource/link.js +1 -1
  41. package/dist/modules/dom/resource/script.js +1 -1
  42. package/dist/modules/dom/resource.js +1 -1
  43. package/dist/modules/dom/resourcemanager.js +1 -1
  44. package/dist/modules/dom/template.js +2 -2
  45. package/dist/modules/dom/theme.js +1 -1
  46. package/dist/modules/dom/updater.js +2 -2
  47. package/dist/modules/dom/util.js +1 -1
  48. package/dist/modules/dom/worker/factory.js +1 -1
  49. package/dist/modules/i18n/formatter.js +2 -0
  50. package/dist/modules/i18n/locale.js +1 -1
  51. package/dist/modules/i18n/namespace.js +1 -1
  52. package/dist/modules/i18n/provider.js +1 -1
  53. package/dist/modules/i18n/providers/fetch.js +1 -1
  54. package/dist/modules/i18n/providers/namespace.js +1 -1
  55. package/dist/modules/i18n/translations.js +1 -1
  56. package/dist/modules/logging/handler/console.js +1 -1
  57. package/dist/modules/logging/handler/namespace.js +1 -1
  58. package/dist/modules/logging/handler.js +1 -1
  59. package/dist/modules/logging/logentry.js +1 -1
  60. package/dist/modules/logging/logger.js +1 -1
  61. package/dist/modules/logging/namespace.js +1 -1
  62. package/dist/modules/math/namespace.js +1 -1
  63. package/dist/modules/math/random.js +1 -1
  64. package/dist/modules/monster.js +1 -1
  65. package/dist/modules/namespace.js +1 -1
  66. package/dist/modules/text/formatter.js +2 -2
  67. package/dist/modules/text/namespace.js +1 -1
  68. package/dist/modules/types/base.js +1 -1
  69. package/dist/modules/types/basewithoptions.js +1 -1
  70. package/dist/modules/types/binary.js +1 -1
  71. package/dist/modules/types/dataurl.js +1 -1
  72. package/dist/modules/types/global.js +1 -1
  73. package/dist/modules/types/id.js +1 -1
  74. package/dist/modules/types/is.js +2 -2
  75. package/dist/modules/types/mediatype.js +1 -1
  76. package/dist/modules/types/namespace.js +1 -1
  77. package/dist/modules/types/node.js +2 -0
  78. package/dist/modules/types/nodelist.js +2 -0
  79. package/dist/modules/types/noderecursiveiterator.js +2 -0
  80. package/dist/modules/types/observer.js +1 -1
  81. package/dist/modules/types/observerlist.js +1 -1
  82. package/dist/modules/types/proxyobserver.js +1 -1
  83. package/dist/modules/types/queue.js +1 -1
  84. package/dist/modules/types/randomid.js +1 -1
  85. package/dist/modules/types/regex.js +2 -0
  86. package/dist/modules/types/stack.js +1 -1
  87. package/dist/modules/types/tokenlist.js +1 -1
  88. package/dist/modules/types/typeof.js +1 -1
  89. package/dist/modules/types/uniquequeue.js +1 -1
  90. package/dist/modules/types/uuid.js +1 -1
  91. package/dist/modules/types/validate.js +1 -1
  92. package/dist/modules/types/version.js +2 -2
  93. package/dist/modules/util/clone.js +1 -1
  94. package/dist/modules/util/comparator.js +1 -1
  95. package/dist/modules/util/freeze.js +1 -1
  96. package/dist/modules/util/namespace.js +1 -1
  97. package/dist/modules/util/processing.js +1 -1
  98. package/dist/modules/util/trimspaces.js +1 -1
  99. package/dist/monster.dev.js +1181 -708
  100. package/dist/monster.dev.js.map +1 -1
  101. package/dist/monster.js +2 -2
  102. package/package.json +13 -2
  103. package/source/constraints/abstract.js +5 -0
  104. package/source/constraints/abstractoperator.js +5 -0
  105. package/source/constraints/andoperator.js +10 -5
  106. package/source/constraints/invalid.js +8 -3
  107. package/source/constraints/isarray.js +9 -4
  108. package/source/constraints/isobject.js +8 -3
  109. package/source/constraints/oroperator.js +10 -5
  110. package/source/constraints/valid.js +8 -3
  111. package/source/data/buildmap.js +27 -13
  112. package/source/data/buildtree.js +129 -0
  113. package/source/data/datasource/restapi.js +3 -3
  114. package/source/data/datasource/storage/localstorage.js +2 -2
  115. package/source/data/datasource/storage/sessionstorage.js +2 -2
  116. package/source/data/datasource/storage.js +3 -3
  117. package/source/data/datasource.js +3 -3
  118. package/source/data/diff.js +3 -3
  119. package/source/data/extend.js +2 -2
  120. package/source/data/pathfinder.js +4 -4
  121. package/source/data/pipe.js +3 -3
  122. package/source/data/transformer.js +3 -3
  123. package/source/dom/assembler.js +2 -2
  124. package/source/dom/attributes.js +111 -28
  125. package/source/dom/constants.js +17 -1
  126. package/source/dom/customcontrol.js +1 -1
  127. package/source/dom/customelement.js +1 -1
  128. package/source/dom/events.js +6 -7
  129. package/source/dom/focusmanager.js +6 -7
  130. package/source/dom/locale.js +8 -4
  131. package/source/dom/resource/data.js +2 -2
  132. package/source/dom/resource/link/stylesheet.js +2 -2
  133. package/source/dom/resource/link.js +2 -2
  134. package/source/dom/resource/script.js +2 -2
  135. package/source/dom/resource.js +2 -2
  136. package/source/dom/resourcemanager.js +2 -2
  137. package/source/dom/template.js +55 -15
  138. package/source/dom/theme.js +3 -3
  139. package/source/dom/updater.js +158 -98
  140. package/source/dom/util.js +6 -6
  141. package/source/dom/worker/factory.js +2 -2
  142. package/source/i18n/formatter.js +140 -0
  143. package/source/i18n/locale.js +6 -4
  144. package/source/i18n/provider.js +2 -2
  145. package/source/i18n/providers/fetch.js +18 -3
  146. package/source/i18n/translations.js +18 -9
  147. package/source/logging/handler/console.js +2 -2
  148. package/source/logging/handler.js +2 -2
  149. package/source/logging/logentry.js +2 -2
  150. package/source/logging/logger.js +2 -2
  151. package/source/math/random.js +2 -2
  152. package/source/namespace.js +1 -1
  153. package/source/text/formatter.js +190 -48
  154. package/source/types/base.js +2 -2
  155. package/source/types/basewithoptions.js +2 -2
  156. package/source/types/binary.js +4 -4
  157. package/source/types/dataurl.js +4 -4
  158. package/source/types/global.js +4 -4
  159. package/source/types/id.js +6 -3
  160. package/source/types/is.js +100 -82
  161. package/source/types/mediatype.js +4 -4
  162. package/source/types/node.js +210 -0
  163. package/source/types/nodelist.js +129 -0
  164. package/source/types/noderecursiveiterator.js +148 -0
  165. package/source/types/observer.js +3 -3
  166. package/source/types/observerlist.js +2 -2
  167. package/source/types/proxyobserver.js +5 -5
  168. package/source/types/queue.js +4 -4
  169. package/source/types/randomid.js +2 -2
  170. package/source/types/regex.js +49 -0
  171. package/source/types/stack.js +2 -2
  172. package/source/types/tokenlist.js +2 -2
  173. package/source/types/typeof.js +3 -3
  174. package/source/types/uniquequeue.js +2 -2
  175. package/source/types/uuid.js +2 -2
  176. package/source/types/validate.js +20 -20
  177. package/source/types/version.js +6 -6
  178. package/source/util/clone.js +2 -2
  179. package/source/util/comparator.js +3 -3
  180. package/source/util/freeze.js +2 -2
  181. package/source/util/processing.js +3 -3
  182. package/source/util/trimspaces.js +2 -2
  183. package/test/cases/data/buildtree.js +212 -0
  184. package/test/cases/dom/attributes.js +46 -19
  185. package/test/cases/dom/resource/link/stylesheet.js +1 -1
  186. package/test/cases/dom/template.js +72 -14
  187. package/test/cases/dom/updater.js +102 -75
  188. package/test/cases/i18n/formatter.js +66 -0
  189. package/test/cases/monster.js +1 -1
  190. package/test/cases/text/formatter.js +36 -5
  191. package/test/cases/types/node.js +252 -0
  192. package/test/cases/types/nodelist.js +71 -0
  193. package/test/cases/types/noderecursiveiterator.js +75 -0
  194. package/test/cases/types/regex.js +32 -0
  195. package/test/util/jsdom.js +0 -1
  196. package/test/web/import.js +6 -0
  197. package/test/web/monster-dev.html +3 -3
  198. package/test/web/monster.html +2 -2
  199. package/test/web/test.html +3 -3
  200. package/test/web/tests.js +3 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schukai/monster",
3
- "version": "1.25.0",
3
+ "version": "1.28.0",
4
4
  "types": "./source/types/package.d.ts",
5
5
  "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
6
6
  "keywords": [
@@ -17,7 +17,18 @@
17
17
  "core",
18
18
  "shopcloud",
19
19
  "alvine",
20
- "monster"
20
+ "monster",
21
+ "buildmap",
22
+ "stack",
23
+ "observer",
24
+ "observable",
25
+ "uuid",
26
+ "node",
27
+ "nodelist",
28
+ "css-in-js",
29
+ "logger",
30
+ "log",
31
+ "theme"
21
32
  ],
22
33
  "type": "module",
23
34
  "homepage": "https://monsterjs.org",
@@ -9,6 +9,10 @@ import {Base} from '../types/base.js';
9
9
 
10
10
 
11
11
  /**
12
+ * Constraints are used to define conditions that must be met by the value of a variable.
13
+ *
14
+ * The uniform API of the constraints allows chains to be formed.
15
+ *
12
16
  * The abstract constraint defines the api for all constraints. mainly the method isValid() is defined.
13
17
  *
14
18
  * derived classes must implement the method isValid().
@@ -16,6 +20,7 @@ import {Base} from '../types/base.js';
16
20
  * @since 1.3.0
17
21
  * @copyright schukai GmbH
18
22
  * @memberOf Monster.Constraints
23
+ * @summary The abstract constraint
19
24
  */
20
25
  class AbstractConstraint extends Base {
21
26
 
@@ -7,11 +7,16 @@ import {assignToNamespace, Monster} from '../namespace.js';
7
7
  import {AbstractConstraint} from "./abstract.js";
8
8
 
9
9
  /**
10
+ * Constraints are used to define conditions that must be met by the value of a variable.
11
+ *
12
+ * The uniform API of the constraints allows chains to be formed.
13
+ *
10
14
  * Operators allow you to link constraints together. for example, you can check whether a value is an object or an array. each operator has two operands that are linked together.
11
15
  *
12
16
  * @since 1.3.0
13
17
  * @copyright schukai GmbH
14
18
  * @memberOf Monster.Constraints
19
+ * @summary The abstract operator constraint
15
20
  */
16
21
  class AbstractOperator extends AbstractConstraint {
17
22
 
@@ -8,11 +8,15 @@ import {assignToNamespace, Monster} from '../namespace.js';
8
8
  import {AbstractOperator} from "./abstractoperator.js";
9
9
 
10
10
  /**
11
+ * Constraints are used to define conditions that must be met by the value of a variable.
12
+ *
13
+ * The uniform API of the constraints allows chains to be formed.
14
+ *
11
15
  * The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.
12
16
  *
13
17
  * ```
14
18
  * <script type="module">
15
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/andoperator.js';
19
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
16
20
  * new Monster.Constraint.AndOperator();
17
21
  * </script>
18
22
  * ```
@@ -21,16 +25,16 @@ import {AbstractOperator} from "./abstractoperator.js";
21
25
  *
22
26
  * ```
23
27
  * <script type="module">
24
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/andoperator.js';
28
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/andoperator.js';
25
29
  * new AndOperator();
26
30
  * </script>
27
31
  * ```
28
32
  *
29
33
  * @example
30
34
  *
31
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/valid.js';
32
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/invalid.js';
33
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/andoperator.js';
35
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/valid.js';
36
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/invalid.js';
37
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/andoperator.js';
34
38
  *
35
39
  * new AndOperator(
36
40
  * new Valid(), new Valid()).isValid()
@@ -47,6 +51,7 @@ import {AbstractOperator} from "./abstractoperator.js";
47
51
  * @since 1.3.0
48
52
  * @copyright schukai GmbH
49
53
  * @memberOf Monster.Constraints
54
+ * @summary A and operator constraint
50
55
  */
51
56
  class AndOperator extends AbstractOperator {
52
57
 
@@ -7,13 +7,17 @@ import {assignToNamespace, Monster} from '../namespace.js';
7
7
  import {AbstractConstraint} from "./abstract.js";
8
8
 
9
9
  /**
10
+ * Constraints are used to define conditions that must be met by the value of a variable.
11
+ *
12
+ * The uniform API of the constraints allows chains to be formed.
13
+ *
10
14
  * The invalid constraint allows an always invalid query to be performed. this constraint is mainly intended for testing.
11
15
  *
12
16
  * You can call the method via the monster namespace `new Monster.Constraint.Invalid()`.
13
17
  *
14
18
  * ```
15
19
  * <script type="module">
16
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/invalid.js';
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
17
21
  * new Monster.Constraint.Invalid();
18
22
  * </script>
19
23
  * ```
@@ -22,14 +26,14 @@ import {AbstractConstraint} from "./abstract.js";
22
26
  *
23
27
  * ```
24
28
  * <script type="module">
25
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/invalid.js';
29
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/invalid.js';
26
30
  * new Invalid();
27
31
  * </script>
28
32
  * ```
29
33
  *
30
34
  * @example
31
35
  *
32
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/invalid.js';
36
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/invalid.js';
33
37
  *
34
38
  * new Invalid().isValid()
35
39
  * .then(()=>console.log(true))
@@ -39,6 +43,7 @@ import {AbstractConstraint} from "./abstract.js";
39
43
  * @since 1.3.0
40
44
  * @copyright schukai GmbH
41
45
  * @memberOf Monster.Constraints
46
+ * @summary A constraint that always invalid
42
47
  */
43
48
  class Invalid extends AbstractConstraint {
44
49
 
@@ -8,12 +8,16 @@ import {isArray} from "../types/is.js";
8
8
  import {AbstractConstraint} from "./abstract.js";
9
9
 
10
10
  /**
11
+ * Constraints are used to define conditions that must be met by the value of a variable.
12
+ *
13
+ * The uniform API of the constraints allows chains to be formed.
14
+ *
11
15
  * You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.
12
16
  *
13
17
  * ```
14
18
  * <script type="module">
15
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/isarray.js';
16
- * console.log(new Monster.Constraint.IsArray())
19
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
20
+ * new Monster.Constraint.IsArray()
17
21
  * </script>
18
22
  * ```
19
23
  *
@@ -21,14 +25,14 @@ import {AbstractConstraint} from "./abstract.js";
21
25
  *
22
26
  * ```
23
27
  * <script type="module">
24
- * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/isarray.js';
28
+ * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/isarray.js';
25
29
  * console.log(new IsArray())
26
30
  * </script>
27
31
  * ```
28
32
  *
29
33
  * @example
30
34
  *
31
- * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/isarray.js';
35
+ * import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/isarray.js';
32
36
  *
33
37
  * new IsArray()
34
38
  * .isValid([])
@@ -43,6 +47,7 @@ import {AbstractConstraint} from "./abstract.js";
43
47
  * @since 1.3.0
44
48
  * @copyright schukai GmbH
45
49
  * @memberOf Monster.Constraints
50
+ * @summary A constraint to check if a value is an array
46
51
  */
47
52
  class IsArray extends AbstractConstraint {
48
53
 
@@ -8,11 +8,15 @@ import {isObject} from "../types/is.js";
8
8
  import {AbstractConstraint} from "./abstract.js";
9
9
 
10
10
  /**
11
+ * Constraints are used to define conditions that must be met by the value of a variable.
12
+ *
13
+ * The uniform API of the constraints allows chains to be formed.
14
+ *
11
15
  * You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.
12
16
  *
13
17
  * ```
14
18
  * <script type="module">
15
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/isobject.js';
19
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
16
20
  * console.log(new Monster.Constraint.IsObject())
17
21
  * </script>
18
22
  * ```
@@ -21,14 +25,14 @@ import {AbstractConstraint} from "./abstract.js";
21
25
  *
22
26
  * ```
23
27
  * <script type="module">
24
- * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/isobject.js';
28
+ * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/isobject.js';
25
29
  * console.log(new IsObject())
26
30
  * </script>
27
31
  * ```
28
32
  *
29
33
  * @example
30
34
  *
31
- * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/isobject.js';
35
+ * import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/isobject.js';
32
36
  *
33
37
  * new IsObject()
34
38
  * .isValid({})
@@ -44,6 +48,7 @@ import {AbstractConstraint} from "./abstract.js";
44
48
  * @since 1.3.0
45
49
  * @copyright schukai GmbH
46
50
  * @memberOf Monster.Constraints
51
+ * @summary A constraint to check if a value is an object
47
52
  */
48
53
  class IsObject extends AbstractConstraint {
49
54
 
@@ -7,11 +7,15 @@ import {assignToNamespace, Monster} from '../namespace.js';
7
7
  import {AbstractOperator} from "./abstractoperator.js";
8
8
 
9
9
  /**
10
+ * Constraints are used to define conditions that must be met by the value of a variable.
11
+ *
12
+ * The uniform API of the constraints allows chains to be formed.
13
+ *
10
14
  * The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.
11
15
  *
12
16
  * ```
13
17
  * <script type="module">
14
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraint/oroperator.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
15
19
  * new Monster.Constraint.OrOperator();
16
20
  * </script>
17
21
  * ```
@@ -20,16 +24,16 @@ import {AbstractOperator} from "./abstractoperator.js";
20
24
  *
21
25
  * ```
22
26
  * <script type="module">
23
- * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraint/oroperator.js';
27
+ * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraint/oroperator.js';
24
28
  * new OrOperator();
25
29
  * </script>
26
30
  * ```
27
31
  *
28
32
  * @example
29
33
  *
30
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/valid.js';
31
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/invalid.js';
32
- * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/oroperator.js';
34
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/valid.js';
35
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/invalid.js';
36
+ * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/oroperator.js';
33
37
  *
34
38
  * new OrOperator(
35
39
  * new Valid(), new Invalid()).isValid()
@@ -46,6 +50,7 @@ import {AbstractOperator} from "./abstractoperator.js";
46
50
  * @since 1.3.0
47
51
  * @copyright schukai GmbH
48
52
  * @memberOf Monster.Constraints
53
+ * @summary A or operator
49
54
  */
50
55
  class OrOperator extends AbstractOperator {
51
56
 
@@ -7,13 +7,17 @@ import {assignToNamespace, Monster} from '../namespace.js';
7
7
  import {AbstractConstraint} from "./abstract.js";
8
8
 
9
9
  /**
10
+ * Constraints are used to define conditions that must be met by the value of a variable.
11
+ *
12
+ * The uniform API of the constraints allows chains to be formed.
13
+ *
10
14
  * The valid constraint allows an always valid query to be performed. this constraint is mainly intended for testing.
11
15
  *
12
16
  * You can call the method via the monster namespace `new Monster.Constraint.Valid()`.
13
17
  *
14
18
  * ```
15
19
  * <script type="module">
16
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/valid.js';
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
17
21
  * new Monster.Constraint.Valid();
18
22
  * </script>
19
23
  * ```
@@ -22,14 +26,14 @@ import {AbstractConstraint} from "./abstract.js";
22
26
  *
23
27
  * ```
24
28
  * <script type="module">
25
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/valid.js';
29
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/valid.js';
26
30
  * new Valid();
27
31
  * </script>
28
32
  * ```
29
33
  *
30
34
  * @example
31
35
  *
32
- * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/constraints/valid.js';
36
+ * import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/constraints/valid.js';
33
37
  *
34
38
  * new Valid().isValid()
35
39
  * .then(()=>console.log(true))
@@ -39,6 +43,7 @@ import {AbstractConstraint} from "./abstract.js";
39
43
  * @since 1.3.0
40
44
  * @copyright schukai GmbH
41
45
  * @memberOf Monster.Constraints
46
+ * @summary A constraint that always valid
42
47
  */
43
48
  class Valid extends AbstractConstraint {
44
49
 
@@ -20,7 +20,7 @@ import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.js";
20
20
  *
21
21
  * ```
22
22
  * <script type="module">
23
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/buildmap.js';
23
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
24
24
  * console.log(Monster.Data.buildMap())
25
25
  * </script>
26
26
  * ```
@@ -29,7 +29,7 @@ import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.js";
29
29
  *
30
30
  * ```
31
31
  * <script type="module">
32
- * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/buildmap.js';
32
+ * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/buildmap.js';
33
33
  * console.log(buildMap())
34
34
  * </script>
35
35
  * ```
@@ -40,7 +40,7 @@ import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.js";
40
40
  *
41
41
  * @example
42
42
  *
43
- * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/buildmap.js';
43
+ * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/buildmap.js';
44
44
  * // a typical data structure as reported by an api
45
45
  *
46
46
  * let map;
@@ -119,8 +119,25 @@ import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.js";
119
119
  * @throws {TypeError} the selector callback must return a map
120
120
  */
121
121
  function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
122
+ return assembleParts(subject, selector, filter, function (v, k, m) {
123
+ k = build(v, keyTemplate, k);
124
+ v = build(v, valueTemplate);
125
+ this.set(k, v);
126
+ });
122
127
 
123
- const result = new Map
128
+ }
129
+
130
+ /**
131
+ * @private
132
+ * @param {*} subject
133
+ * @param {string|Monster.Data~exampleSelectorCallback} selector
134
+ * @param {Monster.Data~exampleFilterCallback} [filter]
135
+ * @param {function} callback
136
+ * @return {Map}
137
+ */
138
+ function assembleParts(subject, selector, filter, callback) {
139
+
140
+ const result = new Map();
124
141
 
125
142
  let map;
126
143
  if (isFunction(selector)) {
@@ -139,16 +156,13 @@ function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
139
156
  return result;
140
157
  }
141
158
 
142
-
143
159
  map.forEach((v, k, m) => {
144
160
  if (isFunction(filter)) {
145
161
  if (filter.call(m, v, k) !== true) return;
146
162
  }
147
163
 
148
- k = build(v, keyTemplate, k);
149
- v = build(v, valueTemplate);
164
+ callback.call(result, v, k, m);
150
165
 
151
- result.set(k, v);
152
166
  });
153
167
 
154
168
  return result;
@@ -181,7 +195,8 @@ function buildFlatMap(subject, selector, key, parentMap) {
181
195
  if (current === WILDCARD) {
182
196
 
183
197
  let finder = new Pathfinder(subject);
184
- let map
198
+ let map;
199
+
185
200
  try {
186
201
  map = finder.getVia(currentPath.join(DELIMITER));
187
202
  } catch (e) {
@@ -189,7 +204,6 @@ function buildFlatMap(subject, selector, key, parentMap) {
189
204
  map = new Map();
190
205
  }
191
206
 
192
-
193
207
  for (const [k, o] of map) {
194
208
 
195
209
  let copyKey = clone(key);
@@ -201,7 +215,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
201
215
  let kk = copyKey.join(DELIMITER);
202
216
  let sub = buildFlatMap.call(result, o, parts.join(DELIMITER), copyKey, o);
203
217
 
204
- if (isObject(sub)) {
218
+ if (isObject(sub) && parentMap !== undefined) {
205
219
  sub['^'] = parentMap;
206
220
  }
207
221
 
@@ -239,7 +253,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
239
253
  * Alternatively to a string selector a callback can be specified. this must return a map.
240
254
  *
241
255
  * @example
242
- * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/buildmap.js';
256
+ * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/buildmap.js';
243
257
  *
244
258
  * let obj = {
245
259
  * "data": [
@@ -408,4 +422,4 @@ function build(subject, definition, defaultValue) {
408
422
 
409
423
 
410
424
  assignToNamespace('Monster.Data', buildMap);
411
- export {Monster, buildMap}
425
+ export {Monster, buildMap, assembleParts}
@@ -0,0 +1,129 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+
7
+ import {assignToNamespace, Monster} from '../namespace.js';
8
+ import {isArray, isObject} from "../types/is.js";
9
+ import {Node} from "../types/node.js";
10
+ import {NodeList} from "../types/nodelist.js";
11
+ import {assembleParts} from "./buildmap.js";
12
+ import {extend} from "./extend.js";
13
+
14
+
15
+ /**
16
+ * @private
17
+ * @type {symbol}
18
+ */
19
+ const parentSymbol = Symbol('parent');
20
+
21
+ /**
22
+ * @private
23
+ * @type {symbol}
24
+ */
25
+ const rootSymbol = Symbol('root');
26
+
27
+ /**
28
+ * @typedef {Object} buildTreeOptions
29
+ * @property {array} options.rootReferences=[null, undefined] defines the values for elements without parents
30
+ * @property {Monster.Data~exampleFilterCallback} options.filter filtering of the values
31
+ * @memberOf Monster.Data
32
+ */
33
+
34
+ /**
35
+ * With the help of the function `buildTree()`, nodes can be easily created from data objects.
36
+ *
37
+ * You can call the method via the monster namespace `Monster.Data.buildTree()`.
38
+ *
39
+ * ```
40
+ * <script type="module">
41
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/buildtree.js';
42
+ * Monster.Data.buildTree()
43
+ * </script>
44
+ * ```
45
+ *
46
+ * Alternatively, you can also integrate this function individually.
47
+ *
48
+ * ```
49
+ * <script type="module">
50
+ * import {buildTree} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/buildtree.js';
51
+ * buildTree()
52
+ * </script>
53
+ * ```
54
+ *
55
+ * @param {*} subject
56
+ * @param {string|Monster.Data~exampleSelectorCallback} selector
57
+ * @param {string} idKey
58
+ * @param {string} parentIDKey
59
+ * @param {buildTreeOptions} [options]
60
+ * @return {*}
61
+ * @memberOf Monster.Data
62
+ * @throws {TypeError} value is neither a string nor a function
63
+ * @throws {TypeError} the selector callback must return a map
64
+ * @throws {Error} the object has no value for the specified id
65
+ * @since 1.26.0
66
+ */
67
+ function buildTree(subject, selector, idKey, parentIDKey, options) {
68
+
69
+ const nodes = new Map;
70
+
71
+ if (!isObject(options)) {
72
+ options = {}
73
+ }
74
+
75
+ options = extend({}, {
76
+ rootReferences: [null, undefined],
77
+ filter: undefined
78
+ }, options)
79
+
80
+ const filter = options?.filter;
81
+ let rootReferences = options.rootReferences;
82
+ if (!isArray(rootReferences)) {
83
+ rootReferences = [rootReferences];
84
+ }
85
+
86
+ const childMap = assembleParts(subject, selector, filter, function (o, k, m) {
87
+
88
+ const key = o?.[idKey]
89
+ let ref = o?.[parentIDKey]
90
+ if (rootReferences.indexOf(ref) !== -1) ref = rootSymbol;
91
+
92
+ if (key === undefined) {
93
+ throw new Error('the object has no value for the specified id')
94
+ }
95
+
96
+ o[parentSymbol] = ref;
97
+
98
+ const node = new Node(o);
99
+ this.has(ref) ? this.get(ref).add(node) : this.set(ref, new NodeList().add(node));
100
+ nodes.set(key, node);
101
+
102
+ })
103
+
104
+ nodes.forEach(node => {
105
+
106
+ let id = node?.['value']?.[idKey];
107
+
108
+ if (childMap.has(id)) {
109
+ node.childNodes = childMap.get(id);
110
+ childMap.delete(id)
111
+ }
112
+ })
113
+
114
+ const list = new NodeList;
115
+
116
+ childMap.forEach((s) => {
117
+ if (s instanceof Set) {
118
+ s.forEach((n) => {
119
+ list.add(n);
120
+ })
121
+ }
122
+ })
123
+
124
+ return list;
125
+ }
126
+
127
+
128
+ assignToNamespace('Monster.Data', buildTree);
129
+ export {Monster, buildTree}
@@ -17,7 +17,7 @@ import {WriteError} from "./restapi/writeerror.js";
17
17
  *
18
18
  * ```
19
19
  * <script type="module">
20
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/restapi.js';
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
21
21
  * Monster.Data.Datasource.RestAPI()
22
22
  * </script>
23
23
  * ```
@@ -26,14 +26,14 @@ import {WriteError} from "./restapi/writeerror.js";
26
26
  *
27
27
  * ```
28
28
  * <script type="module">
29
- * import {RestAPI} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/restapi.js';
29
+ * import {RestAPI} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/datasource/restapi.js';
30
30
  * new RestAPI()
31
31
  * </script>
32
32
  * ```
33
33
  *
34
34
  * @example
35
35
  *
36
- * import {RestAPI} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/restapi.js';
36
+ * import {RestAPI} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/datasource/restapi.js';
37
37
  *
38
38
  * const ds = new RestAPI({
39
39
  * url: 'https://httpbin.org/get'
@@ -18,7 +18,7 @@ import {Storage, storageObjectSymbol} from "../storage.js";
18
18
  *
19
19
  * ```
20
20
  * <script type="module">
21
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage/localstorage.js';
21
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
22
22
  * Monster.Data.Datasource.Storage.LocalStorage()
23
23
  * </script>
24
24
  * ```
@@ -27,7 +27,7 @@ import {Storage, storageObjectSymbol} from "../storage.js";
27
27
  *
28
28
  * ```
29
29
  * <script type="module">
30
- * import {LocalStorage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage/localstorage.js';
30
+ * import {LocalStorage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/datasource/storage/localstorage.js';
31
31
  * new LocalStorage()
32
32
  * </script>
33
33
  * ```
@@ -15,7 +15,7 @@ import {Storage, storageObjectSymbol} from "../storage.js";
15
15
  *
16
16
  * ```
17
17
  * <script type="module">
18
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage/sessionstorage.js';
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
19
19
  * Monster.Data.Datasource.Storage.SessionStorage()
20
20
  * </script>
21
21
  * ```
@@ -24,7 +24,7 @@ import {Storage, storageObjectSymbol} from "../storage.js";
24
24
  *
25
25
  * ```
26
26
  * <script type="module">
27
- * import {SessionStorage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage/sessionstorage.js';
27
+ * import {SessionStorage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/datasource/storage/sessionstorage.js';
28
28
  * new SessionStorage()
29
29
  * </script>
30
30
  * ```
@@ -20,7 +20,7 @@ const storageObjectSymbol = Symbol('storageObject');
20
20
  *
21
21
  * ```
22
22
  * <script type="module">
23
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage.js';
23
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/monster.js';
24
24
  * Monster.Data.Datasource.Storage()
25
25
  * </script>
26
26
  * ```
@@ -29,14 +29,14 @@ const storageObjectSymbol = Symbol('storageObject');
29
29
  *
30
30
  * ```
31
31
  * <script type="module">
32
- * import {Storage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage.js';
32
+ * import {Storage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/datasource/storage.js';
33
33
  * new Storage()
34
34
  * </script>
35
35
  * ```
36
36
  *
37
37
  * @example
38
38
  *
39
- * import {Storage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource/storage.js';
39
+ * import {Storage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.28.0/dist/modules/data/datasource/storage.js';
40
40
  *
41
41
  * new Datasource();
42
42
  *