kobp
Version:
Koa Boilerplate with MikroORM
68 lines • 2.7 kB
JavaScript
;
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