@schukai/monster 3.15.0 → 3.16.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.15.0",
3
+ "version": "3.16.0",
4
4
  "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
5
5
  "keywords": [
6
6
  "framework",
@@ -5,6 +5,7 @@
5
5
  * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
6
  */
7
7
 
8
+ import {getLocaleOfDocument} from "../dom/locale.mjs";
8
9
  import {Base} from "../types/base.mjs";
9
10
  import {getGlobal, getGlobalObject} from "../types/global.mjs";
10
11
  import {ID} from "../types/id.mjs";
@@ -169,6 +170,11 @@ function transform(value) {
169
170
  let element;
170
171
  let attribute;
171
172
  let translations;
173
+ let date;
174
+ let locale;
175
+ let timestamp;
176
+ let map;
177
+ let keyValue;
172
178
 
173
179
  switch (this.command) {
174
180
  case "static":
@@ -405,25 +411,25 @@ function transform(value) {
405
411
  if (key === undefined) {
406
412
  throw new Error("missing key parameter");
407
413
  }
408
-
414
+
409
415
  // add empty strings
410
- if (isString(key)&&key.trim()==="") {
411
- concat += key;
416
+ if (isString(key) && key.trim() === "") {
417
+ concat += key;
412
418
  continue;
413
419
  }
414
-
420
+
415
421
  if (!pf2.exists(key)) {
416
422
  concat += key;
417
423
  continue;
418
424
  }
419
425
  let v = pf2.getVia(key);
420
- if(!isPrimitive(v)) {
426
+ if (!isPrimitive(v)) {
421
427
  throw new Error("value is not primitive");
422
428
  }
423
429
 
424
430
  concat += v;
425
431
  }
426
-
432
+
427
433
  return concat;
428
434
  case "path":
429
435
  key = args.shift();
@@ -491,6 +497,117 @@ function transform(value) {
491
497
 
492
498
  throw new Error("type not supported");
493
499
 
500
+
501
+ case "map":
502
+ map = new Map();
503
+ while (args.length > 0) {
504
+ keyValue = args.shift();
505
+ if (keyValue === undefined) {
506
+ throw new Error("missing key parameter");
507
+ }
508
+
509
+ keyValue = keyValue.split("=");
510
+ map.set(keyValue[0], keyValue[1]);
511
+ }
512
+
513
+ return map.get(value);
514
+
515
+ case "timestamp":
516
+ date = new Date(value);
517
+ timestamp = date.getTime();
518
+ if (isNaN(timestamp)) {
519
+ throw new Error("invalid date");
520
+ }
521
+ return timestamp;
522
+
523
+ case "time":
524
+ date = new Date(value);
525
+ if (isNaN(date.getTime())) {
526
+ throw new Error("invalid date");
527
+ }
528
+
529
+ try {
530
+ locale = getLocaleOfDocument();
531
+ return date.toLocaleTimeString(locale);
532
+
533
+ } catch (e) {
534
+ throw new Error("unsupported locale or missing format (" + e.message + ")");
535
+ }
536
+
537
+
538
+ case "year":
539
+ date = new Date(value);
540
+ if (isNaN(date.getTime())) {
541
+ throw new Error("invalid date");
542
+ }
543
+
544
+ return date.getFullYear();
545
+
546
+ case "month":
547
+ date = new Date(value);
548
+ if (isNaN(date.getTime())) {
549
+ throw new Error("invalid date");
550
+ }
551
+
552
+ return date.getMonth() + 1;
553
+
554
+ case "day":
555
+ date = new Date(value);
556
+ if (isNaN(date.getTime())) {
557
+ throw new Error("invalid date");
558
+ }
559
+
560
+ return date.getDate();
561
+
562
+ case "weekday":
563
+ date = new Date(value);
564
+ if (isNaN(date.getTime())) {
565
+ throw new Error("invalid date");
566
+ }
567
+
568
+ return date.getDay();
569
+
570
+ case "hour":
571
+ case "hours":
572
+ date = new Date(value);
573
+ if (isNaN(date.getTime())) {
574
+ throw new Error("invalid date");
575
+ }
576
+
577
+ return date.getHours();
578
+
579
+ case "minute":
580
+ case "minutes":
581
+ date = new Date(value);
582
+ if (isNaN(date.getTime())) {
583
+ throw new Error("invalid date");
584
+ }
585
+
586
+ return date.getMinutes();
587
+
588
+ case "second":
589
+ case "seconds":
590
+ date = new Date(value);
591
+ if (isNaN(date.getTime())) {
592
+ throw new Error("invalid date");
593
+ }
594
+
595
+ return date.getSeconds();
596
+
597
+ case "date":
598
+ date = new Date(value);
599
+ if (isNaN(date.getTime())) {
600
+ throw new Error("invalid date");
601
+ }
602
+
603
+ try {
604
+ locale = getLocaleOfDocument();
605
+ return date.toLocaleDateString(locale);
606
+
607
+ } catch (e) {
608
+ throw new Error("unsupported locale or missing format (" + e.message + ")");
609
+ }
610
+
494
611
  case "i18n":
495
612
  case "translation":
496
613
  translations = getDocumentTranslations();
@@ -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.15.0");
145
+ monsterVersion = new Version("3.16.0");
146
146
 
147
147
  return monsterVersion;
148
148
  }
@@ -27,6 +27,17 @@ describe('Transformer', function () {
27
27
  describe('Transformer.run()', function () {
28
28
 
29
29
  [
30
+ ['map:a=4:b=5:c=6', "a", "4"],
31
+ ['date', "2023-02-14", "14.2.2023"],
32
+ ['year', "2023-02-14", 2023],
33
+ ['month', "2023-02-14", 2],
34
+ ['day', "2023-02-14", 14],
35
+ ['weekday', "2023-02-14", 2],
36
+ ['minutes', "2023-02-14 06:12:21", 12],
37
+ ['seconds', "2023-02-14 06:12:21", 21],
38
+ ['hours', "2023-02-14 06:12:21", 6],
39
+ ['time', "2023-02-14 06:12:21", "06:12:21"],
40
+ ['timestamp', "2023-02-14", 1676332800000],
30
41
  ['concat:a.b.c:test:a.b.d', {a: {b: {c: 4, d: 6}}}, "4test6"],
31
42
  ['concat:a.b.c:\\ \\ :a.b.d', {a: {b: {c: 4, d: 6}}}, "4 6"],
32
43
  ['concat:a.b.c:,:a.b.d', {a: {b: {c: 4, d: 6}}}, "4,6"],
@@ -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.15.0")
10
+ monsterVersion = new Version("3.16.0")
11
11
 
12
12
  let m = getMonsterVersion();
13
13