Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

datacasting

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

datacasting

Data converting by schema

  • 0.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

🗄️ Datacasting

coverage statements coverage lines coverage functions coverage branches

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 and Boolean

    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 to date-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

FAQs

Package last updated on 18 Aug 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc