@midwayjs/core 3.19.0 → 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.
Files changed (134) hide show
  1. package/dist/baseFramework.d.ts +7 -35
  2. package/dist/baseFramework.js +10 -52
  3. package/dist/common/applicationManager.d.ts +6 -6
  4. package/dist/common/applicationManager.js +18 -35
  5. package/dist/common/asyncContextManager.d.ts +15 -0
  6. package/dist/common/asyncContextManager.js +51 -2
  7. package/dist/common/dataListener.js +1 -1
  8. package/dist/common/dataSourceManager.js +3 -4
  9. package/dist/common/fileDetector.d.ts +9 -9
  10. package/dist/common/fileDetector.js +30 -28
  11. package/dist/common/filterManager.js +5 -4
  12. package/dist/common/guardManager.js +3 -2
  13. package/dist/common/middlewareManager.js +4 -3
  14. package/dist/common/performanceManager.js +1 -1
  15. package/dist/common/priorityManager.js +2 -2
  16. package/dist/common/serviceFactory.js +1 -1
  17. package/dist/common/webGenerator.js +4 -6
  18. package/dist/config/config.default.js +1 -1
  19. package/dist/constants.d.ts +2 -32
  20. package/dist/constants.js +3 -33
  21. package/dist/context/componentLoader.d.ts +20 -0
  22. package/dist/context/componentLoader.js +193 -0
  23. package/dist/context/container.d.ts +14 -29
  24. package/dist/context/container.js +68 -306
  25. package/dist/context/definitionRegistry.d.ts +3 -0
  26. package/dist/context/definitionRegistry.js +8 -15
  27. package/dist/context/managedResolverFactory.d.ts +15 -40
  28. package/dist/context/managedResolverFactory.js +263 -348
  29. package/dist/context/requestContainer.d.ts +22 -12
  30. package/dist/context/requestContainer.js +43 -51
  31. package/dist/decorator/common/aspect.js +4 -4
  32. package/dist/decorator/common/autoload.js +1 -1
  33. package/dist/decorator/common/configuration.d.ts +1 -24
  34. package/dist/decorator/common/configuration.js +6 -1
  35. package/dist/decorator/common/filter.js +6 -6
  36. package/dist/decorator/common/framework.d.ts +46 -3
  37. package/dist/decorator/common/framework.js +43 -9
  38. package/dist/decorator/common/guard.js +4 -9
  39. package/dist/decorator/common/inject.d.ts +4 -2
  40. package/dist/decorator/common/inject.js +87 -4
  41. package/dist/decorator/common/mock.js +1 -1
  42. package/dist/decorator/common/objectDef.d.ts +0 -5
  43. package/dist/decorator/common/objectDef.js +8 -20
  44. package/dist/decorator/common/provide.d.ts +1 -1
  45. package/dist/decorator/common/provide.js +1 -1
  46. package/dist/decorator/common/scope.d.ts +6 -0
  47. package/dist/decorator/common/scope.js +21 -0
  48. package/dist/decorator/constant.d.ts +14 -17
  49. package/dist/decorator/constant.js +23 -35
  50. package/dist/decorator/decoratorManager.d.ts +21 -294
  51. package/dist/decorator/decoratorManager.js +127 -694
  52. package/dist/decorator/faas/serverlessTrigger.js +5 -5
  53. package/dist/decorator/index.d.ts +2 -3
  54. package/dist/decorator/index.js +6 -4
  55. package/dist/decorator/metadataManager.d.ts +127 -0
  56. package/dist/decorator/metadataManager.js +465 -0
  57. package/dist/decorator/microservice/consumer.js +3 -2
  58. package/dist/decorator/microservice/kafkaListener.js +2 -1
  59. package/dist/decorator/microservice/provider.js +6 -5
  60. package/dist/decorator/microservice/rabbitmqListener.js +2 -1
  61. package/dist/decorator/task/queue.js +3 -2
  62. package/dist/decorator/task/schedule.js +3 -2
  63. package/dist/decorator/task/task.js +4 -3
  64. package/dist/decorator/task/taskLocal.js +4 -3
  65. package/dist/decorator/web/controller.js +3 -2
  66. package/dist/decorator/web/paramMapping.js +2 -2
  67. package/dist/decorator/web/requestMapping.js +5 -5
  68. package/dist/decorator/web/response.js +6 -5
  69. package/dist/decorator/ws/webSocketController.js +3 -2
  70. package/dist/decorator/ws/webSocketEvent.js +7 -6
  71. package/dist/definitions/functionDefinition.d.ts +3 -3
  72. package/dist/definitions/functionDefinition.js +12 -11
  73. package/dist/definitions/objectCreator.d.ts +5 -11
  74. package/dist/definitions/objectCreator.js +3 -27
  75. package/dist/definitions/objectDefinition.d.ts +2 -3
  76. package/dist/definitions/objectDefinition.js +1 -3
  77. package/dist/error/base.js +2 -2
  78. package/dist/error/framework.d.ts +1 -8
  79. package/dist/error/framework.js +9 -25
  80. package/dist/error/http.js +1 -1
  81. package/dist/functional/configuration.d.ts +14 -15
  82. package/dist/functional/configuration.js +37 -47
  83. package/dist/functional/hooks.d.ts +10 -0
  84. package/dist/functional/hooks.js +68 -0
  85. package/dist/functional/index.d.ts +3 -0
  86. package/dist/functional/index.js +22 -0
  87. package/dist/index.d.ts +3 -3
  88. package/dist/index.js +3 -6
  89. package/dist/interface.d.ts +80 -114
  90. package/dist/interface.js +9 -33
  91. package/dist/legacy/constants.d.ts +29 -0
  92. package/dist/legacy/constants.js +33 -0
  93. package/dist/legacy/decorator.d.ts +255 -0
  94. package/dist/legacy/decorator.js +468 -0
  95. package/dist/legacy/index.d.ts +3 -0
  96. package/dist/legacy/index.js +19 -0
  97. package/dist/legacy/types.d.ts +2 -0
  98. package/dist/legacy/types.js +3 -0
  99. package/dist/response/base.d.ts +1 -0
  100. package/dist/response/http.d.ts +1 -0
  101. package/dist/service/aspectService.js +11 -12
  102. package/dist/service/configService.js +2 -2
  103. package/dist/service/decoratorService.d.ts +3 -3
  104. package/dist/service/decoratorService.js +14 -10
  105. package/dist/service/environmentService.js +2 -2
  106. package/dist/service/frameworkService.d.ts +5 -4
  107. package/dist/service/frameworkService.js +30 -28
  108. package/dist/service/healthService.js +4 -4
  109. package/dist/service/informationService.js +3 -4
  110. package/dist/service/lifeCycleService.js +6 -17
  111. package/dist/service/loggerService.js +3 -4
  112. package/dist/service/middlewareService.js +7 -8
  113. package/dist/service/mockService.js +9 -15
  114. package/dist/service/slsFunctionService.d.ts +1 -14
  115. package/dist/service/slsFunctionService.js +33 -81
  116. package/dist/service/webRouterService.js +11 -11
  117. package/dist/setup.d.ts +5 -5
  118. package/dist/setup.js +75 -93
  119. package/dist/util/contextUtil.d.ts +2 -2
  120. package/dist/util/httpclient.d.ts +3 -2
  121. package/dist/util/index.d.ts +14 -0
  122. package/dist/util/index.js +159 -25
  123. package/dist/util/pathFileUtil.d.ts +14 -1
  124. package/dist/util/pathFileUtil.js +27 -6
  125. package/dist/util/webRouterParam.js +2 -2
  126. package/package.json +24 -6
  127. package/dist/decorator/common/pipeline.d.ts +0 -3
  128. package/dist/decorator/common/pipeline.js +0 -12
  129. package/dist/decorator/rpc/hsf.d.ts +0 -13
  130. package/dist/decorator/rpc/hsf.js +0 -20
  131. package/dist/definitions/properties.d.ts +0 -7
  132. package/dist/definitions/properties.js +0 -19
  133. package/dist/service/pipelineService.d.ts +0 -168
  134. package/dist/service/pipelineService.js +0 -254
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GuardManager = void 0;
4
4
  const decorator_1 = require("../decorator");
5
+ const metadataManager_1 = require("../decorator/metadataManager");
5
6
  class GuardManager extends Array {
6
7
  addGlobalGuard(guards) {
7
8
  if (!Array.isArray(guards)) {
@@ -21,7 +22,7 @@ class GuardManager extends Array {
21
22
  }
22
23
  }
23
24
  // check class Guard
24
- const classGuardList = (0, decorator_1.getClassMetadata)(decorator_1.GUARD_KEY, supplierClz);
25
+ const classGuardList = metadataManager_1.MetadataManager.getOwnMetadata(decorator_1.GUARD_KEY, supplierClz);
25
26
  if (classGuardList) {
26
27
  for (const Guard of classGuardList) {
27
28
  const guard = await ctx.requestContext.getAsync(Guard);
@@ -32,7 +33,7 @@ class GuardManager extends Array {
32
33
  }
33
34
  }
34
35
  // check method Guard
35
- const methodGuardList = (0, decorator_1.getPropertyMetadata)(decorator_1.GUARD_KEY, supplierClz, methodName);
36
+ const methodGuardList = metadataManager_1.MetadataManager.getOwnMetadata(decorator_1.GUARD_KEY, supplierClz, methodName);
36
37
  if (methodGuardList) {
37
38
  for (const Guard of methodGuardList) {
38
39
  const guard = await ctx.requestContext.getAsync(Guard);
@@ -151,11 +151,12 @@ class ContextMiddlewareManager extends Array {
151
151
  * @param middleware
152
152
  */
153
153
  getMiddlewareName(middleware) {
154
- var _a, _b, _c;
155
154
  if (middleware['middleware']) {
156
- return ((_a = middleware.name) !== null && _a !== void 0 ? _a : this.getMiddlewareName(middleware['middleware']));
155
+ return (middleware.name ?? this.getMiddlewareName(middleware['middleware']));
157
156
  }
158
- return ((_c = (_b = (middleware.getName && middleware.getName())) !== null && _b !== void 0 ? _b : middleware._name) !== null && _c !== void 0 ? _c : middleware.name);
157
+ return ((middleware.getName && middleware.getName()) ??
158
+ middleware._name ??
159
+ middleware.name);
159
160
  }
160
161
  /**
161
162
  * remove a middleware
@@ -82,7 +82,7 @@ class MidwayPerformanceManager {
82
82
  }
83
83
  static getInitialPerformanceEntries() {
84
84
  const entries = [];
85
- perf_hooks_1.performance === null || perf_hooks_1.performance === void 0 ? void 0 : perf_hooks_1.performance.getEntries().forEach(entry => {
85
+ perf_hooks_1.performance?.getEntries().forEach(entry => {
86
86
  if (entry.name.startsWith(this.DEFAULT_GROUP.INITIALIZE)) {
87
87
  entries.push(entry.toJSON());
88
88
  }
@@ -38,9 +38,9 @@ let MidwayPriorityManager = class MidwayPriorityManager {
38
38
  return priority || this.getDefaultPriority();
39
39
  }
40
40
  };
41
- MidwayPriorityManager = __decorate([
41
+ exports.MidwayPriorityManager = MidwayPriorityManager;
42
+ exports.MidwayPriorityManager = MidwayPriorityManager = __decorate([
42
43
  (0, decorator_1.Provide)(),
43
44
  (0, decorator_1.Scope)(interface_1.ScopeEnum.Singleton)
44
45
  ], MidwayPriorityManager);
45
- exports.MidwayPriorityManager = MidwayPriorityManager;
46
46
  //# sourceMappingURL=priorityManager.js.map
@@ -83,9 +83,9 @@ class ServiceFactory {
83
83
  return this.priorityManager.isLowPriority(this.clientPriority[name]);
84
84
  }
85
85
  }
86
+ exports.ServiceFactory = ServiceFactory;
86
87
  __decorate([
87
88
  (0, decorator_1.Inject)(),
88
89
  __metadata("design:type", priorityManager_1.MidwayPriorityManager)
89
90
  ], ServiceFactory.prototype, "priorityManager", void 0);
90
- exports.ServiceFactory = ServiceFactory;
91
91
  //# sourceMappingURL=serviceFactory.js.map
@@ -9,7 +9,6 @@ exports.WebControllerGenerator = void 0;
9
9
  */
10
10
  const decorator_1 = require("../decorator");
11
11
  const util = require("util");
12
- const interface_1 = require("../interface");
13
12
  const error_1 = require("../error");
14
13
  const middlewareService_1 = require("../service/middlewareService");
15
14
  const debug = util.debuglog('midway:debug');
@@ -61,7 +60,7 @@ class WebControllerGenerator {
61
60
  ctx.status = routerRes.code;
62
61
  break;
63
62
  case decorator_1.WEB_RESPONSE_HEADER:
64
- for (const key in (routerRes === null || routerRes === void 0 ? void 0 : routerRes.setHeaders) || {}) {
63
+ for (const key in routerRes?.setHeaders || {}) {
65
64
  ctx.set(key, routerRes.setHeaders[key]);
66
65
  }
67
66
  break;
@@ -78,7 +77,6 @@ class WebControllerGenerator {
78
77
  };
79
78
  }
80
79
  async loadMidwayController(routerHandler) {
81
- var _a, _b;
82
80
  const routerTable = await this.midwayWebRouterService.getRouterTable();
83
81
  const routerList = await this.midwayWebRouterService.getRoutePriorityList();
84
82
  const applicationContext = this.app.getApplicationContext();
@@ -95,7 +93,7 @@ class WebControllerGenerator {
95
93
  ...routerInfo.routerOptions,
96
94
  });
97
95
  // add router middleware
98
- routerInfo.middleware = (_a = routerInfo.middleware) !== null && _a !== void 0 ? _a : [];
96
+ routerInfo.middleware = routerInfo.middleware ?? [];
99
97
  if (routerInfo.middleware.length) {
100
98
  const routerMiddlewareFn = await middlewareService.compose(routerInfo.middleware, this.app);
101
99
  newRouter.use(routerMiddlewareFn);
@@ -105,12 +103,12 @@ class WebControllerGenerator {
105
103
  for (const routeInfo of routes) {
106
104
  // get middleware
107
105
  const methodMiddlewares = [];
108
- routeInfo.middleware = (_b = routeInfo.middleware) !== null && _b !== void 0 ? _b : [];
106
+ routeInfo.middleware = routeInfo.middleware ?? [];
109
107
  if (routeInfo.middleware.length) {
110
108
  const routeMiddlewareFn = await middlewareService.compose(routeInfo.middleware, this.app);
111
109
  methodMiddlewares.push(routeMiddlewareFn);
112
110
  }
113
- if (this.app.getFrameworkType() === interface_1.MidwayFrameworkType.WEB_KOA) {
111
+ if (this.app.getNamespace() === 'koa') {
114
112
  // egg use path-to-regexp v1 but koa use v6
115
113
  if (typeof routeInfo.url === 'string' && /\*$/.test(routeInfo.url)) {
116
114
  routeInfo.url = routeInfo.url.replace('*', '(.*)');
@@ -8,7 +8,7 @@ exports.default = (appInfo) => {
8
8
  healthCheckTimeout: 1000,
9
9
  },
10
10
  asyncContextManager: {
11
- enable: false,
11
+ enable: true,
12
12
  },
13
13
  midwayLogger: {
14
14
  default: {
@@ -3,39 +3,8 @@
3
3
  *
4
4
  */
5
5
  export declare const KEYS: {
6
- OBJECTS_ELEMENT: string;
7
- OBJECT_ELEMENT: string;
8
- IMPORT_ELEMENT: string;
9
- PROPERTY_ELEMENT: string;
10
- LIST_ELEMENT: string;
11
- MAP_ELEMENT: string;
12
- ENTRY_ELEMENT: string;
13
- VALUE_ELEMENT: string;
14
- PROPS_ELEMENT: string;
15
- PROP_ELEMENT: string;
16
- SET_ELEMENT: string;
17
- CONSTRUCTOR_ARG_ELEMENT: string;
18
6
  REF_ELEMENT: string;
19
- JSON_ELEMENT: string;
20
- CONFIGURATION_ELEMENT: string;
21
- ID_ATTRIBUTE: string;
22
- PATH_ATTRIBUTE: string;
23
- DIRECT_ATTRIBUTE: string;
24
- AUTOWIRE_ATTRIBUTE: string;
25
- ASYNC_ATTRIBUTE: string;
26
- NAME_ATTRIBUTE: string;
27
- REF_ATTRIBUTE: string;
28
- KEY_ATTRIBUTE: string;
29
- VALUE_ATTRIBUTE: string;
30
- TYPE_ATTRIBUTE: string;
31
- EXTERNAL_ATTRIBUTE: string;
32
- OBJECT_ATTRIBUTE: string;
33
- RESOURCE_ATTRIBUTE: string;
34
- SCOPE_ATTRIBUTE: string;
35
- ASPECT_ELEMENT: string;
36
- AROUND_ELEMENT: string;
37
- EXPRESSION_ATTRIBUTE: string;
38
- EXECUTE_ATTRIBUTE: string;
7
+ REF_CUSTOM: string;
39
8
  };
40
9
  export declare const FUNCTION_INJECT_KEY = "midway:function_inject_key";
41
10
  export declare const MIDWAY_LOGGER_WRITEABLE_DIR = "MIDWAY_LOGGER_WRITEABLE_DIR";
@@ -44,6 +13,7 @@ export declare const REQUEST_OBJ_CTX_KEY = "_req_ctx";
44
13
  export declare const CONTAINER_OBJ_SCOPE = "_obj_scope";
45
14
  export declare const HTTP_SERVER_KEY = "_midway_http_server";
46
15
  export declare const REQUEST_CTX_LOGGER_CACHE_KEY = "_midway_ctx_logger_cache";
16
+ export declare const REQUEST_CTX_UNIQUE_KEY = "_midway_ctx_unique_key";
47
17
  export declare const ASYNC_CONTEXT_KEY: unique symbol;
48
18
  export declare const ASYNC_CONTEXT_MANAGER_KEY = "MIDWAY_ASYNC_CONTEXT_MANAGER_KEY";
49
19
  export declare const DEFAULT_PATTERN: string[];
package/dist/constants.js CHANGED
@@ -1,44 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SINGLETON_CONTAINER_CTX = exports.IGNORE_PATTERN = exports.DEFAULT_PATTERN = exports.ASYNC_CONTEXT_MANAGER_KEY = exports.ASYNC_CONTEXT_KEY = exports.REQUEST_CTX_LOGGER_CACHE_KEY = exports.HTTP_SERVER_KEY = exports.CONTAINER_OBJ_SCOPE = exports.REQUEST_OBJ_CTX_KEY = exports.REQUEST_CTX_KEY = exports.MIDWAY_LOGGER_WRITEABLE_DIR = exports.FUNCTION_INJECT_KEY = exports.KEYS = void 0;
3
+ exports.SINGLETON_CONTAINER_CTX = exports.IGNORE_PATTERN = exports.DEFAULT_PATTERN = exports.ASYNC_CONTEXT_MANAGER_KEY = exports.ASYNC_CONTEXT_KEY = exports.REQUEST_CTX_UNIQUE_KEY = exports.REQUEST_CTX_LOGGER_CACHE_KEY = exports.HTTP_SERVER_KEY = exports.CONTAINER_OBJ_SCOPE = exports.REQUEST_OBJ_CTX_KEY = exports.REQUEST_CTX_KEY = exports.MIDWAY_LOGGER_WRITEABLE_DIR = exports.FUNCTION_INJECT_KEY = exports.KEYS = void 0;
4
4
  /**
5
5
  * 静态参数
6
6
  *
7
7
  */
8
8
  exports.KEYS = {
9
- OBJECTS_ELEMENT: 'objects',
10
- OBJECT_ELEMENT: 'object',
11
- IMPORT_ELEMENT: 'import',
12
- PROPERTY_ELEMENT: 'property',
13
- LIST_ELEMENT: 'list',
14
- MAP_ELEMENT: 'map',
15
- ENTRY_ELEMENT: 'entry',
16
- VALUE_ELEMENT: 'value',
17
- PROPS_ELEMENT: 'props',
18
- PROP_ELEMENT: 'prop',
19
- SET_ELEMENT: 'set',
20
- CONSTRUCTOR_ARG_ELEMENT: 'constructor-arg',
21
9
  REF_ELEMENT: 'ref',
22
- JSON_ELEMENT: 'json',
23
- CONFIGURATION_ELEMENT: 'configuration',
24
- ID_ATTRIBUTE: 'id',
25
- PATH_ATTRIBUTE: 'path',
26
- DIRECT_ATTRIBUTE: 'direct',
27
- AUTOWIRE_ATTRIBUTE: 'autowire',
28
- ASYNC_ATTRIBUTE: 'async',
29
- NAME_ATTRIBUTE: 'name',
30
- REF_ATTRIBUTE: 'ref',
31
- KEY_ATTRIBUTE: 'key',
32
- VALUE_ATTRIBUTE: 'value',
33
- TYPE_ATTRIBUTE: 'type',
34
- EXTERNAL_ATTRIBUTE: 'external',
35
- OBJECT_ATTRIBUTE: 'object',
36
- RESOURCE_ATTRIBUTE: 'resource',
37
- SCOPE_ATTRIBUTE: 'scope',
38
- ASPECT_ELEMENT: 'aspect',
39
- AROUND_ELEMENT: 'around',
40
- EXPRESSION_ATTRIBUTE: 'expression',
41
- EXECUTE_ATTRIBUTE: 'execute',
10
+ REF_CUSTOM: 'ref_custom',
42
11
  };
43
12
  exports.FUNCTION_INJECT_KEY = 'midway:function_inject_key';
44
13
  exports.MIDWAY_LOGGER_WRITEABLE_DIR = 'MIDWAY_LOGGER_WRITEABLE_DIR';
@@ -47,6 +16,7 @@ exports.REQUEST_OBJ_CTX_KEY = '_req_ctx';
47
16
  exports.CONTAINER_OBJ_SCOPE = '_obj_scope';
48
17
  exports.HTTP_SERVER_KEY = '_midway_http_server';
49
18
  exports.REQUEST_CTX_LOGGER_CACHE_KEY = '_midway_ctx_logger_cache';
19
+ exports.REQUEST_CTX_UNIQUE_KEY = '_midway_ctx_unique_key';
50
20
  exports.ASYNC_CONTEXT_KEY = Symbol('ASYNC_CONTEXT_KEY');
51
21
  exports.ASYNC_CONTEXT_MANAGER_KEY = 'MIDWAY_ASYNC_CONTEXT_MANAGER_KEY';
52
22
  exports.DEFAULT_PATTERN = [
@@ -0,0 +1,20 @@
1
+ import { IMidwayGlobalContainer } from '../interface';
2
+ export declare class ComponentConfigurationLoader {
3
+ readonly container: IMidwayGlobalContainer;
4
+ private loadedMap;
5
+ private namespaceList;
6
+ constructor(container: IMidwayGlobalContainer);
7
+ load(module: any): Promise<void>;
8
+ loadSync(module: any): void;
9
+ private addImportConfigs;
10
+ private addImportConfigFilter;
11
+ private addImports;
12
+ /**
13
+ * 注册 importObjects
14
+ * @param objs configuration 中的 importObjects
15
+ */
16
+ private addImportObjects;
17
+ private getConfigurationExport;
18
+ getNamespaceList(): any[];
19
+ }
20
+ //# sourceMappingURL=componentLoader.d.ts.map
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentConfigurationLoader = void 0;
4
+ const decorator_1 = require("../decorator");
5
+ const metadataManager_1 = require("../decorator/metadataManager");
6
+ const configService_1 = require("../service/configService");
7
+ const environmentService_1 = require("../service/environmentService");
8
+ const util = require("util");
9
+ const util_1 = require("../util");
10
+ const debug = util.debuglog('midway:debug');
11
+ class ComponentConfigurationLoader {
12
+ constructor(container) {
13
+ this.container = container;
14
+ this.loadedMap = new WeakMap();
15
+ this.namespaceList = [];
16
+ }
17
+ async load(module) {
18
+ let namespace = decorator_1.MAIN_MODULE_KEY;
19
+ // 可能导出多个
20
+ const configurationExports = this.getConfigurationExport(module);
21
+ if (!configurationExports.length)
22
+ return;
23
+ // 多个的情况,数据交给第一个保存
24
+ for (let i = 0; i < configurationExports.length; i++) {
25
+ const configurationExport = configurationExports[i];
26
+ if (this.loadedMap.get(configurationExport)) {
27
+ // 已经加载过就跳过循环
28
+ continue;
29
+ }
30
+ let configurationOptions;
31
+ // 函数式写法
32
+ if (metadataManager_1.MetadataManager.hasOwnMetadata(decorator_1.CONFIGURATION_OBJECT_KEY, configurationExport)) {
33
+ // 函数式写法
34
+ configurationOptions = metadataManager_1.MetadataManager.getOwnMetadata(decorator_1.CONFIGURATION_OBJECT_KEY, configurationExport);
35
+ }
36
+ else {
37
+ // 普通类写法
38
+ configurationOptions = metadataManager_1.MetadataManager.getOwnMetadata(decorator_1.CONFIGURATION_KEY, configurationExport);
39
+ }
40
+ // 已加载标记,防止死循环
41
+ this.loadedMap.set(configurationExport, true);
42
+ if (configurationOptions) {
43
+ if (configurationOptions.namespace !== undefined) {
44
+ namespace = configurationOptions.namespace;
45
+ this.namespaceList.push(namespace);
46
+ }
47
+ debug(`[core]: load configuration in namespace="${namespace}"`);
48
+ this.addImports(configurationOptions.imports);
49
+ this.addImportObjects(configurationOptions.importObjects);
50
+ this.addImportConfigs(configurationOptions.importConfigs);
51
+ this.addImportConfigFilter(configurationOptions.importConfigFilter);
52
+ if (configurationOptions.detector) {
53
+ await configurationOptions.detector.run(this.container, namespace);
54
+ }
55
+ decorator_1.DecoratorManager.saveModule(decorator_1.CONFIGURATION_KEY, {
56
+ target: configurationExport,
57
+ namespace,
58
+ });
59
+ }
60
+ }
61
+ // bind module
62
+ this.container.bindClass(module, {
63
+ namespace,
64
+ });
65
+ }
66
+ loadSync(module) {
67
+ let namespace = decorator_1.MAIN_MODULE_KEY;
68
+ // 可能导出多个
69
+ const configurationExports = this.getConfigurationExport(module);
70
+ if (!configurationExports.length)
71
+ return;
72
+ // 多个的情况,数据交给第一个保存
73
+ for (let i = 0; i < configurationExports.length; i++) {
74
+ const configurationExport = configurationExports[i];
75
+ if (this.loadedMap.get(configurationExport)) {
76
+ // 已经加载过就跳过循环
77
+ continue;
78
+ }
79
+ let configurationOptions;
80
+ // 函数式写法
81
+ if (metadataManager_1.MetadataManager.hasOwnMetadata(decorator_1.CONFIGURATION_OBJECT_KEY, configurationExport)) {
82
+ // 函数式写法
83
+ configurationOptions = metadataManager_1.MetadataManager.getOwnMetadata(decorator_1.CONFIGURATION_OBJECT_KEY, configurationExport);
84
+ }
85
+ else {
86
+ // 普通类写法
87
+ configurationOptions = metadataManager_1.MetadataManager.getOwnMetadata(decorator_1.CONFIGURATION_KEY, configurationExport);
88
+ }
89
+ // 已加载标记,防止死循环
90
+ this.loadedMap.set(configurationExport, true);
91
+ if (configurationOptions) {
92
+ if (configurationOptions.namespace !== undefined) {
93
+ namespace = configurationOptions.namespace;
94
+ this.namespaceList.push(namespace);
95
+ }
96
+ debug(`[core]: load configuration in namespace="${namespace}"`);
97
+ this.addImports(configurationOptions.imports);
98
+ this.addImportObjects(configurationOptions.importObjects);
99
+ this.addImportConfigs(configurationOptions.importConfigs);
100
+ this.addImportConfigFilter(configurationOptions.importConfigFilter);
101
+ if (configurationOptions.detector) {
102
+ configurationOptions.detector.runSync(this.container, namespace);
103
+ }
104
+ decorator_1.DecoratorManager.saveModule(decorator_1.CONFIGURATION_KEY, {
105
+ target: configurationExport,
106
+ namespace,
107
+ });
108
+ }
109
+ }
110
+ // bind module
111
+ this.container.bindClass(module, {
112
+ namespace,
113
+ });
114
+ }
115
+ addImportConfigs(importConfigs) {
116
+ if (importConfigs) {
117
+ if (Array.isArray(importConfigs)) {
118
+ this.container.get(configService_1.MidwayConfigService).add(importConfigs);
119
+ }
120
+ else {
121
+ this.container.get(configService_1.MidwayConfigService).addObject(importConfigs);
122
+ }
123
+ }
124
+ }
125
+ addImportConfigFilter(importConfigFilter) {
126
+ if (importConfigFilter) {
127
+ this.container.get(configService_1.MidwayConfigService).addFilter(importConfigFilter);
128
+ }
129
+ }
130
+ addImports(imports = []) {
131
+ // 处理 imports
132
+ for (let importPackage of imports) {
133
+ if (!importPackage)
134
+ continue;
135
+ if (typeof importPackage === 'string') {
136
+ importPackage = require(importPackage);
137
+ }
138
+ if ('Configuration' in importPackage) {
139
+ // component is object
140
+ this.load(importPackage);
141
+ }
142
+ else if ('component' in importPackage) {
143
+ if (importPackage?.enabledEnvironment) {
144
+ if (importPackage?.enabledEnvironment?.includes(this.container
145
+ .get(environmentService_1.MidwayEnvironmentService)
146
+ .getCurrentEnvironment())) {
147
+ this.load(importPackage.component);
148
+ }
149
+ }
150
+ else {
151
+ this.load(importPackage.component);
152
+ }
153
+ }
154
+ else {
155
+ this.load(importPackage);
156
+ }
157
+ }
158
+ }
159
+ /**
160
+ * 注册 importObjects
161
+ * @param objs configuration 中的 importObjects
162
+ */
163
+ addImportObjects(objs) {
164
+ if (objs) {
165
+ const keys = Object.keys(objs);
166
+ for (const key of keys) {
167
+ if (typeof objs[key] !== undefined) {
168
+ this.container.registerObject(key, objs[key]);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ getConfigurationExport(exports) {
174
+ const mods = [];
175
+ if ((0, util_1.isConfigurationExport)(exports)) {
176
+ mods.push(exports);
177
+ }
178
+ else {
179
+ for (const m in exports) {
180
+ const module = exports[m];
181
+ if ((0, util_1.isConfigurationExport)(module)) {
182
+ mods.push(module);
183
+ }
184
+ }
185
+ }
186
+ return mods;
187
+ }
188
+ getNamespaceList() {
189
+ return this.namespaceList;
190
+ }
191
+ }
192
+ exports.ComponentConfigurationLoader = ComponentConfigurationLoader;
193
+ //# sourceMappingURL=componentLoader.js.map
@@ -1,50 +1,36 @@
1
1
  /// <reference types="node" />
2
- import { IFileDetector, IIdentifierRelationShip, IMidwayContainer, IModuleStore, IObjectDefinition, IObjectDefinitionRegistry, ObjectContext, ObjectIdentifier, ScopeEnum } from '../interface';
2
+ import { ClassType, IIdentifierRelationShip, IMidwayContainer, IMidwayGlobalContainer, IObjectDefinition, IObjectDefinitionRegistry, ObjectIdentifier, ScopeEnum } from '../interface';
3
3
  import { ManagedResolverFactory } from './managedResolverFactory';
4
- import * as EventEmitter from 'events';
5
- export declare class MidwayContainer implements IMidwayContainer, IModuleStore {
4
+ import { EventEmitter } from 'events';
5
+ export declare class MidwayContainer implements IMidwayGlobalContainer {
6
6
  private _resolverFactory;
7
7
  private _registry;
8
8
  private _identifierMapping;
9
- private moduleMap;
10
9
  private _objectCreateEventTarget;
11
- parent: IMidwayContainer;
12
10
  protected ctx: {
13
11
  _MAIN_CTX_: boolean;
14
12
  };
15
- private fileDetector;
16
13
  private attrMap;
17
- private _namespaceSet;
18
- constructor(parent?: IMidwayContainer);
19
- protected init(): void;
14
+ private namespaceSet;
15
+ private _id;
16
+ get id(): string;
17
+ constructor();
20
18
  get objectCreateEventTarget(): EventEmitter<[never]>;
21
19
  get registry(): IObjectDefinitionRegistry;
22
20
  set registry(registry: IObjectDefinitionRegistry);
23
- get managedResolverFactory(): ManagedResolverFactory;
24
21
  get identifierMapping(): IIdentifierRelationShip;
25
- get namespaceSet(): Set<string>;
26
- load(module: any): void;
27
- protected loadDefinitions(): void | Promise<void>;
22
+ addNamespace(ns: string): void;
28
23
  bindClass(exports: any, options?: Partial<IObjectDefinition>): void;
29
24
  bind<T>(target: T, options?: Partial<IObjectDefinition>): void;
30
25
  bind<T>(identifier: ObjectIdentifier, target: T, options?: Partial<IObjectDefinition>): void;
31
26
  protected bindModule(module: any, options: Partial<IObjectDefinition>): void;
32
- setFileDetector(fileDetector: IFileDetector): void;
33
- createChild(): IMidwayContainer;
34
27
  setAttr(key: string, value: any): void;
35
28
  getAttr<T>(key: string): T;
36
- protected getIdentifier(target: any): string;
37
- protected getManagedResolverFactory(): ManagedResolverFactory;
29
+ getIdentifier(identifier: ClassType | string): string;
30
+ getManagedResolverFactory(): ManagedResolverFactory;
38
31
  stop(): Promise<void>;
39
- ready(): void | Promise<void>;
40
- get<T>(identifier: {
41
- new (...args: any[]): T;
42
- }, args?: any[], objectContext?: ObjectContext): T;
43
- get<T>(identifier: ObjectIdentifier, args?: any[], objectContext?: ObjectContext): T;
44
- getAsync<T>(identifier: {
45
- new (...args: any[]): T;
46
- }, args?: any[], objectContext?: ObjectContext): Promise<T>;
47
- getAsync<T>(identifier: ObjectIdentifier, args?: any[], objectContext?: ObjectContext): Promise<T>;
32
+ get<T>(identifier: ClassType<T> | string, args?: any[]): T;
33
+ getAsync<T>(identifier: ClassType<T> | string, args?: any[]): Promise<T>;
48
34
  /**
49
35
  * proxy registry.registerObject
50
36
  * @param {ObjectIdentifier} identifier
@@ -74,13 +60,12 @@ export declare class MidwayContainer implements IMidwayContainer, IModuleStore {
74
60
  context: IMidwayContainer;
75
61
  definition: IObjectDefinition;
76
62
  }) => void): void;
77
- saveModule(key: any, module: any): void;
78
- listModule(key: string): unknown[];
79
- transformModule(moduleMap: Map<string, Set<any>>): void;
80
63
  hasNamespace(ns: string): boolean;
81
64
  getNamespaceList(): string[];
82
65
  hasDefinition(identifier: ObjectIdentifier): boolean;
66
+ getDefinition(identifier: ObjectIdentifier): IObjectDefinition;
83
67
  hasObject(identifier: ObjectIdentifier): boolean;
68
+ getObject<T>(identifier: ObjectIdentifier): T;
84
69
  getInstanceScope(instance: any): ScopeEnum | undefined;
85
70
  }
86
71
  //# sourceMappingURL=container.d.ts.map