@cvo/plugin-validation
v0.0.0
Published
Validation plugin for CVO Framework
Downloads
49
Readme
@cvo/plugin-validation
Powerful request data validation plugin for CVO Framework, primarily powered by Zod. Ensure your API inputs are safe, sanitized, and type-safe.
🚀 Features
- Zod Native: Built-in support for Zod schemas, the industry standard for TypeScript validation.
- Automatic Interception: Automatically validates
@Body,@Query, and@Pathparameters when a schema is provided. - Standardized Errors: Throws a
ValidationError(400 Bad Request) with structured details on failure. - Extensible Architecture: Replace the default engine with other libraries (e.g., Joi, Yup) by implementing the
ValidationEngineinterface.
🛠 Configuration
Register the plugin in your cvo.config.ts:
import { defineConfig } from '@cvo/core';
import { ValidationPlugin, ZodEngine } from '@cvo/plugin-validation';
export default defineConfig({
plugins: [
new ValidationPlugin(new ZodEngine())
]
});🧠 Usage
Declarative Validation
Pass a Zod schema directly to CVO decorators. The framework will validate the incoming data before your function is executed.
import { z } from 'zod';
import { Body, http } from '@cvo/core';
const CreateUserSchema = z.object({
username: z.string().min(3).max(20),
email: z.string().email(),
age: z.number().int().positive().optional()
});
@http('POST', '/api/users')
export async function createUser(@Body(CreateUserSchema) data: z.infer<typeof CreateUserSchema>) {
// Data is guaranteed to be valid and correctly typed here
return { id: '123', ...data };
}Manual Validation
You can also use the plugin manually for complex scenarios.
import { useValidation } from '@cvo/server';
const validation = useValidation();
const validatedData = await validation.validate(MySchema, rawData);🔌 Custom Engines
To use a different validation library:
import { ValidationEngine } from '@cvo/plugin-validation';
export class MyCustomEngine implements ValidationEngine {
async validate(schema: any, data: any) {
// Your validation logic here
return data;
}
}