@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,382 @@
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
@@ -0,0 +1,4 @@
1
+ // Integration providers exports
2
+ export * from './configuration-factory.provider';
3
+ export * from './aws-configuration-loader.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvaW50ZWdyYXRpb24vcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdDQUFnQztBQUNoQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbnRlZ3JhdGlvbiBwcm92aWRlcnMgZXhwb3J0c1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRpb24tZmFjdG9yeS5wcm92aWRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXdzLWNvbmZpZ3VyYXRpb24tbG9hZGVyLnNlcnZpY2UnOyJdfQ==