datacasting
v0.0.1
Published
Data converting by schema
Downloads
5
Readme
🗄️ Datacasting
Make schemas and cast data declaratively
Installing
npm install --save datacasting
# or
yarn add datacasting
Basic 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
,Number
andBoolean
import { scheme } from 'datacasting' const dataScheme = scheme({ user_id: String, verified: Boolean, role: Number, })
replace(searchValue: string | RegExp, replaceValue: string | RegExp): (value: string) => string
import { 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) => Date
Argument
fromFormat
refers todate-fns
tokens. 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): number
import { scheme, toInteger } from 'datacasting' const dataScheme = scheme({ balance: toInteger, }) console.log(dataScheme.cast({ balance: '150.33', })) // { // "balance": 150 // }
toLowerCase(value: any): string
import { scheme, toLowerCase } from 'datacasting' const dataScheme = scheme({ name: toLowerCase, }) console.log(dataScheme.cast({ name: 'John Doe', })) // { // "name": "john doe" // }
toUpperCase(value: any): string
import { 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