@t3ned/channel
Version:
Ergonomic, chaining-based Typescript framework for quick API development for Fastify
282 lines • 8.79 kB
TypeScript
import type { HTTPMethods, FastifyRequest, FastifyReply, onErrorHookHandler, onRequestHookHandler, onResponseHookHandler, onSendHookHandler, onTimeoutHookHandler, preHandlerHookHandler, preParsingHookHandler, preSerializationHookHandler, preValidationHookHandler } from "fastify";
import type { z, ZodTypeAny } from "zod";
import type { Application } from "./Application";
import { HttpStatus } from "../../constants";
export declare class Route<Params extends ZodTypeAny, Query extends ZodTypeAny, Body extends ZodTypeAny> {
/**
* The route path
*/
path: Route.Path;
/**
* The route method
*/
private _method;
/**
* The supported versions for the route
*/
private _versions;
/**
* The default http status for responses
*/
private _httpStatus;
/**
* The schema for the request params
*/
private _paramsSchema?;
/**
* The schema for the request query
*/
private _querySchema?;
/**
* The schema for request body
*/
private _bodySchema?;
/**
* The onRequest hook for the route
*/
private _onRequestHook?;
/**
* The preParsing hook for the route
*/
private _preParsingHook?;
/**
* The preValidation hook for the route
*/
private _preValidationHook?;
/**
* The preHandler hook for the route
*/
private _preHandlerHook?;
/**
* The preSerialization hook for the route
*/
private _preSerializationHook?;
/**
* The onSend hook for the route
*/
private _onSendHook?;
/**
* The onResponse hook for the route
*/
private _onResponseHook?;
/**
* The onTimeout hook for the route
*/
private _onTimeoutHook?;
/**
* The onError hook for the route
*/
private _onErrorHook?;
/**
* The route handler
*/
private _handler;
/**
* @param options The route options
*/
constructor(options: Route.Options<Params, Query, Body>);
/**
* Add a supported version to the route
* @param version The version
* @param prefix The version prefix
*
* @returns The route
*/
version(version: number, prefix?: string): this;
/**
* Set the default http status for responses
* @param httpStatus The http status
*
* @returns The route
*/
status(httpStatus: HttpStatus): this;
/**
* Set the params schema
* @param schema The validation schema
*
* @returns The route
*/
params<U extends ZodTypeAny>(schema: U): Route<U, Query, Body>;
/**
* Set the query schema
* @param schema The validation schema
*
* @returns The route
*/
query<U extends ZodTypeAny>(schema: U): Route<Params, U, Body>;
/**
* Set the body schema
* @param schema The validation schema
*
* @returns The route
*/
body<U extends ZodTypeAny>(schema: U): Route<Params, Query, U>;
/**
* Set the handler for the route
* @param handler The route handler
*
* @returns The route
*/
handler(handler: Route.Handler<Params, Query, Body>): this;
/**
* Define the onRequest hook for the route
* @param handler The hook handler
*/
onRequest(handler: onRequestHookHandler): this;
/**
* Define the preParsing hook for the route
* @param handler The hook handler
*/
preParsing(handler: preParsingHookHandler): this;
/**
* Define the preValidation hook for the route
* @param handler The hook handler
*/
preValidation(handler: preValidationHookHandler): this;
/**
* Define the preHandler hook for the route
* @param handler The hook handler
*/
preHandler(handler: preHandlerHookHandler): this;
/**
* Define the preSerialization hook for the route
* @param handler The hook handler
*/
preSerialization<Payload>(handler: preSerializationHookHandler<Payload>): this;
/**
* Define the onSend hook for the route
* @param handler The hook handler
*/
onSend<Payload>(handler: onSendHookHandler<Payload>): this;
/**
* Define the onResponse hook for the route
* @param handler The hook handler
*/
onResponse(handler: onResponseHookHandler): this;
/**
* Define the onTimeout hook for the route
* @param handler The hook handler
*/
onTimeout(handler: onTimeoutHookHandler): this;
/**
* Define the onError hook for the route
* @param handler The hook handler
*/
onError(handler: onErrorHookHandler): this;
/**
* Get the versioned routes
*/
toVersionedRoutes(application: Application): Route.VersionedRoute<Params, Query, Body>[];
/**
*
* @returns
*/
toJSON(application: Application): Route.VersionedRoute<Params, Query, Body>;
}
export declare namespace Route {
type Any = Route<ZodTypeAny, ZodTypeAny, ZodTypeAny>;
type AnyParsedData = ParsedData<ZodTypeAny, ZodTypeAny, ZodTypeAny>;
type Path = `/${string}`;
type Method = HTTPMethods;
type Handler<Params extends ZodTypeAny, Query extends ZodTypeAny, Body extends ZodTypeAny> = (ctx: HandlerContext<Params, Query, Body>) => unknown;
interface HandlerContext<Params extends ZodTypeAny, Query extends ZodTypeAny, Body extends ZodTypeAny> {
req: FastifyRequest;
reply: FastifyReply;
parsed: ParsedData<Params, Query, Body>;
}
interface ParsedData<Params extends ZodTypeAny, Query extends ZodTypeAny, Body extends ZodTypeAny> {
params: z.infer<Params>;
query: z.infer<Query>;
body: z.infer<Body>;
}
interface VersionedRoute<Params extends ZodTypeAny, Query extends ZodTypeAny, Body extends ZodTypeAny> {
path: Path;
method: Method;
httpStatus: HttpStatus;
paramsSchema?: Params;
querySchema?: Query;
bodySchema?: Body;
handler: Handler<Params, Query, Body>;
onRequest?: onRequestHookHandler;
preParsing?: preParsingHookHandler;
preValidation?: preValidationHookHandler;
preHandler?: preHandlerHookHandler;
preSerialization?: preSerializationHookHandler<unknown>;
onSend?: onSendHookHandler<unknown>;
onResponse?: onResponseHookHandler;
onTimeout?: onTimeoutHookHandler;
onError?: onErrorHookHandler;
}
interface Options<Params extends ZodTypeAny, Query extends ZodTypeAny, Body extends ZodTypeAny> {
/**
* The route path
*/
path: Path;
/**
* The route method
*/
method: Method;
/**
* The route versions
*/
versions?: [prefix: string | null, v: number][];
/**
* The default http for responses
*/
httpStatus?: HttpStatus;
/**
* The schema for the request params
*/
paramsSchema?: Params;
/**
* The schema for the request query
*/
querySchema?: Query;
/**
* The schema for the request body
*/
bodySchema?: Body;
/**
* The onRequest hook for the route
*/
onRequestHook?: onRequestHookHandler;
/**
* The preParsing hook for the route
*/
preParsingHook?: preParsingHookHandler;
/**
* The preValidation hook for the route
*/
preValidationHook?: preValidationHookHandler;
/**
* The preHandler hook for the route
*/
preHandlerHook?: preHandlerHookHandler;
/**
* The preSerialization hook for the route
*/
preSerializationHook?: preSerializationHookHandler<unknown>;
/**
* The onSend hook for the route
*/
onSendHook?: onSendHookHandler<unknown>;
/**
* The onResponse hook for the route
*/
onResponseHook?: onResponseHookHandler;
/**
* The onTimeout hook for the route
*/
onTimeoutHook?: onTimeoutHookHandler;
/**
* The onError hook for the route
*/
onErrorHook?: onErrorHookHandler;
}
}
export declare const Get: (path: Route.Path) => Route<z.ZodTypeAny, z.ZodTypeAny, z.ZodTypeAny>;
export declare const Post: (path: Route.Path) => Route<z.ZodTypeAny, z.ZodTypeAny, z.ZodTypeAny>;
export declare const Patch: (path: Route.Path) => Route<z.ZodTypeAny, z.ZodTypeAny, z.ZodTypeAny>;
export declare const Put: (path: Route.Path) => Route<z.ZodTypeAny, z.ZodTypeAny, z.ZodTypeAny>;
export declare const Delete: (path: Route.Path) => Route<z.ZodTypeAny, z.ZodTypeAny, z.ZodTypeAny>;
//# sourceMappingURL=Route.d.ts.map