UNPKG

2.43 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 idxd = function idxd(o) {
30 return o.index || o;
31};
32
33var walkResource = function walkResource(_ref) {
34 var base = _ref.base,
35 name = _ref.name,
36 resource = _ref.resource,
37 hierarchy = _ref.hierarchy,
38 handler = _ref.handler;
39
40 var res = idxd(resource);
41
42 // sort custom stuff first
43 var endpointNames = [];
44 (0, _keys2.default)(res).forEach(function (k) {
45 return _methods2.default[k] ? endpointNames.push(k) : endpointNames.unshift(k);
46 });
47
48 endpointNames.forEach(function (endpointName) {
49 var endpoint = res[endpointName];
50 var methodInfo = endpoint.http || _methods2.default[endpointName];
51 if (!methodInfo) {
52 // TODO: error if still nothing found
53 var newBase = (0, _getPath2.default)({ resource: name, instance: true });
54 walkResource({
55 base: base ? (0, _urlJoin2.default)(base, newBase) : newBase,
56 name: endpointName,
57 resource: endpoint,
58 hierarchy: hierarchy ? hierarchy + '.' + name : name,
59 handler: handler
60 });
61 return;
62 }
63 var path = endpoint.path || (0, _getPath2.default)({
64 resource: name,
65 endpoint: endpointName,
66 instance: methodInfo.instance
67 });
68 var fullPath = base ? (0, _urlJoin2.default)(base, path) : path;
69 handler((0, _extends3.default)({
70 hierarchy: hierarchy ? hierarchy + '.' + name + '.' + endpointName : name + '.' + endpointName,
71 path: fullPath,
72 endpoint: endpoint
73 }, methodInfo));
74 });
75};
76
77exports.default = function (resources, handler) {
78 (0, _keys2.default)(idxd(resources)).forEach(function (resourceName) {
79 walkResource({
80 name: resourceName,
81 resource: resources[resourceName],
82 handler: handler
83 });
84 });
85};
86
87module.exports = exports['default'];
\No newline at end of file