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