@schukai/monster 3.5.0 → 3.8.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 +105 -87
  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 +31 -49
  36. package/source/dom/locale.mjs +18 -20
  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 +42 -55
  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 +17 -24
  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
@@ -5,21 +5,21 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {internalSymbol,instanceSymbol} from "../../constants.mjs";
9
- import {validateString} from "../../types/validate.mjs";
10
- import {Datasource} from "../datasource.mjs";
8
+ import { internalSymbol, instanceSymbol } from "../../constants.mjs";
9
+ import { validateString } from "../../types/validate.mjs";
10
+ import { Datasource } from "../datasource.mjs";
11
11
 
12
- export {Storage, storageObjectSymbol}
12
+ export { Storage, storageObjectSymbol };
13
13
 
14
14
  /**
15
15
  * @private
16
16
  * @type {symbol}
17
17
  */
18
- const storageObjectSymbol = Symbol.for ('@schukai/monster/data/datasource/storage/@@storageObject')
18
+ const storageObjectSymbol = Symbol.for("@schukai/monster/data/datasource/storage/@@storageObject");
19
19
 
20
20
  /**
21
21
  * The class represents a record.
22
- *
22
+ *
23
23
  * @license AGPLv3
24
24
  * @since 1.22.0
25
25
  * @copyright schukai GmbH
@@ -27,7 +27,6 @@ const storageObjectSymbol = Symbol.for ('@schukai/monster/data/datasource/stora
27
27
  * @summary The Storage class encapsulates the access to data objects over WebStorageAPI.
28
28
  */
29
29
  class Storage extends Datasource {
30
-
31
30
  /**
32
31
  *
33
32
  * @param {string} key LocalStorage Key
@@ -35,7 +34,7 @@ class Storage extends Datasource {
35
34
  */
36
35
  constructor(key) {
37
36
  super();
38
- this.setOption('key', validateString(key));
37
+ this.setOption("key", validateString(key));
39
38
  }
40
39
 
41
40
  /**
@@ -45,7 +44,7 @@ class Storage extends Datasource {
45
44
  */
46
45
  static get [instanceSymbol]() {
47
46
  return Symbol.for("@schukai/monster/data/datasource/storage");
48
- }
47
+ }
49
48
 
50
49
  /**
51
50
  * @property {string} key=undefined LocalStorage Key
@@ -62,7 +61,7 @@ class Storage extends Datasource {
62
61
  * @private
63
62
  */
64
63
  [storageObjectSymbol]() {
65
- throw new Error("this method must be implemented by derived classes")
64
+ throw new Error("this method must be implemented by derived classes");
66
65
  }
67
66
 
68
67
  /**
@@ -77,11 +76,10 @@ class Storage extends Datasource {
77
76
  const storage = self[storageObjectSymbol]();
78
77
 
79
78
  return new Promise(function (resolve) {
80
- const data = JSON.parse(storage.getItem(self.getOption('key')));
81
- self.set(data??{});
79
+ const data = JSON.parse(storage.getItem(self.getOption("key")));
80
+ self.set(data ?? {});
82
81
  resolve();
83
- })
84
-
82
+ });
85
83
  }
86
84
 
87
85
  /**
@@ -94,24 +92,22 @@ class Storage extends Datasource {
94
92
  const storage = self[storageObjectSymbol]();
95
93
 
96
94
  return new Promise(function (resolve) {
97
-
98
95
  const data = self.get();
99
96
  if (data === undefined) {
100
- storage.removeItem(self.getOption('key'));
97
+ storage.removeItem(self.getOption("key"));
101
98
  } else {
102
- storage.setItem(self.getOption('key'), JSON.stringify(data));
99
+ storage.setItem(self.getOption("key"), JSON.stringify(data));
103
100
  }
104
101
 
105
102
  resolve();
106
- })
103
+ });
107
104
  }
108
105
 
109
106
  /**
110
107
  * @return {Storage}
111
108
  */
112
109
  getClone() {
113
- const self=this;
114
- return new Storage(self[internalSymbol].getRealSubject()['options'].key);
115
- }
116
-
110
+ const self = this;
111
+ return new Storage(self[internalSymbol].getRealSubject()["options"].key);
112
+ }
117
113
  }
@@ -5,18 +5,17 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {internalSymbol} from "../constants.mjs";
9
- import {instanceSymbol} from '../constants.mjs';
10
- import {Base} from "../types/base.mjs";
11
- import {parseDataURL} from "../types/dataurl.mjs";
12
- import {isString} from "../types/is.mjs";
13
- import {ProxyObserver} from "../types/proxyobserver.mjs";
14
- import {validateObject} from "../types/validate.mjs";
15
- import {extend} from "./extend.mjs";
16
- import {Pathfinder} from "./pathfinder.mjs";
17
-
18
- export {Datasource}
19
-
8
+ import { internalSymbol } from "../constants.mjs";
9
+ import { instanceSymbol } from "../constants.mjs";
10
+ import { Base } from "../types/base.mjs";
11
+ import { parseDataURL } from "../types/dataurl.mjs";
12
+ import { isString } from "../types/is.mjs";
13
+ import { ProxyObserver } from "../types/proxyobserver.mjs";
14
+ import { validateObject } from "../types/validate.mjs";
15
+ import { extend } from "./extend.mjs";
16
+ import { Pathfinder } from "./pathfinder.mjs";
17
+
18
+ export { Datasource };
20
19
 
21
20
  /**
22
21
  * This callback can be passed to a datasource and is used to adapt data structures.
@@ -28,7 +27,6 @@ export {Datasource}
28
27
  * @see Monster.Data.Datasource
29
28
  */
30
29
 
31
-
32
30
  /**
33
31
  * @private
34
32
  * @type {symbol}
@@ -36,7 +34,7 @@ export {Datasource}
36
34
  * @license AGPLv3
37
35
  * @since 1.24.0
38
36
  */
39
- const internalDataSymbol = Symbol.for('@schukai/monster/data/datasource/@@data');
37
+ const internalDataSymbol = Symbol.for("@schukai/monster/data/datasource/@@data");
40
38
 
41
39
  /**
42
40
  * The datasource class is the basis for dealing with different data sources.
@@ -49,22 +47,17 @@ const internalDataSymbol = Symbol.for('@schukai/monster/data/datasource/@@data')
49
47
  * @summary The datasource class encapsulates the access to data objects.
50
48
  */
51
49
  class Datasource extends Base {
52
-
53
50
  /**
54
51
  * creates a new datasource
55
- *
52
+ *
56
53
  */
57
54
  constructor() {
58
55
  super();
59
56
  this[internalSymbol] = new ProxyObserver({
60
- 'options': extend({}, this.defaults)
57
+ options: extend({}, this.defaults),
61
58
  });
62
-
63
- this[internalDataSymbol] = new ProxyObserver({
64
59
 
65
- });
66
-
67
-
60
+ this[internalDataSymbol] = new ProxyObserver({});
68
61
  }
69
62
 
70
63
  /**
@@ -74,7 +67,7 @@ class Datasource extends Base {
74
67
  * @returns {Datasource}
75
68
  */
76
69
  attachObserver(observer) {
77
- this[internalDataSymbol].attachObserver(observer)
70
+ this[internalDataSymbol].attachObserver(observer);
78
71
  return this;
79
72
  }
80
73
 
@@ -85,7 +78,7 @@ class Datasource extends Base {
85
78
  * @returns {Datasource}
86
79
  */
87
80
  detachObserver(observer) {
88
- this[internalDataSymbol].detachObserver(observer)
81
+ this[internalDataSymbol].detachObserver(observer);
89
82
  return this;
90
83
  }
91
84
 
@@ -120,7 +113,7 @@ class Datasource extends Base {
120
113
  * @return {Datasource}
121
114
  */
122
115
  setOption(path, value) {
123
- new Pathfinder(this[internalSymbol].getSubject()['options']).setVia(path, value);
116
+ new Pathfinder(this[internalSymbol].getSubject()["options"]).setVia(path, value);
124
117
  return this;
125
118
  }
126
119
 
@@ -130,13 +123,12 @@ class Datasource extends Base {
130
123
  * @throws {Error} the options does not contain a valid json definition
131
124
  */
132
125
  setOptions(options) {
133
-
134
126
  if (isString(options)) {
135
- options = parseOptionsJSON(options)
127
+ options = parseOptionsJSON(options);
136
128
  }
137
129
 
138
130
  const self = this;
139
- extend(self[internalSymbol].getSubject()['options'], self.defaults, options);
131
+ extend(self[internalSymbol].getSubject()["options"], self.defaults, options);
140
132
 
141
133
  return self;
142
134
  }
@@ -152,10 +144,8 @@ class Datasource extends Base {
152
144
  let value;
153
145
 
154
146
  try {
155
- value = new Pathfinder(this[internalSymbol].getRealSubject()['options']).getVia(path);
156
- } catch (e) {
157
-
158
- }
147
+ value = new Pathfinder(this[internalSymbol].getRealSubject()["options"]).getVia(path);
148
+ } catch (e) {}
159
149
 
160
150
  if (value === undefined) return defaultValue;
161
151
  return value;
@@ -166,7 +156,7 @@ class Datasource extends Base {
166
156
  * @return {Promise}
167
157
  */
168
158
  read() {
169
- throw new Error("this method must be implemented by derived classes")
159
+ throw new Error("this method must be implemented by derived classes");
170
160
  }
171
161
 
172
162
  /**
@@ -174,13 +164,12 @@ class Datasource extends Base {
174
164
  * @return {Promise}
175
165
  */
176
166
  write() {
177
- throw new Error("this method must be implemented by derived classes")
167
+ throw new Error("this method must be implemented by derived classes");
178
168
  }
179
169
 
180
-
181
170
  /**
182
171
  * Returns real object
183
- *
172
+ *
184
173
  * @return {Object|Array}
185
174
  */
186
175
  get() {
@@ -206,7 +195,6 @@ class Datasource extends Base {
206
195
  static get [instanceSymbol]() {
207
196
  return Symbol.for("@schukai/monster/data/datasource");
208
197
  }
209
-
210
198
  }
211
199
 
212
200
  /**
@@ -217,22 +205,18 @@ class Datasource extends Base {
217
205
  */
218
206
  function parseOptionsJSON(data) {
219
207
  if (isString(data)) {
220
-
221
208
  // the configuration can be specified as a data url.
222
209
  try {
223
210
  let dataUrl = parseDataURL(data);
224
211
  data = dataUrl.content;
225
- } catch (e) {
226
-
227
- }
228
-
212
+ } catch (e) {}
229
213
 
230
214
  try {
231
215
  let obj = JSON.parse(data);
232
216
  validateObject(obj);
233
217
  return obj;
234
218
  } catch (e) {
235
- throw new Error('the options does not contain a valid json definition (actual: ' + data + ').');
219
+ throw new Error(`the options does not contain a valid json definition (actual: ${data}).`);
236
220
  }
237
221
  }
238
222
 
@@ -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 {isArray, isObject} from "../types/is.mjs";
9
- import {typeOf} from "../types/typeof.mjs";
8
+ import { isArray, isObject } from "../types/is.mjs";
9
+ import { typeOf } from "../types/typeof.mjs";
10
10
 
11
- export {diff}
11
+ export { diff };
12
12
 
13
13
  /**
14
14
  * With the diff function you can perform the change of one object to another. The result shows the changes of the second object to the first object.
@@ -25,7 +25,7 @@ export {diff}
25
25
  * @memberOf Monster.Data
26
26
  */
27
27
  function diff(first, second) {
28
- return doDiff(first, second)
28
+ return doDiff(first, second);
29
29
  }
30
30
 
31
31
  /**
@@ -54,37 +54,30 @@ function getKeys(a, b, type) {
54
54
  * @return {array}
55
55
  */
56
56
  function doDiff(a, b, path, diff) {
57
-
58
- let typeA = typeOf(a)
59
- let typeB = typeOf(b)
57
+ let typeA = typeOf(a);
58
+ let typeB = typeOf(b);
60
59
 
61
60
  const currPath = path || [];
62
61
  const currDiff = diff || [];
63
62
 
64
- if (typeA === typeB && (typeA === 'object' || typeA ==='array')) {
65
-
63
+ if (typeA === typeB && (typeA === "object" || typeA === "array")) {
66
64
  getKeys(a, b, typeA).forEach((v) => {
67
-
68
- if (!(Object.prototype.hasOwnProperty.call(a, v))) {
69
- currDiff.push(buildResult(a[v], b[v], 'add', currPath.concat(v)));
70
- } else if (!(Object.prototype.hasOwnProperty.call(b, v))) {
71
- currDiff.push(buildResult(a[v], b[v], 'delete', currPath.concat(v)));
65
+ if (!Object.prototype.hasOwnProperty.call(a, v)) {
66
+ currDiff.push(buildResult(a[v], b[v], "add", currPath.concat(v)));
67
+ } else if (!Object.prototype.hasOwnProperty.call(b, v)) {
68
+ currDiff.push(buildResult(a[v], b[v], "delete", currPath.concat(v)));
72
69
  } else {
73
70
  doDiff(a[v], b[v], currPath.concat(v), currDiff);
74
71
  }
75
72
  });
76
-
77
73
  } else {
78
-
79
74
  const o = getOperator(a, b, typeA, typeB);
80
75
  if (o !== undefined) {
81
76
  currDiff.push(buildResult(a, b, o, path));
82
77
  }
83
-
84
78
  }
85
79
 
86
80
  return currDiff;
87
-
88
81
  }
89
82
 
90
83
  /**
@@ -97,16 +90,15 @@ function doDiff(a, b, path, diff) {
97
90
  * @private
98
91
  */
99
92
  function buildResult(a, b, operator, path) {
100
-
101
93
  const result = {
102
94
  operator,
103
95
  path,
104
96
  };
105
97
 
106
- if (operator !== 'add') {
98
+ if (operator !== "add") {
107
99
  result.first = {
108
100
  value: a,
109
- type: typeof a
101
+ type: typeof a,
110
102
  };
111
103
 
112
104
  if (isObject(a)) {
@@ -117,10 +109,10 @@ function buildResult(a, b, operator, path) {
117
109
  }
118
110
  }
119
111
 
120
- if (operator === 'add' || operator === 'update') {
112
+ if (operator === "add" || operator === "update") {
121
113
  result.second = {
122
114
  value: b,
123
- type: typeof b
115
+ type: typeof b,
124
116
  };
125
117
 
126
118
  if (isObject(b)) {
@@ -129,7 +121,6 @@ function buildResult(a, b, operator, path) {
129
121
  result.second.instance = name;
130
122
  }
131
123
  }
132
-
133
124
  }
134
125
 
135
126
  return result;
@@ -142,7 +133,6 @@ function buildResult(a, b, operator, path) {
142
133
  * @return {boolean}
143
134
  */
144
135
  function isNotEqual(a, b) {
145
-
146
136
  if (typeof a !== typeof b) {
147
137
  return true;
148
138
  }
@@ -161,7 +151,6 @@ function isNotEqual(a, b) {
161
151
  * @return {string|undefined}
162
152
  */
163
153
  function getOperator(a, b) {
164
-
165
154
  /**
166
155
  * @type {string|undefined}
167
156
  */
@@ -177,14 +166,13 @@ function getOperator(a, b) {
177
166
  */
178
167
  let typeB = typeof b;
179
168
 
180
- if (typeA === 'undefined' && typeB !== 'undefined') {
181
- operator = 'add';
182
- } else if (typeA !== 'undefined' && typeB === 'undefined') {
183
- operator = 'delete';
169
+ if (typeA === "undefined" && typeB !== "undefined") {
170
+ operator = "add";
171
+ } else if (typeA !== "undefined" && typeB === "undefined") {
172
+ operator = "delete";
184
173
  } else if (isNotEqual(a, b)) {
185
- operator = 'update';
174
+ operator = "update";
186
175
  }
187
176
 
188
177
  return operator;
189
-
190
178
  }
@@ -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 {isArray, isObject} from "../types/is.mjs";
9
- import {typeOf} from "../types/typeof.mjs";
8
+ import { isArray, isObject } from "../types/is.mjs";
9
+ import { typeOf } from "../types/typeof.mjs";
10
10
 
11
- export {extend}
11
+ export { extend };
12
12
 
13
13
  /**
14
14
  * Extend copies all enumerable own properties from one or
@@ -23,15 +23,21 @@ export {extend}
23
23
  * @memberOf Monster.Data
24
24
  * @throws {Error} unsupported argument
25
25
  * @throws {Error} type mismatch
26
+ * @throws {Error} unsupported argument
26
27
  */
27
- function extend() {
28
- let o, i;
28
+ function extend(...args) {
29
+ let o;
30
+ let i;
31
+
32
+ if (typeof args !== "object" || args[0] === null) {
33
+ throw new Error(`unsupported argument ${JSON.stringify(args[0])}`);
34
+ }
29
35
 
30
- for (i = 0; i < arguments.length; i++) {
31
- let a = arguments[i];
36
+ for (i = 0; i < args.length; i++) {
37
+ let a = args[i];
32
38
 
33
39
  if (!(isObject(a) || isArray(a))) {
34
- throw new Error('unsupported argument ' + JSON.stringify(a));
40
+ throw new Error(`unsupported argument ${JSON.stringify(a)}`);
35
41
  }
36
42
 
37
43
  if (o === undefined) {
@@ -40,15 +46,13 @@ function extend() {
40
46
  }
41
47
 
42
48
  for (let k in a) {
43
-
44
49
  let v = a?.[k];
45
50
 
46
51
  if (v === o?.[k]) {
47
52
  continue;
48
53
  }
49
54
 
50
- if ((isObject(v)&&typeOf(v)==='object') || isArray(v)) {
51
-
55
+ if ((isObject(v) && typeOf(v) === "object") || isArray(v)) {
52
56
  if (o[k] === undefined) {
53
57
  if (isArray(v)) {
54
58
  o[k] = [];
@@ -57,16 +61,18 @@ function extend() {
57
61
  }
58
62
  } else {
59
63
  if (typeOf(o[k]) !== typeOf(v)) {
60
- throw new Error("type mismatch: " + JSON.stringify(o[k]) + "(" + typeOf(o[k]) + ") != " + JSON.stringify(v) + "(" + typeOf(v) + ")");
64
+ throw new Error(
65
+ `type mismatch: ${JSON.stringify(o[k])}(${typeOf(o[k])}) != ${JSON.stringify(v)}(${typeOf(
66
+ v,
67
+ )})`,
68
+ );
61
69
  }
62
70
  }
63
71
 
64
72
  o[k] = extend(o[k], v);
65
-
66
73
  } else {
67
74
  o[k] = v;
68
75
  }
69
-
70
76
  }
71
77
  }
72
78
 
@@ -3,8 +3,6 @@
3
3
  * SPDX-License-Identifier: AGPL-3.0
4
4
  */
5
5
 
6
-
7
-
8
6
  /**
9
7
  * In this namespace you will find classes and methods for handling data.
10
8
  *
@@ -12,4 +10,4 @@
12
10
  * @memberOf Monster
13
11
  * @author schukai GmbH
14
12
  */
15
- const ns = {};
13
+ const ns = {};