@schukai/monster 3.5.0 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/package.json +1 -1
  2. package/source/constants.mjs +4 -9
  3. package/source/constraints/abstract.mjs +4 -6
  4. package/source/constraints/abstractoperator.mjs +6 -12
  5. package/source/constraints/andoperator.mjs +3 -6
  6. package/source/constraints/invalid.mjs +3 -6
  7. package/source/constraints/isarray.mjs +6 -9
  8. package/source/constraints/isobject.mjs +4 -7
  9. package/source/constraints/namespace.mjs +1 -3
  10. package/source/constraints/oroperator.mjs +26 -25
  11. package/source/constraints/valid.mjs +3 -6
  12. package/source/data/buildmap.mjs +20 -36
  13. package/source/data/buildtree.mjs +29 -29
  14. package/source/data/datasource/namespace.mjs +1 -1
  15. package/source/data/datasource/server/restapi/writeerror.mjs +6 -6
  16. package/source/data/datasource/server/restapi.mjs +51 -65
  17. package/source/data/datasource/server/webconnect.mjs +26 -35
  18. package/source/data/datasource/server.mjs +16 -20
  19. package/source/data/datasource/storage/localstorage.mjs +8 -11
  20. package/source/data/datasource/storage/sessionstorage.mjs +8 -10
  21. package/source/data/datasource/storage.mjs +18 -22
  22. package/source/data/datasource.mjs +27 -43
  23. package/source/data/diff.mjs +20 -32
  24. package/source/data/extend.mjs +20 -14
  25. package/source/data/namespace.mjs +1 -3
  26. package/source/data/pathfinder.mjs +40 -67
  27. package/source/data/pipe.mjs +6 -10
  28. package/source/data/transformer.mjs +141 -157
  29. package/source/dom/assembler.mjs +6 -9
  30. package/source/dom/attributes.mjs +36 -48
  31. package/source/dom/constants.mjs +55 -71
  32. package/source/dom/customcontrol.mjs +16 -21
  33. package/source/dom/customelement.mjs +140 -164
  34. package/source/dom/events.mjs +17 -24
  35. package/source/dom/focusmanager.mjs +30 -48
  36. package/source/dom/locale.mjs +16 -19
  37. package/source/dom/namespace.mjs +1 -1
  38. package/source/dom/ready.mjs +7 -10
  39. package/source/dom/resource/data.mjs +38 -46
  40. package/source/dom/resource/link/namespace.mjs +1 -3
  41. package/source/dom/resource/link/stylesheet.mjs +7 -11
  42. package/source/dom/resource/link.mjs +36 -17
  43. package/source/dom/resource/namespace.mjs +1 -1
  44. package/source/dom/resource/script.mjs +23 -13
  45. package/source/dom/resource.mjs +47 -60
  46. package/source/dom/resourcemanager.mjs +36 -43
  47. package/source/dom/template.mjs +17 -24
  48. package/source/dom/theme.mjs +8 -12
  49. package/source/dom/updater.mjs +150 -196
  50. package/source/dom/util.mjs +11 -12
  51. package/source/dom/worker/factory.mjs +21 -25
  52. package/source/dom/worker/namespace.mjs +1 -1
  53. package/source/i18n/formatter.mjs +20 -24
  54. package/source/i18n/locale.mjs +40 -42
  55. package/source/i18n/namespace.mjs +1 -1
  56. package/source/i18n/provider.mjs +4 -7
  57. package/source/i18n/providers/embed.mjs +16 -26
  58. package/source/i18n/providers/fetch.mjs +30 -36
  59. package/source/i18n/translations.mjs +15 -22
  60. package/source/logging/handler/console.mjs +6 -10
  61. package/source/logging/handler.mjs +15 -18
  62. package/source/logging/logentry.mjs +8 -9
  63. package/source/logging/logger.mjs +73 -55
  64. package/source/logging/namespace.mjs +1 -1
  65. package/source/math/namespace.mjs +1 -1
  66. package/source/math/random.mjs +13 -14
  67. package/source/monster.mjs +132 -100
  68. package/source/net/namespace.mjs +1 -3
  69. package/source/net/webconnect/message.mjs +6 -8
  70. package/source/net/webconnect/namespace.mjs +1 -3
  71. package/source/net/webconnect.mjs +28 -39
  72. package/source/text/formatter.mjs +44 -55
  73. package/source/types/base.mjs +16 -26
  74. package/source/types/basewithoptions.mjs +8 -14
  75. package/source/types/binary.mjs +4 -5
  76. package/source/types/dataurl.mjs +19 -27
  77. package/source/types/global.mjs +14 -26
  78. package/source/types/id.mjs +4 -6
  79. package/source/types/is.mjs +11 -16
  80. package/source/types/mediatype.mjs +29 -44
  81. package/source/types/namespace.mjs +0 -1
  82. package/source/types/node.mjs +16 -22
  83. package/source/types/nodelist.mjs +10 -14
  84. package/source/types/noderecursiveiterator.mjs +11 -14
  85. package/source/types/observablequeue.mjs +13 -16
  86. package/source/types/observer.mjs +16 -23
  87. package/source/types/observerlist.mjs +18 -21
  88. package/source/types/proxyobserver.mjs +24 -37
  89. package/source/types/queue.mjs +8 -13
  90. package/source/types/randomid.mjs +10 -10
  91. package/source/types/regex.mjs +3 -5
  92. package/source/types/stack.mjs +4 -8
  93. package/source/types/tokenlist.mjs +24 -31
  94. package/source/types/typeof.mjs +5 -7
  95. package/source/types/uniquequeue.mjs +8 -13
  96. package/source/types/uuid.mjs +18 -25
  97. package/source/types/validate.mjs +26 -27
  98. package/source/types/version.mjs +17 -25
  99. package/source/util/clone.mjs +23 -32
  100. package/source/util/comparator.mjs +7 -15
  101. package/source/util/deadmansswitch.mjs +16 -23
  102. package/source/util/freeze.mjs +5 -7
  103. package/source/util/namespace.mjs +1 -1
  104. package/source/util/processing.mjs +33 -39
  105. package/source/util/trimspaces.mjs +17 -24
  106. package/test/cases/monster.mjs +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schukai/monster",
3
- "version": "3.5.0",
3
+ "version": "3.7.0",
4
4
  "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
5
5
  "keywords": [
6
6
  "framework",
@@ -8,11 +8,7 @@
8
8
  * @author schukai GmbH
9
9
  */
10
10
 
11
- export {
12
- internalSymbol,
13
- internalStateSymbol,
14
- instanceSymbol
15
- }
11
+ export { internalSymbol, internalStateSymbol, instanceSymbol };
16
12
 
17
13
  /**
18
14
  * @private
@@ -21,7 +17,7 @@ export {
21
17
  * @license AGPLv3
22
18
  * @since 1.24.0
23
19
  */
24
- const internalSymbol = Symbol.for('@schukai/monster/internal');
20
+ const internalSymbol = Symbol.for("@schukai/monster/internal");
25
21
 
26
22
  /**
27
23
  * @private
@@ -30,11 +26,10 @@ const internalSymbol = Symbol.for('@schukai/monster/internal');
30
26
  * @license AGPLv3
31
27
  * @since 1.25.0
32
28
  */
33
- const internalStateSymbol = Symbol.for('@schukai/monster/state');
29
+ const internalStateSymbol = Symbol.for("@schukai/monster/state");
34
30
 
35
31
  /**
36
32
  * @private
37
33
  * @type {symbol}
38
34
  */
39
- const instanceSymbol = Symbol.for('@schukai/monster/instance');
40
-
35
+ const instanceSymbol = Symbol.for("@schukai/monster/instance");
@@ -5,16 +5,16 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {Base} from '../types/base.mjs';
9
- import {instanceSymbol} from '../constants.mjs';
8
+ import { Base } from "../types/base.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
10
 
11
- export {AbstractConstraint}
11
+ export { AbstractConstraint };
12
12
 
13
13
  /**
14
14
  * Constraints are used to define conditions that must be met by the value of a variable.
15
15
  *
16
16
  * The uniform API of the constraints allows chains to be formed.
17
- *
17
+ *
18
18
  * The abstract constraint defines the api for all constraints. mainly the method isValid() is defined.
19
19
  *
20
20
  * Derived classes must implement the method isValid().
@@ -26,7 +26,6 @@ export {AbstractConstraint}
26
26
  * @summary The abstract constraint
27
27
  */
28
28
  class AbstractConstraint extends Base {
29
-
30
29
  /**
31
30
  *
32
31
  */
@@ -52,5 +51,4 @@ class AbstractConstraint extends Base {
52
51
  static get [instanceSymbol]() {
53
52
  return Symbol.for("@schukai/monster/constraints/abstract-constraint");
54
53
  }
55
-
56
54
  }
@@ -5,16 +5,16 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {AbstractConstraint} from "./abstract.mjs";
9
- import {instanceSymbol} from '../constants.mjs';
10
- export {AbstractOperator}
8
+ import { AbstractConstraint } from "./abstract.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
+ export { AbstractOperator };
11
11
 
12
12
  /**
13
13
  * Constraints are used to define conditions that must be met by the value of a variable.
14
14
  *
15
15
  * The uniform API of the constraints allows chains to be formed.
16
16
  *
17
- * Operators allow you to link constraints together. for example, you can check whether a value is
17
+ * Operators allow you to link constraints together. for example, you can check whether a value is
18
18
  * an object or an array. each operator has two operands that are linked together.
19
19
  *
20
20
  * @license AGPLv3
@@ -24,7 +24,6 @@ export {AbstractOperator}
24
24
  * @summary The abstract operator constraint
25
25
  */
26
26
  class AbstractOperator extends AbstractConstraint {
27
-
28
27
  /**
29
28
  *
30
29
  * @param {AbstractConstraint} operantA
@@ -34,13 +33,12 @@ class AbstractOperator extends AbstractConstraint {
34
33
  constructor(operantA, operantB) {
35
34
  super();
36
35
 
37
- if (!(operantA instanceof AbstractConstraint) || !(operantB instanceof AbstractConstraint)) {
38
- throw new TypeError("parameters must be from type AbstractConstraint")
36
+ if (!(operantA instanceof AbstractConstraint && operantB instanceof AbstractConstraint)) {
37
+ throw new TypeError("parameters must be from type AbstractConstraint");
39
38
  }
40
39
 
41
40
  this.operantA = operantA;
42
41
  this.operantB = operantB;
43
-
44
42
  }
45
43
 
46
44
  /**
@@ -51,8 +49,4 @@ class AbstractOperator extends AbstractConstraint {
51
49
  static get [instanceSymbol]() {
52
50
  return Symbol.for("@schukai/monster/constraints/abstract-operator");
53
51
  }
54
-
55
-
56
-
57
52
  }
58
-
@@ -5,9 +5,9 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {AbstractOperator} from "./abstractoperator.mjs";
9
- import {instanceSymbol} from '../constants.mjs';
10
- export {AndOperator}
8
+ import { AbstractOperator } from "./abstractoperator.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
+ export { AndOperator };
11
11
 
12
12
  /**
13
13
  * Constraints are used to define conditions that must be met by the value of a variable.
@@ -24,7 +24,6 @@ export {AndOperator}
24
24
  * @summary A and operator constraint
25
25
  */
26
26
  class AndOperator extends AbstractOperator {
27
-
28
27
  /**
29
28
  * this method return a promise containing the result of the check.
30
29
  *
@@ -43,6 +42,4 @@ class AndOperator extends AbstractOperator {
43
42
  static get [instanceSymbol]() {
44
43
  return Symbol.for("@schukai/monster/constraints/and-operator");
45
44
  }
46
-
47
-
48
45
  }
@@ -5,9 +5,9 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {AbstractConstraint} from "./abstract.mjs";
9
- import {instanceSymbol} from '../constants.mjs';
10
- export {Invalid}
8
+ import { AbstractConstraint } from "./abstract.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
+ export { Invalid };
11
11
 
12
12
  /**
13
13
  * Constraints are used to define conditions that must be met by the value of a variable.
@@ -24,7 +24,6 @@ export {Invalid}
24
24
  * @summary A constraint that always invalid
25
25
  */
26
26
  class Invalid extends AbstractConstraint {
27
-
28
27
  /**
29
28
  * this method return a rejected promise
30
29
  *
@@ -43,6 +42,4 @@ class Invalid extends AbstractConstraint {
43
42
  static get [instanceSymbol]() {
44
43
  return Symbol.for("@schukai/monster/constraints/invalid");
45
44
  }
46
-
47
-
48
45
  }
@@ -5,16 +5,16 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {isArray} from "../types/is.mjs";
9
- import {AbstractConstraint} from "./abstract.mjs";
10
- import {instanceSymbol} from '../constants.mjs';
11
- export {IsArray}
8
+ import { isArray } from "../types/is.mjs";
9
+ import { AbstractConstraint } from "./abstract.mjs";
10
+ import { instanceSymbol } from "../constants.mjs";
11
+ export { IsArray };
12
12
 
13
13
  /**
14
14
  * Constraints are used to define conditions that must be met by the value of a variable.
15
- *
15
+ *
16
16
  * The uniform API of the constraints allows chains to be formed.
17
- *
17
+ *
18
18
  * @externalExample ../../example/constraints/isarray.mjs
19
19
  * @license AGPLv3
20
20
  * @since 1.3.0
@@ -23,7 +23,6 @@ export {IsArray}
23
23
  * @summary A constraint to check if a value is an array
24
24
  */
25
25
  class IsArray extends AbstractConstraint {
26
-
27
26
  /**
28
27
  * this method return a promise containing the result of the check.
29
28
  *
@@ -46,6 +45,4 @@ class IsArray extends AbstractConstraint {
46
45
  static get [instanceSymbol]() {
47
46
  return Symbol.for("@schukai/monster/constraint/is-array");
48
47
  }
49
-
50
-
51
48
  }
@@ -5,10 +5,10 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {isObject} from "../types/is.mjs";
9
- import {AbstractConstraint} from "./abstract.mjs";
10
- import {instanceSymbol} from '../constants.mjs';
11
- export {IsObject}
8
+ import { isObject } from "../types/is.mjs";
9
+ import { AbstractConstraint } from "./abstract.mjs";
10
+ import { instanceSymbol } from "../constants.mjs";
11
+ export { IsObject };
12
12
 
13
13
  /**
14
14
  * Constraints are used to define conditions that must be met by the value of a variable.
@@ -23,7 +23,6 @@ export {IsObject}
23
23
  * @summary A constraint to check if a value is an object
24
24
  */
25
25
  class IsObject extends AbstractConstraint {
26
-
27
26
  /**
28
27
  * this method return a promise containing the result of the check.
29
28
  *
@@ -46,6 +45,4 @@ class IsObject extends AbstractConstraint {
46
45
  static get [instanceSymbol]() {
47
46
  return Symbol.for("@schukai/monster/constraint/is-object");
48
47
  }
49
-
50
-
51
48
  }
@@ -3,8 +3,6 @@
3
3
  * SPDX-License-Identifier: AGPL-3.0
4
4
  */
5
5
 
6
-
7
-
8
6
  /**
9
7
  * Constraints are used to define conditions that must be met by the value of a variable so that the value can be transferred to the system.
10
8
  *
@@ -12,4 +10,4 @@
12
10
  * @memberOf Monster
13
11
  * @author schukai GmbH
14
12
  */
15
- const ns = {};
13
+ const ns = {};
@@ -5,9 +5,9 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {AbstractOperator} from "./abstractoperator.mjs";
9
- import {instanceSymbol} from '../constants.mjs';
10
- export {OrOperator}
8
+ import { AbstractOperator } from "./abstractoperator.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
+ export { OrOperator };
11
11
 
12
12
  /**
13
13
  * Constraints are used to define conditions that must be met by the value of a variable.
@@ -21,10 +21,9 @@ export {OrOperator}
21
21
  * @since 1.3.0
22
22
  * @copyright schukai GmbH
23
23
  * @memberOf Monster.Constraints
24
- * @summary A or operator
24
+ * @summary A or operator
25
25
  */
26
26
  class OrOperator extends AbstractOperator {
27
-
28
27
  /**
29
28
  * this method return a promise containing the result of the check.
30
29
  *
@@ -35,29 +34,34 @@ class OrOperator extends AbstractOperator {
35
34
  var self = this;
36
35
 
37
36
  return new Promise(function (resolve, reject) {
38
- let a, b;
37
+ let a;
38
+ let b;
39
39
 
40
- self.operantA.isValid(value)
40
+ self.operantA
41
+ .isValid(value)
41
42
  .then(function () {
42
43
  resolve();
43
- }).catch(function () {
44
- a = false;
45
- /** b has already been evaluated and was not true */
46
- if (b === false) {
47
- reject();
48
- }
49
- });
44
+ })
45
+ .catch(function () {
46
+ a = false;
47
+ /** b has already been evaluated and was not true */
48
+ if (b === false) {
49
+ reject();
50
+ }
51
+ });
50
52
 
51
- self.operantB.isValid(value)
53
+ self.operantB
54
+ .isValid(value)
52
55
  .then(function () {
53
56
  resolve();
54
- }).catch(function () {
55
- b = false;
56
- /** b has already been evaluated and was not true */
57
- if (a === false) {
58
- reject();
59
- }
60
- });
57
+ })
58
+ .catch(function () {
59
+ b = false;
60
+ /** b has already been evaluated and was not true */
61
+ if (a === false) {
62
+ reject();
63
+ }
64
+ });
61
65
  });
62
66
  }
63
67
 
@@ -69,7 +73,4 @@ class OrOperator extends AbstractOperator {
69
73
  static get [instanceSymbol]() {
70
74
  return Symbol.for("@schukai/monster/constraints/or-operator");
71
75
  }
72
-
73
-
74
-
75
76
  }
@@ -5,9 +5,9 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {AbstractConstraint} from "./abstract.mjs";
9
- import {instanceSymbol} from '../constants.mjs';
10
- export {Valid}
8
+ import { AbstractConstraint } from "./abstract.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
+ export { Valid };
11
11
 
12
12
  /**
13
13
  * Constraints are used to define conditions that must be met by the value of a variable.
@@ -24,7 +24,6 @@ export {Valid}
24
24
  * @summary A constraint that always valid
25
25
  */
26
26
  class Valid extends AbstractConstraint {
27
-
28
27
  /**
29
28
  * this method return a promise containing the result of the check.
30
29
  *
@@ -43,6 +42,4 @@ class Valid extends AbstractConstraint {
43
42
  static get [instanceSymbol]() {
44
43
  return Symbol.for("@schukai/monster/constraints/valid");
45
44
  }
46
-
47
-
48
45
  }
@@ -5,19 +5,18 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {isFunction, isObject, isString} from "../types/is.mjs";
9
- import {validateString} from "../types/validate.mjs";
10
- import {clone} from "../util/clone.mjs";
11
- import {DELIMITER, Pathfinder, WILDCARD} from "./pathfinder.mjs";
8
+ import { isFunction, isObject, isString } from "../types/is.mjs";
9
+ import { validateString } from "../types/validate.mjs";
10
+ import { clone } from "../util/clone.mjs";
11
+ import { DELIMITER, Pathfinder, WILDCARD } from "./pathfinder.mjs";
12
12
 
13
- export {buildMap, PARENT, assembleParts}
13
+ export { buildMap, PARENT, assembleParts };
14
14
 
15
15
  /**
16
16
  * @type {string}
17
17
  * @memberOf Monster.Data
18
18
  */
19
- const PARENT = '^';
20
-
19
+ const PARENT = "^";
21
20
 
22
21
  /**
23
22
  * With the help of the function `buildMap()`, maps can be easily created from data objects.
@@ -47,10 +46,8 @@ function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
47
46
  v = build(v, valueTemplate);
48
47
  this.set(k, v);
49
48
  });
50
-
51
49
  }
52
50
 
53
-
54
51
  /**
55
52
  * @private
56
53
  * @param {*} subject
@@ -61,20 +58,19 @@ function buildMap(subject, selector, valueTemplate, keyTemplate, filter) {
61
58
  * @throws {TypeError} selector is neither a string nor a function
62
59
  */
63
60
  function assembleParts(subject, selector, filter, callback) {
64
-
65
61
  const result = new Map();
66
62
 
67
63
  let map;
68
64
  if (isFunction(selector)) {
69
- map = selector(subject)
65
+ map = selector(subject);
70
66
  if (!(map instanceof Map)) {
71
- throw new TypeError('the selector callback must return a map');
67
+ throw new TypeError("the selector callback must return a map");
72
68
  }
73
69
  } else if (isString(selector)) {
74
- map = new Map;
70
+ map = new Map();
75
71
  buildFlatMap.call(map, subject, selector);
76
72
  } else {
77
- throw new TypeError('selector is neither a string nor a function')
73
+ throw new TypeError("selector is neither a string nor a function");
78
74
  }
79
75
 
80
76
  if (!(map instanceof Map)) {
@@ -87,7 +83,6 @@ function assembleParts(subject, selector, filter, callback) {
87
83
  }
88
84
 
89
85
  callback.call(result, v, k, m);
90
-
91
86
  });
92
87
 
93
88
  return result;
@@ -102,23 +97,21 @@ function assembleParts(subject, selector, filter, callback) {
102
97
  * @return {*}
103
98
  */
104
99
  function buildFlatMap(subject, selector, key, parentMap) {
105
-
106
100
  const result = this;
107
- const currentMap = new Map;
101
+ const currentMap = new Map();
108
102
 
109
103
  const resultLength = result.size;
110
104
 
111
105
  if (key === undefined) key = [];
112
106
 
113
107
  let parts = selector.split(DELIMITER);
114
- let current = "", currentPath = [];
108
+ let current = "";
109
+ let currentPath = [];
115
110
  do {
116
-
117
111
  current = parts.shift();
118
112
  currentPath.push(current);
119
113
 
120
114
  if (current === WILDCARD) {
121
-
122
115
  let finder = new Pathfinder(subject);
123
116
  let map;
124
117
 
@@ -130,12 +123,11 @@ function buildFlatMap(subject, selector, key, parentMap) {
130
123
  }
131
124
 
132
125
  for (const [k, o] of map) {
133
-
134
126
  let copyKey = clone(key);
135
127
 
136
128
  currentPath.map((a) => {
137
- copyKey.push((a === WILDCARD) ? k : a)
138
- })
129
+ copyKey.push(a === WILDCARD ? k : a);
130
+ });
139
131
 
140
132
  let kk = copyKey.join(DELIMITER);
141
133
  let sub = buildFlatMap.call(result, o, parts.join(DELIMITER), copyKey, o);
@@ -146,10 +138,7 @@ function buildFlatMap(subject, selector, key, parentMap) {
146
138
 
147
139
  currentMap.set(kk, sub);
148
140
  }
149
-
150
141
  }
151
-
152
-
153
142
  } while (parts.length > 0);
154
143
 
155
144
  // no set in child run
@@ -160,10 +149,8 @@ function buildFlatMap(subject, selector, key, parentMap) {
160
149
  }
161
150
 
162
151
  return subject;
163
-
164
152
  }
165
153
 
166
-
167
154
  /**
168
155
  * With the help of this filter callback, values can be filtered out. Only if the filter function returns true, the value is taken for the map.
169
156
  *
@@ -318,7 +305,7 @@ function build(subject, definition, defaultValue) {
318
305
  if (definition === undefined) return defaultValue ? defaultValue : subject;
319
306
  validateString(definition);
320
307
 
321
- const regexp = /(?<placeholder>\${(?<path>[a-z\^A-Z.\-_0-9]*)})/gm
308
+ const regexp = /(?<placeholder>\${(?<path>[a-z\^A-Z.\-_0-9]*)})/gm;
322
309
  const array = [...definition.matchAll(regexp)];
323
310
 
324
311
  let finder = new Pathfinder(subject);
@@ -328,20 +315,17 @@ function build(subject, definition, defaultValue) {
328
315
  }
329
316
 
330
317
  array.forEach((a) => {
331
- let groups = a?.['groups'];
332
- let placeholder = groups?.['placeholder']
318
+ let groups = a?.["groups"];
319
+ let placeholder = groups?.["placeholder"];
333
320
  if (placeholder === undefined) return;
334
321
 
335
- let path = groups?.['path']
322
+ let path = groups?.["path"];
336
323
 
337
324
  let v = finder.getVia(path);
338
325
  if (v === undefined) v = defaultValue;
339
326
 
340
327
  definition = definition.replaceAll(placeholder, v);
341
-
342
-
343
- })
328
+ });
344
329
 
345
330
  return definition;
346
-
347
331
  }
@@ -5,25 +5,25 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {isArray, isObject} from "../types/is.mjs";
9
- import {Node} from "../types/node.mjs";
10
- import {NodeList} from "../types/nodelist.mjs";
11
- import {assembleParts} from "./buildmap.mjs";
12
- import {extend} from "./extend.mjs";
8
+ import { isArray, isObject } from "../types/is.mjs";
9
+ import { Node } from "../types/node.mjs";
10
+ import { NodeList } from "../types/nodelist.mjs";
11
+ import { assembleParts } from "./buildmap.mjs";
12
+ import { extend } from "./extend.mjs";
13
13
 
14
- export {buildTree}
14
+ export { buildTree };
15
15
 
16
16
  /**
17
17
  * @private
18
18
  * @type {symbol}
19
19
  */
20
- const parentSymbol = Symbol('parent');
20
+ const parentSymbol = Symbol("parent");
21
21
 
22
22
  /**
23
23
  * @private
24
24
  * @type {symbol}
25
25
  */
26
- const rootSymbol = Symbol('root');
26
+ const rootSymbol = Symbol("root");
27
27
 
28
28
  /**
29
29
  * @typedef {Object} buildTreeOptions
@@ -49,17 +49,20 @@ const rootSymbol = Symbol('root');
49
49
  * @since 1.26.0
50
50
  */
51
51
  function buildTree(subject, selector, idKey, parentIDKey, options) {
52
-
53
- const nodes = new Map;
52
+ const nodes = new Map();
54
53
 
55
54
  if (!isObject(options)) {
56
- options = {}
55
+ options = {};
57
56
  }
58
57
 
59
- options = extend({}, {
60
- rootReferences: [null, undefined],
61
- filter: undefined
62
- }, options)
58
+ options = extend(
59
+ {},
60
+ {
61
+ rootReferences: [null, undefined],
62
+ filter: undefined,
63
+ },
64
+ options,
65
+ );
63
66
 
64
67
  const filter = options?.filter;
65
68
  let rootReferences = options.rootReferences;
@@ -68,13 +71,12 @@ function buildTree(subject, selector, idKey, parentIDKey, options) {
68
71
  }
69
72
 
70
73
  const childMap = assembleParts(subject, selector, filter, function (o, k, m) {
71
-
72
- const key = o?.[idKey]
73
- let ref = o?.[parentIDKey]
74
+ const key = o?.[idKey];
75
+ let ref = o?.[parentIDKey];
74
76
  if (rootReferences.indexOf(ref) !== -1) ref = rootSymbol;
75
77
 
76
78
  if (key === undefined) {
77
- throw new Error('the object has no value for the specified id')
79
+ throw new Error("the object has no value for the specified id");
78
80
  }
79
81
 
80
82
  o[parentSymbol] = ref;
@@ -82,28 +84,26 @@ function buildTree(subject, selector, idKey, parentIDKey, options) {
82
84
  const node = new Node(o);
83
85
  this.has(ref) ? this.get(ref).add(node) : this.set(ref, new NodeList().add(node));
84
86
  nodes.set(key, node);
87
+ });
85
88
 
86
- })
87
-
88
- nodes.forEach(node => {
89
-
90
- let id = node?.['value']?.[idKey];
89
+ nodes.forEach((node) => {
90
+ let id = node?.["value"]?.[idKey];
91
91
 
92
92
  if (childMap.has(id)) {
93
93
  node.childNodes = childMap.get(id);
94
- childMap.delete(id)
94
+ childMap.delete(id);
95
95
  }
96
- })
96
+ });
97
97
 
98
- const list = new NodeList;
98
+ const list = new NodeList();
99
99
 
100
100
  childMap.forEach((s) => {
101
101
  if (s instanceof Set) {
102
102
  s.forEach((n) => {
103
103
  list.add(n);
104
- })
104
+ });
105
105
  }
106
- })
106
+ });
107
107
 
108
108
  return list;
109
109
  }
@@ -10,4 +10,4 @@
10
10
  * @memberOf Monster.Data
11
11
  * @author schukai GmbH
12
12
  */
13
- const ns = {};
13
+ const ns = {};