UNPKG

2.44 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11var _walkResources = require('./walkResources');
12
13var _walkResources2 = _interopRequireDefault(_walkResources);
14
15function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17var param = /:(\w+)/gi;
18
19var 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
53var 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.hidden || endpoint.swagger === false) return; // skip
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
83exports.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
102module.exports = exports['default'];
\No newline at end of file