@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,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
-