typebox-utils
v0.2.2
Published
TypeBox utilities with MongoDB ObjectId support and common validation types
Downloads
9
Maintainers
Readme
TypeBox Utils
A robust validation library built on top of @sinclair/typebox that provides enhanced ObjectId support, common schema types, and simplified validation workflows.
Features
- 🔄 Automatic MongoDB ObjectId conversion and validation
- 📝 Pre-compiled schema validation for better performance
- ✨ Common reusable schema types (Email, Mobile, UUID, Timestamp)
- 🎯 Type-safe validation with TypeScript
- 🛠 Custom format validators for ObjectId, email, mobile, and UUID
- 📦 Array validation support
- 🔍 Detailed error messages with path information
- 🔀 Dual ESM and CommonJS support
Installation
npm install typebox-utils @sinclair/typebox mongodbNote: This package is a peer dependency of @sinclair/typebox and mongodb. so you need to install them separately.
Usage
ESM Example
import { Type, Utils, createSchema, validate } from 'typebox-utils';
// Schema creation
const userSchema = createSchema(
Type.Object({
_id: Utils.ObjectId(),
email: Utils.Email({ random: true }),
createdAt: Utils.Timestamp({ random: true }),
contacts: Type.Array(Utils.ObjectId())
})
);
// Data validation
const [error, validated] = validate({
email: '[email protected]',
contacts: ['507f1f77bcf86cd799439011']
}, userSchema, true);
if (error) throw new Error(error);
console.log(validated);CommonJS Example
const { Type, Utils, createSchema, validate } = require('typebox-utils');
// Schema creation
const productSchema = createSchema(
Type.Object({
sku: Utils.UUID({ random: true }),
price: Type.Number({ minimum: 0 }),
created: Utils.Timestamp()
})
);
// Data validation
const [err, result] = validate({
price: 29.99,
created: Date.now()
}, productSchema);
if (err) console.error(err);
else console.log(result);API Reference
validate(value, schema, skipOperations?)
Validates data against a TypeBox schema with automatic type conversion.
Parameters:
value: Data to validateschema: Compiled TypeBox schema (usecreateSchema)skipOperations: Optional array of operations to skip:Clean: Responsible for removing excess properties from a valueDefault: Responsible for generating missing properties on a value using default schema annotations if availableConvert: Responsible for converting a value into its target type if a reasonable conversion is possibleConvertOID: Responsible for converting ObjectId strings to ObjectId instances
Returns: [error: string | null, validatedData: T]
Example:
const [error, data] = validate(rawInput, schema, ['Clean']);validateArray(values, schema)
Validates an array of values against a schema.
Parameters:
values: Array of data to validateschema: Compiled TypeBox schema
Returns: Array of [error, validatedData] tuples
createSchema(schema)
Pre-compiles schemas for better validation performance.
Parameters:
schema: TypeBox schema object
Returns: Compiled schema with type information
Utility Types
Utils.Timestamp(config?)
Unix timestamp (milliseconds since epoch) Options:
default: Default timestamp valueminimum: Minimum allowed value (default: 0)maximum: Maximum allowed valuerandom: Generate current timestamp
Utils.UUID(config?)
UUID v4 format validation Options:
default: Default UUID stringrandom: Generate random UUID
Utils.Email(config?)
Email format validation Options:
default: Default email addressrandom: Generate random email
Utils.Mobile(config?)
10-digit mobile number validation Options:
default: Default mobile numberrandom: Generate random number
Utils.ObjectId(config?)
MongoDB ObjectId validation/transformation Options:
default: Default ObjectId stringrandom: Generate new ObjectId
Custom Formats
Pre-registered validation formats:
objectid: MongoDB ObjectId validationemail: Simple email formatmobile: 10-digit numberuuid: UUID v4 format
See TypeBox Formats for more information.
Best Practices
- Pre-compile Schemas:
// Recommended
const compiledSchema = createSchema(Type.Object({ ... }));
const [error] = validate(data, compiledSchema);
// Not recommended
const [error] = validate(data, Type.Object({ ... }));- Handle ObjectId Conversion:
// Returns ObjectId instances for string values
const [error, data] = validate({
_id: '507f1f77bcf86cd799439011'
}, schema);
console.log(data._id instanceof ObjectId); // true- Use Random Defaults:
const schema = createSchema(
Type.Object({
sessionId: Utils.UUID({ random: true }),
createdAt: Utils.Timestamp({ random: true })
})
);Peer Dependencies
@sinclair/typebox: Core validation librarymongodb: MongoDB driver for ObjectId support
License
MIT © Anuj Kumar Jha
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
