@schukai/monster 1.22.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 (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
@@ -0,0 +1,125 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+ import {assignToNamespace, Monster} from '../namespace.js';
7
+ import {isArray, isInstance} from "./is.js";
8
+ import {Node} from "./node.js";
9
+ import {validateInstance} from "./validate.js";
10
+
11
+ /**
12
+ * You can create the instance via the monster namespace `new Monster.Types.NodeList()`.
13
+ *
14
+ * ```
15
+ * <script type="module">
16
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
17
+ * new Monster.Types.NodeList()
18
+ * </script>
19
+ * ```
20
+ *
21
+ * Alternatively, you can also integrate this function individually.
22
+ *
23
+ * ```
24
+ * <script type="module">
25
+ * import {NodeList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/nodelist.js';
26
+ * new NodeList()
27
+ * </script>
28
+ * ```
29
+ *
30
+ * @since 1.26.0
31
+ * @copyright schukai GmbH
32
+ * @memberOf Monster.Types
33
+ * @summary A NodeList class
34
+ */
35
+ class NodeList extends Set {
36
+
37
+ /**
38
+ * @throws {Error} invalid value type
39
+ * @param {NodeList|Node|Array<Node>}values
40
+ */
41
+ constructor(values) {
42
+ super();
43
+
44
+ const self = this
45
+
46
+ if(values===undefined) return;
47
+
48
+ if (isArray(values)) {
49
+ values.forEach(value => self.add(value));
50
+ } else if (isInstance(values, NodeList)) {
51
+ values.forEach(value => self.add(value));
52
+ } else if (isInstance(values, Node)) {
53
+ self.add(values);
54
+ } else {
55
+ throw new Error('invalid value type');
56
+ }
57
+
58
+
59
+ }
60
+
61
+ /**
62
+ *
63
+ * @param {Node} node
64
+ * @return {Monster.Types.NodeList}
65
+ */
66
+ add(node) {
67
+ super.add(validateInstance(node, Node));
68
+ return this;
69
+ }
70
+
71
+ /**
72
+ * @param {Node} node
73
+ * @returns {NodeList}
74
+ */
75
+ remove(node) {
76
+ super.delete(validateInstance(node, Node));
77
+ return this;
78
+ }
79
+
80
+ /**
81
+ * @param {Node} node
82
+ * @returns {boolean}
83
+ */
84
+ has(node) {
85
+ return super.has(validateInstance(node, Node));
86
+ return false;
87
+ }
88
+
89
+ /**
90
+ * @returns {NodeList}
91
+ */
92
+ clear() {
93
+ super.clear();
94
+ return this;
95
+ }
96
+
97
+ /**
98
+ * @returns {NodeList}
99
+ */
100
+ toArray() {
101
+ return Array.from(this);
102
+ }
103
+
104
+ /**
105
+ * @returns {NodeList}
106
+ */
107
+ toJSON() {
108
+ return this.toArray();
109
+ }
110
+
111
+ /**
112
+ * @returns {NodeList}
113
+ */
114
+ toString() {
115
+ return this.toArray().toString();
116
+ }
117
+
118
+ get length() {
119
+ return super.size;
120
+ }
121
+ }
122
+
123
+
124
+ assignToNamespace('Monster.Types', NodeList);
125
+ export {Monster, NodeList}
@@ -0,0 +1,126 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+
7
+
8
+ import {internalSymbol} from "../constants.js";
9
+ import {assignToNamespace, Monster} from '../namespace.js';
10
+ import {Base} from './base.js';
11
+ import {validateInstance} from "./validate.js";
12
+ import {Node} from "./node.js";
13
+
14
+
15
+ /**
16
+ * You can create the instance via the monster namespace `new Monster.Types.NodeRecursiveIterator()`.
17
+ *
18
+ * ```
19
+ * <script type="module">
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
21
+ * new Monster.Types.NodeRecursiveIterator()
22
+ * </script>
23
+ * ```
24
+ *
25
+ * Alternatively, you can also integrate this function individually.
26
+ *
27
+ * ```
28
+ * <script type="module">
29
+ * import {NodeRecursiveIterator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/noderecursiveiterator.js';
30
+ * new NodeRecursiveIterator()
31
+ * </script>
32
+ * ```
33
+ *
34
+ * @example
35
+ * import {Node} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/node.js';
36
+ * import {NodeRecursiveIterator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/noderecursiveiterator.js';
37
+ *
38
+ * const node =new Node('1')
39
+ *
40
+ * // 1
41
+ * // 2
42
+ * // ├ 2.1
43
+ * // ├ 2.2
44
+ * // └ 2.3
45
+ * // 3
46
+ * // 4
47
+ * // ├ 4.1
48
+ * // └ 4.2
49
+ * node.appendChild(
50
+ * (new Node('2'))
51
+ * .appendChild(new Node('2.1'))
52
+ * .appendChild(new Node('2.2'))
53
+ * .appendChild(new Node('2.3')))
54
+ * .appendChild(new Node('3'))
55
+ * .appendChild(new Node('4')
56
+ * .appendChild(new Node('4.1'))
57
+ * .appendChild(new Node('4.2')));
58
+ *
59
+ * const iterator = new NodeRecursiveIterator(node);
60
+ *
61
+ * const result = [];
62
+ * for (const n of iterator) {
63
+ * result.push(n.value);
64
+ * }
65
+ *
66
+ * // ↦ ['1', '2', '2.1', '2.2', '2.3', '3', '4', '4.1', '4.2']
67
+ *
68
+ * @since 1.26.0
69
+ * @copyright schukai GmbH
70
+ * @memberOf Monster.Types
71
+ * @summary An iterator to run recursively through a tree of nodes
72
+ */
73
+ class NodeRecursiveIterator extends Base {
74
+
75
+ /**
76
+ * @param {Node} [data]
77
+ */
78
+ constructor(node) {
79
+ super();
80
+ this[internalSymbol] = validateInstance(node, Node);
81
+ }
82
+
83
+ /**
84
+ * @private
85
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield
86
+ */
87
+ [Symbol.iterator] = function* () {
88
+
89
+ /**
90
+ * The end of the generator function is reached. In this case, execution of the generator
91
+ * ends and an IteratorResult is returned to the caller in which the value is undefined and done is true.
92
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield
93
+ */
94
+ if (this[internalSymbol] === undefined) {
95
+ return;
96
+ }
97
+
98
+ yield this[internalSymbol];
99
+
100
+ if (this[internalSymbol].hasChildNodes()) {
101
+ let childNodes = this[internalSymbol].childNodes;
102
+
103
+ for (let node of childNodes) {
104
+ yield* new NodeRecursiveIterator(node);
105
+ }
106
+ }
107
+
108
+ return;
109
+ }
110
+
111
+ /**
112
+ * @param {function} callback
113
+ * @return {Monster.Types.NodeRecursiveIterator}
114
+ */
115
+ forEach(callback) {
116
+ for (const node of this) {
117
+ callback(node);
118
+ }
119
+ return this;
120
+ }
121
+
122
+ }
123
+
124
+
125
+ assignToNamespace('Monster.Types', NodeRecursiveIterator);
126
+ export {Monster, NodeRecursiveIterator}
@@ -17,7 +17,7 @@ import {UniqueQueue} from './uniquequeue.js';
17
17
  *
18
18
  * ```
19
19
  * <script type="module">
20
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/observer.js';
20
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
21
21
  * console.log(new Monster.Types.Observer())
22
22
  * </script>
23
23
  * ```
@@ -26,7 +26,7 @@ import {UniqueQueue} from './uniquequeue.js';
26
26
  *
27
27
  * ```
28
28
  * <script type="module">
29
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/observer.js';
29
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/observer.js';
30
30
  * console.log(new Observer())
31
31
  * </script>
32
32
  * ```
@@ -60,7 +60,7 @@ import {UniqueQueue} from './uniquequeue.js';
60
60
  *
61
61
  * @example
62
62
  *
63
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/observer.js';
63
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/observer.js';
64
64
  *
65
65
  * const observer = new Observer(function(a, b, c) {
66
66
  * console.log(this, a, b, c); // ↦ "a", 2, true
@@ -16,7 +16,7 @@ import {validateInstance} from "./validate.js";
16
16
  *
17
17
  * ```
18
18
  * <script type="module">
19
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/observerlist.js';
19
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
20
20
  * console.log(new Monster.Types.ObserverList())
21
21
  * console.log(new Monster.Types.ObserverList())
22
22
  * </script>
@@ -26,7 +26,7 @@ import {validateInstance} from "./validate.js";
26
26
  *
27
27
  * ```
28
28
  * <script type="module">
29
- * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/observerlist.js';
29
+ * import {ObserverList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/observerlist.js';
30
30
  * console.log(ObserverList())
31
31
  * console.log(ObserverList())
32
32
  * </script>
@@ -104,7 +104,7 @@ class ObserverList extends Base {
104
104
 
105
105
  let pomises = []
106
106
 
107
- var i = 0, l = this.observers.length;
107
+ let i = 0, l = this.observers.length;
108
108
  for (; i < l; i++) {
109
109
  pomises.push(this.observers[i].update(subject));
110
110
  }
@@ -9,6 +9,7 @@ import {isArray, isObject, isPrimitive} from "./is.js";
9
9
  import {Observer} from "./observer.js";
10
10
  import {ObserverList} from "./observerlist.js";
11
11
  import {validateObject} from "./validate.js";
12
+ import {extend} from "../data/extend.js";
12
13
 
13
14
  /**
14
15
  * An observer manages a callback function
@@ -17,8 +18,8 @@ import {validateObject} from "./validate.js";
17
18
  *
18
19
  * ```
19
20
  * <script type="module">
20
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/proxyobserver.js';
21
- * console.log(new Monster.Types.ProxyObserver())
21
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
22
+ * new Monster.Types.ProxyObserver()
22
23
  * </script>
23
24
  * ```
24
25
  *
@@ -26,8 +27,8 @@ import {validateObject} from "./validate.js";
26
27
  *
27
28
  * ```
28
29
  * <script type="module">
29
- * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/proxyobserver.js';
30
- * console.log(new ProxyObserver())
30
+ * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/proxyobserver.js';
31
+ * new ProxyObserver()
31
32
  * </script>
32
33
  * ```
33
34
  *
@@ -37,9 +38,9 @@ import {validateObject} from "./validate.js";
37
38
  *
38
39
  * @example
39
40
  *
40
- * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/proxyobserver.js';
41
- * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/observer.js';
42
- * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/is.js';
41
+ * import {ProxyObserver} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/proxyobserver.js';
42
+ * import {Observer} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/observer.js';
43
+ * import {isObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/is.js';
43
44
  *
44
45
  * const o = new Observer(function () {
45
46
  * if (isObject(this) && this instanceof ProxyObserver) {
@@ -100,6 +101,22 @@ class ProxyObserver extends Base {
100
101
  return this.subject
101
102
  }
102
103
 
104
+ /**
105
+ * @since 1.24.0
106
+ * @param {Object} obj
107
+ * @return {Monster.Types.ProxyObserver}
108
+ */
109
+ setSubject(obj) {
110
+
111
+ let i, k = Object.keys(this.subject);
112
+ for (i = 0; i < k.length; i++) {
113
+ delete this.subject[k[i]];
114
+ }
115
+
116
+ this.subject = extend(this.subject, obj);
117
+ return this;
118
+ }
119
+
103
120
  /**
104
121
  * get the proxied object
105
122
  *
@@ -7,12 +7,12 @@ import {assignToNamespace, Monster} from '../namespace.js';
7
7
  import {Base} from './base.js';
8
8
 
9
9
  /**
10
- * You can call the method via the monster namespace `new Monster.Types.Queue()`.
10
+ * You can create the instance via the monster namespace `new Monster.Types.Queue()`.
11
11
  *
12
12
  * ```
13
13
  * <script type="module">
14
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/queue.js';
15
- * console.log(new Monster.Types.Queue())
14
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
15
+ * new Monster.Types.Queue()
16
16
  * </script>
17
17
  * ```
18
18
  *
@@ -20,14 +20,14 @@ import {Base} from './base.js';
20
20
  *
21
21
  * ```
22
22
  * <script type="module">
23
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/queue.js';
24
- * console.log(new Queue())
23
+ * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/queue.js';
24
+ * new Queue()
25
25
  * </script>
26
26
  * ```
27
27
  *
28
28
  * @example
29
29
  *
30
- * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/queue.js';
30
+ * import {Queue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/queue.js';
31
31
  *
32
32
  * const queue = new Queue;
33
33
  *
@@ -19,7 +19,7 @@ let internalCounter = 0;
19
19
  *
20
20
  * ```
21
21
  * <script type="module">
22
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/randomid.js';
22
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
23
23
  * console.log(new Monster.Types.RandomID())
24
24
  * </script>
25
25
  * ```
@@ -28,7 +28,7 @@ let internalCounter = 0;
28
28
  *
29
29
  * ```
30
30
  * <script type="module">
31
- * import {RandomID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/randomid.js';
31
+ * import {RandomID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/randomid.js';
32
32
  * console.log(new RandomID())
33
33
  * </script>
34
34
  * ```
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @author schukai GmbH
5
+ */
6
+
7
+
8
+ import {assignToNamespace, Monster} from "../namespace.js";
9
+ import {validateString} from "./validate.js";
10
+
11
+ /**
12
+ * This function prefixes all special characters that may appear in a regex with a slash.
13
+ *
14
+ * You can call the method via the monster namespace `Monster.Types.escapeString()`.
15
+ *
16
+ * ```
17
+ * <script type="module">
18
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
19
+ * Monster.Types.escapeString()
20
+ * </script>
21
+ * ```
22
+ *
23
+ * Alternatively, you can also integrate this function individually.
24
+ *
25
+ * ```
26
+ * <script type="module">
27
+ * import {escapeString} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/validate.js';
28
+ * escapeString()
29
+ * </script>
30
+ * ```
31
+ *
32
+ * @param {string} value
33
+ * @return {string}
34
+ * @since 1.26.0
35
+ * @copyright schukai GmbH
36
+ * @memberOf Monster.Types
37
+ * @throws {TypeError} value is not a string
38
+ */
39
+ function escapeString(value) {
40
+ return validateString(value)
41
+ .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
42
+ .replace(/-/g, '\\x2d');
43
+ }
44
+
45
+ assignToNamespace('Monster.Types', escapeString);
46
+ export {
47
+ Monster,
48
+ escapeString
49
+ }
@@ -12,7 +12,7 @@ import {Base} from './base.js';
12
12
  *
13
13
  * ```
14
14
  * <script type="module">
15
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/stack.js';
15
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
16
16
  * console.log(new Monster.Types.Stack())
17
17
  * </script>
18
18
  * ```
@@ -21,7 +21,7 @@ import {Base} from './base.js';
21
21
  *
22
22
  * ```
23
23
  * <script type="module">
24
- * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/stack.js';
24
+ * import {ID} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/stack.js';
25
25
  * console.log(new Stack())
26
26
  * </script>
27
27
  * ```
@@ -18,9 +18,8 @@ import {Base} from './base.js';
18
18
  *
19
19
  * ```
20
20
  * <script type="module">
21
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/tokenlist.js';
22
- * console.log(new Monster.Types.TokenList("myclass row"))
23
- * console.log(new Monster.Types.TokenList("myclass row"))
21
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
22
+ * new Monster.Types.TokenList("myclass row")
24
23
  * </script>
25
24
  * ```
26
25
  *
@@ -28,16 +27,16 @@ import {Base} from './base.js';
28
27
  *
29
28
  * ```
30
29
  * <script type="module">
31
- * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/tokenlist.js';
32
- * console.log(new TokenList("myclass row"))
33
- * console.log(new TokenList("myclass row"))
30
+ * import {TokenList} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/tokenlist.js';
31
+ * new TokenList("myclass row")
34
32
  * </script>
35
33
  * ```
36
34
  *
37
35
  * This class implements the [iteration protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols).
38
36
  *
39
37
  * ```
40
- * console.log(typeof new TokenList("myclass row")[Symbol.iterator]); // "function"
38
+ * typeof new TokenList("myclass row")[Symbol.iterator];
39
+ * // ↦ "function"
41
40
  * ```
42
41
  *
43
42
  * @since 1.2.0
@@ -194,7 +193,7 @@ class TokenList extends Base {
194
193
  this.tokens.delete(token.trim());
195
194
  }
196
195
  } else if (typeof value !== "undefined") {
197
- throw new TypeError("unsupported value");
196
+ throw new TypeError("unsupported value", "types/tokenlist.js");
198
197
  }
199
198
 
200
199
  return this;
@@ -254,7 +253,7 @@ class TokenList extends Base {
254
253
  toggleValue.call(this, token);
255
254
  }
256
255
  } else if (typeof value !== "undefined") {
257
- throw new TypeError("unsupported value");
256
+ throw new TypeError("unsupported value", "types/tokenlist.js");
258
257
  }
259
258
 
260
259
  return this;
@@ -14,7 +14,7 @@ import {assignToNamespace, Monster} from '../namespace.js';
14
14
  *
15
15
  * ```
16
16
  * <script type="module">
17
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/typeof.js';
17
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
18
18
  * console.log(Monster.Types.typeOf())
19
19
  * </script>
20
20
  * ```
@@ -23,14 +23,14 @@ import {assignToNamespace, Monster} from '../namespace.js';
23
23
  *
24
24
  * ```
25
25
  * <script type="module">
26
- * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/typeof.js';
26
+ * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/typeof.js';
27
27
  * console.log(typeOf())
28
28
  * </script>
29
29
  * ```
30
30
  *
31
31
  * @example
32
32
  *
33
- * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/typeof.js';
33
+ * import {typeOf} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/typeof.js';
34
34
  *
35
35
  * console.log(typeOf(undefined)); // ↦ undefined
36
36
  * console.log(typeOf("")); // ↦ string
@@ -13,8 +13,8 @@ import {validateObject} from "./validate.js";
13
13
  *
14
14
  * ```
15
15
  * <script type="module">
16
- * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/uniquequeue.js';
17
- * console.log(new Monster.Types.UniqueQueue())
16
+ * import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
17
+ * new Monster.Types.UniqueQueue()
18
18
  * </script>
19
19
  * ```
20
20
  *
@@ -22,8 +22,8 @@ import {validateObject} from "./validate.js";
22
22
  *
23
23
  * ```
24
24
  * <script type="module">
25
- * import {UniqueQueue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.22.0/dist/modules/types/uniquequeue.js';
26
- * console.log(new UniqueQueue())
25
+ * import {UniqueQueue} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/types/uniquequeue.js';
26
+ * new UniqueQueue()
27
27
  * </script>
28
28
  * ```
29
29
  *