Valibot
https://gyazo.com/a5399828a77241d56fa0e38e755c9da8
initial commitは2023/7/7
Zodのchainableなデザインを辞めることでbundle sizeを小さく抑えられる 3つ
schema
methods
actions
https://gyazo.com/4b40fa92fc77f402351ddcdff04ef4da
code:ts
const BirthdaySchema = v.pipe(
v.string(),
v.isoDate(),
v.transform((input) => new Date(input)),
v.brand('birthday')
);
tsの型の感じと近い
code:ts
import { number, object, partial, pick, string } from "valibot";
// TypeScript
type Object1 = Partial<{ key1: string; key2: number }>;
// Valibot
const object1 = partial(object({ key1: string(), key2: number() }));
// TypeScript
type Object2 = Pick<Object1, "key1">;
// Valibot
const object2 = pick(object1, "key1"); Zodより絶対こっちのアプローチのほうが正しいよなあ..mrsekut.icon
lodashとかmomentとかの問題があったのに、なぜZodはchainするデザインにしたのか
validation
code:ts
const EmailSchema = string(email()); const result = safeParse(EmailSchema, 'jane@example.com');
if (result.success) {
const email = result.output;
} else {
console.log(result.issues);
}
なんでちょっとzodと違うねん
v.Inputが使えないやつがあって一貫性がない
code:ts
import * as v from 'valibot';
type Email = v.Input<typeof Email>; // Type 'EmailValidation<string>' does not satisfy the constraint 'BaseSchema<any, any> | BaseSchemaAsync<any, any>'.
const Email = v.email()
書き方がおかしいのか
こうか
code:ts
type Email = v.Input<typeof Email>;