UNPKG

2.35 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 _keys = require('babel-runtime/core-js/object/keys');
12
13var _keys2 = _interopRequireDefault(_keys);
14
15var _urlJoin = require('url-join');
16
17var _urlJoin2 = _interopRequireDefault(_urlJoin);
18
19var _getPath = require('./getPath');
20
21var _getPath2 = _interopRequireDefault(_getPath);
22
23var _methods = require('./methods');
24
25var _methods2 = _interopRequireDefault(_methods);
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29var walkResource = function walkResource(_ref) {
30 var base = _ref.base,
31 name = _ref.name,
32 resource = _ref.resource,
33 hierarchy = _ref.hierarchy,
34 handler = _ref.handler;
35
36 // sort custom stuff first
37 var endpointNames = [];
38 (0, _keys2.default)(resource).forEach(function (k) {
39 return _methods2.default[k] ? endpointNames.push(k) : endpointNames.unshift(k);
40 });
41
42 endpointNames.forEach(function (endpointName) {
43 var endpoint = resource[endpointName];
44 var methodInfo = endpoint.http || _methods2.default[endpointName];
45 if (!methodInfo) {
46 // TODO: error if still nothing found
47 var newBase = (0, _getPath2.default)({ resource: name, instance: true });
48 walkResource({
49 base: base ? (0, _urlJoin2.default)(base, newBase) : newBase,
50 name: endpointName,
51 resource: endpoint,
52 hierarchy: hierarchy ? hierarchy + '.' + name : name,
53 handler: handler
54 });
55 return;
56 }
57 var path = endpoint.path || (0, _getPath2.default)({
58 resource: name,
59 endpoint: endpointName,
60 instance: methodInfo.instance
61 });
62 var fullPath = base ? (0, _urlJoin2.default)(base, path) : path;
63 handler((0, _extends3.default)({
64 hierarchy: hierarchy ? hierarchy + '.' + name + '.' + endpointName : name + '.' + endpointName,
65 path: fullPath,
66 endpoint: endpoint
67 }, methodInfo));
68 });
69};
70
71exports.default = function (resources, handler) {
72 (0, _keys2.default)(resources).forEach(function (resourceName) {
73 walkResource({
74 name: resourceName,
75 resource: resources[resourceName],
76 handler: handler
77 });
78 });
79};
80
81module.exports = exports['default'];
\No newline at end of file