@schukai/monster 3.4.2 → 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 (109) hide show
  1. package/example/i18n/providers/embed.mjs +5 -0
  2. package/package.json +1 -1
  3. package/source/constants.mjs +4 -9
  4. package/source/constraints/abstract.mjs +4 -6
  5. package/source/constraints/abstractoperator.mjs +6 -12
  6. package/source/constraints/andoperator.mjs +3 -6
  7. package/source/constraints/invalid.mjs +3 -6
  8. package/source/constraints/isarray.mjs +6 -9
  9. package/source/constraints/isobject.mjs +4 -7
  10. package/source/constraints/namespace.mjs +1 -3
  11. package/source/constraints/oroperator.mjs +26 -25
  12. package/source/constraints/valid.mjs +3 -6
  13. package/source/data/buildmap.mjs +20 -36
  14. package/source/data/buildtree.mjs +29 -29
  15. package/source/data/datasource/namespace.mjs +1 -1
  16. package/source/data/datasource/server/restapi/writeerror.mjs +6 -6
  17. package/source/data/datasource/server/restapi.mjs +51 -65
  18. package/source/data/datasource/server/webconnect.mjs +26 -35
  19. package/source/data/datasource/server.mjs +17 -21
  20. package/source/data/datasource/storage/localstorage.mjs +8 -11
  21. package/source/data/datasource/storage/sessionstorage.mjs +8 -10
  22. package/source/data/datasource/storage.mjs +18 -22
  23. package/source/data/datasource.mjs +27 -43
  24. package/source/data/diff.mjs +20 -32
  25. package/source/data/extend.mjs +20 -14
  26. package/source/data/namespace.mjs +1 -3
  27. package/source/data/pathfinder.mjs +40 -67
  28. package/source/data/pipe.mjs +6 -10
  29. package/source/data/transformer.mjs +141 -157
  30. package/source/dom/assembler.mjs +6 -9
  31. package/source/dom/attributes.mjs +36 -48
  32. package/source/dom/constants.mjs +55 -71
  33. package/source/dom/customcontrol.mjs +16 -21
  34. package/source/dom/customelement.mjs +140 -164
  35. package/source/dom/events.mjs +17 -24
  36. package/source/dom/focusmanager.mjs +30 -48
  37. package/source/dom/locale.mjs +41 -10
  38. package/source/dom/namespace.mjs +1 -1
  39. package/source/dom/ready.mjs +7 -10
  40. package/source/dom/resource/data.mjs +38 -46
  41. package/source/dom/resource/link/namespace.mjs +1 -3
  42. package/source/dom/resource/link/stylesheet.mjs +7 -11
  43. package/source/dom/resource/link.mjs +36 -17
  44. package/source/dom/resource/namespace.mjs +1 -1
  45. package/source/dom/resource/script.mjs +23 -13
  46. package/source/dom/resource.mjs +47 -60
  47. package/source/dom/resourcemanager.mjs +36 -43
  48. package/source/dom/template.mjs +17 -24
  49. package/source/dom/theme.mjs +8 -12
  50. package/source/dom/updater.mjs +150 -196
  51. package/source/dom/util.mjs +11 -12
  52. package/source/dom/worker/factory.mjs +21 -25
  53. package/source/dom/worker/namespace.mjs +1 -1
  54. package/source/i18n/formatter.mjs +20 -24
  55. package/source/i18n/locale.mjs +40 -42
  56. package/source/i18n/namespace.mjs +1 -1
  57. package/source/i18n/provider.mjs +4 -7
  58. package/source/i18n/providers/embed.mjs +115 -0
  59. package/source/i18n/providers/fetch.mjs +33 -38
  60. package/source/i18n/translations.mjs +16 -20
  61. package/source/logging/handler/console.mjs +6 -10
  62. package/source/logging/handler.mjs +15 -18
  63. package/source/logging/logentry.mjs +8 -9
  64. package/source/logging/logger.mjs +73 -55
  65. package/source/logging/namespace.mjs +1 -1
  66. package/source/math/namespace.mjs +1 -1
  67. package/source/math/random.mjs +13 -14
  68. package/source/monster.mjs +132 -100
  69. package/source/net/namespace.mjs +1 -3
  70. package/source/net/webconnect/message.mjs +6 -8
  71. package/source/net/webconnect/namespace.mjs +1 -3
  72. package/source/net/webconnect.mjs +28 -39
  73. package/source/text/formatter.mjs +44 -55
  74. package/source/types/base.mjs +16 -26
  75. package/source/types/basewithoptions.mjs +8 -14
  76. package/source/types/binary.mjs +4 -5
  77. package/source/types/dataurl.mjs +19 -27
  78. package/source/types/global.mjs +14 -26
  79. package/source/types/id.mjs +4 -6
  80. package/source/types/is.mjs +11 -16
  81. package/source/types/mediatype.mjs +29 -44
  82. package/source/types/namespace.mjs +0 -1
  83. package/source/types/node.mjs +16 -22
  84. package/source/types/nodelist.mjs +10 -14
  85. package/source/types/noderecursiveiterator.mjs +11 -14
  86. package/source/types/observablequeue.mjs +13 -16
  87. package/source/types/observer.mjs +16 -23
  88. package/source/types/observerlist.mjs +18 -21
  89. package/source/types/proxyobserver.mjs +24 -37
  90. package/source/types/queue.mjs +8 -13
  91. package/source/types/randomid.mjs +10 -10
  92. package/source/types/regex.mjs +3 -5
  93. package/source/types/stack.mjs +4 -8
  94. package/source/types/tokenlist.mjs +24 -31
  95. package/source/types/typeof.mjs +5 -7
  96. package/source/types/uniquequeue.mjs +8 -13
  97. package/source/types/uuid.mjs +18 -25
  98. package/source/types/validate.mjs +26 -27
  99. package/source/types/version.mjs +17 -25
  100. package/source/util/clone.mjs +23 -32
  101. package/source/util/comparator.mjs +7 -15
  102. package/source/util/deadmansswitch.mjs +16 -23
  103. package/source/util/freeze.mjs +5 -7
  104. package/source/util/namespace.mjs +1 -1
  105. package/source/util/processing.mjs +33 -39
  106. package/source/util/trimspaces.mjs +17 -24
  107. package/test/cases/dom/locale.mjs +15 -0
  108. package/test/cases/i18n/providers/embed.mjs +72 -0
  109. package/test/cases/monster.mjs +1 -1
@@ -5,46 +5,45 @@
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 {extend} from "../data/extend.mjs";
10
- import {Pipe} from "../data/pipe.mjs";
8
+ import { internalSymbol } from "../constants.mjs";
9
+ import { extend } from "../data/extend.mjs";
10
+ import { Pipe } from "../data/pipe.mjs";
11
11
 
12
- import {BaseWithOptions} from "../types/basewithoptions.mjs";
13
- import {isObject, isString} from "../types/is.mjs";
14
- import {validateArray, validateString} from "../types/validate.mjs";
12
+ import { BaseWithOptions } from "../types/basewithoptions.mjs";
13
+ import { isObject, isString } from "../types/is.mjs";
14
+ import { validateArray, validateString } from "../types/validate.mjs";
15
15
 
16
- export {Formatter}
16
+ export { Formatter };
17
17
 
18
18
  /**
19
19
  * @private
20
20
  * @type {symbol}
21
21
  */
22
- const internalObjectSymbol = Symbol('internalObject');
22
+ const internalObjectSymbol = Symbol("internalObject");
23
23
 
24
24
  /**
25
25
  * @private
26
26
  * @type {symbol}
27
27
  */
28
- const watchdogSymbol = Symbol('watchdog');
28
+ const watchdogSymbol = Symbol("watchdog");
29
29
 
30
30
  /**
31
31
  * @private
32
32
  * @type {symbol}
33
33
  */
34
- const markerOpenIndexSymbol = Symbol('markerOpenIndex');
34
+ const markerOpenIndexSymbol = Symbol("markerOpenIndex");
35
35
 
36
36
  /**
37
37
  * @private
38
38
  * @type {symbol}
39
39
  */
40
- const markerCloseIndexSymbol = Symbol('markercloseIndex');
40
+ const markerCloseIndexSymbol = Symbol("markercloseIndex");
41
41
 
42
42
  /**
43
43
  * @private
44
44
  * @type {symbol}
45
45
  */
46
- const workingDataSymbol = Symbol('workingData');
47
-
46
+ const workingDataSymbol = Symbol("workingData");
48
47
 
49
48
  /**
50
49
  * Messages can be formatted with the formatter. To do this, an object with the values must be passed to the formatter. The message can then contain placeholders.
@@ -109,8 +108,7 @@ const workingDataSymbol = Symbol('workingData');
109
108
  * @copyright schukai GmbH
110
109
  * @memberOf Monster.Text
111
110
  */
112
- class Formatter extends BaseWithOptions {
113
-
111
+ class Formatter extends BaseWithOptions {
114
112
  /**
115
113
  * Default values for the markers are `${` and `}`
116
114
  *
@@ -119,7 +117,7 @@ const workingDataSymbol = Symbol('workingData');
119
117
  */
120
118
  constructor(object, options) {
121
119
  super(options);
122
- this[internalObjectSymbol] = object || {}
120
+ this[internalObjectSymbol] = object || {};
123
121
  this[markerOpenIndexSymbol] = 0;
124
122
  this[markerCloseIndexSymbol] = 0;
125
123
  }
@@ -136,18 +134,17 @@ const workingDataSymbol = Symbol('workingData');
136
134
  get defaults() {
137
135
  return extend({}, super.defaults, {
138
136
  marker: {
139
- open: ['${'],
140
- close: ['}']
137
+ open: ["${"],
138
+ close: ["}"],
141
139
  },
142
140
  parameter: {
143
- delimiter: '::',
144
- assignment: '='
141
+ delimiter: "::",
142
+ assignment: "=",
145
143
  },
146
144
  callbacks: {},
147
- })
145
+ });
148
146
  }
149
147
 
150
-
151
148
  /**
152
149
  * Set new Parameter Character
153
150
  *
@@ -166,13 +163,12 @@ const workingDataSymbol = Symbol('workingData');
166
163
  * @throws {TypeError} value is not a string
167
164
  */
168
165
  setParameterChars(delimiter, assignment) {
169
-
170
166
  if (delimiter !== undefined) {
171
- this[internalSymbol]['parameter']['delimiter'] = validateString(delimiter);
167
+ this[internalSymbol]["parameter"]["delimiter"] = validateString(delimiter);
172
168
  }
173
169
 
174
170
  if (assignment !== undefined) {
175
- this[internalSymbol]['parameter']['assignment'] = validateString(assignment);
171
+ this[internalSymbol]["parameter"]["assignment"] = validateString(assignment);
176
172
  }
177
173
 
178
174
  return this;
@@ -196,7 +192,6 @@ const workingDataSymbol = Symbol('workingData');
196
192
  * @throws {TypeError} value is not a string
197
193
  */
198
194
  setMarker(open, close) {
199
-
200
195
  if (close === undefined) {
201
196
  close = open;
202
197
  }
@@ -204,8 +199,8 @@ const workingDataSymbol = Symbol('workingData');
204
199
  if (isString(open)) open = [open];
205
200
  if (isString(close)) close = [close];
206
201
 
207
- this[internalSymbol]['marker']['open'] = validateArray(open);
208
- this[internalSymbol]['marker']['close'] = validateArray(close);
202
+ this[internalSymbol]["marker"]["open"] = validateArray(open);
203
+ this[internalSymbol]["marker"]["close"] = validateArray(close);
209
204
  return this;
210
205
  }
211
206
 
@@ -223,7 +218,6 @@ const workingDataSymbol = Symbol('workingData');
223
218
  this[workingDataSymbol] = {};
224
219
  return format.call(this, text);
225
220
  }
226
-
227
221
  }
228
222
 
229
223
  /**
@@ -235,28 +229,28 @@ function format(text) {
235
229
 
236
230
  self[watchdogSymbol]++;
237
231
  if (this[watchdogSymbol] > 20) {
238
- throw new Error('too deep nesting')
232
+ throw new Error("too deep nesting");
239
233
  }
240
234
 
241
- let openMarker = self[internalSymbol]['marker']['open']?.[this[markerOpenIndexSymbol]];
242
- let closeMarker = self[internalSymbol]['marker']['close']?.[this[markerCloseIndexSymbol]];
235
+ let openMarker = self[internalSymbol]["marker"]["open"]?.[this[markerOpenIndexSymbol]];
236
+ let closeMarker = self[internalSymbol]["marker"]["close"]?.[this[markerCloseIndexSymbol]];
243
237
 
244
238
  // contains no placeholders
245
239
  if (text.indexOf(openMarker) === -1 || text.indexOf(closeMarker) === -1) {
246
240
  return text;
247
241
  }
248
242
 
249
- let result = tokenize.call(this, validateString(text), openMarker, closeMarker)
243
+ let result = tokenize.call(this, validateString(text), openMarker, closeMarker);
250
244
 
251
- if (self[internalSymbol]['marker']['open']?.[this[markerOpenIndexSymbol] + 1]) {
245
+ if (self[internalSymbol]["marker"]["open"]?.[this[markerOpenIndexSymbol] + 1]) {
252
246
  this[markerOpenIndexSymbol]++;
253
247
  }
254
248
 
255
- if (self[internalSymbol]['marker']['close']?.[this[markerCloseIndexSymbol] + 1]) {
249
+ if (self[internalSymbol]["marker"]["close"]?.[this[markerCloseIndexSymbol] + 1]) {
256
250
  this[markerCloseIndexSymbol]++;
257
251
  }
258
252
 
259
- result = format.call(self, result)
253
+ result = format.call(self, result);
260
254
 
261
255
  return result;
262
256
  }
@@ -273,20 +267,19 @@ function tokenize(text, openMarker, closeMarker) {
273
267
 
274
268
  let formatted = [];
275
269
 
276
- const parameterAssignment = self[internalSymbol]['parameter']['assignment']
277
- const parameterDelimiter = self[internalSymbol]['parameter']['delimiter']
278
- const callbacks = self[internalSymbol]['callbacks'];
270
+ const parameterAssignment = self[internalSymbol]["parameter"]["assignment"];
271
+ const parameterDelimiter = self[internalSymbol]["parameter"]["delimiter"];
272
+ const callbacks = self[internalSymbol]["callbacks"];
279
273
 
280
274
  while (true) {
281
-
282
275
  let startIndex = text.indexOf(openMarker);
283
- // no marker
276
+ // no marker
284
277
  if (startIndex === -1) {
285
278
  formatted.push(text);
286
279
  break;
287
280
  } else if (startIndex > 0) {
288
- formatted.push(text.substring(0, startIndex))
289
- text = text.substring(startIndex)
281
+ formatted.push(text.substring(0, startIndex));
282
+ text = text.substring(startIndex);
290
283
  }
291
284
 
292
285
  let endIndex = text.substring(openMarker.length).indexOf(closeMarker);
@@ -296,15 +289,14 @@ function tokenize(text, openMarker, closeMarker) {
296
289
  insideStartIndex += openMarker.length;
297
290
  if (insideStartIndex < endIndex) {
298
291
  let result = tokenize.call(self, text.substring(insideStartIndex), openMarker, closeMarker);
299
- text = text.substring(0, insideStartIndex) + result
292
+ text = text.substring(0, insideStartIndex) + result;
300
293
  endIndex = text.substring(openMarker.length).indexOf(closeMarker);
301
294
  if (endIndex !== -1) endIndex += openMarker.length;
302
295
  }
303
296
  }
304
297
 
305
298
  if (endIndex === -1) {
306
- throw new Error("syntax error in formatter template")
307
- return;
299
+ throw new Error("syntax error in formatter template");
308
300
  }
309
301
 
310
302
  let key = text.substring(openMarker.length, endIndex);
@@ -318,15 +310,13 @@ function tokenize(text, openMarker, closeMarker) {
318
310
  self[workingDataSymbol][k] = v;
319
311
  }
320
312
 
321
- const t1 = key.split('|').shift().trim(); // pipe symbol
322
- const t2 = t1.split('::').shift().trim(); // key value delimiter
323
- const t3 = t2.split('.').shift().trim(); // path delimiter
324
- let prefix = self[workingDataSymbol]?.[t3] ? 'path:' : 'static:';
313
+ const t1 = key.split("|").shift().trim(); // pipe symbol
314
+ const t2 = t1.split("::").shift().trim(); // key value delimiter
315
+ const t3 = t2.split(".").shift().trim(); // path delimiter
316
+ let prefix = self[workingDataSymbol]?.[t3] ? "path:" : "static:";
325
317
 
326
318
  let command = "";
327
- if (prefix && key.indexOf(prefix) !== 0
328
- && key.indexOf('path:') !== 0
329
- && key.indexOf('static:') !== 0) {
319
+ if (prefix && key.indexOf(prefix) !== 0 && key.indexOf("path:") !== 0 && key.indexOf("static:") !== 0) {
330
320
  command = prefix;
331
321
  }
332
322
 
@@ -343,8 +333,7 @@ function tokenize(text, openMarker, closeMarker) {
343
333
  formatted.push(validateString(pipe.run(self[workingDataSymbol])));
344
334
 
345
335
  text = text.substring(endIndex + closeMarker.length);
346
-
347
336
  }
348
337
 
349
- return formatted.join('');
338
+ return formatted.join("");
350
339
  }
@@ -5,24 +5,23 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {instanceSymbol} from "../constants.mjs";
9
-
10
- export {Base}
8
+ import { instanceSymbol } from "../constants.mjs";
11
9
 
10
+ export { Base };
12
11
 
13
12
  /**
14
13
  * This is the base class from which all monster classes are derived.
15
- *
14
+ *
16
15
  * This class has besides a `toString` which returns the json representation of the object
17
16
  * also a functionality to check if an object is an instance of a class.
18
- *
19
- * Therefor the class has a static method ` [Symbol.hasInstance](that)` which returns true if the object
20
- * is an instance of the class.
17
+ *
18
+ * Therefor the class has a static method ` [Symbol.hasInstance](that)` which returns true if the object
19
+ * is an instance of the class.
21
20
  * F
22
21
  * @see [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance](developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance)
23
22
  *
24
23
  * Derived classes should implement a static getter `instanceSymbol` which returns a unique symbol.
25
- *
24
+ *
26
25
  * ```javascript
27
26
  * static get [instanceSymbol]() {
28
27
  * return Symbol.for("@schukai/monster/types/base");
@@ -37,14 +36,13 @@ export {Base}
37
36
  * @memberOf Monster.Types
38
37
  */
39
38
  class Base extends Object {
40
-
41
39
  /**
42
40
  *
43
41
  * @returns {string}
44
42
  */
45
43
  toString() {
46
44
  return JSON.stringify(this);
47
- };
45
+ }
48
46
 
49
47
  /**
50
48
  * This method is called by the `instanceof` operator.
@@ -62,13 +60,16 @@ class Base extends Object {
62
60
  * @since 2.1.0
63
61
  */
64
62
  static [Symbol.hasInstance](that) {
65
-
66
63
  if (that === undefined || that === null || (typeof that !== "object" && typeof that !== "function")) {
67
64
  return false;
68
65
  }
69
66
 
70
- const thatClass = Object.getPrototypeOf(that)
71
- if (thatClass === undefined || thatClass === null || (typeof thatClass !== "object" && typeof thatClass !== "function")) {
67
+ const thatClass = Object.getPrototypeOf(that);
68
+ if (
69
+ thatClass === undefined ||
70
+ thatClass === null ||
71
+ (typeof thatClass !== "object" && typeof thatClass !== "function")
72
+ ) {
72
73
  return false;
73
74
  }
74
75
 
@@ -76,24 +77,20 @@ class Base extends Object {
76
77
  return true;
77
78
  }
78
79
 
79
-
80
80
  // this call the static method of the super class, if there is one
81
81
  return super[Symbol.hasInstance](that);
82
-
83
82
  }
84
-
85
83
  }
86
84
 
87
85
  /**
88
86
  * this function checks if the class has a static getter `instanceSymbol` and if the value of this getter is equal to the
89
- *
87
+ *
90
88
  * @private
91
89
  * @param obj
92
90
  * @returns {boolean|any|boolean}
93
91
  * @since 2.1.0
94
92
  */
95
93
  function checkInstanceSymbol(obj) {
96
-
97
94
  if (this.hasOwnProperty(instanceSymbol) === false) {
98
95
  return false;
99
96
  }
@@ -109,23 +106,16 @@ function checkInstanceSymbol(obj) {
109
106
 
110
107
  const symbol = proto[instanceSymbol];
111
108
  if (symbol === undefined) {
112
-
113
109
  if (obj.__proto__) {
114
110
  return checkInstanceSymbol(obj.__proto__);
115
111
  } else {
116
112
  return false;
117
113
  }
118
-
119
114
  }
120
115
 
121
116
  if (symbol === this[instanceSymbol]) {
122
117
  return true;
123
118
  }
124
-
125
- return checkInstanceSymbol.apply(this, [obj.__proto__]);
126
-
127
119
 
120
+ return checkInstanceSymbol.apply(this, [obj.__proto__]);
128
121
  }
129
-
130
-
131
-
@@ -5,13 +5,13 @@
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 {extend} from "../data/extend.mjs";
10
- import {Pathfinder} from "../data/pathfinder.mjs";
11
- import {Base} from "./base.mjs";
12
- import {validateObject} from "./validate.mjs";
8
+ import { internalSymbol } from "../constants.mjs";
9
+ import { extend } from "../data/extend.mjs";
10
+ import { Pathfinder } from "../data/pathfinder.mjs";
11
+ import { Base } from "./base.mjs";
12
+ import { validateObject } from "./validate.mjs";
13
13
 
14
- export {BaseWithOptions}
14
+ export { BaseWithOptions };
15
15
 
16
16
  /**
17
17
  * This is the base class with options from which some monster classes are derived.
@@ -28,7 +28,6 @@ export {BaseWithOptions}
28
28
  * @memberOf Monster.Types
29
29
  */
30
30
  class BaseWithOptions extends Base {
31
-
32
31
  /**
33
32
  *
34
33
  * @param {object} options
@@ -41,7 +40,6 @@ class BaseWithOptions extends Base {
41
40
  }
42
41
 
43
42
  this[internalSymbol] = extend({}, this.defaults, validateObject(options));
44
-
45
43
  }
46
44
 
47
45
  /**
@@ -61,7 +59,7 @@ class BaseWithOptions extends Base {
61
59
  * @return {object}
62
60
  */
63
61
  get defaults() {
64
- return {}
62
+ return {};
65
63
  }
66
64
 
67
65
  /**
@@ -77,13 +75,9 @@ class BaseWithOptions extends Base {
77
75
 
78
76
  try {
79
77
  value = new Pathfinder(this[internalSymbol]).getVia(path);
80
- } catch (e) {
81
-
82
- }
78
+ } catch (e) {}
83
79
 
84
80
  if (value === undefined) return defaultValue;
85
81
  return value;
86
82
  }
87
-
88
-
89
83
  }
@@ -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 {validateString} from "./validate.mjs";
8
+ import { validateString } from "./validate.mjs";
9
9
 
10
- export {toBinary, fromBinary}
10
+ export { toBinary, fromBinary };
11
11
 
12
12
  /**
13
13
  * You can call the function via the monster namespace `Monster.Types.toBinary()`.
@@ -26,7 +26,7 @@ function toBinary(string) {
26
26
  }
27
27
 
28
28
  const charCodes = new Uint8Array(codeUnits.buffer);
29
- let result = '';
29
+ let result = "";
30
30
 
31
31
  for (let i = 0; i < charCodes.byteLength; i++) {
32
32
  result += String.fromCharCode(charCodes[i]);
@@ -51,10 +51,9 @@ function fromBinary(binary) {
51
51
  bytes[i] = binary.charCodeAt(i);
52
52
  }
53
53
  const charCodes = new Uint16Array(bytes.buffer);
54
- let result = '';
54
+ let result = "";
55
55
  for (let i = 0; i < charCodes.length; i++) {
56
56
  result += String.fromCharCode(charCodes[i]);
57
57
  }
58
58
  return result;
59
59
  }
60
-
@@ -5,18 +5,18 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {Base} from "./base.mjs";
9
- import {isString} from "./is.mjs";
10
- import {MediaType, parseMediaType} from "./mediatype.mjs";
11
- import {validateBoolean, validateInstance, validateString} from "./validate.mjs";
12
- import {instanceSymbol} from '../constants.mjs';
13
- export {DataUrl, parseDataURL}
8
+ import { Base } from "./base.mjs";
9
+ import { isString } from "./is.mjs";
10
+ import { MediaType, parseMediaType } from "./mediatype.mjs";
11
+ import { validateBoolean, validateInstance, validateString } from "./validate.mjs";
12
+ import { instanceSymbol } from "../constants.mjs";
13
+ export { DataUrl, parseDataURL };
14
14
 
15
15
  /**
16
16
  * @private
17
17
  * @type {symbol}
18
18
  */
19
- const internal = Symbol('internal');
19
+ const internal = Symbol("internal");
20
20
 
21
21
  /**
22
22
  * You can create an object via the monster namespace `new Monster.Types.DataUrl()`.
@@ -29,7 +29,6 @@ const internal = Symbol('internal');
29
29
  * @see https://datatracker.ietf.org/doc/html/rfc2397
30
30
  */
31
31
  class DataUrl extends Base {
32
-
33
32
  /**
34
33
  *
35
34
  * @param {String} content
@@ -46,10 +45,8 @@ class DataUrl extends Base {
46
45
  this[internal] = {
47
46
  content: validateString(content),
48
47
  mediatype: validateInstance(mediatype, MediaType),
49
- base64: validateBoolean(base64 === undefined ? true : base64)
50
- }
51
-
52
-
48
+ base64: validateBoolean(base64 === undefined ? true : base64),
49
+ };
53
50
  }
54
51
 
55
52
  /**
@@ -61,7 +58,6 @@ class DataUrl extends Base {
61
58
  return Symbol.for("@schukai/monster/types/data-url");
62
59
  }
63
60
 
64
-
65
61
  get content() {
66
62
  return this[internal].base64 ? atob(this[internal].content) : this[internal].content;
67
63
  }
@@ -70,25 +66,22 @@ class DataUrl extends Base {
70
66
  return this[internal].mediatype;
71
67
  }
72
68
 
73
-
74
69
  /**
75
70
  *
76
71
  * @return {string}
77
72
  * @see https://datatracker.ietf.org/doc/html/rfc2397
78
73
  */
79
74
  toString() {
80
-
81
75
  let content = this[internal].content;
82
76
 
83
77
  if (this[internal].base64 === true) {
84
- content = ';base64,' + content;
78
+ content = `;base64,${content}`;
85
79
  } else {
86
- content = ',' + encodeURIComponent(content);
80
+ content = `,${encodeURIComponent(content)}`;
87
81
  }
88
82
 
89
- return 'data:' + this[internal].mediatype.toString() + content;
83
+ return `data:${this[internal].mediatype.toString()}${content}`;
90
84
  }
91
-
92
85
  }
93
86
 
94
87
  /**
@@ -112,31 +105,30 @@ class DataUrl extends Base {
112
105
  * @memberOf Monster.Types
113
106
  */
114
107
  function parseDataURL(dataurl) {
115
-
116
108
  validateString(dataurl);
117
109
 
118
110
  dataurl = dataurl.trim();
119
111
 
120
- if (dataurl.substring(0, 5) !== 'data:') {
121
- throw new TypeError('incorrect or missing data protocol')
112
+ if (dataurl.substring(0, 5) !== "data:") {
113
+ throw new TypeError("incorrect or missing data protocol");
122
114
  }
123
115
 
124
116
  dataurl = dataurl.substring(5);
125
117
 
126
- let p = dataurl.indexOf(',');
118
+ let p = dataurl.indexOf(",");
127
119
  if (p === -1) {
128
- throw new TypeError('malformed data url')
120
+ throw new TypeError("malformed data url");
129
121
  }
130
122
 
131
123
  let content = dataurl.substring(p + 1);
132
124
  let mediatypeAndBase64 = dataurl.substring(0, p).trim();
133
- let mediatype = 'text/plain;charset=US-ASCII';
125
+ let mediatype = "text/plain;charset=US-ASCII";
134
126
  let base64Flag = false;
135
127
 
136
128
  if (mediatypeAndBase64 !== "") {
137
129
  mediatype = mediatypeAndBase64;
138
- if (mediatypeAndBase64.endsWith('base64')) {
139
- let i = mediatypeAndBase64.lastIndexOf(';');
130
+ if (mediatypeAndBase64.endsWith("base64")) {
131
+ let i = mediatypeAndBase64.lastIndexOf(";");
140
132
  mediatype = mediatypeAndBase64.substring(0, i);
141
133
  base64Flag = true;
142
134
  } else {
@@ -1,5 +1,3 @@
1
-
2
-
3
1
  /**
4
2
  * Copyright schukai GmbH and contributors 2022. All Rights Reserved.
5
3
  * Node module: @schukai/monster
@@ -7,10 +5,9 @@
7
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
8
6
  */
9
7
 
8
+ import { validateFunction, validateObject, validateString } from "./validate.mjs";
10
9
 
11
- import {validateFunction, validateObject, validateString} from "./validate.mjs";
12
-
13
- export {getGlobal, getGlobalObject, getGlobalFunction}
10
+ export { getGlobal, getGlobalObject, getGlobalFunction };
14
11
 
15
12
  /**
16
13
  * @type {objec}
@@ -23,28 +20,27 @@ let globalReference;
23
20
  * @throws {Error} unsupported environment.
24
21
  */
25
22
  (function () {
26
-
27
- if (typeof globalThis === 'object') {
23
+ if (typeof globalThis === "object") {
28
24
  globalReference = globalThis;
29
25
  return;
30
26
  }
31
27
 
32
- if (typeof self !== 'undefined') {
28
+ if (typeof self !== "undefined") {
33
29
  globalReference = self;
34
30
  return;
35
- } else if (typeof window !== 'undefined') {
31
+ } else if (typeof window !== "undefined") {
36
32
  globalReference = window;
37
33
  return;
38
34
  }
39
35
 
40
- Object.defineProperty(Object.prototype, '__monster__', {
36
+ Object.defineProperty(Object.prototype, "__monster__", {
41
37
  get: function () {
42
38
  return this;
43
39
  },
44
- configurable: true
40
+ configurable: true,
45
41
  });
46
42
 
47
- if (typeof __monster__ === 'object') {
43
+ if (typeof __monster__ === "object") {
48
44
  __monster__.globalThis = __monster__;
49
45
  delete Object.prototype.__monster__;
50
46
 
@@ -53,15 +49,11 @@ let globalReference;
53
49
  }
54
50
 
55
51
  try {
56
- globalReference = Function('return this')();
57
- } catch (e) {
58
-
59
- }
52
+ globalReference = Function("return this")();
53
+ } catch (e) {}
60
54
 
61
- throw new Error("unsupported environment.")
62
-
63
-
64
- }());
55
+ throw new Error("unsupported environment.");
56
+ })();
65
57
 
66
58
  /**
67
59
  * Return globalThis
@@ -112,7 +104,7 @@ function getGlobal() {
112
104
  function getGlobalObject(name) {
113
105
  validateString(name);
114
106
  let o = globalReference?.[name];
115
- if (typeof o === 'undefined') throw new Error('the object ' + name + ' is not defined');
107
+ if (typeof o === "undefined") throw new Error(`the object ${name} is not defined`);
116
108
  validateObject(o);
117
109
  return o;
118
110
  }
@@ -150,11 +142,7 @@ function getGlobalObject(name) {
150
142
  function getGlobalFunction(name) {
151
143
  validateString(name);
152
144
  let f = globalReference?.[name];
153
- if (typeof f === 'undefined') throw new Error('the function ' + name + ' is not defined');
145
+ if (typeof f === "undefined") throw new Error(`the function ${name} is not defined`);
154
146
  validateFunction(f);
155
147
  return f;
156
148
  }
157
-
158
-
159
-
160
-