typeparse
v1.0.1
Published
Runtime object transformation, parsing and validation with inferred static TypeScript typing.
Downloads
35
Maintainers
Readme
TypeParse
Runtime object transformation, parsing and validation with inferred static TypeScript typing.
Install
Using npm
npm install typeparse
Using yarn
yarn add typeparse
Example
import { TypeParse, Types as T } from "typeparse";
const input = JSON.parse(
`{
"id": "12345",
"userInfo": {
"name": "John Doe",
"phone": "+1 234 567 890"
}
}`
);
// Parsing configuration
const tp = new TypeParse(
T.Object({
id: T.Number(),
name: T.String({ path: "userInfo.name" }),
phoneNumber: T.String({ path: "userInfo.phone" }),
address: T.String({ path: "userInfo.address", defaultValue: "no-address" }),
email: T.String({ path: "userInfo.email" }).optional(),
})
);
const user = tp.parse(input); // User is parsed with inferred type
console.log(user);
// {
// id: 12345,
// name: 'John Doe',
// phoneNumber: '+1 234 567 890',
// address: 'no-address',
// email: undefined
// }
Object transformation
In case we need to not only parse an object but also to trasform it (i.e.):
{
"user": {
"name": "John",
"lastName": "Doe",
},
"email": "[email protected]",
"phoneNumbers": ["123-456-7890", "321-654-0987"]
}
To
{
"name": "John",
"lastName": "Doe",
"contactInfo": {
"email": "[email protected]",
"phone": "123-456-7890"
}
}
We can use the path
parameter in order to create a new object, specifying the path from the original objects root to define each value.
import { TypeParse, Types as T } from "typeparse";
const input = {
user: {
name: "John",
lastName: "Doe",
},
email: "4522 Sigley Road",
phoneNumbers: ["123-456-7890", "321-654-0987"],
};
const tp = new TypeParse(
T.Object({
name: T.String({ path: "user.name" }),
lastName: T.String({ path: "user.lastName" }),
contactInfo: T.Object({
email: T.String({ path: "email" }),
phone: T.String({ path: "phoneNumbers.[0]" }),
}),
})
);
console.log(tp.parse(input));
// {
// name: 'John',
// lastName: 'Doe',
// contactInfo: {
// email: '4522 Sigley Road',
// phone: '123-456-7890'
// }
// }