Giter VIP home page Giter VIP logo

type's Introduction

Build status Tests coverage npm version

type

Runtime validation and processing of JavaScript types

  • Respects language nature and acknowledges its quirks
  • Allows coercion in restricted forms (rejects clearly invalid input, normalizes permissible type deviations)
  • No transpilation implied, written to work in all ECMAScript 3+ engines

Use case

Validate arguments input in public API endpoints.

For validation of more sophisticated input structures (as deeply nested configuration objects) it's recommended to consider more powerful schema based utlities (as AJV or @hapi/joi)

Example usage

Bulletproof input arguments normalization and validation:

const ensureString        = require('type/string/ensure')
    , ensureDate          = require('type/date/ensure')
    , ensureNaturalNumber = require('type/natural-number/ensure')
    , isObject            = require('type/object/is');

module.exports = (path, options = { min: 0 }) {
  path = ensureString(path, { errorMessage: "%v is not a path" });
  if (!isObject(options)) options = {};
  const min = ensureNaturalNumber(options.min, { default: 0 })
      , max = ensureNaturalNumber(options.max, { isOptional: true })
      , startTime = ensureDate(options.startTime, { isOptional: true });

  // ...logic
};

Installation

npm install type

Utilities

Aside of general ensure validation util, following kind of utilities for recognized JavaScript types are provided:

*/coerce

Restricted coercion into primitive type. Returns coerced value or null if value is not coercible per rules.

*/is

Object type/kind confirmation, returns either true or false.

*/ensure

Value validation. Returns input value (in primitive cases possibly coerced) or if value doesn't meet the constraints throws TypeError .

Each */ensure utility, accepts following options (eventually passed with second argument):

  • isOptional - Makes null or undefined accepted as valid value. In such case instead of TypeError being thrown, null is returned.
  • default - A value to be returned if null or undefined is passed as an input value.
  • errorMessage - Custom error message. Following placeholders can be used:
    • %v - To be replaced with short string representation of invalid value
    • %n - To be replaced with meaninfgul name (to be passed with name option) of validated value. Not effective if name option is not present
  • errorCode - Eventual error code to be exposed on .code error property
  • name - Meaningful name for validated value, to be used in error message, assuming it contains %n placeholder
  • Error - Alternative error constructor to be used (defaults to TypeError)

Index

General utils:

Type specific utils:

Tests

$ npm test

type's People

Contributors

medikoo avatar borracciablu avatar

Stargazers

Giorgio de la Barrera avatar Huang Shuo-Han avatar hharzer avatar Cobb Lee avatar  avatar Okoye Chukwuebuka Victor avatar  avatar Kevin Elliott avatar Felipe Gustavo avatar Rafał Krupiński avatar dirge avatar Eavan avatar Al Mahdi avatar Sukka avatar Cheton Wu avatar Md. Abu Taher avatar Toan Tran avatar Hongbo Miao avatar Lubomir Anastasov avatar David Wells avatar GAURAV avatar Eslam λ Hefnawy avatar Branden Dane avatar Glauber Mota avatar Ryan avatar Nikolay Kost avatar Jesse Jurman avatar Wesley  avatar LEI avatar Andrei Luca avatar Max Ma avatar Paweł Lesiecki avatar Tomasz Jakut avatar  avatar Aron Gabor avatar

Watchers

 avatar James Cloos avatar  avatar  avatar

type's Issues

`object/is` returns true for functions

Wasn't sure if this is intentional or not, but object/is returns true and object/ensure passes when you test a function.

image

For my use case I actually need to verify that it is non-primitive, and not a function. In reality, I could understand functions being considered "non-primitive", but it looks like neither primitive-object or object cover my use case of only objects and arrays, unless I'm missing something...

Type typescript types

Hi @medikoo

I've been using type with typescript recently and as the ts type checker was warning about missing types for type I've started working on the .d.ts files.

This is what i've got so far @types/type.

I didn't make any PR yet to DefinitelyTyped, but if I manage to get something good enough that would be the final goal.
Please let me know If you have any comments on this.

Regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.