@schukai/monster 1.25.0 → 1.28.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 +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
|
*
|