@schukai/monster 3.5.0 → 3.8.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 +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,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 {getGlobal} from "../types/global.mjs";
9
- import {validateString} from "../types/validate.mjs";
8
+ import { getGlobal } from "../types/global.mjs";
9
+ import { validateString } from "../types/validate.mjs";
10
10
 
11
- export {getDocument, getWindow, getDocumentFragmentFromString}
11
+ export { getDocument, getWindow, getDocumentFragmentFromString };
12
12
 
13
13
  /**
14
14
  * This method fetches the document object
@@ -48,9 +48,9 @@ export {getDocument, getWindow, getDocumentFragmentFromString}
48
48
  * @throws {Error} not supported environment
49
49
  */
50
50
  function getDocument() {
51
- let document = getGlobal()?.['document'];
52
- if (typeof document !== 'object') {
53
- throw new Error("not supported environment")
51
+ let document = getGlobal()?.["document"];
52
+ if (typeof document !== "object") {
53
+ throw new Error("not supported environment");
54
54
  }
55
55
 
56
56
  return document;
@@ -70,7 +70,7 @@ function getDocument() {
70
70
  * });
71
71
  *
72
72
  * getGlobal()['window']=window;
73
- *
73
+ *
74
74
  * [
75
75
  * 'self',
76
76
  * 'document',
@@ -96,15 +96,14 @@ function getDocument() {
96
96
  * @throws {Error} not supported environment
97
97
  */
98
98
  function getWindow() {
99
- let window = getGlobal()?.['window'];
100
- if (typeof window !== 'object') {
101
- throw new Error("not supported environment")
99
+ let window = getGlobal()?.["window"];
100
+ if (typeof window !== "object") {
101
+ throw new Error("not supported environment");
102
102
  }
103
103
 
104
104
  return window;
105
105
  }
106
106
 
107
-
108
107
  /**
109
108
  * This method fetches the document object
110
109
  *
@@ -147,7 +146,7 @@ function getDocumentFragmentFromString(html) {
147
146
  validateString(html);
148
147
 
149
148
  const document = getDocument();
150
- const template = document.createElement('template');
149
+ const template = document.createElement("template");
151
150
  template.innerHTML = html;
152
151
 
153
152
  return template.content;
@@ -5,17 +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 {Base} from "../../types/base.mjs";
10
- import {getGlobal, getGlobalFunction} from "../../types/global.mjs";
11
- import {isFunction} from "../../types/is.mjs";
12
- import {validateInstance, validateString} from "../../types/validate.mjs";
8
+ import { internalSymbol } from "../../constants.mjs";
9
+ import { Base } from "../../types/base.mjs";
10
+ import { getGlobal, getGlobalFunction } from "../../types/global.mjs";
11
+ import { isFunction } from "../../types/is.mjs";
12
+ import { validateInstance, validateString } from "../../types/validate.mjs";
13
13
 
14
- export {Factory}
14
+ export { Factory };
15
15
 
16
16
  /**
17
17
  * A factory for creating worker instances.
18
- *
18
+ *
19
19
  * @license AGPLv3
20
20
  * @since 1.25.0
21
21
  * @copyright schukai GmbH
@@ -23,15 +23,14 @@ export {Factory}
23
23
  * @summary A small factory to create worker
24
24
  */
25
25
  class Factory extends Base {
26
-
27
26
  /**
28
27
  *
29
28
  */
30
29
  constructor() {
31
30
  super();
32
31
  this[internalSymbol] = {
33
- worker: new WeakMap
34
- }
32
+ worker: new WeakMap(),
33
+ };
35
34
  }
36
35
 
37
36
  /**
@@ -43,24 +42,23 @@ class Factory extends Base {
43
42
  * @return {Worker}
44
43
  */
45
44
  createFromURL = function (url, messageHandler, errorHandler) {
46
-
47
45
  if (url instanceof URL) {
48
46
  url = url.toString();
49
47
  }
50
48
 
51
- const workerClass = getGlobalFunction('Worker');
49
+ const workerClass = getGlobalFunction("Worker");
52
50
  var worker = new workerClass(validateString(url));
53
51
 
54
52
  if (isFunction(messageHandler)) {
55
53
  worker.onmessage = (event) => {
56
54
  messageHandler.call(worker, event);
57
- }
55
+ };
58
56
  }
59
57
 
60
58
  if (isFunction(errorHandler)) {
61
59
  worker.onerror = (event) => {
62
60
  errorHandler.call(worker, event);
63
- }
61
+ };
64
62
  }
65
63
 
66
64
  return worker;
@@ -76,16 +74,17 @@ class Factory extends Base {
76
74
  * @see https://developer.mozilla.org/de/docs/Web/API/URL/createObjectURL
77
75
  */
78
76
  createFromScript = function (content, messageHandler, errorHandler) {
79
- const blobFunction = new getGlobalFunction('Blob')
80
- const blob = new blobFunction([validateString(content)], {type: 'script/javascript'});
77
+ const blobFunction = new getGlobalFunction("Blob");
78
+ const blob = new blobFunction([validateString(content)], {
79
+ type: "script/javascript",
80
+ });
81
81
 
82
- const url = getGlobalFunction('URL').createObjectURL(blob);
82
+ const url = getGlobalFunction("URL").createObjectURL(blob);
83
83
  const worker = this.createFromURL(url, messageHandler, errorHandler);
84
84
 
85
- this[internalSymbol]['worker'].set(worker, url);
85
+ this[internalSymbol]["worker"].set(worker, url);
86
86
 
87
87
  return worker;
88
-
89
88
  };
90
89
 
91
90
  /**
@@ -95,19 +94,16 @@ class Factory extends Base {
95
94
  * @return {Monster.DOM.Worker.Factory}
96
95
  */
97
96
  terminate(worker) {
98
-
99
- const workerClass = getGlobalFunction('Worker');
97
+ const workerClass = getGlobalFunction("Worker");
100
98
  validateInstance(worker, workerClass);
101
99
 
102
100
  worker.terminate();
103
101
 
104
- if (this[internalSymbol]['worker'].has(worker)) {
105
- const url = this[internalSymbol]['worker'].get(worker);
102
+ if (this[internalSymbol]["worker"].has(worker)) {
103
+ const url = this[internalSymbol]["worker"].get(worker);
106
104
  URL.revokeObjectURL(url);
107
105
  }
108
106
 
109
107
  return this;
110
108
  }
111
-
112
-
113
109
  }
@@ -10,4 +10,4 @@
10
10
  * @memberOf Monster
11
11
  * @author schukai GmbH
12
12
  */
13
- const ns = {};
13
+ const ns = {};
@@ -5,20 +5,20 @@
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";
8
+ import { internalSymbol } from "../constants.mjs";
9
+ import { extend } from "../data/extend.mjs";
10
10
 
11
- import {Formatter as TextFormatter} from "../text/formatter.mjs";
12
- import {validateInstance, validateString} from "../types/validate.mjs";
13
- import {Translations} from "./translations.mjs";
11
+ import { Formatter as TextFormatter } from "../text/formatter.mjs";
12
+ import { validateInstance, validateString } from "../types/validate.mjs";
13
+ import { Translations } from "./translations.mjs";
14
14
 
15
- export {Formatter}
15
+ export { Formatter };
16
16
 
17
17
  /**
18
18
  * @private
19
19
  * @type {symbol}
20
20
  */
21
- const internalTranslationSymbol = Symbol('internalTranslation')
21
+ const internalTranslationSymbol = Symbol("internalTranslation");
22
22
 
23
23
  /**
24
24
  * The Formatter extends the Text.Formatter with the possibility to replace the key by a translation.
@@ -30,7 +30,6 @@ const internalTranslationSymbol = Symbol('internalTranslation')
30
30
  * @memberOf Monster.I18n
31
31
  */
32
32
  class Formatter extends TextFormatter {
33
-
34
33
  /**
35
34
  * Default values for the markers are `${` and `}`
36
35
  *
@@ -58,13 +57,13 @@ class Formatter extends TextFormatter {
58
57
  callbacks: {
59
58
  i18n: (value) => {
60
59
  return self[internalTranslationSymbol].getText(validateString(value));
61
- }
60
+ },
62
61
  },
63
62
  marker: {
64
- open: ['i18n{', '${'],
65
- close: ['}'],
63
+ open: ["i18n{", "${"],
64
+ close: ["}"],
66
65
  },
67
- })
66
+ });
68
67
  }
69
68
 
70
69
  /**
@@ -77,10 +76,10 @@ class Formatter extends TextFormatter {
77
76
  * @throws {Error} the closing marker is missing
78
77
  */
79
78
  format(text) {
80
- validateString(text)
79
+ validateString(text);
81
80
 
82
- const openMarker = this[internalSymbol]['marker']['open']?.[0];
83
- const closeMarker = this[internalSymbol]['marker']['close']?.[0];
81
+ const openMarker = this[internalSymbol]["marker"]["open"]?.[0];
82
+ const closeMarker = this[internalSymbol]["marker"]["close"]?.[0];
84
83
 
85
84
  if (text.indexOf(openMarker) === 0) {
86
85
  text = text.substring(openMarker.length);
@@ -88,22 +87,19 @@ class Formatter extends TextFormatter {
88
87
  if (text.indexOf(closeMarker) === text.length - closeMarker.length) {
89
88
  text = text.substring(0, text.length - closeMarker.length);
90
89
  } else {
91
- throw new Error("the closing marker is missing")
90
+ throw new Error("the closing marker is missing");
92
91
  }
93
92
  }
94
-
95
- const parts = validateString(text).split('::')
96
- const translationKey = parts.shift().trim(); // key value delimiter
97
- const parameter = parts.join('::').trim();
98
93
 
94
+ const parts = validateString(text).split("::");
95
+ const translationKey = parts.shift().trim(); // key value delimiter
96
+ const parameter = parts.join("::").trim();
99
97
 
100
- let assembledText = openMarker + 'static:' + translationKey + ' | call:i18n';
98
+ let assembledText = `${openMarker}static:${translationKey} | call:i18n`;
101
99
  if (parameter.length > 0) {
102
- assembledText += '::' + parameter;
100
+ assembledText += `::${parameter}`;
103
101
  }
104
102
  assembledText += closeMarker;
105
103
  return super.format(assembledText);
106
104
  }
107
-
108
-
109
105
  }
@@ -5,23 +5,23 @@
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 {validateString} from "../types/validate.mjs";
10
- import {clone} from "../util/clone.mjs";
8
+ import { Base } from "../types/base.mjs";
9
+ import { validateString } from "../types/validate.mjs";
10
+ import { clone } from "../util/clone.mjs";
11
11
 
12
- export {Locale, parseLocale}
12
+ export { Locale, parseLocale };
13
13
 
14
14
  /**
15
15
  * @memberOf Monster.I18n
16
16
  * @type {symbol}
17
17
  */
18
- const propertiesSymbol = Symbol('properties');
18
+ const propertiesSymbol = Symbol("properties");
19
19
 
20
20
  /**
21
21
  * @type {symbol}
22
22
  * @memberOf Monster.I18n
23
23
  */
24
- const localeStringSymbol = Symbol('localeString');
24
+ const localeStringSymbol = Symbol("localeString");
25
25
 
26
26
  /**
27
27
  * The Locale class is a base class for the language classes.
@@ -64,7 +64,6 @@ const localeStringSymbol = Symbol('localeString');
64
64
  * @see https://datatracker.ietf.org/doc/html/rfc3066
65
65
  */
66
66
  class Locale extends Base {
67
-
68
67
  /**
69
68
  * @param {string} language
70
69
  * @param {string} [region]
@@ -78,12 +77,12 @@ class Locale extends Base {
78
77
  super();
79
78
 
80
79
  this[propertiesSymbol] = {
81
- language: (language === undefined) ? undefined : validateString(language),
82
- script: (script === undefined) ? undefined : validateString(script),
83
- region: (region === undefined) ? undefined : validateString(region),
84
- variants: (variants === undefined) ? undefined : validateString(variants),
85
- extlang: (extlang === undefined) ? undefined : validateString(extlang),
86
- privateUse: (privateUse === undefined) ? undefined : validateString(privateUse),
80
+ language: language === undefined ? undefined : validateString(language),
81
+ script: script === undefined ? undefined : validateString(script),
82
+ region: region === undefined ? undefined : validateString(region),
83
+ variants: variants === undefined ? undefined : validateString(variants),
84
+ extlang: extlang === undefined ? undefined : validateString(extlang),
85
+ privateUse: privateUse === undefined ? undefined : validateString(privateUse),
87
86
  };
88
87
 
89
88
  let s = [];
@@ -95,11 +94,10 @@ class Locale extends Base {
95
94
  if (privateUse !== undefined) s.push(privateUse);
96
95
 
97
96
  if (s.length === 0) {
98
- throw new Error('unsupported locale');
97
+ throw new Error("unsupported locale");
99
98
  }
100
99
 
101
- this[localeStringSymbol] = s.join('-');
102
-
100
+ this[localeStringSymbol] = s.join("-");
103
101
  }
104
102
 
105
103
  /**
@@ -151,12 +149,11 @@ class Locale extends Base {
151
149
  return this[propertiesSymbol].privateValue;
152
150
  }
153
151
 
154
-
155
152
  /**
156
153
  * @return {string}
157
154
  */
158
155
  toString() {
159
- return "" + this.localeString;
156
+ return `${this.localeString}`;
160
157
  }
161
158
 
162
159
  /**
@@ -165,10 +162,8 @@ class Locale extends Base {
165
162
  * @return {Monster.I18n.LocaleMap}
166
163
  */
167
164
  getMap() {
168
- return clone(this[propertiesSymbol])
165
+ return clone(this[propertiesSymbol]);
169
166
  }
170
-
171
-
172
167
  }
173
168
 
174
169
  /**
@@ -187,22 +182,11 @@ class Locale extends Base {
187
182
  *
188
183
  * Limitations: The regex cannot handle multiple variants or private.
189
184
  *
190
- * You can call the method via the monster namespace `Monster.I18n.createLocale()`.
191
- *
192
- * ```
193
- * <script type="module">
194
- * import {Monster} from '@schukai/monster/source/monster.mjs';
195
- * new Monster.I18n.createLocale()
196
- * </script>
197
- * ```
198
- *
199
- * Alternatively, you can also integrate this function individually.
185
+ * You can call the method via this function individually:
200
186
  *
201
- * ```
202
- * <script type="module">
187
+ * ```javascript
203
188
  * import {createLocale} from '@schukai/monster/source/i18n/locale.mjs';
204
189
  * createLocale()
205
- * </script>
206
190
  * ```
207
191
  *
208
192
  * RFC
@@ -263,25 +247,30 @@ class Locale extends Base {
263
247
  * @throws {Error} unsupported locale
264
248
  */
265
249
  function parseLocale(locale) {
266
-
267
250
  locale = validateString(locale).replace(/_/g, "-");
268
251
 
269
- let language, region, variants, parts, script, extlang,
270
- regexRegular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)",
271
- regexIrregular = "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)",
272
- regexGrandfathered = "(" + regexIrregular + "|" + regexRegular + ")",
273
- regexPrivateUse = "(x(-[A-Za-z0-9]{1,8})+)",
274
- regexSingleton = "[0-9A-WY-Za-wy-z]",
275
- regexExtension = "(" + regexSingleton + "(-[A-Za-z0-9]{2,8})+)",
276
- regexVariant = "([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})",
277
- regexRegion = "([A-Za-z]{2}|[0-9]{3})",
278
- regexScript = "([A-Za-z]{4})",
279
- regexExtlang = "([A-Za-z]{3}(-[A-Za-z]{3}){0,2})",
280
- regexLanguage = "(([A-Za-z]{2,3}(-" + regexExtlang + ")?)|[A-Za-z]{4}|[A-Za-z]{5,8})",
281
- regexLangtag = "(" + regexLanguage + "(-" + regexScript + ")?" + "(-" + regexRegion + ")?" + "(-" + regexVariant + ")*" + "(-" + regexExtension + ")*" + "(-" + regexPrivateUse + ")?" + ")",
282
- regexLanguageTag = "^(" + regexGrandfathered + "|" + regexLangtag + "|" + regexPrivateUse + ")$",
283
- regex = new RegExp(regexLanguageTag), match;
284
-
252
+ let language;
253
+ let region;
254
+ let variants;
255
+ let parts;
256
+ let script;
257
+ let extlang;
258
+ let regexRegular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)";
259
+ let regexIrregular =
260
+ "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)";
261
+ let regexGrandfathered = `(${regexIrregular}|${regexRegular})`;
262
+ let regexPrivateUse = "(x(-[A-Za-z0-9]{1,8})+)";
263
+ let regexSingleton = "[0-9A-WY-Za-wy-z]";
264
+ let regexExtension = `(${regexSingleton}(-[A-Za-z0-9]{2,8})+)`;
265
+ let regexVariant = "([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})";
266
+ let regexRegion = "([A-Za-z]{2}|[0-9]{3})";
267
+ let regexScript = "([A-Za-z]{4})";
268
+ let regexExtlang = "([A-Za-z]{3}(-[A-Za-z]{3}){0,2})";
269
+ let regexLanguage = `(([A-Za-z]{2,3}(-${regexExtlang})?)|[A-Za-z]{4}|[A-Za-z]{5,8})`;
270
+ let regexLangtag = `(${regexLanguage}(-${regexScript})?(-${regexRegion})?(-${regexVariant})*(-${regexExtension})*(-${regexPrivateUse})?)`;
271
+ let regexLanguageTag = `^(${regexGrandfathered}|${regexLangtag}|${regexPrivateUse})$`;
272
+ let regex = new RegExp(regexLanguageTag);
273
+ let match;
285
274
 
286
275
  if ((match = regex.exec(locale)) !== null) {
287
276
  if (match.index === regex.lastIndex) {
@@ -290,18 +279,17 @@ function parseLocale(locale) {
290
279
  }
291
280
 
292
281
  if (match === undefined || match === null) {
293
- throw new Error('unsupported locale');
282
+ throw new Error("unsupported locale");
294
283
  }
295
284
 
296
285
  if (match[6] !== undefined) {
297
286
  language = match[6];
298
287
 
299
- parts = language.split('-');
288
+ parts = language.split("-");
300
289
  if (parts.length > 1) {
301
290
  language = parts[0];
302
291
  extlang = parts[1];
303
292
  }
304
-
305
293
  }
306
294
 
307
295
  if (match[14] !== undefined) {
@@ -317,5 +305,4 @@ function parseLocale(locale) {
317
305
  }
318
306
 
319
307
  return new Locale(language, region, script, variants, extlang);
320
-
321
308
  }
@@ -10,4 +10,4 @@
10
10
  * @memberOf Monster
11
11
  * @author schukai GmbH
12
12
  */
13
- const ns = {};
13
+ const ns = {};
@@ -5,11 +5,11 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
- import {BaseWithOptions} from "../types/basewithoptions.mjs";
9
- import {Locale} from "./locale.mjs"
10
- import {Translations} from "./translations.mjs"
8
+ import { BaseWithOptions } from "../types/basewithoptions.mjs";
9
+ import { Locale } from "./locale.mjs";
10
+ import { Translations } from "./translations.mjs";
11
11
 
12
- export {Provider}
12
+ export { Provider };
13
13
 
14
14
  /**
15
15
  * A provider makes a translation object available.
@@ -21,7 +21,6 @@ export {Provider}
21
21
  * @see {@link https://datatracker.ietf.org/doc/html/rfc3066}
22
22
  */
23
23
  class Provider extends BaseWithOptions {
24
-
25
24
  /**
26
25
  * @param {Locale|string} locale
27
26
  * @return {Promise}
@@ -33,8 +32,6 @@ class Provider extends BaseWithOptions {
33
32
  } catch (e) {
34
33
  reject(e);
35
34
  }
36
-
37
35
  });
38
36
  }
39
-
40
37
  }
@@ -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 {internalSymbol} from "../../constants.mjs";
9
- import {extend} from "../../data/extend.mjs";
10
- import { getGlobalObject} from "../../types/global.mjs";
11
- import {isString} from "../../types/is.mjs";
12
- import {validateObject, validateString} from "../../types/validate.mjs";
13
- import {parseLocale} from "../locale.mjs";
14
- import {Provider} from "../provider.mjs";
15
- import {Translations} from "../translations.mjs";
8
+ import { internalSymbol } from "../../constants.mjs";
9
+ import { extend } from "../../data/extend.mjs";
10
+ import { getGlobalObject } from "../../types/global.mjs";
11
+ import { isString } from "../../types/is.mjs";
12
+ import { validateObject, validateString } from "../../types/validate.mjs";
13
+ import { parseLocale } from "../locale.mjs";
14
+ import { Provider } from "../provider.mjs";
15
+ import { Translations } from "../translations.mjs";
16
16
 
17
- export {Embed}
17
+ export { Embed };
18
18
 
19
19
  /**
20
20
  * The Embed provider retrieves a JSON file from the given Script Tag.
@@ -28,7 +28,6 @@ export {Embed}
28
28
  * @tutorial i18n-locale-and-formatter
29
29
  */
30
30
  class Embed extends Provider {
31
-
32
31
  /**
33
32
  * ```html
34
33
  * <script id="translations" type="application/json">
@@ -37,8 +36,8 @@ class Embed extends Provider {
37
36
  * }
38
37
  * </script>
39
38
  * ```
40
- *
41
- *
39
+ *
40
+ *
42
41
  * ```javascript
43
42
  * new Embed('translations')
44
43
  * ```
@@ -65,7 +64,6 @@ class Embed extends Provider {
65
64
  * @property {Object} options
66
65
  */
67
66
  this[internalSymbol] = extend({}, super.defaults, this.defaults, validateObject(options));
68
-
69
67
  }
70
68
 
71
69
  /**
@@ -83,17 +81,15 @@ class Embed extends Provider {
83
81
  * @return {Promise}
84
82
  */
85
83
  getTranslations(locale) {
86
-
87
84
  if (isString(locale)) {
88
85
  locale = parseLocale(locale);
89
86
  }
90
87
 
91
88
  return new Promise((resolve, reject) => {
92
-
93
- let text = getGlobalObject('document').getElementById(this.textId);
89
+ let text = getGlobalObject("document").getElementById(this.textId);
94
90
 
95
91
  if (text === null) {
96
- reject(new Error('Text not found'));
92
+ reject(new Error("Text not found"));
97
93
  return;
98
94
  }
99
95
 
@@ -105,21 +101,15 @@ class Embed extends Provider {
105
101
  return;
106
102
  }
107
103
 
108
-
109
104
  if (translations === null) {
110
- reject(new Error('Translations not found or invalid'));
105
+ reject(new Error("Translations not found or invalid"));
111
106
  return;
112
107
  }
113
-
108
+
114
109
  const t = new Translations(locale);
115
- t.assignTranslations(translations)
110
+ t.assignTranslations(translations);
116
111
 
117
112
  resolve(t);
118
-
119
113
  });
120
-
121
114
  }
122
-
123
-
124
115
  }
125
-