import { Request, Response } from "express"; import { ArraySchema, ErrorTemplateConfiguration, ExtValOf, ExtendedTypeKeys, JsSchema, TypedArraySchema, TypedSchema } from "./helpers"; type RequestHandler = (req: Request, res: Response) => void type ArrayWithLastElement = [...rest: any[], lastArg: L]; type RequsetHandlerWithLastArg RequestHandler = (...args: any[]) => RequestHandler, P extends ArrayWithLastElement = Parameters> = (...args: P) => RequestHandler; type NonEmptyArray = readonly [any, ...any[]]; type ShiftRequestHandler | RequestHandler> = F extends (arg1: infer T, ...rest: infer U) => RequestHandler ? U extends NonEmptyArray ? (...rest: U) => RequestHandler : RequestHandler : RequestHandler type RestedService> = { [K in keyof T]: T[K] extends Function ? (...args: Parameters) => RequestHandler : T[K] } type InstanceOrClass> = T | (new () => T); type TypeValueOf | ArraySchema> = S extends TypedSchema ? S : S extends ExtendedTypeKeys ? ExtValOf : S extends JsSchema ? TypedSchema : S extends ArraySchema ? TypedArraySchema : never; declare function RestService>(service: InstanceOrClass): RestedService; declare function RestMethod(callback: T): (args: Parameters) => RequestHandler; declare function Restify(target: any, key: PropertyKey, desc: PropertyDescriptor): PropertyDescriptor; declare function PassBody>(serviceFunction: F): ShiftRequestHandler declare function ParseBodyAs | ArraySchema, T = TypeValueOf>(type: S, config?: ErrorTemplateConfiguration): >(serviceFunction: F) => ShiftRequestHandler declare function PassBodyAs | ArraySchema, T = TypeValueOf>(type: S, config?: ErrorTemplateConfiguration): >(serviceFunction: F) => ShiftRequestHandler declare function PassAllParams>(serviceFunction: F): ShiftRequestHandler declare function PassAllQueries>(serviceFunction: F): ShiftRequestHandler declare function PassAllCookies>(serviceFunction: F): ShiftRequestHandler declare function PassParam(paramName: string): >(serviceFunction: F) => ShiftRequestHandler declare function PassQuery(queryName: string): >(serviceFunction: F) => ShiftRequestHandler declare function PassCookie(cookieName: string): >(serviceFunction: F) => ShiftRequestHandler declare function PassRequest>(serviceFunction: F): ShiftRequestHandler declare function PassResponse>(serviceFunction: F): ShiftRequestHandler export { ParseBodyAs, PassAllCookies, PassAllParams, PassAllQueries, PassBody, PassBodyAs, PassCookie, PassParam, PassQuery, PassRequest, PassResponse, RestMethod, RestService, Restify };