From ef67c1e00b9d6cf2d099f356a354ad99fb4b1ae9 Mon Sep 17 00:00:00 2001
From: Volker Schukai <volker.schukai@schukai.com>
Date: Tue, 28 Feb 2023 15:08:12 +0100
Subject: [PATCH] feat: new is- commands for transformer, not command

---
 application/source/data/transformer.mjs     | 45 +++++++++++++++++++--
 development/test/cases/data/transformer.mjs | 22 ++++++++++
 2 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/application/source/data/transformer.mjs b/application/source/data/transformer.mjs
index 09b5f981d..235e975ea 100644
--- a/application/source/data/transformer.mjs
+++ b/application/source/data/transformer.mjs
@@ -17,6 +17,7 @@ import {
     validateObject,
     validatePrimitive,
     validateString,
+    validateBoolean,
 } from "../types/validate.mjs";
 import {clone} from "../util/clone.mjs";
 import {Pathfinder} from "./pathfinder.mjs";
@@ -186,6 +187,42 @@ function transform(value) {
             validateString(value);
             return value.toLowerCase();
 
+        case "isundefined":
+        case "is-undefined":
+            return value === undefined;
+
+        case "isnull":
+        case "is-null":
+            return value === null;
+
+        case "isset":
+        case "is-set":
+            return value !== undefined && value !== null;
+
+        case "isnumber":
+        case "is-number":
+            return isPrimitive(value) && !isNaN(value);
+
+        case "isinteger":
+        case "is-integer":
+            return isPrimitive(value) && !isNaN(value) && value % 1 === 0;
+
+        case "isfloat":
+        case "is-float":
+            return isPrimitive(value) && !isNaN(value) && value % 1 !== 0;
+
+        case "isobject":
+        case "is-object":
+            return isObject(value);
+
+        case "isarray":
+        case "is-array":
+            return Array.isArray(value);
+
+        case "not":
+            validateBoolean(value);
+            return !value;
+
         case "toupper":
         case "strtoupper":
         case "touppercase":
@@ -497,7 +534,7 @@ function transform(value) {
 
             throw new Error("type not supported");
 
-            
+
         case "map":
             map = new Map();
             while (args.length > 0) {
@@ -505,13 +542,13 @@ function transform(value) {
                 if (keyValue === undefined) {
                     throw new Error("missing key parameter");
                 }
-                
+
                 keyValue = keyValue.split("=");
                 map.set(keyValue[0], keyValue[1]);
             }
-            
+
             return map.get(value);
-            
+
         case "timestamp":
             date = new Date(value);
             timestamp = date.getTime();
diff --git a/development/test/cases/data/transformer.mjs b/development/test/cases/data/transformer.mjs
index 1bb7aa2ff..65e6e4d63 100644
--- a/development/test/cases/data/transformer.mjs
+++ b/development/test/cases/data/transformer.mjs
@@ -24,9 +24,31 @@ describe('Transformer', function () {
 
     });
 
+
     describe('Transformer.run()', function () {
 
         [
+            ['isundefined', "a", false],
+            ['isundefined', null, false],
+            ['isundefined', undefined, true],
+            ['isnull', "a", false],
+            ['isnull', null, true],
+            ['isset', null, false],
+            ['isset', undefined, false],
+            ['isset', "", true],
+            ['isnumber', "a", false],
+            ['isnumber', 4, true],
+            ['isnumber', 4.5, true],
+            ['isinteger', 4.5, false],
+            ['isinteger', 4, true],
+            ['isfloat', 5.6, true],
+            ['isfloat', 5, false],
+            ['isobject', 4, false],
+            ['isobject', {}, true],
+            ['isarray', [{}], true],
+            ['isarray', "a", false],
+            ['not', true, false],
+            ['not', false, true],
             ['map:a=4:b=5:c=6', "a", "4"],
             ['date', "2023-02-14", "14.2.2023"],
             ['year', "2023-02-14", 2023],
-- 
GitLab