@eggjs/tegg-controller-plugin 1.4.1 → 1.5.0
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/CHANGELOG.md +54 -0
- package/LICENSE +21 -0
- package/README.md +20 -0
- package/lib/RootProtoManager.d.ts +1 -1
- package/lib/RootProtoManager.js +12 -3
- package/lib/impl/http/HTTPControllerRegister.d.ts +1 -0
- package/lib/impl/http/HTTPControllerRegister.js +11 -2
- package/lib/impl/http/HTTPMethodRegister.d.ts +5 -1
- package/lib/impl/http/HTTPMethodRegister.js +46 -10
- package/package.json +5 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
# [1.5.0](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.4.1...@eggjs/tegg-controller-plugin@1.5.0) (2022-08-16)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* impl Host decorator ([#48](https://github.com/eggjs/tegg/issues/48)) ([65dc7a8](https://github.com/eggjs/tegg/commit/65dc7a899ba72dd0851c35046562766d7f2b71b6))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [1.4.0](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.3.3...@eggjs/tegg-controller-plugin@1.4.0) (2022-07-28)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* middleware decorator allow multi middleware function ([#46](https://github.com/eggjs/tegg/issues/46)) ([a4b55f7](https://github.com/eggjs/tegg/commit/a4b55f7065c3d78e2c98c4b05f01871f666542ef))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## [1.3.3](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.3.2...@eggjs/tegg-controller-plugin@1.3.3) (2022-07-20)
|
|
29
|
+
|
|
30
|
+
**Note:** Version bump only for package @eggjs/tegg-controller-plugin
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [1.3.2](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.3.1...@eggjs/tegg-controller-plugin@1.3.2) (2022-07-20)
|
|
37
|
+
|
|
38
|
+
**Note:** Version bump only for package @eggjs/tegg-controller-plugin
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# [1.3.0](https://github.com/eggjs/tegg/compare/v1.2.0...v1.3.0) (2022-07-01)
|
|
45
|
+
|
|
46
|
+
**Note:** Version bump only for package @eggjs/tegg-controller-plugin
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# [0.2.0](https://github.com/eggjs/tegg/compare/v0.1.19...v0.2.0) (2022-01-20)
|
|
53
|
+
|
|
54
|
+
**Note:** Version bump only for package @eggjs/tegg-controller-plugin
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017-present Alibaba Group Holding Limited and other contributors.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -193,3 +193,23 @@ export class FooController {
|
|
|
193
193
|
// 具体 name 值可以查看 path-to-regexp
|
|
194
194
|
@HTTPParam({ name: '0' }) id: string
|
|
195
195
|
```
|
|
196
|
+
|
|
197
|
+
### Host
|
|
198
|
+
Host 注解,用于指定 HTTP 方法仅在 host 匹配时执行。
|
|
199
|
+
可以添加在类/方法上。添加在类上时,对类上所有方法生效,添加在方法上时,只对当前方法生效。方法上的注解可以覆盖类上的注解
|
|
200
|
+
|
|
201
|
+
```ts
|
|
202
|
+
// app/controller/FooController.ts
|
|
203
|
+
import { Host } from '@eggjs/tegg';
|
|
204
|
+
@Host('foo.eggjs.com')
|
|
205
|
+
export class FooController {
|
|
206
|
+
// 仅能通过 foo.eggjs.com 访问
|
|
207
|
+
async hello() {
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// 仅能通过 bar.eggjs.com 访问
|
|
211
|
+
@Host('bar.eggjs.com')
|
|
212
|
+
async bar() {
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
@@ -3,6 +3,6 @@ import { EggContext } from '@eggjs/tegg';
|
|
|
3
3
|
export declare type GetRootProtoCallback = (ctx: EggContext) => EggPrototype | undefined;
|
|
4
4
|
export declare class RootProtoManager {
|
|
5
5
|
protoMap: Map<string, GetRootProtoCallback[]>;
|
|
6
|
-
registerRootProto(method: string, cb: GetRootProtoCallback): void;
|
|
6
|
+
registerRootProto(method: string, host: string, cb: GetRootProtoCallback): void;
|
|
7
7
|
getRootProto(ctx: EggContext): EggPrototype | undefined;
|
|
8
8
|
}
|
package/lib/RootProtoManager.js
CHANGED
|
@@ -7,11 +7,20 @@ class RootProtoManager {
|
|
|
7
7
|
// <method, GetRootProtoCallback[]>
|
|
8
8
|
this.protoMap = new Map();
|
|
9
9
|
}
|
|
10
|
-
registerRootProto(method, cb) {
|
|
11
|
-
const cbList = tegg_common_util_1.MapUtil.getOrStore(this.protoMap, method, []);
|
|
10
|
+
registerRootProto(method, host, cb) {
|
|
11
|
+
const cbList = tegg_common_util_1.MapUtil.getOrStore(this.protoMap, method + host, []);
|
|
12
12
|
cbList.push(cb);
|
|
13
13
|
}
|
|
14
14
|
getRootProto(ctx) {
|
|
15
|
+
const hostCbList = this.protoMap.get(ctx.method + ctx.host);
|
|
16
|
+
if (hostCbList) {
|
|
17
|
+
for (const cb of hostCbList) {
|
|
18
|
+
const proto = cb(ctx);
|
|
19
|
+
if (proto) {
|
|
20
|
+
return proto;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
15
24
|
const cbList = this.protoMap.get(ctx.method);
|
|
16
25
|
if (!cbList) {
|
|
17
26
|
return;
|
|
@@ -25,4 +34,4 @@ class RootProtoManager {
|
|
|
25
34
|
}
|
|
26
35
|
}
|
|
27
36
|
exports.RootProtoManager = RootProtoManager;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdFByb3RvTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlJvb3RQcm90b01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsOERBQWtEO0FBSWxELE1BQWEsZ0JBQWdCO0lBQTdCO1FBQ0UsbUNBQW1DO1FBQ25DLGFBQVEsR0FBd0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQTZCNUQsQ0FBQztJQTNCQyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQXdCO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLDBCQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBZTtRQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLFVBQVUsRUFBRTtZQUNkLEtBQUssTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFO2dCQUMzQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBQ0QsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUNILENBQUM7Q0FDRjtBQS9CRCw0Q0ErQkMifQ==
|
|
@@ -8,6 +8,7 @@ import { RootProtoManager } from '../../RootProtoManager';
|
|
|
8
8
|
export declare class HTTPControllerRegister implements ControllerRegister {
|
|
9
9
|
static instance?: HTTPControllerRegister;
|
|
10
10
|
private readonly router;
|
|
11
|
+
private readonly checkRouters;
|
|
11
12
|
private readonly eggContainerFactory;
|
|
12
13
|
private controllerProtos;
|
|
13
14
|
static create(proto: EggPrototype, controllerMeta: ControllerMetadata, app: Application): HTTPControllerRegister;
|
|
@@ -11,6 +11,8 @@ class HTTPControllerRegister {
|
|
|
11
11
|
constructor(router, eggContainerFactory) {
|
|
12
12
|
this.controllerProtos = [];
|
|
13
13
|
this.router = router;
|
|
14
|
+
this.checkRouters = new Map();
|
|
15
|
+
this.checkRouters.set('default', router);
|
|
14
16
|
this.eggContainerFactory = eggContainerFactory;
|
|
15
17
|
}
|
|
16
18
|
static create(proto, controllerMeta, app) {
|
|
@@ -28,6 +30,7 @@ class HTTPControllerRegister {
|
|
|
28
30
|
static clean() {
|
|
29
31
|
if (this.instance) {
|
|
30
32
|
this.instance.controllerProtos = [];
|
|
33
|
+
this.instance.checkRouters.clear();
|
|
31
34
|
}
|
|
32
35
|
this.instance = undefined;
|
|
33
36
|
}
|
|
@@ -44,10 +47,16 @@ class HTTPControllerRegister {
|
|
|
44
47
|
for (const method of allMethods) {
|
|
45
48
|
const controllerProto = methodMap.get(method);
|
|
46
49
|
const controllerMeta = controllerProto.getMetaData(tegg_1.CONTROLLER_META_DATA);
|
|
47
|
-
const methodRegister = new HTTPMethodRegister_1.HTTPMethodRegister(controllerProto, controllerMeta, method, this.router, this.eggContainerFactory);
|
|
50
|
+
const methodRegister = new HTTPMethodRegister_1.HTTPMethodRegister(controllerProto, controllerMeta, method, this.router, this.checkRouters, this.eggContainerFactory);
|
|
51
|
+
methodRegister.checkDuplicate();
|
|
52
|
+
}
|
|
53
|
+
for (const method of allMethods) {
|
|
54
|
+
const controllerProto = methodMap.get(method);
|
|
55
|
+
const controllerMeta = controllerProto.getMetaData(tegg_1.CONTROLLER_META_DATA);
|
|
56
|
+
const methodRegister = new HTTPMethodRegister_1.HTTPMethodRegister(controllerProto, controllerMeta, method, this.router, this.checkRouters, this.eggContainerFactory);
|
|
48
57
|
methodRegister.register(rootProtoManager);
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
}
|
|
52
61
|
exports.HTTPControllerRegister = HTTPControllerRegister;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXJSZWdpc3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkhUVFBDb250cm9sbGVyUmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRzVCLHNDQU1xQjtBQUdyQiw2REFBMEQ7QUFJMUQsTUFBYSxzQkFBc0I7SUFpQmpDLFlBQVksTUFBK0IsRUFBRSxtQkFBK0M7UUFYcEYscUJBQWdCLEdBQW1CLEVBQUUsQ0FBQztRQVk1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxDQUFDO0lBZEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFtQixFQUFFLGNBQWtDLEVBQUUsR0FBZ0I7UUFDckYsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUsscUJBQWMsQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO1lBQ3BDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDbkc7UUFDRCxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFTRCxRQUFRO1FBQ04sWUFBWTtRQUNaLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsZ0JBQWtDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBQzFELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsMkJBQW9CLENBQXVCLENBQUM7WUFDL0UsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNyQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDL0IsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLDJCQUFvQixDQUF1QixDQUFDO1lBQy9GLE1BQU0sY0FBYyxHQUFHLElBQUksdUNBQWtCLENBQzNDLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNyRyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDakM7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRTtZQUMvQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsMkJBQW9CLENBQXVCLENBQUM7WUFDL0YsTUFBTSxjQUFjLEdBQUcsSUFBSSx1Q0FBa0IsQ0FDM0MsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3JHLGNBQWMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7Q0FDRjtBQWhFRCx3REFnRUMifQ==
|
|
@@ -6,11 +6,15 @@ import { EggPrototype } from '@eggjs/tegg-metadata';
|
|
|
6
6
|
import { RootProtoManager } from '../../RootProtoManager';
|
|
7
7
|
export declare class HTTPMethodRegister {
|
|
8
8
|
private readonly router;
|
|
9
|
+
private readonly checkRouters;
|
|
9
10
|
private readonly controllerMeta;
|
|
10
11
|
private readonly methodMeta;
|
|
11
12
|
private readonly proto;
|
|
12
13
|
private readonly eggContainerFactory;
|
|
13
|
-
constructor(proto: EggPrototype, controllerMeta: HTTPControllerMeta, methodMeta: HTTPMethodMeta, router: KoaRouter<any, Context>, eggContainerFactory: typeof EggContainerFactory);
|
|
14
|
+
constructor(proto: EggPrototype, controllerMeta: HTTPControllerMeta, methodMeta: HTTPMethodMeta, router: KoaRouter<any, Context>, checkRouters: Map<string, KoaRouter<any, Context>>, eggContainerFactory: typeof EggContainerFactory);
|
|
14
15
|
private createHandler;
|
|
16
|
+
checkDuplicate(): void;
|
|
17
|
+
private registerToRouter;
|
|
18
|
+
private checkDuplicateInRouter;
|
|
15
19
|
register(rootProtoManager: RootProtoManager): void;
|
|
16
20
|
}
|
|
@@ -11,21 +11,30 @@ const path_to_regexp_1 = __importDefault(require("path-to-regexp"));
|
|
|
11
11
|
const Acl_1 = require("./Acl");
|
|
12
12
|
const errors_1 = require("../../errors");
|
|
13
13
|
const egg_errors_1 = require("egg-errors");
|
|
14
|
+
const router_1 = require("@eggjs/router");
|
|
15
|
+
const noop = () => {
|
|
16
|
+
// ...
|
|
17
|
+
};
|
|
14
18
|
class HTTPMethodRegister {
|
|
15
|
-
constructor(proto, controllerMeta, methodMeta, router, eggContainerFactory) {
|
|
19
|
+
constructor(proto, controllerMeta, methodMeta, router, checkRouters, eggContainerFactory) {
|
|
16
20
|
this.proto = proto;
|
|
17
21
|
this.controllerMeta = controllerMeta;
|
|
18
22
|
this.router = router;
|
|
19
23
|
this.methodMeta = methodMeta;
|
|
24
|
+
this.checkRouters = checkRouters;
|
|
20
25
|
this.eggContainerFactory = eggContainerFactory;
|
|
21
26
|
}
|
|
22
|
-
createHandler(methodMeta) {
|
|
27
|
+
createHandler(methodMeta, host) {
|
|
23
28
|
const argsLength = methodMeta.paramMap.size;
|
|
24
29
|
const hasContext = methodMeta.contextParamIndex !== undefined;
|
|
25
30
|
const contextIndex = methodMeta.contextParamIndex;
|
|
26
31
|
const methodArgsLength = argsLength + (hasContext ? 1 : 0);
|
|
27
32
|
const self = this;
|
|
28
|
-
return async function (ctx) {
|
|
33
|
+
return async function (ctx, next) {
|
|
34
|
+
// if hosts is not empty and host is not matched, not execute
|
|
35
|
+
if (host && host !== ctx.host) {
|
|
36
|
+
return await next();
|
|
37
|
+
}
|
|
29
38
|
// HTTP decorator core implement
|
|
30
39
|
// use controller metadata map http request to function arguments
|
|
31
40
|
const eggObj = self.eggContainerFactory.getEggObject(self.proto, self.proto.name, ctx[egg_module_common_1.TEGG_CONTEXT]);
|
|
@@ -75,30 +84,57 @@ class HTTPMethodRegister {
|
|
|
75
84
|
}
|
|
76
85
|
};
|
|
77
86
|
}
|
|
78
|
-
|
|
79
|
-
// 1. check
|
|
87
|
+
checkDuplicate() {
|
|
88
|
+
// 1. check duplicate with egg controller
|
|
89
|
+
this.checkDuplicateInRouter(this.router);
|
|
90
|
+
// 2. check duplicate with host tegg controller
|
|
91
|
+
let hostRouter;
|
|
92
|
+
const host = this.controllerMeta.getMethodHost(this.methodMeta);
|
|
93
|
+
if (host) {
|
|
94
|
+
hostRouter = this.checkRouters.get(host);
|
|
95
|
+
if (!hostRouter) {
|
|
96
|
+
hostRouter = new router_1.EggRouter({ sensitive: true }, {});
|
|
97
|
+
this.checkRouters.set(host, hostRouter);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (hostRouter) {
|
|
101
|
+
this.checkDuplicateInRouter(hostRouter);
|
|
102
|
+
this.registerToRouter(hostRouter);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
registerToRouter(router) {
|
|
106
|
+
const routerFunc = router[this.methodMeta.method.toLowerCase()];
|
|
80
107
|
const methodRealPath = this.controllerMeta.getMethodRealPath(this.methodMeta);
|
|
81
|
-
const
|
|
108
|
+
const methodName = this.controllerMeta.getMethodName(this.methodMeta);
|
|
109
|
+
Reflect.apply(routerFunc, router, [methodName, methodRealPath, noop]);
|
|
110
|
+
}
|
|
111
|
+
checkDuplicateInRouter(router) {
|
|
112
|
+
const methodRealPath = this.controllerMeta.getMethodRealPath(this.methodMeta);
|
|
113
|
+
const matched = router.match(methodRealPath, this.methodMeta.method);
|
|
82
114
|
const methodName = this.controllerMeta.getMethodName(this.methodMeta);
|
|
83
115
|
if (matched.route) {
|
|
84
116
|
const [layer] = matched.path;
|
|
85
117
|
const err = new errors_1.RouterConflictError(`register http controller ${methodName} failed, ${this.methodMeta.method} ${methodRealPath} is conflict with exists rule ${layer.path}`);
|
|
86
118
|
throw egg_errors_1.FrameworkErrorFormater.format(err);
|
|
87
119
|
}
|
|
88
|
-
|
|
120
|
+
}
|
|
121
|
+
register(rootProtoManager) {
|
|
122
|
+
const methodRealPath = this.controllerMeta.getMethodRealPath(this.methodMeta);
|
|
123
|
+
const methodName = this.controllerMeta.getMethodName(this.methodMeta);
|
|
89
124
|
const routerFunc = this.router[this.methodMeta.method.toLowerCase()];
|
|
90
125
|
const methodMiddlewares = this.controllerMeta.getMethodMiddlewares(this.methodMeta);
|
|
91
126
|
const aclMiddleware = (0, Acl_1.aclMiddlewareFactory)(this.controllerMeta, this.methodMeta);
|
|
92
127
|
if (aclMiddleware) {
|
|
93
128
|
methodMiddlewares.push(aclMiddleware);
|
|
94
129
|
}
|
|
95
|
-
const
|
|
130
|
+
const host = this.controllerMeta.getMethodHost(this.methodMeta);
|
|
131
|
+
const handler = this.createHandler(this.methodMeta, host);
|
|
96
132
|
Reflect.apply(routerFunc, this.router, [methodName, methodRealPath, ...methodMiddlewares, handler]);
|
|
97
133
|
// https://github.com/eggjs/egg-core/blob/0af6178022e7734c4a8b17bb56d592b315207883/lib/egg.js#L279
|
|
98
134
|
const regExp = (0, path_to_regexp_1.default)(methodRealPath, {
|
|
99
135
|
sensitive: true,
|
|
100
136
|
});
|
|
101
|
-
rootProtoManager.registerRootProto(this.methodMeta.method, (ctx) => {
|
|
137
|
+
rootProtoManager.registerRootProto(this.methodMeta.method, host || '', (ctx) => {
|
|
102
138
|
if (regExp.test(ctx.path)) {
|
|
103
139
|
return this.proto;
|
|
104
140
|
}
|
|
@@ -106,4 +142,4 @@ class HTTPMethodRegister {
|
|
|
106
142
|
}
|
|
107
143
|
}
|
|
108
144
|
exports.HTTPMethodRegister = HTTPMethodRegister;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUE1ldGhvZFJlZ2lzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSFRUUE1ldGhvZFJlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUc1QixzQ0FTcUI7QUFHckIsZ0VBQXdEO0FBRXhELG9FQUEwQztBQUMxQywrQkFBNkM7QUFDN0MseUNBQW1EO0FBQ25ELDJDQUFvRDtBQUNwRCwwQ0FBMEM7QUFFMUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0lBQ2hCLE1BQU07QUFDUixDQUFDLENBQUM7QUFFRixNQUFhLGtCQUFrQjtJQVE3QixZQUNFLEtBQW1CLEVBQ25CLGNBQWtDLEVBQ2xDLFVBQTBCLEVBQzFCLE1BQStCLEVBQy9CLFlBQWtELEVBQ2xELG1CQUErQztRQUUvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDakQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxVQUEwQixFQUFFLElBQXdCO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxH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
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"tegg"
|
|
8
8
|
]
|
|
9
9
|
},
|
|
10
|
-
"version": "1.
|
|
10
|
+
"version": "1.5.0",
|
|
11
11
|
"description": "controller decorator for egg",
|
|
12
12
|
"keywords": [
|
|
13
13
|
"egg",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@eggjs/egg-module-common": "^1.0.0",
|
|
50
|
-
"@eggjs/tegg": "^1.3.
|
|
50
|
+
"@eggjs/tegg": "^1.3.5",
|
|
51
51
|
"@eggjs/tegg-common-util": "^1.1.1",
|
|
52
52
|
"@eggjs/tegg-loader": "^1.3.0",
|
|
53
53
|
"@eggjs/tegg-metadata": "^1.3.0",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@eggjs/module-test-util": "^1.3.0",
|
|
62
62
|
"@eggjs/router": "^2.0.0",
|
|
63
63
|
"@eggjs/tegg-config": "^1.1.1",
|
|
64
|
-
"@eggjs/tegg-plugin": "^1.3.
|
|
64
|
+
"@eggjs/tegg-plugin": "^1.3.6",
|
|
65
65
|
"egg": "^2.26.0",
|
|
66
66
|
"egg-mock": "^3.25.1",
|
|
67
67
|
"egg-tracer": "^1.1.0",
|
|
@@ -69,5 +69,6 @@
|
|
|
69
69
|
},
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
72
|
-
}
|
|
72
|
+
},
|
|
73
|
+
"gitHead": "00a48489e8ee5ce1c12d35e48e78bd376391c01d"
|
|
73
74
|
}
|