UNPKG

arvox-backend

Version:

Un framework backend moderne et modulaire basé sur Hono, TypeScript et l'architecture hexagonale avec authentification Better Auth + Drizzle intégrée

545 lines 20.5 kB
import { z } from 'zod'; /** * Utilitaires pour simplifier la création de routes OpenAPI * Alternative plus simple et pratique aux décorateurs */ export interface RouteSchemas<TRequest = any, TResponse = any> { request?: z.ZodSchema<TRequest>; response: z.ZodSchema<TResponse>; query?: z.ZodSchema<any>; } export interface RouteOptions { tag?: string; summary?: string; description?: string; security?: boolean; statusCode?: number; } /** * Classe utilitaire pour créer des routes simplifiées */ export declare class RouteBuilder { /** * Créer une route POST simplifiée */ static post<TRequest, TResponse>(path: string, schemas: RouteSchemas<TRequest, TResponse> & { request: z.ZodSchema<TRequest>; }, options?: RouteOptions): { method: "post"; path: string; tags: string[]; summary: string; description: string | undefined; request: { body: { content: { 'application/json': { schema: z.ZodType<TRequest, z.ZodTypeDef, TRequest>; }; }; }; }; responses: { 401?: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; } | undefined; 400: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; }; }; } & { getRoutingPath(): string; }; /** * Créer une route GET simplifiée avec pagination */ static getList<TResponse>(path: string, schemas: RouteSchemas<any, TResponse>, options?: RouteOptions): { method: "get"; path: string; tags: string[]; summary: string; description: string | undefined; request: { query: z.ZodObject<{ page: z.ZodEffects<z.ZodOptional<z.ZodString>, number, string | undefined>; limit: z.ZodEffects<z.ZodOptional<z.ZodString>, number, string | undefined>; search: z.ZodOptional<z.ZodString>; sort: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { page: number; limit: number; search?: string | undefined; sort?: string | undefined; }, { page?: string | undefined; limit?: string | undefined; search?: string | undefined; sort?: string | undefined; }>; }; responses: { 401?: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; } | undefined; 200: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; data: z.ZodObject<{ items: z.ZodArray<z.ZodType<TResponse, z.ZodTypeDef, TResponse>, "many">; pagination: z.ZodObject<{ total: z.ZodNumber; page: z.ZodNumber; limit: z.ZodNumber; totalPages: z.ZodNumber; hasNext: z.ZodBoolean; hasPrev: z.ZodBoolean; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean; }, { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean; }>; }, "strip", z.ZodTypeAny, { items: TResponse[]; pagination: { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean; }; }, { items: TResponse[]; pagination: { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean; }; }>; }, "strip", z.ZodTypeAny, { data: { items: TResponse[]; pagination: { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean; }; }; success: boolean; }, { data: { items: TResponse[]; pagination: { page: number; limit: number; total: number; totalPages: number; hasNext: boolean; hasPrev: boolean; }; }; success: boolean; }>; }; }; }; 400: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; }; }; } & { getRoutingPath(): string; }; /** * Créer une route GET par ID simplifiée */ static getById<TResponse>(path: string, schemas: RouteSchemas<any, TResponse>, options?: RouteOptions): { method: "get"; path: string; tags: string[]; summary: string; description: string | undefined; request: { params: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; }; responses: { 401?: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; } | undefined; 200: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; data: z.ZodType<TResponse, z.ZodTypeDef, TResponse>; }, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{ success: z.ZodBoolean; data: z.ZodType<TResponse, z.ZodTypeDef, TResponse>; }>, any> extends infer T ? { [k in keyof T]: T[k]; } : never, z.baseObjectInputType<{ success: z.ZodBoolean; data: z.ZodType<TResponse, z.ZodTypeDef, TResponse>; }> extends infer T_1 ? { [k_1 in keyof T_1]: T_1[k_1]; } : never>; }; }; }; 404: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; }; }; } & { getRoutingPath(): string; }; /** * Créer une route PUT simplifiée */ static put<TRequest, TResponse>(path: string, schemas: RouteSchemas<TRequest, TResponse> & { request: z.ZodSchema<TRequest>; }, options?: RouteOptions): { method: "put"; path: string; tags: string[]; summary: string; description: string | undefined; request: { params: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; body: { content: { 'application/json': { schema: z.ZodType<TRequest, z.ZodTypeDef, TRequest>; }; }; }; }; responses: { 401?: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; } | undefined; 200: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; data: z.ZodType<TResponse, z.ZodTypeDef, TResponse>; }, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{ success: z.ZodBoolean; data: z.ZodType<TResponse, z.ZodTypeDef, TResponse>; }>, any> extends infer T ? { [k in keyof T]: T[k]; } : never, z.baseObjectInputType<{ success: z.ZodBoolean; data: z.ZodType<TResponse, z.ZodTypeDef, TResponse>; }> extends infer T_1 ? { [k_1 in keyof T_1]: T_1[k_1]; } : never>; }; }; }; 400: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; }; 404: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; }; }; } & { getRoutingPath(): string; }; /** * Créer une route DELETE simplifiée */ static delete(path: string, options?: RouteOptions): { method: "delete"; path: string; tags: string[]; summary: string; description: string | undefined; request: { params: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; }; responses: { 401?: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; } | undefined; 200: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; data: z.ZodObject<{ deleted: z.ZodBoolean; }, "strip", z.ZodTypeAny, { deleted: boolean; }, { deleted: boolean; }>; }, "strip", z.ZodTypeAny, { data: { deleted: boolean; }; success: boolean; }, { data: { deleted: boolean; }; success: boolean; }>; }; }; }; 404: { description: string; content: { 'application/json': { schema: z.ZodObject<{ success: z.ZodBoolean; error: z.ZodString; }, "strip", z.ZodTypeAny, { error: string; success: boolean; }, { error: string; success: boolean; }>; }; }; }; }; } & { getRoutingPath(): string; }; /** * Helper pour créer une réponse d'erreur standardisée */ private static errorResponse; } /** * Export des méthodes statiques pour une utilisation plus concise */ export declare const Route: { post: typeof RouteBuilder.post; getList: typeof RouteBuilder.getList; getById: typeof RouteBuilder.getById; put: typeof RouteBuilder.put; delete: typeof RouteBuilder.delete; }; export declare const CommonSchemas: { id: z.ZodString; email: z.ZodString; name: z.ZodString; description: z.ZodString; isActive: z.ZodBoolean; timestamps: z.ZodObject<{ createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { createdAt: Date; updatedAt: Date; }, { createdAt: Date; updatedAt: Date; }>; }; /** * Helper pour créer des schémas de création (sans id, timestamps) */ export declare function createSchema<T extends z.ZodRawShape>(shape: T): z.ZodObject<T, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<T>, any> extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never, z.baseObjectInputType<T> extends infer T_2 ? { [k_1 in keyof T_2]: T_2[k_1]; } : never>; /** * Helper pour créer des schémas de mise à jour (partiels) */ export declare function updateSchema<T extends z.ZodRawShape>(shape: T): z.ZodObject<{ [k in keyof T]: z.ZodOptional<T[k]>; }, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{ [k in keyof T]: z.ZodOptional<T[k]>; }>, any> extends infer T_1 ? { [k_1 in keyof T_1]: T_1[k_1]; } : never, z.baseObjectInputType<{ [k in keyof T]: z.ZodOptional<T[k]>; }> extends infer T_2 ? { [k_2 in keyof T_2]: T_2[k_2]; } : never>; /** * Helper pour créer des schémas d'entité complète */ export declare function entitySchema<T extends z.ZodRawShape>(shape: T): z.ZodObject<{ id: z.ZodString; } & T & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{ id: z.ZodString; } & T & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }>, any> extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never, z.baseObjectInputType<{ id: z.ZodString; } & T & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }> extends infer T_2 ? { [k_1 in keyof T_2]: T_2[k_1]; } : never>; //# sourceMappingURL=route.util.d.ts.map