UNPKG

@grace-js/grace

Version:

An opinionated API framework

45 lines 4.21 kB
import { AnyResponseSchema, PossibleResponses } from "./response.js"; import { AfterRoute, BeforeRoute, ContextExtra } from "./middleware.js"; import { ZodSchema } from "zod"; import { Grace } from "../grace.js"; export type Context<Body = any, Query = Record<string, string>, Params = Record<string, string>, Headers = Record<string, string>, Extras = Record<string, unknown>> = { request: Request; body: Body; query: Query; params: Params; headers: Headers; extras: Extras; app: Grace; } & Extras; export type Route<Body, Query, Params, Response extends AnyResponseSchema, Before extends Array<BeforeRoute<Route<Body, Query, Params, any, any, any, Headers, ContextExtras>>>, After extends Array<AfterRoute<Route<Body, Query, Params, any, any, any, Headers, ContextExtras>>>, Headers = Record<string, string>, ContextExtras = ContextExtra, ContextSchema = Context<Body, Query, Params, Headers, ContextExtras>> = { method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'; format?: 'json' | 'multipart' | 'text'; path?: string; schema?: { body?: ZodSchema<Body>; query?: ZodSchema<Query>; params?: ZodSchema<Params>; headers?: ZodSchema<Headers>; response?: Response; }; before?: Before; after?: After; handler: (context: ContextSchema) => Promise<PossibleResponses<Response>>; }; export type AnyRoute = Route<any, any, any, any, any, any, any, any, any>; export type InferContext<R extends AnyRoute> = R extends Route<any, any, any, any, any, any, any, any, infer ContextSchema> ? ContextSchema : never; export type InferResponse<R extends AnyRoute> = R extends Route<any, any, any, infer Response, any, any, any, any, any> ? Response : never; export declare function createRoute<Body, Query, Params, Headers, Response extends AnyResponseSchema, ContextExtras extends ContextExtra, Before extends Array<BeforeRoute<Route<Body, Query, Params, any, any, any, Headers, ContextExtras>>>, After extends Array<AfterRoute<Route<Body, Query, Params, any, any, any, Headers, ContextExtras>>>>(route: Route<Body, Query, Params, Response, Before, After, Headers, ContextExtras>): Route<Body, Query, Params, Response, Before, After, Headers, ContextExtras>; export declare function createRouteWithExtras<ContextExtras extends ContextExtra>(): <Body_1, Query, Params, Headers_1, Response_1 extends AnyResponseSchema, Before extends BeforeRoute<Route<Body_1, Query, Params, any, any, any, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>>[], After extends AfterRoute<Route<Body_1, Query, Params, any, any, any, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>>[]>(route: Route<Body_1, Query, Params, Response_1, Before, After, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>) => Route<Body_1, Query, Params, Response_1, Before, After, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>; export declare function createRouteTemplate<ContextExtras extends ContextExtra>({ before, after, schema, }?: { before?: Array<BeforeRoute<Route<any, any, any, any, any, any, any, ContextExtras>>>; after?: Array<AfterRoute<Route<any, any, any, any, any, any, any, ContextExtras>>>; schema?: { body?: ZodSchema; query?: ZodSchema; params?: ZodSchema; headers?: ZodSchema | Record<string, string>; response?: AnyResponseSchema; }; }): <Body_1, Query, Params, Headers_1, Response_1 extends AnyResponseSchema, Before extends BeforeRoute<Route<Body_1, Query, Params, any, any, any, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>>[], After extends AfterRoute<Route<Body_1, Query, Params, any, any, any, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>>[]>(route: Route<Body_1, Query, Params, Response_1, Before, After, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>) => Route<Body_1, Query, Params, Response_1, Before, After, Headers_1, ContextExtras, Context<Body_1, Query, Params, Headers_1, ContextExtras>>; //# sourceMappingURL=route.d.ts.map