# light-validate

> Validate data based on isolated rules

Latest version **1.0.7** (published 2019-10-10) · ISC license · 0 weekly downloads

## Install

```sh
npm install light-validate
pnpm add light-validate
yarn add light-validate
bun add light-validate
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.7 |
| Published | 2019-10-10 |
| First published | 2019-08-02 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 22.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | minatonda |
| Maintainers | mtwnda |
| Keywords | light, validate, decorator, mapping, rule, agnostic, annotation, functional, reusability, facility, pure |

## Links

- npm: https://www.npmjs.com/package/light-validate
- Repository: https://github.com/minatonda/light-validate
- Issues: https://github.com/minatonda/light-validate/issues
- npm.io page: https://npm.io/package/light-validate

## Dependencies (1)

- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ~0.1.13

## Alternatives

- [@oh-my-pi/pi-natives](https://npm.io/package/@oh-my-pi/pi-natives.md) — 51.8K weekly downloads
- [@capgo/capacitor-light-sensor](https://npm.io/package/@capgo/capacitor-light-sensor.md) — 3.0K weekly downloads
- [@heyhuynhgiabuu/pi-diff](https://npm.io/package/@heyhuynhgiabuu/pi-diff.md) — 492 weekly downloads
- [@lotsa/verdant-lang-asm](https://npm.io/package/@lotsa/verdant-lang-asm.md) — 38 weekly downloads
- [new-era-syntax](https://npm.io/package/new-era-syntax.md) — 20 weekly downloads

## Recent versions

- 1.0.7 (latest) — 2019-10-10
- 1.0.6 — 2019-10-09
- 1.0.5 — 2019-08-09
- 1.0.4 — 2019-08-08
- 1.0.3 — 2019-08-06
- 1.0.2 — 2019-08-03
- 1.0.1 — 2019-08-02
- 1.0.0 — 2019-08-02

## README

# light-validate


This library is intended to facilitate the isolation of validation rules, and to ensure high validation code reuse rate.

### Targets
  - Create Rules
  - Reuse Rules
  - Ensure uniform code
  - Framework Agnostic (functional api)

### Install

```sh
$ npm install -save light-validate
$ npm install -save reflect-metadata
```

### Development and Implementation - Creating Validation Rules (light-rules) ...
Define a mapping to the object that will be processed, requiring the class to follow the data model agreement (interface).
The rule must implement the 'LightRule' class/interface.
```typescript
import { LightRule } from 'light-validate';
export const LightRuleRequired: LightRule = async function (value: any) {
    if(!value){
        throw 'input-required';
    }
}

export const LightRuleNumeric: LightRule = async function (value: string) {
    if (new RegExp('[^0-9]').test(value)) {
        throw 'input-number-only';
    };
}

export const LightRuleLength = function (length: number) {
    return async function (value: string) {
        if(value.length !== length){
            throw 'input-lenght';
        }
    } as LightRule;
}
```

Beginning with version 1.0.2, the LightRule interface is given an optional last parameter, which has its value equivalent to the target object to be validated if you need to create a Rule that depends on a second value of the target object.
```typescript
import { LightRule } from 'light-validate';
export const LightRuleMustNotBeSameThan = function (key: string) {
    return async function (value: string,target:any) {
        if(value===target[key]){
            throw 'input-not-be-same-than';
        }
    } as LightRule;
}
```

### Development and Implementation - Creating Mapping (Classes / Types) ...

#### Important !!!
#### All properties will be decorated with decorator validate, must be initialized with 'undefined' in the class definition, otherwise validation will not work.

```typescript

import { LightRuleRequired } from './some-file';
import { LightRuleLength } from './some-file';
import { LightRuleNumeric } from './some-file';
import { LightValidate } from 'light-validate';

export class UserLightModelMapping  {


    // decorator with rules as ...parameters
    @LightValidate(LightRuleRequired, LightRuleLength(20),LightRuleMustNotBeSameThan('name'))
    username: string = undefined; // all properties decorated with @LightValidate must be initialized with undefined on mapping class, otherwise, validation will not work with the property


    // decorator with rules as ...parameters
    @LightValidate(LightRuleRequired, LightRuleLength(60))  
    name: string = undefined; // all properties decorated with @LightValidate must be initialized with undefined on mapping class, otherwise, validation will not work with the property

    // decorator with rules as ...parameters
    @LightValidate(LightRuleRequired, LightRuleLength(11), LightRuleNumeric)
    document: string = undefined; // all properties decorated with @LightValidate must be initialized with 'undefined' on mapping class, otherwise, validation will not work with the property

}
```

### Development and Implementation - Validation Call ...
```typescript
    import { UserLightModelMapping } from '../some-file';
    import { LightException, validate } from 'light-validate';

    const user:UserLightModelMapping = {
        username:'username-value',  
        password:'name-value', 
        document:'document-value',
    }

    validate(user, UserLightModelMapping)
            .then(() =>{
                // will fall here if no errors are returned.
            })
            .catch((errors: LightException[]) => {
                // will fall here if any errors are returned.
                console.error(errors);
            });
```

# UI libraries for light-validate

## Angular: 
### [light-validate-angular-ui](https://www.npmjs.com/package/light-validate-angular-ui)

## Vue
### [light-validate-vue-ui](https://www.npmjs.com/package/light-validate-vue-ui)

## React
Comming soon...

## Svelte
Comming soon...

---
_Source: https://npm.io/package/light-validate · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
