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.

52 lines
1.2 KiB

'use strict'
const { addHook, resolveSwaggerFunction } = require('../util/common')
module.exports = function (fastify, opts, done) {
opts = Object.assign({}, {
exposeRoute: false,
hiddenTag: 'X-HIDDEN',
hideUntagged: false,
stripBasePath: true,
openapi: null,
swagger: {},
transform: null,
refResolver: {
buildLocalReference (json, baseUri, fragment, i) {
if (!json.title && json.$id) {
json.title = json.$id
}
return `def-${i}`
}
}
}, opts)
const { routes, Ref } = addHook(fastify, opts)
if (opts.exposeRoute === true) {
const prefix = opts.routePrefix || '/documentation'
const uiConfig = opts.uiConfig || {}
const initOAuth = opts.initOAuth || {}
const staticCSP = opts.staticCSP
const transformStaticCSP = opts.transformStaticCSP
fastify.register(require('../routes'), {
prefix,
uiConfig,
initOAuth,
staticCSP,
transformStaticCSP,
hooks: opts.uiHooks
})
}
const cache = {
object: null,
string: null
}
const swagger = resolveSwaggerFunction(opts, cache, routes, Ref, done)
fastify.decorate('swagger', swagger)
done()
}