0.0.1 • Published 5 years ago
datacasting v0.0.1
🗄️ Datacasting
Make schemas and cast data declaratively
Installing
npm install --save datacasting
# or
yarn add datacastingBasic usage
Working with an array of objects
import { scheme, toDate } from 'datacasting'
const userScheme = scheme({
verified: Boolean,
created_at: toDate('yyyy-MM-dd'),
})
const casted = userScheme.cast([
{
first_name: 'Jonh',
last_name: 'Doe',
verified: 0,
created_at: '2020-01-23',
}
])
console.log(casted)
// [
// {
// "first_name": "Jonh",
// "last_name": "Doe",
// "verified": false,
// "created_at": Date(2020, 0, 23)
// }
// ]
const rewrited = userScheme.rewrite([
{
first_name: 'Jonh',
last_name: 'Doe',
verified: 0,
created_at: '2020-01-23',
}
])
console.log(rewrited)
// [
// {
// "verified": false,
// "created_at": Date(2020, 0, 23)
// }
// ]Working with a single object
import { scheme, toDate } from 'datacasting'
const userScheme = scheme({
verified: Boolean,
created_at: toDate('yyyy-MM-dd'),
})
const casted = userScheme.cast({
first_name: 'Jonh',
last_name: 'Doe',
verified: 0,
created_at: '2020-01-23',
})
console.log(casted)
// {
// "first_name": "Jonh",
// "last_name": "Doe",
// "verified": false,
// "created_at": Date(2020, 0, 23)
// }
const rewrited = userScheme.rewrite({
first_name: 'Jonh',
last_name: 'Doe',
verified: 0,
created_at: '2020-01-23',
})
console.log(rewrited)
// {
// "verified": false,
// "created_at": Date(2020, 0, 23)
// }API
Scheme methods
cast– converts data according to the schema, inheriting the passed fields, even if they were not declared in the schema.rewrite- converts data according to the schema without inheriting the original fields. The result will be an object only from the fields declared in the schema.
Available caster functions
First, you can use the built-in type conversion:
String,NumberandBooleanimport { scheme } from 'datacasting' const dataScheme = scheme({ user_id: String, verified: Boolean, role: Number, })replace(searchValue: string | RegExp, replaceValue: string | RegExp): (value: string) => stringimport { scheme, replace } from 'datacasting' const dataScheme = scheme({ name: replace('admin', 'nobody'), }) const casted = dataScheme.cast({ name: "John Doe - admin", }) console.log(casted) // { // "name": "John Doe - nobody" // }toArrayOf<K = StringConstructor | NumberConstructor | BooleanConstructor>(constructor: K): (value: any) => K[]import { scheme, toArrayOf } from 'datacasting' const dataScheme = scheme({ skill: toArrayOf(String), }) console.log(dataScheme.cast({ skill: "javascript", })) // { // "skill": ["javascript"] // } console.log(dataScheme.cast({ skill: ["javascript", "vue", "react"], })) // { // "skill": ["javascript", "vue", "react"] // }toDate(fromFormat: string): (value: string) => DateArgument
fromFormatrefers todate-fnstokens. See: date-fns parse tokens.import { scheme, toDate } from 'datacasting' const dataScheme = scheme({ created_at: toDate('yyyy-MM-dd'), }) console.log(dataScheme.cast({ created_at: "2020-01-15", })) // { // "created_at": Date(2020, 0, 15) // }toInteger(value: any): numberimport { scheme, toInteger } from 'datacasting' const dataScheme = scheme({ balance: toInteger, }) console.log(dataScheme.cast({ balance: '150.33', })) // { // "balance": 150 // }toLowerCase(value: any): stringimport { scheme, toLowerCase } from 'datacasting' const dataScheme = scheme({ name: toLowerCase, }) console.log(dataScheme.cast({ name: 'John Doe', })) // { // "name": "john doe" // }toUpperCase(value: any): stringimport { scheme, toUpperCase } from 'datacasting' const dataScheme = scheme({ name: toUpperCase, }) console.log(dataScheme.cast({ name: 'John Doe', })) // { // "name": "JOHN DOE" // }
Write your own caster function
Arguments:
{any} value{string} key{Object} data
Returns:
{any} result
import { scheme } from 'datacasting'
const dataScheme = scheme({
role_id: (value, key, data) => {
return data.role.id
})
})
const casted = dataScheme.cast({
name: 'Jonh Doe',
role: {
id: 1,
name: 'user',
}
})
console.log(casted)
// {
// "name": "John Doe",
// "role_id": 1,
// "role": {
// "id": 1,
// "name": "user"
// },
// }License
MIT © Daniel Slepov
0.0.1
5 years ago