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