https://github.com/ooade/yooda
🧘♂️600b validation library with support for custom handlers and messages.
https://github.com/ooade/yooda
validation validation-library validator
Last synced: about 1 year ago
JSON representation
🧘♂️600b validation library with support for custom handlers and messages.
- Host: GitHub
- URL: https://github.com/ooade/yooda
- Owner: ooade
- License: mit
- Created: 2020-01-27T17:35:41.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-09-25T07:27:43.000Z (over 1 year ago)
- Last Synced: 2025-04-13T09:07:06.146Z (about 1 year ago)
- Topics: validation, validation-library, validator
- Language: TypeScript
- Homepage:
- Size: 181 KB
- Stars: 33
- Watchers: 2
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Yooda

"Do or do not. There is no try." - Yoda
🧘♂️600b validation library with custom handlers and messages.
## Contents
- [Installation](#installation)
- [Basic Usage](#basic-usage)
- [Extras](#extras)
- [Domain](#domain)
- [Custom Error Messages](#custom-error-messages)
### Installation
```sh
npm add yooda
```
### Basic Usage
```js
import validator from "yooda";
const requestBodySchema = {
name: {
type: "string",
required: true
},
age: {
type: "number",
required: true
}
};
const requestBody = {
name: "Ademola Adegbuyi",
age: 23
};
try {
const validate = validator(requestBodySchema);
validate(requestBody);
} catch (err) {
res.status(500).send(err);
}
```
That's it, really. If the value doesn't meet the requirement, it throws an error and you can handle it as you want.
### Extras
#### Domain
This is more like a plugin, to ensure some other personal requirements are met asides from the regular "required" and "type". We definitely cannot offer a way to solve all kinds of edge-cases so we're giving you a buffet; Be your own boss, control the nature of the validation.
Here's how to use it:
```js
const shouldStartWithA = value => value.startsWith("a");
// attach it to your schema
const requestBodySchema = {
name: {
type: "string",
required: true,
domain: [shouldStartWithA]
}
};
const validate = validator(requestBodySchema);
validate(requestBody);
```
The convention you decide to pick is up to you. The one used in the example above is a function that is used on the fly. You could just create an object of domains as done in the test file. You could also have them in a separate file and import only the ones needed.
#### Custom Error Messages
You could define how errors will be thrown based on the supported error types (requiredError, typeError, and domainError), and it's very easy to use! A short example:
```ts
const schema: Schema = {
age: {
type: "number",
required: true,
domain: [domains.IS_POSITIVE]
}
};
const customErrorHandlers: CustomErrorHandlers = {
domainError: ({ value, domain }) =>
`${value} doesn't satify the ${domain} requirement`
};
const validate = validator(schema, customErrorHandlers);
```
**Props available to the error types:**
Note that: only the props required will be suggested to you via intellisense 🙏
```ts
type RequiredErrorProps = {
key: string;
};
type TypeErrorProps = {
key: string;
type: string;
value: any;
};
type DomainErrorProps = {
key: string;
type: string;
value: any;
domain: string;
};
```
## LICENSE
MIT