@midwayjs/core 3.19.0-beta.2 → 4.0.0-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/LICENSE +21 -0
- package/dist/baseFramework.d.ts +7 -35
- package/dist/baseFramework.js +10 -52
- package/dist/common/applicationManager.d.ts +6 -6
- package/dist/common/applicationManager.js +18 -35
- package/dist/common/asyncContextManager.d.ts +15 -0
- package/dist/common/asyncContextManager.js +51 -2
- package/dist/common/dataListener.js +1 -1
- package/dist/common/dataSourceManager.d.ts +3 -0
- package/dist/common/dataSourceManager.js +6 -4
- package/dist/common/fileDetector.d.ts +9 -9
- package/dist/common/fileDetector.js +30 -28
- package/dist/common/filterManager.js +5 -4
- package/dist/common/guardManager.js +3 -2
- package/dist/common/middlewareManager.js +4 -3
- package/dist/common/performanceManager.d.ts +3 -3
- package/dist/common/performanceManager.js +17 -9
- package/dist/common/priorityManager.js +2 -2
- package/dist/common/serviceFactory.js +1 -1
- package/dist/common/typedResourceManager.js +2 -0
- package/dist/common/webGenerator.js +4 -6
- package/dist/config/config.default.js +1 -1
- package/dist/constants.d.ts +2 -32
- package/dist/constants.js +3 -33
- package/dist/context/componentLoader.d.ts +20 -0
- package/dist/context/componentLoader.js +193 -0
- package/dist/context/container.d.ts +14 -29
- package/dist/context/container.js +68 -306
- package/dist/context/definitionRegistry.d.ts +3 -0
- package/dist/context/definitionRegistry.js +8 -15
- package/dist/context/managedResolverFactory.d.ts +15 -40
- package/dist/context/managedResolverFactory.js +263 -348
- package/dist/context/requestContainer.d.ts +22 -12
- package/dist/context/requestContainer.js +43 -51
- package/dist/decorator/common/aspect.js +4 -4
- package/dist/decorator/common/autoload.js +1 -1
- package/dist/decorator/common/configuration.d.ts +1 -24
- package/dist/decorator/common/configuration.js +6 -1
- package/dist/decorator/common/filter.js +6 -6
- package/dist/decorator/common/framework.d.ts +46 -3
- package/dist/decorator/common/framework.js +43 -9
- package/dist/decorator/common/guard.js +4 -9
- package/dist/decorator/common/inject.d.ts +4 -2
- package/dist/decorator/common/inject.js +87 -4
- package/dist/decorator/common/mock.js +1 -1
- package/dist/decorator/common/objectDef.d.ts +0 -5
- package/dist/decorator/common/objectDef.js +8 -20
- package/dist/decorator/common/provide.d.ts +1 -1
- package/dist/decorator/common/provide.js +1 -1
- package/dist/decorator/common/scope.d.ts +6 -0
- package/dist/decorator/common/scope.js +21 -0
- package/dist/decorator/constant.d.ts +14 -17
- package/dist/decorator/constant.js +23 -35
- package/dist/decorator/decoratorManager.d.ts +21 -294
- package/dist/decorator/decoratorManager.js +127 -694
- package/dist/decorator/faas/serverlessTrigger.js +5 -5
- package/dist/decorator/index.d.ts +2 -3
- package/dist/decorator/index.js +6 -4
- package/dist/decorator/metadataManager.d.ts +127 -0
- package/dist/decorator/metadataManager.js +465 -0
- package/dist/decorator/microservice/consumer.js +3 -2
- package/dist/decorator/microservice/kafkaListener.js +2 -1
- package/dist/decorator/microservice/provider.js +6 -5
- package/dist/decorator/microservice/rabbitmqListener.js +2 -1
- package/dist/decorator/task/queue.js +3 -2
- package/dist/decorator/task/schedule.js +3 -2
- package/dist/decorator/task/task.js +4 -3
- package/dist/decorator/task/taskLocal.js +4 -3
- package/dist/decorator/web/controller.js +3 -2
- package/dist/decorator/web/paramMapping.js +2 -2
- package/dist/decorator/web/requestMapping.js +5 -5
- package/dist/decorator/web/response.js +6 -5
- package/dist/decorator/ws/webSocketController.js +3 -2
- package/dist/decorator/ws/webSocketEvent.js +7 -6
- package/dist/definitions/functionDefinition.d.ts +3 -3
- package/dist/definitions/functionDefinition.js +12 -11
- package/dist/definitions/objectCreator.d.ts +5 -11
- package/dist/definitions/objectCreator.js +3 -27
- package/dist/definitions/objectDefinition.d.ts +2 -3
- package/dist/definitions/objectDefinition.js +1 -3
- package/dist/error/base.js +2 -2
- package/dist/error/framework.d.ts +1 -8
- package/dist/error/framework.js +9 -25
- package/dist/error/http.js +1 -1
- package/dist/functional/configuration.d.ts +14 -15
- package/dist/functional/configuration.js +37 -47
- package/dist/functional/hooks.d.ts +10 -0
- package/dist/functional/hooks.js +68 -0
- package/dist/functional/index.d.ts +3 -0
- package/dist/functional/index.js +22 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +5 -6
- package/dist/interface.d.ts +80 -113
- package/dist/interface.js +9 -33
- package/dist/legacy/constants.d.ts +29 -0
- package/dist/legacy/constants.js +33 -0
- package/dist/legacy/decorator.d.ts +255 -0
- package/dist/legacy/decorator.js +468 -0
- package/dist/legacy/index.d.ts +3 -0
- package/dist/legacy/index.js +19 -0
- package/dist/legacy/types.d.ts +2 -0
- package/dist/legacy/types.js +3 -0
- package/dist/response/base.d.ts +1 -0
- package/dist/response/http.d.ts +1 -0
- package/dist/response/sse.js +1 -3
- package/dist/service/aspectService.js +11 -12
- package/dist/service/configService.js +2 -2
- package/dist/service/decoratorService.d.ts +3 -3
- package/dist/service/decoratorService.js +14 -10
- package/dist/service/environmentService.d.ts +1 -0
- package/dist/service/environmentService.js +5 -2
- package/dist/service/frameworkService.d.ts +5 -4
- package/dist/service/frameworkService.js +30 -28
- package/dist/service/healthService.js +4 -4
- package/dist/service/informationService.js +3 -4
- package/dist/service/lifeCycleService.js +6 -17
- package/dist/service/loggerService.js +3 -4
- package/dist/service/middlewareService.js +7 -8
- package/dist/service/mockService.d.ts +28 -12
- package/dist/service/mockService.js +82 -49
- package/dist/service/slsFunctionService.d.ts +1 -14
- package/dist/service/slsFunctionService.js +33 -81
- package/dist/service/webRouterService.js +11 -11
- package/dist/setup.d.ts +5 -5
- package/dist/setup.js +75 -93
- package/dist/util/contextUtil.d.ts +2 -2
- package/dist/util/httpclient.d.ts +3 -2
- package/dist/util/index.d.ts +14 -0
- package/dist/util/index.js +159 -25
- package/dist/util/pathFileUtil.d.ts +14 -1
- package/dist/util/pathFileUtil.js +27 -6
- package/dist/util/webRouterParam.js +2 -2
- package/package.json +24 -6
- package/dist/decorator/common/pipeline.d.ts +0 -3
- package/dist/decorator/common/pipeline.js +0 -12
- package/dist/decorator/rpc/hsf.d.ts +0 -13
- package/dist/decorator/rpc/hsf.js +0 -20
- package/dist/definitions/properties.d.ts +0 -7
- package/dist/definitions/properties.js +0 -19
- package/dist/service/pipelineService.d.ts +0 -168
- package/dist/service/pipelineService.js +0 -254
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2013 - Now midwayjs
|
|
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/dist/baseFramework.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommonMiddlewareUnion, IConfigurationOptions, IMidwayApplication, IMidwayBootstrapOptions,
|
|
1
|
+
import { CommonMiddlewareUnion, IConfigurationOptions, IMidwayApplication, IMidwayBootstrapOptions, IMidwayContext, IMidwayFramework, CommonFilterUnion, MiddlewareRespond, CommonGuardUnion, ILogger, MidwayLoggerOptions, IMidwayGlobalContainer } from './interface';
|
|
2
2
|
import { MidwayEnvironmentService } from './service/environmentService';
|
|
3
3
|
import { MidwayConfigService } from './service/configService';
|
|
4
4
|
import { MidwayInformationService } from './service/informationService';
|
|
@@ -10,7 +10,7 @@ import { MidwayMockService } from './service/mockService';
|
|
|
10
10
|
import { AsyncContextManager } from './common/asyncContextManager';
|
|
11
11
|
import { GuardManager } from './common/guardManager';
|
|
12
12
|
export declare abstract class BaseFramework<APP extends IMidwayApplication<CTX>, CTX extends IMidwayContext, OPT extends IConfigurationOptions, ResOrNext = unknown, Next = unknown> implements IMidwayFramework<APP, CTX, OPT, ResOrNext, Next> {
|
|
13
|
-
readonly applicationContext:
|
|
13
|
+
readonly applicationContext: IMidwayGlobalContainer;
|
|
14
14
|
app: APP;
|
|
15
15
|
configurationOptions: OPT;
|
|
16
16
|
protected logger: ILogger;
|
|
@@ -31,51 +31,23 @@ export declare abstract class BaseFramework<APP extends IMidwayApplication<CTX>,
|
|
|
31
31
|
informationService: MidwayInformationService;
|
|
32
32
|
middlewareService: MidwayMiddlewareService<CTX, ResOrNext, Next>;
|
|
33
33
|
mockService: MidwayMockService;
|
|
34
|
-
constructor(applicationContext:
|
|
34
|
+
constructor(applicationContext: IMidwayGlobalContainer);
|
|
35
35
|
init(): Promise<this>;
|
|
36
|
-
abstract configure(options?: OPT):
|
|
36
|
+
abstract configure(options?: OPT): OPT;
|
|
37
|
+
abstract applicationInitialize(options: IMidwayBootstrapOptions): void | Promise<void>;
|
|
38
|
+
abstract run(): Promise<void>;
|
|
37
39
|
isEnable(): boolean;
|
|
38
40
|
initialize(options?: IMidwayBootstrapOptions): Promise<void>;
|
|
39
|
-
|
|
40
|
-
* @deprecated
|
|
41
|
-
*/
|
|
42
|
-
protected containerInitialize(options: IMidwayBootstrapOptions): Promise<void>;
|
|
43
|
-
/**
|
|
44
|
-
* @deprecated
|
|
45
|
-
*/
|
|
46
|
-
protected containerDirectoryLoad(options: IMidwayBootstrapOptions): Promise<void>;
|
|
47
|
-
/**
|
|
48
|
-
* @deprecated
|
|
49
|
-
*/
|
|
50
|
-
protected containerReady(options: IMidwayBootstrapOptions): Promise<void>;
|
|
51
|
-
getApplicationContext(): IMidwayContainer;
|
|
41
|
+
getApplicationContext(): IMidwayGlobalContainer;
|
|
52
42
|
getConfiguration(key?: string): any;
|
|
53
43
|
getCurrentEnvironment(): string;
|
|
54
44
|
getApplication(): APP;
|
|
55
|
-
abstract applicationInitialize(options: IMidwayBootstrapOptions): any;
|
|
56
|
-
abstract run(): Promise<void>;
|
|
57
45
|
protected createContextLogger(ctx: CTX, name?: string): ILogger;
|
|
58
46
|
stop(): Promise<void>;
|
|
59
47
|
getAppDir(): string;
|
|
60
48
|
getBaseDir(): string;
|
|
61
49
|
protected defineApplicationProperties(applicationProperties?: {}, whiteList?: string[]): void;
|
|
62
50
|
protected beforeStop(): Promise<void>;
|
|
63
|
-
/**
|
|
64
|
-
* @deprecated
|
|
65
|
-
*/
|
|
66
|
-
protected beforeContainerInitialize(options: Partial<IMidwayBootstrapOptions>): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* @deprecated
|
|
69
|
-
*/
|
|
70
|
-
protected afterContainerInitialize(options: Partial<IMidwayBootstrapOptions>): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
* @deprecated
|
|
73
|
-
*/
|
|
74
|
-
protected afterContainerDirectoryLoad(options: Partial<IMidwayBootstrapOptions>): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* @deprecated
|
|
77
|
-
*/
|
|
78
|
-
protected afterContainerReady(options: Partial<IMidwayBootstrapOptions>): Promise<void>;
|
|
79
51
|
applyMiddleware<R, N>(lastMiddleware?: CommonMiddlewareUnion<CTX, R, N>): Promise<MiddlewareRespond<CTX, R, N>>;
|
|
80
52
|
getLogger(name?: string): any;
|
|
81
53
|
getCoreLogger(): ILogger;
|
package/dist/baseFramework.js
CHANGED
|
@@ -36,10 +36,9 @@ class BaseFramework {
|
|
|
36
36
|
this.composeMiddleware = null;
|
|
37
37
|
}
|
|
38
38
|
async init() {
|
|
39
|
-
|
|
40
|
-
this.configurationOptions = (_a = this.configure()) !== null && _a !== void 0 ? _a : {};
|
|
39
|
+
this.configurationOptions = this.configure() ?? {};
|
|
41
40
|
this.contextLoggerApplyLogger =
|
|
42
|
-
|
|
41
|
+
this.configurationOptions.contextLoggerApplyLogger ?? 'appLogger';
|
|
43
42
|
this.contextLoggerFormat = this.configurationOptions.contextLoggerFormat;
|
|
44
43
|
this.logger = this.loggerService.getLogger('coreLogger');
|
|
45
44
|
this.appLogger = this.loggerService.getLogger('appLogger');
|
|
@@ -50,34 +49,17 @@ class BaseFramework {
|
|
|
50
49
|
}
|
|
51
50
|
async initialize(options) {
|
|
52
51
|
this.bootstrapOptions = options;
|
|
53
|
-
await this.beforeContainerInitialize(options);
|
|
54
|
-
await this.containerInitialize(options);
|
|
55
|
-
await this.afterContainerInitialize(options);
|
|
56
|
-
await this.containerDirectoryLoad(options);
|
|
57
|
-
await this.afterContainerDirectoryLoad(options);
|
|
58
52
|
/**
|
|
59
53
|
* Third party application initialization
|
|
60
54
|
*/
|
|
61
55
|
await this.applicationInitialize(options);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* @deprecated
|
|
68
|
-
*/
|
|
69
|
-
async containerInitialize(options) { }
|
|
70
|
-
/**
|
|
71
|
-
* @deprecated
|
|
72
|
-
*/
|
|
73
|
-
async containerDirectoryLoad(options) { }
|
|
74
|
-
/**
|
|
75
|
-
* @deprecated
|
|
76
|
-
*/
|
|
77
|
-
async containerReady(options) {
|
|
56
|
+
/**
|
|
57
|
+
* define application properties if not exists
|
|
58
|
+
*/
|
|
78
59
|
if (!this.app.getApplicationContext) {
|
|
79
60
|
this.defineApplicationProperties();
|
|
80
61
|
}
|
|
62
|
+
await this.mockService.runSimulatorAppSetup(this.app);
|
|
81
63
|
}
|
|
82
64
|
getApplicationContext() {
|
|
83
65
|
return this.applicationContext;
|
|
@@ -109,7 +91,7 @@ class BaseFramework {
|
|
|
109
91
|
return ctxLogger;
|
|
110
92
|
}
|
|
111
93
|
else {
|
|
112
|
-
const appLogger = this.getLogger(name
|
|
94
|
+
const appLogger = this.getLogger(name ?? this.contextLoggerApplyLogger);
|
|
113
95
|
// avoid maximum call stack size exceeded
|
|
114
96
|
if (ctx['_logger']) {
|
|
115
97
|
return ctx['_logger'];
|
|
@@ -147,11 +129,6 @@ class BaseFramework {
|
|
|
147
129
|
getConfig: (key) => {
|
|
148
130
|
return this.getConfiguration(key);
|
|
149
131
|
},
|
|
150
|
-
getFrameworkType: () => {
|
|
151
|
-
if (this['getFrameworkType']) {
|
|
152
|
-
return this['getFrameworkType']();
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
132
|
getProcessType: () => {
|
|
156
133
|
return interface_1.MidwayProcessTypeEnum.APPLICATION;
|
|
157
134
|
},
|
|
@@ -180,7 +157,6 @@ class BaseFramework {
|
|
|
180
157
|
}
|
|
181
158
|
if (!ctx.requestContext) {
|
|
182
159
|
ctx.requestContext = new requestContainer_1.MidwayRequestContainer(ctx, this.getApplicationContext());
|
|
183
|
-
ctx.requestContext.ready();
|
|
184
160
|
}
|
|
185
161
|
if (!ctx.getLogger) {
|
|
186
162
|
ctx.getLogger = name => {
|
|
@@ -229,30 +205,13 @@ class BaseFramework {
|
|
|
229
205
|
Object.assign(this.app, defaultApplicationProperties, applicationProperties);
|
|
230
206
|
}
|
|
231
207
|
async beforeStop() { }
|
|
232
|
-
/**
|
|
233
|
-
* @deprecated
|
|
234
|
-
*/
|
|
235
|
-
async beforeContainerInitialize(options) { }
|
|
236
|
-
/**
|
|
237
|
-
* @deprecated
|
|
238
|
-
*/
|
|
239
|
-
async afterContainerInitialize(options) { }
|
|
240
|
-
/**
|
|
241
|
-
* @deprecated
|
|
242
|
-
*/
|
|
243
|
-
async afterContainerDirectoryLoad(options) { }
|
|
244
|
-
/**
|
|
245
|
-
* @deprecated
|
|
246
|
-
*/
|
|
247
|
-
async afterContainerReady(options) { }
|
|
248
208
|
async applyMiddleware(lastMiddleware) {
|
|
249
|
-
var _a;
|
|
250
209
|
if (!this.composeMiddleware) {
|
|
251
210
|
if (!this.applicationContext.hasObject(constants_1.ASYNC_CONTEXT_MANAGER_KEY)) {
|
|
252
211
|
const asyncContextManagerEnabled = this.configService.getConfiguration('asyncContextManager.enable') ||
|
|
253
212
|
false;
|
|
254
213
|
const contextManager = asyncContextManagerEnabled
|
|
255
|
-
?
|
|
214
|
+
? this.bootstrapOptions?.asyncContextManager ||
|
|
256
215
|
new asyncContextManager_1.NoopContextManager()
|
|
257
216
|
: new asyncContextManager_1.NoopContextManager();
|
|
258
217
|
if (asyncContextManagerEnabled) {
|
|
@@ -299,8 +258,7 @@ class BaseFramework {
|
|
|
299
258
|
return this.composeMiddleware;
|
|
300
259
|
}
|
|
301
260
|
getLogger(name) {
|
|
302
|
-
|
|
303
|
-
return (_a = this.loggerService.getLogger(name)) !== null && _a !== void 0 ? _a : this.appLogger;
|
|
261
|
+
return this.loggerService.getLogger(name) ?? this.appLogger;
|
|
304
262
|
}
|
|
305
263
|
getCoreLogger() {
|
|
306
264
|
return this.logger;
|
|
@@ -345,6 +303,7 @@ class BaseFramework {
|
|
|
345
303
|
return this.namespace;
|
|
346
304
|
}
|
|
347
305
|
}
|
|
306
|
+
exports.BaseFramework = BaseFramework;
|
|
348
307
|
__decorate([
|
|
349
308
|
(0, decorator_1.Inject)(),
|
|
350
309
|
__metadata("design:type", loggerService_1.MidwayLoggerService)
|
|
@@ -375,5 +334,4 @@ __decorate([
|
|
|
375
334
|
__metadata("design:paramtypes", []),
|
|
376
335
|
__metadata("design:returntype", Promise)
|
|
377
336
|
], BaseFramework.prototype, "init", null);
|
|
378
|
-
exports.BaseFramework = BaseFramework;
|
|
379
337
|
//# sourceMappingURL=baseFramework.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { IMidwayApplication, IMidwayFramework
|
|
1
|
+
import { IMidwayApplication, IMidwayFramework } from '../interface';
|
|
2
2
|
export declare class MidwayApplicationManager {
|
|
3
3
|
private globalFrameworkMap;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
getFramework(
|
|
7
|
-
getApplication(
|
|
8
|
-
getApplications(
|
|
4
|
+
addFramework(frameworkNameOrNamespace: string, framework: IMidwayFramework<any, any, any>): void;
|
|
5
|
+
hasFramework(frameworkNameOrNamespace: string): boolean;
|
|
6
|
+
getFramework(frameworkNameOrNamespace: string): IMidwayFramework<any, any, any, unknown, unknown>;
|
|
7
|
+
getApplication(frameworkNameOrNamespace: string): IMidwayApplication;
|
|
8
|
+
getApplications(frameworkNameOrNamespace?: Array<string>): IMidwayApplication[];
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=applicationManager.d.ts.map
|
|
@@ -12,50 +12,33 @@ const decorator_1 = require("../decorator");
|
|
|
12
12
|
let MidwayApplicationManager = class MidwayApplicationManager {
|
|
13
13
|
constructor() {
|
|
14
14
|
this.globalFrameworkMap = new Map();
|
|
15
|
-
this.globalFrameworkTypeMap = new WeakMap();
|
|
16
15
|
}
|
|
17
|
-
addFramework(
|
|
18
|
-
this.globalFrameworkMap.set(
|
|
19
|
-
if (framework['getFrameworkType']) {
|
|
20
|
-
this.globalFrameworkTypeMap.set(framework['getFrameworkType'](), framework);
|
|
21
|
-
}
|
|
16
|
+
addFramework(frameworkNameOrNamespace, framework) {
|
|
17
|
+
this.globalFrameworkMap.set(frameworkNameOrNamespace, framework);
|
|
22
18
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (this.globalFrameworkMap.has(namespaceOrFrameworkType)) {
|
|
26
|
-
return this.globalFrameworkMap.get(namespaceOrFrameworkType);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
if (this.globalFrameworkTypeMap.has(namespaceOrFrameworkType)) {
|
|
31
|
-
return this.globalFrameworkTypeMap.get(namespaceOrFrameworkType);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
19
|
+
hasFramework(frameworkNameOrNamespace) {
|
|
20
|
+
return this.globalFrameworkMap.has(frameworkNameOrNamespace);
|
|
34
21
|
}
|
|
35
|
-
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
return this.globalFrameworkMap
|
|
39
|
-
.get(namespaceOrFrameworkType)
|
|
40
|
-
.getApplication();
|
|
41
|
-
}
|
|
22
|
+
getFramework(frameworkNameOrNamespace) {
|
|
23
|
+
if (this.globalFrameworkMap.has(frameworkNameOrNamespace)) {
|
|
24
|
+
return this.globalFrameworkMap.get(frameworkNameOrNamespace);
|
|
42
25
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
26
|
+
}
|
|
27
|
+
getApplication(frameworkNameOrNamespace) {
|
|
28
|
+
if (this.globalFrameworkMap.has(frameworkNameOrNamespace)) {
|
|
29
|
+
return this.globalFrameworkMap
|
|
30
|
+
.get(frameworkNameOrNamespace)
|
|
31
|
+
.getApplication();
|
|
49
32
|
}
|
|
50
33
|
}
|
|
51
|
-
getApplications(
|
|
52
|
-
if (!
|
|
34
|
+
getApplications(frameworkNameOrNamespace) {
|
|
35
|
+
if (!frameworkNameOrNamespace) {
|
|
53
36
|
return Array.from(this.globalFrameworkMap.values()).map(framework => {
|
|
54
37
|
return framework.getApplication();
|
|
55
38
|
});
|
|
56
39
|
}
|
|
57
40
|
else {
|
|
58
|
-
return
|
|
41
|
+
return frameworkNameOrNamespace
|
|
59
42
|
.map(namespace => {
|
|
60
43
|
return this.getApplication(namespace);
|
|
61
44
|
})
|
|
@@ -65,9 +48,9 @@ let MidwayApplicationManager = class MidwayApplicationManager {
|
|
|
65
48
|
}
|
|
66
49
|
}
|
|
67
50
|
};
|
|
68
|
-
MidwayApplicationManager =
|
|
51
|
+
exports.MidwayApplicationManager = MidwayApplicationManager;
|
|
52
|
+
exports.MidwayApplicationManager = MidwayApplicationManager = __decorate([
|
|
69
53
|
(0, decorator_1.Provide)(),
|
|
70
54
|
(0, decorator_1.Scope)(interface_1.ScopeEnum.Singleton)
|
|
71
55
|
], MidwayApplicationManager);
|
|
72
|
-
exports.MidwayApplicationManager = MidwayApplicationManager;
|
|
73
56
|
//# sourceMappingURL=applicationManager.js.map
|
|
@@ -58,4 +58,19 @@ export declare class NoopContextManager implements AsyncContextManager {
|
|
|
58
58
|
enable(): this;
|
|
59
59
|
disable(): this;
|
|
60
60
|
}
|
|
61
|
+
export declare class AsyncLocalStorageContextManager implements AsyncContextManager {
|
|
62
|
+
private _asyncLocalStorage;
|
|
63
|
+
constructor();
|
|
64
|
+
active(): AsyncContext;
|
|
65
|
+
with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(context: AsyncContext, fn: F, thisArg?: ThisParameterType<F>, ...args: A): ReturnType<F>;
|
|
66
|
+
enable(): this;
|
|
67
|
+
disable(): this;
|
|
68
|
+
/**
|
|
69
|
+
* Binds a the certain context or the active one to the target function and then returns the target
|
|
70
|
+
* @param context A context (span) to be bind to target
|
|
71
|
+
* @param target a function. When target or one of its callbacks is called,
|
|
72
|
+
* the provided context will be used as the active context for the duration of the call.
|
|
73
|
+
*/
|
|
74
|
+
bind<T>(context: AsyncContext, target: T): T;
|
|
75
|
+
}
|
|
61
76
|
//# sourceMappingURL=asyncContextManager.d.ts.map
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AsyncLocalStorageContextManager = exports.NoopContextManager = exports.ASYNC_ROOT_CONTEXT = void 0;
|
|
2
4
|
/*
|
|
3
5
|
* Copyright The OpenTelemetry Authors
|
|
4
6
|
*
|
|
@@ -14,8 +16,7 @@
|
|
|
14
16
|
* See the License for the specific language governing permissions and
|
|
15
17
|
* limitations under the License.
|
|
16
18
|
*/
|
|
17
|
-
|
|
18
|
-
exports.NoopContextManager = exports.ASYNC_ROOT_CONTEXT = void 0;
|
|
19
|
+
const async_hooks_1 = require("async_hooks");
|
|
19
20
|
class AsyncBaseContext {
|
|
20
21
|
/**
|
|
21
22
|
* Construct a new context which inherits values from an optional parent context.
|
|
@@ -60,4 +61,52 @@ class NoopContextManager {
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
exports.NoopContextManager = NoopContextManager;
|
|
64
|
+
class AsyncLocalStorageContextManager {
|
|
65
|
+
constructor() {
|
|
66
|
+
this._asyncLocalStorage = new async_hooks_1.AsyncLocalStorage();
|
|
67
|
+
}
|
|
68
|
+
active() {
|
|
69
|
+
return this._asyncLocalStorage.getStore() ?? exports.ASYNC_ROOT_CONTEXT;
|
|
70
|
+
}
|
|
71
|
+
with(context, fn, thisArg, ...args) {
|
|
72
|
+
const cb = thisArg == null ? fn : fn.bind(thisArg);
|
|
73
|
+
return this._asyncLocalStorage.run(context, cb, ...args);
|
|
74
|
+
}
|
|
75
|
+
enable() {
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
disable() {
|
|
79
|
+
this._asyncLocalStorage.disable();
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Binds a the certain context or the active one to the target function and then returns the target
|
|
84
|
+
* @param context A context (span) to be bind to target
|
|
85
|
+
* @param target a function. When target or one of its callbacks is called,
|
|
86
|
+
* the provided context will be used as the active context for the duration of the call.
|
|
87
|
+
*/
|
|
88
|
+
bind(context, target) {
|
|
89
|
+
if (typeof target === 'function') {
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
91
|
+
const manager = this;
|
|
92
|
+
const contextWrapper = function (...args) {
|
|
93
|
+
return manager.with(context, () => target.apply(this, args));
|
|
94
|
+
};
|
|
95
|
+
Object.defineProperty(contextWrapper, 'length', {
|
|
96
|
+
enumerable: false,
|
|
97
|
+
configurable: true,
|
|
98
|
+
writable: false,
|
|
99
|
+
value: target.length,
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* It isn't possible to tell Typescript that contextWrapper is the same as T
|
|
103
|
+
* so we forced to cast as any here.
|
|
104
|
+
*/
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
106
|
+
return contextWrapper;
|
|
107
|
+
}
|
|
108
|
+
return target;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.AsyncLocalStorageContextManager = AsyncLocalStorageContextManager;
|
|
63
112
|
//# sourceMappingURL=asyncContextManager.js.map
|
|
@@ -27,6 +27,7 @@ class DataListener {
|
|
|
27
27
|
}
|
|
28
28
|
async destroyListener() { }
|
|
29
29
|
}
|
|
30
|
+
exports.DataListener = DataListener;
|
|
30
31
|
__decorate([
|
|
31
32
|
(0, decorator_1.Init)(),
|
|
32
33
|
__metadata("design:type", Function),
|
|
@@ -39,5 +40,4 @@ __decorate([
|
|
|
39
40
|
__metadata("design:paramtypes", []),
|
|
40
41
|
__metadata("design:returntype", Promise)
|
|
41
42
|
], DataListener.prototype, "stop", null);
|
|
42
|
-
exports.DataListener = DataListener;
|
|
43
43
|
//# sourceMappingURL=dataListener.js.map
|
|
@@ -44,6 +44,9 @@ export declare abstract class DataSourceManager<T, ConnectionOpts extends Record
|
|
|
44
44
|
protected abstract createDataSource(config: any, dataSourceName: string): Promise<T | void> | (T | void);
|
|
45
45
|
protected abstract checkConnected(dataSource: T): Promise<boolean>;
|
|
46
46
|
protected abstract destroyDataSource(dataSource: T): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Call destroyDataSource() on all data sources
|
|
49
|
+
*/
|
|
47
50
|
stop(): Promise<void>;
|
|
48
51
|
getDefaultDataSourceName(): string;
|
|
49
52
|
getDataSourcePriority(name: string): string;
|
|
@@ -33,7 +33,6 @@ class DataSourceManager {
|
|
|
33
33
|
this.dataSourcePriority = {};
|
|
34
34
|
}
|
|
35
35
|
async initDataSource(dataSourceConfig, baseDirOrOptions) {
|
|
36
|
-
var _a;
|
|
37
36
|
this.options = dataSourceConfig;
|
|
38
37
|
if (!this.options.dataSource) {
|
|
39
38
|
throw new error_1.MidwayParameterError('[DataSourceManager] must set options.dataSource.');
|
|
@@ -53,7 +52,7 @@ class DataSourceManager {
|
|
|
53
52
|
for (const entity of userEntities) {
|
|
54
53
|
if (typeof entity === 'string') {
|
|
55
54
|
// string will be glob file
|
|
56
|
-
const models = await globModels(entity, baseDirOrOptions.baseDir,
|
|
55
|
+
const models = await globModels(entity, baseDirOrOptions.baseDir, this.environmentService?.getModuleLoadType());
|
|
57
56
|
for (const model of models) {
|
|
58
57
|
entities.add(model);
|
|
59
58
|
this.modelMapping.set(model, dataSourceName);
|
|
@@ -71,7 +70,7 @@ class DataSourceManager {
|
|
|
71
70
|
}
|
|
72
71
|
// create data source
|
|
73
72
|
const opts = {
|
|
74
|
-
cacheInstance: dataSourceConfig.cacheInstance,
|
|
73
|
+
cacheInstance: dataSourceConfig.cacheInstance, // will default true
|
|
75
74
|
validateConnection: dataSourceConfig.validateConnection,
|
|
76
75
|
};
|
|
77
76
|
await this.createInstance(dataSourceOptions, dataSourceName, opts);
|
|
@@ -134,6 +133,9 @@ class DataSourceManager {
|
|
|
134
133
|
getDataSourceNameByModel(modelOrRepository) {
|
|
135
134
|
return this.modelMapping.get(modelOrRepository);
|
|
136
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Call destroyDataSource() on all data sources
|
|
138
|
+
*/
|
|
137
139
|
async stop() {
|
|
138
140
|
const arr = Array.from(this.dataSource.values());
|
|
139
141
|
await Promise.all(arr.map(dbh => {
|
|
@@ -170,6 +172,7 @@ class DataSourceManager {
|
|
|
170
172
|
return this.priorityManager.isLowPriority(this.dataSourcePriority[name]);
|
|
171
173
|
}
|
|
172
174
|
}
|
|
175
|
+
exports.DataSourceManager = DataSourceManager;
|
|
173
176
|
__decorate([
|
|
174
177
|
(0, decorator_1.Inject)(),
|
|
175
178
|
__metadata("design:type", String)
|
|
@@ -182,7 +185,6 @@ __decorate([
|
|
|
182
185
|
(0, decorator_1.Inject)(),
|
|
183
186
|
__metadata("design:type", priorityManager_1.MidwayPriorityManager)
|
|
184
187
|
], DataSourceManager.prototype, "priorityManager", void 0);
|
|
185
|
-
exports.DataSourceManager = DataSourceManager;
|
|
186
188
|
function formatGlobString(globString) {
|
|
187
189
|
let pattern;
|
|
188
190
|
if (!/^\*/.test(globString)) {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { IFileDetector,
|
|
1
|
+
import { IFileDetector, IMidwayGlobalContainer } from '../interface';
|
|
2
2
|
export declare abstract class AbstractFileDetector<T> implements IFileDetector {
|
|
3
3
|
options: T;
|
|
4
|
-
extraDetectorOptions: T;
|
|
5
4
|
constructor(options?: T);
|
|
6
|
-
abstract run(container:
|
|
7
|
-
|
|
5
|
+
abstract run(container: IMidwayGlobalContainer, namespace: string): Promise<void>;
|
|
6
|
+
abstract runSync(container: IMidwayGlobalContainer, namespace: string): void;
|
|
8
7
|
}
|
|
9
8
|
/**
|
|
10
9
|
* CommonJS module loader
|
|
@@ -13,14 +12,14 @@ export declare class CommonJSFileDetector extends AbstractFileDetector<{
|
|
|
13
12
|
loadDir?: string | string[];
|
|
14
13
|
pattern?: string | string[];
|
|
15
14
|
ignore?: string | string[];
|
|
16
|
-
namespace?: string;
|
|
17
15
|
conflictCheck?: boolean;
|
|
18
16
|
}> {
|
|
19
17
|
private duplicateModuleCheckSet;
|
|
20
|
-
run(container:
|
|
21
|
-
loadSync(container:
|
|
22
|
-
loadAsync(container:
|
|
18
|
+
run(container: IMidwayGlobalContainer, namespace: string): Promise<void>;
|
|
19
|
+
loadSync(container: IMidwayGlobalContainer, namespace: string): void;
|
|
20
|
+
loadAsync(container: IMidwayGlobalContainer, namespace: string): Promise<void>;
|
|
23
21
|
getType(): 'commonjs' | 'module';
|
|
22
|
+
runSync(container: IMidwayGlobalContainer, namespace: string): void;
|
|
24
23
|
}
|
|
25
24
|
/**
|
|
26
25
|
* ES module loader
|
|
@@ -32,6 +31,7 @@ export declare class CustomModuleDetector extends AbstractFileDetector<{
|
|
|
32
31
|
modules?: any[];
|
|
33
32
|
namespace?: string;
|
|
34
33
|
}> {
|
|
35
|
-
run(container:
|
|
34
|
+
run(container: IMidwayGlobalContainer): Promise<void>;
|
|
35
|
+
runSync(container: IMidwayGlobalContainer, namespace: string): void;
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=fileDetector.d.ts.map
|
|
@@ -5,15 +5,13 @@ const types_1 = require("../util/types");
|
|
|
5
5
|
const glob_1 = require("@midwayjs/glob");
|
|
6
6
|
const error_1 = require("../error");
|
|
7
7
|
const constants_1 = require("../constants");
|
|
8
|
-
const decorator_1 = require("../decorator");
|
|
9
8
|
const util_1 = require("../util");
|
|
9
|
+
const decorator_1 = require("../decorator");
|
|
10
|
+
const util_2 = require("util");
|
|
11
|
+
const debug = (0, util_2.debuglog)('midway:debug');
|
|
10
12
|
class AbstractFileDetector {
|
|
11
13
|
constructor(options) {
|
|
12
14
|
this.options = options;
|
|
13
|
-
this.extraDetectorOptions = {};
|
|
14
|
-
}
|
|
15
|
-
setExtraDetectorOptions(detectorOptions) {
|
|
16
|
-
this.extraDetectorOptions = detectorOptions;
|
|
17
15
|
}
|
|
18
16
|
}
|
|
19
17
|
exports.AbstractFileDetector = AbstractFileDetector;
|
|
@@ -38,29 +36,27 @@ class CommonJSFileDetector extends AbstractFileDetector {
|
|
|
38
36
|
super(...arguments);
|
|
39
37
|
this.duplicateModuleCheckSet = new Map();
|
|
40
38
|
}
|
|
41
|
-
run(container) {
|
|
39
|
+
async run(container, namespace) {
|
|
42
40
|
if (this.getType() === 'commonjs') {
|
|
43
|
-
return this.loadSync(container);
|
|
41
|
+
return this.loadSync(container, namespace);
|
|
44
42
|
}
|
|
45
43
|
else {
|
|
46
|
-
return this.loadAsync(container);
|
|
44
|
+
return this.loadAsync(container, namespace);
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
|
-
loadSync(container) {
|
|
50
|
-
var _a;
|
|
47
|
+
loadSync(container, namespace) {
|
|
51
48
|
this.options = this.options || {};
|
|
52
|
-
const loadDirs = [].concat(
|
|
49
|
+
const loadDirs = [].concat(this.options.loadDir ?? container.get('baseDir'));
|
|
53
50
|
for (const dir of loadDirs) {
|
|
54
|
-
const fileResults = (0, glob_1.run)(DEFAULT_GLOB_PATTERN.concat(this.options.pattern || [])
|
|
51
|
+
const fileResults = (0, glob_1.run)(DEFAULT_GLOB_PATTERN.concat(this.options.pattern || []), {
|
|
55
52
|
cwd: dir,
|
|
56
|
-
ignore: DEFAULT_IGNORE_PATTERN.concat(this.options.ignore || [])
|
|
53
|
+
ignore: DEFAULT_IGNORE_PATTERN.concat(this.options.ignore || []),
|
|
57
54
|
});
|
|
55
|
+
debug(`[core]: load file from ${dir}, files: ${fileResults}`);
|
|
58
56
|
// 检查重复模块
|
|
59
57
|
const checkDuplicatedHandler = (module, options) => {
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
types_1.Types.isClass(module)) {
|
|
63
|
-
const name = (0, decorator_1.getProviderName)(module);
|
|
58
|
+
if (this.options.conflictCheck && types_1.Types.isClass(module)) {
|
|
59
|
+
const name = decorator_1.DecoratorManager.getProviderName(module);
|
|
64
60
|
if (name) {
|
|
65
61
|
if (this.duplicateModuleCheckSet.has(name)) {
|
|
66
62
|
throw new error_1.MidwayDuplicateClassNameError(name, options.srcPath, this.duplicateModuleCheckSet.get(name));
|
|
@@ -75,7 +71,7 @@ class CommonJSFileDetector extends AbstractFileDetector {
|
|
|
75
71
|
const exports = require(file);
|
|
76
72
|
// add module to set
|
|
77
73
|
container.bindClass(exports, {
|
|
78
|
-
namespace
|
|
74
|
+
namespace,
|
|
79
75
|
srcPath: file,
|
|
80
76
|
createFrom: 'file',
|
|
81
77
|
bindHook: checkDuplicatedHandler,
|
|
@@ -85,21 +81,19 @@ class CommonJSFileDetector extends AbstractFileDetector {
|
|
|
85
81
|
// check end
|
|
86
82
|
this.duplicateModuleCheckSet.clear();
|
|
87
83
|
}
|
|
88
|
-
async loadAsync(container) {
|
|
89
|
-
var _a;
|
|
84
|
+
async loadAsync(container, namespace) {
|
|
90
85
|
this.options = this.options || {};
|
|
91
|
-
const loadDirs = [].concat(
|
|
86
|
+
const loadDirs = [].concat(this.options.loadDir ?? container.get('baseDir'));
|
|
92
87
|
for (const dir of loadDirs) {
|
|
93
|
-
const fileResults = (0, glob_1.run)(DEFAULT_GLOB_PATTERN.concat(this.options.pattern || [])
|
|
88
|
+
const fileResults = (0, glob_1.run)(DEFAULT_GLOB_PATTERN.concat(this.options.pattern || []), {
|
|
94
89
|
cwd: dir,
|
|
95
|
-
ignore: DEFAULT_IGNORE_PATTERN.concat(this.options.ignore || [])
|
|
90
|
+
ignore: DEFAULT_IGNORE_PATTERN.concat(this.options.ignore || []),
|
|
96
91
|
});
|
|
92
|
+
debug(`[core]: load file from ${dir}, files: ${fileResults}`);
|
|
97
93
|
// 检查重复模块
|
|
98
94
|
const checkDuplicatedHandler = (module, options) => {
|
|
99
|
-
if (
|
|
100
|
-
|
|
101
|
-
types_1.Types.isClass(module)) {
|
|
102
|
-
const name = (0, decorator_1.getProviderName)(module);
|
|
95
|
+
if (this.options.conflictCheck && types_1.Types.isClass(module)) {
|
|
96
|
+
const name = decorator_1.DecoratorManager.getProviderName(module);
|
|
103
97
|
if (name) {
|
|
104
98
|
if (this.duplicateModuleCheckSet.has(name)) {
|
|
105
99
|
throw new error_1.MidwayDuplicateClassNameError(name, options.srcPath, this.duplicateModuleCheckSet.get(name));
|
|
@@ -116,7 +110,7 @@ class CommonJSFileDetector extends AbstractFileDetector {
|
|
|
116
110
|
});
|
|
117
111
|
// add module to set
|
|
118
112
|
container.bindClass(exports, {
|
|
119
|
-
namespace
|
|
113
|
+
namespace,
|
|
120
114
|
srcPath: file,
|
|
121
115
|
createFrom: 'file',
|
|
122
116
|
bindHook: checkDuplicatedHandler,
|
|
@@ -129,6 +123,11 @@ class CommonJSFileDetector extends AbstractFileDetector {
|
|
|
129
123
|
getType() {
|
|
130
124
|
return 'commonjs';
|
|
131
125
|
}
|
|
126
|
+
runSync(container, namespace) {
|
|
127
|
+
if (this.getType() === 'commonjs') {
|
|
128
|
+
return this.loadSync(container, namespace);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
132
131
|
}
|
|
133
132
|
exports.CommonJSFileDetector = CommonJSFileDetector;
|
|
134
133
|
/**
|
|
@@ -142,6 +141,9 @@ class ESModuleFileDetector extends CommonJSFileDetector {
|
|
|
142
141
|
exports.ESModuleFileDetector = ESModuleFileDetector;
|
|
143
142
|
class CustomModuleDetector extends AbstractFileDetector {
|
|
144
143
|
async run(container) {
|
|
144
|
+
this.runSync(container, this.options.namespace);
|
|
145
|
+
}
|
|
146
|
+
runSync(container, namespace) {
|
|
145
147
|
for (const module of this.options.modules) {
|
|
146
148
|
container.bindClass(module, {
|
|
147
149
|
namespace: this.options.namespace,
|