Using transformers
- Using built-in transformers
- Creating transformers
Built-in transformers
toDateTime
toDateTime
converts values to Date
object using
Date.parse
.
It will serialize values to an
ISO date and time string.
import { attr, makeModel, toDateTime } from '@foscia/core';
makeModel('posts', {
createdAt: attr(toDateTime()),
});
toDateTime
will log a warning if a value gets converted to an invalid date.
toDate
toDate
converts values to Date
object using a custom parser. It expects
date to be formatted as ISO date string (YYYY-MM-DD
, e.g. 2023-12-25
).
It will serialize values to an ISO string date with the same format.
import { attr, makeModel, toDate } from '@foscia/core';
makeModel('users', {
birthday: attr(toDate()),
});
toDate
will log a warning if a value gets converted to an invalid date.
toDate
will also apply an "epoch shift" because serializing to a UTC date.
This will avoid local date to be serialized to incorrect date due to UTC
serialization.
toNumber
toNumber
converts values to Number
object using
Number()
.
import { attr, makeModel, toNumber } from '@foscia/core';
makeModel('products', {
price: attr(toNumber()),
});
toNumber
will log a warning if a value gets converted to a NaN
value.
toBoolean
toBoolean
converts values to boolean
if the value match a truthy value.
You can provide your own truthy values using trueValues
option (defaults are
[true, 1, '1', 'true', 'yes']
).
import { attr, makeModel, toBoolean } from '@foscia/core';
makeModel('users', {
verified: attr(toBoolean()),
blocked: attr(toBoolean({ trueValues: [true] })),
});
toBoolean
won't convert null
values.
toString
toString
converts values to String
object using
String()
.
import { attr, makeModel, toString } from '@foscia/core';
makeModel('posts', {
title: attr(toString()),
});
toBoolean
won't convert null
values.
toArrayOf
toArrayOf
converts values of an array using the given transformer. This can be
useful when dealing with array of dates.
import { attr, makeModel, toArrayOf, toDateTime } from '@foscia/core';
makeModel('posts', {
openingDates: attr(toArrayOf(toDateTime())),
});
Creating transformers
makeTransformer
(recommended)
You can generate a new transformer using @foscia/cli
.
- NPM
- YARN
- PNPM
- Bun
npx foscia make transformer toDateTime
yarn foscia make transformer toDateTime
pnpm foscia make transformer toDateTime
bun foscia make transformer toDateTime
Foscia provides a makeTransformer
utility function to create a new
transformer. This function creates a transformer using a deserialize
function
and an optional serialize
function (deserializer will be used as a default).
Transformers created with makeTransformer
will transform null
or undefined
value to null
.
Here are two examples of transformers:
import { makeTransformer } from '@foscia/core';
export default () => makeTransformer((value: string) => Number(value));
import { makeTransformer } from '@foscia/core';
export default () => makeTransformer(
(value: string) => {
const date = new Date();
date.setTime(Date.parse(value));
return date;
},
(value: Date) => value.toISOString(),
);
The return value of makeTransformer
is a transformer object.
import { attr, makeModel } from '@foscia/core';
import toNumber from '../transformers/toNumber';
import toDateTime from '../transformers/toDateTime';
makeModel('posts', {
commentsCount: attr(toNumber()),
publishedAt: attr(toDateTime()),
});
Custom transformers
If you want full control on your transformers, you can create transformer objects manually. A transformer object should have two methods:
serialize
which converts a real value to its raw counterpartdeserialize
which converts a raw value to its real counterpart
export default {
deserialize: (value: string | null) => {
if (value === null) {
return null;
}
const date = new Date();
date.setTime(Date.parse(value));
return date;
},
serialize: (value: Date | null) => (value ? value.toISOString() : null),
};
Custom transformers must handle null
values because null
may also be
transformed by serializers and deserializers (e.g. converting a null
value to
an empty string).