UNPKG

payload-swagger

Version:
52 lines (51 loc) 2.66 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadSwagger = void 0; const payload_openapi_1 = require("payload-openapi"); const swagger_ui_express_1 = __importDefault(require("swagger-ui-express")); const serve_file_1 = require("./utils/serve-file"); const loadSwagger = ({ express, config, logger }, options = {}) => __awaiter(void 0, void 0, void 0, function* () { var _a; if (!express) { logger.warn('Unable to load swagger: express not available'); return; } const { routes: { swagger: swaggerRoute = '/api-docs', specs: specsRoute = '/api-docs/specs', license: licenseRoute = '/api-docs/license', } = {}, ui: uiOptions, } = options; try { const document = yield (0, payload_openapi_1.createDocument)(config, options); express.use(specsRoute, (req, res) => res.json(document)); if ((_a = document.info.license) === null || _a === void 0 ? void 0 : _a.url) { express.get(licenseRoute, (0, serve_file_1.serveFile)('LICENSE')); } } catch (error) { if (options.throwOnError) { throw error; } logger.error(error, 'Unable to load swagger'); express.use(specsRoute, (req, res) => res.json({ openapi: '3.0.3', info: { title: 'Unable to load openapi document', description: 'An error occurred while generating the openapi document. Please check the server logs for more details.', }, })); } finally { express.use(swaggerRoute, swagger_ui_express_1.default.serve, swagger_ui_express_1.default.setup(undefined, Object.assign(Object.assign({}, uiOptions), { swaggerUrl: specsRoute }))); logger.info(`Swagger URL: ${swaggerRoute}`); } }); exports.loadSwagger = loadSwagger;