Visit https://fluentvalidation-ts.alexpotter.dev to get started.
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 extensible
Whatever your validation needs, fluentvalidation-ts can handle them.
Full documentation, including a tutorial and a number of useful guides, is available on the documentation website.
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.
Using NPM:
npm i --save fluentvalidation-ts
Using Yarn:
yarn add fluentvalidation-ts
Tip
There's no need to install types separately - fluentvalidation-ts has been written with first-class support for TypeScript!
import { Validator } from 'fluentvalidation-ts';
type Person = {
name: string;
age: number;
};
class PersonValidator extends Validator<Person> {
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' }
fluentvalidation-ts has 100% test coverage via unit tests written with Jest.
Note
Some branches are incorrectly reported as uncovered due to the following issue: gotwarlost/istanbul#690.
Please report issues via GitHub.
fluentvalidation-ts is provided under the terms of an Apache-2.0 license.
Clone the repo and run npm install
, then run npm run watch
in the root of the project to start the TypeScript compiler in watch mode. You can run the tests with npm test
.
Alex Potter is a full-stack Software Engineer, currently working as a Technical Lead at Ghyston, an award-winning software development company based in Bristol.