@midwayjs/core 3.0.0-beta.8 → 3.0.2

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 (97) hide show
  1. package/dist/baseFramework.d.ts +2 -1
  2. package/dist/baseFramework.js +13 -10
  3. package/dist/baseFramework.js.map +1 -0
  4. package/dist/common/applicationManager.d.ts +11 -0
  5. package/dist/common/applicationManager.js +70 -0
  6. package/dist/common/applicationManager.js.map +1 -0
  7. package/dist/common/constants.js.map +1 -0
  8. package/dist/common/dataListener.d.ts +11 -0
  9. package/dist/common/dataListener.js +43 -0
  10. package/dist/common/dataListener.js.map +1 -0
  11. package/dist/common/fileDetector.js +1 -1
  12. package/dist/common/fileDetector.js.map +1 -0
  13. package/dist/common/filterManager.js.map +1 -0
  14. package/dist/common/middlewareManager.js +2 -2
  15. package/dist/common/middlewareManager.js.map +1 -0
  16. package/dist/common/serviceFactory.js.map +1 -0
  17. package/dist/common/triggerCollector.js.map +1 -0
  18. package/dist/common/webGenerator.d.ts +3 -14
  19. package/dist/common/webGenerator.js +21 -33
  20. package/dist/common/webGenerator.js.map +1 -0
  21. package/dist/common/webRouterCollector.js +7 -3
  22. package/dist/common/webRouterCollector.js.map +1 -0
  23. package/dist/config/config.default.js.map +1 -0
  24. package/dist/context/container.js +28 -13
  25. package/dist/context/container.js.map +1 -0
  26. package/dist/context/definitionRegistry.js.map +1 -0
  27. package/dist/context/managedResolverFactory.d.ts +1 -0
  28. package/dist/context/managedResolverFactory.js +20 -5
  29. package/dist/context/managedResolverFactory.js.map +1 -0
  30. package/dist/context/providerWrapper.js.map +1 -0
  31. package/dist/context/requestContainer.js +2 -0
  32. package/dist/context/requestContainer.js.map +1 -0
  33. package/dist/definitions/functionDefinition.d.ts +1 -0
  34. package/dist/definitions/functionDefinition.js +1 -0
  35. package/dist/definitions/functionDefinition.js.map +1 -0
  36. package/dist/definitions/objectCreator.js +9 -8
  37. package/dist/definitions/objectCreator.js.map +1 -0
  38. package/dist/definitions/objectDefinition.d.ts +1 -0
  39. package/dist/definitions/objectDefinition.js +1 -0
  40. package/dist/definitions/objectDefinition.js.map +1 -0
  41. package/dist/definitions/properties.js.map +1 -0
  42. package/dist/error/base.d.ts +22 -3
  43. package/dist/error/base.js +34 -5
  44. package/dist/error/base.js.map +1 -0
  45. package/dist/error/framework.d.ts +27 -2
  46. package/dist/error/framework.js +51 -14
  47. package/dist/error/framework.js.map +1 -0
  48. package/dist/error/http.d.ts +146 -41
  49. package/dist/error/http.js +164 -31
  50. package/dist/error/http.js.map +1 -0
  51. package/dist/error/index.d.ts +1 -1
  52. package/dist/error/index.js +4 -1
  53. package/dist/error/index.js.map +1 -0
  54. package/dist/functional/configuration.d.ts +2 -0
  55. package/dist/functional/configuration.js +10 -0
  56. package/dist/functional/configuration.js.map +1 -0
  57. package/dist/index.d.ts +3 -0
  58. package/dist/index.js +5 -1
  59. package/dist/index.js.map +1 -0
  60. package/dist/interface.d.ts +51 -29
  61. package/dist/interface.js.map +1 -0
  62. package/dist/service/aspectService.js +1 -1
  63. package/dist/service/aspectService.js.map +1 -0
  64. package/dist/service/configService.d.ts +3 -1
  65. package/dist/service/configService.js +23 -17
  66. package/dist/service/configService.js.map +1 -0
  67. package/dist/service/decoratorService.js +25 -13
  68. package/dist/service/decoratorService.js.map +1 -0
  69. package/dist/service/environmentService.d.ts +1 -1
  70. package/dist/service/environmentService.js.map +1 -0
  71. package/dist/service/frameworkService.d.ts +3 -2
  72. package/dist/service/frameworkService.js +17 -12
  73. package/dist/service/frameworkService.js.map +1 -0
  74. package/dist/service/informationService.js.map +1 -0
  75. package/dist/service/lifeCycleService.js +5 -5
  76. package/dist/service/lifeCycleService.js.map +1 -0
  77. package/dist/service/loggerService.d.ts +1 -1
  78. package/dist/service/loggerService.js.map +1 -0
  79. package/dist/service/middlewareService.d.ts +3 -4
  80. package/dist/service/middlewareService.js +7 -11
  81. package/dist/service/middlewareService.js.map +1 -0
  82. package/dist/service/pipelineService.js.map +1 -0
  83. package/dist/setup.js +13 -5
  84. package/dist/setup.js.map +1 -0
  85. package/dist/util/contextUtil.js.map +1 -0
  86. package/dist/util/extend.d.ts +2 -0
  87. package/dist/util/extend.js +55 -0
  88. package/dist/util/extend.js.map +1 -0
  89. package/dist/util/index.js.map +1 -0
  90. package/dist/util/pathFileUtil.js.map +1 -0
  91. package/dist/util/pathToRegexp.js.map +1 -0
  92. package/dist/util/webRouterParam.js +24 -4
  93. package/dist/util/webRouterParam.js.map +1 -0
  94. package/package.json +12 -13
  95. package/CHANGELOG.md +0 -2197
  96. package/dist/error/code.d.ts +0 -60
  97. package/dist/error/code.js +0 -65
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webRouterCollector.js","sourceRoot":"","sources":["../../src/common/webRouterCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CONTROLLER_KEY,\n ControllerOption,\n FaaSMetadata,\n FUNC_KEY,\n getClassMetadata,\n getPropertyDataFromClass,\n getPropertyMetadata,\n getProviderName,\n getProviderUUId,\n Types,\n listModule,\n RouterOption,\n ServerlessTriggerType,\n SERVERLESS_FUNC_KEY,\n WEB_RESPONSE_KEY,\n WEB_ROUTER_KEY,\n WEB_ROUTER_PARAM_KEY,\n} from '@midwayjs/decorator';\nimport { joinURLPath } from '../util';\nimport { MidwayContainer } from '../context/container';\nimport { DirectoryFileDetector } from './fileDetector';\nimport * as util from 'util';\nimport { MidwayCommonError, MidwayDuplicateRouteError } from '../error';\n\nconst debug = util.debuglog('midway:debug');\n\nexport interface RouterInfo {\n /**\n * uuid\n */\n id: string;\n /**\n * router prefix from controller\n */\n prefix: string;\n /**\n * router alias name\n */\n routerName: string;\n /**\n * router path, without prefix\n */\n url: string | RegExp;\n /**\n * request method for http, like get/post/delete\n */\n requestMethod: string;\n /**\n * invoke function method\n */\n method: string;\n /**\n * router description\n */\n description: string;\n summary: string;\n /**\n * router handler function key,for IoC container load\n */\n handlerName: string;\n /**\n * serverless func load key\n */\n funcHandlerName: string;\n /**\n * controller provideId\n */\n controllerId: string;\n /**\n * router middleware\n */\n middleware: any[];\n /**\n * controller middleware in this router\n */\n controllerMiddleware: any[];\n /**\n * request args metadata\n */\n requestMetadata: any[];\n /**\n * response data metadata\n */\n responseMetadata: any[];\n /**\n * serverless function name\n */\n functionName?: string;\n /**\n * serverless trigger name\n */\n functionTriggerName?: string;\n /**\n * serverless function trigger metadata\n */\n functionTriggerMetadata?: any;\n /**\n * serverless function metadata\n */\n functionMetadata?: any;\n}\n\nexport interface RouterPriority {\n prefix: string;\n priority: number;\n middleware: any[];\n routerOptions: any;\n controllerId: string;\n /**\n * 路由控制器或者函数 module 本身\n */\n routerModule: any;\n}\n\nexport interface RouterCollectorOptions {\n includeFunctionRouter?: boolean;\n globalPrefix?: string;\n}\n\nexport class WebRouterCollector {\n protected readonly baseDir: string;\n private isReady = false;\n protected routes = new Map<string, RouterInfo[]>();\n private routesPriority: RouterPriority[] = [];\n protected options: RouterCollectorOptions;\n\n constructor(baseDir = '', options: RouterCollectorOptions = {}) {\n this.baseDir = baseDir;\n this.options = options;\n }\n\n protected async analyze() {\n if (this.baseDir) {\n const container = new MidwayContainer();\n container.setFileDetector(\n new DirectoryFileDetector({\n loadDir: this.baseDir,\n })\n );\n await container.ready();\n }\n const controllerModules = listModule(CONTROLLER_KEY);\n\n for (const module of controllerModules) {\n this.collectRoute(module);\n }\n\n if (this.options.includeFunctionRouter) {\n const fnModules = listModule(FUNC_KEY);\n for (const module of fnModules) {\n this.collectFunctionRoute(module);\n }\n }\n\n // filter empty prefix\n this.routesPriority = this.routesPriority.filter(item => {\n const prefixList = this.routes.get(item.prefix);\n if (prefixList.length > 0) {\n return true;\n } else {\n this.routes.delete(item.prefix);\n return false;\n }\n });\n\n // sort router\n for (const prefix of this.routes.keys()) {\n const routerInfo = this.routes.get(prefix);\n this.routes.set(prefix, this.sortRouter(routerInfo));\n }\n\n // sort prefix\n this.routesPriority = this.routesPriority.sort((routeA, routeB) => {\n return routeB.prefix.length - routeA.prefix.length;\n });\n }\n\n protected collectRoute(module, functionMeta = false) {\n const controllerId = getProviderName(module);\n debug(`[core]: Found Controller ${controllerId}.`);\n const id = getProviderUUId(module);\n const controllerOption: ControllerOption = getClassMetadata(\n CONTROLLER_KEY,\n module\n );\n\n let priority;\n // implement middleware in controller\n const middleware = controllerOption.routerOptions.middleware;\n const controllerIgnoreGlobalPrefix =\n !!controllerOption.routerOptions?.ignoreGlobalPrefix;\n\n let prefix = joinURLPath(\n this.options.globalPrefix,\n controllerOption.prefix || '/'\n );\n const ignorePrefix = controllerOption.prefix || '/';\n // if controller set ignore global prefix, all router will be ignore too.\n if (controllerIgnoreGlobalPrefix) {\n prefix = ignorePrefix;\n }\n\n if (/\\*/.test(prefix)) {\n throw new MidwayCommonError(\n `Router prefix ${prefix} can't set string with *`\n );\n }\n\n // set prefix\n if (!this.routes.has(prefix)) {\n this.routes.set(prefix, []);\n this.routesPriority.push({\n prefix,\n priority: prefix === '/' && priority === undefined ? -999 : 0,\n middleware,\n routerOptions: controllerOption.routerOptions,\n controllerId,\n routerModule: module,\n });\n }\n\n // set ignorePrefix\n if (!this.routes.has(ignorePrefix)) {\n this.routes.set(ignorePrefix, []);\n this.routesPriority.push({\n prefix: ignorePrefix,\n priority: ignorePrefix === '/' && priority === undefined ? -999 : 0,\n middleware,\n routerOptions: controllerOption.routerOptions,\n controllerId,\n routerModule: module,\n });\n }\n\n const webRouterInfo: RouterOption[] = getClassMetadata(\n WEB_ROUTER_KEY,\n module\n );\n\n if (webRouterInfo && typeof webRouterInfo[Symbol.iterator] === 'function') {\n for (const webRouter of webRouterInfo) {\n const routeArgsInfo =\n getPropertyDataFromClass(\n WEB_ROUTER_PARAM_KEY,\n module,\n webRouter.method\n ) || [];\n\n const routerResponseData =\n getPropertyMetadata(WEB_RESPONSE_KEY, module, webRouter.method) || [];\n\n const data: RouterInfo = {\n id,\n prefix: webRouter.ignoreGlobalPrefix ? ignorePrefix : prefix,\n routerName: webRouter.routerName || '',\n url: webRouter.path,\n requestMethod: webRouter.requestMethod,\n method: webRouter.method,\n description: webRouter.description || '',\n summary: webRouter.summary || '',\n handlerName: `${controllerId}.${webRouter.method}`,\n funcHandlerName: `${controllerId}.${webRouter.method}`,\n controllerId,\n middleware: webRouter.middleware || [],\n controllerMiddleware: middleware || [],\n requestMetadata: routeArgsInfo,\n responseMetadata: routerResponseData,\n };\n\n if (functionMeta) {\n // get function information\n data.functionName = controllerId + '-' + webRouter.method;\n data.functionTriggerName = ServerlessTriggerType.HTTP;\n data.functionTriggerMetadata = {\n path: joinURLPath(prefix, webRouter.path.toString()),\n method: webRouter.requestMethod,\n } as FaaSMetadata.HTTPTriggerOptions;\n data.functionMetadata = {\n functionName: data.functionName,\n };\n }\n\n this.checkDuplicateAndPush(data.prefix, data);\n }\n }\n }\n\n protected collectFunctionRoute(module, functionMeta = false) {\n // serverlessTrigger metadata\n const webRouterInfo: Array<FaaSMetadata.TriggerMetadata> = getClassMetadata(\n FUNC_KEY,\n module\n );\n\n const controllerId = getProviderName(module);\n const id = getProviderUUId(module);\n\n const prefix = '/';\n\n if (!this.routes.has(prefix)) {\n this.routes.set(prefix, []);\n this.routesPriority.push({\n prefix,\n priority: -999,\n middleware: [],\n routerOptions: {},\n controllerId,\n routerModule: module,\n });\n }\n\n for (const webRouter of webRouterInfo) {\n // 新的 @ServerlessTrigger 写法\n if (webRouter['metadata']?.['path']) {\n const routeArgsInfo =\n getPropertyDataFromClass(\n WEB_ROUTER_PARAM_KEY,\n module,\n webRouter['methodName']\n ) || [];\n\n const routerResponseData =\n getPropertyMetadata(\n WEB_RESPONSE_KEY,\n module,\n webRouter['methodName']\n ) || [];\n // 新 http/api gateway 函数\n const data: RouterInfo = {\n id,\n prefix,\n routerName: '',\n url: webRouter['metadata']['path'],\n requestMethod: webRouter['metadata']?.['method'] ?? 'get',\n method: webRouter['methodName'],\n description: '',\n summary: '',\n handlerName: `${controllerId}.${webRouter['methodName']}`,\n funcHandlerName: `${controllerId}.${webRouter['methodName']}`,\n controllerId,\n middleware: webRouter['metadata']?.['middleware'] || [],\n controllerMiddleware: [],\n requestMetadata: routeArgsInfo,\n responseMetadata: routerResponseData,\n };\n if (functionMeta) {\n const functionMeta =\n getPropertyMetadata(\n SERVERLESS_FUNC_KEY,\n module,\n webRouter['methodName']\n ) || {};\n const functionName =\n functionMeta['functionName'] ??\n webRouter['functionName'] ??\n createFunctionName(module, webRouter['methodName']);\n data.functionName = functionName;\n data.functionTriggerName = webRouter['type'];\n data.functionTriggerMetadata = webRouter['metadata'];\n data.functionMetadata = {\n functionName,\n ...functionMeta,\n };\n }\n this.checkDuplicateAndPush(prefix, data);\n } else {\n if (functionMeta) {\n const functionMeta =\n getPropertyMetadata(\n SERVERLESS_FUNC_KEY,\n module,\n webRouter['methodName']\n ) || {};\n const functionName =\n functionMeta['functionName'] ??\n webRouter['functionName'] ??\n createFunctionName(module, webRouter['methodName']);\n // 其他类型的函数\n this.checkDuplicateAndPush(prefix, {\n id,\n prefix,\n routerName: '',\n url: '',\n requestMethod: '',\n method: webRouter['methodName'],\n description: '',\n summary: '',\n handlerName: `${controllerId}.${webRouter['methodName']}`,\n funcHandlerName: `${controllerId}.${webRouter['methodName']}`,\n controllerId,\n middleware: webRouter['metadata']?.['middleware'] || [],\n controllerMiddleware: [],\n requestMetadata: [],\n responseMetadata: [],\n functionName,\n functionTriggerName: webRouter['type'],\n functionTriggerMetadata: webRouter['metadata'],\n functionMetadata: {\n functionName,\n ...functionMeta,\n },\n });\n }\n }\n }\n }\n\n public sortRouter(urlMatchList: RouterInfo[]) {\n // 1. 绝对路径规则优先级最高如 /ab/cb/e\n // 2. 星号只能出现最后且必须在/后面,如 /ab/cb/**\n // 3. 如果绝对路径和通配都能匹配一个路径时,绝对规则优先级高\n // 4. 有多个通配能匹配一个路径时,最长的规则匹配,如 /ab/** 和 /ab/cd/** 在匹配 /ab/cd/f 时命中 /ab/cd/**\n // 5. 如果 / 与 /* 都能匹配 / ,但 / 的优先级高于 /*\n return urlMatchList\n .map(item => {\n const urlString = item.url.toString();\n const weightArr = Types.isRegExp(item.url)\n ? urlString.split('\\\\/')\n : urlString.split('/');\n let weight = 0;\n // 权重,比如通配的不加权,非通配加权,防止通配出现在最前面\n for (const fragment of weightArr) {\n if (\n fragment === '' ||\n fragment.includes(':') ||\n fragment.includes('*')\n ) {\n weight += 0;\n } else {\n weight += 1;\n }\n }\n\n let category = 2;\n const paramString = urlString.includes(':')\n ? urlString.replace(/:.+$/, '')\n : '';\n if (paramString) {\n category = 1;\n }\n if (urlString.includes('*')) {\n category = 0;\n }\n return {\n ...item,\n _pureRouter: urlString.replace(/\\**$/, '').replace(/:\\w+/, '123'),\n _level: urlString.split('/').length - 1,\n _paramString: paramString,\n _category: category,\n _weight: weight,\n };\n })\n .sort((handlerA, handlerB) => {\n // 不同一层级的对比\n if (handlerA._category !== handlerB._category) {\n return handlerB._category - handlerA._category;\n }\n\n // 不同权重\n if (handlerA._weight !== handlerB._weight) {\n return handlerB._weight - handlerA._weight;\n }\n\n // 不同长度\n if (handlerA._level === handlerB._level) {\n if (handlerB._pureRouter === handlerA._pureRouter) {\n return (\n handlerA.url.toString().length - handlerB.url.toString().length\n );\n }\n return handlerB._pureRouter.length - handlerA._pureRouter.length;\n }\n return handlerB._level - handlerA._level;\n });\n }\n\n async getRoutePriorityList(): Promise<RouterPriority[]> {\n if (!this.isReady) {\n await this.analyze();\n this.isReady = true;\n }\n return this.routesPriority;\n }\n\n async getRouterTable(): Promise<Map<string, RouterInfo[]>> {\n if (!this.isReady) {\n await this.analyze();\n this.isReady = true;\n }\n return this.routes;\n }\n\n async getFlattenRouterTable(): Promise<RouterInfo[]> {\n if (!this.isReady) {\n await this.analyze();\n this.isReady = true;\n }\n let routeArr = [];\n for (const routerPriority of this.routesPriority) {\n routeArr = routeArr.concat(this.routes.get(routerPriority.prefix));\n }\n return routeArr;\n }\n\n private checkDuplicateAndPush(prefix, routerInfo: RouterInfo) {\n const prefixList = this.routes.get(prefix);\n const matched = prefixList.filter(item => {\n return (\n routerInfo.url &&\n routerInfo.requestMethod &&\n item.url === routerInfo.url &&\n item.requestMethod === routerInfo.requestMethod\n );\n });\n if (matched && matched.length) {\n throw new MidwayDuplicateRouteError(\n `${routerInfo.requestMethod} ${routerInfo.url}`,\n `${matched[0].handlerName}`,\n `${routerInfo.handlerName}`\n );\n }\n prefixList.push(routerInfo);\n }\n}\n\nfunction createFunctionName(target, functionName) {\n return getProviderName(target).replace(/[:#]/g, '-') + '-' + functionName;\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.default.js","sourceRoot":"","sources":["../../src/config/config.default.ts"],"names":[],"mappings":";;AAAA,4CAIsB;AACtB,mCAA2E;AAC3E,+BAA4B;AAG5B,kBAAe,CACb,OAAsB,EAGtB,EAAE;;IACF,MAAM,aAAa,GAAG,IAAA,+BAAwB,EAAC,IAAA,4BAAqB,GAAE,CAAC,CAAC;IACxE,OAAO;QACL,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,GAAG,EAAE,IAAA,WAAI,EACP,MAAA,OAAO,CAAC,GAAG,CAAC,uCAA2B,CAAC,mCAAI,OAAO,CAAC,IAAI,EACxD,MAAM,EACN,OAAO,CAAC,IAAI,CACb;gBACD,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACtC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;aAC9C;YACD,OAAO,EAAE;gBACP,UAAU,EAAE;oBACV,WAAW,EAAE,iBAAiB;iBAC/B;gBACD,SAAS,EAAE;oBACT,WAAW,EAAE,gBAAgB;oBAC7B,SAAS,EAAE,QAAQ;iBACpB;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n MIDWAY_LOGGER_WRITEABLE_DIR,\n MidwayAppInfo,\n ServiceFactoryConfigOption,\n} from '../interface';\nimport { getCurrentEnvironment, isDevelopmentEnvironment } from '../util/';\nimport { join } from 'path';\nimport type { LoggerOptions } from '@midwayjs/logger';\n\nexport default (\n appInfo: MidwayAppInfo\n): {\n midwayLogger?: ServiceFactoryConfigOption<LoggerOptions>;\n} => {\n const isDevelopment = isDevelopmentEnvironment(getCurrentEnvironment());\n return {\n midwayLogger: {\n default: {\n dir: join(\n process.env[MIDWAY_LOGGER_WRITEABLE_DIR] ?? appInfo.root,\n 'logs',\n appInfo.name\n ),\n level: isDevelopment ? 'info' : 'warn',\n consoleLevel: isDevelopment ? 'info' : 'warn',\n },\n clients: {\n coreLogger: {\n fileLogName: 'midway-core.log',\n },\n appLogger: {\n fileLogName: 'midway-app.log',\n aliasName: 'logger',\n },\n },\n },\n };\n};\n"]}
@@ -64,8 +64,13 @@ class ContainerConfiguration {
64
64
  });
65
65
  }
66
66
  addImportConfigs(importConfigs) {
67
- if (importConfigs && importConfigs.length) {
68
- this.container.get(configService_1.MidwayConfigService).add(importConfigs);
67
+ if (importConfigs) {
68
+ if (Array.isArray(importConfigs)) {
69
+ this.container.get(configService_1.MidwayConfigService).add(importConfigs);
70
+ }
71
+ else {
72
+ this.container.get(configService_1.MidwayConfigService).addObject(importConfigs);
73
+ }
69
74
  }
70
75
  }
71
76
  addImports(imports = []) {
@@ -139,16 +144,16 @@ class ContainerConfiguration {
139
144
  }
140
145
  getConfigurationExport(exports) {
141
146
  const mods = [];
142
- if ((0, decorator_1.isClass)(exports) ||
143
- (0, decorator_1.isFunction)(exports) ||
147
+ if (decorator_1.Types.isClass(exports) ||
148
+ decorator_1.Types.isFunction(exports) ||
144
149
  exports instanceof configuration_1.FunctionalConfiguration) {
145
150
  mods.push(exports);
146
151
  }
147
152
  else {
148
153
  for (const m in exports) {
149
154
  const module = exports[m];
150
- if ((0, decorator_1.isClass)(module) ||
151
- (0, decorator_1.isFunction)(module) ||
155
+ if (decorator_1.Types.isClass(module) ||
156
+ decorator_1.Types.isFunction(module) ||
152
157
  module instanceof configuration_1.FunctionalConfiguration) {
153
158
  mods.push(module);
154
159
  }
@@ -235,13 +240,13 @@ class MidwayContainer {
235
240
  (_a = this.fileDetector) === null || _a === void 0 ? void 0 : _a.run(this);
236
241
  }
237
242
  bindClass(exports, options) {
238
- if ((0, decorator_1.isClass)(exports) || (0, decorator_1.isFunction)(exports)) {
243
+ if (decorator_1.Types.isClass(exports) || decorator_1.Types.isFunction(exports)) {
239
244
  this.bindModule(exports, options);
240
245
  }
241
246
  else {
242
247
  for (const m in exports) {
243
248
  const module = exports[m];
244
- if ((0, decorator_1.isClass)(module) || (0, decorator_1.isFunction)(module)) {
249
+ if (decorator_1.Types.isClass(module) || decorator_1.Types.isFunction(module)) {
245
250
  this.bindModule(module, options);
246
251
  }
247
252
  }
@@ -249,7 +254,7 @@ class MidwayContainer {
249
254
  }
250
255
  bind(identifier, target, options) {
251
256
  var _a;
252
- if ((0, decorator_1.isClass)(identifier) || (0, decorator_1.isFunction)(identifier)) {
257
+ if (decorator_1.Types.isClass(identifier) || decorator_1.Types.isFunction(identifier)) {
253
258
  return this.bindModule(identifier, target);
254
259
  }
255
260
  if (this.registry.hasDefinition(identifier)) {
@@ -257,13 +262,13 @@ class MidwayContainer {
257
262
  return;
258
263
  }
259
264
  let definition;
260
- if ((0, decorator_1.isClass)(target)) {
265
+ if (decorator_1.Types.isClass(target)) {
261
266
  definition = new objectDefinition_1.ObjectDefinition();
262
267
  definition.name = (0, decorator_1.getProviderName)(target);
263
268
  }
264
269
  else {
265
270
  definition = new functionDefinition_1.FunctionDefinition();
266
- if (!(0, decorator_1.isAsyncFunction)(target)) {
271
+ if (!decorator_1.Types.isAsyncFunction(target)) {
267
272
  definition.asynchronous = false;
268
273
  }
269
274
  definition.name = definition.id;
@@ -310,6 +315,10 @@ class MidwayContainer {
310
315
  debugBind(` register scope = ${objDefOptions.scope}`);
311
316
  definition.scope = objDefOptions.scope;
312
317
  }
318
+ if (objDefOptions.allowDowngrade) {
319
+ debugBind(` register allowDowngrade = ${objDefOptions.allowDowngrade}`);
320
+ definition.allowDowngrade = objDefOptions.allowDowngrade;
321
+ }
313
322
  this.objectCreateEventTarget.emit(interface_1.ObjectLifeCycleEvent.BEFORE_BIND, target, {
314
323
  context: this,
315
324
  definition,
@@ -322,7 +331,7 @@ class MidwayContainer {
322
331
  }
323
332
  }
324
333
  bindModule(module, options) {
325
- if ((0, decorator_1.isClass)(module)) {
334
+ if (decorator_1.Types.isClass(module)) {
326
335
  const providerId = (0, decorator_1.getProviderUUId)(module);
327
336
  if (providerId) {
328
337
  this.identifierMapping.saveClassRelation(module, options === null || options === void 0 ? void 0 : options.namespace);
@@ -338,7 +347,7 @@ class MidwayContainer {
338
347
  if (!info.scope) {
339
348
  info.scope = decorator_1.ScopeEnum.Request;
340
349
  }
341
- const uuid = (0, decorator_1.generateRandomId)();
350
+ const uuid = decorator_1.Utils.generateRandomId();
342
351
  this.identifierMapping.saveFunctionRelation(info.id, uuid);
343
352
  this.bind(uuid, module, {
344
353
  scope: info.scope,
@@ -379,7 +388,10 @@ class MidwayContainer {
379
388
  }
380
389
  get(identifier, args, objectContext) {
381
390
  var _a;
391
+ args = args !== null && args !== void 0 ? args : [];
392
+ objectContext = objectContext !== null && objectContext !== void 0 ? objectContext : { originName: identifier };
382
393
  if (typeof identifier !== 'string') {
394
+ objectContext.originName = identifier.name;
383
395
  identifier = this.getIdentifier(identifier);
384
396
  }
385
397
  if (this.registry.hasObject(identifier)) {
@@ -396,7 +408,10 @@ class MidwayContainer {
396
408
  }
397
409
  async getAsync(identifier, args, objectContext) {
398
410
  var _a;
411
+ args = args !== null && args !== void 0 ? args : [];
412
+ objectContext = objectContext !== null && objectContext !== void 0 ? objectContext : { originName: identifier };
399
413
  if (typeof identifier !== 'string') {
414
+ objectContext.originName = identifier.name;
400
415
  identifier = this.getIdentifier(identifier);
401
416
  }
402
417
  if (this.registry.hasObject(identifier)) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/context/container.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CONFIGURATION_KEY,\n getClassMetadata,\n IComponentInfo,\n InjectionConfigurationOptions,\n Types,\n listModule,\n MAIN_MODULE_KEY,\n ObjectIdentifier,\n saveModule,\n saveProviderId,\n ScopeEnum,\n getProviderUUId,\n getPropertyInject,\n getObjectDefinition,\n getClassExtendedMetadata,\n INJECT_CUSTOM_PROPERTY,\n getProviderName,\n IModuleStore,\n Utils,\n} from '@midwayjs/decorator';\nimport { FunctionalConfiguration } from '../functional/configuration';\nimport * as util from 'util';\nimport { ObjectDefinitionRegistry } from './definitionRegistry';\nimport {\n IFileDetector,\n IIdentifierRelationShip,\n IMidwayContainer,\n IObjectDefinition,\n IObjectDefinitionRegistry,\n ObjectContext,\n ObjectLifeCycleEvent,\n REQUEST_CTX_KEY,\n} from '../interface';\nimport { FUNCTION_INJECT_KEY } from '../common/constants';\nimport { ObjectDefinition } from '../definitions/objectDefinition';\nimport { FunctionDefinition } from '../definitions/functionDefinition';\nimport {\n ManagedReference,\n ManagedResolverFactory,\n} from './managedResolverFactory';\nimport { MidwayEnvironmentService } from '../service/environmentService';\nimport { MidwayConfigService } from '../service/configService';\nimport * as EventEmitter from 'events';\nimport { MidwayDefinitionNotFoundError } from '../error';\n\nconst debug = util.debuglog('midway:debug');\nconst debugBind = util.debuglog('midway:bind');\n\nclass ContainerConfiguration {\n private loadedMap = new WeakMap();\n private namespaceList = [];\n constructor(readonly container: IMidwayContainer) {}\n\n load(module) {\n let namespace = MAIN_MODULE_KEY;\n // 可能导出多个\n const configurationExports = this.getConfigurationExport(module);\n if (!configurationExports.length) return;\n // 多个的情况,数据交给第一个保存\n for (let i = 0; i < configurationExports.length; i++) {\n const configurationExport = configurationExports[i];\n\n if (this.loadedMap.get(configurationExport)) {\n // 已经加载过就跳过循环\n continue;\n }\n\n let configurationOptions: InjectionConfigurationOptions;\n if (configurationExport instanceof FunctionalConfiguration) {\n // 函数式写法\n configurationOptions = configurationExport.getConfigurationOptions();\n } else {\n // 普通类写法\n configurationOptions = getClassMetadata(\n CONFIGURATION_KEY,\n configurationExport\n );\n }\n\n // 已加载标记,防止死循环\n this.loadedMap.set(configurationExport, true);\n\n if (configurationOptions) {\n if (configurationOptions.namespace !== undefined) {\n namespace = configurationOptions.namespace;\n this.namespaceList.push(namespace);\n }\n debug(`[core]: load configuration in namespace=\"${namespace}\"`);\n this.addImports(configurationOptions.imports);\n this.addImportObjects(configurationOptions.importObjects);\n this.addImportConfigs(configurationOptions.importConfigs);\n this.bindConfigurationClass(configurationExport, namespace);\n }\n }\n\n // bind module\n this.container.bindClass(module, {\n namespace,\n });\n }\n\n addImportConfigs(\n importConfigs:\n | Array<{ [environmentName: string]: Record<string, any> }>\n | Record<string, any>\n ) {\n if (importConfigs) {\n if (Array.isArray(importConfigs)) {\n this.container.get(MidwayConfigService).add(importConfigs);\n } else {\n this.container.get(MidwayConfigService).addObject(importConfigs);\n }\n }\n }\n\n addImports(imports: any[] = []) {\n // 处理 imports\n for (let importPackage of imports) {\n if (!importPackage) continue;\n if (typeof importPackage === 'string') {\n importPackage = require(importPackage);\n }\n if ('Configuration' in importPackage) {\n // component is object\n this.load(importPackage);\n } else if ('component' in importPackage) {\n if ((importPackage as IComponentInfo)?.enabledEnvironment) {\n if (\n (importPackage as IComponentInfo)?.enabledEnvironment?.includes(\n this.container\n .get(MidwayEnvironmentService)\n .getCurrentEnvironment()\n )\n ) {\n this.load((importPackage as IComponentInfo).component);\n }\n } else {\n this.load((importPackage as IComponentInfo).component);\n }\n } else {\n this.load(importPackage);\n }\n }\n }\n\n /**\n * 注册 importObjects\n * @param objs configuration 中的 importObjects\n */\n addImportObjects(objs: any) {\n if (objs) {\n const keys = Object.keys(objs);\n for (const key of keys) {\n if (typeof objs[key] !== undefined) {\n this.container.registerObject(key, objs[key]);\n }\n }\n }\n }\n\n bindConfigurationClass(clzz, namespace) {\n if (clzz instanceof FunctionalConfiguration) {\n // 函数式写法不需要绑定到容器\n } else {\n // 普通类写法\n saveProviderId(undefined, clzz);\n const id = getProviderUUId(clzz);\n this.container.bind(id, clzz, {\n namespace: namespace,\n scope: ScopeEnum.Singleton,\n });\n }\n\n // configuration 手动绑定去重\n const configurationMods = listModule(CONFIGURATION_KEY);\n const exists = configurationMods.find(mod => {\n return mod.target === clzz;\n });\n if (!exists) {\n saveModule(CONFIGURATION_KEY, {\n target: clzz,\n namespace: namespace,\n });\n }\n }\n\n private getConfigurationExport(exports): any[] {\n const mods = [];\n if (\n Types.isClass(exports) ||\n Types.isFunction(exports) ||\n exports instanceof FunctionalConfiguration\n ) {\n mods.push(exports);\n } else {\n for (const m in exports) {\n const module = exports[m];\n if (\n Types.isClass(module) ||\n Types.isFunction(module) ||\n module instanceof FunctionalConfiguration\n ) {\n mods.push(module);\n }\n }\n }\n return mods;\n }\n\n public getNamespaceList() {\n return this.namespaceList;\n }\n}\n\nclass ObjectCreateEventTarget extends EventEmitter {}\n\nexport class MidwayContainer implements IMidwayContainer, IModuleStore {\n private _resolverFactory: ManagedResolverFactory = null;\n private _registry: IObjectDefinitionRegistry = null;\n private _identifierMapping = null;\n private moduleMap = null;\n private _objectCreateEventTarget: EventEmitter;\n public parent: IMidwayContainer = null;\n // 仅仅用于兼容requestContainer的ctx\n protected ctx = {};\n private fileDetector: IFileDetector;\n private attrMap: Map<string, any> = new Map();\n private _namespaceSet: Set<string> = null;\n private isLoad = false;\n\n constructor(parent?: IMidwayContainer) {\n this.parent = parent;\n this.init();\n }\n\n protected init() {\n // 防止直接从applicationContext.getAsync or get对象实例时依赖当前上下文信息出错\n // ctx is in requestContainer\n this.registerObject(REQUEST_CTX_KEY, this.ctx);\n }\n\n get objectCreateEventTarget() {\n if (!this._objectCreateEventTarget) {\n this._objectCreateEventTarget = new ObjectCreateEventTarget();\n }\n return this._objectCreateEventTarget;\n }\n\n get registry(): IObjectDefinitionRegistry {\n if (!this._registry) {\n this._registry = new ObjectDefinitionRegistry();\n }\n return this._registry;\n }\n\n set registry(registry) {\n this._registry = registry;\n }\n\n get managedResolverFactory() {\n if (!this._resolverFactory) {\n this._resolverFactory = new ManagedResolverFactory(this);\n }\n return this._resolverFactory;\n }\n\n get identifierMapping(): IIdentifierRelationShip {\n if (!this._identifierMapping) {\n this._identifierMapping = this.registry.getIdentifierRelation();\n }\n return this._identifierMapping;\n }\n\n get namespaceSet(): Set<string> {\n if (!this._namespaceSet) {\n this._namespaceSet = new Set();\n }\n return this._namespaceSet;\n }\n\n load(module?) {\n this.isLoad = true;\n if (module) {\n // load configuration\n const configuration = new ContainerConfiguration(this);\n configuration.load(module);\n for (const ns of configuration.getNamespaceList()) {\n this.namespaceSet.add(ns);\n }\n }\n }\n\n protected loadDefinitions() {\n if (!this.isLoad) {\n this.load();\n }\n // load project file\n this.fileDetector?.run(this);\n }\n\n bindClass(exports, options?: Partial<IObjectDefinition>) {\n if (Types.isClass(exports) || Types.isFunction(exports)) {\n this.bindModule(exports, options);\n } else {\n for (const m in exports) {\n const module = exports[m];\n if (Types.isClass(module) || Types.isFunction(module)) {\n this.bindModule(module, options);\n }\n }\n }\n }\n\n bind<T>(target: T, options?: Partial<IObjectDefinition>): void;\n bind<T>(\n identifier: ObjectIdentifier,\n target: T,\n options?: Partial<IObjectDefinition>\n ): void;\n bind<T>(identifier: any, target: any, options?: any): void {\n if (Types.isClass(identifier) || Types.isFunction(identifier)) {\n return this.bindModule(identifier, target);\n }\n\n if (this.registry.hasDefinition(identifier)) {\n // 如果 definition 存在就不再重复 bind\n return;\n }\n\n let definition;\n if (Types.isClass(target)) {\n definition = new ObjectDefinition();\n definition.name = getProviderName(target);\n } else {\n definition = new FunctionDefinition();\n if (!Types.isAsyncFunction(target)) {\n definition.asynchronous = false;\n }\n definition.name = definition.id;\n }\n\n definition.path = target;\n definition.id = identifier;\n definition.srcPath = options?.srcPath || null;\n definition.namespace = options?.namespace || '';\n definition.scope = options?.scope || ScopeEnum.Request;\n definition.createFrom = options?.createFrom;\n\n if (definition.srcPath) {\n debug(`[core]: bind id \"${definition.name} (${definition.srcPath})\"`);\n } else {\n debug(`[core]: bind id \"${definition.name}\"`);\n }\n\n // inject properties\n const props = getPropertyInject(target);\n\n for (const p in props) {\n const propertyMeta = props[p];\n debugBind(` inject properties => [${JSON.stringify(propertyMeta)}]`);\n const refManaged = new ManagedReference();\n refManaged.args = propertyMeta.args;\n refManaged.name = propertyMeta.value as any;\n definition.properties.set(propertyMeta['targetKey'], refManaged);\n }\n\n // inject custom properties\n const customProps = getClassExtendedMetadata(\n INJECT_CUSTOM_PROPERTY,\n target\n );\n\n for (const p in customProps) {\n const propertyMeta = customProps[p] as {\n propertyName: string;\n key: string;\n metadata: any;\n };\n definition.handlerProps.push(propertyMeta);\n }\n\n // @async, @init, @destroy @scope\n const objDefOptions = getObjectDefinition(target) ?? {};\n\n if (objDefOptions.initMethod) {\n debugBind(` register initMethod = ${objDefOptions.initMethod}`);\n definition.initMethod = objDefOptions.initMethod;\n }\n\n if (objDefOptions.destroyMethod) {\n debugBind(` register destroyMethod = ${objDefOptions.destroyMethod}`);\n definition.destroyMethod = objDefOptions.destroyMethod;\n }\n\n if (objDefOptions.scope) {\n debugBind(` register scope = ${objDefOptions.scope}`);\n definition.scope = objDefOptions.scope;\n }\n\n if (objDefOptions.allowDowngrade) {\n debugBind(` register allowDowngrade = ${objDefOptions.allowDowngrade}`);\n definition.allowDowngrade = objDefOptions.allowDowngrade;\n }\n\n this.objectCreateEventTarget.emit(\n ObjectLifeCycleEvent.BEFORE_BIND,\n target,\n {\n context: this,\n definition,\n replaceCallback: newDefinition => {\n definition = newDefinition;\n },\n }\n );\n\n if (definition) {\n this.registry.registerDefinition(definition.id, definition);\n }\n }\n\n protected bindModule(module: any, options: Partial<IObjectDefinition>) {\n if (Types.isClass(module)) {\n const providerId = getProviderUUId(module);\n if (providerId) {\n this.identifierMapping.saveClassRelation(module, options?.namespace);\n this.bind(providerId, module, options);\n } else {\n // no provide or js class must be skip\n }\n } else {\n const info: {\n id: ObjectIdentifier;\n provider: (context?: IMidwayContainer) => any;\n scope?: ScopeEnum;\n } = module[FUNCTION_INJECT_KEY];\n if (info && info.id) {\n if (!info.scope) {\n info.scope = ScopeEnum.Request;\n }\n const uuid = Utils.generateRandomId();\n this.identifierMapping.saveFunctionRelation(info.id, uuid);\n this.bind(uuid, module, {\n scope: info.scope,\n namespace: options.namespace,\n srcPath: options.srcPath,\n createFrom: options.createFrom,\n });\n }\n }\n }\n\n setFileDetector(fileDetector: IFileDetector) {\n this.fileDetector = fileDetector;\n }\n\n createChild(): IMidwayContainer {\n return new MidwayContainer(this);\n }\n\n public setAttr(key: string, value) {\n this.attrMap.set(key, value);\n }\n\n public getAttr<T>(key: string): T {\n return this.attrMap.get(key);\n }\n\n protected getIdentifier(target: any) {\n return getProviderUUId(target);\n }\n\n protected getManagedResolverFactory() {\n if (!this._resolverFactory) {\n this._resolverFactory = new ManagedResolverFactory(this);\n }\n return this._resolverFactory;\n }\n\n async stop(): Promise<void> {\n await this.getManagedResolverFactory().destroyCache();\n this.registry.clearAll();\n }\n\n async ready(): Promise<void> {\n await this.loadDefinitions();\n }\n\n get<T>(\n identifier: { new (...args): T },\n args?: any[],\n objectContext?: ObjectContext\n ): T;\n get<T>(\n identifier: ObjectIdentifier,\n args?: any[],\n objectContext?: ObjectContext\n ): T;\n get(identifier: any, args?: any[], objectContext?: ObjectContext): any {\n args = args ?? [];\n objectContext = objectContext ?? { originName: identifier };\n if (typeof identifier !== 'string') {\n objectContext.originName = identifier.name;\n identifier = this.getIdentifier(identifier);\n }\n if (this.registry.hasObject(identifier)) {\n return this.registry.getObject(identifier);\n }\n const definition = this.registry.getDefinition(identifier);\n if (!definition && this.parent) {\n return this.parent.get(identifier, args);\n }\n if (!definition) {\n throw new MidwayDefinitionNotFoundError(\n objectContext?.originName ?? identifier\n );\n }\n return this.getManagedResolverFactory().create({ definition, args });\n }\n\n async getAsync<T>(\n identifier: { new (...args): T },\n args?: any[],\n objectContext?: ObjectContext\n ): Promise<T>;\n async getAsync<T>(\n identifier: ObjectIdentifier,\n args?: any[],\n objectContext?: ObjectContext\n ): Promise<T>;\n async getAsync(\n identifier: any,\n args?: any[],\n objectContext?: ObjectContext\n ): Promise<any> {\n args = args ?? [];\n objectContext = objectContext ?? { originName: identifier };\n if (typeof identifier !== 'string') {\n objectContext.originName = identifier.name;\n identifier = this.getIdentifier(identifier);\n }\n if (this.registry.hasObject(identifier)) {\n return this.registry.getObject(identifier);\n }\n\n const definition = this.registry.getDefinition(identifier);\n if (!definition && this.parent) {\n return this.parent.getAsync(identifier, args);\n }\n\n if (!definition) {\n throw new MidwayDefinitionNotFoundError(\n objectContext?.originName ?? identifier\n );\n }\n\n return this.getManagedResolverFactory().createAsync({ definition, args });\n }\n\n /**\n * proxy registry.registerObject\n * @param {ObjectIdentifier} identifier\n * @param target\n */\n registerObject(identifier: ObjectIdentifier, target: any) {\n this.registry.registerObject(identifier, target);\n }\n\n onBeforeBind(\n fn: (\n Clzz: any,\n options: {\n context: IMidwayContainer;\n definition: IObjectDefinition;\n replaceCallback: (newDefinition: IObjectDefinition) => void;\n }\n ) => void\n ) {\n this.objectCreateEventTarget.on(ObjectLifeCycleEvent.BEFORE_BIND, fn);\n }\n\n onBeforeObjectCreated(\n fn: (\n Clzz: any,\n options: {\n context: IMidwayContainer;\n definition: IObjectDefinition;\n constructorArgs: any[];\n }\n ) => void\n ) {\n this.objectCreateEventTarget.on(ObjectLifeCycleEvent.BEFORE_CREATED, fn);\n }\n\n onObjectCreated<T>(\n fn: (\n ins: T,\n options: {\n context: IMidwayContainer;\n definition: IObjectDefinition;\n replaceCallback: (ins: T) => void;\n }\n ) => void\n ) {\n this.objectCreateEventTarget.on(ObjectLifeCycleEvent.AFTER_CREATED, fn);\n }\n\n onObjectInit<T>(\n fn: (\n ins: T,\n options: {\n context: IMidwayContainer;\n definition: IObjectDefinition;\n }\n ) => void\n ) {\n this.objectCreateEventTarget.on(ObjectLifeCycleEvent.AFTER_INIT, fn);\n }\n\n onBeforeObjectDestroy<T>(\n fn: (\n ins: T,\n options: {\n context: IMidwayContainer;\n definition: IObjectDefinition;\n }\n ) => void\n ) {\n this.objectCreateEventTarget.on(ObjectLifeCycleEvent.BEFORE_DESTROY, fn);\n }\n\n saveModule(key, module) {\n if (!this.moduleMap.has(key)) {\n this.moduleMap.set(key, new Set());\n }\n this.moduleMap.get(key).add(module);\n }\n\n listModule(key: string) {\n return Array.from(this.moduleMap.get(key) || {});\n }\n\n transformModule(moduleMap: Map<string, Set<any>>) {\n this.moduleMap = new Map(moduleMap);\n }\n\n hasNamespace(ns: string) {\n return this.namespaceSet.has(ns);\n }\n\n hasDefinition(identifier: ObjectIdentifier) {\n return this.registry.hasDefinition(identifier);\n }\n\n hasObject(identifier: ObjectIdentifier) {\n return this.registry.hasObject(identifier);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitionRegistry.js","sourceRoot":"","sources":["../../src/context/definitionRegistry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Object Definition Registry 实现\n */\nimport {\n getProviderId,\n getProviderName,\n getProviderUUId,\n ObjectIdentifier,\n} from '@midwayjs/decorator';\nimport {\n IIdentifierRelationShip,\n IObjectDefinition,\n IObjectDefinitionRegistry,\n} from '../interface';\n\nconst PREFIX = '_id_default_';\n\nclass LegacyIdentifierRelation\n extends Map<ObjectIdentifier, string>\n implements IIdentifierRelationShip\n{\n saveClassRelation(module: any, namespace?: string) {\n const providerId = getProviderUUId(module);\n // save uuid\n this.set(providerId, providerId);\n if (providerId) {\n // save alias id\n const aliasId = getProviderId(module);\n if (aliasId) {\n // save alias Id\n this.set(aliasId, providerId);\n }\n // save className alias\n this.set(getProviderName(module), providerId);\n // save namespace alias\n if (namespace) {\n this.set(namespace + ':' + getProviderName(module), providerId);\n }\n }\n }\n\n saveFunctionRelation(id: ObjectIdentifier, uuid: string) {\n this.set(uuid, uuid);\n this.set(id, uuid);\n }\n\n hasRelation(id: ObjectIdentifier): boolean {\n return this.has(id);\n }\n\n getRelation(id: ObjectIdentifier): string {\n return this.get(id);\n }\n}\n\nexport class ObjectDefinitionRegistry\n extends Map\n implements IObjectDefinitionRegistry\n{\n private singletonIds = [];\n private _identifierRelation: IIdentifierRelationShip =\n new LegacyIdentifierRelation();\n\n get identifierRelation() {\n if (!this._identifierRelation) {\n this._identifierRelation = new LegacyIdentifierRelation();\n }\n return this._identifierRelation;\n }\n\n set identifierRelation(identifierRelation) {\n this._identifierRelation = identifierRelation;\n }\n\n get identifiers() {\n const ids = [];\n for (const key of this.keys()) {\n if (key.indexOf(PREFIX) === -1) {\n ids.push(key);\n }\n }\n return ids;\n }\n\n get count() {\n return this.size;\n }\n\n getSingletonDefinitionIds(): ObjectIdentifier[] {\n return this.singletonIds;\n }\n\n getDefinitionByName(name: string): IObjectDefinition[] {\n const definitions = [];\n for (const v of this.values()) {\n const definition = v as IObjectDefinition;\n if (definition.name === name) {\n definitions.push(definition);\n }\n }\n return definitions;\n }\n\n registerDefinition(\n identifier: ObjectIdentifier,\n definition: IObjectDefinition\n ) {\n if (definition.isSingletonScope()) {\n this.singletonIds.push(identifier);\n }\n this.set(identifier, definition);\n }\n\n getDefinition(identifier: ObjectIdentifier): IObjectDefinition {\n identifier = this.identifierRelation.getRelation(identifier) ?? identifier;\n return this.get(identifier);\n }\n\n removeDefinition(identifier: ObjectIdentifier): void {\n this.delete(identifier);\n }\n\n hasDefinition(identifier: ObjectIdentifier): boolean {\n identifier = this.identifierRelation.getRelation(identifier) ?? identifier;\n return this.has(identifier);\n }\n\n clearAll(): void {\n this.singletonIds = [];\n this.clear();\n }\n\n hasObject(identifier: ObjectIdentifier): boolean {\n identifier = this.identifierRelation.getRelation(identifier) ?? identifier;\n return this.has(PREFIX + identifier);\n }\n\n registerObject(identifier: ObjectIdentifier, target: any) {\n this.set(PREFIX + identifier, target);\n }\n\n getObject(identifier: ObjectIdentifier): any {\n identifier = this.identifierRelation.getRelation(identifier) ?? identifier;\n return this.get(PREFIX + identifier);\n }\n\n getIdentifierRelation(): IIdentifierRelationShip {\n return this.identifierRelation;\n }\n\n setIdentifierRelation(identifierRelation: IIdentifierRelationShip) {\n this.identifierRelation = identifierRelation;\n }\n}\n"]}
@@ -52,5 +52,6 @@ export declare class ManagedResolverFactory {
52
52
  */
53
53
  depthFirstSearch(identifier: string, definition: IObjectDefinition, depth?: string[]): boolean;
54
54
  private getObjectEventTarget;
55
+ private checkSingletonInvokeRequest;
55
56
  }
56
57
  //# sourceMappingURL=managedResolverFactory.d.ts.map
@@ -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 Error(`${managed.type} resolver is not exists!`);
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 Error(`${managed.type} resolver is not exists!`);
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:container]: Create id = "${definition.name}" ${definition.id}.`);
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) {
@@ -113,6 +113,7 @@ class ManagedResolverFactory {
113
113
  if (definition.properties) {
114
114
  const keys = definition.properties.propertyKeys();
115
115
  for (const key of keys) {
116
+ this.checkSingletonInvokeRequest(definition, key);
116
117
  try {
117
118
  inst[key] = this.resolveManaged(definition.properties.get(key), key);
118
119
  }
@@ -174,7 +175,7 @@ class ManagedResolverFactory {
174
175
  await this.context.getAsync(dep, args);
175
176
  }
176
177
  }
177
- debugLog(`[core:container]: Create id = "${definition.name}" ${definition.id}.`);
178
+ debugLog(`[core]: Create id = "${definition.name}" ${definition.id}.`);
178
179
  const Clzz = definition.creator.load();
179
180
  let constructorArgs = [];
180
181
  if (args && Array.isArray(args) && args.length > 0) {
@@ -187,7 +188,7 @@ class ManagedResolverFactory {
187
188
  inst = await definition.creator.doConstructAsync(Clzz, constructorArgs, this.context);
188
189
  if (!inst) {
189
190
  this.removeCreateStatus(definition, false);
190
- throw new Error(`${definition.id} construct return undefined`);
191
+ throw new error_1.MidwayCommonError(`${definition.id} construct return undefined`);
191
192
  }
192
193
  // binding ctx object
193
194
  if (definition.isRequestScope() &&
@@ -202,6 +203,7 @@ class ManagedResolverFactory {
202
203
  if (definition.properties) {
203
204
  const keys = definition.properties.propertyKeys();
204
205
  for (const key of keys) {
206
+ this.checkSingletonInvokeRequest(definition, key);
205
207
  try {
206
208
  inst[key] = await this.resolveManagedAsync(definition.properties.get(key), key);
207
209
  }
@@ -371,6 +373,19 @@ class ManagedResolverFactory {
371
373
  }
372
374
  return this.context.objectCreateEventTarget;
373
375
  }
376
+ checkSingletonInvokeRequest(definition, key) {
377
+ if (definition.isSingletonScope()) {
378
+ const managedRef = definition.properties.get(key);
379
+ if (this.context.hasDefinition(managedRef === null || managedRef === void 0 ? void 0 : managedRef.name)) {
380
+ const propertyDefinition = this.context.registry.getDefinition(managedRef.name);
381
+ if (propertyDefinition.isRequestScope() &&
382
+ !propertyDefinition.allowDowngrade) {
383
+ throw new error_1.MidwaySingletonInjectRequestError(definition.path.name, propertyDefinition.path.name);
384
+ }
385
+ }
386
+ }
387
+ return true;
388
+ }
374
389
  }
375
390
  exports.ManagedResolverFactory = ManagedResolverFactory;
376
391
  //# sourceMappingURL=managedResolverFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managedResolverFactory.js","sourceRoot":"","sources":["../../src/context/managedResolverFactory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 管理对象解析构建\n */\nimport { IManagedInstance, ObjectIdentifier } from '@midwayjs/decorator';\nimport { KEYS } from '../common/constants';\nimport {\n IManagedResolver,\n IObjectDefinition,\n REQUEST_CTX_KEY,\n REQUEST_OBJ_CTX_KEY,\n IManagedResolverFactoryCreateOptions,\n IMidwayContainer,\n ObjectLifeCycleEvent,\n} from '../interface';\n\nimport * as util from 'util';\nimport * as EventEmitter from 'events';\nimport {\n MidwayCommonError,\n MidwayDefinitionNotFoundError,\n MidwayResolverMissingError,\n MidwaySingletonInjectRequestError,\n} from '../error';\n\nconst debug = util.debuglog('midway:managedresolver');\nconst debugLog = util.debuglog('midway:debug');\n\nexport class ManagedReference implements IManagedInstance {\n type = KEYS.REF_ELEMENT;\n name: string;\n args?: any;\n}\n\n/**\n * 解析ref\n */\nclass RefResolver {\n constructor(readonly factory: ManagedResolverFactory) {}\n get type(): string {\n return KEYS.REF_ELEMENT;\n }\n\n resolve(managed: IManagedInstance, originName: string): any {\n const mr = managed as ManagedReference;\n return this.factory.context.get(mr.name, mr.args, {\n originName,\n });\n }\n\n async resolveAsync(\n managed: IManagedInstance,\n originName: string\n ): Promise<any> {\n const mr = managed as ManagedReference;\n return this.factory.context.getAsync(mr.name, mr.args, {\n originName,\n });\n }\n}\n\n/**\n * 解析工厂\n */\nexport class ManagedResolverFactory {\n private resolvers = {};\n private creating = new Map<string, boolean>();\n singletonCache = new Map<ObjectIdentifier, any>();\n context: IMidwayContainer;\n\n constructor(context: IMidwayContainer) {\n this.context = context;\n\n // 初始化解析器\n this.resolvers = {\n ref: new RefResolver(this),\n };\n }\n\n registerResolver(resolver: IManagedResolver) {\n this.resolvers[resolver.type] = resolver;\n }\n\n resolveManaged(managed: IManagedInstance, originPropertyName: string): any {\n const resolver = this.resolvers[managed.type];\n if (!resolver || resolver.type !== managed.type) {\n throw new MidwayResolverMissingError(managed.type);\n }\n return resolver.resolve(managed, originPropertyName);\n }\n\n async resolveManagedAsync(\n managed: IManagedInstance,\n originPropertyName: string\n ): Promise<any> {\n const resolver = this.resolvers[managed.type];\n if (!resolver || resolver.type !== managed.type) {\n throw new MidwayResolverMissingError(managed.type);\n }\n return resolver.resolveAsync(managed, originPropertyName);\n }\n\n /**\n * 同步创建对象\n * @param opt\n */\n create(opt: IManagedResolverFactoryCreateOptions): any {\n const { definition, args } = opt;\n if (\n definition.isSingletonScope() &&\n this.singletonCache.has(definition.id)\n ) {\n return this.singletonCache.get(definition.id);\n }\n // 如果非 null 表示已经创建 proxy\n let inst = this.createProxyReference(definition);\n if (inst) {\n return inst;\n }\n\n this.compareAndSetCreateStatus(definition);\n // 预先初始化依赖\n if (definition.hasDependsOn()) {\n for (const dep of definition.dependsOn) {\n this.context.get(dep, args);\n }\n }\n\n debugLog(`[core]: Create id = \"${definition.name}\" ${definition.id}.`);\n\n const Clzz = definition.creator.load();\n\n let constructorArgs = [];\n if (args && Array.isArray(args) && args.length > 0) {\n constructorArgs = args;\n }\n\n this.getObjectEventTarget().emit(\n ObjectLifeCycleEvent.BEFORE_CREATED,\n Clzz,\n {\n constructorArgs,\n definition,\n context: this.context,\n }\n );\n\n inst = definition.creator.doConstruct(Clzz, constructorArgs, this.context);\n\n // binding ctx object\n if (\n definition.isRequestScope() &&\n definition.constructor.name === 'ObjectDefinition'\n ) {\n Object.defineProperty(inst, REQUEST_OBJ_CTX_KEY, {\n value: this.context.get(REQUEST_CTX_KEY),\n writable: false,\n enumerable: false,\n });\n }\n\n if (definition.properties) {\n const keys = definition.properties.propertyKeys() as string[];\n for (const key of keys) {\n this.checkSingletonInvokeRequest(definition, key);\n try {\n inst[key] = this.resolveManaged(definition.properties.get(key), key);\n } catch (error) {\n if (MidwayDefinitionNotFoundError.isClosePrototypeOf(error)) {\n const className = definition.path.name;\n error.updateErrorMsg(className);\n }\n this.removeCreateStatus(definition, true);\n throw error;\n }\n }\n }\n\n this.getObjectEventTarget().emit(ObjectLifeCycleEvent.AFTER_CREATED, inst, {\n context: this.context,\n definition,\n replaceCallback: ins => {\n inst = ins;\n },\n });\n\n // after properties set then do init\n definition.creator.doInit(inst);\n\n this.getObjectEventTarget().emit(ObjectLifeCycleEvent.AFTER_INIT, inst, {\n context: this.context,\n definition,\n });\n\n if (definition.isSingletonScope() && definition.id) {\n this.singletonCache.set(definition.id, inst);\n }\n\n // for request scope\n if (definition.isRequestScope() && definition.id) {\n this.context.registerObject(definition.id, inst);\n }\n this.removeCreateStatus(definition, true);\n\n return inst;\n }\n\n /**\n * 异步创建对象\n * @param opt\n */\n async createAsync(opt: IManagedResolverFactoryCreateOptions): Promise<any> {\n const { definition, args } = opt;\n if (\n definition.isSingletonScope() &&\n this.singletonCache.has(definition.id)\n ) {\n debug(\n `id = ${definition.id}(${definition.name}) get from singleton cache.`\n );\n return this.singletonCache.get(definition.id);\n }\n\n // 如果非 null 表示已经创建 proxy\n let inst = this.createProxyReference(definition);\n if (inst) {\n debug(`id = ${definition.id}(${definition.name}) from proxy reference.`);\n return inst;\n }\n\n this.compareAndSetCreateStatus(definition);\n // 预先初始化依赖\n if (definition.hasDependsOn()) {\n for (const dep of definition.dependsOn) {\n debug('id = %s init depend %s.', definition.id, dep);\n await this.context.getAsync(dep, args);\n }\n }\n\n debugLog(`[core]: Create id = \"${definition.name}\" ${definition.id}.`);\n\n const Clzz = definition.creator.load();\n let constructorArgs = [];\n if (args && Array.isArray(args) && args.length > 0) {\n constructorArgs = args;\n }\n\n this.getObjectEventTarget().emit(\n ObjectLifeCycleEvent.BEFORE_CREATED,\n Clzz,\n {\n constructorArgs,\n context: this.context,\n }\n );\n\n inst = await definition.creator.doConstructAsync(\n Clzz,\n constructorArgs,\n this.context\n );\n if (!inst) {\n this.removeCreateStatus(definition, false);\n throw new MidwayCommonError(\n `${definition.id} construct return undefined`\n );\n }\n\n // binding ctx object\n if (\n definition.isRequestScope() &&\n definition.constructor.name === 'ObjectDefinition'\n ) {\n debug('id = %s inject ctx', definition.id);\n Object.defineProperty(inst, REQUEST_OBJ_CTX_KEY, {\n value: this.context.get(REQUEST_CTX_KEY),\n writable: false,\n enumerable: false,\n });\n }\n\n if (definition.properties) {\n const keys = definition.properties.propertyKeys() as string[];\n for (const key of keys) {\n this.checkSingletonInvokeRequest(definition, key);\n try {\n inst[key] = await this.resolveManagedAsync(\n definition.properties.get(key),\n key\n );\n } catch (error) {\n if (MidwayDefinitionNotFoundError.isClosePrototypeOf(error)) {\n const className = definition.path.name;\n error.updateErrorMsg(className);\n }\n this.removeCreateStatus(definition, false);\n throw error;\n }\n }\n }\n\n this.getObjectEventTarget().emit(ObjectLifeCycleEvent.AFTER_CREATED, inst, {\n context: this.context,\n definition,\n replaceCallback: ins => {\n inst = ins;\n },\n });\n\n // after properties set then do init\n await definition.creator.doInitAsync(inst);\n\n this.getObjectEventTarget().emit(ObjectLifeCycleEvent.AFTER_INIT, inst, {\n context: this.context,\n definition,\n });\n\n if (definition.isSingletonScope() && definition.id) {\n debug(`id = ${definition.id}(${definition.name}) set to singleton cache`);\n this.singletonCache.set(definition.id, inst);\n }\n\n // for request scope\n if (definition.isRequestScope() && definition.id) {\n debug(`id = ${definition.id}(${definition.name}) set to register object`);\n this.context.registerObject(definition.id, inst);\n }\n this.removeCreateStatus(definition, true);\n\n return inst;\n }\n\n async destroyCache(): Promise<void> {\n for (const key of this.singletonCache.keys()) {\n const definition = this.context.registry.getDefinition(key);\n if (definition.creator) {\n const inst = this.singletonCache.get(key);\n this.getObjectEventTarget().emit(\n ObjectLifeCycleEvent.BEFORE_DESTROY,\n inst,\n {\n context: this.context,\n definition,\n }\n );\n await definition.creator.doDestroyAsync(inst);\n }\n }\n this.singletonCache.clear();\n this.creating.clear();\n }\n\n /**\n * 触发单例初始化结束事件\n * @param definition 单例定义\n * @param success 成功 or 失败\n */\n private removeCreateStatus(\n definition: IObjectDefinition,\n success: boolean\n ): boolean {\n // 如果map中存在表示需要设置状态\n if (this.creating.has(definition.id)) {\n this.creating.set(definition.id, false);\n }\n return true;\n }\n\n public isCreating(definition: IObjectDefinition) {\n return this.creating.has(definition.id) && this.creating.get(definition.id);\n }\n\n private compareAndSetCreateStatus(definition: IObjectDefinition) {\n if (\n !this.creating.has(definition.id) ||\n !this.creating.get(definition.id)\n ) {\n this.creating.set(definition.id, true);\n }\n }\n /**\n * 创建对象定义的代理访问逻辑\n * @param definition 对象定义\n */\n private createProxyReference(definition: IObjectDefinition): any {\n if (this.isCreating(definition)) {\n debug('create proxy for %s.', definition.id);\n // 非循环依赖的允许重新创建对象\n if (!this.depthFirstSearch(definition.id, definition)) {\n debug('id = %s after dfs return null', definition.id);\n return null;\n }\n // 创建代理对象\n return new Proxy(\n { __is_proxy__: true, __target_id__: definition.id },\n {\n get: (obj, prop) => {\n let target;\n if (definition.isRequestScope()) {\n target = this.context.registry.getObject(definition.id);\n } else if (definition.isSingletonScope()) {\n target = this.singletonCache.get(definition.id);\n } else {\n target = this.context.get(definition.id);\n }\n\n if (target) {\n if (typeof target[prop] === 'function') {\n return target[prop].bind(target);\n }\n return target[prop];\n }\n\n return undefined;\n },\n }\n );\n }\n return null;\n }\n /**\n * 遍历依赖树判断是否循环依赖\n * @param identifier 目标id\n * @param definition 定义描述\n * @param depth\n */\n public depthFirstSearch(\n identifier: string,\n definition: IObjectDefinition,\n depth?: string[]\n ): boolean {\n if (definition) {\n debug('dfs for %s == %s start.', identifier, definition.id);\n if (definition.properties) {\n const keys = definition.properties.propertyKeys() as string[];\n if (keys.indexOf(identifier) > -1) {\n debug('dfs exist in properties %s == %s.', identifier, definition.id);\n return true;\n }\n for (const key of keys) {\n if (!Array.isArray(depth)) {\n depth = [identifier];\n }\n let iden = key;\n const ref: ManagedReference = definition.properties.get(key);\n if (ref && ref.name) {\n iden =\n this.context.identifierMapping.getRelation(ref.name) ?? ref.name;\n }\n if (iden === identifier) {\n debug(\n 'dfs exist in properties key %s == %s.',\n identifier,\n definition.id\n );\n return true;\n }\n if (depth.indexOf(iden) > -1) {\n debug(\n 'dfs depth circular %s == %s, %s, %j.',\n identifier,\n definition.id,\n iden,\n depth\n );\n continue;\n } else {\n depth.push(iden);\n debug('dfs depth push %s == %s, %j.', identifier, iden, depth);\n }\n let subDefinition = this.context.registry.getDefinition(iden);\n if (!subDefinition && this.context.parent) {\n subDefinition = this.context.parent.registry.getDefinition(iden);\n }\n if (this.depthFirstSearch(identifier, subDefinition, depth)) {\n debug(\n 'dfs exist in sub tree %s == %s subId = %s.',\n identifier,\n definition.id,\n subDefinition.id\n );\n return true;\n }\n }\n }\n debug('dfs for %s == %s end.', identifier, definition.id);\n }\n return false;\n }\n\n private getObjectEventTarget(): EventEmitter {\n if (this.context.parent) {\n return this.context.parent.objectCreateEventTarget;\n }\n return this.context.objectCreateEventTarget;\n }\n\n private checkSingletonInvokeRequest(definition, key) {\n if (definition.isSingletonScope()) {\n const managedRef = definition.properties.get(key);\n if (this.context.hasDefinition(managedRef?.name)) {\n const propertyDefinition = this.context.registry.getDefinition(\n managedRef.name\n );\n if (\n propertyDefinition.isRequestScope() &&\n !propertyDefinition.allowDowngrade\n ) {\n throw new MidwaySingletonInjectRequestError(\n definition.path.name,\n propertyDefinition.path.name\n );\n }\n }\n }\n return true;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerWrapper.js","sourceRoot":"","sources":["../../src/context/providerWrapper.ts"],"names":[],"mappings":";;;AAEA,mDAA0D;AAE1D,SAAgB,eAAe,CAC7B,WAIE;IAEF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,+BAAmB,EAAE;YACxD,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;KACJ;AACH,CAAC;AAbD,0CAaC","sourcesContent":["import { ObjectIdentifier, ScopeEnum } from '@midwayjs/decorator';\nimport { IMidwayContainer } from '../interface';\nimport { FUNCTION_INJECT_KEY } from '../common/constants';\n\nexport function providerWrapper(\n wrapperInfo: Array<{\n id: ObjectIdentifier;\n provider: (context: IMidwayContainer, args?: any) => any;\n scope?: ScopeEnum;\n }>\n): void {\n for (const info of wrapperInfo) {\n Object.defineProperty(info.provider, FUNCTION_INJECT_KEY, {\n value: info,\n writable: false,\n });\n }\n}\n"]}
@@ -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);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestContainer.js","sourceRoot":"","sources":["../../src/context/requestContainer.ts"],"names":[],"mappings":";;;AAAA,2CAA8C;AAC9C,4CAAiE;AACjE,mDAA0D;AAE1D,MAAa,sBAAuB,SAAQ,2BAAe;IAGzD,YAAY,GAAG,EAAE,kBAAoC;QACnD,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAE7C,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CACjC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CACzD,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,eAAe;QACf,IAAI,CAAC,cAAc,CAAC,2BAAe,EAAE,GAAG,CAAC,CAAC;QAC1C,eAAe;QACf,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE/B,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,yBAAyB;YACzB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,IAAI;QACF,aAAa;IACf,CAAC;IAED,GAAG,CAAU,UAAe,EAAE,IAAU;QACtC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SAC5C;QAED,MAAM,UAAU,GACd,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE;YACd,IACE,UAAU,CAAC,cAAc,EAAE;gBAC3B,UAAU,CAAC,EAAE,KAAK,+BAAmB,EACrC;gBACA,oEAAoE;gBACpE,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC,MAAM,CAAC;oBAC7C,UAAU;oBACV,IAAI;iBACL,CAAC,CAAC;aACJ;SACF;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAC1C;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAU,UAAe,EAAE,IAAU;QACjD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SAC5C;QAED,MAAM,UAAU,GACd,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE;YACd,IACE,UAAU,CAAC,cAAc,EAAE;gBAC3B,UAAU,CAAC,EAAE,KAAK,+BAAmB,EACrC;gBACA,oEAAoE;gBACpE,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC,WAAW,CAAC;oBAClD,UAAU;oBACV,IAAI;iBACL,CAAC,CAAC;aACJ;SACF;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAI,UAAU,EAAE,IAAI,CAAC,CAAC;SAClD;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,sBAAsB;IACxB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF;AA7FD,wDA6FC","sourcesContent":["import { MidwayContainer } from './container';\nimport { REQUEST_CTX_KEY, IMidwayContainer } from '../interface';\nimport { PIPELINE_IDENTIFIER } from '@midwayjs/decorator';\n\nexport class MidwayRequestContainer extends MidwayContainer {\n private readonly applicationContext: IMidwayContainer;\n\n constructor(ctx, applicationContext: IMidwayContainer) {\n super(applicationContext);\n this.applicationContext = applicationContext;\n\n // update legacy relationship\n this.registry.setIdentifierRelation(\n this.applicationContext.registry.getIdentifierRelation()\n );\n\n this.ctx = ctx;\n // register ctx\n this.registerObject(REQUEST_CTX_KEY, ctx);\n // register res\n this.registerObject('res', {});\n\n if (ctx.logger) {\n // register contextLogger\n this.registerObject('logger', ctx.logger);\n }\n }\n\n init() {\n // do nothing\n }\n\n get<T = any>(identifier: any, args?: any): T {\n if (typeof identifier !== 'string') {\n identifier = this.getIdentifier(identifier);\n }\n\n if (this.registry.hasObject(identifier)) {\n return this.registry.getObject(identifier);\n }\n\n const definition =\n this.applicationContext.registry.getDefinition(identifier);\n if (definition) {\n if (\n definition.isRequestScope() ||\n definition.id === PIPELINE_IDENTIFIER\n ) {\n // create object from applicationContext definition for requestScope\n return this.getManagedResolverFactory().create({\n definition,\n args,\n });\n }\n }\n\n if (this.parent) {\n return this.parent.get(identifier, args);\n }\n }\n\n async getAsync<T = any>(identifier: any, args?: any): Promise<T> {\n if (typeof identifier !== 'string') {\n identifier = this.getIdentifier(identifier);\n }\n\n if (this.registry.hasObject(identifier)) {\n return this.registry.getObject(identifier);\n }\n\n const definition =\n this.applicationContext.registry.getDefinition(identifier);\n if (definition) {\n if (\n definition.isRequestScope() ||\n definition.id === PIPELINE_IDENTIFIER\n ) {\n // create object from applicationContext definition for requestScope\n return this.getManagedResolverFactory().createAsync({\n definition,\n args,\n });\n }\n }\n\n if (this.parent) {\n return this.parent.getAsync<T>(identifier, args);\n }\n }\n\n async ready() {\n // ignore other things\n }\n\n getContext() {\n return this.ctx;\n }\n}\n"]}
@@ -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;
@@ -23,6 +23,7 @@ class FunctionDefinition {
23
23
  this.namespace = '';
24
24
  this.asynchronous = true;
25
25
  this.handlerProps = [];
26
+ this.allowDowngrade = false;
26
27
  // 函数工厂创建的对象默认不需要自动装配
27
28
  this.innerAutowire = false;
28
29
  this.innerScope = decorator_1.ScopeEnum.Singleton;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionDefinition.js","sourceRoot":"","sources":["../../src/definitions/functionDefinition.ts"],"names":[],"mappings":";;;AAAA,mDAI6B;AAO7B,mDAAgD;AAEhD,MAAM,sBAAuB,SAAQ,6BAAa;IAChD,WAAW,CAAC,IAAS,EAAE,IAAU,EAAE,OAA0B;QAC3D,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,IAAS,EACT,IAAU,EACV,OAA0B;QAE1B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,MAAa,kBAAkB;IAC7B;QAKA,oBAAe,GAAuB,EAAE,CAAC;QAWzC,cAAS,GAAG,EAAE,CAAC;QACf,iBAAY,GAAG,IAAI,CAAC;QACpB,iBAAY,GAAG,EAAE,CAAC;QAElB,mBAAc,GAAG,KAAK,CAAC;QACvB,qBAAqB;QACX,kBAAa,GAAG,KAAK,CAAC;QACtB,eAAU,GAAc,qBAAS,CAAC,SAAS,CAAC;QAtBpD,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAuBD,OAAO,CAAC,GAAqB,IAAQ,CAAC;IAEtC,OAAO,CAAC,GAAqB;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,KAAgB;QACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,UAAU,KAAK,qBAAS,CAAC,SAAS,CAAC;IACjD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,KAAK,qBAAS,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,GAAqB,EAAE,KAAU,IAAS,CAAC;CACpD;AAjED,gDAiEC","sourcesContent":["import {\n IManagedInstance,\n ObjectIdentifier,\n ScopeEnum,\n} from '@midwayjs/decorator';\nimport {\n IProperties,\n IObjectCreator,\n IObjectDefinition,\n IMidwayContainer,\n} from '../interface';\nimport { ObjectCreator } from './objectCreator';\n\nclass FunctionWrapperCreator extends ObjectCreator {\n doConstruct(Clzz: any, args?: any, context?: IMidwayContainer): any {\n if (!Clzz) {\n return null;\n }\n return Clzz(context, args);\n }\n\n async doConstructAsync(\n Clzz: any,\n args?: any,\n context?: IMidwayContainer\n ): Promise<any> {\n if (!Clzz) {\n return null;\n }\n\n return Clzz(context, args);\n }\n}\n\nexport class FunctionDefinition implements IObjectDefinition {\n constructor() {\n this.creator = new FunctionWrapperCreator(this);\n }\n\n constructMethod: string;\n constructorArgs: IManagedInstance[] = [];\n creator: IObjectCreator;\n dependsOn: ObjectIdentifier[];\n destroyMethod: string;\n export: string;\n id: string;\n name: string;\n initMethod: string;\n srcPath: string;\n path: any;\n properties: IProperties;\n namespace = '';\n asynchronous = true;\n handlerProps = [];\n createFrom;\n allowDowngrade = false;\n // 函数工厂创建的对象默认不需要自动装配\n protected innerAutowire = false;\n protected innerScope: ScopeEnum = ScopeEnum.Singleton;\n\n getAttr(key: ObjectIdentifier): any {}\n\n hasAttr(key: ObjectIdentifier): boolean {\n return false;\n }\n\n hasConstructorArgs(): boolean {\n return false;\n }\n\n hasDependsOn(): boolean {\n return false;\n }\n\n isAsync(): boolean {\n return this.asynchronous;\n }\n\n isDirect(): boolean {\n return false;\n }\n\n isExternal(): boolean {\n return false;\n }\n\n set scope(scope: ScopeEnum) {\n this.innerScope = scope;\n }\n\n isSingletonScope(): boolean {\n return this.innerScope === ScopeEnum.Singleton;\n }\n\n isRequestScope(): boolean {\n return this.innerScope === ScopeEnum.Request;\n }\n\n setAttr(key: ObjectIdentifier, value: any): void {}\n}\n"]}
@@ -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 ((0, decorator_1.isAsyncFunction)(fn)) {
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 ((0, decorator_1.isGeneratorFunction)(inst[this.definition.initMethod]) ||
89
- (0, decorator_1.isAsyncFunction)(inst[this.definition.initMethod])) {
90
- throw new Error(`${this.definition.id} not valid by context.get, Use context.getAsync instead!`);
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 ((0, decorator_1.isPromise)(rt)) {
95
- throw new Error(`${this.definition.id} not valid by context.get, Use context.getAsync instead!`);
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 ((0, decorator_1.isAsyncFunction)(initFn)) {
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 ((0, decorator_1.isAsyncFunction)(fn)) {
143
+ if (decorator_1.Types.isAsyncFunction(fn)) {
143
144
  await fn.call(obj);
144
145
  }
145
146
  else {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectCreator.js","sourceRoot":"","sources":["../../src/definitions/objectCreator.ts"],"names":[],"mappings":"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","sourcesContent":["import { Types } from '@midwayjs/decorator';\nimport { IObjectCreator, IObjectDefinition } from '../interface';\nimport { MidwayUseWrongMethodError } from '../error';\n\nexport class ObjectCreator implements IObjectCreator {\n protected definition: IObjectDefinition;\n\n constructor(definition: IObjectDefinition) {\n this.definition = definition;\n }\n\n /**\n * 加载对象class\n * @returns {class} Clzz对象的Class\n */\n load(): any {\n let Clzz = null;\n if (typeof this.definition.path === 'string') {\n // 解析xml结果 默认 path = '' 需要兼容处理掉\n if (!this.definition.path) {\n return Clzz;\n }\n const path = this.definition.path;\n if (this.definition.export) {\n Clzz = require(path)[this.definition.export];\n } else {\n Clzz = require(path);\n }\n } else {\n // if it is class and return direct\n Clzz = this.definition.path;\n }\n return Clzz;\n }\n\n /**\n * 构建对象实例\n * @param Clzz 对象class,通过load加载\n * @param args 对象初始化参数\n * @returns {any} 返回创建的对象实例\n */\n doConstruct(Clzz: any, args?: any): any {\n if (!Clzz) {\n return Object.create(null);\n }\n\n let inst;\n if (this.definition.constructMethod) {\n // eslint-disable-next-line prefer-spread\n inst = Clzz[this.definition.constructMethod].apply(Clzz, args);\n } else {\n inst = Reflect.construct(Clzz, args);\n }\n return inst;\n }\n\n /**\n * 异步构造对象\n * @param Clzz 对象class,通过load加载\n * @param args 对象初始化参数\n * @returns {any} 返回创建的对象实例\n */\n async doConstructAsync(Clzz: any, args?: any): Promise<any> {\n if (!Clzz) {\n return Object.create(null);\n }\n\n let inst;\n if (this.definition.constructMethod) {\n const fn = Clzz[this.definition.constructMethod];\n if (Types.isAsyncFunction(fn)) {\n inst = await fn.apply(Clzz, args);\n } else {\n inst = fn.apply(Clzz, args);\n }\n } else {\n inst = Reflect.construct(Clzz, args);\n }\n return inst;\n }\n\n /**\n * 调用对象初始化方法进行初始化\n * @param obj 对象,由doConstruct返回\n * @returns {void}\n */\n doInit(obj: any): void {\n const inst = obj;\n // after properties set then do init\n if (this.definition.initMethod && inst[this.definition.initMethod]) {\n if (\n Types.isGeneratorFunction(inst[this.definition.initMethod]) ||\n Types.isAsyncFunction(inst[this.definition.initMethod])\n ) {\n throw new MidwayUseWrongMethodError(\n 'context.get',\n 'context.getAsync',\n this.definition.id\n );\n } else {\n const rt = inst[this.definition.initMethod].call(inst);\n if (Types.isPromise(rt)) {\n throw new MidwayUseWrongMethodError(\n 'context.get',\n 'context.getAsync',\n this.definition.id\n );\n }\n }\n }\n }\n\n /**\n * 调用对象初始化方法进行初始化\n * @param obj 对象,由doConstructAsync返回\n * @returns {void}\n */\n async doInitAsync(obj: any): Promise<void> {\n const inst = obj;\n if (this.definition.initMethod && inst[this.definition.initMethod]) {\n const initFn = inst[this.definition.initMethod];\n if (Types.isAsyncFunction(initFn)) {\n await initFn.call(inst);\n } else {\n if (initFn.length === 1) {\n await new Promise(resolve => {\n initFn.call(inst, resolve);\n });\n } else {\n initFn.call(inst);\n }\n }\n }\n }\n\n /**\n * 对象销毁\n * @param obj 对象,由doConstruct返回\n * @returns {void}\n */\n doDestroy(obj: any): void {\n if (this.definition.destroyMethod && obj[this.definition.destroyMethod]) {\n obj[this.definition.destroyMethod].call(obj);\n }\n }\n\n /**\n * 对象销毁\n * @param obj 对象,由doConstructAsync返回\n * @returns {void}\n */\n async doDestroyAsync(obj: any): Promise<void> {\n if (this.definition.destroyMethod && obj[this.definition.destroyMethod]) {\n const fn = obj[this.definition.destroyMethod];\n if (Types.isAsyncFunction(fn)) {\n await fn.call(obj);\n } else {\n if (fn.length === 1) {\n await new Promise(resolve => {\n fn.call(obj, resolve);\n });\n } else {\n fn.call(obj);\n }\n }\n }\n }\n}\n"]}
@@ -20,6 +20,7 @@ export declare class ObjectDefinition implements IObjectDefinition {
20
20
  namespace: string;
21
21
  handlerProps: any[];
22
22
  createFrom: any;
23
+ allowDowngrade: boolean;
23
24
  constructor();
24
25
  set asynchronous(asynchronous: boolean);
25
26
  isAsync(): boolean;
@@ -23,6 +23,7 @@ class ObjectDefinition {
23
23
  this.properties = new properties_1.ObjectProperties();
24
24
  this.namespace = '';
25
25
  this.handlerProps = [];
26
+ this.allowDowngrade = false;
26
27
  this.creator = new objectCreator_1.ObjectCreator(this);
27
28
  }
28
29
  set asynchronous(asynchronous) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectDefinition.js","sourceRoot":"","sources":["../../src/definitions/objectDefinition.ts"],"names":[],"mappings":";;;AACA,mDAAkE;AAClE,6CAAgD;AAChD,mDAAgD;AAEhD,kCAAkC;AAClC,MAAa,gBAAgB;IAqB3B;QApBU,WAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC1C,kBAAa,GAAG,KAAK,CAAC;QAChC,UAAK,GAAc,qBAAS,CAAC,SAAS,CAAC;QACvC,YAAO,GAAmB,IAAI,CAAC;QAC/B,OAAE,GAAW,IAAI,CAAC;QAClB,SAAI,GAAW,IAAI,CAAC;QACpB,eAAU,GAAW,IAAI,CAAC;QAC1B,kBAAa,GAAW,IAAI,CAAC;QAC7B,oBAAe,GAAW,IAAI,CAAC;QAC/B,oBAAe,GAAU,EAAE,CAAC;QAE5B,SAAI,GAAQ,IAAI,CAAC;QACjB,WAAM,GAAW,IAAI,CAAC;QACtB,cAAS,GAAuB,EAAE,CAAC;QACnC,eAAU,GAAG,IAAI,6BAAgB,EAAE,CAAC;QACpC,cAAS,GAAG,EAAE,CAAC;QACf,iBAAY,GAAG,EAAE,CAAC;QAElB,mBAAc,GAAG,KAAK,CAAC;QAGrB,IAAI,CAAC,OAAO,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,YAAY,CAAC,YAAqB;QACpC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,KAAK,qBAAS,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,KAAK,qBAAS,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAqB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAqB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAqB,EAAE,KAAU;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF;AA5DD,4CA4DC;AACD,iCAAiC","sourcesContent":["import { IObjectCreator, IObjectDefinition } from '../interface';\nimport { ScopeEnum, ObjectIdentifier } from '@midwayjs/decorator';\nimport { ObjectProperties } from './properties';\nimport { ObjectCreator } from './objectCreator';\n\n/* tslint:disable:variable-name */\nexport class ObjectDefinition implements IObjectDefinition {\n protected _attrs = new Map<ObjectIdentifier, any>();\n protected _asynchronous = false;\n scope: ScopeEnum = ScopeEnum.Singleton;\n creator: IObjectCreator = null;\n id: string = null;\n name: string = null;\n initMethod: string = null;\n destroyMethod: string = null;\n constructMethod: string = null;\n constructorArgs: any[] = [];\n srcPath: string;\n path: any = null;\n export: string = null;\n dependsOn: ObjectIdentifier[] = [];\n properties = new ObjectProperties();\n namespace = '';\n handlerProps = [];\n createFrom;\n allowDowngrade = false;\n\n constructor() {\n this.creator = new ObjectCreator(this);\n }\n\n set asynchronous(asynchronous: boolean) {\n this._asynchronous = asynchronous;\n }\n\n isAsync(): boolean {\n return this._asynchronous;\n }\n\n isSingletonScope(): boolean {\n return this.scope === ScopeEnum.Singleton;\n }\n\n isRequestScope(): boolean {\n return this.scope === ScopeEnum.Request;\n }\n\n hasDependsOn(): boolean {\n return this.dependsOn.length > 0;\n }\n\n hasConstructorArgs(): boolean {\n return this.constructorArgs.length > 0;\n }\n\n getAttr(key: ObjectIdentifier): any {\n return this._attrs.get(key);\n }\n\n hasAttr(key: ObjectIdentifier): boolean {\n return this._attrs.has(key);\n }\n\n setAttr(key: ObjectIdentifier, value: any): void {\n this._attrs.set(key, value);\n }\n}\n/* tslint:enable:variable-name */\n"]}