Yuki Takei 7 лет назад
Родитель
Сommit
e0b73ae8cc
3 измененных файлов с 35 добавлено и 10 удалено
  1. 15 9
      config/swagger-definition.js
  2. 1 1
      package.json
  3. 19 0
      src/server/crowi/dev.js

+ 15 - 9
config/swagger-definition.js

@@ -1,9 +1,15 @@
-openapi: 3.0.1
-info:
-  title: GROWI API Docs
-  version: 3.0.0
-externalDocs:
-  description: GROWI Docs
-  url: https://docs.growi.org
-apis:
-- src/server/routes/apiv3/**/*.js
+module.exports = {
+  openapi: '3.0.1',
+  info: {
+    title: 'GROWI API Docs',
+    version: '3.0.0',
+  },
+  externalDocs: {
+    description: 'GROWI Docs',
+    url: 'https://docs.growi.org',
+  },
+  basePath: '/api/v3/',
+  apis: [
+    'src/server/routes/apiv3/**/*.js',
+  ],
+};

+ 1 - 1
package.json

@@ -31,7 +31,7 @@
     "clean:app": "rimraf -- public/js public/styles",
     "clean:report": "rimraf -- report",
     "clean": "npm-run-all -p clean:*",
-    "docs:apiv3": "swagger-jsdoc -d config/swagger-spec.yml -o tmp/swagger.json",
+    "docs:apiv3": "swagger-jsdoc -d config/swagger-spec.js -o tmp/swagger.json",
     "heroku-postbuild": "sh bin/heroku/install-plugins.sh && npm run build:prod",
     "lint:js:fix": "eslint **/*.{js,jsx} --fix",
     "lint:js": "eslint **/*.{js,jsx}",

+ 19 - 0
src/server/crowi/dev.js

@@ -5,6 +5,9 @@ const path = require('path');
 const swig = require('swig-templates');
 const onHeaders = require('on-headers');
 
+const swaggerJSDoc = require('swagger-jsdoc');
+const swaggerDefinition = require('@root/config/swagger-definition');
+
 
 class CrowiDev {
 
@@ -85,9 +88,25 @@ class CrowiDev {
     eazyLogger.unprefixed('info', `         APP: {magenta:${serverUrl}}`);
     eazyLogger.unprefixed('info', '{grey:=======================================}');
 
+    this.setupSwaggerJSdoc(app);
+
     return server;
   }
 
+  setupSwaggerJSdoc(app) {
+    const options = {
+      swaggerDefinition,
+      apis: swaggerDefinition.apis,
+    };
+    const swaggerSpec = swaggerJSDoc(options);
+
+    app.get('/api-docs.json', (req, res) => {
+      res.setHeader('Content-Type', 'application/json');
+      res.send(swaggerSpec);
+    });
+  }
+
+
   /**
    *
    * @param {any} app express