npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grand-validator

v1.1.0

Published

i9# Grandjs Validation Library <p align="center"><img width="200" height="200" src="https://i.ibb.co/t4MDdkq/grandjs.png" alt="Grandjs logo"></p>

Downloads

11

Readme

i9# Grandjs Validation Library

This package uses Grandjs framework validation methods, functions, schema to allow you to validate your coming data and build schema for dynamic data easily, smoothly and without confusing.

Prerequisites

You don't need anything to start building amazing validation, you just need to be installed nodejs on your machine

Features

  • Different ways to validate your data
  • Building schema for your data to easily validate them
  • use Grandjs validators as middlewars for your routes
  • Schema for nested objects and array's items
  • Custom Types such as Object ID and Any type
  • DYnamic validation messages are generated for each field based on the data type with the ability to send custom message for each input
  • MultiTypes Schema to validate the coming data in different ways

content

Installing

open the command prompt and navigate to the project folder and just say

npm install grand-validator --save

Getting Started

const {Schema, Types, Validator} = require("grand-validator");

Types

Grandjs Validator gives you different data types which include native javascript types and custom types to use these types inside the schema definition.

Available Types

  • Object (native type)
  • Array (native type)
  • ObjectId (custom type)
  • String (native type)
  • Number (native type)
  • Boolean (native type)
  • Function (native type)
  • Any (custom type)

Schema

Grandjs validator introduces to you a basic way to validate your data with creating schema that opposites the data, schema helps you to define the coming data and specify the value of each filed with the ability to make this filed optional or required and the ability to specify multitypes for this filed.

Schema implies a class which is instantiated when you define new schema as the following:

const {Schema, Types, Validator} = require("grand-validator");
const schema = new Schema();

When instantiating this class you can pass one argument to the constructor which is optional, this argument is object implies the schema modeling as the following:

const {Schema, Types, Validator} = require("grand-validator");
const schema = new Schema({
    name: {
        type: String,
        required: false //default true
    }
});

each property inside the schema should be an object this object has main property called type which represents the type of this property

schema property options:

| property | type | default| |----------|:-------------:|:-------------:| | type | String, Object, Array, Number, ObjectId, Any, Boolean, Function |no default| |required|true / false|true| |message|String|automatic generated validation message|

Schema String Type

you can define the type of the property as string as one of the following ways:

    name: {
        type: String,
        required: false, //default true
        message: "name should be a string", // optional
        in: ["Adam", "Tarek", "John"] //optional, filed Type: Array of
    }

or

    name: {
        type: Types.String,
        required: false, //default true
        message: "name should be a string", // optional
        in: ["Adam", "Tarek", "John"] //optional, filed Type: Array of strings
    }

Available options for string type

| property | type | default|description| |----------|:-------------:|:-------------:|:-------------:| | type | String, Object, Array, Number, ObjectId, Any, Boolean, Function |no default|the type of value of this property| |required|true / false|true| is provding this property is required or not| |message|String|automatic generated validation message|| |in|Array|-|Array of strings that this value should be one of them| |notEmpty|Boolean|false|boolean value to check if the string is empty or not| |length|Number|-|specified number to check if the length of this string is not greater than that number|

Schema Number Type

you can define the type of the property as Number as one of the following ways:

    age: {
        type: Number,
        required: false, //default true
        message: "age should be a number", // optional
    }

or

    name: {
        type: Types.Number,
        required: false, //default true
        message: "age should be a number", // optional
    }

Schema Boolean Type

you can define the type of the property as Boolean as one of the following ways:

    married: {
        type: Boolean,
        required: false, //default true
        message: "age should be a number", // optional
    }

or

    married: {
        type: Types.Boolean,
        required: false, //default true
        message: "married should be a boolean value", // optional
    }

Schema ObjectId Type

you can define the type of the property as ObjectId for mongodb documents as the following way:

    _id: {
        type: Types.ObjectId,
        required: false, //default true
        message: "_id should be an object id", // optional
    }

Note ObjectId type is originally a string but we perform some validation to make sure that it's serialized as real mongodb object id

Schema Any Type

you can define the type of the property as Any type as the following way:

    additionalInfo: {
        type: Types.Any,
        required: false, //default true
    }

Note Types.Any checks if the property has any type so it can be undefined, null, string, number, boolean, function, array or object

Schema Function Type

you can define the type of the property as Function as one of the following ways:

    action: {
        type: Function,
        required: true, //default true
        message: "action should be a function", // optional
    }

or

    married: {
        type: Types.Function,
        required: false, //default true
        message: "action should be a function", // optional
    }

Schema Object Type

you can define the type of the property as Object as one of the following ways:

    cardInfo: {
        type: Object || Types.Object,
        required: true, //default true
        message: "cardInfo should be an object", // optional
    }

Note: for nested data validations inside this object you can define an object with these properties as the following:

    cardInfo: {
        type: {
            cardNumber: {
                type: Number
            },
            type: {
                type: String
            },
            csv: {
                type: Number
            }
        },
        required: true, //default true
        message: "cardInfo should be an object", // optional
    }

you can still add nested schema inside the object as you want and all of these schemas will be validated in the same way.

Schema Array Type

you can define the type of the property as an Array as the following way:

{
    hobbies: {
        type: Array || Types.Array
    }
}

Note: for nested data validations inside this array you can define types inside the array as the following:

 {
    hobbies: {
        type: [{
            type: String,
            message: "hobbies items should be string"
        }]
    }
}

this represents array of strings

you can still add nested schema inside the array as you want and all of these schemas will be validated in the same way.

MultiTypes

Schema has the ability to define multi types for single field to give options to the validator to validate the coming data based one of the provided data types.

to use the multi type option you don't need anything just adding property called multiTypes as true inside the schema and set the type as array of types like the following

var schema = {
    cardInfo: {
        type: {
            cardNumber: {
                type: [Number, String],
                multiTypes: true
            }
        },
    }
 }

Changing the schema

you can change the schema of the instantiated class whenever you want by accessing a property called schema inside the class which implies an object contains your pre defined schema

var userSchema = new Schema({
    name: {
        type: String
    },
    email: {
        type: String
    },
    age: {
        type: Number
    }
})
console.log(userSchema.schema);

// output:
{
    name: {
        type: String
    },
    email: {
        type: String
    },
    age: {
        type: Number
    }
}

Validate Data

Now you can validate the data against the pre defined schema using validate method which takes one argument which is an object contains the data

Example

var userSchema = new Schema({
    name: {
        type: String
    },
    email: {
        type: String
    },
    age: {
        type: Number
    }
})
// validate the schema
userSchema.validate({
    name: "tarek",
    email: "[email protected]",
    age: 20
})

Get Validation Result

you can access on the validation result over the schema by calling this property validations which is an array of objects contains the error fields and the message of each field, if there are no errors validations will return an empty array.

Example

var userSchema = new Schema({
    name: {
        type: String
    },
    email: {
        type: String
    },
    age: {
        type: Number
    }
})
// validate the schema
userSchema.validate({
    name: "tarek",
    email: "[email protected]",
    age: 20
})

console.log(userSchema.validations)

// will return an array []