The Transformer class is used to transform data. The transformation is defined as a string.

import {Transformer} from '@schukai/monster/source/data/transformer.mjs';

const transformer = new Transformer("tolower")
// ↦ hello

The following transformations are available:

callfunction:param1:param2:…Calling a callback function. The function can be defined in three places: either globally, in the context addCallback or in the passed object
concatpath or static:path or static:…This function concatenates the values of the passed paths. If no value in the path is found, the path is used as a static value.
containsChecks if an array or string contains a value (since 3.17)
currencymaximumFractionDigits:roundingIncrementmoneyConvert a currency and amount to a local string (since 3.17)
dateConvert a date string to a localized date string (since 3.16)
datetimeConvert a date string to a localized date-time string (since 3.17)
dayReturns the day of a date (since 3.16)
debugThe passed value is output (console) and returned
defaultvalue:type??If the value is undefined the first argument is returned, otherwise the value. The third optional parameter specifies the desired type. If no type is specified, string is used. Valid types are bool, string, int, float, undefined and object. An object default value must be specified as a base64 encoded json string. (since 1.12)
element-by-idplainAll HTML tags are removed (*)
emptyReturn empty String “”
equalsvalueCompare the comparison value with the specified value and return true if they match.
first-keydefaultCan be applied to objects and returns the value of the first key. All keys of the object are fetched and sorted. (since 1.23)
from-base64atobConverts the value from base64
fromjsonType conversion from a JSON string (since 1.12)
has-entrieshasentriesChecks whether an array or an object has elements. (since 3.17)
hourshourReturns the hours of a date (since 3.16)
ifstatement1:statement2?Is the ternary operator, the first parameter is the valid statement, the second is the false part. To use the current value in the queue, you can set the value keyword. On the other hand, if you want to have the static string “value”, you have to put one backslash \ in front of it and write value. the follow values are true: ‘on’, true, ‘true’. If you want to have a space, you also have to write \ in front of the space.
indexkey:defaultproperty, keyFetches a value from an object, an array, a map or a set
is-arrayisarrayChecks if the value is a array (since 3.17)
is-floatisfloatChecks if the value is a float (since 3.17)
is-nullisnullChecks if the value is null (since 3.17)
is-numberisnumberChecks if the value is a number (since 3.17)
is-objectisobjectChecks if the value is a object (since 3.17)
is-setissetChecks if the value is undefined and not null (since 3.17)
is-undefinedisundefinedChecks if the value is undefined (since 3.17)
last-keydefaultCan be applied to objects and returns the value of the last key. All keys of the object are fetched and sorted. (since 1.23)
lengthcountLength of the string or entries of an array or object
mapkey:value:key:value….Map a value with an existing mapping (since 3.16)
minutesminuteReturns the minutes of a date (since 3.16)
monthReturns the month of a date (since 3.16)
nopDo nothing
notConverts a bolian value into the opposite one (since 3.17)
nth-keyindex:defaultCan be applied to objects and returns the value of the nth key. All keys of the object are fetched and sorted. (since 1.23)
nth-last-keyindex:defaultCan be applied to objects and returns the value of the nth key from behind. All keys of the object are fetched and sorted. (since 1.23)
path-existspathCheck if the specified path is available in the value (since 1.24)
pathpathThe access to an object is done via a Pathfinder object
plaintextplainAll HTML tags are removed (*)
prefixtextAdds a prefix
rawurlencodeURL coding
secondssecondReturns the seconds of a date (since 3.16)
staticnoneThe Arguments value is used and passed to the value. Special characters \ and : can be quotet by a preceding .
substringstart:lengthReturns a substring
suffixtextAdds a suffix
timeConvert a date string to a localized time string (since 3.16)
timestampConvert a date string to a time stamp (since 3.16)
to-base64base64, btobConverts the value to base64
tointegerType conversion to an integer value
tojsonType conversion to a JSON string (since 1.8)
tolowerstrtolower, tolowercaseThe input value is converted to lowercase letters
tostringType conversion to a string.
toupperstrtoupper, touppercaseThe input value is converted to uppercase letters
translationkey:defaulti18nTranslations can be applied. The translations must be stored in the DOM. (*) To use the current value as key the first parameter must be set to undefined.
trimRemove spaces at the beginning and end
ucfirstFirst character large
ucwordsAny word beginning large
undefinedReturn undefined
uniqidCreates a string with a unique value (**)
weekdayReturns the day of the week of a date (since 3.16)
yearConvert a date string to a year (since 3.16)

(*) for this functionality the extension jsdom must be loaded in the nodejs context.

 // polyfill
if (typeof window !== "object") {
    const {window} = new JSDOM('', {
        url: '',
        pretendToBeVisual: true

    ].forEach(key => (global[key] = window[key]));

(**) for this command the crypt library is necessary in the nodejs context.

import * as Crypto from "@peculiar/webcrypto";

global['crypto'] = new Crypto.Crypto();

With the method setCallback(name, callback, context) you can define your own transformation functions.

The context parameter is optional and can be used to define the context in which the callback function is called. If no context is specified, the global context is used. In the pipe the name of the callback function is used by prefixing it with a call:.

import {Transformer} from '@schukai/monster/source/data/transformer.mjs';

const transformer = new Transformer("call:myCallback");
transformer.setCallback("myCallback", function (value) {
    return value + " world";
console.log("hello")); // hello world