@nocobase/resourcer 0.7.4-alpha.7 → 0.7.5-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.d.ts +1 -1
- package/lib/action.js +11 -3
- package/lib/assign.js +4 -0
- package/lib/middleware.d.ts +10 -7
- package/lib/middleware.js +37 -21
- package/lib/resourcer.js +17 -7
- package/lib/utils.d.ts +0 -1
- package/lib/utils.js +0 -13
- package/package.json +3 -2
package/lib/action.d.ts
CHANGED
|
@@ -182,7 +182,7 @@ export declare class Action {
|
|
|
182
182
|
getOptions(): ActionOptions;
|
|
183
183
|
setName(name: ActionName): this;
|
|
184
184
|
getName(): ActionName;
|
|
185
|
-
getMiddlewareHandlers(): any[];
|
|
185
|
+
getMiddlewareHandlers(): ((ctx: any, next: any) => Promise<void>)[];
|
|
186
186
|
getHandler(): any;
|
|
187
187
|
getHandlers(): any[];
|
|
188
188
|
execute(context: any, next?: any): Promise<void>;
|
package/lib/action.js
CHANGED
|
@@ -25,7 +25,15 @@ function _koaCompose() {
|
|
|
25
25
|
return data;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
function _utils() {
|
|
29
|
+
const data = require("@nocobase/utils");
|
|
30
|
+
|
|
31
|
+
_utils = function _utils() {
|
|
32
|
+
return data;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
29
37
|
|
|
30
38
|
var _middleware = _interopRequireDefault(require("./middleware"));
|
|
31
39
|
|
|
@@ -61,7 +69,7 @@ class Action {
|
|
|
61
69
|
this.resourceName = void 0;
|
|
62
70
|
this.resourceOf = void 0;
|
|
63
71
|
this.middlewares = [];
|
|
64
|
-
options = (0, _utils.requireModule)(options);
|
|
72
|
+
options = (0, _utils().requireModule)(options);
|
|
65
73
|
|
|
66
74
|
if (typeof options === 'function') {
|
|
67
75
|
options = {
|
|
@@ -137,7 +145,7 @@ class Action {
|
|
|
137
145
|
}
|
|
138
146
|
|
|
139
147
|
getHandler() {
|
|
140
|
-
const handler = (0, _utils.requireModule)(this.handler || this.resource.resourcer.getRegisteredHandler(this.name));
|
|
148
|
+
const handler = (0, _utils().requireModule)(this.handler || this.resource.resourcer.getRegisteredHandler(this.name));
|
|
141
149
|
|
|
142
150
|
if (typeof handler !== 'function') {
|
|
143
151
|
throw new Error('Handler must be a function!');
|
package/lib/assign.js
CHANGED
|
@@ -49,6 +49,10 @@ function getKeys(target) {
|
|
|
49
49
|
const mergeStrategies = new Map();
|
|
50
50
|
exports.mergeStrategies = mergeStrategies;
|
|
51
51
|
mergeStrategies.set('overwrite', (_, y) => {
|
|
52
|
+
if (typeof y === 'string') {
|
|
53
|
+
y = y.split(',');
|
|
54
|
+
}
|
|
55
|
+
|
|
52
56
|
return y;
|
|
53
57
|
});
|
|
54
58
|
mergeStrategies.set('andMerge', (x, y) => {
|
package/lib/middleware.d.ts
CHANGED
|
@@ -15,15 +15,18 @@ export interface MiddlewareOptions {
|
|
|
15
15
|
}
|
|
16
16
|
export declare class Middleware {
|
|
17
17
|
protected options: MiddlewareOptions;
|
|
18
|
+
private middlewares;
|
|
18
19
|
constructor(options: MiddlewareOptions | Function);
|
|
19
|
-
getHandler(): any
|
|
20
|
+
getHandler(): (ctx: any, next: any) => Promise<void>;
|
|
21
|
+
use(middleware: HandlerType): void;
|
|
22
|
+
disuse(middleware: HandlerType): void;
|
|
20
23
|
canAccess(name: ActionName): boolean;
|
|
21
24
|
static toInstanceArray(middlewares: any): Middleware[];
|
|
22
25
|
}
|
|
23
26
|
export default Middleware;
|
|
24
|
-
export declare
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
27
|
+
export declare function branch(map: {
|
|
28
|
+
[key: string]: HandlerType;
|
|
29
|
+
}, reducer: (ctx: any) => string, options?: {
|
|
30
|
+
keyNotFound?(ctx: any, next: any): void;
|
|
31
|
+
handlerNotSet?(ctx: any, next: any): void;
|
|
32
|
+
}): HandlerType;
|
package/lib/middleware.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.Middleware = void 0;
|
|
7
|
+
exports.branch = branch;
|
|
8
|
+
exports.default = void 0;
|
|
7
9
|
|
|
8
10
|
function _koaCompose() {
|
|
9
11
|
const data = _interopRequireDefault(require("koa-compose"));
|
|
@@ -15,14 +17,23 @@ function _koaCompose() {
|
|
|
15
17
|
return data;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
function _utils() {
|
|
21
|
+
const data = require("@nocobase/utils");
|
|
22
|
+
|
|
23
|
+
_utils = function _utils() {
|
|
24
|
+
return data;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
19
29
|
|
|
20
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
31
|
|
|
22
32
|
class Middleware {
|
|
23
33
|
constructor(options) {
|
|
24
34
|
this.options = void 0;
|
|
25
|
-
|
|
35
|
+
this.middlewares = [];
|
|
36
|
+
options = (0, _utils().requireModule)(options);
|
|
26
37
|
|
|
27
38
|
if (typeof options === 'function') {
|
|
28
39
|
this.options = {
|
|
@@ -34,13 +45,21 @@ class Middleware {
|
|
|
34
45
|
}
|
|
35
46
|
|
|
36
47
|
getHandler() {
|
|
37
|
-
const handler = (0, _utils.requireModule)(this.options.handler);
|
|
48
|
+
const handler = (0, _utils().requireModule)(this.options.handler);
|
|
38
49
|
|
|
39
50
|
if (typeof handler !== 'function') {
|
|
40
51
|
throw new Error('Handler must be a function!');
|
|
41
52
|
}
|
|
42
53
|
|
|
43
|
-
return handler;
|
|
54
|
+
return (ctx, next) => (0, _koaCompose().default)([handler, ...this.middlewares])(ctx, next);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
use(middleware) {
|
|
58
|
+
this.middlewares.push(middleware);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
disuse(middleware) {
|
|
62
|
+
this.middlewares.splice(this.middlewares.indexOf(middleware), 1);
|
|
44
63
|
}
|
|
45
64
|
|
|
46
65
|
canAccess(name) {
|
|
@@ -93,23 +112,20 @@ exports.Middleware = Middleware;
|
|
|
93
112
|
var _default = Middleware;
|
|
94
113
|
exports.default = _default;
|
|
95
114
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
compose() {
|
|
102
|
-
return (ctx, next) => (0, _koaCompose().default)(this.middlewares)(ctx, next);
|
|
103
|
-
}
|
|
115
|
+
function branch(map = {}, reducer, options = {}) {
|
|
116
|
+
return (ctx, next) => {
|
|
117
|
+
const key = reducer(ctx);
|
|
104
118
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
if (!key) {
|
|
120
|
+
return options.keyNotFound ? options.keyNotFound(ctx, next) : ctx.throw(404);
|
|
121
|
+
}
|
|
108
122
|
|
|
109
|
-
|
|
110
|
-
this.middlewares.splice(this.middlewares.indexOf(middleware), 1);
|
|
111
|
-
}
|
|
123
|
+
const handler = map[key];
|
|
112
124
|
|
|
113
|
-
|
|
125
|
+
if (!handler) {
|
|
126
|
+
return options.handlerNotSet ? options.handlerNotSet(ctx, next) : ctx.throw(404);
|
|
127
|
+
}
|
|
114
128
|
|
|
115
|
-
|
|
129
|
+
return handler(ctx, next);
|
|
130
|
+
};
|
|
131
|
+
}
|
package/lib/resourcer.js
CHANGED
|
@@ -45,9 +45,19 @@ function _pathToRegexp() {
|
|
|
45
45
|
return data;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
function _utils() {
|
|
49
|
+
const data = require("@nocobase/utils");
|
|
50
|
+
|
|
51
|
+
_utils = function _utils() {
|
|
52
|
+
return data;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
return data;
|
|
56
|
+
}
|
|
57
|
+
|
|
48
58
|
var _resource = _interopRequireDefault(require("./resource"));
|
|
49
59
|
|
|
50
|
-
var
|
|
60
|
+
var _utils2 = require("./utils");
|
|
51
61
|
|
|
52
62
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
53
63
|
|
|
@@ -109,7 +119,7 @@ class Resourcer {
|
|
|
109
119
|
|
|
110
120
|
const resources = new Map();
|
|
111
121
|
files.forEach(file => {
|
|
112
|
-
const options = (0, _utils.requireModule)(file);
|
|
122
|
+
const options = (0, _utils().requireModule)(file);
|
|
113
123
|
const table = this.define(typeof options === 'function' ? options(this) : options);
|
|
114
124
|
resources.set(table.getName(), table);
|
|
115
125
|
});
|
|
@@ -208,7 +218,7 @@ class Resourcer {
|
|
|
208
218
|
const restApiMiddleware = /*#__PURE__*/function () {
|
|
209
219
|
var _ref = _asyncToGenerator(function* (ctx, next) {
|
|
210
220
|
ctx.resourcer = _this;
|
|
211
|
-
let params = (0,
|
|
221
|
+
let params = (0, _utils2.parseRequest)({
|
|
212
222
|
path: ctx.request.path,
|
|
213
223
|
method: ctx.request.method
|
|
214
224
|
}, {
|
|
@@ -221,11 +231,11 @@ class Resourcer {
|
|
|
221
231
|
}
|
|
222
232
|
|
|
223
233
|
try {
|
|
224
|
-
const resource = _this.getResource((0,
|
|
234
|
+
const resource = _this.getResource((0, _utils2.getNameByParams)(params)); // 为关系资源时,暂时需要再执行一遍 parseRequest
|
|
225
235
|
|
|
226
236
|
|
|
227
237
|
if (resource.options.type && resource.options.type !== 'single') {
|
|
228
|
-
params = (0,
|
|
238
|
+
params = (0, _utils2.parseRequest)({
|
|
229
239
|
path: ctx.request.path,
|
|
230
240
|
method: ctx.request.method,
|
|
231
241
|
type: resource.options.type
|
|
@@ -240,13 +250,13 @@ class Resourcer {
|
|
|
240
250
|
} // action 需要 clone 之后再赋给 ctx
|
|
241
251
|
|
|
242
252
|
|
|
243
|
-
ctx.action = _this.getAction((0,
|
|
253
|
+
ctx.action = _this.getAction((0, _utils2.getNameByParams)(params), params.actionName).clone();
|
|
244
254
|
ctx.action.setContext(ctx);
|
|
245
255
|
ctx.action.actionName = params.actionName;
|
|
246
256
|
ctx.action.resourceOf = params.associatedIndex;
|
|
247
257
|
ctx.action.resourceName = params.associatedName ? `${params.associatedName}.${params.resourceName}` : params.resourceName;
|
|
248
258
|
ctx.action.params.filterByTk = params.resourceIndex;
|
|
249
|
-
const query = (0,
|
|
259
|
+
const query = (0, _utils2.parseQuery)(ctx.request.querystring);
|
|
250
260
|
|
|
251
261
|
if ((0, _pathToRegexp().pathToRegexp)('/resourcer/{:associatedName.}?:resourceName{\\::actionName}').test(ctx.request.path)) {
|
|
252
262
|
ctx.action.mergeParams(_objectSpread(_objectSpread(_objectSpread({}, query), params), ctx.request.body));
|
package/lib/utils.d.ts
CHANGED
|
@@ -25,7 +25,6 @@ export interface ParsedParams {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function getNameByParams(params: ParsedParams): string;
|
|
27
27
|
export declare function parseRequest(request: ParseRequest, options?: ParseOptions): ParsedParams | false;
|
|
28
|
-
export declare function requireModule(module: any): any;
|
|
29
28
|
export declare function parseQuery(input: string): any;
|
|
30
29
|
export declare function parseFields(fields: any): any;
|
|
31
30
|
export declare function mergeFields(defaults: any, inputs: any): any;
|
package/lib/utils.js
CHANGED
|
@@ -8,7 +8,6 @@ exports.mergeFields = mergeFields;
|
|
|
8
8
|
exports.parseFields = parseFields;
|
|
9
9
|
exports.parseQuery = parseQuery;
|
|
10
10
|
exports.parseRequest = parseRequest;
|
|
11
|
-
exports.requireModule = requireModule;
|
|
12
11
|
|
|
13
12
|
function _lodash() {
|
|
14
13
|
const data = _interopRequireDefault(require("lodash"));
|
|
@@ -216,18 +215,6 @@ function parseRequest(request, options = {}) {
|
|
|
216
215
|
return params;
|
|
217
216
|
}
|
|
218
217
|
|
|
219
|
-
function requireModule(module) {
|
|
220
|
-
if (typeof module === 'string') {
|
|
221
|
-
module = require(module);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (typeof module !== 'object') {
|
|
225
|
-
return module;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
return module.__esModule ? module.default : module;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
218
|
function parseQuery(input) {
|
|
232
219
|
// 自带 query 处理的不太给力,需要用 qs 转一下
|
|
233
220
|
const query = _qs().default.parse(input, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/resourcer",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5-alpha.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
14
|
"dependencies": {
|
|
15
|
+
"@nocobase/utils": "0.7.5-alpha.1",
|
|
15
16
|
"deepmerge": "^4.2.2",
|
|
16
17
|
"koa-compose": "^4.1.0",
|
|
17
18
|
"lodash": "^4.17.21",
|
|
@@ -23,5 +24,5 @@
|
|
|
23
24
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
24
25
|
"directory": "packages/resourcer"
|
|
25
26
|
},
|
|
26
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "f6eb27b68185bb0c0b4c2cfca1df84205a9b9173"
|
|
27
28
|
}
|