@schukai/monster 1.22.0 → 1.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. package/CHANGELOG +56 -0
  2. package/README.md +4 -4
  3. package/dist/modules/constants.js +2 -2
  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 +2 -0
  17. package/dist/modules/data/datasource/restapi.js +2 -2
  18. package/dist/modules/data/datasource/storage/localstorage.js +2 -2
  19. package/dist/modules/data/datasource/storage/namespace.js +1 -1
  20. package/dist/modules/data/datasource/storage/sessionstorage.js +2 -2
  21. package/dist/modules/data/datasource/storage.js +2 -2
  22. package/dist/modules/data/datasource.js +2 -2
  23. package/dist/modules/data/diff.js +2 -2
  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 +2 -2
  27. package/dist/modules/data/pipe.js +1 -1
  28. package/dist/modules/data/transformer.js +2 -2
  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 +2 -2
  32. package/dist/modules/dom/customcontrol.js +2 -2
  33. package/dist/modules/dom/customelement.js +2 -2
  34. package/dist/modules/dom/events.js +1 -1
  35. package/dist/modules/dom/focusmanager.js +2 -0
  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 +2 -0
  39. package/dist/modules/dom/resource/link/stylesheet.js +2 -0
  40. package/dist/modules/dom/resource/link.js +2 -0
  41. package/dist/modules/dom/resource/script.js +2 -0
  42. package/dist/modules/dom/resource.js +2 -0
  43. package/dist/modules/dom/resourcemanager.js +2 -0
  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 +2 -0
  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 +2 -2
  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 +2 -2
  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 +2 -2
  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 +2 -2
  82. package/dist/modules/types/proxyobserver.js +2 -2
  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 +2 -2
  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 +2 -0
  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 +2 -2
  94. package/dist/modules/util/comparator.js +2 -2
  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 +2 -2
  98. package/dist/modules/util/trimspaces.js +2 -0
  99. package/dist/monster.dev.js +1838 -792
  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/constants.js +16 -7
  104. package/source/constraints/abstract.js +5 -0
  105. package/source/constraints/abstractoperator.js +5 -0
  106. package/source/constraints/andoperator.js +10 -5
  107. package/source/constraints/invalid.js +8 -3
  108. package/source/constraints/isarray.js +9 -4
  109. package/source/constraints/isobject.js +8 -3
  110. package/source/constraints/oroperator.js +10 -5
  111. package/source/constraints/valid.js +8 -3
  112. package/source/data/buildmap.js +27 -11
  113. package/source/data/buildtree.js +95 -0
  114. package/source/data/datasource/restapi/writeerror.js +49 -0
  115. package/source/data/datasource/restapi.js +95 -11
  116. package/source/data/datasource/storage/localstorage.js +15 -8
  117. package/source/data/datasource/storage/sessionstorage.js +16 -12
  118. package/source/data/datasource/storage.js +16 -7
  119. package/source/data/datasource.js +60 -16
  120. package/source/data/diff.js +8 -8
  121. package/source/data/extend.js +5 -5
  122. package/source/data/pathfinder.js +12 -6
  123. package/source/data/pipe.js +6 -5
  124. package/source/data/transformer.js +131 -24
  125. package/source/dom/assembler.js +2 -2
  126. package/source/dom/attributes.js +24 -24
  127. package/source/dom/constants.js +305 -12
  128. package/source/dom/customcontrol.js +40 -19
  129. package/source/dom/customelement.js +182 -102
  130. package/source/dom/events.js +6 -6
  131. package/source/dom/focusmanager.js +250 -0
  132. package/source/dom/locale.js +10 -5
  133. package/source/dom/resource/data.js +170 -0
  134. package/source/dom/resource/link/stylesheet.js +54 -0
  135. package/source/dom/resource/link.js +125 -0
  136. package/source/dom/resource/script.js +112 -0
  137. package/source/dom/resource.js +268 -0
  138. package/source/dom/resourcemanager.js +214 -0
  139. package/source/dom/template.js +40 -10
  140. package/source/dom/theme.js +3 -3
  141. package/source/dom/updater.js +115 -39
  142. package/source/dom/util.js +6 -6
  143. package/source/dom/worker/factory.js +134 -0
  144. package/source/i18n/formatter.js +140 -0
  145. package/source/i18n/locale.js +10 -8
  146. package/source/i18n/provider.js +4 -4
  147. package/source/i18n/providers/fetch.js +24 -14
  148. package/source/i18n/translations.js +20 -10
  149. package/source/logging/handler/console.js +2 -2
  150. package/source/logging/handler.js +2 -2
  151. package/source/logging/logentry.js +2 -2
  152. package/source/logging/logger.js +4 -4
  153. package/source/math/random.js +11 -5
  154. package/source/namespace.js +1 -1
  155. package/source/text/formatter.js +244 -27
  156. package/source/types/base.js +4 -4
  157. package/source/types/basewithoptions.js +10 -15
  158. package/source/types/binary.js +8 -8
  159. package/source/types/dataurl.js +6 -6
  160. package/source/types/global.js +9 -7
  161. package/source/types/id.js +6 -3
  162. package/source/types/is.js +103 -85
  163. package/source/types/mediatype.js +4 -4
  164. package/source/types/node.js +179 -0
  165. package/source/types/nodelist.js +125 -0
  166. package/source/types/noderecursiveiterator.js +126 -0
  167. package/source/types/observer.js +3 -3
  168. package/source/types/observerlist.js +3 -3
  169. package/source/types/proxyobserver.js +24 -7
  170. package/source/types/queue.js +6 -6
  171. package/source/types/randomid.js +2 -2
  172. package/source/types/regex.js +49 -0
  173. package/source/types/stack.js +2 -2
  174. package/source/types/tokenlist.js +8 -9
  175. package/source/types/typeof.js +3 -3
  176. package/source/types/uniquequeue.js +4 -4
  177. package/source/types/uuid.js +102 -0
  178. package/source/types/validate.js +20 -20
  179. package/source/types/version.js +6 -6
  180. package/source/util/clone.js +5 -6
  181. package/source/util/comparator.js +5 -5
  182. package/source/util/freeze.js +5 -5
  183. package/source/util/processing.js +33 -36
  184. package/source/util/trimspaces.js +85 -0
  185. package/test/cases/data/buildtree.js +149 -0
  186. package/test/cases/data/datasource/restapi.js +1 -1
  187. package/test/cases/data/datasource.js +4 -4
  188. package/test/cases/data/diff.js +4 -4
  189. package/test/cases/data/pathfinder.js +18 -9
  190. package/test/cases/data/pipe.js +26 -2
  191. package/test/cases/data/transformer.js +41 -10
  192. package/test/cases/dom/attributes.js +18 -14
  193. package/test/cases/dom/customcontrol.js +6 -5
  194. package/test/cases/dom/customelement.js +25 -26
  195. package/test/cases/dom/focusmanager.js +111 -0
  196. package/test/cases/dom/locale.js +1 -4
  197. package/test/cases/dom/resource/data.js +129 -0
  198. package/test/cases/dom/resource/link/stylesheet.js +101 -0
  199. package/test/cases/dom/resource/link.js +101 -0
  200. package/test/cases/dom/resource/script.js +115 -0
  201. package/test/cases/dom/resourcemanager.js +118 -0
  202. package/test/cases/dom/updater.js +42 -19
  203. package/test/cases/dom/worker/factory.js +63 -0
  204. package/test/cases/i18n/formatter.js +66 -0
  205. package/test/cases/monster.js +1 -1
  206. package/test/cases/text/formatter.js +71 -8
  207. package/test/cases/types/node.js +196 -0
  208. package/test/cases/types/nodelist.js +64 -0
  209. package/test/cases/types/noderecursiveiterator.js +54 -0
  210. package/test/cases/types/proxyobserver.js +55 -11
  211. package/test/cases/types/regex.js +32 -0
  212. package/test/cases/types/uuid.js +42 -0
  213. package/test/cases/util/freeze.js +30 -4
  214. package/test/cases/util/trimspaces.js +24 -0
  215. package/test/util/cleanupdom.js +48 -0
  216. package/test/util/jsdom.js +22 -9
  217. package/test/web/import.js +15 -0
  218. package/test/web/monster-dev.html +3 -3
  219. package/test/web/monster.html +2 -2
  220. package/test/web/test.html +3 -3
  221. package/test/web/tests.js +7 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schukai/monster",
3
- "version": "1.22.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",
@@ -7,16 +7,25 @@ import {Monster} from './namespace.js';
7
7
  */
8
8
 
9
9
  /**
10
- * formerly known as PROPERTY_KEY_OPTIONS
11
- *
10
+ * @private
11
+ * @type {symbol}
12
12
  * @memberOf Monster
13
- * @type {string}
14
- * @since 1.15.0
13
+ * @since 1.24.0
15
14
  */
16
- const PROPERTY_KEY_INTERNALDATA = 'monsterInternalData';
15
+ const internalSymbol = Symbol('internalData');
16
+
17
+ /**
18
+ * @private
19
+ * @type {symbol}
20
+ * @memberOf Monster
21
+ * @since 1.25.0
22
+ */
23
+ const internalStateSymbol = Symbol('state');
17
24
 
18
25
 
19
26
  export {
20
27
  Monster,
21
- PROPERTY_KEY_INTERNALDATA
22
- }
28
+ internalSymbol,
29
+ internalStateSymbol
30
+ }
31
+
@@ -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.22.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.22.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.22.0/dist/modules/constraints/valid.js';
32
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/constraints/invalid.js';
33
- * import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.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.22.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.22.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.22.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.22.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.22.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.22.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.22.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.22.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.22.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.22.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.22.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.22.0/dist/modules/constraints/valid.js';
31
- * import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/constraints/invalid.js';
32
- * import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.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.22.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.22.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.22.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.22.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,18 +29,18 @@ 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.22.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
  * ```
36
- *
36
+ *
37
37
  * The templates determine the appearance of the keys and the value of the map. Either a single value `id` can be taken or a composite key `${id} ${name}` can be used.
38
- *
38
+ *
39
39
  * If you want to access values of the parent data set, you have to use the `^` character `${id} ${^.name}`.
40
40
  *
41
41
  * @example
42
42
  *
43
- * import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.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.22.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}
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+
7
+ import {internalSymbol} from "../../../constants.js";
8
+ import {assignToNamespace, Monster} from '../../../namespace.js';
9
+
10
+ /**
11
+ * Error message for API requests with extension of request and validation.
12
+ *
13
+ * @since 1.24.0
14
+ * @copyright schukai GmbH
15
+ * @memberOf Monster.Data.Datasource.RestAPI
16
+ * @summary the error is thrown by the rest api in case of error
17
+ */
18
+ class WriteError extends Error {
19
+ /**
20
+ *
21
+ * @param {string} message
22
+ * @param {Response} response
23
+ */
24
+ constructor(message, response, validation) {
25
+ super(message);
26
+ this[internalSymbol] = {
27
+ response: response,
28
+ validation: validation
29
+ };
30
+ }
31
+
32
+ /**
33
+ * @return {Response}
34
+ */
35
+ getResponse() {
36
+ return this[internalSymbol]['response']
37
+ }
38
+
39
+ /**
40
+ * @return {Object}
41
+ */
42
+ getValidation() {
43
+ return this[internalSymbol]['validation']
44
+ }
45
+ }
46
+
47
+
48
+ assignToNamespace('Monster.Data.Datasource.RestAPI', WriteError);
49
+ export {Monster, WriteError}