@nocobase/resourcer 0.9.1-alpha.1 → 0.9.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/action.js +8 -53
- package/lib/index.js +0 -13
- package/lib/middleware.js +4 -34
- package/lib/resource.js +11 -37
- package/lib/resourcer.js +17 -83
- package/lib/utils.js +23 -70
- package/package.json +3 -3
package/lib/action.js
CHANGED
|
@@ -4,57 +4,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.Action = void 0;
|
|
7
|
-
|
|
8
7
|
function _utils() {
|
|
9
8
|
const data = require("@nocobase/utils");
|
|
10
|
-
|
|
11
9
|
_utils = function _utils() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
function _koaCompose() {
|
|
19
15
|
const data = _interopRequireDefault(require("koa-compose"));
|
|
20
|
-
|
|
21
16
|
_koaCompose = function _koaCompose() {
|
|
22
17
|
return data;
|
|
23
18
|
};
|
|
24
|
-
|
|
25
19
|
return data;
|
|
26
20
|
}
|
|
27
|
-
|
|
28
21
|
function _lodash() {
|
|
29
22
|
const data = _interopRequireDefault(require("lodash"));
|
|
30
|
-
|
|
31
23
|
_lodash = function _lodash() {
|
|
32
24
|
return data;
|
|
33
25
|
};
|
|
34
|
-
|
|
35
26
|
return data;
|
|
36
27
|
}
|
|
37
|
-
|
|
38
28
|
var _middleware = _interopRequireDefault(require("./middleware"));
|
|
39
|
-
|
|
40
29
|
const _excluded = ["middleware", "middlewares", "handler"];
|
|
41
|
-
|
|
42
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
|
-
|
|
44
31
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
45
|
-
|
|
46
32
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
47
|
-
|
|
48
33
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
49
|
-
|
|
50
34
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
51
|
-
|
|
52
|
-
function
|
|
53
|
-
|
|
35
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
36
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
37
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
54
38
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
55
|
-
|
|
56
39
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
57
|
-
|
|
58
40
|
class Action {
|
|
59
41
|
constructor(options) {
|
|
60
42
|
this.handler = void 0;
|
|
@@ -68,26 +50,22 @@ class Action {
|
|
|
68
50
|
this.resourceOf = void 0;
|
|
69
51
|
this.middlewares = [];
|
|
70
52
|
options = (0, _utils().requireModule)(options);
|
|
71
|
-
|
|
72
53
|
if (typeof options === 'function') {
|
|
73
54
|
options = {
|
|
74
55
|
handler: options
|
|
75
56
|
};
|
|
76
57
|
}
|
|
77
|
-
|
|
78
58
|
const _options = options,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
59
|
+
middleware = _options.middleware,
|
|
60
|
+
_options$middlewares = _options.middlewares,
|
|
61
|
+
middlewares = _options$middlewares === void 0 ? [] : _options$middlewares,
|
|
62
|
+
handler = _options.handler,
|
|
63
|
+
params = _objectWithoutProperties(_options, _excluded);
|
|
85
64
|
this.middlewares = _middleware.default.toInstanceArray(middleware || middlewares);
|
|
86
65
|
this.handler = handler;
|
|
87
66
|
this.options = options;
|
|
88
67
|
this.mergeParams(params);
|
|
89
68
|
}
|
|
90
|
-
|
|
91
69
|
toJSON() {
|
|
92
70
|
return {
|
|
93
71
|
actionName: this.actionName,
|
|
@@ -96,10 +74,8 @@ class Action {
|
|
|
96
74
|
params: this.params
|
|
97
75
|
};
|
|
98
76
|
}
|
|
99
|
-
|
|
100
77
|
clone() {
|
|
101
78
|
const options = _lodash().default.cloneDeep(this.options);
|
|
102
|
-
|
|
103
79
|
delete options.middleware;
|
|
104
80
|
delete options.middlewares;
|
|
105
81
|
const action = new Action(options);
|
|
@@ -108,20 +84,16 @@ class Action {
|
|
|
108
84
|
action.middlewares.push(...this.middlewares);
|
|
109
85
|
return action;
|
|
110
86
|
}
|
|
111
|
-
|
|
112
87
|
setContext(context) {
|
|
113
88
|
this.context = context;
|
|
114
89
|
}
|
|
115
|
-
|
|
116
90
|
mergeParams(params, strategies = {}) {
|
|
117
91
|
if (!this.params) {
|
|
118
92
|
this.params = {};
|
|
119
93
|
}
|
|
120
|
-
|
|
121
94
|
if (!params) {
|
|
122
95
|
return;
|
|
123
96
|
}
|
|
124
|
-
|
|
125
97
|
(0, _utils().assign)(this.params, params, _objectSpread({
|
|
126
98
|
filter: 'andMerge',
|
|
127
99
|
fields: 'intersect',
|
|
@@ -132,75 +104,58 @@ class Action {
|
|
|
132
104
|
sort: 'overwrite'
|
|
133
105
|
}, strategies));
|
|
134
106
|
}
|
|
135
|
-
|
|
136
107
|
setResource(resource) {
|
|
137
108
|
this.resource = resource;
|
|
138
109
|
return this;
|
|
139
110
|
}
|
|
140
|
-
|
|
141
111
|
getResource() {
|
|
142
112
|
return this.resource;
|
|
143
113
|
}
|
|
144
|
-
|
|
145
114
|
getOptions() {
|
|
146
115
|
return this.options;
|
|
147
116
|
}
|
|
148
|
-
|
|
149
117
|
setName(name) {
|
|
150
118
|
this.name = name;
|
|
151
119
|
return this;
|
|
152
120
|
}
|
|
153
|
-
|
|
154
121
|
getName() {
|
|
155
122
|
return this.name;
|
|
156
123
|
}
|
|
157
|
-
|
|
158
124
|
getMiddlewareHandlers() {
|
|
159
125
|
return this.middlewares.filter(middleware => middleware.canAccess(this.name)).map(middleware => middleware.getHandler());
|
|
160
126
|
}
|
|
161
|
-
|
|
162
127
|
getHandler() {
|
|
163
128
|
const handler = (0, _utils().requireModule)(this.handler || this.resource.resourcer.getRegisteredHandler(this.name));
|
|
164
|
-
|
|
165
129
|
if (typeof handler !== 'function') {
|
|
166
130
|
throw new Error('Handler must be a function!');
|
|
167
131
|
}
|
|
168
|
-
|
|
169
132
|
return handler;
|
|
170
133
|
}
|
|
171
|
-
|
|
172
134
|
getHandlers() {
|
|
173
135
|
const handlers = [...this.resource.resourcer.getMiddlewares(), ...this.getMiddlewareHandlers(), this.getHandler()].filter(Boolean);
|
|
174
136
|
return handlers;
|
|
175
137
|
}
|
|
176
|
-
|
|
177
138
|
execute(context, next) {
|
|
178
139
|
var _this = this;
|
|
179
|
-
|
|
180
140
|
return _asyncToGenerator(function* () {
|
|
181
141
|
return yield (0, _koaCompose().default)(_this.getHandlers())(context, next);
|
|
182
142
|
})();
|
|
183
143
|
}
|
|
184
|
-
|
|
185
144
|
static toInstanceMap(actions, resource) {
|
|
186
145
|
return new Map(Object.entries(actions).map(([key, options]) => {
|
|
187
146
|
let action;
|
|
188
|
-
|
|
189
147
|
if (options instanceof Action) {
|
|
190
148
|
action = options;
|
|
191
149
|
} else {
|
|
192
150
|
action = new Action(options);
|
|
193
151
|
}
|
|
194
|
-
|
|
195
152
|
action.setName(key);
|
|
196
153
|
action.setResource(resource);
|
|
197
154
|
resource && action.middlewares.unshift(...resource.middlewares);
|
|
198
155
|
return [key, action];
|
|
199
156
|
}));
|
|
200
157
|
}
|
|
201
|
-
|
|
202
158
|
}
|
|
203
|
-
|
|
204
159
|
exports.Action = Action;
|
|
205
160
|
var _default = Action;
|
|
206
161
|
exports.default = _default;
|
package/lib/index.js
CHANGED
|
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
var _exportNames = {};
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
|
|
9
8
|
var _resourcer = _interopRequireWildcard(require("./resourcer"));
|
|
10
|
-
|
|
11
9
|
Object.keys(_resourcer).forEach(function (key) {
|
|
12
10
|
if (key === "default" || key === "__esModule") return;
|
|
13
11
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -19,9 +17,7 @@ Object.keys(_resourcer).forEach(function (key) {
|
|
|
19
17
|
}
|
|
20
18
|
});
|
|
21
19
|
});
|
|
22
|
-
|
|
23
20
|
var _utils = require("./utils");
|
|
24
|
-
|
|
25
21
|
Object.keys(_utils).forEach(function (key) {
|
|
26
22
|
if (key === "default" || key === "__esModule") return;
|
|
27
23
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -33,9 +29,7 @@ Object.keys(_utils).forEach(function (key) {
|
|
|
33
29
|
}
|
|
34
30
|
});
|
|
35
31
|
});
|
|
36
|
-
|
|
37
32
|
var _middleware = require("./middleware");
|
|
38
|
-
|
|
39
33
|
Object.keys(_middleware).forEach(function (key) {
|
|
40
34
|
if (key === "default" || key === "__esModule") return;
|
|
41
35
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -47,9 +41,7 @@ Object.keys(_middleware).forEach(function (key) {
|
|
|
47
41
|
}
|
|
48
42
|
});
|
|
49
43
|
});
|
|
50
|
-
|
|
51
44
|
var _action = require("./action");
|
|
52
|
-
|
|
53
45
|
Object.keys(_action).forEach(function (key) {
|
|
54
46
|
if (key === "default" || key === "__esModule") return;
|
|
55
47
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -61,9 +53,7 @@ Object.keys(_action).forEach(function (key) {
|
|
|
61
53
|
}
|
|
62
54
|
});
|
|
63
55
|
});
|
|
64
|
-
|
|
65
56
|
var _resource = require("./resource");
|
|
66
|
-
|
|
67
57
|
Object.keys(_resource).forEach(function (key) {
|
|
68
58
|
if (key === "default" || key === "__esModule") return;
|
|
69
59
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
@@ -75,10 +65,7 @@ Object.keys(_resource).forEach(function (key) {
|
|
|
75
65
|
}
|
|
76
66
|
});
|
|
77
67
|
});
|
|
78
|
-
|
|
79
68
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
80
|
-
|
|
81
69
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
82
|
-
|
|
83
70
|
var _default = _resourcer.default;
|
|
84
71
|
exports.default = _default;
|
package/lib/middleware.js
CHANGED
|
@@ -6,35 +6,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.Middleware = void 0;
|
|
7
7
|
exports.branch = branch;
|
|
8
8
|
exports.default = void 0;
|
|
9
|
-
|
|
10
9
|
function _koaCompose() {
|
|
11
10
|
const data = _interopRequireDefault(require("koa-compose"));
|
|
12
|
-
|
|
13
11
|
_koaCompose = function _koaCompose() {
|
|
14
12
|
return data;
|
|
15
13
|
};
|
|
16
|
-
|
|
17
14
|
return data;
|
|
18
15
|
}
|
|
19
|
-
|
|
20
16
|
function _utils() {
|
|
21
17
|
const data = require("@nocobase/utils");
|
|
22
|
-
|
|
23
18
|
_utils = function _utils() {
|
|
24
19
|
return data;
|
|
25
20
|
};
|
|
26
|
-
|
|
27
21
|
return data;
|
|
28
22
|
}
|
|
29
|
-
|
|
30
23
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
24
|
class Middleware {
|
|
33
25
|
constructor(options) {
|
|
34
26
|
this.options = void 0;
|
|
35
27
|
this.middlewares = [];
|
|
36
28
|
options = (0, _utils().requireModule)(options);
|
|
37
|
-
|
|
38
29
|
if (typeof options === 'function') {
|
|
39
30
|
this.options = {
|
|
40
31
|
handler: options
|
|
@@ -43,61 +34,47 @@ class Middleware {
|
|
|
43
34
|
this.options = options;
|
|
44
35
|
}
|
|
45
36
|
}
|
|
46
|
-
|
|
47
37
|
getHandler() {
|
|
48
38
|
const handler = (0, _utils().requireModule)(this.options.handler);
|
|
49
|
-
|
|
50
39
|
if (typeof handler !== 'function') {
|
|
51
40
|
throw new Error('Handler must be a function!');
|
|
52
41
|
}
|
|
53
|
-
|
|
54
42
|
return (ctx, next) => (0, _koaCompose().default)([handler, ...this.middlewares])(ctx, next);
|
|
55
43
|
}
|
|
56
|
-
|
|
57
44
|
use(middleware) {
|
|
58
45
|
this.middlewares.push(middleware);
|
|
59
46
|
}
|
|
60
|
-
|
|
61
47
|
disuse(middleware) {
|
|
62
48
|
this.middlewares.splice(this.middlewares.indexOf(middleware), 1);
|
|
63
49
|
}
|
|
64
|
-
|
|
65
50
|
canAccess(name) {
|
|
66
51
|
const _this$options = this.options,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
52
|
+
_this$options$only = _this$options.only,
|
|
53
|
+
only = _this$options$only === void 0 ? [] : _this$options$only,
|
|
54
|
+
_this$options$except = _this$options.except,
|
|
55
|
+
except = _this$options$except === void 0 ? [] : _this$options$except;
|
|
72
56
|
if (only.length > 0) {
|
|
73
57
|
return only.includes(name);
|
|
74
58
|
}
|
|
75
|
-
|
|
76
59
|
if (except.length > 0) {
|
|
77
60
|
return !except.includes(name);
|
|
78
61
|
}
|
|
79
|
-
|
|
80
62
|
return true;
|
|
81
63
|
}
|
|
82
|
-
|
|
83
64
|
static toInstanceArray(middlewares) {
|
|
84
65
|
if (!middlewares) {
|
|
85
66
|
return [];
|
|
86
67
|
}
|
|
87
|
-
|
|
88
68
|
if (!Array.isArray(middlewares)) {
|
|
89
69
|
middlewares = [middlewares];
|
|
90
70
|
}
|
|
91
|
-
|
|
92
71
|
return middlewares.map(middleware => {
|
|
93
72
|
if (middleware instanceof Middleware) {
|
|
94
73
|
return middleware;
|
|
95
74
|
}
|
|
96
|
-
|
|
97
75
|
if (typeof middleware === 'object') {
|
|
98
76
|
return new Middleware(middleware);
|
|
99
77
|
}
|
|
100
|
-
|
|
101
78
|
if (typeof middleware === 'function') {
|
|
102
79
|
return new Middleware({
|
|
103
80
|
handler: middleware
|
|
@@ -105,27 +82,20 @@ class Middleware {
|
|
|
105
82
|
}
|
|
106
83
|
});
|
|
107
84
|
}
|
|
108
|
-
|
|
109
85
|
}
|
|
110
|
-
|
|
111
86
|
exports.Middleware = Middleware;
|
|
112
87
|
var _default = Middleware;
|
|
113
88
|
exports.default = _default;
|
|
114
|
-
|
|
115
89
|
function branch(map = {}, reducer, options = {}) {
|
|
116
90
|
return (ctx, next) => {
|
|
117
91
|
const key = reducer(ctx);
|
|
118
|
-
|
|
119
92
|
if (!key) {
|
|
120
93
|
return options.keyNotFound ? options.keyNotFound(ctx, next) : ctx.throw(404);
|
|
121
94
|
}
|
|
122
|
-
|
|
123
95
|
const handler = map[key];
|
|
124
|
-
|
|
125
96
|
if (!handler) {
|
|
126
97
|
return options.handlerNotSet ? options.handlerNotSet(ctx, next) : ctx.throw(404);
|
|
127
98
|
}
|
|
128
|
-
|
|
129
99
|
return handler(ctx, next);
|
|
130
100
|
};
|
|
131
101
|
}
|
package/lib/resource.js
CHANGED
|
@@ -4,37 +4,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.Resource = void 0;
|
|
7
|
-
|
|
8
7
|
function _lodash() {
|
|
9
8
|
const data = _interopRequireDefault(require("lodash"));
|
|
10
|
-
|
|
11
9
|
_lodash = function _lodash() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
var _action = _interopRequireDefault(require("./action"));
|
|
19
|
-
|
|
20
15
|
var _middleware = _interopRequireDefault(require("./middleware"));
|
|
21
|
-
|
|
22
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
17
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
25
|
-
|
|
26
18
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
27
|
-
|
|
28
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
29
|
-
|
|
19
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
30
20
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
31
|
-
|
|
32
21
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
33
|
-
|
|
34
22
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
35
|
-
|
|
36
23
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
37
|
-
|
|
38
24
|
class Resource {
|
|
39
25
|
constructor(options, resourcer) {
|
|
40
26
|
this.resourcer = void 0;
|
|
@@ -43,27 +29,24 @@ class Resource {
|
|
|
43
29
|
this.options = void 0;
|
|
44
30
|
this.except = void 0;
|
|
45
31
|
const middleware = options.middleware,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
32
|
+
middlewares = options.middlewares,
|
|
33
|
+
_options$actions = options.actions,
|
|
34
|
+
actions = _options$actions === void 0 ? {} : _options$actions,
|
|
35
|
+
_options$only = options.only,
|
|
36
|
+
only = _options$only === void 0 ? [] : _options$only,
|
|
37
|
+
_options$except = options.except,
|
|
38
|
+
except = _options$except === void 0 ? [] : _options$except;
|
|
53
39
|
this.options = options;
|
|
54
40
|
this.resourcer = resourcer;
|
|
55
41
|
this.middlewares = _middleware.default.toInstanceArray(middleware || middlewares);
|
|
56
42
|
let excludes = [];
|
|
57
|
-
|
|
58
43
|
var _iterator = _createForOfIteratorHelper(resourcer.getRegisteredHandlers()),
|
|
59
|
-
|
|
60
|
-
|
|
44
|
+
_step;
|
|
61
45
|
try {
|
|
62
46
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
63
47
|
const _step$value = _slicedToArray(_step.value, 2),
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
name = _step$value[0],
|
|
49
|
+
handler = _step$value[1];
|
|
67
50
|
if (!actions[name]) {
|
|
68
51
|
actions[name] = handler;
|
|
69
52
|
}
|
|
@@ -73,39 +56,30 @@ class Resource {
|
|
|
73
56
|
} finally {
|
|
74
57
|
_iterator.f();
|
|
75
58
|
}
|
|
76
|
-
|
|
77
59
|
if (except.length > 0) {
|
|
78
60
|
excludes = except;
|
|
79
61
|
} else if (only.length > 0) {
|
|
80
62
|
excludes = Object.keys(actions).filter(name => !only.includes(name));
|
|
81
63
|
}
|
|
82
|
-
|
|
83
64
|
this.except = excludes;
|
|
84
65
|
this.actions = _action.default.toInstanceMap(_lodash().default.omit(actions, excludes), this);
|
|
85
66
|
}
|
|
86
|
-
|
|
87
67
|
getName() {
|
|
88
68
|
return this.options.name;
|
|
89
69
|
}
|
|
90
|
-
|
|
91
70
|
getExcept() {
|
|
92
71
|
return this.except;
|
|
93
72
|
}
|
|
94
|
-
|
|
95
73
|
getAction(action) {
|
|
96
74
|
if (this.except.includes(action)) {
|
|
97
75
|
throw new Error(`${action} action is not allowed`);
|
|
98
76
|
}
|
|
99
|
-
|
|
100
77
|
if (!this.actions.has(action)) {
|
|
101
78
|
throw new Error(`${action} action does not exist`);
|
|
102
79
|
}
|
|
103
|
-
|
|
104
80
|
return this.actions.get(action);
|
|
105
81
|
}
|
|
106
|
-
|
|
107
82
|
}
|
|
108
|
-
|
|
109
83
|
exports.Resource = Resource;
|
|
110
84
|
var _default = Resource;
|
|
111
85
|
exports.default = _default;
|
package/lib/resourcer.js
CHANGED
|
@@ -4,91 +4,63 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.Resourcer = void 0;
|
|
7
|
-
|
|
8
7
|
function _utils() {
|
|
9
8
|
const data = require("@nocobase/utils");
|
|
10
|
-
|
|
11
9
|
_utils = function _utils() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
function _glob() {
|
|
19
15
|
const data = _interopRequireDefault(require("glob"));
|
|
20
|
-
|
|
21
16
|
_glob = function _glob() {
|
|
22
17
|
return data;
|
|
23
18
|
};
|
|
24
|
-
|
|
25
19
|
return data;
|
|
26
20
|
}
|
|
27
|
-
|
|
28
21
|
function _koaCompose() {
|
|
29
22
|
const data = _interopRequireDefault(require("koa-compose"));
|
|
30
|
-
|
|
31
23
|
_koaCompose = function _koaCompose() {
|
|
32
24
|
return data;
|
|
33
25
|
};
|
|
34
|
-
|
|
35
26
|
return data;
|
|
36
27
|
}
|
|
37
|
-
|
|
38
28
|
function _lodash() {
|
|
39
29
|
const data = _interopRequireDefault(require("lodash"));
|
|
40
|
-
|
|
41
30
|
_lodash = function _lodash() {
|
|
42
31
|
return data;
|
|
43
32
|
};
|
|
44
|
-
|
|
45
33
|
return data;
|
|
46
34
|
}
|
|
47
|
-
|
|
48
35
|
function _pathToRegexp() {
|
|
49
36
|
const data = require("path-to-regexp");
|
|
50
|
-
|
|
51
37
|
_pathToRegexp = function _pathToRegexp() {
|
|
52
38
|
return data;
|
|
53
39
|
};
|
|
54
|
-
|
|
55
40
|
return data;
|
|
56
41
|
}
|
|
57
|
-
|
|
58
42
|
var _resource = _interopRequireDefault(require("./resource"));
|
|
59
|
-
|
|
60
43
|
var _utils2 = require("./utils");
|
|
61
|
-
|
|
62
44
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
63
|
-
|
|
64
45
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
65
|
-
|
|
66
46
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
67
|
-
|
|
68
|
-
function
|
|
69
|
-
|
|
47
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
48
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
49
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
70
50
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
71
|
-
|
|
72
51
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
73
|
-
|
|
74
52
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
75
|
-
|
|
76
53
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
77
|
-
|
|
78
54
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
79
|
-
|
|
80
55
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
81
|
-
|
|
82
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
83
|
-
|
|
56
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
84
57
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
85
|
-
|
|
86
58
|
class Resourcer {
|
|
87
|
-
/**
|
|
88
|
-
* 全局定义的 action handlers
|
|
89
|
-
*/
|
|
90
59
|
constructor(options = {}) {
|
|
91
60
|
this.resources = new Map();
|
|
61
|
+
/**
|
|
62
|
+
* 全局定义的 action handlers
|
|
63
|
+
*/
|
|
92
64
|
this.handlers = new Map();
|
|
93
65
|
this.actionHandlers = new Map();
|
|
94
66
|
this.middlewareHandlers = new Map();
|
|
@@ -106,18 +78,14 @@ class Resourcer {
|
|
|
106
78
|
* @param {string} [options.directory] 指定配置所在路径
|
|
107
79
|
* @param {array} [options.extensions = ['js', 'ts', 'json']] 文件后缀
|
|
108
80
|
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
81
|
import(options) {
|
|
112
82
|
const _options$extensions = options.extensions,
|
|
113
|
-
|
|
114
|
-
|
|
83
|
+
extensions = _options$extensions === void 0 ? ['js', 'ts', 'json'] : _options$extensions,
|
|
84
|
+
directory = options.directory;
|
|
115
85
|
const patten = `${directory}/*.{${extensions.join(',')}}`;
|
|
116
|
-
|
|
117
86
|
const files = _glob().default.sync(patten, {
|
|
118
87
|
ignore: ['**/*.d.ts']
|
|
119
88
|
});
|
|
120
|
-
|
|
121
89
|
const resources = new Map();
|
|
122
90
|
files.forEach(file => {
|
|
123
91
|
const options = (0, _utils().requireModule)(file);
|
|
@@ -132,27 +100,21 @@ class Resourcer {
|
|
|
132
100
|
* @param name
|
|
133
101
|
* @param options
|
|
134
102
|
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
103
|
define(options) {
|
|
138
104
|
const name = options.name;
|
|
139
105
|
const resource = new _resource.default(options, this);
|
|
140
106
|
this.resources.set(name, resource);
|
|
141
107
|
return resource;
|
|
142
108
|
}
|
|
143
|
-
|
|
144
109
|
isDefined(name) {
|
|
145
110
|
return this.resources.has(name);
|
|
146
111
|
}
|
|
147
|
-
|
|
148
112
|
removeResource(name) {
|
|
149
113
|
return this.resources.delete(name);
|
|
150
114
|
}
|
|
151
|
-
|
|
152
115
|
registerAction(name, handler) {
|
|
153
116
|
this.registerActionHandler(name, handler);
|
|
154
117
|
}
|
|
155
|
-
|
|
156
118
|
registerActions(handlers) {
|
|
157
119
|
this.registerActionHandlers(handlers);
|
|
158
120
|
}
|
|
@@ -161,61 +123,47 @@ class Resourcer {
|
|
|
161
123
|
*
|
|
162
124
|
* @param handlers
|
|
163
125
|
*/
|
|
164
|
-
|
|
165
|
-
|
|
166
126
|
registerActionHandlers(handlers) {
|
|
167
127
|
for (var _i = 0, _Object$entries = Object.entries(handlers); _i < _Object$entries.length; _i++) {
|
|
168
128
|
const _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
129
|
+
name = _Object$entries$_i[0],
|
|
130
|
+
handler = _Object$entries$_i[1];
|
|
172
131
|
this.registerActionHandler(name, handler);
|
|
173
132
|
}
|
|
174
133
|
}
|
|
175
|
-
|
|
176
134
|
registerActionHandler(name, handler) {
|
|
177
135
|
this.actionHandlers.set(name, handler);
|
|
178
136
|
}
|
|
179
|
-
|
|
180
137
|
getRegisteredHandler(name) {
|
|
181
138
|
return this.actionHandlers.get(name);
|
|
182
139
|
}
|
|
183
|
-
|
|
184
140
|
getRegisteredHandlers() {
|
|
185
141
|
return this.actionHandlers;
|
|
186
142
|
}
|
|
187
|
-
|
|
188
143
|
getResource(name) {
|
|
189
144
|
if (!this.resources.has(name)) {
|
|
190
145
|
throw new Error(`${name} resource does not exist`);
|
|
191
146
|
}
|
|
192
|
-
|
|
193
147
|
return this.resources.get(name);
|
|
194
148
|
}
|
|
195
|
-
|
|
196
149
|
getAction(name, action) {
|
|
197
150
|
// 支持注册局部 action
|
|
198
151
|
if (this.actionHandlers.has(`${name}:${action}`)) {
|
|
199
152
|
return this.getResource(name).getAction(`${name}:${action}`);
|
|
200
153
|
}
|
|
201
|
-
|
|
202
154
|
return this.getResource(name).getAction(action);
|
|
203
155
|
}
|
|
204
|
-
|
|
205
156
|
getMiddlewares() {
|
|
206
157
|
return this.middlewares.nodes;
|
|
207
158
|
}
|
|
208
|
-
|
|
209
159
|
use(middlewares, options = {}) {
|
|
210
160
|
this.middlewares.add(middlewares, options);
|
|
211
161
|
}
|
|
212
|
-
|
|
213
162
|
restApiMiddleware({
|
|
214
163
|
prefix,
|
|
215
164
|
accessors
|
|
216
165
|
} = {}) {
|
|
217
166
|
var _this = this;
|
|
218
|
-
|
|
219
167
|
return /*#__PURE__*/function () {
|
|
220
168
|
var _ref = _asyncToGenerator(function* (ctx, next) {
|
|
221
169
|
ctx.resourcer = _this;
|
|
@@ -226,15 +174,12 @@ class Resourcer {
|
|
|
226
174
|
prefix: _this.options.prefix || prefix,
|
|
227
175
|
accessors: _this.options.accessors || accessors
|
|
228
176
|
});
|
|
229
|
-
|
|
230
177
|
if (!params) {
|
|
231
178
|
return next();
|
|
232
179
|
}
|
|
233
|
-
|
|
234
180
|
try {
|
|
235
|
-
const resource = _this.getResource((0, _utils2.getNameByParams)(params));
|
|
236
|
-
|
|
237
|
-
|
|
181
|
+
const resource = _this.getResource((0, _utils2.getNameByParams)(params));
|
|
182
|
+
// 为关系资源时,暂时需要再执行一遍 parseRequest
|
|
238
183
|
if (resource.options.type && resource.options.type !== 'single') {
|
|
239
184
|
params = (0, _utils2.parseRequest)({
|
|
240
185
|
path: ctx.request.path,
|
|
@@ -244,13 +189,11 @@ class Resourcer {
|
|
|
244
189
|
prefix: _this.options.prefix || prefix,
|
|
245
190
|
accessors: _this.options.accessors || accessors
|
|
246
191
|
});
|
|
247
|
-
|
|
248
192
|
if (!params) {
|
|
249
193
|
return next();
|
|
250
194
|
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
|
|
195
|
+
}
|
|
196
|
+
// action 需要 clone 之后再赋给 ctx
|
|
254
197
|
ctx.action = _this.getAction((0, _utils2.getNameByParams)(params), params.actionName).clone();
|
|
255
198
|
ctx.action.setContext(ctx);
|
|
256
199
|
ctx.action.actionName = params.actionName;
|
|
@@ -258,7 +201,6 @@ class Resourcer {
|
|
|
258
201
|
ctx.action.resourceName = params.associatedName ? `${params.associatedName}.${params.resourceName}` : params.resourceName;
|
|
259
202
|
ctx.action.params.filterByTk = params.resourceIndex;
|
|
260
203
|
const query = (0, _utils2.parseQuery)(ctx.request.querystring);
|
|
261
|
-
|
|
262
204
|
if ((0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}').test(ctx.request.path)) {
|
|
263
205
|
ctx.action.mergeParams(_objectSpread(_objectSpread(_objectSpread({}, query), params), ctx.request.body));
|
|
264
206
|
} else {
|
|
@@ -266,19 +208,16 @@ class Resourcer {
|
|
|
266
208
|
values: ctx.request.body
|
|
267
209
|
}));
|
|
268
210
|
}
|
|
269
|
-
|
|
270
211
|
return (0, _koaCompose().default)(ctx.action.getHandlers())(ctx, next);
|
|
271
212
|
} catch (error) {
|
|
272
213
|
return next();
|
|
273
214
|
}
|
|
274
215
|
});
|
|
275
|
-
|
|
276
|
-
return function (_x, _x2) {
|
|
216
|
+
return function (_x2, _x3) {
|
|
277
217
|
return _ref.apply(this, arguments);
|
|
278
218
|
};
|
|
279
219
|
}();
|
|
280
220
|
}
|
|
281
|
-
|
|
282
221
|
middleware(options = {}) {
|
|
283
222
|
return this.restApiMiddleware(options);
|
|
284
223
|
}
|
|
@@ -289,22 +228,17 @@ class Resourcer {
|
|
|
289
228
|
* @param context
|
|
290
229
|
* @param next
|
|
291
230
|
*/
|
|
292
|
-
|
|
293
|
-
|
|
294
231
|
execute(options, context = {}, next) {
|
|
295
232
|
var _this2 = this;
|
|
296
|
-
|
|
297
233
|
return _asyncToGenerator(function* () {
|
|
298
234
|
const resource = options.resource,
|
|
299
|
-
|
|
235
|
+
action = options.action;
|
|
300
236
|
context.resourcer = _this2;
|
|
301
237
|
context.action = _this2.getAction(resource, action);
|
|
302
238
|
return yield context.action.execute(context, next);
|
|
303
239
|
})();
|
|
304
240
|
}
|
|
305
|
-
|
|
306
241
|
}
|
|
307
|
-
|
|
308
242
|
exports.Resourcer = Resourcer;
|
|
309
243
|
var _default = Resourcer;
|
|
310
244
|
exports.default = _default;
|
package/lib/utils.js
CHANGED
|
@@ -8,63 +8,44 @@ exports.mergeFields = mergeFields;
|
|
|
8
8
|
exports.parseFields = parseFields;
|
|
9
9
|
exports.parseQuery = parseQuery;
|
|
10
10
|
exports.parseRequest = parseRequest;
|
|
11
|
-
|
|
12
11
|
function _lodash() {
|
|
13
12
|
const data = _interopRequireDefault(require("lodash"));
|
|
14
|
-
|
|
15
13
|
_lodash = function _lodash() {
|
|
16
14
|
return data;
|
|
17
15
|
};
|
|
18
|
-
|
|
19
16
|
return data;
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
function _pathToRegexp() {
|
|
23
19
|
const data = require("path-to-regexp");
|
|
24
|
-
|
|
25
20
|
_pathToRegexp = function _pathToRegexp() {
|
|
26
21
|
return data;
|
|
27
22
|
};
|
|
28
|
-
|
|
29
23
|
return data;
|
|
30
24
|
}
|
|
31
|
-
|
|
32
25
|
function _qs() {
|
|
33
26
|
const data = _interopRequireDefault(require("qs"));
|
|
34
|
-
|
|
35
27
|
_qs = function _qs() {
|
|
36
28
|
return data;
|
|
37
29
|
};
|
|
38
|
-
|
|
39
30
|
return data;
|
|
40
31
|
}
|
|
41
|
-
|
|
42
32
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
|
-
|
|
44
33
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
45
|
-
|
|
46
34
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
47
|
-
|
|
48
35
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
49
|
-
|
|
50
36
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
51
|
-
|
|
52
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
53
|
-
|
|
37
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
54
38
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
55
|
-
|
|
56
39
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
57
|
-
|
|
58
40
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
59
|
-
|
|
60
|
-
function
|
|
61
|
-
|
|
41
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
42
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
43
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // @ts-ignore
|
|
62
44
|
function getNameByParams(params) {
|
|
63
45
|
const resourceName = params.resourceName,
|
|
64
|
-
|
|
46
|
+
associatedName = params.associatedName;
|
|
65
47
|
return associatedName ? `${associatedName}.${resourceName}` : resourceName;
|
|
66
48
|
}
|
|
67
|
-
|
|
68
49
|
function parseRequest(request, options = {}) {
|
|
69
50
|
const accessors = _objectSpread({
|
|
70
51
|
// 常规 actions
|
|
@@ -78,23 +59,19 @@ function parseRequest(request, options = {}) {
|
|
|
78
59
|
set: 'set',
|
|
79
60
|
remove: 'remove'
|
|
80
61
|
}, options.accessors || {});
|
|
81
|
-
|
|
82
62
|
const keys = [];
|
|
83
63
|
const regexp = (0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}', keys);
|
|
84
64
|
const matches = regexp.exec(request.path);
|
|
85
|
-
|
|
86
65
|
if (matches) {
|
|
87
66
|
const params = {};
|
|
88
67
|
keys.forEach((obj, index) => {
|
|
89
68
|
if (matches[index + 1] === undefined) {
|
|
90
69
|
return;
|
|
91
70
|
}
|
|
92
|
-
|
|
93
71
|
params[obj.name] = matches[index + 1];
|
|
94
72
|
});
|
|
95
73
|
return params;
|
|
96
74
|
}
|
|
97
|
-
|
|
98
75
|
const defaults = {
|
|
99
76
|
single: {
|
|
100
77
|
'/:resourceName': {
|
|
@@ -176,78 +153,62 @@ function parseRequest(request, options = {}) {
|
|
|
176
153
|
};
|
|
177
154
|
const params = {};
|
|
178
155
|
let prefix = (options.prefix || '').trim().replace(/\/$/, '');
|
|
179
|
-
|
|
180
156
|
if (prefix && !prefix.startsWith('/')) {
|
|
181
157
|
prefix = `/${prefix}`;
|
|
182
158
|
}
|
|
183
|
-
|
|
184
159
|
const _request$type = request.type,
|
|
185
|
-
|
|
186
|
-
|
|
160
|
+
type = _request$type === void 0 ? 'single' : _request$type;
|
|
187
161
|
for (const path in defaults[type]) {
|
|
188
162
|
const keys = [];
|
|
189
163
|
const regexp = (0, _pathToRegexp().pathToRegexp)(`${prefix}${path}`, keys, {});
|
|
190
164
|
const matches = regexp.exec(request.path);
|
|
191
|
-
|
|
192
165
|
if (!matches) {
|
|
193
166
|
continue;
|
|
194
167
|
}
|
|
195
|
-
|
|
196
168
|
keys.forEach((obj, index) => {
|
|
197
169
|
if (matches[index + 1] === undefined) {
|
|
198
170
|
return;
|
|
199
171
|
}
|
|
200
|
-
|
|
201
172
|
params[obj.name] = matches[index + 1];
|
|
202
173
|
});
|
|
203
174
|
params.actionName = _lodash().default.get(defaults, [type, path, request.method.toLowerCase()]);
|
|
204
175
|
}
|
|
205
|
-
|
|
206
176
|
if (Object.keys(params).length === 0) {
|
|
207
177
|
return false;
|
|
208
178
|
}
|
|
209
|
-
|
|
210
179
|
if (params.resourceName) {
|
|
211
180
|
const _params$resourceName$ = params.resourceName.split(':'),
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
181
|
+
_params$resourceName$2 = _slicedToArray(_params$resourceName$, 2),
|
|
182
|
+
resourceName = _params$resourceName$2[0],
|
|
183
|
+
actionName = _params$resourceName$2[1];
|
|
216
184
|
if (actionName) {
|
|
217
185
|
params.resourceName = resourceName;
|
|
218
186
|
params.actionName = actionName;
|
|
219
187
|
}
|
|
220
188
|
}
|
|
221
|
-
|
|
222
189
|
return params;
|
|
223
190
|
}
|
|
224
|
-
|
|
225
191
|
function parseQuery(input) {
|
|
226
192
|
// 自带 query 处理的不太给力,需要用 qs 转一下
|
|
227
193
|
const query = _qs().default.parse(input, {
|
|
228
194
|
// 原始 query string 中如果一个键连等号“=”都没有可以被认为是 null 类型
|
|
229
|
-
strictNullHandling: true
|
|
195
|
+
strictNullHandling: true
|
|
196
|
+
// 逗号分隔转换为数组
|
|
230
197
|
// comma: true,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
198
|
+
});
|
|
199
|
+
// filter 支持 json string
|
|
235
200
|
if (typeof query.filter === 'string') {
|
|
236
201
|
query.filter = JSON.parse(query.filter);
|
|
237
202
|
}
|
|
238
|
-
|
|
239
203
|
return query;
|
|
240
204
|
}
|
|
241
|
-
|
|
242
205
|
function parseFields(fields) {
|
|
243
206
|
if (!fields) {
|
|
244
207
|
return {};
|
|
245
208
|
}
|
|
246
|
-
|
|
247
209
|
if (typeof fields === 'string') {
|
|
248
210
|
fields = fields.split(',').map(field => field.trim());
|
|
249
211
|
}
|
|
250
|
-
|
|
251
212
|
if (Array.isArray(fields)) {
|
|
252
213
|
const onlyFields = [];
|
|
253
214
|
const output = {};
|
|
@@ -258,46 +219,39 @@ function parseFields(fields) {
|
|
|
258
219
|
if (item.only) {
|
|
259
220
|
onlyFields.push(...item.only.toString().split(','));
|
|
260
221
|
}
|
|
261
|
-
|
|
262
222
|
Object.assign(output, parseFields(item));
|
|
263
223
|
}
|
|
264
224
|
});
|
|
265
|
-
|
|
266
225
|
if (onlyFields.length) {
|
|
267
226
|
output.only = onlyFields;
|
|
268
227
|
}
|
|
269
|
-
|
|
270
228
|
return output;
|
|
271
229
|
}
|
|
272
|
-
|
|
273
230
|
if (fields.only && typeof fields.only === 'string') {
|
|
274
231
|
fields.only = fields.only.split(',').map(field => field.trim());
|
|
275
232
|
}
|
|
276
|
-
|
|
277
233
|
if (fields.except && typeof fields.except === 'string') {
|
|
278
234
|
fields.except = fields.except.split(',').map(field => field.trim());
|
|
279
235
|
}
|
|
280
|
-
|
|
281
236
|
if (fields.appends && typeof fields.appends === 'string') {
|
|
282
237
|
fields.appends = fields.appends.split(',').map(field => field.trim());
|
|
283
238
|
}
|
|
284
|
-
|
|
285
239
|
return fields;
|
|
286
240
|
}
|
|
287
|
-
|
|
288
241
|
function mergeFields(defaults, inputs) {
|
|
289
242
|
let fields = {};
|
|
290
243
|
defaults = parseFields(defaults);
|
|
291
244
|
inputs = parseFields(inputs);
|
|
292
|
-
|
|
293
245
|
if (inputs.only) {
|
|
294
246
|
// 前端提供 only,后端提供 only
|
|
295
247
|
if (defaults.only) {
|
|
296
248
|
fields.only = defaults.only.filter(field => inputs.only.includes(field));
|
|
297
|
-
}
|
|
249
|
+
}
|
|
250
|
+
// 前端提供 only,后端提供 except,输出 only 排除 except
|
|
298
251
|
else if (defaults.except) {
|
|
299
252
|
fields.only = inputs.only.filter(field => !defaults.except.includes(field));
|
|
300
|
-
}
|
|
253
|
+
}
|
|
254
|
+
// 前端提供 only,后端没有提供 only 或 except
|
|
301
255
|
else {
|
|
302
256
|
fields.only = inputs.only;
|
|
303
257
|
}
|
|
@@ -305,23 +259,22 @@ function mergeFields(defaults, inputs) {
|
|
|
305
259
|
// 前端提供 except,后端提供 only,只输出 only 里排除 except 的字段
|
|
306
260
|
if (defaults.only) {
|
|
307
261
|
fields.only = defaults.only.filter(field => !inputs.except.includes(field));
|
|
308
|
-
}
|
|
262
|
+
}
|
|
263
|
+
// 前端提供 except,后端提供 except 或不提供,合并 except
|
|
309
264
|
else {
|
|
310
265
|
fields.except = _lodash().default.uniq([...inputs.except, ...(defaults.except || [])]);
|
|
311
266
|
}
|
|
312
|
-
}
|
|
267
|
+
}
|
|
268
|
+
// 前端没提供 only 或 except
|
|
313
269
|
else {
|
|
314
270
|
fields = defaults;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
271
|
+
}
|
|
272
|
+
// 如果前端提供了 appends
|
|
318
273
|
if (!_lodash().default.isEmpty(inputs.appends)) {
|
|
319
274
|
fields.appends = _lodash().default.uniq([...inputs.appends, ...(defaults.appends || [])]);
|
|
320
275
|
}
|
|
321
|
-
|
|
322
276
|
if (!fields.appends) {
|
|
323
277
|
fields.appends = [];
|
|
324
278
|
}
|
|
325
|
-
|
|
326
279
|
return fields;
|
|
327
280
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/resourcer",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2-alpha.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@nocobase/utils": "0.9.
|
|
9
|
+
"@nocobase/utils": "0.9.2-alpha.1",
|
|
10
10
|
"deepmerge": "^4.2.2",
|
|
11
11
|
"koa-compose": "^4.1.0",
|
|
12
12
|
"lodash": "^4.17.21",
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
19
19
|
"directory": "packages/resourcer"
|
|
20
20
|
},
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "a4f103eb0144f07205aff7b2a6be8ea6aa1330df"
|
|
22
22
|
}
|