Skip to content

Zero-dependencies light-weight library for modeling, validating and sanitizing data πŸ¦† 🐡 πŸ‘

License

Notifications You must be signed in to change notification settings

devtin/duckfficer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b5d5be4 Β· Sep 27, 2021

History

68 Commits
Aug 5, 2021
Feb 11, 2021
Sep 27, 2021
Sep 27, 2021
Sep 27, 2021
Aug 17, 2020
Sep 27, 2021
Sep 27, 2021
Aug 17, 2020
Aug 17, 2020
Sep 27, 2021
Aug 17, 2020
Feb 11, 2021
Aug 17, 2020
Aug 17, 2020
Feb 12, 2021
Feb 12, 2021
Aug 17, 2020
Sep 27, 2021
Sep 27, 2021
Feb 12, 2021

Repository files navigation

duckfficer

Version Coverage 99%

Zero-dependencies, light-weight library (~4.6KB minified + gzipped)
for modeling, validating & sanitizing data

Manifesto

Performing duck-type validation and data sanitation is not what I came to this world for... I want a utility helping me simplify that task.

This utility must:

Let's put hands on it!

Index

Installation

$ npm i duckfficer
# or
$ yarn add duckfficer

At-a-glance

const { Schema } = require('duckfficer')

// lets create a schema first
const User = new Schema({
  firstName: String,
  lastName: String,
  get fullName () {
    return this.firstName + ' ' + this.lastName
  },
  dob: Date,
  contact: {
    phoneNumber: {
      type: Number,
      autoCast: true // transforms String that look like a number into a Number
    },
    emails: {
      default () {
        return []
      },
      type: Array,
      arraySchema: {
        type: String,
        regex: [/^[a-z0-9._]+@[a-z0-9-]+\.[a-z]{2,}$/, '{ value } is not a valid e-mail address']
      }
    }
  }
})

User.parse({
  firstName: 'Fulano de Tal',
  contact: {
    emails: ['fulanito']
  }
})
  .catch(err => {
    console.log(err.message) // => Data is not valid
    console.log(err.errors.length) // => 4
    console.log(err.errors[0].message) // => Property lastName is required
    console.log(err.errors[0].field.fullPath) // => lastName
    console.log(err.errors[1].message) // => Property dob is required
    console.log(err.errors[1].field.fullPath) // => dob
    console.log(err.errors[2].message) // => Property contact.phoneNumber is required
    console.log(err.errors[2].field.fullPath) // => contact.phoneNumber
    console.log(err.errors[3].message) // => fulanito is not a valid e-mail address
    console.log(err.errors[3].field.fullPath) // => contact.emails.0
  })

User.parse({
  firstName: 'Fulano',
  lastName: 'de Tal',
  dob: '1/1/2020',
  contact: {
    phoneNumber: '3051234567',
    emails: [
      'personal@email.com',
      'work@email.com'
    ]
  }
})
  .then(obj => {
    console.log(obj.dob instanceof Date) // => true
    console.log(typeof obj.contact.phoneNumber) // => number
    console.log(obj) // =>
    /*
      {
        firstName: 'Fulano',
        lastName: 'de Tal',
        dob: 2020-01-01T05:00:00.000Z,
        contact: {
          phoneNumber: 3051234567,
          emails: [ 'personal@email.com', 'work@email.com' ]
        }
      }
    */
  })

Read the documentation


License

MIT

Β© 2019-2020 Martin Rafael tin@devtin.io

About

Zero-dependencies light-weight library for modeling, validating and sanitizing data πŸ¦† 🐡 πŸ‘

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published