@schukai/monster 1.25.0 → 1.26.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 (197) hide show
  1. package/CHANGELOG +15 -0
  2. package/README.md +3 -3
  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 +1 -1
  31. package/dist/modules/dom/constants.js +1 -1
  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 +1 -1
  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 +620 -361
  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 +25 -9
  112. package/source/data/buildtree.js +95 -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 +24 -24
  125. package/source/dom/customcontrol.js +1 -1
  126. package/source/dom/customelement.js +1 -1
  127. package/source/dom/events.js +4 -4
  128. package/source/dom/focusmanager.js +6 -7
  129. package/source/dom/locale.js +8 -4
  130. package/source/dom/resource/data.js +2 -2
  131. package/source/dom/resource/link/stylesheet.js +2 -2
  132. package/source/dom/resource/link.js +2 -2
  133. package/source/dom/resource/script.js +2 -2
  134. package/source/dom/resource.js +2 -2
  135. package/source/dom/resourcemanager.js +2 -2
  136. package/source/dom/template.js +5 -5
  137. package/source/dom/theme.js +3 -3
  138. package/source/dom/updater.js +5 -5
  139. package/source/dom/util.js +6 -6
  140. package/source/dom/worker/factory.js +2 -2
  141. package/source/i18n/formatter.js +140 -0
  142. package/source/i18n/locale.js +6 -4
  143. package/source/i18n/provider.js +2 -2
  144. package/source/i18n/providers/fetch.js +18 -3
  145. package/source/i18n/translations.js +18 -9
  146. package/source/logging/handler/console.js +2 -2
  147. package/source/logging/handler.js +2 -2
  148. package/source/logging/logentry.js +2 -2
  149. package/source/logging/logger.js +2 -2
  150. package/source/math/random.js +2 -2
  151. package/source/namespace.js +1 -1
  152. package/source/text/formatter.js +190 -48
  153. package/source/types/base.js +2 -2
  154. package/source/types/basewithoptions.js +2 -2
  155. package/source/types/binary.js +4 -4
  156. package/source/types/dataurl.js +4 -4
  157. package/source/types/global.js +4 -4
  158. package/source/types/id.js +6 -3
  159. package/source/types/is.js +100 -82
  160. package/source/types/mediatype.js +4 -4
  161. package/source/types/node.js +179 -0
  162. package/source/types/nodelist.js +125 -0
  163. package/source/types/noderecursiveiterator.js +126 -0
  164. package/source/types/observer.js +3 -3
  165. package/source/types/observerlist.js +2 -2
  166. package/source/types/proxyobserver.js +5 -5
  167. package/source/types/queue.js +4 -4
  168. package/source/types/randomid.js +2 -2
  169. package/source/types/regex.js +49 -0
  170. package/source/types/stack.js +2 -2
  171. package/source/types/tokenlist.js +2 -2
  172. package/source/types/typeof.js +3 -3
  173. package/source/types/uniquequeue.js +2 -2
  174. package/source/types/uuid.js +2 -2
  175. package/source/types/validate.js +20 -20
  176. package/source/types/version.js +6 -6
  177. package/source/util/clone.js +2 -2
  178. package/source/util/comparator.js +3 -3
  179. package/source/util/freeze.js +2 -2
  180. package/source/util/processing.js +3 -3
  181. package/source/util/trimspaces.js +2 -2
  182. package/test/cases/data/buildtree.js +149 -0
  183. package/test/cases/dom/attributes.js +18 -14
  184. package/test/cases/dom/resource/link/stylesheet.js +1 -1
  185. package/test/cases/i18n/formatter.js +66 -0
  186. package/test/cases/monster.js +1 -1
  187. package/test/cases/text/formatter.js +36 -5
  188. package/test/cases/types/node.js +196 -0
  189. package/test/cases/types/nodelist.js +64 -0
  190. package/test/cases/types/noderecursiveiterator.js +54 -0
  191. package/test/cases/types/regex.js +32 -0
  192. package/test/util/jsdom.js +0 -1
  193. package/test/web/import.js +6 -0
  194. package/test/web/monster-dev.html +3 -3
  195. package/test/web/monster.html +2 -2
  196. package/test/web/test.html +2 -2
  197. 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.26.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.26.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.26.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.26.0/dist/modules/constraints/valid.js';
36
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/invalid.js';
37
+ * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.0/dist/modules/constraints/valid.js';
35
+ * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/invalid.js';
36
+ * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.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.26.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.26.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.26.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.26.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.26.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.26.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
+ });
127
+
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 {*}
137
+ */
138
+ function assembleParts(subject, selector, filter, callback) {
122
139
 
123
- const result = new Map
140
+ const result = new Map();
124
141
 
125
142
  let map;
126
143
  if (isFunction(selector)) {
@@ -145,10 +162,9 @@ function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
145
162
  if (filter.call(m, v, k) !== true) return;
146
163
  }
147
164
 
148
- k = build(v, keyTemplate, k);
149
- v = build(v, valueTemplate);
165
+ callback.call(result, v, k, m);
166
+
150
167
 
151
- result.set(k, v);
152
168
  });
153
169
 
154
170
  return result;
@@ -239,7 +255,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
239
255
  * Alternatively to a string selector a callback can be specified. this must return a map.
240
256
  *
241
257
  * @example
242
- * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/buildmap.js';
258
+ * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/buildmap.js';
243
259
  *
244
260
  * let obj = {
245
261
  * "data": [
@@ -408,4 +424,4 @@ function build(subject, definition, defaultValue) {
408
424
 
409
425
 
410
426
  assignToNamespace('Monster.Data', buildMap);
411
- export {Monster, buildMap}
427
+ export {Monster, buildMap, assembleParts}
@@ -0,0 +1,95 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+
7
+ import {assignToNamespace, Monster} from '../namespace.js';
8
+ import {Node} from "../types/node.js";
9
+ import {NodeList} from "../types/nodelist.js";
10
+ import {assembleParts} from "./buildmap.js";
11
+
12
+
13
+ /**
14
+ * @private
15
+ * @type {symbol}
16
+ */
17
+ const parentSymbol = Symbol('parent');
18
+
19
+ /**
20
+ * @private
21
+ * @type {symbol}
22
+ */
23
+ const rootSymbol = Symbol('root');
24
+
25
+ /**
26
+ * With the help of the function `buildTree()`, nodes can be easily created from data objects.
27
+ *
28
+ * You can call the method via the monster namespace `Monster.Data.buildTree()`.
29
+ *
30
+ * ```
31
+ * <script type="module">
32
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/buildtree.js';
33
+ * console.log(Monster.Data.buildTree())
34
+ * </script>
35
+ * ```
36
+ *
37
+ * Alternatively, you can also integrate this function individually.
38
+ *
39
+ * ```
40
+ * <script type="module">
41
+ * import {buildTree} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/buildtree.js';
42
+ * console.log(buildTree())
43
+ * </script>
44
+ * ```
45
+ *
46
+ * @param {*} subject
47
+ * @param {string|Monster.Data~exampleSelectorCallback} selector
48
+ * @param {string} id
49
+ * @param {string} parentID
50
+ * @param {Monster.Data~exampleFilterCallback} [filter]
51
+ * @return {*}
52
+ * @memberOf Monster.Data
53
+ * @throws {TypeError} value is neither a string nor a function
54
+ * @throws {TypeError} the selector callback must return a map
55
+ * @throws {Error} the object has no value for the specified id
56
+ */
57
+ function buildTree(subject, selector, id, parentID, filter) {
58
+
59
+ const nodes = new Map;
60
+
61
+ const childMap = assembleParts(subject, selector, filter, function (o, k, m) {
62
+
63
+ const key = o?.[id]
64
+ let ref = o?.[parentID]
65
+ if (ref === null|| ref===undefined) ref = rootSymbol;
66
+
67
+ if (key === undefined) {
68
+ throw new Error('the object has no value for the specified id')
69
+ }
70
+
71
+ o[parentSymbol] = ref;
72
+
73
+ const node = new Node(o);
74
+ this.has(ref) ? this.get(ref).add(node) : this.set(ref, new NodeList().add(node));
75
+ nodes.set(key, node);
76
+
77
+ })
78
+
79
+ nodes.forEach(node => {
80
+
81
+ if (childMap.has(node.value.id)) {
82
+ node.childNodes = childMap.get(node.value.id);
83
+ }
84
+ })
85
+
86
+ const r = childMap.get(rootSymbol);
87
+
88
+ return new NodeList(childMap.get(rootSymbol));
89
+
90
+
91
+ }
92
+
93
+
94
+ assignToNamespace('Monster.Data', buildTree);
95
+ 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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.0/dist/modules/data/datasource/storage.js';
40
40
  *
41
41
  * new Datasource();
42
42
  *
@@ -31,7 +31,7 @@ const internalDataSymbol = Symbol('internalData');
31
31
  *
32
32
  * ```
33
33
  * <script type="module">
34
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource.js';
34
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
35
35
  * Monster.Data.Datasource()
36
36
  * </script>
37
37
  * ```
@@ -40,14 +40,14 @@ const internalDataSymbol = Symbol('internalData');
40
40
  *
41
41
  * ```
42
42
  * <script type="module">
43
- * import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource.js';
43
+ * import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/datasource.js';
44
44
  * new Datasource()
45
45
  * </script>
46
46
  * ```
47
47
  *
48
48
  * @example
49
49
  *
50
- * import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/datasource.js'
50
+ * import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/datasource.js'
51
51
  *
52
52
  * class MyDatasource extends Datasource {
53
53
  *
@@ -17,7 +17,7 @@ import {typeOf} from "../types/typeof.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/diff.js';
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
21
21
  * Monster.Data.Diff(a, b)
22
22
  * </script>
23
23
  * ```
@@ -26,14 +26,14 @@ import {typeOf} from "../types/typeof.js";
26
26
  *
27
27
  * ```
28
28
  * <script type="module">
29
- * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/diff.js';
29
+ * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/diff.js';
30
30
  * Diff(a, b)
31
31
  * </script>
32
32
  * ```
33
33
  *
34
34
  * @example
35
35
  *
36
- * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.25.0/dist/modules/data/diff.js';
36
+ * import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/diff.js';
37
37
  *
38
38
  * // given are two objects x and y.
39
39
  *