5.0.1 • Published 6 years ago

validation-operator v5.0.1

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

validation-operator

Build Status npm version GitHub version

Higher-Order runtime validation for parameter and return values.

  • Parameter validation enhancer
  • Result validation enhancer
  • Joi schema supported
  • Use with lodash.flow for better readability
  • Typescript definitions included

Usage

Installation

npm install --save validation-operator
# or
yarn add validation-operator

Example 1 (parameter validation)

const { validateParams } = require("validation-operator");
const Joi = require("joi");
const db = require("./db");

const userRepository = {
    create: validateParams(Joi.object({
            username: Joi.string().required(),
            password: Joi.string().required(),
        }))(({ username, password }) => {
                /* username and password validated */
                return db.create({ username, password });
            }),
};

const user = userRepository.create({ username: "foo", password: "bar" });

Example 2 (multiple parameter validation)

const { validateParams } = require("validation-operator/joi");
const Joi = require("joi");
const db = require("./db");

const userRepository = {
    create: validateParams(
            Joi.string().required(),
            Joi.string().required(),
        )((username, password) => {
            /* username and password validated */
            return db.create({ username, password });
        }),
};

const user = userRepository.create("foo", "bar");

Example 3 (result validation)

const { validateResult } = require("validation-operator");
const Joi = require("joi");
const db = require("./db");

const userRepository = {
    findById: validateResult(Joi.object({
            id: Joi.string().uuid().required(),
            username: Joi.string().required(),
            password: Joi.string().required(),
        })(function (_id) {
            return db.find({ _id });
        }),
};

const user = userRepository.findById("xxxxxx");
/* user validated */

Example 5 (Typescript)

import { validateResult } from "validation-operator";
import * as Joi from "joi";
import db from "./db";

interface User {
    username: string,
    password: string,
}

interface UserRepository {
    findById(_id: string): User
}


class UserRepositoryImpl implements UserRepository {
    findById = validateResult(Joi.object({
            id: Joi.string().uuid().required(),
            username: Joi.string().required(),
            password: Joi.string().required(),
        })(function (this: UserRepositoryImpl, _id: string): User {
            return db.find({ _id });
        })
}

const userRepository = new UserRepositoryImpl();

const user: User = userRepository.findById("xxxxxx");
/* user validated */

Example 6 (usage with lodash.flow)

const { validateParams, ValidateResult } = require("validation-operator");
const Joi = require("joi");
const flow = require("lodash.flow");
const db = require("./db");

const userRepository = {
    create: flow([
                validateParams(
                    Joi.string().required(),
                    Joi.string().required(),
                ),
                validateResult(
                    Joi.object({
                        id: Joi.string().required(),
                        username: Joi.string().required(),
                        password: Joi.string().required(),
                    })
                ),
        ])(function(username, password) {
            /* username and password validated */
            return db.create({ username, password });
        }),
};

const user = userRepository.create("foo", "bar");
/* user validated */
5.0.1

6 years ago

5.0.0

6 years ago

4.0.0

6 years ago

3.0.0

6 years ago

2.2.3

6 years ago

2.2.2

6 years ago

2.1.0

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.0.1

6 years ago

0.1.0

6 years ago