@schukai/monster 1.25.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 +15 -0
- package/README.md +3 -3
- 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 +1 -1
- package/dist/modules/dom/constants.js +1 -1
- 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 +1 -1
- package/dist/modules/dom/theme.js +1 -1
- package/dist/modules/dom/updater.js +2 -2
- package/dist/modules/dom/util.js +1 -1
- package/dist/modules/dom/worker/factory.js +1 -1
- package/dist/modules/i18n/formatter.js +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 +620 -361
- 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 +25 -9
- package/source/data/buildtree.js +95 -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 +24 -24
- package/source/dom/customcontrol.js +1 -1
- package/source/dom/customelement.js +1 -1
- package/source/dom/events.js +4 -4
- 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 +5 -5
- package/source/dom/theme.js +3 -3
- package/source/dom/updater.js +5 -5
- 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 +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 +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 +149 -0
- package/test/cases/dom/attributes.js +18 -14
- package/test/cases/dom/resource/link/stylesheet.js +1 -1
- 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 +196 -0
- package/test/cases/types/nodelist.js +64 -0
- package/test/cases/types/noderecursiveiterator.js +54 -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 +2 -2
- 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.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",
|
|
@@ -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,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.26.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.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}
|
|
@@ -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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.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.26.0/dist/modules/data/datasource/storage.js';
|
|
40
40
|
*
|
|
41
41
|
* new Datasource();
|
|
42
42
|
*
|
|
@@ -31,7 +31,7 @@ const internalDataSymbol = Symbol('internalData');
|
|
|
31
31
|
*
|
|
32
32
|
* ```
|
|
33
33
|
* <script type="module">
|
|
34
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
34
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
35
35
|
* Monster.Data.Datasource()
|
|
36
36
|
* </script>
|
|
37
37
|
* ```
|
|
@@ -40,14 +40,14 @@ const internalDataSymbol = Symbol('internalData');
|
|
|
40
40
|
*
|
|
41
41
|
* ```
|
|
42
42
|
* <script type="module">
|
|
43
|
-
* import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
43
|
+
* import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/datasource.js';
|
|
44
44
|
* new Datasource()
|
|
45
45
|
* </script>
|
|
46
46
|
* ```
|
|
47
47
|
*
|
|
48
48
|
* @example
|
|
49
49
|
*
|
|
50
|
-
* import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
50
|
+
* import {Datasource} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/datasource.js'
|
|
51
51
|
*
|
|
52
52
|
* class MyDatasource extends Datasource {
|
|
53
53
|
*
|
package/source/data/diff.js
CHANGED
|
@@ -17,7 +17,7 @@ import {typeOf} from "../types/typeof.js";
|
|
|
17
17
|
*
|
|
18
18
|
* ```
|
|
19
19
|
* <script type="module">
|
|
20
|
-
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
20
|
+
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/monster.js';
|
|
21
21
|
* Monster.Data.Diff(a, b)
|
|
22
22
|
* </script>
|
|
23
23
|
* ```
|
|
@@ -26,14 +26,14 @@ import {typeOf} from "../types/typeof.js";
|
|
|
26
26
|
*
|
|
27
27
|
* ```
|
|
28
28
|
* <script type="module">
|
|
29
|
-
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
29
|
+
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/diff.js';
|
|
30
30
|
* Diff(a, b)
|
|
31
31
|
* </script>
|
|
32
32
|
* ```
|
|
33
33
|
*
|
|
34
34
|
* @example
|
|
35
35
|
*
|
|
36
|
-
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.
|
|
36
|
+
* import {Diff} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.26.0/dist/modules/data/diff.js';
|
|
37
37
|
*
|
|
38
38
|
* // given are two objects x and y.
|
|
39
39
|
*
|