1.2.0 • Published 6 years ago
chimney-ts v1.2.0
Chimney-ts
Type safe object transformation in TypeScript.
This project was heavily inspired from https://github.com/scalalandio/chimney
Usage
import { Chimney } from "chimney-ts";
const square = { size: 10 };
type Rect = { width: number, height: number };
const incompleteRect = new Chimney(square)
.into<Rect>()
.withFieldRenamed("size", "width");
// Can't call `transform()` because `height` property not filled
// incompleteRect.transform()
const completeRect = incompleteRect
.withFieldRenamed("size", "height")
.transform();
// Square transforms into RectAlso transforms from Array or Promise
new Chimney([square])
.into<Rect>()
.withFieldRenamed("size", "width")
.withFieldRenamed("size", "height")
.transform(); // -> Rect[]
new Chimney(Promise.resolve(square))
.into<Rect>()
.withFieldRenamed("size", "width")
.withFieldRenamed("size", "height")
.transform(); // -> Promise<Rect>API
Chimney
Creates new chimney transformer.
import { Chimney } from "chimney-ts";
const transformer = new Chimney(fromObj).into<Into>();type constraints
fromObjvalue must extends{} | {}[] | Promise<{}>type.Intotype must extends{}type.
Transformer#withFieldConst
Creates new transformer that fills constantValue at fieldName.
transformer
.withFieldConst("width", 10)
.withFieldConst("height", 10)Compatible code:
- Non-monadic:
{ ...fromObj, [intoFieldName]: constValue } - Array:
fromObj.map(el => ({ ...el, [intoFieldName]: constValue })) - Promise:
fromObj.then(el => ({ ...el, [intoFieldName]: constValue }))
arguments & type constraints
- intoFieldName:
keyof Intotype. - constValue: value that extends type of
Into<IntoFieldName>
Transformer#withFieldRenamed
Creates new transformer that renames field.
transformer
.withFieldRenamed("size", "width")
.withFieldRenamed("size", "height")Compatible code:
- Non-monadic:
{ ...fromObj, [intoFieldName]: fromObj[fromFieldName] } - Array:
fromObj.map(el => ({ ...el, [intoFieldName]: fromObj[fromFieldName] })) - Promise:
fromObj.then(el => ({ ...el, [intoFieldName]: fromObj[fromFieldName] }))
arguments & type constraints
- fromFieldName:
keyof Fromtype. - intoFieldName:
keyof Intotype &From<IntoFieldName>equals toInto<IntoFieldName>
Transformer#withFieldComputed
Creates new transformer that fills computed value at fieldName.
transformer
.withFieldComputed("width", fromObj => fromObj.size * 10)
.withFieldComputed("height", fromObj => fromObj.size * 10)Compatible code:
- Non-monadic:
{ ...fromObj, [intoFieldName]: computeFn(fromObj) } - Array:
fromObj.map(el => ({ ...fromObj, [intoFieldName]: computeFn(fromObj) })) - Promise:
fromObj.then(el => ({ ...fromObj, [intoFieldName]: computeFn(fromObj) }))
arguments & type constraints
- intoFieldName:
keyof Intotype - computeFn(fromObj): function that returns value that extends
Into<IntoFieldName>type
Transformer#transform
Returns transformed value that has Into type (or Into[] | Promise<Into>).
If transformer is not compatible with Into type, method can't call!
transformer.transform()Changelog
v1.2.0
- Support Array and Promise transformation
v1.0.2
- Fix bug of type definitions
v1.0.0
- Initial release