UNPKG

2.57 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _pluralize = require('pluralize');
8
9var _lodash = require('lodash.mapvalues');
10
11var _lodash2 = _interopRequireDefault(_lodash);
12
13var _lodash3 = require('lodash.map');
14
15var _lodash4 = _interopRequireDefault(_lodash3);
16
17var _lodash5 = require('lodash.omit');
18
19var _lodash6 = _interopRequireDefault(_lodash5);
20
21var _lodash7 = require('lodash.sortby');
22
23var _lodash8 = _interopRequireDefault(_lodash7);
24
25var _methods = require('./methods');
26
27var _methods2 = _interopRequireDefault(_methods);
28
29function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
31var blacklist = ['model'];
32
33exports.default = function (resources) {
34 var getPath = function getPath(resourceName, methodName, methodInfo) {
35 var path = '/' + (0, _pluralize.plural)(resourceName);
36 if (methodInfo.instance) {
37 path += '/:id';
38 }
39 if (!_methods2.default[methodName]) {
40 path += '/' + methodName;
41 }
42
43 return path;
44 };
45
46 var getEndpoints = function getEndpoints(handlers, resourceName) {
47 var handlerNames = (0, _lodash6.default)(handlers, blacklist);
48
49 var meta = (0, _lodash4.default)(handlerNames, function (handler, methodName) {
50 var methodInfo = handler.http ? handler.http : _methods2.default[methodName];
51 if (!methodInfo) {
52 throw new Error('"' + resourceName + '" handler "' + methodName + '" did not export a HTTP config object');
53 }
54 if (typeof methodInfo.method === 'undefined') {
55 throw new Error('"' + resourceName + '" handler "' + methodName + '" did not export a HTTP config object containing "method"');
56 }
57 if (typeof methodInfo.instance === 'undefined') {
58 throw new Error('"' + resourceName + '" handler "' + methodName + '" did not export a HTTP config object containing "instance"');
59 }
60
61 return {
62 name: methodName,
63 method: methodInfo.method.toLowerCase(),
64 successCode: methodInfo.successCode || 200,
65 emptyCode: methodInfo.emptyCode || 204,
66 path: getPath(resourceName, methodName, methodInfo),
67 instance: !!methodInfo.instance,
68 handler: handler,
69 custom: !_methods2.default[methodName],
70 model: handlers.model
71 };
72 });
73
74 // float custom endpoints to the top, they take precedence
75 return (0, _lodash8.default)(meta, function (endpoint) {
76 return !endpoint.custom;
77 });
78 };
79
80 return (0, _lodash2.default)(resources, getEndpoints);
81};
82
83module.exports = exports['default'];
\No newline at end of file