@schukai/monster 1.27.0 → 1.29.1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG +32 -1
- package/README.md +4 -4
- package/dist/modules/constants.js +1 -1
- package/dist/modules/constraints/abstract.js +1 -1
- package/dist/modules/constraints/abstractoperator.js +1 -1
- package/dist/modules/constraints/andoperator.js +1 -1
- package/dist/modules/constraints/invalid.js +1 -1
- package/dist/modules/constraints/isarray.js +1 -1
- package/dist/modules/constraints/isobject.js +1 -1
- package/dist/modules/constraints/namespace.js +1 -1
- package/dist/modules/constraints/oroperator.js +1 -1
- package/dist/modules/constraints/valid.js +1 -1
- package/dist/modules/data/buildmap.js +2 -2
- package/dist/modules/data/buildtree.js +2 -2
- package/dist/modules/data/datasource/namespace.js +1 -1
- package/dist/modules/data/datasource/restapi/writeerror.js +1 -1
- package/dist/modules/data/datasource/restapi.js +1 -1
- package/dist/modules/data/datasource/storage/localstorage.js +1 -1
- package/dist/modules/data/datasource/storage/namespace.js +1 -1
- package/dist/modules/data/datasource/storage/sessionstorage.js +1 -1
- package/dist/modules/data/datasource/storage.js +1 -1
- package/dist/modules/data/datasource.js +1 -1
- package/dist/modules/data/diff.js +1 -1
- package/dist/modules/data/extend.js +1 -1
- package/dist/modules/data/namespace.js +1 -1
- package/dist/modules/data/pathfinder.js +1 -1
- package/dist/modules/data/pipe.js +1 -1
- package/dist/modules/data/transformer.js +1 -1
- package/dist/modules/dom/assembler.js +1 -1
- package/dist/modules/dom/attributes.js +1 -1
- package/dist/modules/dom/constants.js +2 -2
- package/dist/modules/dom/customcontrol.js +1 -1
- package/dist/modules/dom/customelement.js +2 -2
- package/dist/modules/dom/events.js +2 -2
- package/dist/modules/dom/focusmanager.js +1 -1
- package/dist/modules/dom/locale.js +1 -1
- package/dist/modules/dom/namespace.js +1 -1
- package/dist/modules/dom/resource/data.js +1 -1
- package/dist/modules/dom/resource/link/stylesheet.js +1 -1
- package/dist/modules/dom/resource/link.js +1 -1
- package/dist/modules/dom/resource/script.js +1 -1
- package/dist/modules/dom/resource.js +1 -1
- package/dist/modules/dom/resourcemanager.js +1 -1
- package/dist/modules/dom/template.js +1 -1
- package/dist/modules/dom/theme.js +1 -1
- package/dist/modules/dom/updater.js +2 -2
- package/dist/modules/dom/util.js +1 -1
- package/dist/modules/dom/worker/factory.js +1 -1
- package/dist/modules/i18n/formatter.js +1 -1
- package/dist/modules/i18n/locale.js +1 -1
- package/dist/modules/i18n/namespace.js +1 -1
- package/dist/modules/i18n/provider.js +1 -1
- package/dist/modules/i18n/providers/fetch.js +1 -1
- package/dist/modules/i18n/providers/namespace.js +1 -1
- package/dist/modules/i18n/translations.js +1 -1
- package/dist/modules/logging/handler/console.js +1 -1
- package/dist/modules/logging/handler/namespace.js +1 -1
- package/dist/modules/logging/handler.js +1 -1
- package/dist/modules/logging/logentry.js +1 -1
- package/dist/modules/logging/logger.js +1 -1
- package/dist/modules/logging/namespace.js +1 -1
- package/dist/modules/math/namespace.js +1 -1
- package/dist/modules/math/random.js +1 -1
- package/dist/modules/monster.js +1 -1
- package/dist/modules/namespace.js +1 -1
- package/dist/modules/text/formatter.js +1 -1
- package/dist/modules/text/namespace.js +1 -1
- package/dist/modules/types/base.js +1 -1
- package/dist/modules/types/basewithoptions.js +1 -1
- package/dist/modules/types/binary.js +1 -1
- package/dist/modules/types/dataurl.js +1 -1
- package/dist/modules/types/global.js +1 -1
- package/dist/modules/types/id.js +1 -1
- package/dist/modules/types/is.js +1 -1
- package/dist/modules/types/mediatype.js +1 -1
- package/dist/modules/types/namespace.js +1 -1
- package/dist/modules/types/node.js +2 -2
- package/dist/modules/types/nodelist.js +2 -2
- package/dist/modules/types/noderecursiveiterator.js +2 -2
- package/dist/modules/types/observer.js +1 -1
- package/dist/modules/types/observerlist.js +1 -1
- package/dist/modules/types/proxyobserver.js +1 -1
- package/dist/modules/types/queue.js +1 -1
- package/dist/modules/types/randomid.js +1 -1
- package/dist/modules/types/regex.js +1 -1
- package/dist/modules/types/stack.js +1 -1
- package/dist/modules/types/tokenlist.js +1 -1
- package/dist/modules/types/typeof.js +1 -1
- package/dist/modules/types/uniquequeue.js +1 -1
- package/dist/modules/types/uuid.js +1 -1
- package/dist/modules/types/validate.js +1 -1
- package/dist/modules/types/version.js +2 -2
- package/dist/modules/util/clone.js +1 -1
- package/dist/modules/util/comparator.js +1 -1
- package/dist/modules/util/deadmansswitch.js +2 -0
- package/dist/modules/util/freeze.js +1 -1
- package/dist/modules/util/namespace.js +1 -1
- package/dist/modules/util/processing.js +1 -1
- package/dist/modules/util/trimspaces.js +1 -1
- package/dist/monster.dev.js +498 -322
- package/dist/monster.dev.js.map +1 -1
- package/dist/monster.js +2 -2
- package/package.json +1 -1
- package/source/constraints/andoperator.js +5 -5
- package/source/constraints/invalid.js +3 -3
- package/source/constraints/isarray.js +3 -3
- package/source/constraints/isobject.js +3 -3
- package/source/constraints/oroperator.js +5 -5
- package/source/constraints/valid.js +3 -3
- package/source/data/buildmap.js +10 -11
- package/source/data/buildtree.js +51 -17
- package/source/data/datasource/restapi.js +3 -3
- package/source/data/datasource/storage/localstorage.js +2 -2
- package/source/data/datasource/storage/sessionstorage.js +2 -2
- package/source/data/datasource/storage.js +3 -3
- package/source/data/datasource.js +3 -3
- package/source/data/diff.js +3 -3
- package/source/data/extend.js +2 -2
- package/source/data/pathfinder.js +4 -4
- package/source/data/pipe.js +3 -3
- package/source/data/transformer.js +3 -3
- package/source/dom/assembler.js +2 -2
- package/source/dom/attributes.js +26 -26
- package/source/dom/constants.js +9 -1
- package/source/dom/customcontrol.js +1 -1
- package/source/dom/customelement.js +27 -13
- package/source/dom/events.js +66 -9
- package/source/dom/focusmanager.js +2 -2
- package/source/dom/locale.js +2 -2
- package/source/dom/resource/data.js +2 -2
- package/source/dom/resource/link/stylesheet.js +2 -2
- package/source/dom/resource/link.js +2 -2
- package/source/dom/resource/script.js +2 -2
- package/source/dom/resource.js +2 -2
- package/source/dom/resourcemanager.js +2 -2
- package/source/dom/template.js +5 -5
- package/source/dom/theme.js +3 -3
- package/source/dom/updater.js +67 -24
- package/source/dom/util.js +6 -6
- package/source/dom/worker/factory.js +2 -2
- package/source/i18n/formatter.js +4 -4
- package/source/i18n/locale.js +4 -4
- package/source/i18n/provider.js +2 -2
- package/source/i18n/providers/fetch.js +3 -3
- package/source/i18n/translations.js +4 -4
- package/source/logging/handler/console.js +2 -2
- package/source/logging/handler.js +2 -2
- package/source/logging/logentry.js +2 -2
- package/source/logging/logger.js +2 -2
- package/source/math/random.js +2 -2
- package/source/namespace.js +1 -1
- package/source/text/formatter.js +3 -3
- package/source/types/base.js +2 -2
- package/source/types/basewithoptions.js +32 -6
- package/source/types/binary.js +4 -4
- package/source/types/dataurl.js +4 -4
- package/source/types/global.js +4 -4
- package/source/types/id.js +2 -2
- package/source/types/is.js +20 -20
- package/source/types/mediatype.js +4 -4
- package/source/types/node.js +33 -2
- package/source/types/nodelist.js +9 -5
- package/source/types/noderecursiveiterator.js +29 -7
- package/source/types/observer.js +5 -13
- package/source/types/observerlist.js +2 -2
- package/source/types/proxyobserver.js +5 -5
- package/source/types/queue.js +3 -3
- package/source/types/randomid.js +2 -2
- package/source/types/regex.js +2 -2
- package/source/types/stack.js +2 -2
- package/source/types/tokenlist.js +2 -2
- package/source/types/typeof.js +3 -3
- package/source/types/uniquequeue.js +2 -2
- package/source/types/uuid.js +2 -2
- package/source/types/validate.js +20 -20
- package/source/types/version.js +6 -6
- package/source/util/clone.js +2 -2
- package/source/util/comparator.js +3 -3
- package/source/util/deadmansswitch.js +124 -0
- package/source/util/freeze.js +2 -2
- package/source/util/processing.js +3 -3
- package/source/util/trimspaces.js +2 -2
- package/test/cases/data/buildtree.js +84 -21
- package/test/cases/dom/events.js +66 -1
- package/test/cases/dom/updater.js +76 -3
- package/test/cases/math/random.js +3 -0
- package/test/cases/monster.js +1 -1
- package/test/cases/types/node.js +57 -1
- package/test/cases/types/nodelist.js +7 -0
- package/test/cases/types/noderecursiveiterator.js +21 -0
- package/test/cases/util/deadmansswitch.js +71 -0
- package/test/web/import.js +1 -0
- package/test/web/monster-dev.html +3 -3
- package/test/web/monster.html +2 -2
- package/test/web/test.html +3 -3
- package/test/web/tests.js +2 -2
package/package.json
CHANGED
@@ -16,7 +16,7 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
16
16
|
*
|
17
17
|
* ```
|
18
18
|
* <script type="module">
|
19
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
20
20
|
* new Monster.Constraint.AndOperator();
|
21
21
|
* </script>
|
22
22
|
* ```
|
@@ -25,16 +25,16 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
25
25
|
*
|
26
26
|
* ```
|
27
27
|
* <script type="module">
|
28
|
-
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
28
|
+
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/andoperator.js';
|
29
29
|
* new AndOperator();
|
30
30
|
* </script>
|
31
31
|
* ```
|
32
32
|
*
|
33
33
|
* @example
|
34
34
|
*
|
35
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
36
|
-
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
37
|
-
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
35
|
+
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/valid.js';
|
36
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/invalid.js';
|
37
|
+
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/andoperator.js';
|
38
38
|
*
|
39
39
|
* new AndOperator(
|
40
40
|
* new Valid(), new Valid()).isValid()
|
@@ -17,7 +17,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
17
17
|
*
|
18
18
|
* ```
|
19
19
|
* <script type="module">
|
20
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
21
21
|
* new Monster.Constraint.Invalid();
|
22
22
|
* </script>
|
23
23
|
* ```
|
@@ -26,14 +26,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
26
26
|
*
|
27
27
|
* ```
|
28
28
|
* <script type="module">
|
29
|
-
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
29
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/invalid.js';
|
30
30
|
* new Invalid();
|
31
31
|
* </script>
|
32
32
|
* ```
|
33
33
|
*
|
34
34
|
* @example
|
35
35
|
*
|
36
|
-
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
36
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/invalid.js';
|
37
37
|
*
|
38
38
|
* new Invalid().isValid()
|
39
39
|
* .then(()=>console.log(true))
|
@@ -16,7 +16,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
16
16
|
*
|
17
17
|
* ```
|
18
18
|
* <script type="module">
|
19
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
20
20
|
* new Monster.Constraint.IsArray()
|
21
21
|
* </script>
|
22
22
|
* ```
|
@@ -25,14 +25,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
25
25
|
*
|
26
26
|
* ```
|
27
27
|
* <script type="module">
|
28
|
-
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
28
|
+
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/isarray.js';
|
29
29
|
* console.log(new IsArray())
|
30
30
|
* </script>
|
31
31
|
* ```
|
32
32
|
*
|
33
33
|
* @example
|
34
34
|
*
|
35
|
-
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
35
|
+
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/isarray.js';
|
36
36
|
*
|
37
37
|
* new IsArray()
|
38
38
|
* .isValid([])
|
@@ -16,7 +16,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
16
16
|
*
|
17
17
|
* ```
|
18
18
|
* <script type="module">
|
19
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
20
20
|
* console.log(new Monster.Constraint.IsObject())
|
21
21
|
* </script>
|
22
22
|
* ```
|
@@ -25,14 +25,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
25
25
|
*
|
26
26
|
* ```
|
27
27
|
* <script type="module">
|
28
|
-
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
28
|
+
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/isobject.js';
|
29
29
|
* console.log(new IsObject())
|
30
30
|
* </script>
|
31
31
|
* ```
|
32
32
|
*
|
33
33
|
* @example
|
34
34
|
*
|
35
|
-
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
35
|
+
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/isobject.js';
|
36
36
|
*
|
37
37
|
* new IsObject()
|
38
38
|
* .isValid({})
|
@@ -15,7 +15,7 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
15
15
|
*
|
16
16
|
* ```
|
17
17
|
* <script type="module">
|
18
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
18
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
19
19
|
* new Monster.Constraint.OrOperator();
|
20
20
|
* </script>
|
21
21
|
* ```
|
@@ -24,16 +24,16 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
24
24
|
*
|
25
25
|
* ```
|
26
26
|
* <script type="module">
|
27
|
-
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
27
|
+
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraint/oroperator.js';
|
28
28
|
* new OrOperator();
|
29
29
|
* </script>
|
30
30
|
* ```
|
31
31
|
*
|
32
32
|
* @example
|
33
33
|
*
|
34
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
35
|
-
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
36
|
-
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
34
|
+
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/valid.js';
|
35
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/invalid.js';
|
36
|
+
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/oroperator.js';
|
37
37
|
*
|
38
38
|
* new OrOperator(
|
39
39
|
* new Valid(), new Invalid()).isValid()
|
@@ -17,7 +17,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
17
17
|
*
|
18
18
|
* ```
|
19
19
|
* <script type="module">
|
20
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
21
21
|
* new Monster.Constraint.Valid();
|
22
22
|
* </script>
|
23
23
|
* ```
|
@@ -26,14 +26,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
26
26
|
*
|
27
27
|
* ```
|
28
28
|
* <script type="module">
|
29
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
29
|
+
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/valid.js';
|
30
30
|
* new Valid();
|
31
31
|
* </script>
|
32
32
|
* ```
|
33
33
|
*
|
34
34
|
* @example
|
35
35
|
*
|
36
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
36
|
+
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/constraints/valid.js';
|
37
37
|
*
|
38
38
|
* new Valid().isValid()
|
39
39
|
* .then(()=>console.log(true))
|
package/source/data/buildmap.js
CHANGED
@@ -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.
|
23
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
32
|
+
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
43
|
+
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/buildmap.js';
|
44
44
|
* // a typical data structure as reported by an api
|
45
45
|
*
|
46
46
|
* let map;
|
@@ -133,7 +133,8 @@ function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
|
|
133
133
|
* @param {string|Monster.Data~exampleSelectorCallback} selector
|
134
134
|
* @param {Monster.Data~exampleFilterCallback} [filter]
|
135
135
|
* @param {function} callback
|
136
|
-
* @return {
|
136
|
+
* @return {Map}
|
137
|
+
* @throws {TypeError} selector is neither a string nor a function
|
137
138
|
*/
|
138
139
|
function assembleParts(subject, selector, filter, callback) {
|
139
140
|
|
@@ -149,14 +150,13 @@ function assembleParts(subject, selector, filter, callback) {
|
|
149
150
|
map = new Map;
|
150
151
|
buildFlatMap.call(map, subject, selector);
|
151
152
|
} else {
|
152
|
-
throw new TypeError('
|
153
|
+
throw new TypeError('selector is neither a string nor a function')
|
153
154
|
}
|
154
155
|
|
155
156
|
if (!(map instanceof Map)) {
|
156
157
|
return result;
|
157
158
|
}
|
158
159
|
|
159
|
-
|
160
160
|
map.forEach((v, k, m) => {
|
161
161
|
if (isFunction(filter)) {
|
162
162
|
if (filter.call(m, v, k) !== true) return;
|
@@ -164,7 +164,6 @@ function assembleParts(subject, selector, filter, callback) {
|
|
164
164
|
|
165
165
|
callback.call(result, v, k, m);
|
166
166
|
|
167
|
-
|
168
167
|
});
|
169
168
|
|
170
169
|
return result;
|
@@ -197,7 +196,8 @@ function buildFlatMap(subject, selector, key, parentMap) {
|
|
197
196
|
if (current === WILDCARD) {
|
198
197
|
|
199
198
|
let finder = new Pathfinder(subject);
|
200
|
-
let map
|
199
|
+
let map;
|
200
|
+
|
201
201
|
try {
|
202
202
|
map = finder.getVia(currentPath.join(DELIMITER));
|
203
203
|
} catch (e) {
|
@@ -205,7 +205,6 @@ function buildFlatMap(subject, selector, key, parentMap) {
|
|
205
205
|
map = new Map();
|
206
206
|
}
|
207
207
|
|
208
|
-
|
209
208
|
for (const [k, o] of map) {
|
210
209
|
|
211
210
|
let copyKey = clone(key);
|
@@ -217,7 +216,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
|
|
217
216
|
let kk = copyKey.join(DELIMITER);
|
218
217
|
let sub = buildFlatMap.call(result, o, parts.join(DELIMITER), copyKey, o);
|
219
218
|
|
220
|
-
if (isObject(sub)) {
|
219
|
+
if (isObject(sub) && parentMap !== undefined) {
|
221
220
|
sub['^'] = parentMap;
|
222
221
|
}
|
223
222
|
|
@@ -255,7 +254,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
|
|
255
254
|
* Alternatively to a string selector a callback can be specified. this must return a map.
|
256
255
|
*
|
257
256
|
* @example
|
258
|
-
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
257
|
+
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/buildmap.js';
|
259
258
|
*
|
260
259
|
* let obj = {
|
261
260
|
* "data": [
|
package/source/data/buildtree.js
CHANGED
@@ -5,9 +5,11 @@
|
|
5
5
|
*/
|
6
6
|
|
7
7
|
import {assignToNamespace, Monster} from '../namespace.js';
|
8
|
+
import {isArray, isObject} from "../types/is.js";
|
8
9
|
import {Node} from "../types/node.js";
|
9
10
|
import {NodeList} from "../types/nodelist.js";
|
10
11
|
import {assembleParts} from "./buildmap.js";
|
12
|
+
import {extend} from "./extend.js";
|
11
13
|
|
12
14
|
|
13
15
|
/**
|
@@ -22,6 +24,13 @@ const parentSymbol = Symbol('parent');
|
|
22
24
|
*/
|
23
25
|
const rootSymbol = Symbol('root');
|
24
26
|
|
27
|
+
/**
|
28
|
+
* @typedef {Object} buildTreeOptions
|
29
|
+
* @property {array} options.rootReferences=[null, undefined] defines the values for elements without parents
|
30
|
+
* @property {Monster.Data~exampleFilterCallback} options.filter filtering of the values
|
31
|
+
* @memberOf Monster.Data
|
32
|
+
*/
|
33
|
+
|
25
34
|
/**
|
26
35
|
* With the help of the function `buildTree()`, nodes can be easily created from data objects.
|
27
36
|
*
|
@@ -29,8 +38,8 @@ const rootSymbol = Symbol('root');
|
|
29
38
|
*
|
30
39
|
* ```
|
31
40
|
* <script type="module">
|
32
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
33
|
-
*
|
41
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/buildtree.js';
|
42
|
+
* Monster.Data.buildTree()
|
34
43
|
* </script>
|
35
44
|
* ```
|
36
45
|
*
|
@@ -38,38 +47,54 @@ const rootSymbol = Symbol('root');
|
|
38
47
|
*
|
39
48
|
* ```
|
40
49
|
* <script type="module">
|
41
|
-
* import {buildTree} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
42
|
-
*
|
50
|
+
* import {buildTree} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/buildtree.js';
|
51
|
+
* buildTree()
|
43
52
|
* </script>
|
44
53
|
* ```
|
45
54
|
*
|
46
55
|
* @param {*} subject
|
47
56
|
* @param {string|Monster.Data~exampleSelectorCallback} selector
|
48
|
-
* @param {string}
|
49
|
-
* @param {string}
|
50
|
-
* @param {
|
57
|
+
* @param {string} idKey
|
58
|
+
* @param {string} parentIDKey
|
59
|
+
* @param {buildTreeOptions} [options]
|
51
60
|
* @return {*}
|
52
61
|
* @memberOf Monster.Data
|
53
62
|
* @throws {TypeError} value is neither a string nor a function
|
54
63
|
* @throws {TypeError} the selector callback must return a map
|
55
64
|
* @throws {Error} the object has no value for the specified id
|
65
|
+
* @since 1.26.0
|
56
66
|
*/
|
57
|
-
function buildTree(subject, selector,
|
67
|
+
function buildTree(subject, selector, idKey, parentIDKey, options) {
|
58
68
|
|
59
69
|
const nodes = new Map;
|
60
70
|
|
71
|
+
if (!isObject(options)) {
|
72
|
+
options = {}
|
73
|
+
}
|
74
|
+
|
75
|
+
options = extend({}, {
|
76
|
+
rootReferences: [null, undefined],
|
77
|
+
filter: undefined
|
78
|
+
}, options)
|
79
|
+
|
80
|
+
const filter = options?.filter;
|
81
|
+
let rootReferences = options.rootReferences;
|
82
|
+
if (!isArray(rootReferences)) {
|
83
|
+
rootReferences = [rootReferences];
|
84
|
+
}
|
85
|
+
|
61
86
|
const childMap = assembleParts(subject, selector, filter, function (o, k, m) {
|
62
87
|
|
63
|
-
const key = o?.[
|
64
|
-
let ref = o?.[
|
65
|
-
if (ref
|
88
|
+
const key = o?.[idKey]
|
89
|
+
let ref = o?.[parentIDKey]
|
90
|
+
if (rootReferences.indexOf(ref) !== -1) ref = rootSymbol;
|
66
91
|
|
67
92
|
if (key === undefined) {
|
68
93
|
throw new Error('the object has no value for the specified id')
|
69
94
|
}
|
70
95
|
|
71
96
|
o[parentSymbol] = ref;
|
72
|
-
|
97
|
+
|
73
98
|
const node = new Node(o);
|
74
99
|
this.has(ref) ? this.get(ref).add(node) : this.set(ref, new NodeList().add(node));
|
75
100
|
nodes.set(key, node);
|
@@ -77,17 +102,26 @@ function buildTree(subject, selector, id, parentID, filter) {
|
|
77
102
|
})
|
78
103
|
|
79
104
|
nodes.forEach(node => {
|
105
|
+
|
106
|
+
let id = node?.['value']?.[idKey];
|
80
107
|
|
81
|
-
if (childMap.has(
|
82
|
-
node.childNodes = childMap.get(
|
108
|
+
if (childMap.has(id)) {
|
109
|
+
node.childNodes = childMap.get(id);
|
110
|
+
childMap.delete(id)
|
83
111
|
}
|
84
112
|
})
|
85
113
|
|
86
|
-
const
|
87
|
-
|
88
|
-
return new NodeList(childMap.get(rootSymbol));
|
114
|
+
const list = new NodeList;
|
89
115
|
|
116
|
+
childMap.forEach((s) => {
|
117
|
+
if (s instanceof Set) {
|
118
|
+
s.forEach((n) => {
|
119
|
+
list.add(n);
|
120
|
+
})
|
121
|
+
}
|
122
|
+
})
|
90
123
|
|
124
|
+
return list;
|
91
125
|
}
|
92
126
|
|
93
127
|
|
@@ -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.
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
29
|
+
* import {RestAPI} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
36
|
+
* import {RestAPI} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
21
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
30
|
+
* import {LocalStorage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
18
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
27
|
+
* import {SessionStorage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
23
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
32
|
+
* import {Storage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
39
|
+
* import {Storage} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
34
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
43
|
+
* import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
50
|
+
* import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/datasource.js'
|
51
51
|
*
|
52
52
|
* class MyDatasource extends Datasource {
|
53
53
|
*
|
package/source/data/diff.js
CHANGED
@@ -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.
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
29
|
+
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/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.
|
36
|
+
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/diff.js';
|
37
37
|
*
|
38
38
|
* // given are two objects x and y.
|
39
39
|
*
|
package/source/data/extend.js
CHANGED
@@ -15,7 +15,7 @@ import {typeOf} from "../types/typeof.js";
|
|
15
15
|
*
|
16
16
|
* ```
|
17
17
|
* <script type="module">
|
18
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
18
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
19
19
|
* Monster.Data.extend(a, b)
|
20
20
|
* </script>
|
21
21
|
* ```
|
@@ -24,7 +24,7 @@ import {typeOf} from "../types/typeof.js";
|
|
24
24
|
*
|
25
25
|
* ```
|
26
26
|
* <script type="module">
|
27
|
-
* import {extend} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
27
|
+
* import {extend} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/extend.js';
|
28
28
|
* extend(a, b)
|
29
29
|
* </script>
|
30
30
|
* ```
|
@@ -27,7 +27,7 @@ export const WILDCARD = '*';
|
|
27
27
|
*
|
28
28
|
* ```
|
29
29
|
* <script type="module">
|
30
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
30
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
31
31
|
* console.log(new Monster.Data.Pathfinder())
|
32
32
|
* </script>
|
33
33
|
* ```
|
@@ -36,7 +36,7 @@ export const WILDCARD = '*';
|
|
36
36
|
*
|
37
37
|
* ```
|
38
38
|
* <script type="module">
|
39
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
39
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/pathfinder.js';
|
40
40
|
* console.log(new Pathfinder())
|
41
41
|
* </script>
|
42
42
|
* ```
|
@@ -78,7 +78,7 @@ export const WILDCARD = '*';
|
|
78
78
|
*
|
79
79
|
* @example
|
80
80
|
*
|
81
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
81
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/pathfinder.js';
|
82
82
|
*
|
83
83
|
* let value = new Pathfinder({
|
84
84
|
* a: {
|
@@ -104,7 +104,7 @@ export const WILDCARD = '*';
|
|
104
104
|
*
|
105
105
|
* @example
|
106
106
|
*
|
107
|
-
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
107
|
+
* import {Pathfinder} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/pathfinder.js';
|
108
108
|
*
|
109
109
|
* let p = new Pathfinder({
|
110
110
|
* a: {
|
package/source/data/pipe.js
CHANGED
@@ -19,7 +19,7 @@ const DELIMITER = '|';
|
|
19
19
|
*
|
20
20
|
* ```
|
21
21
|
* <script type="module">
|
22
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
22
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/monster.js';
|
23
23
|
* new Monster.Data.Pipe()
|
24
24
|
* </script>
|
25
25
|
* ```
|
@@ -28,7 +28,7 @@ const DELIMITER = '|';
|
|
28
28
|
*
|
29
29
|
* ```
|
30
30
|
* <script type="module">
|
31
|
-
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
31
|
+
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/pipe.js';
|
32
32
|
* new Pipe()
|
33
33
|
* </script>
|
34
34
|
* ```
|
@@ -39,7 +39,7 @@ const DELIMITER = '|';
|
|
39
39
|
* the word is then converted to uppercase letters and a prefix Hello is added. the two backslash safe the space char.
|
40
40
|
*
|
41
41
|
* @example
|
42
|
-
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
42
|
+
* import {Pipe} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.29.1/dist/modules/data/pipe.js';
|
43
43
|
*
|
44
44
|
* let obj = {
|
45
45
|
* a: {
|