import type { FastifyInstance, RouteHandlerMethod, RawRequestDefaultExpression, RawReplyDefaultExpression, RouteShorthandOptions, FastifyPluginOptions, RawServerDefault, RouteGenericInterface, } from "fastify"; type HandlerMethod = RouteHandlerMethod< RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, T >; export class Router { private fastifyInstance: FastifyInstance; constructor(fastifyInstance: FastifyInstance) { this.fastifyInstance = fastifyInstance; } public group = (path: string, combineRoutes: (router: Router) => void) => { this.fastifyInstance.register( (server: FastifyInstance, opts: FastifyPluginOptions, done: () => void) => { const router = new Router(server); combineRoutes(router); done(); }, { prefix: path } ); }; public get = ( path: string, handler: HandlerMethod, options: RouteShorthandOptions ) => { this.fastifyInstance.get(path, options, handler); }; public post = ( path: string, handler: HandlerMethod, options: RouteShorthandOptions = {} ) => { this.fastifyInstance.post(path, options, handler); }; public put = ( path: string, handler: HandlerMethod, options: RouteShorthandOptions = {} ) => { this.fastifyInstance.put(path, options, handler); }; public patch = ( path: string, handler: HandlerMethod, options: RouteShorthandOptions = {} ) => { this.fastifyInstance.patch(path, options, handler); }; public delete = ( path: string, handler: HandlerMethod, options: RouteShorthandOptions = {} ) => { this.fastifyInstance.delete(path, options, handler); }; }