1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _extends2 = require('babel-runtime/helpers/extends');
|
8 |
|
9 | var _extends3 = _interopRequireDefault(_extends2);
|
10 |
|
11 | var _walkResources = require('./walkResources');
|
12 |
|
13 | var _walkResources2 = _interopRequireDefault(_walkResources);
|
14 |
|
15 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
16 |
|
17 | var param = /:(\w+)/gi;
|
18 |
|
19 | var getResponses = function getResponses(method, endpoint) {
|
20 | var out = {
|
21 | '404': {
|
22 | description: 'Not found'
|
23 | },
|
24 | '500': {
|
25 | description: 'Server error'
|
26 | },
|
27 | default: {
|
28 | description: 'Unexpected error'
|
29 | }
|
30 | };
|
31 |
|
32 | if (method === 'post') {
|
33 | out['201'] = {
|
34 | description: 'Success, created'
|
35 | };
|
36 | } else {
|
37 | out['200'] = {
|
38 | description: 'Success'
|
39 | };
|
40 | out['204'] = {
|
41 | description: 'Success, no data return necessary'
|
42 | };
|
43 | }
|
44 |
|
45 | if (endpoint.isAuthorized) {
|
46 | out['401'] = {
|
47 | description: 'Unauthorized'
|
48 | };
|
49 | }
|
50 | return out;
|
51 | };
|
52 |
|
53 | var getPaths = function getPaths(resources) {
|
54 | var paths = {};
|
55 | (0, _walkResources2.default)(resources, function (_ref) {
|
56 | var path = _ref.path,
|
57 | method = _ref.method,
|
58 | endpoint = _ref.endpoint;
|
59 |
|
60 | if (endpoint.swagger === false) return;
|
61 | var swaggerMeta = endpoint.swagger || {};
|
62 | var params = path.match(param);
|
63 | var descriptor = (0, _extends3.default)({
|
64 | consumes: method !== 'get' && ['application/json'] || undefined,
|
65 | produces: ['application/json'],
|
66 | parameters: params && params.map(function (name) {
|
67 | return {
|
68 | name: name.slice(1),
|
69 | in: 'path',
|
70 | required: true
|
71 | };
|
72 | }) || undefined,
|
73 | responses: getResponses(method, endpoint)
|
74 | }, swaggerMeta);
|
75 |
|
76 | var fixedPath = path.replace(param, '{$1}');
|
77 | if (!paths[fixedPath]) paths[fixedPath] = {};
|
78 | paths[fixedPath][method] = descriptor;
|
79 | });
|
80 | return paths;
|
81 | };
|
82 |
|
83 | exports.default = function (_ref2) {
|
84 | var _ref2$swagger = _ref2.swagger,
|
85 | swagger = _ref2$swagger === undefined ? {} : _ref2$swagger,
|
86 | base = _ref2.base,
|
87 | resources = _ref2.resources;
|
88 |
|
89 | var out = (0, _extends3.default)({
|
90 | swagger: '2.0',
|
91 | info: {
|
92 | title: 'Sutro API',
|
93 | version: '1.0.0'
|
94 | },
|
95 | basePath: base,
|
96 | schemes: ['http'],
|
97 | paths: getPaths(resources)
|
98 | }, swagger);
|
99 | return out;
|
100 | };
|
101 |
|
102 | module.exports = exports['default']; |
\ | No newline at end of file |