JSONデータをv.object、v.string、v.number、配列バリデータを含む軽量でツリーシェイカブルなValibotスキーマ定義に瞬時に変換します。
import * as v from 'valibot';
export const RootPaymentSummarySchema = v.object({
currency: v.string(),
subtotal: v.pipe(v.number(), v.integer()),
tax: v.number(),
shippingFee: v.pipe(v.number(), v.integer()),
grandTotal: v.number(),
transactionRef: v.string(),
status: v.string()
});
export type RootPaymentSummary = v.InferOutput<typeof RootPaymentSummarySchema>;
export const RootItemsItemSchema = v.object({
sku: v.string(),
title: v.string(),
quantity: v.pipe(v.number(), v.integer()),
unitPrice: v.number(),
discount: v.nullable(v.number()),
tags: v.array(v.string()),
inStock: v.boolean()
});
export type RootItemsItem = v.InferOutput<typeof RootItemsItemSchema>;
export const RootShippingAddressSchema = v.object({
street: v.string(),
suite: v.string(),
city: v.string(),
state: v.string(),
postalCode: v.string(),
country: v.string(),
coordinates: RootShippingAddressCoordinatesSchema
});
export type RootShippingAddress = v.InferOutput<typeof RootShippingAddressSchema>;
export const RootShippingAddressCoordinatesSchema = v.object({
latitude: v.number(),
longitude: v.number()
});
export type RootShippingAddressCoordinates = v.InferOutput<typeof RootShippingAddressCoordinatesSchema>;
export const RootCustomerSchema = v.object({
id: v.pipe(v.number(), v.integer()),
fullName: v.string(),
email: v.pipe(v.string(), v.email()),
phone: v.string(),
tier: v.string(),
loyaltyPoints: v.pipe(v.number(), v.integer())
});
export type RootCustomer = v.InferOutput<typeof RootCustomerSchema>;
export const RootSchema = v.object({
orderId: v.pipe(v.string(), v.uuid()),
orderNumber: v.string(),
createdAt: v.pipe(v.string(), v.isoTimestamp()),
isFulfilled: v.boolean(),
customer: RootCustomerSchema,
shippingAddress: RootShippingAddressSchema,
items: v.array(RootItemsItemSchema),
paymentSummary: RootPaymentSummarySchema
});
export type Root = v.InferOutput<typeof RootSchema>;JSONの解析とValibotスキーマ合成はすべてローカルブラウザ上で完結し、外部送信はゼロです。
軽量なv.object()および個別import構文を出力し、バンドルサイズを1KB未満に抑えます。
メール、UUID、ISO日時、URL、整数制約を自動検出し、厳格性モードも柔軟に設定可能です。
JSONデータをv.object、v.string、v.number、配列バリデータを含む軽量でツリーシェイカブルなValibotスキーマ定義に瞬時に変換します。
エクスポートされるトップレベルのValibotスキーマ名および推論TypeScript型名。
名前空間インポート(import * as v from 'valibot')かモジュラー個別インポート(import { object, string } from 'valibot')を選択。
v.InferOutput<typeof Schema>を使用した静的TypeScript型定義をスキーマの末尾に自動生成。
未定義またはnullのプロパティをラップするラッパー(v.nullish、v.optional、v.nullable)を指定。
Valibotは関数ベースのモジュラー構造を採用しています。フロントエンドバンドルで個別インポートを活用することで、Zod等のモノリシックなライブラリと比較して最大95%のバンドルサイズ削減を実現できます。
プリミティブ型に検証アクションを連結可能です。生成されたスキーマに v.pipe(v.string(), v.email(), v.trim()) などを付加することで、厳格なランタイムサニタイズとバリデーションを容易に構築できます。
APIルートやフォーム送信処理では、例外をスローする v.parse() ではなく v.safeParse(RootSchema, data) を利用し、型安全なエラー構造(result.issues)をクラッシュなしで捕捉することを推奨します。
ハイフンや予約語を含むJSONプロパティキー(例:'content-type')はクォートで囲む必要があります。当ジェネレーターは非標準のキー名を自動的にクォート処理します。
配列内の要素で型が混在している場合、ジェネレーターはオブジェクトのプロパティをマージするか v.union() を生成します。配列内のサンプルデータを統一するか、オプショナル項目の設定を確認してください。
Valibotは関数指向のモジュラー設計を採用しており、未使用のバリデータコードがバンドラーによってツリーシェイクされます。一般的なバリデータライブラリが15〜50KB以上を占有するのに対し、Valibotは実質1KB未満に抑えることが可能です。
変換後の型には v.InferOutput<typeof Schema>、変換前の入力型には v.InferInput<typeof Schema> を使用します。例:export type Root = v.InferOutput<typeof RootSchema>; と記述することで即座に型安全が得られます。
いいえ。すべてのスキーマ生成処理はブラウザ内のローカルAST構文解析によって完結します。機密のAPIレスポンスや個人情報が外部サーバーに送信されることは一切ありません。
ジェネレーターが再帰的に走査し、ネストされたオブジェクトは v.object()、配列は v.array() に正確にマッピングされます。複雑なデータ構造でも階層関係と型整合性を完全に維持します。
JSON構造を高パフォーマンスなTypeBoxのType.Object定義へ変換し、Fastify、Ajv、TypeScriptのランタイム検証および静的型推論を実現します。
Prismaスキーマ(.prisma)からPostgreSQL、MySQL、SQLite向けSQL DDLマイグレーションスクリプトへの変換ガイド。
Prismaスキーマのmodelやenum、リレーションを解析し、Prisma Clientランタイム不要の純粋なTypeScript型定義(interface / type)を即時生成。
OpenAPI 3.0およびSwaggerのJSON/YAML仕様書から、型安全で保守性の高いAxios HTTPクライアント関数とパラメータインターフェースを自動生成します。
依存関係ゼロの標準Fetch APIを活用したTypeScriptクライアントコードを生成。クエリ文字列のシリアライズ、ヘッダー設定、型定義を自動完結。
Drizzle ORM の pgTable、mysqlTable、sqliteTable 定義を高精度に解析し、実行可能な SQL CREATE TABLE マイグレーションスクリプトへと変換します。