@minsize/rtl
v1.0.0
Published
Lightweight, fast and type-safe runtime type validation for TypeScript
Maintainers
Readme
# RTI (Runtime Type Inference)
Лёгкий, быстрый и типобезопасный валидатор данных для TypeScript.
## 📦 Установка
```bash
npm install @minsize/rti🚀 Быстрый старт
import * as rti from "@minsize/rti"
// Создаём схему
const userSchema = rti.object({
id: rti.number(),
name: rti.string(),
age: rti.optional(rti.number()),
tags: rti.array(rti.string()),
})
// Валидируем данные
const result = userSchema({
id: 1,
name: "John",
tags: ["dev", "ops"]
})
if (result.ok) {
console.log(result.value) // { id: 1, name: "John", tags: ["dev", "ops"] }
} else {
console.error(result.error)
}🎯 Примеры
Объект с вложенными полями
const schema = rti.object({
id: rti.number(),
user: rti.object({
first: rti.string(),
last: rti.string(),
}),
tags: rti.array(rti.string()),
})Pipe и трансформации
const schema = rti.object({
id: rti.pipe(rti.number(), rti.min(1), rti.max(100)),
name: rti.pipe(rti.string(), rti.minLength(2), rti.maxLength(50)),
email: rti.pipe(rti.string()),
})Union и Enum
const schema = rti.object({
status: rti.enum(["active", "inactive", "pending"]),
value: rti.union([rti.string(), rti.number()]),
type: rti.literal("user"),
})Массивы и кортежи
const schema = rti.object({
tags: rti.array(rti.string()), // произвольная длина
point: rti.tuple([rti.number(), rti.number()]), // фиксированная длина
matrix: rti.array(rti.array(rti.number())),
})Record (динамические ключи)
const schema = rti.object({
users: rti.record(rti.string(), rti.object({
name: rti.string(),
age: rti.number(),
})),
})Optional, Nullable
const schema = rti.object({
name: rti.string(), // обязательное
email: rti.optional(rti.string()), // может быть undefined
phone: rti.null(rti.string()), // может быть null
})🔧 Результат валидации
Все валидаторы возвращают объект с полем ok:
type Result<T> =
| { ok: true; value: T }
| { ok: false; error: string }💡 Особенности
- Нулевой вес зависимостей — библиотека не имеет внешних зависимостей
- Полная типобезопасность — TypeScript выводит типы автоматически
- Высокая производительность — быстрее многих аналогов
- Простой API — интуитивно понятный синтаксис
