UNPKG

4.49 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _regenerator = require('babel-runtime/regenerator');
8
9var _regenerator2 = _interopRequireDefault(_regenerator);
10
11var _extends2 = require('babel-runtime/helpers/extends');
12
13var _extends3 = _interopRequireDefault(_extends2);
14
15var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
17var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
19var _handleAsync = require('handle-async');
20
21function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
23var process = function () {
24 var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(endpoint, req, res) {
25 var opt, authorized, err, rawData, resultData;
26 return _regenerator2.default.wrap(function _callee$(_context) {
27 while (1) {
28 switch (_context.prev = _context.next) {
29 case 0:
30 opt = (0, _extends3.default)({}, req.params, {
31 ip: req.ip,
32 url: req.url,
33 protocol: req.protocol,
34 method: req.method,
35 subdomains: req.subdomains,
36 path: req.path,
37 cookies: req.cookies,
38 user: req.user,
39 data: req.body,
40 options: req.query,
41 session: req.session,
42 _req: req,
43 _res: res
44 });
45
46 // check isAuthorized
47
48 _context.t0 = !endpoint.isAuthorized;
49
50 if (_context.t0) {
51 _context.next = 6;
52 break;
53 }
54
55 _context.next = 5;
56 return (0, _handleAsync.promisify)(endpoint.isAuthorized.bind(null, opt));
57
58 case 5:
59 _context.t0 = _context.sent;
60
61 case 6:
62 authorized = _context.t0;
63
64 if (!(authorized !== true)) {
65 _context.next = 11;
66 break;
67 }
68
69 err = new Error('Unauthorized');
70
71 err.status = 401;
72 throw err;
73
74 case 11:
75 if (!endpoint.process) {
76 _context.next = 17;
77 break;
78 }
79
80 _context.next = 14;
81 return (0, _handleAsync.promisify)(endpoint.process.bind(null, opt));
82
83 case 14:
84 _context.t1 = _context.sent;
85 _context.next = 18;
86 break;
87
88 case 17:
89 _context.t1 = null;
90
91 case 18:
92 rawData = _context.t1;
93
94 if (!endpoint.format) {
95 _context.next = 25;
96 break;
97 }
98
99 _context.next = 22;
100 return (0, _handleAsync.promisify)(endpoint.format.bind(null, opt, rawData));
101
102 case 22:
103 _context.t2 = _context.sent;
104 _context.next = 26;
105 break;
106
107 case 25:
108 _context.t2 = rawData;
109
110 case 26:
111 resultData = _context.t2;
112
113 if (!(resultData == null)) {
114 _context.next = 33;
115 break;
116 }
117
118 if (!(req.method === 'POST')) {
119 _context.next = 30;
120 break;
121 }
122
123 return _context.abrupt('return', res.status(201).end());
124
125 case 30:
126 if (!(req.method === 'GET')) {
127 _context.next = 32;
128 break;
129 }
130
131 return _context.abrupt('return', res.status(404).end());
132
133 case 32:
134 return _context.abrupt('return', res.status(204).end());
135
136 case 33:
137
138 // some data, status code for it
139 res.status(req.method === 'POST' ? 201 : 200);
140
141 // stream response
142
143 if (!(resultData.pipe && resultData.on)) {
144 _context.next = 37;
145 break;
146 }
147
148 resultData.pipe(res);
149 return _context.abrupt('return');
150
151 case 37:
152
153 // json obj response
154 res.json(resultData).end();
155
156 case 38:
157 case 'end':
158 return _context.stop();
159 }
160 }
161 }, _callee, undefined);
162 }));
163
164 return function process(_x, _x2, _x3) {
165 return _ref.apply(this, arguments);
166 };
167}();
168
169exports.default = function (endpoint) {
170 if (typeof endpoint === 'function') endpoint = { process: endpoint };
171 return function (req, res, next) {
172 return process(endpoint, req, res).catch(next);
173 };
174};
175
176module.exports = exports['default'];
\No newline at end of file