Skip to content
This repository was archived by the owner on Nov 24, 2024. It is now read-only.
/ altheia Public archive

A very simple, fast and customizable async data validator

License

Notifications You must be signed in to change notification settings

bodinsamuel/altheia

Folders and files

NameName
Last commit message
Last commit date
Mar 8, 2021
Aug 8, 2022
Jul 25, 2022
Jun 21, 2020
Sep 2, 2021
Jul 26, 2022
Sep 2, 2021
Jun 21, 2020
Mar 8, 2021
Jul 25, 2022
Aug 8, 2022
Jul 25, 2022
Jul 25, 2022
Aug 8, 2022
Sep 2, 2021
Jul 21, 2019
Jan 30, 2018
Sep 2, 2021
Dec 27, 2019
Sep 18, 2022
Jul 26, 2022
Feb 28, 2020
Jul 25, 2023

Repository files navigation

Altheia

CI

A very simple, fast and customizable async data validator, inspired by Joi .

await alt
  .string()
  .email()
  .custom('not_in_db', async (val) => await searchDB(val));

Online documentation: github.io/altheia/

πŸ€“ Why?

After searching for a long time a simple data validator that allow async validation, I decided to implement one. Heavily inspired from Joi, it aim at being very lightweight, simple to use and allow to check anything from standard schema to very custom ones.

The goal of this library is to validate json -- for example in express middleware -- and complexe javascript object.

  • πŸ’… Easy to customize. Use builtin or create your own validation.
  • ⚑️Async. Call any resources asynchronously to do check your data (e.g: database, xhr...)
  • 🀩 Typescript. No more checking long documentation and wondering what to write.
  • 🧘 Easy to use. No configuration required

✨ Install

npm install altheia-async-data-validator
yarn add altheia-async-data-validator

πŸ–Ό Example

import alt from 'altheia-async-data-validator'

alt.lang('string.min', (name, args) => `This ${name} is too short`);
alt.template('login', alt.string().min(3).not('admin'));

const errors = await alt({
    login: alt.is('login'),
    email: alt.string()
        .email()
        .custom('not_in_db', async (val) => await searchDB(val)),
    eyes: alt.number().integer().positive().max(2),
    date: alt.date().iso(),
    gender: alt.string().if({
        test: test => test.uppercase(),
        then: test => test.in('F', 'M'),
        otherwise: test => test.in('female', 'male')
    })
}).options({
    required: true
}).validate({
    login: 'leela',
    email: '[email protected]',
    eyes: 1,
    date: '2015-01-04T17:35:22Z',
    gender: 'female',
});

console.log(errors); // false

πŸ“š Documentation

πŸ“‹ Contributing

Every contribution or feature requests will be gladly accepted in the issue section.