ak-zod-form-kit
Version:
A powerful utility library for processing, transforming, and validating form data with Zod.
137 lines • 6.84 kB
TypeScript
import * as z from 'zod';
/**
* Stratégies de validation pour contrôler le comportement des champs
*
* - `strict` : Validation stricte, rejette tout champ non déclaré (défaut)
* - `allowExtraFields` : Autorise les champs supplémentaires sans validation
* - `removeExtraFields` : Supprime silencieusement les champs non déclarés
* - `partial-strict` : Rend les champs optionnels mais rejette les extras
* - `partial` : Rend les champs optionnels
*/
export type ValidationStrategy = 'strict' | 'allowExtraFields' | 'removeExtraFields' | 'partial-strict' | 'partial';
/**
* Modifications structurelles possibles du schéma
*
* - `default` : Aucune modification structurelle (défaut)
* - `mergeWithAnd` : Combine avec d'autres schémas (ET logique)
* - `mergeWithOr` : Valide contre plusieurs schémas (OU logique)
*/
export type SchemaModification = 'default' | 'mergeWithAnd' | 'mergeWithOr';
/**
* Type utilitaire pour extraire le type inféré d'un champ d'un schéma Zod.
* Il permet d'obtenir le type TypeScript précis qui sera produit après la validation Zod d'un champ donné.
*
* @template T Le type du schéma Zod pour le champ spécifique (par exemple, `z.string()`, `z.number().optional()`).
* @returns Le type TypeScript correspondant au type de données inféré par Zod pour le champ.
*
* @example
* // Pour un champ `z.string()`
* type MyStringType = SchemaFieldType<typeof z.string()>; // Résout à `string`
*
* @example
* // Pour un champ `z.number().optional()`
* type MyOptionalNumberType = SchemaFieldType<typeof z.number().optional()>; // Résout à `number | undefined`
*/
export type SchemaFieldType<T extends z.ZodTypeAny> = T extends z.ZodType<infer U> ? U : never;
/**
* Définit les options configurables pour l'extraction de données à partir d'un objet FormData ou d'un objet JavaScript.
*/
export interface FormDataExtractionOptions {
/**
* Un objet de mappage où les clés sont les noms originaux des champs dans les données d'entrée,
* et les valeurs sont les nouveaux noms que ces champs prendront dans l'objet de sortie.
* Utile pour harmoniser les noms de champs provenant de différentes sources (ex: champs HTML spécifiques).
* @example
* { 'user_name_input': 'name', 'user_email_address': 'email' }
*/
keyTransforms?: Record<string, string>;
/**
* Un tableau de chaînes de caractères représentant les noms des champs qui doivent être exclus
* de l'objet de données extrait. Ces champs seront ignorés, même s'ils sont présents dans l'entrée.
* @example
* ['passwordConfirm', 'csrf_token']
*/
excludeFields?: string[];
/**
* Un tableau de chaînes de caractères représentant les noms des champs qui doivent être inclus
* dans l'objet de données extrait. Si cette option est spécifiée, seuls les champs listés ici
* seront extraits. L'option `excludeFields` prime sur `includeFields` si un champ est listé dans les deux.
* @example
* ['firstName', 'lastName', 'email']
*/
includeFields?: string[];
}
/**
* Définit les options pour la fonction `processAndValidateFormData`, permettant de contrôler
* l'extraction, la transformation et la validation des données de formulaire.
* @template T Le type de la forme brute du schéma Zod (par exemple, `{ name: z.string() }`).
*/
export interface FormDataProcessingOptions<T extends z.ZodRawShape> extends FormDataExtractionOptions {
/**
* La **stratégie de validation** à utiliser pour contrôler le comportement des champs du schéma dynamique.
* Elle détermine comment Zod gère les champs non déclarés (les autorise, les supprime, ou les rejette)
* et définit l'optionalité des champs au niveau racine ou de manière récursive.
*
* @default 'strict'
*/
validationStrategy?: ValidationStrategy;
/**
* La **modification structurelle** à appliquer au schéma de base avant toute validation.
* Ce paramètre permet de combiner le schéma principal avec d'autres schémas via des logiques
* de fusion (AND) ou d'union (OR), modifiant ainsi la forme attendue des données.
*
* @default 'default'
*/
schemaModification?: SchemaModification;
/**
* Un tableau de **schémas Zod supplémentaires** à utiliser en conjonction avec la `schemaModification`.
* Si `schemaModification` est défini sur `'mergeWithAnd'`, ces schémas seront fusionnés (logique ET)
* avec le schéma de base. Si c'est `'mergeWithOr'`, une union (logique OU) sera créée entre tous les schémas.
*/
additionalSchemas?: z.ZodTypeAny[];
/**
* Un objet de fonctions de transformation personnalisées à appliquer aux champs après l'extraction
* mais avant la validation Zod finale. Ces transformations s'ajoutent à celles potentiellement
* définies directement dans le schéma Zod (via `.transform()` ou `.coerce`).
* Utile pour des logiques de transformation qui ne sont pas intrinsèques au schéma Zod.
*
* @template K La clé du champ à transformer.
* @param {SchemaFieldType<T[K]>} value - La valeur du champ avant la transformation.
* @returns {SchemaFieldType<T[K]>} La valeur du champ après la transformation.
*/
transformations?: {
[K in keyof T]?: T[K] extends z.ZodTypeAny ? (value: SchemaFieldType<T[K]>) => SchemaFieldType<T[K]> : never;
};
/**
* Spécifie le format de sortie des données en cas de succès de la validation.
* - `'object'`: Les données validées seront retournées sous forme d'objet JavaScript (par défaut).
* - `'formData'`: Les données validées seront converties en un objet `FormData`.
* @default 'object'
*/
outputFormat?: 'object' | 'formData';
/**
* Un objet contenant des données supplémentaires à fusionner avec les données extraites du formulaire.
* Ces données seront fusionnées AVANT la validation Zod. Si des champs dans `additionalData`
* sont également dans le formulaire et le schéma Zod, les règles de Zod s'appliqueront à la valeur fusionnée.
* Notez que ces données ne sont PAS validées par un schéma séparé ici ; elles sont intégrées au schéma principal.
*/
additionalData?: Record<string, unknown>;
}
/**
* Type de retour unifié pour `processAndValidateFormData`.
* @template T Le type inféré du schéma Zod principal.
*/
export type ProcessedFormDataResult<T extends z.ZodRawShape> = {
success: true;
data: z.infer<z.ZodObject<T>> | FormData;
} | {
success: false;
data: Record<string, unknown>;
errors: Record<string, string>;
errorsInArray: {
key: string;
message: string;
}[];
errorsInString: string;
};
//# sourceMappingURL=types.d.ts.map