✅ Transforms to Primitive Types
Converts input values to array
, boolean
, number
, and string
, and also supports conversion to JavaScript Date
objects.
🧼 Rich Set of Transformation Actions
Includes cleaning, formatting, normalization, trimming, type conversion, and more.
🛡️ Type-Safe with Static Type Inference
Fully leverages TypeScript for safe and predictable transformations.
🪶 Small Package Size
Lightweight and optimized for performance — perfect for frontend applications.
This example demonstrates how to transform the value directly using the tb.transform()
function and chain actions
using tb.pipe()
. The tb.pipe()
function allows you to run multiple transformations sequentially.
import * as tb from 'transformbot';
// Converts the input to a string, removes spaces, converts to uppercase, removes non-alphanumeric characters, and converts to null if the result is empty.
// Returns ABCDEFGH12356789A
const vehicleVIN = tb.transform(tb.pipe(tb.string(), tb.toUpperCase(), tb.toAlphanumeric(), tb.toNull()), "abcdefgh12356789--a");
This example shows how to integrate transformations directly into form libraries.
The <Input>
component uses a transformation schema via the parse
prop (the name may vary depending on the library)
defined as (input: TInput) => TOutput
.
import * as tb from 'transformbot';
<Input name="email" parse={tb.pipe(tb.string(), tb.trim(), tb.toNull())} type="email" />
This example demonstrates how to define reusable transformation schemas.
Each schema (EmailSchema
, VehicleVINSchema
, UsernameSchema
) uses the tb.pipe()
function to chain together
a series of transformation steps (like trimming whitespace, converting to uppercase, or ensuring the value is a string).
AgeSchema
simply ensures the input is treated as a number using tb.number()
.
These schemas can then be applied to transform input data.
import * as tb from 'transformbot';
const ArrayNumber = tb.pipe(tb.array(tb.number()), tb.toNull());
const AgeSchema = tb.number();
const AlphanumericUppercaseSchema = tb.pipe(tb.string(), tb.toUpperCase(), tb.toAlphanumeric(), tb.toEmpty());
const BooleanSchema = tb.pipe(tb.boolean(), tb.toNull());
const DateSchema = tb.pipe(tb.date(), tb.toNull());
const DateStringSchema = tb.pipe(tb.date(), tb.toIsoDate(), tb.toNull());
const EmailSchema = tb.pipe(tb.string(), tb.trim(), tb.stripTags(), tb.stripNewlines(), tb.stripSpaces(), tb.stripDiacritics(), tb.toNull());
const FloatSchema = tb.pipe(tb.number(), tb.toFloat());
const TimeSchema = tb.pipe(tb.time(), tb.toNull());
const TimeStringSchema = tb.pipe(tb.time(), tb.toIsoTime(), tb.toNull());
const VehicleVINSchema = tb.pipe(tb.string(), tb.toAlphanumeric(), tb.toUpperCase(), tb.toNull());
const UsernameSchema = tb.pipe(tb.string(), tb.trim());
Availaible conversions | Availaible transformation actions | Availaible output normalization actions |
---|---|---|
array() - Converts an input to an Array |
toDefault() - Converts a null value to a default value |
|
toNull() - Converts empty array to null |
||
toUndefined() - Converts empty array to undefined |
||
boolean() - Converts an input to a boolean value |
toDefault() - Converts a null value to a default value |
|
toUndefined() - Converts a null value to undefined |
||
date() - Converts an input to a Date object |
custom() - Applies a custom transformation function |
toDefault() - Converts a null value to a default value |
toIsoDate() - Formats a Date object to an ISO date string |
toNull() - Converts invalid value to null |
|
toIsoTime() - Formats a time value to an ISO string |
toUndefined() - Converts invalid value to undefined |
|
toLocaleDateString() - Formats a Date object or time value to a localized date |
||
toLocaleTimeString() - Formats a Date object or time value to a localized time |
||
toMaxValue() - Limits a date value to a maximum date value |
||
toMinValue() - Limits a date value to a minimum date value |
||
number() - Converts an input to a number |
custom() - Applies a custom transformation function |
toDefault() - Converts a null value to a default value |
toExponential() - Converts a number to exponential notation |
toNull() - Converts 0/0.0 value to null |
|
toFixed() - Formats a number using fixed-point notation |
toUndefined() - Converts 0/0.0/null value to undefined |
|
toFloat() - Ensures a number is treated as a float |
||
toInteger() - Converts a number to an integer |
||
toLocaleNumberString() - Formats a number value to a localized number string |
||
toMaxValue() - Limits a number value to a given maximum value |
||
toMinValue() - Limits a number value to a given minimum value |
||
toPrecision() - Returns a string representing a number to specified precision |
||
string() - Converts an input to a string |
custom() - Applies a custom transformation function |
toDefault() - Converts a null value to a default value |
decodeBase64() - Decodes a Base64-encoded string |
toNull() - Converts empty value to null |
|
decodeHTML() - Decodes HTML entities in string |
toUndefined() - Converts empty/null value to undefined |
|
decodeURI() - Decodes a URI-encoded string |
||
encodeBase64() - Encodes a string as Base64 |
||
encodeHTML() - Encodes HTML entities in a string |
||
encodeURI() - Encodes a string as a URI component |
||
mask() - Masks parts of a string with a character |
||
normalize() - Normalizes a Unicode string |
||
padEnd() - Pads a string at the end |
||
padStart() - Pads a string at the start |
||
repeat() - Repeats a string a specified number of times |
||
replace() - Replaces a substring with another |
||
sanitizeText() - Removes potentially dangerous or unwanted text content |
||
slice() - Extracts a section of a string and returns it as a new string |
||
stripDiacritics() - Removes the diacritical marks |
||
stripMultiSpaces() - Removes multiple consecutive spaces |
||
stripNewlines() - Removes all the newline characters |
||
stripSpaces() - Removes all the spaces |
||
stripTags() - Removes the HTML/XML tags |
||
substring() - Returns the part of a string between two indices |
||
toAlpha() - Removes all the non-alphabetic characters |
||
toAlphanumeric() - Removes all the non-alphanumeric characters |
||
toCamelCase() - Converts a string to a camelCase format |
||
toCapitalCase() - Converts the string so that each word starts with uppercase |
||
toDigits() - Extracts only the digits from a string |
||
toDotCase() - Converts the string to a dot.case format |
||
toKebabCase() - Converts the string to a kebab-case format |
||
toLowerCase() - Converts a string to lowercase |
||
toPascalCase() - Converts the string to a PascalCase format |
||
toSnakeCase() - Converts the string to a snake_case format |
||
toUpperCase() - Converts a string to uppercase |
||
toWellFormed() - Replaces all lone surrogates in a string with the Unicode replacement character U+FFFD |
||
trim() - Removes whitespace from both ends |
||
trimEnd() - Removes whitespace from the end |
||
trimStart() - Removes whitespace from the start |
||
truncate() - Shortens a string to a specified maximum length with an optional suffix |
These actions can be chained and combined as needed using pipe()
function to create complex transformation schemas for
converting and processing input data.
pipe()
- Combines multiple transformations into a single pipelinetransform()
- Applies a transformation to an input value
I'm grateful to the valibot.dev library's creators for their outstanding work. It's been a source of inspiration.