You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					181 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					181 lines
				
				4.5 KiB
			| 
											3 years ago
										 | import {FastifyPluginCallback, FastifySchema, onRequestHookHandler, preHandlerHookHandler} from 'fastify'; | ||
|  | import { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types'; | ||
|  | 
 | ||
|  | declare module 'fastify' { | ||
|  |   interface FastifyInstance { | ||
|  |     swagger: ( | ||
|  |       opts?: { | ||
|  |         yaml?: boolean; | ||
|  |       } | ||
|  |     ) => OpenAPI.Document; | ||
|  | 
 | ||
|  |     swaggerCSP: { | ||
|  |       script: string[]; | ||
|  |       style: string[]; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   interface FastifySchema { | ||
|  |     hide?: boolean; | ||
|  |     deprecated?: boolean; | ||
|  |     tags?: string[]; | ||
|  |     description?: string; | ||
|  |     summary?: string; | ||
|  |     consumes?: string[]; | ||
|  |     produces?: string[]; | ||
|  |     externalDocs?: OpenAPIV2.ExternalDocumentationObject | OpenAPIV3.ExternalDocumentationObject; | ||
|  |     security?: Array<{ [securityLabel: string]: string[] }>; | ||
|  |     /** | ||
|  |      * OpenAPI operation unique identifier | ||
|  |      */ | ||
|  |     operationId?: string; | ||
|  |   } | ||
|  | 
 | ||
|  |   interface RouteShorthandOptions { | ||
|  |     links?: { | ||
|  |       [statusCode: string]: OpenAPIV3.ResponseObject['links']; | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | export const fastifySwagger: FastifyPluginCallback<SwaggerOptions>; | ||
|  | 
 | ||
|  | export type SwaggerOptions = (FastifyStaticSwaggerOptions | FastifyDynamicSwaggerOptions); | ||
|  | export interface FastifySwaggerOptions { | ||
|  |   mode?: 'static' | 'dynamic'; | ||
|  |   /** | ||
|  |    * Overwrite the swagger url end-point | ||
|  |    * @default /documentation | ||
|  |    */ | ||
|  |   routePrefix?: string; | ||
|  |   /** | ||
|  |    * To expose the documentation api | ||
|  |    * @default false | ||
|  |    */ | ||
|  |   exposeRoute?: boolean; | ||
|  |   /** | ||
|  |    * Swagger UI Config | ||
|  |    */ | ||
|  |   uiConfig?: FastifySwaggerUiConfigOptions | ||
|  |   initOAuth?: FastifySwaggerInitOAuthOptions | ||
|  |   /** | ||
|  |    * CSP Config | ||
|  |    */ | ||
|  |   staticCSP?: boolean | string | Record<string, string | string[]> | ||
|  |   transformStaticCSP?: (header: string) => string | ||
|  |   /** | ||
|  |    * route hooks | ||
|  |    */ | ||
|  |   uiHooks?: FastifySwaggerUiHooksOptions | ||
|  | } | ||
|  | 
 | ||
|  | export type FastifySwaggerUiConfigOptions = Partial<{ | ||
|  |   deepLinking: boolean | ||
|  |   displayOperationId: boolean | ||
|  |   defaultModelsExpandDepth: number | ||
|  |   defaultModelExpandDepth: number | ||
|  |   defaultModelRendering: string | ||
|  |   displayRequestDuration: boolean | ||
|  |   docExpansion: string | ||
|  |   filter: boolean | string | ||
|  |   layout: string | ||
|  |   maxDisplayedTags: number | ||
|  |   showExtensions: boolean | ||
|  |   showCommonExtensions: boolean | ||
|  |   useUnsafeMarkdown: boolean | ||
|  |   syntaxHighlight: { | ||
|  |     activate?: boolean | ||
|  |     theme?: string | ||
|  |   } | false | ||
|  |   tryItOutEnabled: boolean | ||
|  |   validatorUrl: string | null | ||
|  | }> | ||
|  | 
 | ||
|  | export type FastifySwaggerInitOAuthOptions = Partial<{ | ||
|  |   clientId: string, | ||
|  |   clientSecret: string, | ||
|  |   realm: string, | ||
|  |   appName: string, | ||
|  |   scopeSeparator: string, | ||
|  |   scopes: string | string[], | ||
|  |   additionalQueryStringParams: { [key: string]: any }, | ||
|  |   useBasicAuthenticationWithAccessCodeGrant: boolean, | ||
|  |   usePkceWithAuthorizationCodeGrant: boolean | ||
|  | }> | ||
|  | 
 | ||
|  | type JSONValue = | ||
|  |     | string | ||
|  |     | null | ||
|  |     | number | ||
|  |     | boolean | ||
|  |     | JSONObject | ||
|  |     | Array<JSONValue>; | ||
|  | 
 | ||
|  | export interface JSONObject { | ||
|  |   [key: string]: JSONValue; | ||
|  | } | ||
|  | 
 | ||
|  | export interface FastifyDynamicSwaggerOptions extends FastifySwaggerOptions { | ||
|  |   mode?: 'dynamic'; | ||
|  |   swagger?: Partial<OpenAPIV2.Document>; | ||
|  |   openapi?: Partial<OpenAPIV3.Document> | ||
|  |   hiddenTag?: string; | ||
|  |   hideUntagged?: boolean; | ||
|  |   /** | ||
|  |    * Strips matching base path from routes in documentation | ||
|  |    * @default true | ||
|  |    */ | ||
|  |   stripBasePath?: boolean; | ||
|  |   /** | ||
|  |    * custom function to transform the route's schema and url | ||
|  |    */ | ||
|  |   transform?: <S extends FastifySchema = FastifySchema>({schema, url}: {schema: S, url: string}) => { schema: JSONObject, url: string }; | ||
|  | 
 | ||
|  |   refResolver?: { | ||
|  |     /** Clone the input schema without changing it. Default to `false`. */ | ||
|  |     clone?: boolean; | ||
|  |     buildLocalReference: ( | ||
|  |       /** The `json` that is being resolved. */ | ||
|  |       json: JSONObject, | ||
|  |       /** The `baseUri` object of the schema. */ | ||
|  |       baseUri: { | ||
|  |         scheme?: string; | ||
|  |         userinfo?: string; | ||
|  |         host?: string; | ||
|  |         port?: number | string; | ||
|  |         path?: string; | ||
|  |         query?: string; | ||
|  |         fragment?: string; | ||
|  |         reference?: string; | ||
|  |         error?: string; | ||
|  |       }, | ||
|  |       /** `fragment` is the `$ref` string when the `$ref` is a relative reference. */ | ||
|  |       fragment: string, | ||
|  |       /** `i` is a local counter to generate a unique key. */ | ||
|  |       i: number | ||
|  |     ) => string; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | export interface StaticPathSpec { | ||
|  |   path: string; | ||
|  |   postProcessor?: (spec: OpenAPI.Document) => OpenAPI.Document; | ||
|  |   baseDir: string; | ||
|  | } | ||
|  | 
 | ||
|  | export interface StaticDocumentSpec { | ||
|  |   document: OpenAPIV2.Document | OpenAPIV3.Document; | ||
|  | } | ||
|  | 
 | ||
|  | export interface FastifyStaticSwaggerOptions extends FastifySwaggerOptions { | ||
|  |   mode: 'static'; | ||
|  |   specification: StaticPathSpec | StaticDocumentSpec; | ||
|  | } | ||
|  | 
 | ||
|  | export type FastifySwaggerUiHooksOptions = Partial<{ | ||
|  |   onRequest?: onRequestHookHandler, | ||
|  |   preHandler?: preHandlerHookHandler, | ||
|  | }> | ||
|  | 
 | ||
|  | export default fastifySwagger; |