UNPKG

swagger-typed-express-docs

Version:

Simple express runtime parser and documentation swagger generator with 100% support of Typescript static types

225 lines (224 loc) 11.7 kB
import { DeepPartial } from './utils'; import { NextFunction, Request, Response } from 'express'; import { InferSchemaType, TSchema } from './tsSchema'; export declare const __expressTypedHack_key__ = "__expressTypedHack_key__"; export declare const __expressOpenAPIHack__: unique symbol; type Config = { headers?: TSchema; params?: Record<string, TSchema>; query?: Record<string, TSchema>; body?: TSchema; returns?: TSchema; }; type UseEmptyObjectAsDefault<T> = T extends Record<any, any> ? T : {}; type WrapToTObject<T> = { type: 'object'; required: true; properties: T; }; export declare const getApiDocInstance: ({ errorFormatter, }?: { errorFormatter?: ((errors: { errors: { headers?: any; params?: any; query?: any; body?: any; returns?: any; }; }) => any) | undefined; }) => <C extends Config>(docs: C) => (handle: (req: Omit<Request<{ [K_1 in (((UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) extends infer T_1 ? T_1 extends (UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) ? T_1 extends Record<any, infer Values> ? Values : never : never : never) & { required: true; })["key"]]: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["params"]>[K_1], "decoded">; } & { [K_2 in (((UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) extends infer T_1 ? T_1 extends (UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) ? T_1 extends Record<any, infer Values> ? Values : never : never : never) & { required: false; })["key"]]?: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["params"]>[K_2], "decoded"> | undefined; }, any, InferSchemaType<C["body"]>, { [K_4 in (((UseEmptyObjectAsDefault<C["query"]> extends infer T_2 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_2]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) extends infer T_3 ? T_3 extends (UseEmptyObjectAsDefault<C["query"]> extends infer T_4 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_4]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) ? T_3 extends Record<any, infer Values> ? Values : never : never : never) & { required: true; })["key"]]: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["query"]>[K_4], "decoded">; } & { [K_5 in (((UseEmptyObjectAsDefault<C["query"]> extends infer T_5 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_5]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) extends infer T_6 ? T_6 extends (UseEmptyObjectAsDefault<C["query"]> extends infer T_7 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_7]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) ? T_6 extends Record<any, infer Values> ? Values : never : never : never) & { required: false; })["key"]]?: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["query"]>[K_5], "decoded"> | undefined; }, Record<string, any>>, "headers"> & { headers: { [K_7 in (((UseEmptyObjectAsDefault<C["headers"]> extends infer T_8 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_8]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) extends infer T_9 ? T_9 extends (UseEmptyObjectAsDefault<C["headers"]> extends infer T_10 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_10]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) ? T_9 extends Record<any, infer Values> ? Values : never : never : never) & { required: true; })["key"]]: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["headers"]>[K_7], "decoded">; } & { [K_8 in (((UseEmptyObjectAsDefault<C["headers"]> extends infer T_11 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_11]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) extends infer T_12 ? T_12 extends (UseEmptyObjectAsDefault<C["headers"]> extends infer T_13 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_13]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) ? T_12 extends Record<any, infer Values> ? Values : never : never : never) & { required: false; })["key"]]?: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["headers"]>[K_8], "decoded"> | undefined; }; }, res: Omit<Response<any, Record<string, any>>, "send"> & { send: (data: InferSchemaType<C["returns"]>) => void; tSend: (data: InferSchemaType<C["returns"]>) => void; }, next: NextFunction) => void) => any; export declare const apiDoc: <C extends Config>(docs: C) => (handle: (req: Omit<Request<{ [K_1 in (((UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) extends infer T_1 ? T_1 extends (UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) ? T_1 extends Record<any, infer Values> ? Values : never : never : never) & { required: true; })["key"]]: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["params"]>[K_1], "decoded">; } & { [K_2 in (((UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) extends infer T_1 ? T_1 extends (UseEmptyObjectAsDefault<C["params"]> extends infer T extends Record<any, { required: boolean; }> ? { [K in keyof T]: UseEmptyObjectAsDefault<C["params"]>[K] & { key: K; }; } : never) ? T_1 extends Record<any, infer Values> ? Values : never : never : never) & { required: false; })["key"]]?: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["params"]>[K_2], "decoded"> | undefined; }, any, InferSchemaType<C["body"]>, { [K_4 in (((UseEmptyObjectAsDefault<C["query"]> extends infer T_2 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_2]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) extends infer T_3 ? T_3 extends (UseEmptyObjectAsDefault<C["query"]> extends infer T_4 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_4]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) ? T_3 extends Record<any, infer Values> ? Values : never : never : never) & { required: true; })["key"]]: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["query"]>[K_4], "decoded">; } & { [K_5 in (((UseEmptyObjectAsDefault<C["query"]> extends infer T_5 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_5]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) extends infer T_6 ? T_6 extends (UseEmptyObjectAsDefault<C["query"]> extends infer T_7 extends Record<any, { required: boolean; }> ? { [K_3 in keyof T_7]: UseEmptyObjectAsDefault<C["query"]>[K_3] & { key: K_3; }; } : never) ? T_6 extends Record<any, infer Values> ? Values : never : never : never) & { required: false; })["key"]]?: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["query"]>[K_5], "decoded"> | undefined; }, Record<string, any>>, "headers"> & { headers: { [K_7 in (((UseEmptyObjectAsDefault<C["headers"]> extends infer T_8 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_8]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) extends infer T_9 ? T_9 extends (UseEmptyObjectAsDefault<C["headers"]> extends infer T_10 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_10]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) ? T_9 extends Record<any, infer Values> ? Values : never : never : never) & { required: true; })["key"]]: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["headers"]>[K_7], "decoded">; } & { [K_8 in (((UseEmptyObjectAsDefault<C["headers"]> extends infer T_11 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_11]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) extends infer T_12 ? T_12 extends (UseEmptyObjectAsDefault<C["headers"]> extends infer T_13 extends Record<any, { required: boolean; }> ? { [K_6 in keyof T_13]: UseEmptyObjectAsDefault<C["headers"]>[K_6] & { key: K_6; }; } : never) ? T_12 extends Record<any, infer Values> ? Values : never : never : never) & { required: false; })["key"]]?: import("./tsSchema").InferSchemaTypeEncDec<UseEmptyObjectAsDefault<C["headers"]>[K_8], "decoded"> | undefined; }; }, res: Omit<Response<any, Record<string, any>>, "send"> & { send: (data: InferSchemaType<C["returns"]>) => void; tSend: (data: InferSchemaType<C["returns"]>) => void; }, next: NextFunction) => void) => any; type ExpressRouterInternalStruct = { name: 'router'; regexp: RegExp; keys: { name: string; optional: boolean; offset: number; }[]; __handle: ExpressRouteInternalStruct; handle: ExpressRouteInternalStruct; route: { stack: { handle: (...any: any[]) => any; method: string; }[]; path: string; }; }; type ExpressRouteHandlerInternalStruct = { name: 'bound dispatch'; route: { stack: { handle: (a?: symbol) => { apiRouteSchema: { paramsSchema: any; querySchema: any; bodySchema: any; returnsSchema: any; }; handle: (...args: any[]) => any; }; method: string; _swaggerTypedExpressDocs__route_cache?: any; }[]; path: string; }; }; type ExpressRouteInternalStruct = { stack: (ExpressRouteHandlerInternalStruct | ExpressRouterInternalStruct)[]; }; type OpenAPIShape = DeepPartial<{ openapi: '3.0.0'; info: { description: string; version: string; title: string; termsOfService: string; contact: { email: string; }; }; servers: { url: string; }[]; paths: any; }>; export declare const initApiDocs: (expressApp: { _router: ExpressRouteInternalStruct; }, customOpenAPIType?: OpenAPIShape) => any; export declare const getMock_apiDocInstance: ({ errorFormatter }?: { errorFormatter?: ((err: any) => any) | undefined; }) => <T extends (req: Request, res: Response, next: NextFunction) => any>(a: Parameters<typeof apiDoc>[0]) => (_handler: T) => any; export declare const mock_apiDoc: <T extends (req: Request, res: Response, next: NextFunction) => any>(a: Parameters<typeof apiDoc>[0]) => (_handler: T) => any; export {};