@schukai/monster 3.5.0 → 3.7.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.
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 = {};