Transformez vos données JSON en définitions de schémas Valibot légères et compatibles tree-shaking avec v.object, v.string, v.number et des validateurs de tableaux.
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>;L'analyse complète du JSON et la génération des schémas Valibot s'exécutent dans votre navigateur sans aucune fuite de données.
Génère des schémas ultra-légers avec imports modulaires pour un bundle final sous la barre de 1 Ko.
Détection automatique des e-mails, UUID, dates ISO, URLs et nombres entiers avec stricte configurabilité.
Transformez vos données JSON en définitions de schémas Valibot légères et compatibles tree-shaking avec v.object, v.string, v.number et des validateurs de tableaux.
Identifiant du schéma Valibot exporté et du type TypeScript inféré correspondant.
Sélectionne entre l'importation par espace de noms (import * as v from 'valibot') et les importations modulaires nommées (import { object, string } from 'valibot').
Ajoute la définition de type statique TypeScript exportée et inférée via v.InferOutput<typeof Schema>.
Configure le wrapper helper pour les clés manquantes ou nulles (v.nullish, v.optional ou v.nullable).
Les schémas Valibot reposent sur une architecture modulaire basée sur des fonctions pures. Utilisez les imports nommés dans vos applications frontend pour réduire l'empreinte du bundle jusqu'à 95 % par rapport à Zod ou Yup.
Étendez les validateurs primitifs en chaînant des actions de validation : appliquez v.pipe(v.string(), v.email(), v.trim()) pour garantir un nettoyage et une validation stricts au runtime.
Privilégiez v.safeParse(RootSchema, data) plutôt que v.parse() dans vos gestionnaires d'API et formulaires afin d'intercepter les erreurs typées (result.issues) sans interrompre l'exécution.
Les clés contenant des caractères spéciaux ou des tirets (ex. 'content-type') doivent être entourées de guillemets. Le générateur place automatiquement ces clés entre guillemets.
Lorsque les éléments d'un tableau présentent des types distincts, le générateur fusionne les propriétés ou produit un schéma d'union avec v.union(). Harmonisez les données d'exemple ou ajustez les options de champs optionnels.
Valibot adopte une conception fonctionnelle et modulaire où chaque méthode est indépendante, permettant aux bundlers modernes d'éliminer le code inutilisé (tree-shaking). Alors que les bibliothèques classiques pèsent de 15 à 50+ Ko, Valibot n'ajoute généralement que moins de 1 Ko à votre bundle final.
Utilisez v.InferOutput<typeof Schema> pour les types de données après transformation, ou v.InferInput<typeof Schema> pour les entrées brutes. Exemple : export type Root = v.InferOutput<typeof RootSchema>;.
Non. La conversion s'exécute intégralement côté client dans votre navigateur via un analyseur syntaxique local (AST). Aucune donnée API confidentielle ou personnelle ne quitte votre machine.
Le générateur parcourt récursivement les structures en imbriquant les schémas v.object() et v.array(), garantissant une correspondance exacte de la hiérarchie et des types de données.
Convertissez des structures JSON en définitions TypeBox Type.Object haute performance pour Fastify, Ajv et la validation TypeScript à l'exécution.
Guide technique pour convertir des schémas Prisma en scripts SQL DDL compatibles PostgreSQL, MySQL et SQLite.
Extrayez les modèles, énumérations, champs optionnels et relations de votre schéma Prisma sous forme d'interfaces TypeScript autonomes sans dépendance au runtime Prisma Client.
Générez des fonctions de client HTTP Axios sécurisées et typées ainsi que des interfaces de paramètres à partir de spécifications OpenAPI 3.0 et Swagger JSON/YAML.
Générez des clients d'API TypeScript en fetch natif sans dépendance externe, avec sérialisation des requêtes, en-têtes et typage complet.
Traduisez fidèlement les définitions pgTable, mysqlTable et sqliteTable de Drizzle ORM en scripts de migration SQL CREATE TABLE exécutables.