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
, Params = Record, Headers = Record, Extras = Record> = {
request: Request;
body: Body;
query: Query;
params: Params;
headers: Headers;
extras: Extras;
app: Grace;
} & Extras;
export type Route>>, After extends Array>>, Headers = Record, ContextExtras = ContextExtra, ContextSchema = Context> = {
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
format?: 'json' | 'multipart' | 'text';
path?: string;
schema?: {
body?: ZodSchema;
query?: ZodSchema;
params?: ZodSchema;
headers?: ZodSchema;
response?: Response;
};
before?: Before;
after?: After;
handler: (context: ContextSchema) => Promise>;
};
export type AnyRoute = Route;
export type InferContext = R extends Route ? ContextSchema : never;
export type InferResponse = R extends Route ? Response : never;
export declare function createRoute>>, After extends Array>>>(route: Route): Route;
export declare function createRouteWithExtras(): >>[], After extends AfterRoute>>[]>(route: Route>) => Route>;
export declare function createRouteTemplate({ before, after, schema, }?: {
before?: Array>>;
after?: Array>>;
schema?: {
body?: ZodSchema;
query?: ZodSchema;
params?: ZodSchema;
headers?: ZodSchema | Record;
response?: AnyResponseSchema;
};
}): >>[], After extends AfterRoute>>[]>(route: Route>) => Route>;
//# sourceMappingURL=route.d.ts.map