///
import express from 'express'
declare global {
namespace Router {
type ListRouteParams =
TRoute extends `/${infer TPart}/${infer TNextRoute}` ?
TPart extends `:${infer TParam}?` ? `${TParam}_O` | ListRouteParams<`/${TNextRoute}`>
: TPart extends `:${infer TParam}` ? `${TParam}_R` | ListRouteParams<`/${TNextRoute}`>
: undefined | ListRouteParams<`/${TNextRoute}`>
: TRoute extends `/${infer TPart}` ?
TPart extends `:${infer TParam}?` ? `${TParam}_O`
: TPart extends `:${infer TParam}` ? `${TParam}_R`
: undefined
: undefined
;
type GetRouteParams = Exclude, undefined>
type GetUrlParams> = {
[K in LooseAutocomplete as K extends `${infer N}_${string}` ? N : string]: K extends `${string}_O` ? string | undefined : string
}
type expressRequest = Omit
interface Request extends expressRequest {
user: any
extras: any
rawBody?: Buffer
_onResponseEvent: PlataOnResponseEvent[]
params: GetUrlParams
}
interface Response extends express.Response {
oldJson(body?: any): this
error(error: PlataError | PlataError[]): this
addOnResponseEvent(callback: PlataOnResponseEvent): void
}
type RequestHandler = (req: Request, res: Response, next: express.NextFunction) => Promise
type HttpPlataMethods =
"all"
| "get"
| "post"
| "put"
| "delete"
| "patch"
| "options"
| "head"
| "checkout"
| "connect"
| "copy"
| "lock"
| "merge"
| "mkactivity"
| "mkcol"
| "move"
| "notify"
| "propfind"
| "proppatch"
| "purge"
| "report"
| "search"
| "subscribe"
| "trace"
| "unlock"
| "unsubscribe"
| "use"
;
interface CustomHttpMethods {}
type HttpMethods =
HttpPlataMethods
| keyof CustomHttpMethods
;
interface Route {
path?: string
method: string
handlers: RequestHandler[],
swaggerHide?: boolean | undefined
}
type RouterConfig = Record> = {
swaggerHide?: boolean
routes: Route[]
httpRoute: string
mark: T
}
type Router = RouterConfig & {
[method in HttpMethods]:
method extends keyof CustomHttpMethods ?
CustomHttpMethods[method]
: (path: T | RequestHandler, ...handlers: RequestHandler[]) => void | Promise
}
type RouterBuilder = (r: Router) => Promise
export interface RequiredRoute extends RequiredInterface {
httpRoute: string
}
type PlataOnResponseEvent = (aReq: Request, aRes?: Response, body?: T, error?: PlataError | PlataError[]) => Promise
}
}