1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _assign = require('babel-runtime/core-js/object/assign');
|
8 |
|
9 | var _assign2 = _interopRequireDefault(_assign);
|
10 |
|
11 | var _keys = require('babel-runtime/core-js/object/keys');
|
12 |
|
13 | var _keys2 = _interopRequireDefault(_keys);
|
14 |
|
15 | var _stringify = require('babel-runtime/core-js/json/stringify');
|
16 |
|
17 | var _stringify2 = _interopRequireDefault(_stringify);
|
18 |
|
19 | var _extends2 = require('babel-runtime/helpers/extends');
|
20 |
|
21 | var _extends3 = _interopRequireDefault(_extends2);
|
22 |
|
23 | var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
24 |
|
25 | var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
26 |
|
27 | exports.default = proxy;
|
28 |
|
29 | var _pathToRegexp = require('path-to-regexp');
|
30 |
|
31 | var _pathToRegexp2 = _interopRequireDefault(_pathToRegexp);
|
32 |
|
33 | var _util = require('util');
|
34 |
|
35 | var _util2 = _interopRequireDefault(_util);
|
36 |
|
37 | require('isomorphic-fetch');
|
38 |
|
39 | var _urlPattern = require('url-pattern');
|
40 |
|
41 | var _urlPattern2 = _interopRequireDefault(_urlPattern);
|
42 |
|
43 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
44 |
|
45 | var fetcher = function fetcher(options, res, after, logger) {
|
46 | logger.apply(undefined, ['# Proxing'].concat((0, _toConsumableArray3.default)(options)));
|
47 | fetch.apply(undefined, (0, _toConsumableArray3.default)(options)).then(function (apiRes) {
|
48 | if (apiRes.ok) {
|
49 | apiRes.json().then(function (json) {
|
50 | return after(json, function (converted) {
|
51 | return res.json(converted);
|
52 | });
|
53 | }, function () {
|
54 | return res.json({});
|
55 | });
|
56 | } else {
|
57 | apiRes.json().then(function (json) {
|
58 | return res.status(apiRes.status).json(json);
|
59 | }, function () {
|
60 | return res.status(apiRes.status).json({});
|
61 | });
|
62 | }
|
63 | }, function (err) {
|
64 | return logger('# Fetch Error ', options, err) || res.json(err);
|
65 | }).catch(function (err) {
|
66 | return logger('# Unexpected Error ', {}, err) || res.json(err);
|
67 | });
|
68 | };
|
69 |
|
70 | function proxy(_ref) {
|
71 | var app = _ref.app,
|
72 | protocol = _ref.protocol,
|
73 | host = _ref.host,
|
74 | prefix = _ref.prefix,
|
75 | customizer = _ref.customizer,
|
76 | _ref$before = _ref.before,
|
77 | before = _ref$before === undefined ? function (url, options, cb) {
|
78 | return cb([url, options]);
|
79 | } : _ref$before,
|
80 | _ref$after = _ref.after,
|
81 | after = _ref$after === undefined ? function (json, cb) {
|
82 | return cb(json);
|
83 | } : _ref$after,
|
84 | _ref$logger = _ref.logger,
|
85 | logger = _ref$logger === undefined ? function (title, data, err) {
|
86 | return console.log(title, _util2.default.inspect(data), _util2.default.inspect(err));
|
87 | } : _ref$logger;
|
88 |
|
89 | app.use(prefix + '/*', function (req, res) {
|
90 | var apiUri = req.originalUrl.replace(new RegExp(prefix), '');
|
91 | var url = protocol + '://' + host + apiUri;
|
92 | var options = [url, {
|
93 | method: req.method,
|
94 | headers: (0, _extends3.default)({}, req.headers, {
|
95 | host: host
|
96 | })
|
97 | }];
|
98 | var originalUrl = req.originalUrl.split('?')[0];
|
99 | if (req.body) {
|
100 | options[1].body = (0, _stringify2.default)(req.body);
|
101 | }
|
102 | var customizerBefore = void 0;
|
103 | var customizerAfter = void 0;
|
104 | var customizerOverride = void 0;
|
105 | if (customizer) {
|
106 | var keys = (0, _keys2.default)((0, _assign2.default)({}, req.params)).map(function (key) {
|
107 | return {
|
108 | name: key,
|
109 | prefix: '/',
|
110 | delimiter: '/'
|
111 | };
|
112 | });
|
113 | (0, _keys2.default)(customizer).some(function (uri) {
|
114 | if ((0, _pathToRegexp2.default)(uri, keys).exec(originalUrl) && customizer[uri] && customizer[uri][req.method]) {
|
115 | customizerBefore = customizer[uri][req.method].before;
|
116 | customizerAfter = customizer[uri][req.method].after;
|
117 | customizerOverride = customizer[uri][req.method].override;
|
118 | var pattern = new _urlPattern2.default(uri);
|
119 | req.params = pattern.match(originalUrl);
|
120 | }
|
121 | });
|
122 | }
|
123 |
|
124 | if (customizerOverride) {
|
125 | logger('# Proxing with override', url);
|
126 | customizerOverride(req, res);
|
127 | } else {
|
128 | (customizerBefore || before).apply(undefined, options.concat([function (fetchOptions) {
|
129 | return fetcher(fetchOptions, res, customizerAfter || after, logger);
|
130 | }]));
|
131 | }
|
132 | });
|
133 | }
|
134 | module.exports = exports['default']; |
\ | No newline at end of file |