Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/AlexJPotter/fluentvalidation-ts
A TypeScript-first library for building strongly-typed validation rules
https://github.com/AlexJPotter/fluentvalidation-ts
fluent fluentvalidation form form-validation formik typescript validation
Last synced: 3 months ago
JSON representation
A TypeScript-first library for building strongly-typed validation rules
- Host: GitHub
- URL: https://github.com/AlexJPotter/fluentvalidation-ts
- Owner: AlexJPotter
- License: apache-2.0
- Created: 2019-04-27T20:36:28.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-03-05T16:48:00.000Z (8 months ago)
- Last Synced: 2024-08-13T21:33:27.531Z (3 months ago)
- Topics: fluent, fluentvalidation, form, form-validation, formik, typescript, validation
- Language: TypeScript
- Size: 1.31 MB
- Stars: 85
- Watchers: 3
- Forks: 6
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: License.txt
Awesome Lists containing this project
README
# `fluentvalidation-ts`
## Strong, simple, extensible validation.
Visit [https://fluentvalidation-ts.alexpotter.dev](https://fluentvalidation-ts.alexpotter.dev) to get started.
![Coverage](https://badgen.net/badge/coverage/100%25/green)
[![NPM Version](https://badgen.net/npm/v/fluentvalidation-ts)](https://www.npmjs.com/package/fluentvalidation-ts)
![License](https://badgen.net/npm/license/fluentvalidation-ts)
![Last Commit](https://badgen.net/github/last-commit/alexjpotter/fluentvalidation-ts/main)
![Open Issues](https://badgen.net/github/open-issues/alexjpotter/fluentvalidation-ts)![Dependencies](https://badgen.net/badge/dependencies/none/green)
[![GZIP Size](https://img.badgesize.io/https://unpkg.com/fluentvalidation-ts@latest/dist/index.js?compression=gzip)](https://unpkg.com/fluentvalidation-ts@latest/dist/index.js)## Overview
Front-end validation is a must-have for any project that involves forms, but the requirements vary hugely. You might have a simple sign-up form with a few text fields, or a complex configuration page with collections and deeply nested fields.
There are plenty of libraries out there which help you to solve the problem of front-end validation, but all the ones I've tried have felt lacking in one aspect or another - whether that's TypeScript support, their capacity to handle complex requirements, or the ability to define your own reusable validation logic.
So I wrote `fluentvalidation-ts`, a tiny library that is:
- Designed for **TypeScript**
- Simple yet powerful
- Fully extensibleWhatever your validation needs, `fluentvalidation-ts` can handle them.
## Docs
Full documentation, including a tutorial and a number of useful guides, is available at the [official fluentvalidation-ts website](https://fluentvalidation-ts.alexpotter.dev).
- [Overview](https://fluentvalidation-ts.alexpotter.dev/docs/overview)
- [Tutorial](https://fluentvalidation-ts.alexpotter.dev/docs/tutorial)
- [Guides](https://fluentvalidation-ts.alexpotter.dev/docs/guides/customrules)
- [Core API Reference](https://fluentvalidation-ts.alexpotter.dev/docs/api/core/validator)
- [Validation Rules API Reference](https://fluentvalidation-ts.alexpotter.dev/docs/api/rules/emailaddress)
- [Releases](https://github.com/AlexJPotter/fluentvalidation-ts/releases)### Requirements
This library has been written in, and for, **TypeScript**. You can still use `fluentvalidation-ts` without TypeScript, but the primary benefit of having strongly-typed validation rules is lost.
If using TypeScript (strongly recommended), you must be on TypeScript version **`2.9`** or later.
### Installation
Using Yarn:
```
yarn add fluentvalidation-ts
```Using NPM:
```
npm i --save fluentvalidation-ts
```**Note:** `fluentvalidation-ts` has been written with first-class support for TypeScript, so there's no need to install types!
### Example Usage
```typescript
import { Validator } from 'fluentvalidation-ts';type Person = {
name: string;
age: number;
};class PersonValidator extends Validator {
constructor() {
super();this.ruleFor('name') // This is type-safe! (Argument is of type 'name' | 'age')
.notEmpty()
.withMessage('Please enter your name');this.ruleFor('age')
.greaterThanOrEqualTo(0)
.withMessage('Age cannot be negative');
}
}const validator = new PersonValidator();
validator.validate({ name: '', age: 25 });
// { name: 'Please enter your name' }validator.validate({ name: 'Alex', age: -1 });
// { age: 'Age cannot be negative' }validator.validate({ name: '', age: -1 });
// { name: 'Please enter your name', age: 'Age cannot be negative' }
```### Test Coverage
`fluentvalidation-ts` has 100% test coverage via unit tests written with [Jest](https://jestjs.io/).
**Note**: Some branches are incorrectly reported as uncovered due to the following issue: [https://github.com/gotwarlost/istanbul/issues/690](https://github.com/gotwarlost/istanbul/issues/690).
### Issues
Please report issues via [GitHub](https://github.com/AlexJPotter/fluentvalidation-ts/issues).
### License
`fluentvalidation-ts` is provided under the terms of an [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) license.
### Development
To run the project locally simply clone the repo and run `yarn install` then `yarn start` in the root of the project. You can run the tests with `yarn test`.
### About the Author
Alex Potter is a full-stack Software Developer who is currently part of the team at [Ghyston](https://www.ghyston.com), an award-winning software development company based in Bristol.
Check out his blog at [alexpotter.dev](https://alexpotter.dev), or get in touch [@ajp_dev](https://twitter.com/ajp_dev) on Twitter.