UNPKG

2.23 kBJavaScriptView Raw
1var fs = require('fs'),
2 merge = require('deepmerge'),
3 Utils = require('../../utils');
4
5module.exports = {
6 readSwagger: function readSwagger() {
7 var _ = this;
8
9 try {
10 return JSON.parse(
11 fs.readFileSync(_.swagger.path)
12 );
13 } catch (e) {
14 return {};
15 }
16 },
17
18 saveSwagger: function saveSwagger(done) {
19 var _ = this;
20
21 _.logger.log('Swagger saving...');
22 fs.writeFileSync(_.swagger.path, JSON.stringify(_.swagger.data, null, 4));
23 _.logger.log('Swagger saved.');
24 typeof done === 'function' && done();
25 },
26
27 generateSwagger: function generateSwagger(options, done) {
28 if (!options && !done || typeof options === 'function') {
29 done = options;
30 options = {};
31 }
32
33 var _ = this,
34 template = _.handlebars.compile(_.swagger.templates.resource),
35 path, route, method, obj;
36
37 _.logger.log('Swagger generating...');
38
39 if (options.regeneratePaths) {
40 _.swagger.data.paths = {};
41 }
42
43 for (path in _.routes) {
44 route = _.routes[path];
45
46 for (method in _.routes[path]) {
47 try {
48 obj = JSON.parse(template({
49 operationId: Utils.prepPath(path.replace(/^\//, '') + '-' + method.toUpperCase(), {
50 prefix: _.sdk.name,
51 humanize: true
52 }),
53 sdkMethod: Utils.prepPath(path, {
54 camelCase: true
55 }),
56 path: path,
57 method: method,
58 handler: _.routes[path][method],
59 defaults: _.defaults
60 }));
61 } catch (e) {
62 _.logger.error(e);
63 obj = {};
64 }
65
66 _.swagger.data = merge(obj, _.swagger.data);
67 }
68 }
69
70 _.logger.log('Swagger generated.');
71
72 _.saveSwagger();
73
74 typeof done === 'function' && done(null, _.swagger.data);
75
76 return _.swagger.data;
77 }
78};