joi

Original🇺🇸 English
Translated

Use when building joi schemas, custom validators, extensions, or working with joi's validation pipeline. Covers all types, references, templates, errors, and the extension API.

1installs
Added on

NPX Install

npx skill4agent add damusix/skills joi

Tags

Translated version includes tags in frontmatter

Joi

Quick Start

const Joi = require('@hapi/joi');

const schema = Joi.object({
    name: Joi.string().min(1).max(100).required(),
    age: Joi.number().integer().min(0),
    email: Joi.string().email()
});

const { error, value } = schema.validate(input);

Critical Rules

  1. Schemas are immutable - Every method returns a new schema instance; never mutate
  2. Validate at boundaries - Use
    validate()
    or
    attempt()
    at input boundaries; see validation
  3. Types extend base - All types inherit from
    any()
    ; see types overview
  4. Refs for cross-field - Use
    Joi.ref()
    for dynamic values across fields; see references
  5. Extend for custom types - Use
    Joi.extend()
    to create custom types; see extensions

Workflow

  1. Choose a type - types overview for all built-in types
  2. Add constraints - Chain rules like
    .min()
    ,
    .max()
    ,
    .pattern()
    ,
    .valid()
  3. Compose schemas - Nest
    Joi.object()
    ,
    Joi.array()
    ,
    Joi.alternatives()
  4. Add conditionals - Use
    .when()
    for dynamic schemas; see conditionals
  5. Customize errors - Override messages via
    .messages()
    or
    .error()
    ; see errors

Key Patterns

TopicReference
All built-in typestypes
Validation & optionsvalidation
References & templatesreferences
Conditional schemasconditionals
Error handlingerrors
Custom extensionsextensions
Metadata & introspectionmetadata
Common methods (any)any
Testing patternstesting