UNPKG

fastify-file-router

Version:

A fastify plugin that automatically registers routes from files in a directory.

50 lines 1.97 kB
import type { FastifyReply, FastifyRequest, FastifySchema } from 'fastify'; import type { FromSchema, JSONSchema } from 'json-schema-to-ts'; /** * Helper type to extract TypeScript types from JSON schemas in a RouteSchema * Returns unknown for properties that don't exist (matching Fastify's default behavior) */ type ExtractSchemaTypes<T extends FastifySchema> = { Params: 'params' extends keyof T ? (T['params'] extends JSONSchema ? FromSchema<T['params']> : unknown) : unknown; Body: 'body' extends keyof T ? (T['body'] extends JSONSchema ? FromSchema<T['body']> : unknown) : unknown; Querystring: 'querystring' extends keyof T ? T['querystring'] extends JSONSchema ? FromSchema<T['querystring']> : unknown : unknown; Headers: 'headers' extends keyof T ? (T['headers'] extends JSONSchema ? FromSchema<T['headers']> : unknown) : unknown; }; /** * Route handler function type with inferred types from schema */ type TypedRouteHandler<T extends FastifySchema> = (request: FastifyRequest<ExtractSchemaTypes<T>>, reply: FastifyReply) => Promise<unknown> | unknown; /** * Route module returned by defineRoute */ export interface DefinedRoute<T extends FastifySchema> { schema: T; handler: TypedRouteHandler<T>; } /** * Helper to define a route with type inference for request parameters, body, querystring, and headers. * * @example * ```typescript * export const route = defineRoute({ * schema: { * params: { * type: 'object', * properties: { id: { type: 'string' } }, * required: ['id'] * } as const * }, * handler: async (request, reply) => { * // request.params.id is correctly typed as string * const { id } = request.params; * reply.status(200).send({ id }); * } * }); * ``` */ export declare function defineRoute<T extends FastifySchema>(route: { schema: T; handler: TypedRouteHandler<T>; }): DefinedRoute<T>; export {}; //# sourceMappingURL=defineRoute.d.ts.map