@schukai/monster 3.4.2 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
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
-