diff --git a/application/source/data/transformer.mjs b/application/source/data/transformer.mjs index 09b5f981dd830bf09e6c57b2bfe25e893b1f4e86..235e975ea5d31df2bf5f3cc491db285f29fdcc71 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 1bb7aa2ffd66ff6ec9bb84a4704ec897b7b2e27d..65e6e4d6324e0702846d2190de392b70f98558c4 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],