@midwayjs/core 3.0.0-beta.7 → 3.0.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/README.md +1 -1
- package/dist/baseFramework.d.ts +2 -1
- package/dist/baseFramework.js +13 -10
- package/dist/common/applicationManager.d.ts +11 -0
- package/dist/common/applicationManager.js +70 -0
- package/dist/common/dataListener.d.ts +11 -0
- package/dist/common/dataListener.js +43 -0
- package/dist/common/fileDetector.js +1 -1
- package/dist/common/middlewareManager.d.ts +62 -5
- package/dist/common/middlewareManager.js +141 -6
- package/dist/common/webGenerator.d.ts +3 -14
- package/dist/common/webGenerator.js +23 -31
- package/dist/common/webRouterCollector.js +7 -3
- package/dist/context/container.js +28 -13
- package/dist/context/managedResolverFactory.js +12 -5
- package/dist/context/requestContainer.js +2 -0
- package/dist/definitions/functionDefinition.d.ts +1 -0
- package/dist/definitions/functionDefinition.js +1 -0
- package/dist/definitions/objectCreator.js +9 -8
- package/dist/definitions/objectDefinition.d.ts +1 -0
- package/dist/definitions/objectDefinition.js +1 -0
- package/dist/error/base.d.ts +22 -3
- package/dist/error/base.js +34 -5
- package/dist/error/framework.d.ts +27 -2
- package/dist/error/framework.js +51 -14
- package/dist/error/http.d.ts +146 -41
- package/dist/error/http.js +164 -31
- package/dist/error/index.d.ts +1 -1
- package/dist/error/index.js +4 -1
- package/dist/functional/configuration.d.ts +2 -0
- package/dist/functional/configuration.js +10 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +7 -1
- package/dist/interface.d.ts +51 -29
- package/dist/service/aspectService.js +1 -1
- package/dist/service/configService.d.ts +3 -1
- package/dist/service/configService.js +23 -17
- package/dist/service/decoratorService.js +25 -13
- package/dist/service/environmentService.d.ts +1 -1
- package/dist/service/frameworkService.d.ts +3 -2
- package/dist/service/frameworkService.js +17 -12
- package/dist/service/lifeCycleService.js +5 -5
- package/dist/service/loggerService.d.ts +1 -1
- package/dist/service/middlewareService.d.ts +3 -4
- package/dist/service/middlewareService.js +12 -25
- package/dist/setup.js +13 -5
- package/dist/util/extend.d.ts +2 -0
- package/dist/util/extend.js +55 -0
- package/dist/util/index.d.ts +8 -0
- package/dist/util/index.js +38 -1
- package/dist/util/webRouterParam.js +24 -4
- package/package.json +10 -12
- package/CHANGELOG.md +0 -2186
- package/dist/error/code.d.ts +0 -60
- package/dist/error/code.js +0 -65
package/README.md
CHANGED
package/dist/baseFramework.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export declare abstract class BaseFramework<APP extends IMidwayApplication<CTX>,
|
|
|
72
72
|
* @deprecated
|
|
73
73
|
*/
|
|
74
74
|
protected afterContainerReady(options: Partial<IMidwayBootstrapOptions>): Promise<void>;
|
|
75
|
-
|
|
75
|
+
applyMiddleware<R, N>(lastMiddleware?: CommonMiddleware<CTX, R, N>): Promise<MiddlewareRespond<CTX, R, N>>;
|
|
76
76
|
getLogger(name?: string): ILogger;
|
|
77
77
|
getCoreLogger(): ILogger;
|
|
78
78
|
createLogger(name: string, option?: LoggerOptions): ILogger;
|
|
@@ -80,6 +80,7 @@ export declare abstract class BaseFramework<APP extends IMidwayApplication<CTX>,
|
|
|
80
80
|
getFrameworkName(): string;
|
|
81
81
|
getDefaultContextLoggerClass(): any;
|
|
82
82
|
useMiddleware(Middleware: CommonMiddlewareUnion<CTX, ResOrNext, Next>): void;
|
|
83
|
+
getMiddleware(): ContextMiddlewareManager<CTX, ResOrNext, Next>;
|
|
83
84
|
useFilter(Filter: CommonFilterUnion<CTX, ResOrNext, Next>): void;
|
|
84
85
|
protected createMiddlewareManager(): ContextMiddlewareManager<CTX, ResOrNext, Next>;
|
|
85
86
|
protected createFilterManager(): FilterManager<CTX, ResOrNext, Next>;
|
package/dist/baseFramework.js
CHANGED
|
@@ -21,6 +21,8 @@ const loggerService_1 = require("./service/loggerService");
|
|
|
21
21
|
const middlewareManager_1 = require("./common/middlewareManager");
|
|
22
22
|
const middlewareService_1 = require("./service/middlewareService");
|
|
23
23
|
const filterManager_1 = require("./common/filterManager");
|
|
24
|
+
const util = require("util");
|
|
25
|
+
const debug = util.debuglog('midway:debug');
|
|
24
26
|
class BaseFramework {
|
|
25
27
|
constructor(applicationContext) {
|
|
26
28
|
this.applicationContext = applicationContext;
|
|
@@ -173,13 +175,13 @@ class BaseFramework {
|
|
|
173
175
|
return this.getApplicationContext().getAttr(key);
|
|
174
176
|
},
|
|
175
177
|
useMiddleware: (middleware) => {
|
|
176
|
-
this.
|
|
178
|
+
return this.useMiddleware(middleware);
|
|
177
179
|
},
|
|
178
180
|
getMiddleware: () => {
|
|
179
|
-
return this.
|
|
181
|
+
return this.getMiddleware();
|
|
180
182
|
},
|
|
181
183
|
useFilter: (Filter) => {
|
|
182
|
-
this.
|
|
184
|
+
return this.useFilter(Filter);
|
|
183
185
|
},
|
|
184
186
|
};
|
|
185
187
|
for (const method of whiteList) {
|
|
@@ -204,7 +206,7 @@ class BaseFramework {
|
|
|
204
206
|
* @deprecated
|
|
205
207
|
*/
|
|
206
208
|
async afterContainerReady(options) { }
|
|
207
|
-
async
|
|
209
|
+
async applyMiddleware(lastMiddleware) {
|
|
208
210
|
if (!this.composeMiddleware) {
|
|
209
211
|
this.middlewareManager.insertFirst((async (ctx, next) => {
|
|
210
212
|
let returnResult = undefined;
|
|
@@ -220,14 +222,12 @@ class BaseFramework {
|
|
|
220
222
|
}
|
|
221
223
|
return returnResult.result;
|
|
222
224
|
}));
|
|
223
|
-
|
|
225
|
+
debug(`[core]: Compose middleware = [${this.middlewareManager.getNames()}]`);
|
|
226
|
+
this.composeMiddleware = await this.middlewareService.compose(this.middlewareManager, this.app);
|
|
224
227
|
await this.filterManager.init(this.applicationContext);
|
|
225
228
|
}
|
|
226
229
|
if (lastMiddleware) {
|
|
227
|
-
return await this.middlewareService.compose([
|
|
228
|
-
this.composeMiddleware,
|
|
229
|
-
lastMiddleware,
|
|
230
|
-
]);
|
|
230
|
+
return await this.middlewareService.compose([this.composeMiddleware, lastMiddleware], this.app);
|
|
231
231
|
}
|
|
232
232
|
else {
|
|
233
233
|
return this.composeMiddleware;
|
|
@@ -255,8 +255,11 @@ class BaseFramework {
|
|
|
255
255
|
useMiddleware(Middleware) {
|
|
256
256
|
this.middlewareManager.insertLast(Middleware);
|
|
257
257
|
}
|
|
258
|
+
getMiddleware() {
|
|
259
|
+
return this.middlewareManager;
|
|
260
|
+
}
|
|
258
261
|
useFilter(Filter) {
|
|
259
|
-
this.filterManager.useFilter(Filter);
|
|
262
|
+
return this.filterManager.useFilter(Filter);
|
|
260
263
|
}
|
|
261
264
|
createMiddlewareManager() {
|
|
262
265
|
return new middlewareManager_1.ContextMiddlewareManager();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IMidwayApplication, IMidwayFramework } from '../interface';
|
|
2
|
+
import { FrameworkType } from '@midwayjs/decorator';
|
|
3
|
+
export declare class MidwayApplicationManager {
|
|
4
|
+
private globalFrameworkMap;
|
|
5
|
+
private globalFrameworkTypeMap;
|
|
6
|
+
addFramework(namespace: any, framework: IMidwayFramework<any, any, any>): void;
|
|
7
|
+
getFramework(namespaceOrFrameworkType: string | FrameworkType): IMidwayFramework<any, any, any, unknown, unknown>;
|
|
8
|
+
getApplication(namespaceOrFrameworkType: string | FrameworkType): IMidwayApplication;
|
|
9
|
+
getApplications(namespaces?: Array<string | FrameworkType>): IMidwayApplication[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=applicationManager.d.ts.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MidwayApplicationManager = void 0;
|
|
10
|
+
const decorator_1 = require("@midwayjs/decorator");
|
|
11
|
+
let MidwayApplicationManager = class MidwayApplicationManager {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.globalFrameworkMap = new Map();
|
|
14
|
+
this.globalFrameworkTypeMap = new WeakMap();
|
|
15
|
+
}
|
|
16
|
+
addFramework(namespace, framework) {
|
|
17
|
+
this.globalFrameworkMap.set(namespace, framework);
|
|
18
|
+
this.globalFrameworkTypeMap.set(framework.getFrameworkType(), framework);
|
|
19
|
+
}
|
|
20
|
+
getFramework(namespaceOrFrameworkType) {
|
|
21
|
+
if (typeof namespaceOrFrameworkType === 'string') {
|
|
22
|
+
if (this.globalFrameworkMap.has(namespaceOrFrameworkType)) {
|
|
23
|
+
return this.globalFrameworkMap.get(namespaceOrFrameworkType);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
if (this.globalFrameworkTypeMap.has(namespaceOrFrameworkType)) {
|
|
28
|
+
return this.globalFrameworkTypeMap.get(namespaceOrFrameworkType);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
getApplication(namespaceOrFrameworkType) {
|
|
33
|
+
if (typeof namespaceOrFrameworkType === 'string') {
|
|
34
|
+
if (this.globalFrameworkMap.has(namespaceOrFrameworkType)) {
|
|
35
|
+
return this.globalFrameworkMap
|
|
36
|
+
.get(namespaceOrFrameworkType)
|
|
37
|
+
.getApplication();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
if (this.globalFrameworkTypeMap.has(namespaceOrFrameworkType)) {
|
|
42
|
+
return this.globalFrameworkTypeMap
|
|
43
|
+
.get(namespaceOrFrameworkType)
|
|
44
|
+
.getApplication();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getApplications(namespaces) {
|
|
49
|
+
if (!namespaces) {
|
|
50
|
+
return Array.from(this.globalFrameworkMap.values()).map(framework => {
|
|
51
|
+
return framework.getApplication();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return namespaces
|
|
56
|
+
.map(namespace => {
|
|
57
|
+
return this.getApplication(namespace);
|
|
58
|
+
})
|
|
59
|
+
.filter(app => {
|
|
60
|
+
return !!app;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
MidwayApplicationManager = __decorate([
|
|
66
|
+
(0, decorator_1.Provide)(),
|
|
67
|
+
(0, decorator_1.Scope)(decorator_1.ScopeEnum.Singleton)
|
|
68
|
+
], MidwayApplicationManager);
|
|
69
|
+
exports.MidwayApplicationManager = MidwayApplicationManager;
|
|
70
|
+
//# sourceMappingURL=applicationManager.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare abstract class DataListener<T> {
|
|
2
|
+
private innerData;
|
|
3
|
+
protected init(): Promise<void>;
|
|
4
|
+
abstract initData(): T;
|
|
5
|
+
abstract onData(callback: (data: T) => void): any;
|
|
6
|
+
protected setData(data: T): void;
|
|
7
|
+
getData(): T;
|
|
8
|
+
stop(): Promise<void>;
|
|
9
|
+
protected destroyListener(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=dataListener.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DataListener = void 0;
|
|
13
|
+
const decorator_1 = require("@midwayjs/decorator");
|
|
14
|
+
class DataListener {
|
|
15
|
+
async init() {
|
|
16
|
+
this.innerData = await this.initData();
|
|
17
|
+
await this.onData(this.setData.bind(this));
|
|
18
|
+
}
|
|
19
|
+
setData(data) {
|
|
20
|
+
this.innerData = data;
|
|
21
|
+
}
|
|
22
|
+
getData() {
|
|
23
|
+
return this.innerData;
|
|
24
|
+
}
|
|
25
|
+
async stop() {
|
|
26
|
+
await this.destroyListener();
|
|
27
|
+
}
|
|
28
|
+
async destroyListener() { }
|
|
29
|
+
}
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, decorator_1.Init)(),
|
|
32
|
+
__metadata("design:type", Function),
|
|
33
|
+
__metadata("design:paramtypes", []),
|
|
34
|
+
__metadata("design:returntype", Promise)
|
|
35
|
+
], DataListener.prototype, "init", null);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, decorator_1.Destroy)(),
|
|
38
|
+
__metadata("design:type", Function),
|
|
39
|
+
__metadata("design:paramtypes", []),
|
|
40
|
+
__metadata("design:returntype", Promise)
|
|
41
|
+
], DataListener.prototype, "stop", null);
|
|
42
|
+
exports.DataListener = DataListener;
|
|
43
|
+
//# sourceMappingURL=dataListener.js.map
|
|
@@ -47,7 +47,7 @@ class DirectoryFileDetector extends AbstractFileDetector {
|
|
|
47
47
|
continue;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
else if (
|
|
50
|
+
else if (decorator_1.Types.isRegExp(resolveFilter.pattern)) {
|
|
51
51
|
if (resolveFilter.pattern.test(file)) {
|
|
52
52
|
const exports = resolveFilter.ignoreRequire
|
|
53
53
|
? undefined
|
|
@@ -1,11 +1,68 @@
|
|
|
1
1
|
import { CommonMiddleware, CommonMiddlewareUnion, IMidwayContext } from '../interface';
|
|
2
2
|
export declare class ContextMiddlewareManager<CTX extends IMidwayContext, R, N> extends Array<CommonMiddleware<CTX, R, N>> {
|
|
3
|
+
/**
|
|
4
|
+
* insert a middleware or middleware array to first
|
|
5
|
+
* @param middleware
|
|
6
|
+
*/
|
|
3
7
|
insertFirst(middleware: CommonMiddlewareUnion<CTX, R, N>): void;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* insert a middleware or middleware array to last
|
|
10
|
+
* @param middleware
|
|
11
|
+
*/
|
|
8
12
|
insertLast(middleware: CommonMiddlewareUnion<CTX, R, N>): void;
|
|
9
|
-
|
|
13
|
+
/**
|
|
14
|
+
* insert a middleware or middleware array to after another middleware
|
|
15
|
+
* @param middleware
|
|
16
|
+
* @param idxOrBeforeMiddleware
|
|
17
|
+
*/
|
|
18
|
+
insertBefore(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrBeforeMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
|
|
19
|
+
/**
|
|
20
|
+
* insert a middleware or middleware array to after another middleware
|
|
21
|
+
* @param middleware
|
|
22
|
+
* @param idxOrAfterMiddleware
|
|
23
|
+
*/
|
|
24
|
+
insertAfter(middleware: CommonMiddlewareUnion<CTX, R, N>, idxOrAfterMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
|
|
25
|
+
/**
|
|
26
|
+
* move a middleware after another middleware
|
|
27
|
+
* @param middlewareOrName
|
|
28
|
+
* @param afterMiddleware
|
|
29
|
+
*/
|
|
30
|
+
findAndInsertAfter(middlewareOrName: CommonMiddleware<CTX, R, N> | string, afterMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
|
|
31
|
+
/**
|
|
32
|
+
* move a middleware before another middleware
|
|
33
|
+
* @param middlewareOrName
|
|
34
|
+
* @param beforeMiddleware
|
|
35
|
+
*/
|
|
36
|
+
findAndInsertBefore(middlewareOrName: CommonMiddleware<CTX, R, N> | string, beforeMiddleware: CommonMiddleware<CTX, R, N> | string | number): void;
|
|
37
|
+
/**
|
|
38
|
+
* find middleware and move to first
|
|
39
|
+
* @param middlewareOrName
|
|
40
|
+
*/
|
|
41
|
+
findAndInsertFirst(middlewareOrName: CommonMiddleware<CTX, R, N> | string): void;
|
|
42
|
+
/**
|
|
43
|
+
* find middleware and move to last
|
|
44
|
+
* @param middlewareOrName
|
|
45
|
+
*/
|
|
46
|
+
findAndInsertLast(middlewareOrName: CommonMiddleware<CTX, R, N> | string): void;
|
|
47
|
+
/**
|
|
48
|
+
* find a middleware and return index
|
|
49
|
+
* @param middlewareOrName
|
|
50
|
+
*/
|
|
51
|
+
findItemIndex(middlewareOrName: CommonMiddleware<CTX, R, N> | string | number): number;
|
|
52
|
+
findItem(middlewareOrName: CommonMiddleware<CTX, R, N> | string | number): CommonMiddleware<CTX, R, N>;
|
|
53
|
+
/**
|
|
54
|
+
* get name from middleware
|
|
55
|
+
* @param middleware
|
|
56
|
+
*/
|
|
57
|
+
getMiddlewareName(middleware: CommonMiddleware<CTX, R, N>): string;
|
|
58
|
+
/**
|
|
59
|
+
* remove a middleware
|
|
60
|
+
* @param middlewareOrNameOrIdx
|
|
61
|
+
*/
|
|
62
|
+
remove(middlewareOrNameOrIdx: CommonMiddleware<CTX, R, N> | string | number): CommonMiddleware<CTX, R, N>;
|
|
63
|
+
/**
|
|
64
|
+
* get middleware name list
|
|
65
|
+
*/
|
|
66
|
+
getNames(): string[];
|
|
10
67
|
}
|
|
11
68
|
//# sourceMappingURL=middlewareManager.d.ts.map
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ContextMiddlewareManager = void 0;
|
|
4
4
|
class ContextMiddlewareManager extends Array {
|
|
5
|
+
/**
|
|
6
|
+
* insert a middleware or middleware array to first
|
|
7
|
+
* @param middleware
|
|
8
|
+
*/
|
|
5
9
|
insertFirst(middleware) {
|
|
6
10
|
if (Array.isArray(middleware)) {
|
|
7
11
|
this.unshift(...middleware);
|
|
@@ -10,6 +14,23 @@ class ContextMiddlewareManager extends Array {
|
|
|
10
14
|
this.unshift(middleware);
|
|
11
15
|
}
|
|
12
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* insert a middleware or middleware array to last
|
|
19
|
+
* @param middleware
|
|
20
|
+
*/
|
|
21
|
+
insertLast(middleware) {
|
|
22
|
+
if (Array.isArray(middleware)) {
|
|
23
|
+
this.push(...middleware);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.push(middleware);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* insert a middleware or middleware array to after another middleware
|
|
31
|
+
* @param middleware
|
|
32
|
+
* @param idxOrBeforeMiddleware
|
|
33
|
+
*/
|
|
13
34
|
insertBefore(middleware, idxOrBeforeMiddleware) {
|
|
14
35
|
if (typeof idxOrBeforeMiddleware !== 'number') {
|
|
15
36
|
idxOrBeforeMiddleware = this.findItemIndex(idxOrBeforeMiddleware);
|
|
@@ -21,6 +42,11 @@ class ContextMiddlewareManager extends Array {
|
|
|
21
42
|
this.splice(idxOrBeforeMiddleware, 0, middleware);
|
|
22
43
|
}
|
|
23
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* insert a middleware or middleware array to after another middleware
|
|
47
|
+
* @param middleware
|
|
48
|
+
* @param idxOrAfterMiddleware
|
|
49
|
+
*/
|
|
24
50
|
insertAfter(middleware, idxOrAfterMiddleware) {
|
|
25
51
|
if (typeof idxOrAfterMiddleware !== 'number') {
|
|
26
52
|
idxOrAfterMiddleware = this.findItemIndex(idxOrAfterMiddleware);
|
|
@@ -32,16 +58,125 @@ class ContextMiddlewareManager extends Array {
|
|
|
32
58
|
this.splice(idxOrAfterMiddleware + 1, 0, middleware);
|
|
33
59
|
}
|
|
34
60
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
61
|
+
/**
|
|
62
|
+
* move a middleware after another middleware
|
|
63
|
+
* @param middlewareOrName
|
|
64
|
+
* @param afterMiddleware
|
|
65
|
+
*/
|
|
66
|
+
findAndInsertAfter(middlewareOrName, afterMiddleware) {
|
|
67
|
+
middlewareOrName = this.findItem(middlewareOrName);
|
|
68
|
+
afterMiddleware = this.findItem(afterMiddleware);
|
|
69
|
+
if (!middlewareOrName ||
|
|
70
|
+
!afterMiddleware ||
|
|
71
|
+
middlewareOrName === afterMiddleware) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (afterMiddleware) {
|
|
75
|
+
const mw = this.remove(middlewareOrName);
|
|
76
|
+
if (mw) {
|
|
77
|
+
this.insertAfter(mw, afterMiddleware);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* move a middleware before another middleware
|
|
83
|
+
* @param middlewareOrName
|
|
84
|
+
* @param beforeMiddleware
|
|
85
|
+
*/
|
|
86
|
+
findAndInsertBefore(middlewareOrName, beforeMiddleware) {
|
|
87
|
+
middlewareOrName = this.findItem(middlewareOrName);
|
|
88
|
+
beforeMiddleware = this.findItem(beforeMiddleware);
|
|
89
|
+
if (!middlewareOrName ||
|
|
90
|
+
!beforeMiddleware ||
|
|
91
|
+
middlewareOrName === beforeMiddleware) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (beforeMiddleware) {
|
|
95
|
+
const mw = this.remove(middlewareOrName);
|
|
96
|
+
if (mw) {
|
|
97
|
+
this.insertBefore(mw, beforeMiddleware);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* find middleware and move to first
|
|
103
|
+
* @param middlewareOrName
|
|
104
|
+
*/
|
|
105
|
+
findAndInsertFirst(middlewareOrName) {
|
|
106
|
+
const mw = this.remove(middlewareOrName);
|
|
107
|
+
if (mw) {
|
|
108
|
+
this.insertFirst(mw);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* find middleware and move to last
|
|
113
|
+
* @param middlewareOrName
|
|
114
|
+
*/
|
|
115
|
+
findAndInsertLast(middlewareOrName) {
|
|
116
|
+
const mw = this.remove(middlewareOrName);
|
|
117
|
+
if (mw) {
|
|
118
|
+
this.insertLast(mw);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* find a middleware and return index
|
|
123
|
+
* @param middlewareOrName
|
|
124
|
+
*/
|
|
125
|
+
findItemIndex(middlewareOrName) {
|
|
126
|
+
if (typeof middlewareOrName === 'number') {
|
|
127
|
+
return middlewareOrName;
|
|
128
|
+
}
|
|
129
|
+
else if (typeof middlewareOrName === 'string') {
|
|
130
|
+
return this.findIndex(item => this.getMiddlewareName(item) === middlewareOrName);
|
|
38
131
|
}
|
|
39
132
|
else {
|
|
40
|
-
this.
|
|
133
|
+
return this.findIndex(item => item === middlewareOrName);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
findItem(middlewareOrName) {
|
|
137
|
+
if (typeof middlewareOrName === 'number') {
|
|
138
|
+
if (middlewareOrName >= 0 && middlewareOrName <= this.length - 1) {
|
|
139
|
+
return this[middlewareOrName];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else if (typeof middlewareOrName === 'string') {
|
|
143
|
+
return this.find(item => this.getMiddlewareName(item) === middlewareOrName);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
return middlewareOrName;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* get name from middleware
|
|
151
|
+
* @param middleware
|
|
152
|
+
*/
|
|
153
|
+
getMiddlewareName(middleware) {
|
|
154
|
+
var _a, _b;
|
|
155
|
+
return ((_b = (_a = (middleware.getName && middleware.getName())) !== null && _a !== void 0 ? _a : middleware._name) !== null && _b !== void 0 ? _b : middleware.name);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* remove a middleware
|
|
159
|
+
* @param middlewareOrNameOrIdx
|
|
160
|
+
*/
|
|
161
|
+
remove(middlewareOrNameOrIdx) {
|
|
162
|
+
if (typeof middlewareOrNameOrIdx === 'number' &&
|
|
163
|
+
middlewareOrNameOrIdx !== -1) {
|
|
164
|
+
return this.splice(middlewareOrNameOrIdx, 1)[0];
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const idx = this.findItemIndex(middlewareOrNameOrIdx);
|
|
168
|
+
if (idx !== -1) {
|
|
169
|
+
return this.splice(idx, 1)[0];
|
|
170
|
+
}
|
|
41
171
|
}
|
|
42
172
|
}
|
|
43
|
-
|
|
44
|
-
|
|
173
|
+
/**
|
|
174
|
+
* get middleware name list
|
|
175
|
+
*/
|
|
176
|
+
getNames() {
|
|
177
|
+
return this.map(item => {
|
|
178
|
+
return this.getMiddlewareName(item);
|
|
179
|
+
});
|
|
45
180
|
}
|
|
46
181
|
}
|
|
47
182
|
exports.ContextMiddlewareManager = ContextMiddlewareManager;
|
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
* wrap controller string to middleware function
|
|
3
|
-
* @param controllerMapping like FooController.index
|
|
4
|
-
* @param routeArgsInfo
|
|
5
|
-
* @param routerResponseData
|
|
6
|
-
*/
|
|
7
|
-
import { MidwayFrameworkType } from '@midwayjs/decorator';
|
|
8
|
-
import { IMidwayContainer, RouterInfo } from '../index';
|
|
9
|
-
import { ILogger } from '@midwayjs/logger';
|
|
1
|
+
import { RouterInfo, IMidwayApplication } from '../index';
|
|
10
2
|
export declare abstract class WebControllerGenerator<Router extends {
|
|
11
3
|
use: (...args: any[]) => void;
|
|
12
4
|
}> {
|
|
13
|
-
readonly
|
|
14
|
-
|
|
15
|
-
readonly logger?: ILogger;
|
|
16
|
-
protected constructor(applicationContext: IMidwayContainer, frameworkType: MidwayFrameworkType, logger?: ILogger);
|
|
5
|
+
readonly app: IMidwayApplication;
|
|
6
|
+
protected constructor(app: IMidwayApplication);
|
|
17
7
|
/**
|
|
18
8
|
* wrap controller string to middleware function
|
|
19
9
|
* @param routeInfo
|
|
@@ -22,6 +12,5 @@ export declare abstract class WebControllerGenerator<Router extends {
|
|
|
22
12
|
loadMidwayController(globalPrefix: string, routerHandler?: (newRouter: Router) => void): Promise<void>;
|
|
23
13
|
abstract createRouter(routerOptions: any): Router;
|
|
24
14
|
abstract generateController(routeInfo: RouterInfo): any;
|
|
25
|
-
protected handlerWebMiddleware(middlewares: any[], handlerCallback: (middlewareImpl: any) => void): Promise<void>;
|
|
26
15
|
}
|
|
27
16
|
//# sourceMappingURL=webGenerator.d.ts.map
|
|
@@ -9,11 +9,11 @@ exports.WebControllerGenerator = void 0;
|
|
|
9
9
|
*/
|
|
10
10
|
const decorator_1 = require("@midwayjs/decorator");
|
|
11
11
|
const index_1 = require("../index");
|
|
12
|
+
const util = require("util");
|
|
13
|
+
const debug = util.debuglog('midway:debug');
|
|
12
14
|
class WebControllerGenerator {
|
|
13
|
-
constructor(
|
|
14
|
-
this.
|
|
15
|
-
this.frameworkType = frameworkType;
|
|
16
|
-
this.logger = logger;
|
|
15
|
+
constructor(app) {
|
|
16
|
+
this.app = app;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* wrap controller string to middleware function
|
|
@@ -63,29 +63,36 @@ class WebControllerGenerator {
|
|
|
63
63
|
});
|
|
64
64
|
const routerTable = await collector.getRouterTable();
|
|
65
65
|
const routerList = await collector.getRoutePriorityList();
|
|
66
|
+
const applicationContext = this.app.getApplicationContext();
|
|
67
|
+
const logger = this.app.getCoreLogger();
|
|
68
|
+
const middlewareService = applicationContext.get(index_1.MidwayMiddlewareService);
|
|
66
69
|
for (const routerInfo of routerList) {
|
|
67
70
|
// bind controller first
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
applicationContext.bindClass(routerInfo.routerModule);
|
|
72
|
+
logger.debug(`Load Controller "${routerInfo.controllerId}", prefix=${routerInfo.prefix}`);
|
|
73
|
+
debug(`[core]: Load Controller "${routerInfo.controllerId}", prefix=${routerInfo.prefix}`);
|
|
70
74
|
// new router
|
|
71
75
|
const newRouter = this.createRouter({
|
|
72
76
|
prefix: routerInfo.prefix,
|
|
73
77
|
...routerInfo.routerOptions,
|
|
74
78
|
});
|
|
75
79
|
// add router middleware
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
routerInfo.middleware = (_a = routerInfo.middleware) !== null && _a !== void 0 ? _a : [];
|
|
81
|
+
if (routerInfo.middleware.length) {
|
|
82
|
+
const routerMiddlewareFn = await middlewareService.compose(routerInfo.middleware, this.app);
|
|
83
|
+
newRouter.use(routerMiddlewareFn);
|
|
84
|
+
}
|
|
79
85
|
// add route
|
|
80
86
|
const routes = routerTable.get(routerInfo.prefix);
|
|
81
87
|
for (const routeInfo of routes) {
|
|
82
88
|
// get middleware
|
|
83
|
-
const middlewares2 = routeInfo.middleware;
|
|
84
89
|
const methodMiddlewares = [];
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
routeInfo.middleware = (_b = routeInfo.middleware) !== null && _b !== void 0 ? _b : [];
|
|
91
|
+
if (routeInfo.middleware.length) {
|
|
92
|
+
const routeMiddlewareFn = await middlewareService.compose(routeInfo.middleware, this.app);
|
|
93
|
+
methodMiddlewares.push(routeMiddlewareFn);
|
|
94
|
+
}
|
|
95
|
+
if (this.app.getFrameworkType() === decorator_1.MidwayFrameworkType.WEB_KOA) {
|
|
89
96
|
if (typeof routeInfo.url === 'string' && /\*$/.test(routeInfo.url)) {
|
|
90
97
|
routeInfo.url = routeInfo.url.replace('*', '(.*)');
|
|
91
98
|
}
|
|
@@ -96,7 +103,8 @@ class WebControllerGenerator {
|
|
|
96
103
|
...methodMiddlewares,
|
|
97
104
|
this.generateController(routeInfo),
|
|
98
105
|
];
|
|
99
|
-
|
|
106
|
+
logger.debug(`Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
|
|
107
|
+
debug(`[core]: Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
|
|
100
108
|
// apply controller from request context
|
|
101
109
|
// eslint-disable-next-line prefer-spread
|
|
102
110
|
newRouter[routeInfo.requestMethod].apply(newRouter, routerArgs);
|
|
@@ -104,22 +112,6 @@ class WebControllerGenerator {
|
|
|
104
112
|
routerHandler && routerHandler(newRouter);
|
|
105
113
|
}
|
|
106
114
|
}
|
|
107
|
-
async handlerWebMiddleware(middlewares, handlerCallback) {
|
|
108
|
-
if (middlewares && middlewares.length) {
|
|
109
|
-
for (const middleware of middlewares) {
|
|
110
|
-
if (typeof middleware === 'function') {
|
|
111
|
-
// web function middleware
|
|
112
|
-
handlerCallback(middleware);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
const middlewareImpl = await this.applicationContext.getAsync(middleware);
|
|
116
|
-
if (middlewareImpl && typeof middlewareImpl.resolve === 'function') {
|
|
117
|
-
handlerCallback(middlewareImpl.resolve());
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
115
|
}
|
|
124
116
|
exports.WebControllerGenerator = WebControllerGenerator;
|
|
125
117
|
//# sourceMappingURL=webGenerator.js.map
|
|
@@ -6,6 +6,7 @@ const util_1 = require("../util");
|
|
|
6
6
|
const container_1 = require("../context/container");
|
|
7
7
|
const fileDetector_1 = require("./fileDetector");
|
|
8
8
|
const util = require("util");
|
|
9
|
+
const error_1 = require("../error");
|
|
9
10
|
const debug = util.debuglog('midway:debug');
|
|
10
11
|
class WebRouterCollector {
|
|
11
12
|
constructor(baseDir = '', options = {}) {
|
|
@@ -57,7 +58,7 @@ class WebRouterCollector {
|
|
|
57
58
|
collectRoute(module, functionMeta = false) {
|
|
58
59
|
var _a;
|
|
59
60
|
const controllerId = (0, decorator_1.getProviderName)(module);
|
|
60
|
-
debug(`[core
|
|
61
|
+
debug(`[core]: Found Controller ${controllerId}.`);
|
|
61
62
|
const id = (0, decorator_1.getProviderUUId)(module);
|
|
62
63
|
const controllerOption = (0, decorator_1.getClassMetadata)(decorator_1.CONTROLLER_KEY, module);
|
|
63
64
|
let priority;
|
|
@@ -70,6 +71,9 @@ class WebRouterCollector {
|
|
|
70
71
|
if (controllerIgnoreGlobalPrefix) {
|
|
71
72
|
prefix = ignorePrefix;
|
|
72
73
|
}
|
|
74
|
+
if (/\*/.test(prefix)) {
|
|
75
|
+
throw new error_1.MidwayCommonError(`Router prefix ${prefix} can't set string with *`);
|
|
76
|
+
}
|
|
73
77
|
// set prefix
|
|
74
78
|
if (!this.routes.has(prefix)) {
|
|
75
79
|
this.routes.set(prefix, []);
|
|
@@ -228,7 +232,7 @@ class WebRouterCollector {
|
|
|
228
232
|
return urlMatchList
|
|
229
233
|
.map(item => {
|
|
230
234
|
const urlString = item.url.toString();
|
|
231
|
-
const weightArr =
|
|
235
|
+
const weightArr = decorator_1.Types.isRegExp(item.url)
|
|
232
236
|
? urlString.split('\\/')
|
|
233
237
|
: urlString.split('/');
|
|
234
238
|
let weight = 0;
|
|
@@ -315,7 +319,7 @@ class WebRouterCollector {
|
|
|
315
319
|
item.requestMethod === routerInfo.requestMethod);
|
|
316
320
|
});
|
|
317
321
|
if (matched && matched.length) {
|
|
318
|
-
throw new
|
|
322
|
+
throw new error_1.MidwayDuplicateRouteError(`${routerInfo.requestMethod} ${routerInfo.url}`, `${matched[0].handlerName}`, `${routerInfo.handlerName}`);
|
|
319
323
|
}
|
|
320
324
|
prefixList.push(routerInfo);
|
|
321
325
|
}
|