Built-in Functions
TinySystems expressions support JavaScript built-in functions plus custom helpers. This reference covers all available functions.
String Functions
toUpperCase()
Convert string to uppercase:
data:
upper: "{{$.name.toUpperCase()}}"
# "john" → "JOHN"toLowerCase()
Convert string to lowercase:
data:
lower: "{{$.name.toLowerCase()}}"
# "JOHN" → "john"trim()
Remove whitespace from both ends:
data:
trimmed: "{{$.input.trim()}}"
# " hello " → "hello"trimStart() / trimEnd()
Remove whitespace from one end:
data:
leftTrimmed: "{{$.input.trimStart()}}"
rightTrimmed: "{{$.input.trimEnd()}}"substring()
Extract part of a string:
data:
sub: "{{$.text.substring(0, 5)}}" # First 5 characters
rest: "{{$.text.substring(5)}}" # Everything after position 5slice()
Similar to substring with negative index support:
data:
first5: "{{$.text.slice(0, 5)}}"
last3: "{{$.text.slice(-3)}}"split()
Split string into array:
data:
parts: "{{$.csv.split(',')}}"
lines: "{{$.text.split('\\n')}}"replace()
Replace occurrences:
data:
replaced: "{{$.text.replace('old', 'new')}}"
allReplaced: "{{$.text.replace(/old/g, 'new')}}"includes()
Check if string contains substring:
data:
hasWord: "{{$.text.includes('search')}}"startsWith() / endsWith()
Check string boundaries:
data:
startsWithHttp: "{{$.url.startsWith('http')}}"
endsWithJson: "{{$.filename.endsWith('.json')}}"padStart() / padEnd()
Pad string to length:
data:
padded: "{{$.num.toString().padStart(5, '0')}}"
# "42" → "00042"repeat()
Repeat string:
data:
repeated: "{{$.char.repeat(3)}}"
# "x" → "xxx"charAt()
Get character at position:
data:
firstChar: "{{$.text.charAt(0)}}"length
Get string length:
data:
len: "{{$.text.length}}"Number Functions
parseInt()
Parse string to integer:
data:
num: "{{parseInt($.stringNum)}}"
hex: "{{parseInt($.hexString, 16)}}"parseFloat()
Parse string to float:
data:
decimal: "{{parseFloat($.stringFloat)}}"toFixed()
Format to fixed decimal places:
data:
price: "{{$.amount.toFixed(2)}}"
# 19.5 → "19.50"toString()
Convert to string:
data:
str: "{{$.number.toString()}}"
hex: "{{$.number.toString(16)}}"isNaN()
Check if not a number:
data:
valid: "{{!isNaN($.value)}}"isFinite()
Check if finite number:
data:
finite: "{{isFinite($.value)}}"Math Functions
Math.round()
Round to nearest integer:
data:
rounded: "{{Math.round($.value)}}"Math.floor()
Round down:
data:
floored: "{{Math.floor($.value)}}"Math.ceil()
Round up:
data:
ceiled: "{{Math.ceil($.value)}}"Math.abs()
Absolute value:
data:
absolute: "{{Math.abs($.value)}}"Math.min() / Math.max()
Find minimum/maximum:
data:
min: "{{Math.min($.a, $.b, $.c)}}"
max: "{{Math.max(...$.values)}}"Math.pow()
Exponentiation:
data:
squared: "{{Math.pow($.value, 2)}}"
# Or: "{{$.value ** 2}}"Math.sqrt()
Square root:
data:
sqrt: "{{Math.sqrt($.value)}}"Math.random()
Random number (0-1):
data:
random: "{{Math.random()}}"
randomInt: "{{Math.floor(Math.random() * 100)}}"Math.trunc()
Remove decimal part:
data:
integer: "{{Math.trunc($.value)}}"Math.sign()
Get sign (-1, 0, or 1):
data:
sign: "{{Math.sign($.value)}}"Array Functions
length
Get array length:
data:
count: "{{$.items.length}}"map()
Transform each element:
data:
ids: "{{$.users.map(u => u.id)}}"
doubled: "{{$.numbers.map(n => n * 2)}}"filter()
Select matching elements:
data:
active: "{{$.items.filter(i => i.active)}}"
positive: "{{$.numbers.filter(n => n > 0)}}"find()
Find first match:
data:
admin: "{{$.users.find(u => u.role === 'admin')}}"findIndex()
Find index of first match:
data:
adminIndex: "{{$.users.findIndex(u => u.role === 'admin')}}"some()
Check if any match:
data:
hasAdmin: "{{$.users.some(u => u.role === 'admin')}}"every()
Check if all match:
data:
allActive: "{{$.users.every(u => u.active)}}"reduce()
Aggregate values:
data:
sum: "{{$.numbers.reduce((a, b) => a + b, 0)}}"
grouped: "{{$.items.reduce((acc, item) => ({...acc, [item.type]: [...(acc[item.type] || []), item]}), {})}}"sort()
Sort array:
data:
sorted: "{{$.items.sort((a, b) => a.name.localeCompare(b.name))}}"
byNum: "{{$.numbers.sort((a, b) => a - b)}}"reverse()
Reverse array:
data:
reversed: "{{$.items.reverse()}}"slice()
Get subset:
data:
first5: "{{$.items.slice(0, 5)}}"
last3: "{{$.items.slice(-3)}}"concat()
Combine arrays:
data:
combined: "{{$.arr1.concat($.arr2)}}"join()
Join to string:
data:
csv: "{{$.items.join(',')}}"includes()
Check if contains value:
data:
hasValue: "{{$.items.includes('target')}}"indexOf()
Find index of value:
data:
index: "{{$.items.indexOf('target')}}"flat()
Flatten nested arrays:
data:
flattened: "{{$.nested.flat()}}"
deepFlat: "{{$.deep.flat(Infinity)}}"flatMap()
Map and flatten:
data:
allTags: "{{$.items.flatMap(i => i.tags)}}"Array.isArray()
Check if array:
data:
isArr: "{{Array.isArray($.value)}}"Array.from()
Create array from iterable:
data:
arr: "{{Array.from($.set)}}"Spread operator
data:
unique: "{{[...new Set($.items)]}}"
merged: "{{[...$.arr1, ...$.arr2]}}"Object Functions
Object.keys()
Get object keys:
data:
keys: "{{Object.keys($.obj)}}"Object.values()
Get object values:
data:
values: "{{Object.values($.obj)}}"Object.entries()
Get key-value pairs:
data:
entries: "{{Object.entries($.obj)}}"Object.fromEntries()
Create object from pairs:
data:
obj: "{{Object.fromEntries($.pairs)}}"Object.assign()
Merge objects:
data:
merged: "{{Object.assign({}, $.obj1, $.obj2)}}"Spread operator
data:
merged: "{{...$.defaults, ...$.overrides}}"
extended: "{{...$.original, newField: 'value'}}"hasOwnProperty()
Check property existence:
data:
hasId: "{{$.obj.hasOwnProperty('id')}}"Date Functions
Date.now()
Current timestamp (milliseconds):
data:
timestamp: "{{Date.now()}}"new Date()
Create date object:
data:
date: "{{new Date()}}"
fromTimestamp: "{{new Date($.timestamp)}}"
fromString: "{{new Date($.dateString)}}"toISOString()
ISO 8601 format:
data:
iso: "{{new Date($.timestamp).toISOString()}}"toLocaleDateString()
Locale date string:
data:
local: "{{new Date($.timestamp).toLocaleDateString()}}"getTime()
Get timestamp from date:
data:
ms: "{{new Date($.dateString).getTime()}}"Date.parse()
Parse date string to timestamp:
data:
timestamp: "{{Date.parse($.dateString)}}"JSON Functions
JSON.stringify()
Convert to JSON string:
data:
json: "{{JSON.stringify($.obj)}}"
pretty: "{{JSON.stringify($.obj, null, 2)}}"JSON.parse()
Parse JSON string:
data:
obj: "{{JSON.parse($.jsonString)}}"Type Checking
typeof
Get type:
data:
type: "{{typeof $.value}}"
isString: "{{typeof $.value === 'string'}}"instanceof
Check instance:
data:
isDate: "{{$.value instanceof Date}}"
isArray: "{{$.value instanceof Array}}"Logical Operators
Ternary (?😃
data:
result: "{{$.condition ? 'yes' : 'no'}}"Nullish coalescing (??)
data:
value: "{{$.value ?? 'default'}}"Optional chaining (?.)
data:
safe: "{{$.nested?.deeply?.value}}"Logical OR (||)
data:
fallback: "{{$.value || 'default'}}"Logical AND (&&)
data:
conditional: "{{$.enabled && $.value}}"Comparison Operators
data:
equal: "{{$.a === $.b}}"
notEqual: "{{$.a !== $.b}}"
greater: "{{$.a > $.b}}"
greaterOrEqual: "{{$.a >= $.b}}"
less: "{{$.a < $.b}}"
lessOrEqual: "{{$.a <= $.b}}"Function Reference Table
| Category | Function | Description |
|---|---|---|
| String | toUpperCase() | Convert to uppercase |
toLowerCase() | Convert to lowercase | |
trim() | Remove whitespace | |
split() | Split into array | |
replace() | Replace text | |
includes() | Check contains | |
startsWith() | Check prefix | |
substring() | Extract portion | |
| Number | parseInt() | Parse integer |
parseFloat() | Parse decimal | |
toFixed() | Format decimals | |
| Math | Math.round() | Round number |
Math.floor() | Round down | |
Math.ceil() | Round up | |
Math.min() | Find minimum | |
Math.max() | Find maximum | |
Math.abs() | Absolute value | |
| Array | map() | Transform elements |
filter() | Select elements | |
reduce() | Aggregate values | |
find() | Find first match | |
sort() | Order elements | |
slice() | Get subset | |
join() | Join to string | |
| Object | Object.keys() | Get keys |
Object.values() | Get values | |
Object.entries() | Get pairs | |
| JSON | JSON.stringify() | To JSON string |
JSON.parse() | Parse JSON | |
| Date | Date.now() | Current timestamp |
toISOString() | ISO format |
Next Steps
- Expression Syntax - Syntax reference
- Data Transformation - Transformation patterns
- Ports and Messages - Message structure