1 | var fs = require('fs'),
|
2 | merge = require('deepmerge'),
|
3 | Utils = require('../../utils');
|
4 |
|
5 | module.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 | };
|