You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Sindre Sorhus 48f849ec81 Minor tweaks 7 years ago
media Minor tweaks 7 years ago
source Improve documentation (#59) 7 years ago
.editorconfig Init 7 years ago
.gitattributes Init 7 years ago
.gitignore Deploy docs to gh-pages on release (#61) 7 years ago
.npmrc Init 7 years ago
.travis.yml Add Node.js 10 to Travis file 7 years ago
example.js Minor tweaks 7 years ago
license Init 7 years ago
package.json Minor tweaks 7 years ago
readme.md Minor tweaks 7 years ago
tsconfig.json Update `@sindresorhus/is` 7 years ago
tslint.json Upgrade dependencies 7 years ago
webpack.config.js Fix build (#63) 7 years ago

readme.md



Build Status Coverage Status

Function argument validation for humans

Highlights

  • Expressive chainable API
  • Lots of built-in validations
  • Supports custom validations
  • Written in TypeScript

Install

$ npm install ow

Usage

import ow from 'ow';

const unicorn = input => {
	ow(input, ow.string.minLength(5));

	// …
};

unicorn(3);
//=> ArgumentError: Expected argument to be of type `string` but received type `number`

unicorn('yo');
//=> ArgumentError: Expected string to have a minimum length of `5`, got `yo`

API

Complete API documentation

ow(value, predicate)

Test if value matches the provided predicate.

ow.create(predicate)

Create a reusable validator.

const checkPassword = ow.create(ow.string.minLength(6));

checkPassword('foo');
//=> ArgumentError: Expected string to have a minimum length of `6`, got `foo`

ow.any(...predicate[])

Returns a predicate that verifies if the value matches at least one of the given predicates.

ow('foo', ow.any(ow.string.maxLength(3), ow.number));

ow.{type}

All the below types return a predicate. Every predicate has some extra operators that you can use to test the value even more fine-grained.

Primitives

Built-in types

Typed arrays

Structured data

Miscellaneous

Predicates

The following predicates are available on every type.

not

Inverts the following predicates.

ow(1, ow.number.not.infinite);

ow('', ow.string.not.empty);
//=> ArgumentError: [NOT] Expected string to be empty, got ``

is(fn)

Use a custom validation function. Return true if the value matches the validation, return false if it doesn't.

ow(1, ow.number.is(x => x < 10));

ow(1, ow.number.is(x => x > 10));
//=> ArgumentError: Expected `1` to pass custom validation function

Instead of returning false, you can also return a custom error message which results in a failure.

const greaterThan = (max: number, x: number) => {
	return x > max || `Expected \`${x}\` to be greater than \`${max}\``;
};

ow(5, ow.number.is(x => greaterThan(10, x)));
//=> ArgumentError: Expected `5` to be greater than `10`

Maintainers

License

MIT