Установка и использование
Введение
Установить библиотеку можно с помощью вашего любимого пакетного менеджера:
yarn add @rattus-orm/plugin-zod-validate
@rattus-orm/plugin-zod-validate
использует события базы данных
для реализации проверки типа, поэтому его можно использовать с любым Data Provider. Чтобы
включить валидацию, вызовите фабрику плагина в методе use
базы данных:
import { createDatabase } from '@rattus-orm/core'
const db = createDatabase({
connection: 'entities',
dataProvider: new ObjectDataProvider(),
plugins: [RattusZodValidationPlugin()]
})
db.start()
Нестрогий режим
По умолчанию валидатор работает в нестрогом режиме, то есть, при неудачной валидации данных не будет выброшено исключение:
class User extends Model {
public static entity = 'user'
@NumberField(0)
public id: number
@StringField('')
public name: string
}
db.getRepository(User).save({ id: 'asdasd', name: 'test' })
// Ошибки не будет, будет warning в консоль:
//
// Data validation failed (connection.user):
// 1. Invalid number: "asdasd" (user.id)
Строгий режим
Если вы хотите получать ошибку при несоответствии данных, вы можете включить строгий режим валидации:
db.use(RattusZodValidationPlugin({ strict: true }))
Либо, вы можете включить строгий режим для определённых моделей:
db.use(RattusZodValidationPlugin({ strict: [User.entity] }))
В этом случае, описанный выше warning станет текстом ошибки:
class User extends Model {
public static entity = 'user'
@NumberField(0)
public id: number
@StringField('')
public name: string
}
db.getRepository(User).save({ id: 'asdasd', name: 'test' })
// RattusZodValidationError: Data validation failed (connection.user):
// 1. Invalid number: "asdasd" (user.id)
Ошибка RattusZodValidationError
содержит в себе оригинальные ошибки Zod, если по каким-то
причинам они вам нужны. Для TypeScript вы можете использовать специальный тайп-гард:
import { isRattusZodValidationError } from '@rattus-orm/plugin-zod-validate'
try {
db.getRepository(User).save({ id: 'asdasd', name: 'test' })
} catch (e) {
if (isRattusZodValidationError(e)) {
console.log(e.originalZodErrors) // ZodError[]
}
}