Skip to main content
The Value Composer transforms data by chaining together operations. Below is the full catalogue of available operations, grouped by category.
Value Composer

Value Composer in the Data Feed merge step

How operations are configured

A composer slot is a JSON object with a source discriminator. There are three sources you’ll work with: Putting it together — a concat of vendor.name + - + name, the JSON the admin UI emits:
The same recursion shows up everywhere: an if whose then is a concat of two static values, a map whose mapFunction is a get on $item, and so on. The catalogue below documents the parameter names and types each operation expects.

Type compatibility

Every slot has a known output type, and operations declare what they accept:
  • Concrete types (number, string, boolean, array, object) — the input slot must produce that exact type, or the configuration is invalid.
  • Type markers (T, K, V) — polymorphic placeholders. The first input that fills a marker fixes the type for every other slot using the same marker. For example, equals(value: T, compare: T) accepts any type as long as value and compare agree — fill value with a string and compare is constrained to strings too.
The admin UI surfaces type mismatches in the slot’s validation state — slots that can’t yet produce the required type stay highlighted as invalid and the configuration won’t save. There’s no implicit coercion at runtime: a string flowing into a number slot raises an explicit type error rather than getting cast silently. When you actually want a cast, use toString / toNumber / toBoolean so the conversion is part of the chain. See Error handling for what happens when something does slip through.

Operations

Array Operations

count

Returns the number of elements in an array.
number

filter

Returns an array of all elements that satisfy a condition. Access each element of the array with the $item variable.
array<T>

findFirst

Finds and returns the first element of an array that satisfies a condition. Access each element of the array with the $item variable.
T

first

Returns the first element of an array.
T

flatMap

Applies a function to each element of an array, flattens and returns the resulting array. Access each element of the array with the $item variable.
array

join

Joins an array of strings into a single string.
string

map

Applies a function to each element of an array and returns the resulting array. Access each element of the array with the $item variable.
array

merge

Merges an array of scalar values together.
array

slice

Extracts a portion of an array.
array

split

Splits a string into an array of strings given a separator.
array

unique

Removes duplicate values from a scalar array.
array

Comparison Operations

equals

Compares two values.
boolean

greaterThan

Compares two values and returns true if the first is greater than the second.
boolean

isEmpty

Returns whether a value is empty.
boolean

isNull

Returns whether a value is NULL.
boolean

isScalar

Returns whether a value is a scalar (i.e. not an object or array).
boolean

Logic Operations

and

Returns true if all values are true.
boolean

if

Splits the execution flow based on a condition.
T

not

Returns the negation of the value.
boolean

or

Returns true if at least one value is true.
boolean

xor

Returns true if exactly one value is true.
boolean

Math Operations

divide

Divides two numbers (i.e. $numerator / $denominator).
number

exponent

Calculates the exponentiation of a number by another number (base^exponent).
number

multiply

Multiplies two numbers.
number

round

Rounds a number with given significant decimal places.
number

Object Operations

get

Accesses a value of an object field with the given key.
T

object

Handles an object composition by resolving its properties.
object

Text Operations

concat

Concatenates two strings.
string

contains

Checks if a string contains another string with optional case sensitivity.
boolean

length

Returns the number of characters in a string.
number

md5

Hashes a string with the MD5 algorithm.
string

padLeft

Pads a string to the left.
string

padRight

Pads a string to the right.
string

replace

Replaces a value in a string.
string

slugify

Converts a string to a slug with no spaces or special characters.
string

substring

Extracts a substring from a string.
string

toLower

Converts a string to lowercase.
string

toUpper

Converts a string to uppercase.
string

trim

Trims whitespace from the beginning and end of a string.
string

Transform Operations

toBoolean

Converts a value to a boolean.
boolean

toNumber

Converts a value to a number. NULL is converted to 0.
number

toString

Converts a value to a string. NULL is converted to an empty string.
string

Utilities Operations

randomBoolean

Returns a random boolean. Set probability (0-100) to control how often true is returned.
boolean

randomNumber

Returns a random number between min and max. Set precision to 0 for integers, or higher for decimals (e.g. 2 produces values like 3.14).
number

Error handling

The composer is strict about types and forgiving about absence:
  • Missing fields and keys resolve to null. A data-field slot pointing at a path that doesn’t exist on the current record returns null. get against a missing key returns null. The chain continues with null flowing through.
  • null inputs are absorbed where it makes sense. Per-operation handling, not a global rule:
    • concat coalesces null inputs to empty strings.
    • filter, map, and other array operations coalesce a null array input to [] and return an empty array.
    • get against a null object returns null.
    • findFirst against an empty array returns null.
  • Type mismatches throw. Operations don’t implicitly coerce — passing a number into a string slot, or a non-array into filter’s array parameter, raises a runtime error and fails the sync. Use explicit toString / toNumber / toBoolean when you need a cast, so the conversion is visible in the chain.
  • Math has guard rails. divide raises a runtime error on a zero denominator instead of producing Infinity or NaN.
  • Iteration context has a limit. filter and map populate $item (and $parent when nested one level). Three or more nesting levels aren’t supported and raise a runtime error — flatten with flatMap instead.
The field-level debugger shows node-wise output for the configuration: when a chain produces an unexpected null or fails outright, the debugger pinpoints which operation introduced it. Use it before the configuration runs against real sync data. Configuration errors that the type system can catch — an invalid operation type, a slot whose output can’t satisfy the parent’s expected type, a missing required parameter — show as inline validation on the affected slot in the admin UI; the configuration won’t save until they’re resolved. Backend resolution carries equivalent runtime checks as a backstop, raising explicit exceptions if an invalid configuration somehow reaches it.