@schukai/monster 3.7.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schukai/monster",
3
- "version": "3.7.0",
3
+ "version": "3.8.0",
4
4
  "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
5
5
  "keywords": [
6
6
  "framework",
@@ -6,9 +6,9 @@
6
6
  */
7
7
 
8
8
  import { Base } from "../types/base.mjs";
9
- import { isArray, isInteger, isObject, isPrimitive } from "../types/is.mjs";
9
+ import { isArray, isInteger, isObject, isPrimitive, isString } from "../types/is.mjs";
10
10
  import { Stack } from "../types/stack.mjs";
11
- import { validateInteger, validateString } from "../types/validate.mjs";
11
+ import { validateInteger, validateBoolean, validateString } from "../types/validate.mjs";
12
12
 
13
13
  export { Pathfinder, DELIMITER, WILDCARD };
14
14
 
@@ -103,7 +103,7 @@ class Pathfinder extends Base {
103
103
 
104
104
  /**
105
105
  *
106
- * @param {string} path
106
+ * @param {string|array} path
107
107
  * @since 1.4.0
108
108
  * @returns {*}
109
109
  * @throws {TypeError} unsupported type
@@ -113,12 +113,12 @@ class Pathfinder extends Base {
113
113
  * @throws {Error} unsupported action for this data type
114
114
  */
115
115
  getVia(path) {
116
- return getValueViaPath.call(this, this.object, validateString(path));
116
+ return getValueViaPath.call(this, this.object, path);
117
117
  }
118
118
 
119
119
  /**
120
120
  *
121
- * @param {string} path
121
+ * @param {string|array} path
122
122
  * @param {*} value
123
123
  * @returns {Pathfinder}
124
124
  * @since 1.4.0
@@ -128,7 +128,6 @@ class Pathfinder extends Base {
128
128
  * @throws {Error} unsupported action for this data type
129
129
  */
130
130
  setVia(path, value) {
131
- validateString(path);
132
131
  setValueViaPath.call(this, this.object, path, value);
133
132
  return this;
134
133
  }
@@ -136,7 +135,7 @@ class Pathfinder extends Base {
136
135
  /**
137
136
  * Delete Via Path
138
137
  *
139
- * @param {string} path
138
+ * @param {string|array} path
140
139
  * @returns {Pathfinder}
141
140
  * @since 1.6.0
142
141
  * @throws {TypeError} unsupported type
@@ -145,14 +144,13 @@ class Pathfinder extends Base {
145
144
  * @throws {Error} unsupported action for this data type
146
145
  */
147
146
  deleteVia(path) {
148
- validateString(path);
149
147
  deleteValueViaPath.call(this, this.object, path);
150
148
  return this;
151
149
  }
152
150
 
153
151
  /**
154
152
  *
155
- * @param {string} path
153
+ * @param {string|array} path
156
154
  * @return {bool}
157
155
  * @throws {TypeError} unsupported type
158
156
  * @throws {TypeError} value is not a string
@@ -160,7 +158,6 @@ class Pathfinder extends Base {
160
158
  * @since 1.4.0
161
159
  */
162
160
  exists(path) {
163
- validateString(path);
164
161
  try {
165
162
  getValueViaPath.call(this, this.object, path, true);
166
163
  return true;
@@ -173,8 +170,8 @@ class Pathfinder extends Base {
173
170
  /**
174
171
  *
175
172
  * @param {*} subject
176
- * @param {string} path
177
- * @param {string} check
173
+ * @param {string|array} path
174
+ * @param {boolean} check
178
175
  * @return {Map}
179
176
  * @throws {TypeError} unsupported type
180
177
  * @throws {Error} the journey is not at its end
@@ -182,8 +179,17 @@ class Pathfinder extends Base {
182
179
  * @private
183
180
  */
184
181
  function iterate(subject, path, check) {
182
+ if (check === undefined) {
183
+ check = false;
184
+ }
185
+ validateBoolean(check);
186
+
185
187
  const result = new Map();
186
188
 
189
+ if (isArray(path)) {
190
+ path = path.join(DELIMITER);
191
+ }
192
+
187
193
  if (isObject(subject) || isArray(subject)) {
188
194
  for (const [key, value] of Object.entries(subject)) {
189
195
  result.set(key, getValueViaPath.call(this, value, path, check));
@@ -199,7 +205,7 @@ function iterate(subject, path, check) {
199
205
  /**
200
206
  *
201
207
  * @param {*} subject
202
- * @param [string} path
208
+ * @param [string|array} path
203
209
  * @param [boolean} check
204
210
  * @returns {*}
205
211
  * @throws {TypeError} unsupported type
@@ -208,11 +214,24 @@ function iterate(subject, path, check) {
208
214
  * @private
209
215
  */
210
216
  function getValueViaPath(subject, path, check) {
211
- if (path === "") {
212
- return subject;
217
+ if (check === undefined) {
218
+ check = false;
219
+ }
220
+ validateBoolean(check);
221
+
222
+ if (!(isArray(path) || isString(path))) {
223
+ throw new Error("type error: path must be a string or an array");
224
+ }
225
+
226
+ let parts;
227
+ if (isString(path)) {
228
+ if (path === "") {
229
+ return subject;
230
+ }
231
+
232
+ parts = path.split(DELIMITER);
213
233
  }
214
234
 
215
- let parts = path.split(DELIMITER);
216
235
  let current = parts.shift();
217
236
 
218
237
  if (current === this.wildCard) {
@@ -261,9 +280,9 @@ function getValueViaPath(subject, path, check) {
261
280
 
262
281
  /**
263
282
  *
264
- * @param object
265
- * @param path
266
- * @param value
283
+ * @param {object} subject
284
+ * @param {string|array} path
285
+ * @param {*} value
267
286
  * @returns {void}
268
287
  * @throws {TypeError} unsupported type
269
288
  * @throws {TypeError} unsupported type
@@ -271,10 +290,22 @@ function getValueViaPath(subject, path, check) {
271
290
  * @throws {Error} unsupported action for this data type
272
291
  * @private
273
292
  */
274
- function setValueViaPath(object, path, value) {
275
- validateString(path);
293
+ function setValueViaPath(subject, path, value) {
294
+ if (!(isArray(path) || isString(path))) {
295
+ throw new Error("type error: path must be a string or an array");
296
+ }
297
+
298
+ let parts;
299
+ if (isArray(path)) {
300
+ if (path.length === 0) {
301
+ return subject;
302
+ }
303
+
304
+ parts = path;
305
+ } else {
306
+ parts = path.split(DELIMITER);
307
+ }
276
308
 
277
- let parts = path.split(DELIMITER);
278
309
  let last = parts.pop();
279
310
  let subpath = parts.join(DELIMITER);
280
311
 
@@ -282,7 +313,7 @@ function setValueViaPath(object, path, value) {
282
313
  let current = subpath;
283
314
  while (true) {
284
315
  try {
285
- getValueViaPath.call(this, object, current, true);
316
+ getValueViaPath.call(this, subject, current, true);
286
317
  break;
287
318
  } catch (e) {}
288
319
 
@@ -304,13 +335,13 @@ function setValueViaPath(object, path, value) {
304
335
  }
305
336
  }
306
337
 
307
- setValueViaPath.call(this, object, current, obj);
338
+ setValueViaPath.call(this, subject, current, obj);
308
339
  }
309
340
 
310
- let anchor = getValueViaPath.call(this, object, subpath);
341
+ let anchor = getValueViaPath.call(this, subject, subpath);
311
342
 
312
- if (!(isObject(object) || isArray(object))) {
313
- throw TypeError(`unsupported type: ${typeof object}`);
343
+ if (!(isObject(subject) || isArray(subject))) {
344
+ throw TypeError(`unsupported type: ${typeof subject}`);
314
345
  }
315
346
 
316
347
  if (anchor instanceof Map || anchor instanceof WeakMap) {
@@ -349,8 +380,8 @@ function assignProperty(object, key, value) {
349
380
 
350
381
  /**
351
382
  *
352
- * @param object
353
- * @param path
383
+ * @param {object} subject
384
+ * @param {string} path
354
385
  * @returns {void}
355
386
  * @throws {TypeError} unsupported type
356
387
  * @throws {TypeError} unsupported type
@@ -360,12 +391,26 @@ function assignProperty(object, key, value) {
360
391
  * @since 1.6.0
361
392
  * @private
362
393
  */
363
- function deleteValueViaPath(object, path) {
364
- const parts = path.split(DELIMITER);
394
+ function deleteValueViaPath(subject, path) {
395
+ if (!(isArray(path) || isString(path))) {
396
+ throw new Error("type error: path must be a string or an array");
397
+ }
398
+
399
+ let parts;
400
+ if (isArray(path)) {
401
+ if (path.length === 0) {
402
+ return subject;
403
+ }
404
+
405
+ parts = path;
406
+ } else {
407
+ parts = path.split(DELIMITER);
408
+ }
409
+
365
410
  let last = parts.pop();
366
411
  const subpath = parts.join(DELIMITER);
367
412
 
368
- const anchor = getValueViaPath.call(this, object, subpath);
413
+ const anchor = getValueViaPath.call(this, subject, subpath);
369
414
 
370
415
  if (anchor instanceof Map) {
371
416
  anchor.delete(last);
@@ -33,7 +33,7 @@ const KEY_CONTEXT = "context";
33
33
  const stackSymbol = Symbol("stack");
34
34
 
35
35
  /**
36
- * With the focusmanager the focus can be stored in a document, recalled and moved.
36
+ * With the focus manager the focus can be stored in a document, recalled and moved.
37
37
  *
38
38
  * @license AGPLv3
39
39
  * @since 1.25.0
@@ -20,12 +20,13 @@ const DEFAULT_LANGUAGE = "en";
20
20
  /**
21
21
  * With this function you can read the language version set by the document.
22
22
  * For this the attribute `lang` in the html tag is read. If no attribute is set, `en` is used as default.
23
+ * Alternatively, the language version of the browser is used.
23
24
  *
24
25
  * ```html
25
26
  * <html lang="en">
26
27
  * ```
27
28
  *
28
- * You can call the function via the monster namespace `new Monster.DOM.getLocaleOfDocument()`.
29
+ * You can call the function via `getLocaleOfDocument()`.
29
30
  *
30
31
  * @license AGPLv3
31
32
  * @since 1.13.0
@@ -182,22 +182,11 @@ class Locale extends Base {
182
182
  *
183
183
  * Limitations: The regex cannot handle multiple variants or private.
184
184
  *
185
- * You can call the method via the monster namespace `Monster.I18n.createLocale()`.
185
+ * You can call the method via this function individually:
186
186
  *
187
- * ```
188
- * <script type="module">
189
- * import {Monster} from '@schukai/monster/source/monster.mjs';
190
- * new Monster.I18n.createLocale()
191
- * </script>
192
- * ```
193
- *
194
- * Alternatively, you can also integrate this function individually.
195
- *
196
- * ```
197
- * <script type="module">
187
+ * ```javascript
198
188
  * import {createLocale} from '@schukai/monster/source/i18n/locale.mjs';
199
189
  * createLocale()
200
- * </script>
201
190
  * ```
202
191
  *
203
192
  * RFC
@@ -112,9 +112,9 @@ class Translations extends Base {
112
112
  * Set a text for a key
113
113
  *
114
114
  * ```
115
- * translations.setText("text1": "Make my day!");
115
+ * translations.setText("text1", "Make my day!");
116
116
  * // plural rules
117
- * translations.setText("text6": {
117
+ * translations.setText("text6", {
118
118
  * "zero": "There are no files on Disk.",
119
119
  * "one": "There is one file on Disk.",
120
120
  * "other": "There are files on Disk."
@@ -142,7 +142,7 @@ function getMonsterVersion() {
142
142
  }
143
143
 
144
144
  /** don't touch, replaced by make with package.json version */
145
- monsterVersion = new Version("3.7.0");
145
+ monsterVersion = new Version("3.8.0");
146
146
 
147
147
  return monsterVersion;
148
148
  }
@@ -7,7 +7,7 @@ describe('Monster', function () {
7
7
  let monsterVersion
8
8
 
9
9
  /** don´t touch, replaced by make with package.json version */
10
- monsterVersion = new Version("3.7.0")
10
+ monsterVersion = new Version("3.8.0")
11
11
 
12
12
  let m = getMonsterVersion();
13
13