@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.
- package/CHANGELOG +56 -0
- package/README.md +4 -4
- package/dist/modules/constants.js +2 -2
- 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 +2 -0
- package/dist/modules/data/datasource/restapi.js +2 -2
- package/dist/modules/data/datasource/storage/localstorage.js +2 -2
- package/dist/modules/data/datasource/storage/namespace.js +1 -1
- package/dist/modules/data/datasource/storage/sessionstorage.js +2 -2
- package/dist/modules/data/datasource/storage.js +2 -2
- package/dist/modules/data/datasource.js +2 -2
- package/dist/modules/data/diff.js +2 -2
- package/dist/modules/data/extend.js +1 -1
- package/dist/modules/data/namespace.js +1 -1
- package/dist/modules/data/pathfinder.js +2 -2
- package/dist/modules/data/pipe.js +1 -1
- package/dist/modules/data/transformer.js +2 -2
- 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 +2 -2
- package/dist/modules/dom/customelement.js +2 -2
- package/dist/modules/dom/events.js +1 -1
- package/dist/modules/dom/focusmanager.js +2 -0
- package/dist/modules/dom/locale.js +1 -1
- package/dist/modules/dom/namespace.js +1 -1
- package/dist/modules/dom/resource/data.js +2 -0
- package/dist/modules/dom/resource/link/stylesheet.js +2 -0
- package/dist/modules/dom/resource/link.js +2 -0
- package/dist/modules/dom/resource/script.js +2 -0
- package/dist/modules/dom/resource.js +2 -0
- package/dist/modules/dom/resourcemanager.js +2 -0
- 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 +2 -0
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/modules/types/proxyobserver.js +2 -2
- 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 +2 -2
- package/dist/modules/types/typeof.js +1 -1
- package/dist/modules/types/uniquequeue.js +1 -1
- package/dist/modules/types/uuid.js +2 -0
- package/dist/modules/types/validate.js +1 -1
- package/dist/modules/types/version.js +2 -2
- package/dist/modules/util/clone.js +2 -2
- package/dist/modules/util/comparator.js +2 -2
- package/dist/modules/util/freeze.js +1 -1
- package/dist/modules/util/namespace.js +1 -1
- package/dist/modules/util/processing.js +2 -2
- package/dist/modules/util/trimspaces.js +2 -0
- package/dist/monster.dev.js +1838 -792
- package/dist/monster.dev.js.map +1 -1
- package/dist/monster.js +2 -2
- package/package.json +13 -2
- package/source/constants.js +16 -7
- 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 -11
- package/source/data/buildtree.js +95 -0
- package/source/data/datasource/restapi/writeerror.js +49 -0
- package/source/data/datasource/restapi.js +95 -11
- package/source/data/datasource/storage/localstorage.js +15 -8
- package/source/data/datasource/storage/sessionstorage.js +16 -12
- package/source/data/datasource/storage.js +16 -7
- package/source/data/datasource.js +60 -16
- package/source/data/diff.js +8 -8
- package/source/data/extend.js +5 -5
- package/source/data/pathfinder.js +12 -6
- package/source/data/pipe.js +6 -5
- package/source/data/transformer.js +131 -24
- package/source/dom/assembler.js +2 -2
- package/source/dom/attributes.js +24 -24
- package/source/dom/constants.js +305 -12
- package/source/dom/customcontrol.js +40 -19
- package/source/dom/customelement.js +182 -102
- package/source/dom/events.js +6 -6
- package/source/dom/focusmanager.js +250 -0
- package/source/dom/locale.js +10 -5
- package/source/dom/resource/data.js +170 -0
- package/source/dom/resource/link/stylesheet.js +54 -0
- package/source/dom/resource/link.js +125 -0
- package/source/dom/resource/script.js +112 -0
- package/source/dom/resource.js +268 -0
- package/source/dom/resourcemanager.js +214 -0
- package/source/dom/template.js +40 -10
- package/source/dom/theme.js +3 -3
- package/source/dom/updater.js +115 -39
- package/source/dom/util.js +6 -6
- package/source/dom/worker/factory.js +134 -0
- package/source/i18n/formatter.js +140 -0
- package/source/i18n/locale.js +10 -8
- package/source/i18n/provider.js +4 -4
- package/source/i18n/providers/fetch.js +24 -14
- package/source/i18n/translations.js +20 -10
- 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 +4 -4
- package/source/math/random.js +11 -5
- package/source/namespace.js +1 -1
- package/source/text/formatter.js +244 -27
- package/source/types/base.js +4 -4
- package/source/types/basewithoptions.js +10 -15
- package/source/types/binary.js +8 -8
- package/source/types/dataurl.js +6 -6
- package/source/types/global.js +9 -7
- package/source/types/id.js +6 -3
- package/source/types/is.js +103 -85
- package/source/types/mediatype.js +4 -4
- package/source/types/node.js +179 -0
- package/source/types/nodelist.js +125 -0
- package/source/types/noderecursiveiterator.js +126 -0
- package/source/types/observer.js +3 -3
- package/source/types/observerlist.js +3 -3
- package/source/types/proxyobserver.js +24 -7
- package/source/types/queue.js +6 -6
- 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 +8 -9
- package/source/types/typeof.js +3 -3
- package/source/types/uniquequeue.js +4 -4
- package/source/types/uuid.js +102 -0
- package/source/types/validate.js +20 -20
- package/source/types/version.js +6 -6
- package/source/util/clone.js +5 -6
- package/source/util/comparator.js +5 -5
- package/source/util/freeze.js +5 -5
- package/source/util/processing.js +33 -36
- package/source/util/trimspaces.js +85 -0
- package/test/cases/data/buildtree.js +149 -0
- package/test/cases/data/datasource/restapi.js +1 -1
- package/test/cases/data/datasource.js +4 -4
- package/test/cases/data/diff.js +4 -4
- package/test/cases/data/pathfinder.js +18 -9
- package/test/cases/data/pipe.js +26 -2
- package/test/cases/data/transformer.js +41 -10
- package/test/cases/dom/attributes.js +18 -14
- package/test/cases/dom/customcontrol.js +6 -5
- package/test/cases/dom/customelement.js +25 -26
- package/test/cases/dom/focusmanager.js +111 -0
- package/test/cases/dom/locale.js +1 -4
- package/test/cases/dom/resource/data.js +129 -0
- package/test/cases/dom/resource/link/stylesheet.js +101 -0
- package/test/cases/dom/resource/link.js +101 -0
- package/test/cases/dom/resource/script.js +115 -0
- package/test/cases/dom/resourcemanager.js +118 -0
- package/test/cases/dom/updater.js +42 -19
- package/test/cases/dom/worker/factory.js +63 -0
- package/test/cases/i18n/formatter.js +66 -0
- package/test/cases/monster.js +1 -1
- package/test/cases/text/formatter.js +71 -8
- package/test/cases/types/node.js +196 -0
- package/test/cases/types/nodelist.js +64 -0
- package/test/cases/types/noderecursiveiterator.js +54 -0
- package/test/cases/types/proxyobserver.js +55 -11
- package/test/cases/types/regex.js +32 -0
- package/test/cases/types/uuid.js +42 -0
- package/test/cases/util/freeze.js +30 -4
- package/test/cases/util/trimspaces.js +24 -0
- package/test/util/cleanupdom.js +48 -0
- package/test/util/jsdom.js +22 -9
- package/test/web/import.js +15 -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 +7 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schukai/monster",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.26.0",
|
|
4
4
|
"types": "./source/types/package.d.ts",
|
|
5
5
|
"description": "Monster is a simple library for creating fast, robust and lightweight websites.",
|
|
6
6
|
"keywords": [
|
|
@@ -17,7 +17,18 @@
|
|
|
17
17
|
"core",
|
|
18
18
|
"shopcloud",
|
|
19
19
|
"alvine",
|
|
20
|
-
"monster"
|
|
20
|
+
"monster",
|
|
21
|
+
"buildmap",
|
|
22
|
+
"stack",
|
|
23
|
+
"observer",
|
|
24
|
+
"observable",
|
|
25
|
+
"uuid",
|
|
26
|
+
"node",
|
|
27
|
+
"nodelist",
|
|
28
|
+
"css-in-js",
|
|
29
|
+
"logger",
|
|
30
|
+
"log",
|
|
31
|
+
"theme"
|
|
21
32
|
],
|
|
22
33
|
"type": "module",
|
|
23
34
|
"homepage": "https://monsterjs.org",
|
package/source/constants.js
CHANGED
|
@@ -7,16 +7,25 @@ import {Monster} from './namespace.js';
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* @private
|
|
11
|
+
* @type {symbol}
|
|
12
12
|
* @memberOf Monster
|
|
13
|
-
* @
|
|
14
|
-
* @since 1.15.0
|
|
13
|
+
* @since 1.24.0
|
|
15
14
|
*/
|
|
16
|
-
const
|
|
15
|
+
const internalSymbol = Symbol('internalData');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @private
|
|
19
|
+
* @type {symbol}
|
|
20
|
+
* @memberOf Monster
|
|
21
|
+
* @since 1.25.0
|
|
22
|
+
*/
|
|
23
|
+
const internalStateSymbol = Symbol('state');
|
|
17
24
|
|
|
18
25
|
|
|
19
26
|
export {
|
|
20
27
|
Monster,
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
internalSymbol,
|
|
29
|
+
internalStateSymbol
|
|
30
|
+
}
|
|
31
|
+
|
|
@@ -9,6 +9,10 @@ import {Base} from '../types/base.js';
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
13
|
+
*
|
|
14
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
15
|
+
*
|
|
12
16
|
* The abstract constraint defines the api for all constraints. mainly the method isValid() is defined.
|
|
13
17
|
*
|
|
14
18
|
* derived classes must implement the method isValid().
|
|
@@ -16,6 +20,7 @@ import {Base} from '../types/base.js';
|
|
|
16
20
|
* @since 1.3.0
|
|
17
21
|
* @copyright schukai GmbH
|
|
18
22
|
* @memberOf Monster.Constraints
|
|
23
|
+
* @summary The abstract constraint
|
|
19
24
|
*/
|
|
20
25
|
class AbstractConstraint extends Base {
|
|
21
26
|
|
|
@@ -7,11 +7,16 @@ import {assignToNamespace, Monster} from '../namespace.js';
|
|
|
7
7
|
import {AbstractConstraint} from "./abstract.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
11
|
+
*
|
|
12
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
13
|
+
*
|
|
10
14
|
* Operators allow you to link constraints together. for example, you can check whether a value is an object or an array. each operator has two operands that are linked together.
|
|
11
15
|
*
|
|
12
16
|
* @since 1.3.0
|
|
13
17
|
* @copyright schukai GmbH
|
|
14
18
|
* @memberOf Monster.Constraints
|
|
19
|
+
* @summary The abstract operator constraint
|
|
15
20
|
*/
|
|
16
21
|
class AbstractOperator extends AbstractConstraint {
|
|
17
22
|
|
|
@@ -8,11 +8,15 @@ import {assignToNamespace, Monster} from '../namespace.js';
|
|
|
8
8
|
import {AbstractOperator} from "./abstractoperator.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
12
|
+
*
|
|
13
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
14
|
+
*
|
|
11
15
|
* The AndOperator is used to link several contraints. The constraint is fulfilled if all constraints of the operators are fulfilled.
|
|
12
16
|
*
|
|
13
17
|
* ```
|
|
14
18
|
* <script type="module">
|
|
15
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
16
20
|
* new Monster.Constraint.AndOperator();
|
|
17
21
|
* </script>
|
|
18
22
|
* ```
|
|
@@ -21,16 +25,16 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
|
21
25
|
*
|
|
22
26
|
* ```
|
|
23
27
|
* <script type="module">
|
|
24
|
-
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
28
|
+
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/andoperator.js';
|
|
25
29
|
* new AndOperator();
|
|
26
30
|
* </script>
|
|
27
31
|
* ```
|
|
28
32
|
*
|
|
29
33
|
* @example
|
|
30
34
|
*
|
|
31
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
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.26.0/dist/modules/constraints/valid.js';
|
|
36
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/invalid.js';
|
|
37
|
+
* import {AndOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/andoperator.js';
|
|
34
38
|
*
|
|
35
39
|
* new AndOperator(
|
|
36
40
|
* new Valid(), new Valid()).isValid()
|
|
@@ -47,6 +51,7 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
|
47
51
|
* @since 1.3.0
|
|
48
52
|
* @copyright schukai GmbH
|
|
49
53
|
* @memberOf Monster.Constraints
|
|
54
|
+
* @summary A and operator constraint
|
|
50
55
|
*/
|
|
51
56
|
class AndOperator extends AbstractOperator {
|
|
52
57
|
|
|
@@ -7,13 +7,17 @@ import {assignToNamespace, Monster} from '../namespace.js';
|
|
|
7
7
|
import {AbstractConstraint} from "./abstract.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
11
|
+
*
|
|
12
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
13
|
+
*
|
|
10
14
|
* The invalid constraint allows an always invalid query to be performed. this constraint is mainly intended for testing.
|
|
11
15
|
*
|
|
12
16
|
* You can call the method via the monster namespace `new Monster.Constraint.Invalid()`.
|
|
13
17
|
*
|
|
14
18
|
* ```
|
|
15
19
|
* <script type="module">
|
|
16
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
17
21
|
* new Monster.Constraint.Invalid();
|
|
18
22
|
* </script>
|
|
19
23
|
* ```
|
|
@@ -22,14 +26,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
22
26
|
*
|
|
23
27
|
* ```
|
|
24
28
|
* <script type="module">
|
|
25
|
-
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
29
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/invalid.js';
|
|
26
30
|
* new Invalid();
|
|
27
31
|
* </script>
|
|
28
32
|
* ```
|
|
29
33
|
*
|
|
30
34
|
* @example
|
|
31
35
|
*
|
|
32
|
-
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
36
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/invalid.js';
|
|
33
37
|
*
|
|
34
38
|
* new Invalid().isValid()
|
|
35
39
|
* .then(()=>console.log(true))
|
|
@@ -39,6 +43,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
39
43
|
* @since 1.3.0
|
|
40
44
|
* @copyright schukai GmbH
|
|
41
45
|
* @memberOf Monster.Constraints
|
|
46
|
+
* @summary A constraint that always invalid
|
|
42
47
|
*/
|
|
43
48
|
class Invalid extends AbstractConstraint {
|
|
44
49
|
|
|
@@ -8,12 +8,16 @@ import {isArray} from "../types/is.js";
|
|
|
8
8
|
import {AbstractConstraint} from "./abstract.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
12
|
+
*
|
|
13
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
14
|
+
*
|
|
11
15
|
* You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.
|
|
12
16
|
*
|
|
13
17
|
* ```
|
|
14
18
|
* <script type="module">
|
|
15
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
16
|
-
*
|
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
20
|
+
* new Monster.Constraint.IsArray()
|
|
17
21
|
* </script>
|
|
18
22
|
* ```
|
|
19
23
|
*
|
|
@@ -21,14 +25,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
21
25
|
*
|
|
22
26
|
* ```
|
|
23
27
|
* <script type="module">
|
|
24
|
-
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
28
|
+
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/isarray.js';
|
|
25
29
|
* console.log(new IsArray())
|
|
26
30
|
* </script>
|
|
27
31
|
* ```
|
|
28
32
|
*
|
|
29
33
|
* @example
|
|
30
34
|
*
|
|
31
|
-
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
35
|
+
* import {IsArray} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/isarray.js';
|
|
32
36
|
*
|
|
33
37
|
* new IsArray()
|
|
34
38
|
* .isValid([])
|
|
@@ -43,6 +47,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
43
47
|
* @since 1.3.0
|
|
44
48
|
* @copyright schukai GmbH
|
|
45
49
|
* @memberOf Monster.Constraints
|
|
50
|
+
* @summary A constraint to check if a value is an array
|
|
46
51
|
*/
|
|
47
52
|
class IsArray extends AbstractConstraint {
|
|
48
53
|
|
|
@@ -8,11 +8,15 @@ import {isObject} from "../types/is.js";
|
|
|
8
8
|
import {AbstractConstraint} from "./abstract.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
12
|
+
*
|
|
13
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
14
|
+
*
|
|
11
15
|
* You can call the method via the monster namespace `new Monster.Constraint.IsObject()`.
|
|
12
16
|
*
|
|
13
17
|
* ```
|
|
14
18
|
* <script type="module">
|
|
15
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
19
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
16
20
|
* console.log(new Monster.Constraint.IsObject())
|
|
17
21
|
* </script>
|
|
18
22
|
* ```
|
|
@@ -21,14 +25,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
21
25
|
*
|
|
22
26
|
* ```
|
|
23
27
|
* <script type="module">
|
|
24
|
-
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
28
|
+
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/isobject.js';
|
|
25
29
|
* console.log(new IsObject())
|
|
26
30
|
* </script>
|
|
27
31
|
* ```
|
|
28
32
|
*
|
|
29
33
|
* @example
|
|
30
34
|
*
|
|
31
|
-
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
35
|
+
* import {IsObject} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/isobject.js';
|
|
32
36
|
*
|
|
33
37
|
* new IsObject()
|
|
34
38
|
* .isValid({})
|
|
@@ -44,6 +48,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
44
48
|
* @since 1.3.0
|
|
45
49
|
* @copyright schukai GmbH
|
|
46
50
|
* @memberOf Monster.Constraints
|
|
51
|
+
* @summary A constraint to check if a value is an object
|
|
47
52
|
*/
|
|
48
53
|
class IsObject extends AbstractConstraint {
|
|
49
54
|
|
|
@@ -7,11 +7,15 @@ import {assignToNamespace, Monster} from '../namespace.js';
|
|
|
7
7
|
import {AbstractOperator} from "./abstractoperator.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
11
|
+
*
|
|
12
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
13
|
+
*
|
|
10
14
|
* The OrOperator is used to link several constraints. The constraint is fulfilled if one of the constraints is fulfilled.
|
|
11
15
|
*
|
|
12
16
|
* ```
|
|
13
17
|
* <script type="module">
|
|
14
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
18
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
15
19
|
* new Monster.Constraint.OrOperator();
|
|
16
20
|
* </script>
|
|
17
21
|
* ```
|
|
@@ -20,16 +24,16 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
|
20
24
|
*
|
|
21
25
|
* ```
|
|
22
26
|
* <script type="module">
|
|
23
|
-
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
27
|
+
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraint/oroperator.js';
|
|
24
28
|
* new OrOperator();
|
|
25
29
|
* </script>
|
|
26
30
|
* ```
|
|
27
31
|
*
|
|
28
32
|
* @example
|
|
29
33
|
*
|
|
30
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
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.26.0/dist/modules/constraints/valid.js';
|
|
35
|
+
* import {Invalid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/invalid.js';
|
|
36
|
+
* import {OrOperator} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/oroperator.js';
|
|
33
37
|
*
|
|
34
38
|
* new OrOperator(
|
|
35
39
|
* new Valid(), new Invalid()).isValid()
|
|
@@ -46,6 +50,7 @@ import {AbstractOperator} from "./abstractoperator.js";
|
|
|
46
50
|
* @since 1.3.0
|
|
47
51
|
* @copyright schukai GmbH
|
|
48
52
|
* @memberOf Monster.Constraints
|
|
53
|
+
* @summary A or operator
|
|
49
54
|
*/
|
|
50
55
|
class OrOperator extends AbstractOperator {
|
|
51
56
|
|
|
@@ -7,13 +7,17 @@ import {assignToNamespace, Monster} from '../namespace.js';
|
|
|
7
7
|
import {AbstractConstraint} from "./abstract.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
+
* Constraints are used to define conditions that must be met by the value of a variable.
|
|
11
|
+
*
|
|
12
|
+
* The uniform API of the constraints allows chains to be formed.
|
|
13
|
+
*
|
|
10
14
|
* The valid constraint allows an always valid query to be performed. this constraint is mainly intended for testing.
|
|
11
15
|
*
|
|
12
16
|
* You can call the method via the monster namespace `new Monster.Constraint.Valid()`.
|
|
13
17
|
*
|
|
14
18
|
* ```
|
|
15
19
|
* <script type="module">
|
|
16
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
17
21
|
* new Monster.Constraint.Valid();
|
|
18
22
|
* </script>
|
|
19
23
|
* ```
|
|
@@ -22,14 +26,14 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
22
26
|
*
|
|
23
27
|
* ```
|
|
24
28
|
* <script type="module">
|
|
25
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
29
|
+
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/valid.js';
|
|
26
30
|
* new Valid();
|
|
27
31
|
* </script>
|
|
28
32
|
* ```
|
|
29
33
|
*
|
|
30
34
|
* @example
|
|
31
35
|
*
|
|
32
|
-
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
36
|
+
* import {Valid} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/constraints/valid.js';
|
|
33
37
|
*
|
|
34
38
|
* new Valid().isValid()
|
|
35
39
|
* .then(()=>console.log(true))
|
|
@@ -39,6 +43,7 @@ import {AbstractConstraint} from "./abstract.js";
|
|
|
39
43
|
* @since 1.3.0
|
|
40
44
|
* @copyright schukai GmbH
|
|
41
45
|
* @memberOf Monster.Constraints
|
|
46
|
+
* @summary A constraint that always valid
|
|
42
47
|
*/
|
|
43
48
|
class Valid extends AbstractConstraint {
|
|
44
49
|
|
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.26.0/dist/monster.js';
|
|
24
24
|
* console.log(Monster.Data.buildMap())
|
|
25
25
|
* </script>
|
|
26
26
|
* ```
|
|
@@ -29,18 +29,18 @@ import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.js";
|
|
|
29
29
|
*
|
|
30
30
|
* ```
|
|
31
31
|
* <script type="module">
|
|
32
|
-
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
32
|
+
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/buildmap.js';
|
|
33
33
|
* console.log(buildMap())
|
|
34
34
|
* </script>
|
|
35
35
|
* ```
|
|
36
|
-
*
|
|
36
|
+
*
|
|
37
37
|
* The templates determine the appearance of the keys and the value of the map. Either a single value `id` can be taken or a composite key `${id} ${name}` can be used.
|
|
38
|
-
*
|
|
38
|
+
*
|
|
39
39
|
* If you want to access values of the parent data set, you have to use the `^` character `${id} ${^.name}`.
|
|
40
40
|
*
|
|
41
41
|
* @example
|
|
42
42
|
*
|
|
43
|
-
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
43
|
+
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/buildmap.js';
|
|
44
44
|
* // a typical data structure as reported by an api
|
|
45
45
|
*
|
|
46
46
|
* let map;
|
|
@@ -119,8 +119,25 @@ import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.js";
|
|
|
119
119
|
* @throws {TypeError} the selector callback must return a map
|
|
120
120
|
*/
|
|
121
121
|
function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
|
|
122
|
+
return assembleParts(subject, selector, filter, function (v, k, m) {
|
|
123
|
+
k = build(v, keyTemplate, k);
|
|
124
|
+
v = build(v, valueTemplate);
|
|
125
|
+
this.set(k, v);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @private
|
|
132
|
+
* @param {*} subject
|
|
133
|
+
* @param {string|Monster.Data~exampleSelectorCallback} selector
|
|
134
|
+
* @param {Monster.Data~exampleFilterCallback} [filter]
|
|
135
|
+
* @param {function} callback
|
|
136
|
+
* @return {*}
|
|
137
|
+
*/
|
|
138
|
+
function assembleParts(subject, selector, filter, callback) {
|
|
122
139
|
|
|
123
|
-
const result = new Map
|
|
140
|
+
const result = new Map();
|
|
124
141
|
|
|
125
142
|
let map;
|
|
126
143
|
if (isFunction(selector)) {
|
|
@@ -145,10 +162,9 @@ function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
|
|
|
145
162
|
if (filter.call(m, v, k) !== true) return;
|
|
146
163
|
}
|
|
147
164
|
|
|
148
|
-
|
|
149
|
-
|
|
165
|
+
callback.call(result, v, k, m);
|
|
166
|
+
|
|
150
167
|
|
|
151
|
-
result.set(k, v);
|
|
152
168
|
});
|
|
153
169
|
|
|
154
170
|
return result;
|
|
@@ -239,7 +255,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
|
|
|
239
255
|
* Alternatively to a string selector a callback can be specified. this must return a map.
|
|
240
256
|
*
|
|
241
257
|
* @example
|
|
242
|
-
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
258
|
+
* import {buildMap} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/buildmap.js';
|
|
243
259
|
*
|
|
244
260
|
* let obj = {
|
|
245
261
|
* "data": [
|
|
@@ -408,4 +424,4 @@ function build(subject, definition, defaultValue) {
|
|
|
408
424
|
|
|
409
425
|
|
|
410
426
|
assignToNamespace('Monster.Data', buildMap);
|
|
411
|
-
export {Monster, buildMap}
|
|
427
|
+
export {Monster, buildMap, assembleParts}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author schukai GmbH
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {assignToNamespace, Monster} from '../namespace.js';
|
|
8
|
+
import {Node} from "../types/node.js";
|
|
9
|
+
import {NodeList} from "../types/nodelist.js";
|
|
10
|
+
import {assembleParts} from "./buildmap.js";
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @private
|
|
15
|
+
* @type {symbol}
|
|
16
|
+
*/
|
|
17
|
+
const parentSymbol = Symbol('parent');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @private
|
|
21
|
+
* @type {symbol}
|
|
22
|
+
*/
|
|
23
|
+
const rootSymbol = Symbol('root');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* With the help of the function `buildTree()`, nodes can be easily created from data objects.
|
|
27
|
+
*
|
|
28
|
+
* You can call the method via the monster namespace `Monster.Data.buildTree()`.
|
|
29
|
+
*
|
|
30
|
+
* ```
|
|
31
|
+
* <script type="module">
|
|
32
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/buildtree.js';
|
|
33
|
+
* console.log(Monster.Data.buildTree())
|
|
34
|
+
* </script>
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* Alternatively, you can also integrate this function individually.
|
|
38
|
+
*
|
|
39
|
+
* ```
|
|
40
|
+
* <script type="module">
|
|
41
|
+
* import {buildTree} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/buildtree.js';
|
|
42
|
+
* console.log(buildTree())
|
|
43
|
+
* </script>
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @param {*} subject
|
|
47
|
+
* @param {string|Monster.Data~exampleSelectorCallback} selector
|
|
48
|
+
* @param {string} id
|
|
49
|
+
* @param {string} parentID
|
|
50
|
+
* @param {Monster.Data~exampleFilterCallback} [filter]
|
|
51
|
+
* @return {*}
|
|
52
|
+
* @memberOf Monster.Data
|
|
53
|
+
* @throws {TypeError} value is neither a string nor a function
|
|
54
|
+
* @throws {TypeError} the selector callback must return a map
|
|
55
|
+
* @throws {Error} the object has no value for the specified id
|
|
56
|
+
*/
|
|
57
|
+
function buildTree(subject, selector, id, parentID, filter) {
|
|
58
|
+
|
|
59
|
+
const nodes = new Map;
|
|
60
|
+
|
|
61
|
+
const childMap = assembleParts(subject, selector, filter, function (o, k, m) {
|
|
62
|
+
|
|
63
|
+
const key = o?.[id]
|
|
64
|
+
let ref = o?.[parentID]
|
|
65
|
+
if (ref === null|| ref===undefined) ref = rootSymbol;
|
|
66
|
+
|
|
67
|
+
if (key === undefined) {
|
|
68
|
+
throw new Error('the object has no value for the specified id')
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
o[parentSymbol] = ref;
|
|
72
|
+
|
|
73
|
+
const node = new Node(o);
|
|
74
|
+
this.has(ref) ? this.get(ref).add(node) : this.set(ref, new NodeList().add(node));
|
|
75
|
+
nodes.set(key, node);
|
|
76
|
+
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
nodes.forEach(node => {
|
|
80
|
+
|
|
81
|
+
if (childMap.has(node.value.id)) {
|
|
82
|
+
node.childNodes = childMap.get(node.value.id);
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const r = childMap.get(rootSymbol);
|
|
87
|
+
|
|
88
|
+
return new NodeList(childMap.get(rootSymbol));
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
assignToNamespace('Monster.Data', buildTree);
|
|
95
|
+
export {Monster, buildTree}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @author schukai GmbH
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {internalSymbol} from "../../../constants.js";
|
|
8
|
+
import {assignToNamespace, Monster} from '../../../namespace.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Error message for API requests with extension of request and validation.
|
|
12
|
+
*
|
|
13
|
+
* @since 1.24.0
|
|
14
|
+
* @copyright schukai GmbH
|
|
15
|
+
* @memberOf Monster.Data.Datasource.RestAPI
|
|
16
|
+
* @summary the error is thrown by the rest api in case of error
|
|
17
|
+
*/
|
|
18
|
+
class WriteError extends Error {
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @param {string} message
|
|
22
|
+
* @param {Response} response
|
|
23
|
+
*/
|
|
24
|
+
constructor(message, response, validation) {
|
|
25
|
+
super(message);
|
|
26
|
+
this[internalSymbol] = {
|
|
27
|
+
response: response,
|
|
28
|
+
validation: validation
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @return {Response}
|
|
34
|
+
*/
|
|
35
|
+
getResponse() {
|
|
36
|
+
return this[internalSymbol]['response']
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @return {Object}
|
|
41
|
+
*/
|
|
42
|
+
getValidation() {
|
|
43
|
+
return this[internalSymbol]['validation']
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
assignToNamespace('Monster.Data.Datasource.RestAPI', WriteError);
|
|
49
|
+
export {Monster, WriteError}
|