docs.js 998 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. 'src/server/models/**/*.js',
  9. ];
  10. module.exports = (crowi) => {
  11. // skip if disabled
  12. if (!crowi.configManager.getConfig('crowi', 'app:publishOpenAPI')) {
  13. return router;
  14. }
  15. const swaggerJSDoc = require('swagger-jsdoc');
  16. const swaggerDefinition = require('@root/config/swagger-definition');
  17. // generate swagger spec
  18. const options = {
  19. swaggerDefinition,
  20. apis: APIS,
  21. };
  22. const swaggerSpec = swaggerJSDoc(options);
  23. // publish swagger spec
  24. router.get('/swagger-spec.json', (req, res) => {
  25. res.setHeader('Content-Type', 'application/json');
  26. res.send(swaggerSpec);
  27. });
  28. // publish redoc
  29. router.get('/', (req, res) => {
  30. res.render('redoc');
  31. });
  32. return router;
  33. };