@galatajs/rules
TypeScript icon, indicating that this package has built-in type declarations

0.1.1 • Public • Published


@galatajs/rules

Rule package of galatajs framework.

What Is It?

This package is the rule package of the galatajs framework. It allows you to write and manage business rules in a cleaner way, not nested if conditions.

You don't have to use galatajs framework, @galatajs/rules is a nodejs package.

Installation

npm install @galatajs/rules

or with yarn

yarn add @galatajs/rules

Basic Usage

import { createRule } from '@galatajs/rules';

const validateUserType = (user) => {
    return {success: user.type === 'admin', error: 'User type is not admin'};
}

const validateUser = createRule<string>(validateUserType);

Advanced Usage

import { createRule } from '@galatajs/rules';
import { ErrorDataResult } from "@galatajs/core"

type Product = {
    name: string;
    price: number;
    stock: number;
}

class ValidationError {
    constructor(public field: string, public message: string) {}
}

const nameValidator = (name: string) => {
    return name.length < 3 ? {success: false, error: new ValidationError('name', 'Name is too short')} : {success: true};
}

const priceNegativeValidator = (price: number) => {
    return price < 0 ? {success: false, error: new ValidationError('price', 'Price is negative')} : {success: true};
}

const priceLimitValidator = (price: number) => {
    return price > 100 ? {success: false, error: new ValidationError('price', 'Price is too high')} : {success: true};
}

const stockValidator = (stock: number) => {
    return stock < 10 ? {success: false, error: new ValidationError('stock', 'Stock is too short')} : {success: true};
}

const productValidatorMiddleware = (req, res, next) => {
    const { name, price, stock } = req.body;
    const result = createRule<ValidationError>()
        .start(nameValidator)
        .and(priceNegativeValidator)
        .or(priceLimitValidator)
        .and(stockValidator)
        .end(name, price, stock);
    next(result.success ? undefined : new ErrorDataResult("Validation Error", result.errors));
}

Usage with waitAll option

It some cases we may wait for all the validations to perform, and sometimes we may want to finish if only one of the validation is false. Set waitAll to false if you want to terminate validation only when a false is returned.

    const { name, price, stock } = req.body;
    const result = createRule<ValidationError>({waitAll: false}) 
        .start(nameValidator)
        .and(priceNegativeValidator)
        .or(priceLimitValidator)
        .and(stockValidator)
        .end(name, price, stock);

So if the first wrong transaction comes in priceNegativeValidator, priceLimitValidator will not be executed.

Package Sidebar

Install

npm i @galatajs/rules

Weekly Downloads

17

Version

0.1.1

License

MIT

Unpacked Size

12.9 kB

Total Files

15

Last publish

Collaborators

  • ssi-istanbul