Skip to content

The perfect, feature-complete, chainable schema-based object validator for Node.js and browsers. Inspired by Joi.

License

MIT, MIT licenses found

Licenses found

MIT
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

mamedul/chain-schema-validator

Chain Schema Validator - The Perfect Schema Validation

The perfect, feature-complete, chainable schema-based object validator for Node.js and browsers. Inspired by Joi, rebuilt for ultimate power and flexibility with zero dependencies.

This is the definitive version of chain-schema-validator, designed to handle virtually any validation scenario you can imagine. It provides an expressive, fluent API to define schemas, transform data, and validate complex objects with ease.

Contact

Key Features

  • Massive & Comprehensive API: A huge library of validation methods for every data type.

  • Powerful Data Transformation: A dedicated pipeline for sanitizing, formatting, and setting defaults on your data before validation.

  • Advanced Conditional & Relational Logic: Define complex cross-field dependencies with rules like when, with, and switch-like logic using keys.

  • Deeply Nested Validation: Effortlessly validate complex nested objects and arrays.

  • Asynchronous Support: Built-in async capabilities for tasks like database lookups.

  • Zero Dependencies: Lightweight, fast, and secure.

Quick Start

Define individual field schemas, then compose them into an object schema.

const { schema, ref } = require('chain-schema-validator');

// 1. Define schemas for individual fields
const usernameSchema = schema.string()
    .trim()
    .lowercase()
    .token()
    .min(3)
    .required();

const passwordSchema = schema.string()
    .min(8)
    .required();

// 2. Compose into an object schema
const registrationSchema = schema.object({
    username: usernameSchema,
    email: schema.string().email().required(),
    password: passwordSchema,
    passwordConfirm: schema.string().valid(ref('password')).required().strip(),
    role: schema.string().default('user'),
    birthYear: schema.number().integer().min(1920).max(2015)
}, {
    abortEarly: false // Report all errors
});

// 3. Validate your data
const userData = {
    username: '  TEST_USER ',
    email: 'test@example.com',
    password: 'password123',
    passwordConfirm: 'password123',
    birthYear: 1990
};

const { value, error } = registrationSchema.validate(userData);

if (error) {
    console.error('❌ Validation failed:', error.details);
} else {
    console.log('✅ Validation passed!');
    console.log('Sanitized Value:', value);
    /*
      Expected output:
      ✅ Validation passed!
      Sanitized Value: {
        username: 'test_user',
        email: 'test@example.com',
        password: 'password123',
        role: 'user',
        birthYear: 1990
      }
    */
}

API Reference (Overview)

Schema Types

  • schema.string()

  • schema.number()

  • schema.boolean()

  • schema.array()

  • schema.object(schemaMap, options)

  • schema.date()

  • schema.any()

🟢 General / Utility Methods

  • State Modifiers: .required(), .optional(), .nullable(), .forbidden(), .strip()

  • Defaults & Values: .default(value), .valid(...values), .invalid(...values)

  • Custom Logic: .transform(fn), .custom(fn), .customAsync(fn)

  • Schema Composition: .concat(schema), .meta(info)

🟢 String-Specific Methods

  • Transformation: .trim(), .lowercase(), .uppercase()

  • Validation: .min(len), .max(len), .length(len), .pattern(regex), .creditCard(), .email(), .ip4(), .ip6(), .ip(), .uuid(), .hex(), .token(), .isoDate()

🟢 Number-Specific Methods

  • .min(val), .max(val), .greater(val), .less(val), .integer(), .positive(), .negative(), .port()

🟢 Array-Specific Methods

  • .min(len), .max(len), .length(len), .items(schema), .unique(), .has(schema), .single()

🟢 Object-Specific Methods

  • schema.object({ key: schema, ... }) is the primary method.

  • Options: { abortEarly: boolean, stripUnknown: boolean }

Contributing

This library is now feature-complete and in a stable state. Bug reports are welcome. Please see our Security Policy.

If you need just object validator, then you can see objectPropValidator.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

This packages codes was created by Mamedul Islam and open for contribute.

As a passionate web developer with experience in creating interactive and user-friendly web components. Currently available for freelance projects or full-time opportunities.

Helping businesses grow their online presence with custom web solutions. Specializing in WordPress, WooCommerce, NodeJS, and Shopify. Building modern, responsive, and high-performance scalable websites with custom made plugins, codes, customizations.

Changelog

Please see the CHANGELOG.md file.

About

The perfect, feature-complete, chainable schema-based object validator for Node.js and browsers. Inspired by Joi.

Topics

Resources

License

MIT, MIT licenses found

Licenses found

MIT
LICENSE
MIT
LICENSE.md

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published