@dyanet/nestjs-config-aws 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -43
  3. package/dist/cjs/aws-config-loader.js +57 -0
  4. package/dist/cjs/build-loaders.js +58 -0
  5. package/dist/cjs/config.module.js +138 -0
  6. package/dist/cjs/index.js +46 -0
  7. package/dist/cjs/interfaces/config-service.interface.js +11 -0
  8. package/dist/cjs/interfaces/default-schema.interface.js +63 -0
  9. package/dist/cjs/{nestjs-config-aws/src/interfaces → interfaces}/index.js +1 -1
  10. package/dist/cjs/interfaces/module-options.interface.js +3 -0
  11. package/dist/cjs/package.json +3 -0
  12. package/dist/cjs/services/config.service.js +142 -0
  13. package/dist/esm/aws-config-loader.js +54 -0
  14. package/dist/esm/build-loaders.js +55 -0
  15. package/dist/esm/config.module.js +135 -0
  16. package/dist/esm/index.js +18 -0
  17. package/dist/esm/interfaces/config-service.interface.js +7 -0
  18. package/dist/esm/interfaces/default-schema.interface.js +59 -0
  19. package/dist/esm/interfaces/index.js +8 -0
  20. package/dist/esm/interfaces/module-options.interface.js +2 -0
  21. package/dist/esm/package.json +3 -0
  22. package/dist/esm/services/config.service.js +139 -0
  23. package/dist/types/aws-config-loader.d.ts +74 -0
  24. package/dist/types/aws-config-loader.d.ts.map +1 -0
  25. package/dist/types/build-loaders.d.ts +30 -0
  26. package/dist/types/build-loaders.d.ts.map +1 -0
  27. package/dist/types/{nestjs-config-aws/src/config.module.d.ts → config.module.d.ts} +2 -8
  28. package/dist/types/config.module.d.ts.map +1 -0
  29. package/dist/types/index.d.ts +10 -0
  30. package/dist/types/index.d.ts.map +1 -0
  31. package/dist/types/interfaces/config-service.interface.d.ts.map +1 -0
  32. package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/default-schema.interface.d.ts +14 -14
  33. package/dist/types/interfaces/default-schema.interface.d.ts.map +1 -0
  34. package/dist/types/interfaces/index.d.ts.map +1 -0
  35. package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/module-options.interface.d.ts +22 -3
  36. package/dist/types/interfaces/module-options.interface.d.ts.map +1 -0
  37. package/dist/types/services/config.service.d.ts.map +1 -0
  38. package/package.json +12 -6
  39. package/dist/cjs/config-aws/src/config-manager.js +0 -366
  40. package/dist/cjs/config-aws/src/errors/index.js +0 -77
  41. package/dist/cjs/config-aws/src/index.js +0 -37
  42. package/dist/cjs/config-aws/src/interfaces/config-loader.interface.js +0 -3
  43. package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +0 -3
  44. package/dist/cjs/config-aws/src/interfaces/env-file-loader.interface.js +0 -3
  45. package/dist/cjs/config-aws/src/interfaces/environment-loader.interface.js +0 -3
  46. package/dist/cjs/config-aws/src/interfaces/s3-loader.interface.js +0 -3
  47. package/dist/cjs/config-aws/src/interfaces/secrets-manager-loader.interface.js +0 -3
  48. package/dist/cjs/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +0 -3
  49. package/dist/cjs/config-aws/src/loaders/env-file.loader.js +0 -169
  50. package/dist/cjs/config-aws/src/loaders/environment.loader.js +0 -85
  51. package/dist/cjs/config-aws/src/loaders/s3.loader.js +0 -145
  52. package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +0 -169
  53. package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +0 -199
  54. package/dist/cjs/config-aws/src/utils/env-file-parser.util.js +0 -98
  55. package/dist/cjs/config-aws/src/utils/validation.util.js +0 -116
  56. package/dist/cjs/nestjs-config-aws/src/config.module.js +0 -175
  57. package/dist/cjs/nestjs-config-aws/src/index.js +0 -61
  58. package/dist/cjs/nestjs-config-aws/src/integration/index.js +0 -23
  59. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +0 -3
  60. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +0 -3
  61. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/index.js +0 -26
  62. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +0 -3
  63. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +0 -3
  64. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +0 -73
  65. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +0 -3
  66. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +0 -4
  67. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +0 -52
  68. package/dist/cjs/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +0 -124
  69. package/dist/cjs/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +0 -592
  70. package/dist/cjs/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +0 -385
  71. package/dist/cjs/nestjs-config-aws/src/integration/providers/index.js +0 -20
  72. package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +0 -366
  73. package/dist/cjs/nestjs-config-aws/src/integration/services/error-handler.service.js +0 -267
  74. package/dist/cjs/nestjs-config-aws/src/integration/services/factory-registration.service.js +0 -517
  75. package/dist/cjs/nestjs-config-aws/src/integration/services/index.js +0 -26
  76. package/dist/cjs/nestjs-config-aws/src/integration/services/integration-state.service.js +0 -81
  77. package/dist/cjs/nestjs-config-aws/src/integration/services/namespace-handler.service.js +0 -465
  78. package/dist/cjs/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +0 -318
  79. package/dist/cjs/nestjs-config-aws/src/integration/services/precedence-handler.service.js +0 -292
  80. package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +0 -595
  81. package/dist/cjs/nestjs-config-aws/src/integration/utils/config-integration.util.js +0 -283
  82. package/dist/cjs/nestjs-config-aws/src/integration/utils/index.js +0 -19
  83. package/dist/cjs/nestjs-config-aws/src/interfaces/config-service.interface.js +0 -11
  84. package/dist/cjs/nestjs-config-aws/src/interfaces/default-schema.interface.js +0 -63
  85. package/dist/cjs/nestjs-config-aws/src/interfaces/module-options.interface.js +0 -3
  86. package/dist/cjs/nestjs-config-aws/src/services/config.service.js +0 -142
  87. package/dist/esm/config-aws/src/config-manager.js +0 -362
  88. package/dist/esm/config-aws/src/errors/index.js +0 -69
  89. package/dist/esm/config-aws/src/index.js +0 -21
  90. package/dist/esm/config-aws/src/interfaces/config-loader.interface.js +0 -2
  91. package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +0 -2
  92. package/dist/esm/config-aws/src/interfaces/env-file-loader.interface.js +0 -2
  93. package/dist/esm/config-aws/src/interfaces/environment-loader.interface.js +0 -2
  94. package/dist/esm/config-aws/src/interfaces/s3-loader.interface.js +0 -2
  95. package/dist/esm/config-aws/src/interfaces/secrets-manager-loader.interface.js +0 -2
  96. package/dist/esm/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +0 -2
  97. package/dist/esm/config-aws/src/loaders/env-file.loader.js +0 -132
  98. package/dist/esm/config-aws/src/loaders/environment.loader.js +0 -81
  99. package/dist/esm/config-aws/src/loaders/s3.loader.js +0 -141
  100. package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +0 -165
  101. package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +0 -195
  102. package/dist/esm/config-aws/src/utils/env-file-parser.util.js +0 -94
  103. package/dist/esm/config-aws/src/utils/validation.util.js +0 -112
  104. package/dist/esm/nestjs-config-aws/src/config.module.js +0 -172
  105. package/dist/esm/nestjs-config-aws/src/index.js +0 -23
  106. package/dist/esm/nestjs-config-aws/src/integration/index.js +0 -7
  107. package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +0 -2
  108. package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +0 -2
  109. package/dist/esm/nestjs-config-aws/src/integration/interfaces/index.js +0 -10
  110. package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +0 -2
  111. package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +0 -2
  112. package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +0 -64
  113. package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +0 -2
  114. package/dist/esm/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +0 -3
  115. package/dist/esm/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +0 -44
  116. package/dist/esm/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +0 -121
  117. package/dist/esm/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +0 -589
  118. package/dist/esm/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +0 -382
  119. package/dist/esm/nestjs-config-aws/src/integration/providers/index.js +0 -4
  120. package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +0 -363
  121. package/dist/esm/nestjs-config-aws/src/integration/services/error-handler.service.js +0 -264
  122. package/dist/esm/nestjs-config-aws/src/integration/services/factory-registration.service.js +0 -514
  123. package/dist/esm/nestjs-config-aws/src/integration/services/index.js +0 -10
  124. package/dist/esm/nestjs-config-aws/src/integration/services/integration-state.service.js +0 -78
  125. package/dist/esm/nestjs-config-aws/src/integration/services/namespace-handler.service.js +0 -462
  126. package/dist/esm/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +0 -315
  127. package/dist/esm/nestjs-config-aws/src/integration/services/precedence-handler.service.js +0 -289
  128. package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +0 -589
  129. package/dist/esm/nestjs-config-aws/src/integration/utils/config-integration.util.js +0 -240
  130. package/dist/esm/nestjs-config-aws/src/integration/utils/index.js +0 -3
  131. package/dist/esm/nestjs-config-aws/src/interfaces/config-service.interface.js +0 -7
  132. package/dist/esm/nestjs-config-aws/src/interfaces/default-schema.interface.js +0 -59
  133. package/dist/esm/nestjs-config-aws/src/interfaces/index.js +0 -8
  134. package/dist/esm/nestjs-config-aws/src/interfaces/module-options.interface.js +0 -2
  135. package/dist/esm/nestjs-config-aws/src/services/config.service.js +0 -139
  136. package/dist/types/config-aws/src/config-manager.d.ts +0 -119
  137. package/dist/types/config-aws/src/config-manager.d.ts.map +0 -1
  138. package/dist/types/config-aws/src/errors/index.d.ts +0 -43
  139. package/dist/types/config-aws/src/errors/index.d.ts.map +0 -1
  140. package/dist/types/config-aws/src/index.d.ts +0 -24
  141. package/dist/types/config-aws/src/index.d.ts.map +0 -1
  142. package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts +0 -33
  143. package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts.map +0 -1
  144. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +0 -86
  145. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +0 -1
  146. package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts +0 -12
  147. package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts.map +0 -1
  148. package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts +0 -10
  149. package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts.map +0 -1
  150. package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts +0 -14
  151. package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts.map +0 -1
  152. package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts +0 -12
  153. package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts.map +0 -1
  154. package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts +0 -14
  155. package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts.map +0 -1
  156. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +0 -69
  157. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +0 -1
  158. package/dist/types/config-aws/src/loaders/environment.loader.d.ts +0 -46
  159. package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +0 -1
  160. package/dist/types/config-aws/src/loaders/s3.loader.d.ts +0 -62
  161. package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +0 -1
  162. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +0 -68
  163. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +0 -1
  164. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +0 -78
  165. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +0 -1
  166. package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts +0 -45
  167. package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts.map +0 -1
  168. package/dist/types/config-aws/src/utils/validation.util.d.ts +0 -53
  169. package/dist/types/config-aws/src/utils/validation.util.d.ts.map +0 -1
  170. package/dist/types/nestjs-config-aws/src/config.module.d.ts.map +0 -1
  171. package/dist/types/nestjs-config-aws/src/index.d.ts +0 -11
  172. package/dist/types/nestjs-config-aws/src/index.d.ts.map +0 -1
  173. package/dist/types/nestjs-config-aws/src/integration/index.d.ts +0 -6
  174. package/dist/types/nestjs-config-aws/src/integration/index.d.ts.map +0 -1
  175. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts +0 -71
  176. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts.map +0 -1
  177. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts +0 -24
  178. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts.map +0 -1
  179. package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts +0 -9
  180. package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts.map +0 -1
  181. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts +0 -66
  182. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts.map +0 -1
  183. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts +0 -17
  184. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts.map +0 -1
  185. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts +0 -332
  186. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +0 -1
  187. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts +0 -259
  188. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts.map +0 -1
  189. package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts +0 -209
  190. package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts.map +0 -1
  191. package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts +0 -249
  192. package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts.map +0 -1
  193. package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts +0 -36
  194. package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts.map +0 -1
  195. package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts +0 -134
  196. package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts.map +0 -1
  197. package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts +0 -119
  198. package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts.map +0 -1
  199. package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts +0 -3
  200. package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts.map +0 -1
  201. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts +0 -84
  202. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +0 -1
  203. package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts +0 -84
  204. package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts.map +0 -1
  205. package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts +0 -158
  206. package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts.map +0 -1
  207. package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts +0 -9
  208. package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts.map +0 -1
  209. package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts +0 -41
  210. package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts.map +0 -1
  211. package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts +0 -192
  212. package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts.map +0 -1
  213. package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts +0 -87
  214. package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts.map +0 -1
  215. package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts +0 -103
  216. package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts.map +0 -1
  217. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts +0 -222
  218. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +0 -1
  219. package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts +0 -81
  220. package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts.map +0 -1
  221. package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts +0 -2
  222. package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts.map +0 -1
  223. package/dist/types/nestjs-config-aws/src/interfaces/config-service.interface.d.ts.map +0 -1
  224. package/dist/types/nestjs-config-aws/src/interfaces/default-schema.interface.d.ts.map +0 -1
  225. package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts.map +0 -1
  226. package/dist/types/nestjs-config-aws/src/interfaces/module-options.interface.d.ts.map +0 -1
  227. package/dist/types/nestjs-config-aws/src/services/config.service.d.ts.map +0 -1
  228. /package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/config-service.interface.d.ts +0 -0
  229. /package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/index.d.ts +0 -0
  230. /package/dist/types/{nestjs-config-aws/src/services → services}/config.service.d.ts +0 -0
@@ -1,382 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- var ConfigurationFactoryProviderImpl_1;
14
- import { Injectable, Logger, Inject, Optional } from '@nestjs/common';
15
- import { registerAs } from '@nestjs/config';
16
- import { PrecedenceHandlerService } from '../services/precedence-handler.service';
17
- import { NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS } from '../nestjs-config-integration.module';
18
- /**
19
- * Implementation of ConfigurationFactoryProvider that creates configuration factories
20
- * for @nestjs/config integration with AWS configuration sources.
21
- */
22
- let ConfigurationFactoryProviderImpl = ConfigurationFactoryProviderImpl_1 = class ConfigurationFactoryProviderImpl {
23
- precedenceHandler;
24
- options;
25
- logger = new Logger(ConfigurationFactoryProviderImpl_1.name);
26
- constructor(precedenceHandler, options) {
27
- this.precedenceHandler = precedenceHandler;
28
- this.options = options;
29
- }
30
- /**
31
- * Create a configuration factory for a specific namespace.
32
- * @param namespace - The namespace for the configuration
33
- * @param config - The configuration data
34
- * @returns A configuration factory that can be used with @nestjs/config
35
- */
36
- createFactory(namespace, config) {
37
- this.logger.debug(`Creating configuration factory for namespace: ${namespace}`);
38
- // Create a factory function that returns the configuration
39
- const factory = () => {
40
- this.logger.debug(`Factory called for namespace: ${namespace}`);
41
- const processedConfig = this.processConfigurationValues(config);
42
- // Add metadata for debugging and introspection
43
- if (this.options?.enableLogging) {
44
- this.logger.debug(`Factory returning ${Object.keys(processedConfig).length} configuration keys for namespace: ${namespace}`);
45
- }
46
- return processedConfig;
47
- };
48
- // If namespace is provided, use registerAs to create a namespaced factory
49
- if (namespace && namespace.trim() !== '') {
50
- const namespacedFactory = registerAs(namespace, factory);
51
- // Enhance the factory with additional metadata for better integration
52
- namespacedFactory.__namespace = namespace;
53
- namespacedFactory.__isAwsFactory = true;
54
- namespacedFactory.__configKeys = Object.keys(config);
55
- return namespacedFactory;
56
- }
57
- // For non-namespaced factories, add metadata as well
58
- factory.__isAwsFactory = true;
59
- factory.__configKeys = Object.keys(config);
60
- return factory;
61
- }
62
- /**
63
- * Create multiple namespaced configuration factories from a configuration object.
64
- * @param config - The configuration data organized by namespace
65
- * @returns Array of configuration factories
66
- */
67
- createNamespacedFactories(config) {
68
- this.logger.debug(`Creating namespaced factories for ${Object.keys(config).length} namespaces`);
69
- const factories = [];
70
- for (const [namespace, namespaceConfig] of Object.entries(config)) {
71
- if (this.isValidNamespaceConfig(namespace, namespaceConfig)) {
72
- try {
73
- const factory = this.createFactory(namespace, namespaceConfig);
74
- factories.push(factory);
75
- this.logger.debug(`Created factory for namespace: ${namespace}`);
76
- }
77
- catch (error) {
78
- this.logger.error(`Failed to create factory for namespace ${namespace}:`, error);
79
- }
80
- }
81
- else {
82
- this.logger.warn(`Skipping invalid namespace configuration: ${namespace}`);
83
- }
84
- }
85
- return factories;
86
- }
87
- /**
88
- * Merge AWS configuration with existing local configuration using precedence rules.
89
- * @param awsConfig - Configuration loaded from AWS sources
90
- * @param localConfig - Local configuration data
91
- * @returns Merged configuration data
92
- */
93
- mergeWithExisting(awsConfig, localConfig) {
94
- this.logger.debug('Merging AWS configuration with local configuration');
95
- // Create configuration sources for precedence handling
96
- const sources = [
97
- {
98
- name: 'local-config',
99
- type: 'local-file',
100
- priority: 1,
101
- data: localConfig,
102
- loadedAt: new Date()
103
- },
104
- {
105
- name: 'aws-config',
106
- type: 'secrets-manager', // Assume AWS config is from secrets manager for now
107
- priority: 2,
108
- data: awsConfig,
109
- loadedAt: new Date()
110
- }
111
- ];
112
- // Use AWS-first precedence by default
113
- const merged = this.precedenceHandler.applyPrecedenceRules(sources, 'aws-first');
114
- this.logger.debug(`Merged configuration with ${Object.keys(merged).length} top-level keys`);
115
- return merged;
116
- }
117
- /**
118
- * Create an enhanced AWS configuration factory with metadata.
119
- * @param namespace - Optional namespace for the configuration
120
- * @param config - The configuration data
121
- * @param sources - Sources that contributed to this configuration
122
- * @param precedenceRule - Precedence rule applied to this configuration
123
- * @returns Enhanced AWS configuration factory
124
- */
125
- createAwsConfigurationFactory(namespace, config, sources, precedenceRule) {
126
- const baseFactory = namespace
127
- ? this.createFactory(namespace, config)
128
- : this.createFactory('', config);
129
- // Enhance the factory with AWS-specific metadata
130
- const awsFactory = baseFactory;
131
- awsFactory.namespace = namespace;
132
- awsFactory.sources = sources;
133
- awsFactory.precedenceRule = precedenceRule;
134
- this.logger.debug(`Created AWS configuration factory with ${sources.length} sources and precedence: ${precedenceRule}`);
135
- return awsFactory;
136
- }
137
- /**
138
- * Create configuration factories from multiple sources with proper organization.
139
- * @param sourceConfigs - Map of source name to configuration data
140
- * @param namespaces - Optional list of namespaces to organize configuration
141
- * @returns Array of configuration factories organized by namespace
142
- */
143
- createFactoriesFromSources(sourceConfigs, namespaces) {
144
- this.logger.debug(`Creating factories from ${sourceConfigs.size} sources`);
145
- const factories = [];
146
- if (namespaces && namespaces.length > 0) {
147
- // Create namespaced factories
148
- for (const namespace of namespaces) {
149
- const namespaceConfig = this.extractNamespaceConfig(sourceConfigs, namespace);
150
- if (Object.keys(namespaceConfig).length > 0) {
151
- const factory = this.createFactory(namespace, namespaceConfig);
152
- factories.push(factory);
153
- }
154
- }
155
- }
156
- else {
157
- // Create a single factory with all configuration
158
- const mergedConfig = this.mergeSourceConfigs(sourceConfigs);
159
- if (Object.keys(mergedConfig).length > 0) {
160
- const factory = this.createFactory('', mergedConfig);
161
- factories.push(factory);
162
- }
163
- }
164
- this.logger.debug(`Created ${factories.length} factories from sources`);
165
- return factories;
166
- }
167
- /**
168
- * Create configuration factories from sources with precedence rules.
169
- * @param sources - Array of configuration sources
170
- * @param precedenceRule - Precedence rule to apply
171
- * @param namespaces - Optional list of namespaces to organize configuration
172
- * @returns Array of configuration factories
173
- */
174
- createFactoriesWithPrecedence(sources, precedenceRule, namespaces) {
175
- this.logger.debug(`Creating factories with precedence rule: ${precedenceRule}`);
176
- // Validate sources first
177
- const validation = this.precedenceHandler.validateSources(sources);
178
- if (!validation.valid) {
179
- this.logger.error('Invalid sources provided:', validation.issues);
180
- throw new Error(`Invalid configuration sources: ${validation.issues.join(', ')}`);
181
- }
182
- const factories = [];
183
- if (namespaces && namespaces.length > 0) {
184
- // Create namespaced factories with precedence
185
- for (const namespace of namespaces) {
186
- const namespaceSources = this.extractNamespaceSources(sources, namespace);
187
- if (namespaceSources.length > 0) {
188
- const mergedConfig = this.precedenceHandler.applyPrecedenceRules(namespaceSources, precedenceRule);
189
- const factory = this.createAwsConfigurationFactory(namespace, mergedConfig, namespaceSources, precedenceRule);
190
- factories.push(factory);
191
- }
192
- }
193
- }
194
- else {
195
- // Create a single factory with all configuration
196
- const mergedConfig = this.precedenceHandler.applyPrecedenceRules(sources, precedenceRule);
197
- const factory = this.createAwsConfigurationFactory(undefined, mergedConfig, sources, precedenceRule);
198
- factories.push(factory);
199
- }
200
- this.logger.debug(`Created ${factories.length} factories with precedence`);
201
- return factories;
202
- }
203
- /**
204
- * Merge configuration with explicit precedence rule.
205
- * @param sources - Configuration sources
206
- * @param precedenceRule - Precedence rule to apply
207
- * @returns Merged configuration data
208
- */
209
- mergeWithPrecedence(sources, precedenceRule) {
210
- this.logger.debug(`Merging ${sources.length} sources with precedence: ${precedenceRule}`);
211
- const validation = this.precedenceHandler.validateSources(sources);
212
- if (!validation.valid) {
213
- this.logger.error('Invalid sources provided:', validation.issues);
214
- throw new Error(`Invalid configuration sources: ${validation.issues.join(', ')}`);
215
- }
216
- return this.precedenceHandler.applyPrecedenceRules(sources, precedenceRule);
217
- }
218
- /**
219
- * Process configuration values to handle special cases and transformations.
220
- * @param config - Raw configuration object
221
- * @returns Processed configuration object
222
- */
223
- processConfigurationValues(config) {
224
- const processed = {};
225
- for (const [key, value] of Object.entries(config)) {
226
- processed[key] = this.processValue(value);
227
- }
228
- return processed;
229
- }
230
- /**
231
- * Process individual configuration values.
232
- * @param value - The value to process
233
- * @returns Processed value
234
- */
235
- processValue(value) {
236
- if (value === null || value === undefined) {
237
- return value;
238
- }
239
- // Handle string values that might need type conversion
240
- if (typeof value === 'string') {
241
- return this.convertStringValue(value);
242
- }
243
- // Handle nested objects
244
- if (typeof value === 'object' && !Array.isArray(value)) {
245
- return this.processConfigurationValues(value);
246
- }
247
- // Handle arrays
248
- if (Array.isArray(value)) {
249
- return value.map(item => this.processValue(item));
250
- }
251
- return value;
252
- }
253
- /**
254
- * Convert string values to appropriate types.
255
- * @param value - String value to convert
256
- * @returns Converted value
257
- */
258
- convertStringValue(value) {
259
- // Handle boolean strings
260
- if (value.toLowerCase() === 'true')
261
- return true;
262
- if (value.toLowerCase() === 'false')
263
- return false;
264
- // Handle numeric strings
265
- if (/^\d+$/.test(value)) {
266
- const num = parseInt(value, 10);
267
- return isNaN(num) ? value : num;
268
- }
269
- if (/^\d*\.\d+$/.test(value)) {
270
- const num = parseFloat(value);
271
- return isNaN(num) ? value : num;
272
- }
273
- // Handle JSON strings
274
- if ((value.startsWith('{') && value.endsWith('}')) ||
275
- (value.startsWith('[') && value.endsWith(']'))) {
276
- try {
277
- return JSON.parse(value);
278
- }
279
- catch {
280
- // If parsing fails, return as string
281
- return value;
282
- }
283
- }
284
- return value;
285
- }
286
- /**
287
- * Validate if a namespace configuration is valid.
288
- * @param namespace - The namespace name
289
- * @param config - The configuration data
290
- * @returns True if valid, false otherwise
291
- */
292
- isValidNamespaceConfig(namespace, config) {
293
- return typeof namespace === 'string' &&
294
- namespace.trim() !== '' &&
295
- config !== null &&
296
- config !== undefined &&
297
- typeof config === 'object' &&
298
- !Array.isArray(config);
299
- }
300
- /**
301
- * Deep merge two configuration objects.
302
- * @param target - Target object
303
- * @param source - Source object
304
- * @returns Merged object
305
- */
306
- deepMerge(target, source) {
307
- const result = { ...target };
308
- for (const [key, value] of Object.entries(source)) {
309
- if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
310
- if (result[key] && typeof result[key] === 'object' && !Array.isArray(result[key])) {
311
- result[key] = this.deepMerge(result[key], value);
312
- }
313
- else {
314
- result[key] = { ...value };
315
- }
316
- }
317
- else {
318
- result[key] = value;
319
- }
320
- }
321
- return result;
322
- }
323
- /**
324
- * Extract configuration for a specific namespace from multiple sources.
325
- * @param sourceConfigs - Map of source configurations
326
- * @param namespace - Target namespace
327
- * @returns Configuration for the namespace
328
- */
329
- extractNamespaceConfig(sourceConfigs, namespace) {
330
- let namespaceConfig = {};
331
- for (const [sourceName, config] of sourceConfigs) {
332
- if (config[namespace]) {
333
- namespaceConfig = this.deepMerge(namespaceConfig, config[namespace]);
334
- this.logger.debug(`Extracted ${namespace} config from source: ${sourceName}`);
335
- }
336
- }
337
- return namespaceConfig;
338
- }
339
- /**
340
- * Merge configuration from multiple sources.
341
- * @param sourceConfigs - Map of source configurations
342
- * @returns Merged configuration
343
- */
344
- mergeSourceConfigs(sourceConfigs) {
345
- let mergedConfig = {};
346
- for (const [sourceName, config] of sourceConfigs) {
347
- mergedConfig = this.deepMerge(mergedConfig, config);
348
- this.logger.debug(`Merged config from source: ${sourceName}`);
349
- }
350
- return mergedConfig;
351
- }
352
- /**
353
- * Extract sources for a specific namespace.
354
- * @param sources - All configuration sources
355
- * @param namespace - Target namespace
356
- * @returns Sources filtered for the namespace
357
- */
358
- extractNamespaceSources(sources, namespace) {
359
- const namespaceSources = [];
360
- for (const source of sources) {
361
- if (source.namespace === namespace || source.data[namespace]) {
362
- const namespaceData = source.namespace === namespace ? source.data : source.data[namespace];
363
- if (namespaceData && typeof namespaceData === 'object') {
364
- namespaceSources.push({
365
- ...source,
366
- data: namespaceData,
367
- namespace: namespace
368
- });
369
- }
370
- }
371
- }
372
- return namespaceSources;
373
- }
374
- };
375
- ConfigurationFactoryProviderImpl = ConfigurationFactoryProviderImpl_1 = __decorate([
376
- Injectable(),
377
- __param(1, Optional()),
378
- __param(1, Inject(NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS)),
379
- __metadata("design:paramtypes", [PrecedenceHandlerService, Object])
380
- ], ConfigurationFactoryProviderImpl);
381
- export { ConfigurationFactoryProviderImpl };
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1mYWN0b3J5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3Byb3ZpZGVycy9jb25maWd1cmF0aW9uLWZhY3RvcnkucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQWlCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTVGOzs7R0FHRztBQUVJLElBQU0sZ0NBQWdDLHdDQUF0QyxNQUFNLGdDQUFnQztJQUl4QjtJQUVBO0lBTEYsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGtDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVFLFlBQ21CLGlCQUEyQyxFQUUzQyxPQUE0QjtRQUY1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBRTNDLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBQzVDLENBQUM7SUFFSjs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxTQUFpQixFQUFFLE1BQTJCO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhGLDJEQUEyRDtRQUMzRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lB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RTVGLElBQUksYUFBYSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN2RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7d0JBQ3BCLEdBQUcsTUFBTTt3QkFDVCxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsU0FBUyxFQUFFLFNBQVM7cUJBQ3JCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7Q0FDRixDQUFBO0FBdGFZLGdDQUFnQztJQUQ1QyxVQUFVLEVBQUU7SUFNUixXQUFBLFFBQVEsRUFBRSxDQUFBO0lBQUUsV0FBQSxNQUFNLENBQUMscUNBQXFDLENBQUMsQ0FBQTtxQ0FEdEIsd0JBQXdCO0dBSm5ELGdDQUFnQyxDQXNhNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBMb2dnZXIsIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAbmVzdGpzL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbmZpZ0ZhY3RvcnksIHJlZ2lzdGVyQXMgfSBmcm9tICdAbmVzdGpzL2NvbmZpZyc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXIsIEF3c0NvbmZpZ3VyYXRpb25GYWN0b3J5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWd1cmF0aW9uLWZhY3RvcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNvdXJjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlndXJhdGlvbi1zb3VyY2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUHJlY2VkZW5jZVJ1bGUsIEludGVncmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZWdyYXRpb24tb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQcmVjZWRlbmNlSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcmVjZWRlbmNlLWhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5FU1RKU19DT05GSUdfQVdTX0lOVEVHUkFUSU9OX09QVElPTlMgfSBmcm9tICcuLi9uZXN0anMtY29uZmlnLWludGVncmF0aW9uLm1vZHVsZSc7XHJcblxyXG4vKipcclxuICogSW1wbGVtZW50YXRpb24gb2YgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlciB0aGF0IGNyZWF0ZXMgY29uZmlndXJhdGlvbiBmYWN0b3JpZXNcclxuICogZm9yIEBuZXN0anMvY29uZmlnIGludGVncmF0aW9uIHdpdGggQVdTIGNvbmZpZ3VyYXRpb24gc291cmNlcy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsIGltcGxlbWVudHMgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBuZXcgTG9nZ2VyKENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsLm5hbWUpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJlY2VkZW5jZUhhbmRsZXI6IFByZWNlZGVuY2VIYW5kbGVyU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkVTVEpTX0NPTkZJR19BV1NfSU5URUdSQVRJT05fT1BUSU9OUykgXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM/OiBJbnRlZ3JhdGlvbk9wdGlvbnNcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSBmb3IgYSBzcGVjaWZpYyBuYW1lc3BhY2UuXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGRhdGFcclxuICAgKiBAcmV0dXJucyBBIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIHdpdGggQG5lc3Rqcy9jb25maWdcclxuICAgKi9cclxuICBjcmVhdGVGYWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nLCBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBDb25maWdGYWN0b3J5IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBjb25maWd1cmF0aW9uIGZhY3RvcnkgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2V9YCk7XHJcbiAgICBcclxuICAgIC8vIENyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uXHJcbiAgICBjb25zdCBmYWN0b3J5ID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgRmFjdG9yeSBjYWxsZWQgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2V9YCk7XHJcbiAgICAgIGNvbnN0IHByb2Nlc3NlZENvbmZpZyA9IHRoaXMucHJvY2Vzc0NvbmZpZ3VyYXRpb25WYWx1ZXMoY29uZmlnKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEFkZCBtZXRhZGF0YSBmb3IgZGVidWdnaW5nIGFuZCBpbnRyb3NwZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZUxvZ2dpbmcpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgRmFjdG9yeSByZXR1cm5pbmcgJHtPYmplY3Qua2V5cyhwcm9jZXNzZWRDb25maWcpLmxlbmd0aH0gY29uZmlndXJhdGlvbiBrZXlzIGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlfWApO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gcHJvY2Vzc2VkQ29uZmlnO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJZiBuYW1lc3BhY2UgaXMgcHJvdmlkZWQsIHVzZSByZWdpc3RlckFzIHRvIGNyZWF0ZSBhIG5hbWVzcGFjZWQgZmFjdG9yeVxyXG4gICAgaWYgKG5hbWVzcGFjZSAmJiBuYW1lc3BhY2UudHJpbSgpICE9PSAnJykge1xyXG4gICAgICBjb25zdCBuYW1lc3BhY2VkRmFjdG9yeSA9IHJlZ2lzdGVyQXMobmFtZXNwYWNlLCBmYWN0b3J5KTtcclxuICAgICAgXHJcbiAgICAgIC8vIEVuaGFuY2UgdGhlIGZhY3Rvcnkgd2l0aCBhZGRpdGlvbmFsIG1ldGFkYXRhIGZvciBiZXR0ZXIgaW50ZWdyYXRpb25cclxuICAgICAgKG5hbWVzcGFjZWRGYWN0b3J5IGFzIGFueSkuX19uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XHJcbiAgICAgIChuYW1lc3BhY2VkRmFjdG9yeSBhcyBhbnkpLl9faXNBd3NGYWN0b3J5ID0gdHJ1ZTtcclxuICAgICAgKG5hbWVzcGFjZWRGYWN0b3J5IGFzIGFueSkuX19jb25maWdLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKTtcclxuICAgICAgXHJcbiAgICAgIHJldHVybiBuYW1lc3BhY2VkRmFjdG9yeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3Igbm9uLW5hbWVzcGFjZWQgZmFjdG9yaWVzLCBhZGQgbWV0YWRhdGEgYXMgd2VsbFxyXG4gICAgKGZhY3RvcnkgYXMgYW55KS5fX2lzQXdzRmFjdG9yeSA9IHRydWU7XHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9fY29uZmlnS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7XHJcbiAgICBcclxuICAgIHJldHVybiBmYWN0b3J5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIG11bHRpcGxlIG5hbWVzcGFjZWQgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZnJvbSBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBkYXRhIG9yZ2FuaXplZCBieSBuYW1lc3BhY2VcclxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gICAqL1xyXG4gIGNyZWF0ZU5hbWVzcGFjZWRGYWN0b3JpZXMoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogQ29uZmlnRmFjdG9yeVtdIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBuYW1lc3BhY2VkIGZhY3RvcmllcyBmb3IgJHtPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aH0gbmFtZXNwYWNlc2ApO1xyXG4gICAgY29uc3QgZmFjdG9yaWVzOiBDb25maWdGYWN0b3J5W10gPSBbXTtcclxuICAgIFxyXG4gICAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBuYW1lc3BhY2VDb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZykpIHtcclxuICAgICAgaWYgKHRoaXMuaXNWYWxpZE5hbWVzcGFjZUNvbmZpZyhuYW1lc3BhY2UsIG5hbWVzcGFjZUNvbmZpZykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuY3JlYXRlRmFjdG9yeShuYW1lc3BhY2UsIG5hbWVzcGFjZUNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcclxuICAgICAgICAgIGZhY3Rvcmllcy5wdXNoKGZhY3RvcnkpO1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0ZWQgZmFjdG9yeSBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZX1gKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmFjdG9yeSBmb3IgbmFtZXNwYWNlICR7bmFtZXNwYWNlfTpgLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFNraXBwaW5nIGludmFsaWQgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb246ICR7bmFtZXNwYWNlfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBmYWN0b3JpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZSBBV1MgY29uZmlndXJhdGlvbiB3aXRoIGV4aXN0aW5nIGxvY2FsIGNvbmZpZ3VyYXRpb24gdXNpbmcgcHJlY2VkZW5jZSBydWxlcy5cclxuICAgKiBAcGFyYW0gYXdzQ29uZmlnIC0gQ29uZmlndXJhdGlvbiBsb2FkZWQgZnJvbSBBV1Mgc291cmNlc1xyXG4gICAqIEBwYXJhbSBsb2NhbENvbmZpZyAtIExvY2FsIGNvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqIEByZXR1cm5zIE1lcmdlZCBjb25maWd1cmF0aW9uIGRhdGFcclxuICAgKi9cclxuICBtZXJnZVdpdGhFeGlzdGluZyhcclxuICAgIGF3c0NvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiwgXHJcbiAgICBsb2NhbENvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PlxyXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lcmdpbmcgQVdTIGNvbmZpZ3VyYXRpb24gd2l0aCBsb2NhbCBjb25maWd1cmF0aW9uJyk7XHJcbiAgICBcclxuICAgIC8vIENyZWF0ZSBjb25maWd1cmF0aW9uIHNvdXJjZXMgZm9yIHByZWNlZGVuY2UgaGFuZGxpbmdcclxuICAgIGNvbnN0IHNvdXJjZXM6IENvbmZpZ3VyYXRpb25Tb3VyY2VbXSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdsb2NhbC1jb25maWcnLFxyXG4gICAgICAgIHR5cGU6ICdsb2NhbC1maWxlJyxcclxuICAgICAgICBwcmlvcml0eTogMSxcclxuICAgICAgICBkYXRhOiBsb2NhbENvbmZpZyxcclxuICAgICAgICBsb2FkZWRBdDogbmV3IERhdGUoKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2F3cy1jb25maWcnLFxyXG4gICAgICAgIHR5cGU6ICdzZWNyZXRzLW1hbmFnZXInLCAvLyBBc3N1bWUgQVdTIGNvbmZpZyBpcyBmcm9tIHNlY3JldHMgbWFuYWdlciBmb3Igbm93XHJcbiAgICAgICAgcHJpb3JpdHk6IDIsXHJcbiAgICAgICAgZGF0YTogYXdzQ29uZmlnLFxyXG4gICAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgLy8gVXNlIEFXUy1maXJzdCBwcmVjZWRlbmNlIGJ5IGRlZmF1bHRcclxuICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMucHJlY2VkZW5jZUhhbmRsZXIuYXBwbHlQcmVjZWRlbmNlUnVsZXMoc291cmNlcywgJ2F3cy1maXJzdCcpO1xyXG4gICAgXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gd2l0aCAke09iamVjdC5rZXlzKG1lcmdlZCkubGVuZ3RofSB0b3AtbGV2ZWwga2V5c2ApO1xyXG4gICAgcmV0dXJuIG1lcmdlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBlbmhhbmNlZCBBV1MgY29uZmlndXJhdGlvbiBmYWN0b3J5IHdpdGggbWV0YWRhdGEuXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE9wdGlvbmFsIG5hbWVzcGFjZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gU291cmNlcyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoaXMgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBwcmVjZWRlbmNlUnVsZSAtIFByZWNlZGVuY2UgcnVsZSBhcHBsaWVkIHRvIHRoaXMgY29uZmlndXJhdGlvblxyXG4gICAqIEByZXR1cm5zIEVuaGFuY2VkIEFXUyBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgKi9cclxuICBjcmVhdGVBd3NDb25maWd1cmF0aW9uRmFjdG9yeShcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgc291cmNlczogQ29uZmlndXJhdGlvblNvdXJjZVtdLFxyXG4gICAgcHJlY2VkZW5jZVJ1bGU6IFByZWNlZGVuY2VSdWxlXHJcbiAgKTogQXdzQ29uZmlndXJhdGlvbkZhY3Rvcnkge1xyXG4gICAgY29uc3QgYmFzZUZhY3RvcnkgPSBuYW1lc3BhY2UgXHJcbiAgICAgID8gdGhpcy5jcmVhdGVGYWN0b3J5KG5hbWVzcGFjZSwgY29uZmlnKVxyXG4gICAgICA6IHRoaXMuY3JlYXRlRmFjdG9yeSgnJywgY29uZmlnKTtcclxuXHJcbiAgICAvLyBFbmhhbmNlIHRoZSBmYWN0b3J5IHdpdGggQVdTLXNwZWNpZmljIG1ldGFkYXRhXHJcbiAgICBjb25zdCBhd3NGYWN0b3J5ID0gYmFzZUZhY3RvcnkgYXMgQXdzQ29uZmlndXJhdGlvbkZhY3Rvcnk7XHJcbiAgICBhd3NGYWN0b3J5Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIGF3c0ZhY3Rvcnkuc291cmNlcyA9IHNvdXJjZXM7XHJcbiAgICBhd3NGYWN0b3J5LnByZWNlZGVuY2VSdWxlID0gcHJlY2VkZW5jZVJ1bGU7XHJcblxyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0ZWQgQVdTIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSB3aXRoICR7c291cmNlcy5sZW5ndGh9IHNvdXJjZXMgYW5kIHByZWNlZGVuY2U6ICR7cHJlY2VkZW5jZVJ1bGV9YCk7XHJcbiAgICBcclxuICAgIHJldHVybiBhd3NGYWN0b3J5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzIGZyb20gbXVsdGlwbGUgc291cmNlcyB3aXRoIHByb3BlciBvcmdhbml6YXRpb24uXHJcbiAgICogQHBhcmFtIHNvdXJjZUNvbmZpZ3MgLSBNYXAgb2Ygc291cmNlIG5hbWUgdG8gY29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZXMgLSBPcHRpb25hbCBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gb3JnYW5pemUgY29uZmlndXJhdGlvblxyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzIG9yZ2FuaXplZCBieSBuYW1lc3BhY2VcclxuICAgKi9cclxuICBjcmVhdGVGYWN0b3JpZXNGcm9tU291cmNlcyhcclxuICAgIHNvdXJjZUNvbmZpZ3M6IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+LFxyXG4gICAgbmFtZXNwYWNlcz86IHN0cmluZ1tdXHJcbiAgKTogQ29uZmlnRmFjdG9yeVtdIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBmYWN0b3JpZXMgZnJvbSAke3NvdXJjZUNvbmZpZ3Muc2l6ZX0gc291cmNlc2ApO1xyXG4gICAgY29uc3QgZmFjdG9yaWVzOiBDb25maWdGYWN0b3J5W10gPSBbXTtcclxuXHJcbiAgICBpZiAobmFtZXNwYWNlcyAmJiBuYW1lc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gQ3JlYXRlIG5hbWVzcGFjZWQgZmFjdG9yaWVzXHJcbiAgICAgIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIG5hbWVzcGFjZXMpIHtcclxuICAgICAgICBjb25zdCBuYW1lc3BhY2VDb25maWcgPSB0aGlzLmV4dHJhY3ROYW1lc3BhY2VDb25maWcoc291cmNlQ29uZmlncywgbmFtZXNwYWNlKTtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMobmFtZXNwYWNlQ29uZmlnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jcmVhdGVGYWN0b3J5KG5hbWVzcGFjZSwgbmFtZXNwYWNlQ29uZmlnKTtcclxuICAgICAgICAgIGZhY3Rvcmllcy5wdXNoKGZhY3RvcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgc2luZ2xlIGZhY3Rvcnkgd2l0aCBhbGwgY29uZmlndXJhdGlvblxyXG4gICAgICBjb25zdCBtZXJnZWRDb25maWcgPSB0aGlzLm1lcmdlU291cmNlQ29uZmlncyhzb3VyY2VDb25maWdzKTtcclxuICAgICAgaWYgKE9iamVjdC5rZXlzKG1lcmdlZENvbmZpZykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNyZWF0ZUZhY3RvcnkoJycsIG1lcmdlZENvbmZpZyk7XHJcbiAgICAgICAgZmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCAke2ZhY3Rvcmllcy5sZW5ndGh9IGZhY3RvcmllcyBmcm9tIHNvdXJjZXNgKTtcclxuICAgIHJldHVybiBmYWN0b3JpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZnJvbSBzb3VyY2VzIHdpdGggcHJlY2VkZW5jZSBydWxlcy5cclxuICAgKiBAcGFyYW0gc291cmNlcyAtIEFycmF5IG9mIGNvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEBwYXJhbSBwcmVjZWRlbmNlUnVsZSAtIFByZWNlZGVuY2UgcnVsZSB0byBhcHBseVxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gT3B0aW9uYWwgbGlzdCBvZiBuYW1lc3BhY2VzIHRvIG9yZ2FuaXplIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gICAqL1xyXG4gIGNyZWF0ZUZhY3Rvcmllc1dpdGhQcmVjZWRlbmNlKFxyXG4gICAgc291cmNlczogQ29uZmlndXJhdGlvblNvdXJjZVtdLFxyXG4gICAgcHJlY2VkZW5jZVJ1bGU6IFByZWNlZGVuY2VSdWxlLFxyXG4gICAgbmFtZXNwYWNlcz86IHN0cmluZ1tdXHJcbiAgKTogQ29uZmlnRmFjdG9yeVtdIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGluZyBmYWN0b3JpZXMgd2l0aCBwcmVjZWRlbmNlIHJ1bGU6ICR7cHJlY2VkZW5jZVJ1bGV9YCk7XHJcbiAgICBcclxuICAgIC8vIFZhbGlkYXRlIHNvdXJjZXMgZmlyc3RcclxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnByZWNlZGVuY2VIYW5kbGVyLnZhbGlkYXRlU291cmNlcyhzb3VyY2VzKTtcclxuICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignSW52YWxpZCBzb3VyY2VzIHByb3ZpZGVkOicsIHZhbGlkYXRpb24uaXNzdWVzKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gc291cmNlczogJHt2YWxpZGF0aW9uLmlzc3Vlcy5qb2luKCcsICcpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZhY3RvcmllczogQ29uZmlnRmFjdG9yeVtdID0gW107XHJcblxyXG4gICAgaWYgKG5hbWVzcGFjZXMgJiYgbmFtZXNwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBuYW1lc3BhY2VkIGZhY3RvcmllcyB3aXRoIHByZWNlZGVuY2VcclxuICAgICAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgbmFtZXNwYWNlcykge1xyXG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZVNvdXJjZXMgPSB0aGlzLmV4dHJhY3ROYW1lc3BhY2VTb3VyY2VzKHNvdXJjZXMsIG5hbWVzcGFjZSk7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZVNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgbWVyZ2VkQ29uZmlnID0gdGhpcy5wcmVjZWRlbmNlSGFuZGxlci5hcHBseVByZWNlZGVuY2VSdWxlcyhuYW1lc3BhY2VTb3VyY2VzLCBwcmVjZWRlbmNlUnVsZSk7XHJcbiAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jcmVhdGVBd3NDb25maWd1cmF0aW9uRmFjdG9yeShuYW1lc3BhY2UsIG1lcmdlZENvbmZpZywgbmFtZXNwYWNlU291cmNlcywgcHJlY2VkZW5jZVJ1bGUpO1xyXG4gICAgICAgICAgZmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYSBzaW5nbGUgZmFjdG9yeSB3aXRoIGFsbCBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IG1lcmdlZENvbmZpZyA9IHRoaXMucHJlY2VkZW5jZUhhbmRsZXIuYXBwbHlQcmVjZWRlbmNlUnVsZXMoc291cmNlcywgcHJlY2VkZW5jZVJ1bGUpO1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jcmVhdGVBd3NDb25maWd1cmF0aW9uRmFjdG9yeSh1bmRlZmluZWQsIG1lcmdlZENvbmZpZywgc291cmNlcywgcHJlY2VkZW5jZVJ1bGUpO1xyXG4gICAgICBmYWN0b3JpZXMucHVzaChmYWN0b3J5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCAke2ZhY3Rvcmllcy5sZW5ndGh9IGZhY3RvcmllcyB3aXRoIHByZWNlZGVuY2VgKTtcclxuICAgIHJldHVybiBmYWN0b3JpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZSBjb25maWd1cmF0aW9uIHdpdGggZXhwbGljaXQgcHJlY2VkZW5jZSBydWxlLlxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQ29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHBhcmFtIHByZWNlZGVuY2VSdWxlIC0gUHJlY2VkZW5jZSBydWxlIHRvIGFwcGx5XHJcbiAgICogQHJldHVybnMgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqL1xyXG4gIG1lcmdlV2l0aFByZWNlZGVuY2UoXHJcbiAgICBzb3VyY2VzOiBDb25maWd1cmF0aW9uU291cmNlW10sXHJcbiAgICBwcmVjZWRlbmNlUnVsZTogUHJlY2VkZW5jZVJ1bGVcclxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBNZXJnaW5nICR7c291cmNlcy5sZW5ndGh9IHNvdXJjZXMgd2l0aCBwcmVjZWRlbmNlOiAke3ByZWNlZGVuY2VSdWxlfWApO1xyXG4gICAgXHJcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5wcmVjZWRlbmNlSGFuZGxlci52YWxpZGF0ZVNvdXJjZXMoc291cmNlcyk7XHJcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ludmFsaWQgc291cmNlcyBwcm92aWRlZDonLCB2YWxpZGF0aW9uLmlzc3Vlcyk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb25maWd1cmF0aW9uIHNvdXJjZXM6ICR7dmFsaWRhdGlvbi5pc3N1ZXMuam9pbignLCAnKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlSGFuZGxlci5hcHBseVByZWNlZGVuY2VSdWxlcyhzb3VyY2VzLCBwcmVjZWRlbmNlUnVsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHRvIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIFJhdyBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIFByb2Nlc3NlZCBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJvY2Vzc0NvbmZpZ3VyYXRpb25WYWx1ZXMoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcpKSB7XHJcbiAgICAgIHByb2Nlc3NlZFtrZXldID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9jZXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMuXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHByb2Nlc3NcclxuICAgKiBAcmV0dXJucyBQcm9jZXNzZWQgdmFsdWVcclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3NWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgc3RyaW5nIHZhbHVlcyB0aGF0IG1pZ2h0IG5lZWQgdHlwZSBjb252ZXJzaW9uXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0U3RyaW5nVmFsdWUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBuZXN0ZWQgb2JqZWN0c1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDb25maWd1cmF0aW9uVmFsdWVzKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgYXJyYXlzXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IHRoaXMucHJvY2Vzc1ZhbHVlKGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHN0cmluZyB2YWx1ZXMgdG8gYXBwcm9wcmlhdGUgdHlwZXMuXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gU3RyaW5nIHZhbHVlIHRvIGNvbnZlcnRcclxuICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgdmFsdWVcclxuICAgKi9cclxuICBwcml2YXRlIGNvbnZlcnRTdHJpbmdWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcclxuICAgIC8vIEhhbmRsZSBib29sZWFuIHN0cmluZ3NcclxuICAgIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBIYW5kbGUgbnVtZXJpYyBzdHJpbmdzXHJcbiAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcclxuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyB2YWx1ZSA6IG51bTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL15cXGQqXFwuXFxkKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IHZhbHVlIDogbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBKU09OIHN0cmluZ3NcclxuICAgIGlmICgodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCd9JykpIHx8IFxyXG4gICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKCdbJykgJiYgdmFsdWUuZW5kc1dpdGgoJ10nKSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBhcyBzdHJpbmdcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBpZiBhIG5hbWVzcGFjZSBjb25maWd1cmF0aW9uIGlzIHZhbGlkLlxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG5hbWVcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNWYWxpZE5hbWVzcGFjZUNvbmZpZyhuYW1lc3BhY2U6IHN0cmluZywgY29uZmlnOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgbmFtZXNwYWNlID09PSAnc3RyaW5nJyAmJiBcclxuICAgICAgICAgICBuYW1lc3BhY2UudHJpbSgpICE9PSAnJyAmJlxyXG4gICAgICAgICAgIGNvbmZpZyAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgIGNvbmZpZyAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAhQXJyYXkuaXNBcnJheShjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVlcCBtZXJnZSB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzLlxyXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgb2JqZWN0XHJcbiAgICogQHBhcmFtIHNvdXJjZSAtIFNvdXJjZSBvYmplY3RcclxuICAgKiBAcmV0dXJucyBNZXJnZWQgb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWVwTWVyZ2UodGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udGFyZ2V0IH07XHJcblxyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xyXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICBpZiAocmVzdWx0W2tleV0gJiYgdHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXN1bHRba2V5XSkpIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5kZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB7IC4uLnZhbHVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIG5hbWVzcGFjZSBmcm9tIG11bHRpcGxlIHNvdXJjZXMuXHJcbiAgICogQHBhcmFtIHNvdXJjZUNvbmZpZ3MgLSBNYXAgb2Ygc291cmNlIGNvbmZpZ3VyYXRpb25zXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIFRhcmdldCBuYW1lc3BhY2VcclxuICAgKiBAcmV0dXJucyBDb25maWd1cmF0aW9uIGZvciB0aGUgbmFtZXNwYWNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBleHRyYWN0TmFtZXNwYWNlQ29uZmlnKFxyXG4gICAgc291cmNlQ29uZmlnczogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4sXHJcbiAgICBuYW1lc3BhY2U6IHN0cmluZ1xyXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgbGV0IG5hbWVzcGFjZUNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgW3NvdXJjZU5hbWUsIGNvbmZpZ10gb2Ygc291cmNlQ29uZmlncykge1xyXG4gICAgICBpZiAoY29uZmlnW25hbWVzcGFjZV0pIHtcclxuICAgICAgICBuYW1lc3BhY2VDb25maWcgPSB0aGlzLmRlZXBNZXJnZShuYW1lc3BhY2VDb25maWcsIGNvbmZpZ1tuYW1lc3BhY2VdKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgRXh0cmFjdGVkICR7bmFtZXNwYWNlfSBjb25maWcgZnJvbSBzb3VyY2U6ICR7c291cmNlTmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lc3BhY2VDb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZSBjb25maWd1cmF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlcy5cclxuICAgKiBAcGFyYW0gc291cmNlQ29uZmlncyAtIE1hcCBvZiBzb3VyY2UgY29uZmlndXJhdGlvbnNcclxuICAgKiBAcmV0dXJucyBNZXJnZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWVyZ2VTb3VyY2VDb25maWdzKHNvdXJjZUNvbmZpZ3M6IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBsZXQgbWVyZ2VkQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBbc291cmNlTmFtZSwgY29uZmlnXSBvZiBzb3VyY2VDb25maWdzKSB7XHJcbiAgICAgIG1lcmdlZENvbmZpZyA9IHRoaXMuZGVlcE1lcmdlKG1lcmdlZENvbmZpZywgY29uZmlnKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYE1lcmdlZCBjb25maWcgZnJvbSBzb3VyY2U6ICR7c291cmNlTmFtZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWVyZ2VkQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBzb3VyY2VzIGZvciBhIHNwZWNpZmljIG5hbWVzcGFjZS5cclxuICAgKiBAcGFyYW0gc291cmNlcyAtIEFsbCBjb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGFyZ2V0IG5hbWVzcGFjZVxyXG4gICAqIEByZXR1cm5zIFNvdXJjZXMgZmlsdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2VcclxuICAgKi9cclxuICBwcml2YXRlIGV4dHJhY3ROYW1lc3BhY2VTb3VyY2VzKHNvdXJjZXM6IENvbmZpZ3VyYXRpb25Tb3VyY2VbXSwgbmFtZXNwYWNlOiBzdHJpbmcpOiBDb25maWd1cmF0aW9uU291cmNlW10ge1xyXG4gICAgY29uc3QgbmFtZXNwYWNlU291cmNlczogQ29uZmlndXJhdGlvblNvdXJjZVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xyXG4gICAgICBpZiAoc291cmNlLm5hbWVzcGFjZSA9PT0gbmFtZXNwYWNlIHx8IHNvdXJjZS5kYXRhW25hbWVzcGFjZV0pIHtcclxuICAgICAgICBjb25zdCBuYW1lc3BhY2VEYXRhID0gc291cmNlLm5hbWVzcGFjZSA9PT0gbmFtZXNwYWNlID8gc291cmNlLmRhdGEgOiBzb3VyY2UuZGF0YVtuYW1lc3BhY2VdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChuYW1lc3BhY2VEYXRhICYmIHR5cGVvZiBuYW1lc3BhY2VEYXRhID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgbmFtZXNwYWNlU291cmNlcy5wdXNoKHtcclxuICAgICAgICAgICAgLi4uc291cmNlLFxyXG4gICAgICAgICAgICBkYXRhOiBuYW1lc3BhY2VEYXRhLFxyXG4gICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWVzcGFjZVNvdXJjZXM7XHJcbiAgfVxyXG59Il19
@@ -1,4 +0,0 @@
1
- // Integration providers exports
2
- export * from './configuration-factory.provider';
3
- export * from './aws-configuration-loader.service';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvaW50ZWdyYXRpb24vcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdDQUFnQztBQUNoQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbnRlZ3JhdGlvbiBwcm92aWRlcnMgZXhwb3J0c1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRpb24tZmFjdG9yeS5wcm92aWRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXdzLWNvbmZpZ3VyYXRpb24tbG9hZGVyLnNlcnZpY2UnOyJdfQ==