damusix

joi

"Use when building joi schemas, validating input data, defining custom types, conditional validation with .when(), cross-field references, custom error messages, or writing joi extensions. Standalone package that integrates with the @hapi ecosystem."

damusix 62 3 Actualitzat fa 8 mesos

Recursos

1
GitHub

Instal·la

npx skillscat add damusix/skills/joi

Instal·la des del registre de SkillsCat.

SKILL.md

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

Topic Reference
All built-in types types
Validation & options validation
References & templates references
Conditional schemas conditionals
Error handling errors
Custom extensions extensions
Metadata & introspection metadata
Common methods (any) any
Testing patterns testing