UNPKG

kobp

Version:
68 lines 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SwaggerController = void 0; const swagger_1 = require("../utils/swagger"); const _helpers = { removeTrailingSlashes(str) { if (str.endsWith('/')) { return _helpers.removeTrailingSlashes(str.slice(0, -1)); } return str; }, }; const generateSwaggerHtml = (title, specContentOrUrl = 'https://petstore3.swagger.io/api/v3/openapi.json') => { const swaggerUiConfig = { url: typeof specContentOrUrl === 'string' ? specContentOrUrl : undefined, spec: typeof specContentOrUrl === 'string' ? undefined : specContentOrUrl, dom_id: '#swagger-ui', }; return `<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="description" content="${title}" /> <title>${title}</title> <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui.css" /> </head> <body> <div id="swagger-ui"></div> <script src="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-bundle.js" crossorigin></script> <script> window.onload = () => { window.ui = SwaggerUIBundle(${JSON.stringify(swaggerUiConfig)}); }; </script> </body> </html>`; }; // Plain controller for using SwaggerUI Dist package class SwaggerController { constructor(title, options) { this.title = title; this.options = options; const mod = require('openapi3-ts/oas31'); const _builder_ = mod.OpenApiBuilder; if (!_builder_) { throw new Error('Cannot use SwaggerController without "openapi3-ts" package. Please install the module first.'); } this.builder = () => new mod.OpenApiBuilder(); } register(onPath, router) { const safePath = _helpers.removeTrailingSlashes(onPath); router.get(safePath, (context) => this.getSwagger(context, router)); router.get(safePath + '/index.html', (context) => this.getSwagger(context, router)); router.get(safePath + '/spec.json', (context) => this.getSpecJsonUrl(context, router)); } getSwagger(context, router) { const builder = this.builder(); context.response.body = generateSwaggerHtml(this.title, (0, swagger_1.deriveApiSpec)(this.title, this.options, builder, router)); } getSpecJsonUrl(context, router) { const builder = this.builder(); // get router context.response.body = JSON.stringify((0, swagger_1.deriveApiSpec)(this.title, this.options, builder, router)); } } exports.SwaggerController = SwaggerController; //# sourceMappingURL=swagger.controller.js.map