diff --git a/index.d.ts b/index.d.ts index b5965f91..c7c5dea7 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,4 +1,4 @@ -import {FastifyPluginCallback, FastifySchema, onRequestHookHandler, preHandlerHookHandler} from 'fastify'; +import { FastifyPluginCallback, FastifySchema, onRequestHookHandler, preHandlerHookHandler } from 'fastify'; import { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types'; /** @@ -21,9 +21,9 @@ declare module 'openapi-types' { declare module 'fastify' { interface FastifyInstance { swagger: - ((opts?: { yaml?: false }) => OpenAPI.Document) & - ((opts: { yaml: true }) => string) & - ((opts: { yaml: boolean }) => OpenAPI.Document | string); + ((opts?: { yaml?: false }) => OpenAPI.Document) & + ((opts: { yaml: true }) => string) & + ((opts: { yaml: boolean }) => OpenAPI.Document | string); swaggerCSP: { script: string[]; @@ -54,50 +54,51 @@ declare module 'fastify' { } } -export const fastifySwagger: FastifyPluginCallback; +type FastifySwagger = FastifyPluginCallback -export type SwaggerOptions = (FastifyStaticSwaggerOptions | FastifyDynamicSwaggerOptions); -export interface FastifySwaggerOptions { - mode?: 'static' | 'dynamic'; -} +declare namespace fastifySwagger { + export type SwaggerOptions = (FastifyStaticSwaggerOptions | FastifyDynamicSwaggerOptions); + export interface FastifySwaggerOptions { + mode?: 'static' | 'dynamic'; + } -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 - supportedSubmitMethods: Array<'get' | 'post' | 'put' | 'delete' | 'patch' | 'options'> - persistAuthorization: boolean -}> - -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 = + 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 + supportedSubmitMethods: Array<'get' | 'post' | 'put' | 'delete' | 'patch' | 'options'> + persistAuthorization: boolean + }> + + 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 @@ -105,70 +106,76 @@ type JSONValue = | JSONObject | Array; -export interface JSONObject { - [key: string]: JSONValue; -} + export interface JSONObject { + [key: string]: JSONValue; + } -export interface FastifyDynamicSwaggerOptions extends FastifySwaggerOptions { - mode?: 'dynamic'; - swagger?: Partial; - openapi?: Partial - 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?: ({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 FastifyDynamicSwaggerOptions extends FastifySwaggerOptions { + mode?: 'dynamic'; + swagger?: Partial; + openapi?: Partial + 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?: ({ 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 StaticPathSpec { + path: string; + postProcessor?: (spec: OpenAPI.Document) => OpenAPI.Document; + baseDir: string; + } -export interface StaticDocumentSpec { - document: OpenAPIV2.Document | OpenAPIV3.Document; -} + 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 interface FastifyStaticSwaggerOptions extends FastifySwaggerOptions { - mode: 'static'; - specification: StaticPathSpec | StaticDocumentSpec; + export const fastifySwagger: FastifySwagger + export { fastifySwagger as default } } -export type FastifySwaggerUiHooksOptions = Partial<{ - onRequest?: onRequestHookHandler, - preHandler?: preHandlerHookHandler, -}> +declare function fastifySwagger(...params: Parameters): ReturnType -export default fastifySwagger; +export = fastifySwagger; diff --git a/index.js b/index.js index bb820293..efdc30c6 100644 --- a/index.js +++ b/index.js @@ -27,3 +27,5 @@ module.exports = fp(fastifySwagger, { fastify: '4.x', name: '@fastify/swagger' }) +module.exports.fastifySwagger = fastifySwagger +module.exports.default = fastifySwagger