payload-swagger
Version:
Swagger plugin for payload cms
52 lines (51 loc) • 2.66 kB
JavaScript
;
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;