@midwayjs/core 3.0.0-beta.9 → 3.0.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/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.js +2 -2
- package/dist/common/webGenerator.d.ts +3 -14
- package/dist/common/webGenerator.js +21 -33
- package/dist/common/webRouterCollector.js +3 -3
- package/dist/context/container.js +21 -11
- 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 +3 -0
- package/dist/index.js +5 -1
- package/dist/interface.d.ts +49 -27
- 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 +11 -5
- 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 +7 -11
- package/dist/setup.js +7 -4
- package/dist/util/extend.d.ts +2 -0
- package/dist/util/extend.js +55 -0
- package/dist/util/webRouterParam.js +24 -4
- package/package.json +10 -12
- package/CHANGELOG.md +0 -2208
- package/dist/error/code.d.ts +0 -60
- package/dist/error/code.js +0 -65
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
|
|
@@ -151,8 +151,8 @@ class ContextMiddlewareManager extends Array {
|
|
|
151
151
|
* @param middleware
|
|
152
152
|
*/
|
|
153
153
|
getMiddlewareName(middleware) {
|
|
154
|
-
var _a;
|
|
155
|
-
return (_a = 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
156
|
}
|
|
157
157
|
/**
|
|
158
158
|
* remove a middleware
|
|
@@ -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
|
|
@@ -12,10 +12,8 @@ const index_1 = require("../index");
|
|
|
12
12
|
const util = require("util");
|
|
13
13
|
const debug = util.debuglog('midway:debug');
|
|
14
14
|
class WebControllerGenerator {
|
|
15
|
-
constructor(
|
|
16
|
-
this.
|
|
17
|
-
this.frameworkType = frameworkType;
|
|
18
|
-
this.logger = logger;
|
|
15
|
+
constructor(app) {
|
|
16
|
+
this.app = app;
|
|
19
17
|
}
|
|
20
18
|
/**
|
|
21
19
|
* wrap controller string to middleware function
|
|
@@ -65,30 +63,36 @@ class WebControllerGenerator {
|
|
|
65
63
|
});
|
|
66
64
|
const routerTable = await collector.getRouterTable();
|
|
67
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);
|
|
68
69
|
for (const routerInfo of routerList) {
|
|
69
70
|
// bind controller first
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
debug(`[core
|
|
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}`);
|
|
73
74
|
// new router
|
|
74
75
|
const newRouter = this.createRouter({
|
|
75
76
|
prefix: routerInfo.prefix,
|
|
76
77
|
...routerInfo.routerOptions,
|
|
77
78
|
});
|
|
78
79
|
// add router middleware
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
+
}
|
|
82
85
|
// add route
|
|
83
86
|
const routes = routerTable.get(routerInfo.prefix);
|
|
84
87
|
for (const routeInfo of routes) {
|
|
85
88
|
// get middleware
|
|
86
|
-
const middlewares2 = routeInfo.middleware;
|
|
87
89
|
const methodMiddlewares = [];
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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) {
|
|
92
96
|
if (typeof routeInfo.url === 'string' && /\*$/.test(routeInfo.url)) {
|
|
93
97
|
routeInfo.url = routeInfo.url.replace('*', '(.*)');
|
|
94
98
|
}
|
|
@@ -99,8 +103,8 @@ class WebControllerGenerator {
|
|
|
99
103
|
...methodMiddlewares,
|
|
100
104
|
this.generateController(routeInfo),
|
|
101
105
|
];
|
|
102
|
-
|
|
103
|
-
debug(`[core
|
|
106
|
+
logger.debug(`Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
|
|
107
|
+
debug(`[core]: Load Router "${routeInfo.requestMethod.toUpperCase()} ${routeInfo.url}"`);
|
|
104
108
|
// apply controller from request context
|
|
105
109
|
// eslint-disable-next-line prefer-spread
|
|
106
110
|
newRouter[routeInfo.requestMethod].apply(newRouter, routerArgs);
|
|
@@ -108,22 +112,6 @@ class WebControllerGenerator {
|
|
|
108
112
|
routerHandler && routerHandler(newRouter);
|
|
109
113
|
}
|
|
110
114
|
}
|
|
111
|
-
async handlerWebMiddleware(middlewares, handlerCallback) {
|
|
112
|
-
if (middlewares && middlewares.length) {
|
|
113
|
-
for (const middleware of middlewares) {
|
|
114
|
-
if (typeof middleware === 'function') {
|
|
115
|
-
// web function middleware
|
|
116
|
-
handlerCallback(middleware);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
const middlewareImpl = await this.applicationContext.getAsync(middleware);
|
|
120
|
-
if (middlewareImpl && typeof middlewareImpl.resolve === 'function') {
|
|
121
|
-
handlerCallback(middlewareImpl.resolve());
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
115
|
}
|
|
128
116
|
exports.WebControllerGenerator = WebControllerGenerator;
|
|
129
117
|
//# sourceMappingURL=webGenerator.js.map
|
|
@@ -58,7 +58,7 @@ class WebRouterCollector {
|
|
|
58
58
|
collectRoute(module, functionMeta = false) {
|
|
59
59
|
var _a;
|
|
60
60
|
const controllerId = (0, decorator_1.getProviderName)(module);
|
|
61
|
-
debug(`[core
|
|
61
|
+
debug(`[core]: Found Controller ${controllerId}.`);
|
|
62
62
|
const id = (0, decorator_1.getProviderUUId)(module);
|
|
63
63
|
const controllerOption = (0, decorator_1.getClassMetadata)(decorator_1.CONTROLLER_KEY, module);
|
|
64
64
|
let priority;
|
|
@@ -232,7 +232,7 @@ class WebRouterCollector {
|
|
|
232
232
|
return urlMatchList
|
|
233
233
|
.map(item => {
|
|
234
234
|
const urlString = item.url.toString();
|
|
235
|
-
const weightArr =
|
|
235
|
+
const weightArr = decorator_1.Types.isRegExp(item.url)
|
|
236
236
|
? urlString.split('\\/')
|
|
237
237
|
: urlString.split('/');
|
|
238
238
|
let weight = 0;
|
|
@@ -319,7 +319,7 @@ class WebRouterCollector {
|
|
|
319
319
|
item.requestMethod === routerInfo.requestMethod);
|
|
320
320
|
});
|
|
321
321
|
if (matched && matched.length) {
|
|
322
|
-
throw new
|
|
322
|
+
throw new error_1.MidwayDuplicateRouteError(`${routerInfo.requestMethod} ${routerInfo.url}`, `${matched[0].handlerName}`, `${routerInfo.handlerName}`);
|
|
323
323
|
}
|
|
324
324
|
prefixList.push(routerInfo);
|
|
325
325
|
}
|
|
@@ -144,16 +144,16 @@ class ContainerConfiguration {
|
|
|
144
144
|
}
|
|
145
145
|
getConfigurationExport(exports) {
|
|
146
146
|
const mods = [];
|
|
147
|
-
if (
|
|
148
|
-
|
|
147
|
+
if (decorator_1.Types.isClass(exports) ||
|
|
148
|
+
decorator_1.Types.isFunction(exports) ||
|
|
149
149
|
exports instanceof configuration_1.FunctionalConfiguration) {
|
|
150
150
|
mods.push(exports);
|
|
151
151
|
}
|
|
152
152
|
else {
|
|
153
153
|
for (const m in exports) {
|
|
154
154
|
const module = exports[m];
|
|
155
|
-
if (
|
|
156
|
-
|
|
155
|
+
if (decorator_1.Types.isClass(module) ||
|
|
156
|
+
decorator_1.Types.isFunction(module) ||
|
|
157
157
|
module instanceof configuration_1.FunctionalConfiguration) {
|
|
158
158
|
mods.push(module);
|
|
159
159
|
}
|
|
@@ -240,13 +240,13 @@ class MidwayContainer {
|
|
|
240
240
|
(_a = this.fileDetector) === null || _a === void 0 ? void 0 : _a.run(this);
|
|
241
241
|
}
|
|
242
242
|
bindClass(exports, options) {
|
|
243
|
-
if (
|
|
243
|
+
if (decorator_1.Types.isClass(exports) || decorator_1.Types.isFunction(exports)) {
|
|
244
244
|
this.bindModule(exports, options);
|
|
245
245
|
}
|
|
246
246
|
else {
|
|
247
247
|
for (const m in exports) {
|
|
248
248
|
const module = exports[m];
|
|
249
|
-
if (
|
|
249
|
+
if (decorator_1.Types.isClass(module) || decorator_1.Types.isFunction(module)) {
|
|
250
250
|
this.bindModule(module, options);
|
|
251
251
|
}
|
|
252
252
|
}
|
|
@@ -254,7 +254,7 @@ class MidwayContainer {
|
|
|
254
254
|
}
|
|
255
255
|
bind(identifier, target, options) {
|
|
256
256
|
var _a;
|
|
257
|
-
if (
|
|
257
|
+
if (decorator_1.Types.isClass(identifier) || decorator_1.Types.isFunction(identifier)) {
|
|
258
258
|
return this.bindModule(identifier, target);
|
|
259
259
|
}
|
|
260
260
|
if (this.registry.hasDefinition(identifier)) {
|
|
@@ -262,13 +262,13 @@ class MidwayContainer {
|
|
|
262
262
|
return;
|
|
263
263
|
}
|
|
264
264
|
let definition;
|
|
265
|
-
if (
|
|
265
|
+
if (decorator_1.Types.isClass(target)) {
|
|
266
266
|
definition = new objectDefinition_1.ObjectDefinition();
|
|
267
267
|
definition.name = (0, decorator_1.getProviderName)(target);
|
|
268
268
|
}
|
|
269
269
|
else {
|
|
270
270
|
definition = new functionDefinition_1.FunctionDefinition();
|
|
271
|
-
if (!
|
|
271
|
+
if (!decorator_1.Types.isAsyncFunction(target)) {
|
|
272
272
|
definition.asynchronous = false;
|
|
273
273
|
}
|
|
274
274
|
definition.name = definition.id;
|
|
@@ -315,6 +315,10 @@ class MidwayContainer {
|
|
|
315
315
|
debugBind(` register scope = ${objDefOptions.scope}`);
|
|
316
316
|
definition.scope = objDefOptions.scope;
|
|
317
317
|
}
|
|
318
|
+
if (objDefOptions.allowDowngrade) {
|
|
319
|
+
debugBind(` register allowDowngrade = ${objDefOptions.allowDowngrade}`);
|
|
320
|
+
definition.allowDowngrade = objDefOptions.allowDowngrade;
|
|
321
|
+
}
|
|
318
322
|
this.objectCreateEventTarget.emit(interface_1.ObjectLifeCycleEvent.BEFORE_BIND, target, {
|
|
319
323
|
context: this,
|
|
320
324
|
definition,
|
|
@@ -327,7 +331,7 @@ class MidwayContainer {
|
|
|
327
331
|
}
|
|
328
332
|
}
|
|
329
333
|
bindModule(module, options) {
|
|
330
|
-
if (
|
|
334
|
+
if (decorator_1.Types.isClass(module)) {
|
|
331
335
|
const providerId = (0, decorator_1.getProviderUUId)(module);
|
|
332
336
|
if (providerId) {
|
|
333
337
|
this.identifierMapping.saveClassRelation(module, options === null || options === void 0 ? void 0 : options.namespace);
|
|
@@ -343,7 +347,7 @@ class MidwayContainer {
|
|
|
343
347
|
if (!info.scope) {
|
|
344
348
|
info.scope = decorator_1.ScopeEnum.Request;
|
|
345
349
|
}
|
|
346
|
-
const uuid =
|
|
350
|
+
const uuid = decorator_1.Utils.generateRandomId();
|
|
347
351
|
this.identifierMapping.saveFunctionRelation(info.id, uuid);
|
|
348
352
|
this.bind(uuid, module, {
|
|
349
353
|
scope: info.scope,
|
|
@@ -384,7 +388,10 @@ class MidwayContainer {
|
|
|
384
388
|
}
|
|
385
389
|
get(identifier, args, objectContext) {
|
|
386
390
|
var _a;
|
|
391
|
+
args = args !== null && args !== void 0 ? args : [];
|
|
392
|
+
objectContext = objectContext !== null && objectContext !== void 0 ? objectContext : { originName: identifier };
|
|
387
393
|
if (typeof identifier !== 'string') {
|
|
394
|
+
objectContext.originName = identifier.name;
|
|
388
395
|
identifier = this.getIdentifier(identifier);
|
|
389
396
|
}
|
|
390
397
|
if (this.registry.hasObject(identifier)) {
|
|
@@ -401,7 +408,10 @@ class MidwayContainer {
|
|
|
401
408
|
}
|
|
402
409
|
async getAsync(identifier, args, objectContext) {
|
|
403
410
|
var _a;
|
|
411
|
+
args = args !== null && args !== void 0 ? args : [];
|
|
412
|
+
objectContext = objectContext !== null && objectContext !== void 0 ? objectContext : { originName: identifier };
|
|
404
413
|
if (typeof identifier !== 'string') {
|
|
414
|
+
objectContext.originName = identifier.name;
|
|
405
415
|
identifier = this.getIdentifier(identifier);
|
|
406
416
|
}
|
|
407
417
|
if (this.registry.hasObject(identifier)) {
|
|
@@ -56,14 +56,14 @@ class ManagedResolverFactory {
|
|
|
56
56
|
resolveManaged(managed, originPropertyName) {
|
|
57
57
|
const resolver = this.resolvers[managed.type];
|
|
58
58
|
if (!resolver || resolver.type !== managed.type) {
|
|
59
|
-
throw new
|
|
59
|
+
throw new error_1.MidwayResolverMissingError(managed.type);
|
|
60
60
|
}
|
|
61
61
|
return resolver.resolve(managed, originPropertyName);
|
|
62
62
|
}
|
|
63
63
|
async resolveManagedAsync(managed, originPropertyName) {
|
|
64
64
|
const resolver = this.resolvers[managed.type];
|
|
65
65
|
if (!resolver || resolver.type !== managed.type) {
|
|
66
|
-
throw new
|
|
66
|
+
throw new error_1.MidwayResolverMissingError(managed.type);
|
|
67
67
|
}
|
|
68
68
|
return resolver.resolveAsync(managed, originPropertyName);
|
|
69
69
|
}
|
|
@@ -89,7 +89,7 @@ class ManagedResolverFactory {
|
|
|
89
89
|
this.context.get(dep, args);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
debugLog(`[core
|
|
92
|
+
debugLog(`[core]: Create id = "${definition.name}" ${definition.id}.`);
|
|
93
93
|
const Clzz = definition.creator.load();
|
|
94
94
|
let constructorArgs = [];
|
|
95
95
|
if (args && Array.isArray(args) && args.length > 0) {
|
|
@@ -174,7 +174,7 @@ class ManagedResolverFactory {
|
|
|
174
174
|
await this.context.getAsync(dep, args);
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
|
-
debugLog(`[core
|
|
177
|
+
debugLog(`[core]: Create id = "${definition.name}" ${definition.id}.`);
|
|
178
178
|
const Clzz = definition.creator.load();
|
|
179
179
|
let constructorArgs = [];
|
|
180
180
|
if (args && Array.isArray(args) && args.length > 0) {
|
|
@@ -187,7 +187,7 @@ class ManagedResolverFactory {
|
|
|
187
187
|
inst = await definition.creator.doConstructAsync(Clzz, constructorArgs, this.context);
|
|
188
188
|
if (!inst) {
|
|
189
189
|
this.removeCreateStatus(definition, false);
|
|
190
|
-
throw new
|
|
190
|
+
throw new error_1.MidwayCommonError(`${definition.id} construct return undefined`);
|
|
191
191
|
}
|
|
192
192
|
// binding ctx object
|
|
193
193
|
if (definition.isRequestScope() &&
|
|
@@ -202,6 +202,13 @@ class ManagedResolverFactory {
|
|
|
202
202
|
if (definition.properties) {
|
|
203
203
|
const keys = definition.properties.propertyKeys();
|
|
204
204
|
for (const key of keys) {
|
|
205
|
+
if (definition.isSingletonScope() && this.context.hasDefinition(key)) {
|
|
206
|
+
const propertyDefinition = this.context.registry.getDefinition(key);
|
|
207
|
+
if (propertyDefinition.isRequestScope() &&
|
|
208
|
+
!propertyDefinition.allowDowngrade) {
|
|
209
|
+
throw new error_1.MidwaySingletonInjectRequestError(definition.path.name, propertyDefinition.path.name);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
205
212
|
try {
|
|
206
213
|
inst[key] = await this.resolveManagedAsync(definition.properties.get(key), key);
|
|
207
214
|
}
|
|
@@ -13,6 +13,8 @@ class MidwayRequestContainer extends container_1.MidwayContainer {
|
|
|
13
13
|
this.ctx = ctx;
|
|
14
14
|
// register ctx
|
|
15
15
|
this.registerObject(interface_1.REQUEST_CTX_KEY, ctx);
|
|
16
|
+
// register res
|
|
17
|
+
this.registerObject('res', {});
|
|
16
18
|
if (ctx.logger) {
|
|
17
19
|
// register contextLogger
|
|
18
20
|
this.registerObject('logger', ctx.logger);
|
|
@@ -18,6 +18,7 @@ export declare class FunctionDefinition implements IObjectDefinition {
|
|
|
18
18
|
asynchronous: boolean;
|
|
19
19
|
handlerProps: any[];
|
|
20
20
|
createFrom: any;
|
|
21
|
+
allowDowngrade: boolean;
|
|
21
22
|
protected innerAutowire: boolean;
|
|
22
23
|
protected innerScope: ScopeEnum;
|
|
23
24
|
getAttr(key: ObjectIdentifier): any;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ObjectCreator = void 0;
|
|
4
4
|
const decorator_1 = require("@midwayjs/decorator");
|
|
5
|
+
const error_1 = require("../error");
|
|
5
6
|
class ObjectCreator {
|
|
6
7
|
constructor(definition) {
|
|
7
8
|
this.definition = definition;
|
|
@@ -64,7 +65,7 @@ class ObjectCreator {
|
|
|
64
65
|
let inst;
|
|
65
66
|
if (this.definition.constructMethod) {
|
|
66
67
|
const fn = Clzz[this.definition.constructMethod];
|
|
67
|
-
if (
|
|
68
|
+
if (decorator_1.Types.isAsyncFunction(fn)) {
|
|
68
69
|
inst = await fn.apply(Clzz, args);
|
|
69
70
|
}
|
|
70
71
|
else {
|
|
@@ -85,14 +86,14 @@ class ObjectCreator {
|
|
|
85
86
|
const inst = obj;
|
|
86
87
|
// after properties set then do init
|
|
87
88
|
if (this.definition.initMethod && inst[this.definition.initMethod]) {
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
throw new
|
|
89
|
+
if (decorator_1.Types.isGeneratorFunction(inst[this.definition.initMethod]) ||
|
|
90
|
+
decorator_1.Types.isAsyncFunction(inst[this.definition.initMethod])) {
|
|
91
|
+
throw new error_1.MidwayUseWrongMethodError('context.get', 'context.getAsync', this.definition.id);
|
|
91
92
|
}
|
|
92
93
|
else {
|
|
93
94
|
const rt = inst[this.definition.initMethod].call(inst);
|
|
94
|
-
if (
|
|
95
|
-
throw new
|
|
95
|
+
if (decorator_1.Types.isPromise(rt)) {
|
|
96
|
+
throw new error_1.MidwayUseWrongMethodError('context.get', 'context.getAsync', this.definition.id);
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
}
|
|
@@ -106,7 +107,7 @@ class ObjectCreator {
|
|
|
106
107
|
const inst = obj;
|
|
107
108
|
if (this.definition.initMethod && inst[this.definition.initMethod]) {
|
|
108
109
|
const initFn = inst[this.definition.initMethod];
|
|
109
|
-
if (
|
|
110
|
+
if (decorator_1.Types.isAsyncFunction(initFn)) {
|
|
110
111
|
await initFn.call(inst);
|
|
111
112
|
}
|
|
112
113
|
else {
|
|
@@ -139,7 +140,7 @@ class ObjectCreator {
|
|
|
139
140
|
async doDestroyAsync(obj) {
|
|
140
141
|
if (this.definition.destroyMethod && obj[this.definition.destroyMethod]) {
|
|
141
142
|
const fn = obj[this.definition.destroyMethod];
|
|
142
|
-
if (
|
|
143
|
+
if (decorator_1.Types.isAsyncFunction(fn)) {
|
|
143
144
|
await fn.call(obj);
|
|
144
145
|
}
|
|
145
146
|
else {
|