@galaxy-stack/orbit-validation
v0.1.9
Published
Validation module for Orbit framework
Readme
@galaxy-stack/orbit-validation
Mô tả
Module validation cho Orbit với ValidationPipe và tích hợp Zod.
Tính năng chính
1. ValidationPipe
import { ValidationPipe, UsePipes } from '@galaxy-stack/orbit-validation';
@Controller('users')
@UsePipes(ValidationPipe)
class UserController {
@Post()
createUser(@Body() data: CreateUserDto) {
return data;
}
}2. ZodValidationPipe
import { z } from 'zod';
import { ZodValidationPipe } from '@galaxy-stack/orbit-validation';
const CreateUserSchema = z.object({
name: z.string().min(2).max(50),
email: z.string().email(),
age: z.number().int().positive().optional(),
});
@Controller('users')
class UserController {
@Post()
@UsePipes(new ZodValidationPipe(CreateUserSchema))
createUser(@Body() data: z.infer<typeof CreateUserSchema>) {
return data;
}
}3. Transform Decorators
import { Transform, ToInt, ToBoolean, Trim } from '@galaxy-stack/orbit-validation';
class QueryDto {
@ToInt()
page!: number;
@ToInt()
limit!: number;
@ToBoolean()
active!: boolean;
@Trim()
search!: string;
}Cấu hình Global
import { ValidationModule } from '@galaxy-stack/orbit-validation';
@Module({
imports: [
ValidationModule.forRoot({
transform: true,
whitelist: true,
forbidNonWhitelisted: true,
}),
],
})
class AppModule {}Validation Options
interface ValidationOptions {
transform?: boolean; // Auto transform types
whitelist?: boolean; // Strip unknown properties
forbidNonWhitelisted?: boolean; // Throw on unknown properties
skipMissingProperties?: boolean;
skipNullProperties?: boolean;
skipUndefinedProperties?: boolean;
}Custom Validators
import { ValidatorConstraint, Validate } from '@galaxy-stack/orbit-validation';
@ValidatorConstraint({ name: 'isUnique', async: true })
class IsUniqueConstraint {
async validate(value: string) {
const exists = await checkIfExists(value);
return !exists;
}
defaultMessage() {
return 'Value already exists';
}
}
class CreateUserDto {
@Validate(IsUniqueConstraint)
email!: string;
}Error Response
{
"statusCode": 400,
"message": "Validation failed",
"errors": [
{
"field": "email",
"message": "Invalid email format"
},
{
"field": "age",
"message": "Must be a positive integer"
}
]
}