docs.js 967 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const loggerFactory = require('@alias/logger');
  2. const logger = loggerFactory('growi:routes:apiv3:docs'); // eslint-disable-line no-unused-vars
  3. const express = require('express');
  4. const router = express.Router();
  5. // paths to scan
  6. const APIS = [
  7. 'src/server/routes/apiv3/**/*.js',
  8. ];
  9. module.exports = (crowi) => {
  10. // skip if disabled
  11. if (!crowi.configManager.getConfig('crowi', 'app:publishOpenAPI')) {
  12. return router;
  13. }
  14. const swaggerJSDoc = require('swagger-jsdoc');
  15. const swaggerDefinition = require('@root/config/swagger-definition');
  16. // generate swagger spec
  17. const options = {
  18. swaggerDefinition,
  19. apis: APIS,
  20. };
  21. const swaggerSpec = swaggerJSDoc(options);
  22. // publish swagger spec
  23. router.get('/swagger-spec.json', (req, res) => {
  24. res.setHeader('Content-Type', 'application/json');
  25. res.send(swaggerSpec);
  26. });
  27. // publish redoc
  28. router.get('/', (req, res) => {
  29. res.render('redoc');
  30. });
  31. return router;
  32. };