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
TypeScript
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