@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,240 @@
1
+ import { NestConfigAwsIntegrationModule } from '../nestjs-config-integration.module';
2
+ /**
3
+ * Utility functions for integrating nestjs-config-aws with @nestjs/config.
4
+ * These functions provide convenient ways to set up AWS configuration integration.
5
+ */
6
+ /**
7
+ * Create a configuration factory that loads from AWS sources.
8
+ * This factory can be used directly in @nestjs/config's load array.
9
+ *
10
+ * @param options - Integration options for AWS configuration
11
+ * @returns Promise resolving to configuration factory
12
+ */
13
+ export async function createAwsConfigFactory(options = {}) {
14
+ // Import services dynamically to avoid circular dependencies
15
+ const { AsyncConfigHelperService } = await import('../services/async-config-helper.service');
16
+ const { FactoryRegistrationService } = await import('../services/factory-registration.service');
17
+ const { ConfigurationFactoryProviderImpl } = await import('../providers/configuration-factory.provider');
18
+ const { AwsConfigurationLoaderService } = await import('../providers/aws-configuration-loader.service');
19
+ const { PrecedenceHandlerService } = await import('../services/precedence-handler.service');
20
+ const { NamespaceHandlerService } = await import('../services/namespace-handler.service');
21
+ const { ValidationIntegrationService } = await import('../services/validation-integration.service');
22
+ // Create service instances
23
+ const precedenceHandler = new PrecedenceHandlerService();
24
+ const configFactoryProvider = new ConfigurationFactoryProviderImpl(precedenceHandler);
25
+ const awsLoader = new AwsConfigurationLoaderService(options);
26
+ const namespaceHandler = new NamespaceHandlerService();
27
+ const validationService = new ValidationIntegrationService();
28
+ const factoryRegistration = new FactoryRegistrationService(configFactoryProvider, awsLoader, namespaceHandler, validationService, options);
29
+ const asyncHelper = new AsyncConfigHelperService(factoryRegistration, options);
30
+ // Create and return the async factory
31
+ return await asyncHelper.createAsyncConfigFactory();
32
+ }
33
+ /**
34
+ * Create configuration factories for specific namespaces.
35
+ * This function creates separate factories for each namespace.
36
+ *
37
+ * @param namespaces - Array of namespace names
38
+ * @param options - Integration options for AWS configuration
39
+ * @returns Promise resolving to array of namespaced configuration factories
40
+ */
41
+ export async function createAwsNamespacedFactories(namespaces, options = {}) {
42
+ // Import services dynamically
43
+ const { AsyncConfigHelperService } = await import('../services/async-config-helper.service');
44
+ const { FactoryRegistrationService } = await import('../services/factory-registration.service');
45
+ const { ConfigurationFactoryProviderImpl } = await import('../providers/configuration-factory.provider');
46
+ const { AwsConfigurationLoaderService } = await import('../providers/aws-configuration-loader.service');
47
+ const { PrecedenceHandlerService } = await import('../services/precedence-handler.service');
48
+ const { NamespaceHandlerService } = await import('../services/namespace-handler.service');
49
+ const { ValidationIntegrationService } = await import('../services/validation-integration.service');
50
+ // Create service instances
51
+ const precedenceHandler = new PrecedenceHandlerService();
52
+ const configFactoryProvider = new ConfigurationFactoryProviderImpl(precedenceHandler);
53
+ const awsLoader = new AwsConfigurationLoaderService(options);
54
+ const namespaceHandler = new NamespaceHandlerService();
55
+ const validationService = new ValidationIntegrationService();
56
+ const factoryRegistration = new FactoryRegistrationService(configFactoryProvider, awsLoader, namespaceHandler, validationService, options);
57
+ const asyncHelper = new AsyncConfigHelperService(factoryRegistration, options);
58
+ // Create and return the namespaced factories
59
+ return await asyncHelper.createAsyncNamespacedFactories(namespaces);
60
+ }
61
+ /**
62
+ * Create enhanced ConfigModule options with AWS integration.
63
+ * This function enhances existing ConfigModule options with AWS-sourced configuration.
64
+ *
65
+ * @param baseOptions - Base ConfigModule options to enhance
66
+ * @param integrationOptions - Integration options for AWS configuration
67
+ * @returns Promise resolving to enhanced ConfigModule options
68
+ */
69
+ export async function createEnhancedConfigOptions(baseOptions = {}, integrationOptions = {}) {
70
+ // Import services dynamically
71
+ const { AsyncConfigHelperService } = await import('../services/async-config-helper.service');
72
+ const { FactoryRegistrationService } = await import('../services/factory-registration.service');
73
+ const { ConfigurationFactoryProviderImpl } = await import('../providers/configuration-factory.provider');
74
+ const { AwsConfigurationLoaderService } = await import('../providers/aws-configuration-loader.service');
75
+ const { PrecedenceHandlerService } = await import('../services/precedence-handler.service');
76
+ const { NamespaceHandlerService } = await import('../services/namespace-handler.service');
77
+ const { ValidationIntegrationService } = await import('../services/validation-integration.service');
78
+ // Create service instances
79
+ const precedenceHandler = new PrecedenceHandlerService();
80
+ const configFactoryProvider = new ConfigurationFactoryProviderImpl(precedenceHandler);
81
+ const awsLoader = new AwsConfigurationLoaderService(integrationOptions);
82
+ const namespaceHandler = new NamespaceHandlerService();
83
+ const validationService = new ValidationIntegrationService();
84
+ const factoryRegistration = new FactoryRegistrationService(configFactoryProvider, awsLoader, namespaceHandler, validationService, integrationOptions);
85
+ const asyncHelper = new AsyncConfigHelperService(factoryRegistration, integrationOptions);
86
+ // Create and return enhanced options
87
+ return await asyncHelper.createAsyncConfigOptions(baseOptions);
88
+ }
89
+ /**
90
+ * Create a complete integration module for use with @nestjs/config.
91
+ * This function returns a module that can be imported alongside ConfigModule.
92
+ *
93
+ * @param options - Integration options for AWS configuration
94
+ * @returns Dynamic module for AWS integration
95
+ */
96
+ export function createAwsIntegrationModule(options = {}) {
97
+ return NestConfigAwsIntegrationModule.forRoot(options);
98
+ }
99
+ /**
100
+ * Create an async integration module for use with @nestjs/config.
101
+ * This function returns a module that can be imported alongside ConfigModule for async scenarios.
102
+ *
103
+ * @param useFactory - Factory function to create integration options
104
+ * @param inject - Dependencies to inject into the factory function
105
+ * @param imports - Modules to import for the factory function
106
+ * @returns Dynamic module for async AWS integration
107
+ */
108
+ export function createAsyncAwsIntegrationModule(useFactory, inject = [], imports = []) {
109
+ return NestConfigAwsIntegrationModule.forRootAsync({
110
+ useFactory,
111
+ inject,
112
+ imports,
113
+ });
114
+ }
115
+ /**
116
+ * Create a factory function that can be used with ConfigModule.forRoot().
117
+ * This factory function loads AWS configuration and merges it with local configuration.
118
+ *
119
+ * @param integrationOptions - Integration options for AWS configuration
120
+ * @returns Factory function for use with ConfigModule
121
+ */
122
+ export function createConfigModuleFactory(integrationOptions = {}) {
123
+ return async () => {
124
+ try {
125
+ // Create AWS configuration factory
126
+ const awsFactory = await createAwsConfigFactory(integrationOptions);
127
+ // Return ConfigModule options with AWS factory
128
+ return {
129
+ load: [awsFactory],
130
+ isGlobal: integrationOptions.registerGlobally ?? true,
131
+ cache: integrationOptions.factoryOptions?.cache ?? true,
132
+ expandVariables: integrationOptions.factoryOptions?.expandVariables ?? true,
133
+ };
134
+ }
135
+ catch (error) {
136
+ // Handle error based on integration options
137
+ if (integrationOptions.failOnAwsError) {
138
+ throw error;
139
+ }
140
+ // Return basic options as fallback
141
+ if (integrationOptions.fallbackToLocal) {
142
+ return {
143
+ load: [],
144
+ isGlobal: integrationOptions.registerGlobally ?? true,
145
+ cache: integrationOptions.factoryOptions?.cache ?? true,
146
+ expandVariables: integrationOptions.factoryOptions?.expandVariables ?? true,
147
+ };
148
+ }
149
+ throw error;
150
+ }
151
+ };
152
+ }
153
+ /**
154
+ * Create a factory function with dependency injection support.
155
+ * This factory function can receive injected dependencies and use them to configure AWS integration.
156
+ *
157
+ * @param integrationOptions - Integration options for AWS configuration
158
+ * @param dependencies - Array of dependency tokens to inject
159
+ * @returns Factory function with dependency injection support
160
+ */
161
+ export function createConfigModuleFactoryWithDependencies(integrationOptions = {}, dependencies = []) {
162
+ return async (...injectedDependencies) => {
163
+ try {
164
+ // Import services dynamically
165
+ const { AsyncConfigHelperService } = await import('../services/async-config-helper.service');
166
+ const { FactoryRegistrationService } = await import('../services/factory-registration.service');
167
+ const { ConfigurationFactoryProviderImpl } = await import('../providers/configuration-factory.provider');
168
+ const { AwsConfigurationLoaderService } = await import('../providers/aws-configuration-loader.service');
169
+ const { PrecedenceHandlerService } = await import('../services/precedence-handler.service');
170
+ const { NamespaceHandlerService } = await import('../services/namespace-handler.service');
171
+ const { ValidationIntegrationService } = await import('../services/validation-integration.service');
172
+ // Create service instances
173
+ const precedenceHandler = new PrecedenceHandlerService();
174
+ const configFactoryProvider = new ConfigurationFactoryProviderImpl(precedenceHandler);
175
+ const awsLoader = new AwsConfigurationLoaderService(integrationOptions);
176
+ const namespaceHandler = new NamespaceHandlerService();
177
+ const validationService = new ValidationIntegrationService();
178
+ const factoryRegistration = new FactoryRegistrationService(configFactoryProvider, awsLoader, namespaceHandler, validationService, integrationOptions);
179
+ const asyncHelper = new AsyncConfigHelperService(factoryRegistration, integrationOptions);
180
+ // Create factory with dependencies
181
+ const factoryWithDeps = asyncHelper.createAsyncFactoryWithDependencies(dependencies);
182
+ // Execute factory with injected dependencies
183
+ return await factoryWithDeps(...injectedDependencies);
184
+ }
185
+ catch (error) {
186
+ // Handle error based on integration options
187
+ if (integrationOptions.failOnAwsError) {
188
+ throw error;
189
+ }
190
+ // Return basic options as fallback
191
+ if (integrationOptions.fallbackToLocal) {
192
+ return {
193
+ load: [],
194
+ isGlobal: integrationOptions.registerGlobally ?? true,
195
+ cache: integrationOptions.factoryOptions?.cache ?? true,
196
+ expandVariables: integrationOptions.factoryOptions?.expandVariables ?? true,
197
+ };
198
+ }
199
+ throw error;
200
+ }
201
+ };
202
+ }
203
+ /**
204
+ * Check if AWS configuration is available for integration.
205
+ * This function can be used to determine if AWS integration should be enabled.
206
+ *
207
+ * @param options - Integration options for AWS configuration
208
+ * @returns Promise resolving to availability status
209
+ */
210
+ export async function checkAwsConfigAvailability(options = {}) {
211
+ try {
212
+ // Import services dynamically
213
+ const { AsyncConfigHelperService } = await import('../services/async-config-helper.service');
214
+ const { FactoryRegistrationService } = await import('../services/factory-registration.service');
215
+ const { ConfigurationFactoryProviderImpl } = await import('../providers/configuration-factory.provider');
216
+ const { AwsConfigurationLoaderService } = await import('../providers/aws-configuration-loader.service');
217
+ const { PrecedenceHandlerService } = await import('../services/precedence-handler.service');
218
+ const { NamespaceHandlerService } = await import('../services/namespace-handler.service');
219
+ const { ValidationIntegrationService } = await import('../services/validation-integration.service');
220
+ // Create service instances
221
+ const precedenceHandler = new PrecedenceHandlerService();
222
+ const configFactoryProvider = new ConfigurationFactoryProviderImpl(precedenceHandler);
223
+ const awsLoader = new AwsConfigurationLoaderService(options);
224
+ const namespaceHandler = new NamespaceHandlerService();
225
+ const validationService = new ValidationIntegrationService();
226
+ const factoryRegistration = new FactoryRegistrationService(configFactoryProvider, awsLoader, namespaceHandler, validationService, options);
227
+ const asyncHelper = new AsyncConfigHelperService(factoryRegistration, options);
228
+ // Check availability
229
+ return await asyncHelper.checkAsyncAvailability();
230
+ }
231
+ catch (error) {
232
+ const availabilityError = error instanceof Error ? error : new Error(String(error));
233
+ return {
234
+ isAvailable: false,
235
+ factoriesCount: 0,
236
+ errors: [availabilityError.message],
237
+ };
238
+ }
239
+ }
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWludGVncmF0aW9uLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvaW50ZWdyYXRpb24vdXRpbHMvY29uZmlnLWludGVncmF0aW9uLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFckY7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxVQUE4QixFQUFFO0lBQzNFLDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzdGLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDaEcsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUN6RyxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDNUYsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMxRixNQUFNLEVBQUUsNEJBQTRCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBRXBHLDJCQUEyQjtJQUMzQixNQUFNLGlCQUFpQixHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLHFCQUFxQixHQUFHLElBQUksZ0NBQWdDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RixNQUFNLFNBQVMsR0FBRyxJQUFJLDZC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QUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXBGLE9BQU87WUFDTCxXQUFXLEVBQUUsS0FBSztZQUNsQixjQUFjLEVBQUUsQ0FBQztZQUNqQixNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7U0FDcEMsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnRmFjdG9yeSwgQ29uZmlnTW9kdWxlT3B0aW9ucyB9IGZyb20gJ0BuZXN0anMvY29uZmlnJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZSB9IGZyb20gJ0BuZXN0anMvY29tbW9uJztcclxuaW1wb3J0IHsgSW50ZWdyYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlZ3JhdGlvbi1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE5lc3RDb25maWdBd3NJbnRlZ3JhdGlvbk1vZHVsZSB9IGZyb20gJy4uL25lc3Rqcy1jb25maWctaW50ZWdyYXRpb24ubW9kdWxlJztcclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgaW50ZWdyYXRpbmcgbmVzdGpzLWNvbmZpZy1hd3Mgd2l0aCBAbmVzdGpzL2NvbmZpZy5cclxuICogVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgY29udmVuaWVudCB3YXlzIHRvIHNldCB1cCBBV1MgY29uZmlndXJhdGlvbiBpbnRlZ3JhdGlvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uZmlndXJhdGlvbiBmYWN0b3J5IHRoYXQgbG9hZHMgZnJvbSBBV1Mgc291cmNlcy5cclxuICogVGhpcyBmYWN0b3J5IGNhbiBiZSB1c2VkIGRpcmVjdGx5IGluIEBuZXN0anMvY29uZmlnJ3MgbG9hZCBhcnJheS5cclxuICogXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gSW50ZWdyYXRpb24gb3B0aW9ucyBmb3IgQVdTIGNvbmZpZ3VyYXRpb25cclxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXdzQ29uZmlnRmFjdG9yeShvcHRpb25zOiBJbnRlZ3JhdGlvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8Q29uZmlnRmFjdG9yeT4ge1xyXG4gIC8vIEltcG9ydCBzZXJ2aWNlcyBkeW5hbWljYWxseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXNcclxuICBjb25zdCB7IEFzeW5jQ29uZmlnSGVscGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9hc3luYy1jb25maWctaGVscGVyLnNlcnZpY2UnKTtcclxuICBjb25zdCB7IEZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL2ZhY3RvcnktcmVnaXN0cmF0aW9uLnNlcnZpY2UnKTtcclxuICBjb25zdCB7IENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3Byb3ZpZGVycy9jb25maWd1cmF0aW9uLWZhY3RvcnkucHJvdmlkZXInKTtcclxuICBjb25zdCB7IEF3c0NvbmZpZ3VyYXRpb25Mb2FkZXJTZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3Byb3ZpZGVycy9hd3MtY29uZmlndXJhdGlvbi1sb2FkZXIuc2VydmljZScpO1xyXG4gIGNvbnN0IHsgUHJlY2VkZW5jZUhhbmRsZXJTZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3ByZWNlZGVuY2UtaGFuZGxlci5zZXJ2aWNlJyk7XHJcbiAgY29uc3QgeyBOYW1lc3BhY2VIYW5kbGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9uYW1lc3BhY2UtaGFuZGxlci5zZXJ2aWNlJyk7XHJcbiAgY29uc3QgeyBWYWxpZGF0aW9uSW50ZWdyYXRpb25TZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZScpO1xyXG5cclxuICAvLyBDcmVhdGUgc2VydmljZSBpbnN0YW5jZXNcclxuICBjb25zdCBwcmVjZWRlbmNlSGFuZGxlciA9IG5ldyBQcmVjZWRlbmNlSGFuZGxlclNlcnZpY2UoKTtcclxuICBjb25zdCBjb25maWdGYWN0b3J5UHJvdmlkZXIgPSBuZXcgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlckltcGwocHJlY2VkZW5jZUhhbmRsZXIpO1xyXG4gIGNvbnN0IGF3c0xvYWRlciA9IG5ldyBBd3NDb25maWd1cmF0aW9uTG9hZGVyU2VydmljZShvcHRpb25zKTtcclxuICBjb25zdCBuYW1lc3BhY2VIYW5kbGVyID0gbmV3IE5hbWVzcGFjZUhhbmRsZXJTZXJ2aWNlKCk7XHJcbiAgY29uc3QgdmFsaWRhdGlvblNlcnZpY2UgPSBuZXcgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSgpO1xyXG4gIGNvbnN0IGZhY3RvcnlSZWdpc3RyYXRpb24gPSBuZXcgRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UoXHJcbiAgICBjb25maWdGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICBhd3NMb2FkZXIsXHJcbiAgICBuYW1lc3BhY2VIYW5kbGVyLFxyXG4gICAgdmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBvcHRpb25zXHJcbiAgKTtcclxuICBjb25zdCBhc3luY0hlbHBlciA9IG5ldyBBc3luY0NvbmZpZ0hlbHBlclNlcnZpY2UoZmFjdG9yeVJlZ2lzdHJhdGlvbiwgb3B0aW9ucyk7XHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBhc3luYyBmYWN0b3J5XHJcbiAgcmV0dXJuIGF3YWl0IGFzeW5jSGVscGVyLmNyZWF0ZUFzeW5jQ29uZmlnRmFjdG9yeSgpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzIGZvciBzcGVjaWZpYyBuYW1lc3BhY2VzLlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgc2VwYXJhdGUgZmFjdG9yaWVzIGZvciBlYWNoIG5hbWVzcGFjZS5cclxuICogXHJcbiAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gQXJyYXkgb2YgbmFtZXNwYWNlIG5hbWVzXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gSW50ZWdyYXRpb24gb3B0aW9ucyBmb3IgQVdTIGNvbmZpZ3VyYXRpb25cclxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgbmFtZXNwYWNlZCBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUF3c05hbWVzcGFjZWRGYWN0b3JpZXMoXHJcbiAgbmFtZXNwYWNlczogc3RyaW5nW10sXHJcbiAgb3B0aW9uczogSW50ZWdyYXRpb25PcHRpb25zID0ge31cclxuKTogUHJvbWlzZTxDb25maWdGYWN0b3J5W10+IHtcclxuICAvLyBJbXBvcnQgc2VydmljZXMgZHluYW1pY2FsbHlcclxuICBjb25zdCB7IEFzeW5jQ29uZmlnSGVscGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9hc3luYy1jb25maWctaGVscGVyLnNlcnZpY2UnKTtcclxuICBjb25zdCB7IEZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL2ZhY3RvcnktcmVnaXN0cmF0aW9uLnNlcnZpY2UnKTtcclxuICBjb25zdCB7IENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3Byb3ZpZGVycy9jb25maWd1cmF0aW9uLWZhY3RvcnkucHJvdmlkZXInKTtcclxuICBjb25zdCB7IEF3c0NvbmZpZ3VyYXRpb25Mb2FkZXJTZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3Byb3ZpZGVycy9hd3MtY29uZmlndXJhdGlvbi1sb2FkZXIuc2VydmljZScpO1xyXG4gIGNvbnN0IHsgUHJlY2VkZW5jZUhhbmRsZXJTZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3ByZWNlZGVuY2UtaGFuZGxlci5zZXJ2aWNlJyk7XHJcbiAgY29uc3QgeyBOYW1lc3BhY2VIYW5kbGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9uYW1lc3BhY2UtaGFuZGxlci5zZXJ2aWNlJyk7XHJcbiAgY29uc3QgeyBWYWxpZGF0aW9uSW50ZWdyYXRpb25TZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZScpO1xyXG5cclxuICAvLyBDcmVhdGUgc2VydmljZSBpbnN0YW5jZXNcclxuICBjb25zdCBwcmVjZWRlbmNlSGFuZGxlciA9IG5ldyBQcmVjZWRlbmNlSGFuZGxlclNlcnZpY2UoKTtcclxuICBjb25zdCBjb25maWdGYWN0b3J5UHJvdmlkZXIgPSBuZXcgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlckltcGwocHJlY2VkZW5jZUhhbmRsZXIpO1xyXG4gIGNvbnN0IGF3c0xvYWRlciA9IG5ldyBBd3NDb25maWd1cmF0aW9uTG9hZGVyU2VydmljZShvcHRpb25zKTtcclxuICBjb25zdCBuYW1lc3BhY2VIYW5kbGVyID0gbmV3IE5hbWVzcGFjZUhhbmRsZXJTZXJ2aWNlKCk7XHJcbiAgY29uc3QgdmFsaWRhdGlvblNlcnZpY2UgPSBuZXcgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSgpO1xyXG4gIGNvbnN0IGZhY3RvcnlSZWdpc3RyYXRpb24gPSBuZXcgRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UoXHJcbiAgICBjb25maWdGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICBhd3NMb2FkZXIsXHJcbiAgICBuYW1lc3BhY2VIYW5kbGVyLFxyXG4gICAgdmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBvcHRpb25zXHJcbiAgKTtcclxuICBjb25zdCBhc3luY0hlbHBlciA9IG5ldyBBc3luY0NvbmZpZ0hlbHBlclNlcnZpY2UoZmFjdG9yeVJlZ2lzdHJhdGlvbiwgb3B0aW9ucyk7XHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBuYW1lc3BhY2VkIGZhY3Rvcmllc1xyXG4gIHJldHVybiBhd2FpdCBhc3luY0hlbHBlci5jcmVhdGVBc3luY05hbWVzcGFjZWRGYWN0b3JpZXMobmFtZXNwYWNlcyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgZW5oYW5jZWQgQ29uZmlnTW9kdWxlIG9wdGlvbnMgd2l0aCBBV1MgaW50ZWdyYXRpb24uXHJcbiAqIFRoaXMgZnVuY3Rpb24gZW5oYW5jZXMgZXhpc3RpbmcgQ29uZmlnTW9kdWxlIG9wdGlvbnMgd2l0aCBBV1Mtc291cmNlZCBjb25maWd1cmF0aW9uLlxyXG4gKiBcclxuICogQHBhcmFtIGJhc2VPcHRpb25zIC0gQmFzZSBDb25maWdNb2R1bGUgb3B0aW9ucyB0byBlbmhhbmNlXHJcbiAqIEBwYXJhbSBpbnRlZ3JhdGlvbk9wdGlvbnMgLSBJbnRlZ3JhdGlvbiBvcHRpb25zIGZvciBBV1MgY29uZmlndXJhdGlvblxyXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBlbmhhbmNlZCBDb25maWdNb2R1bGUgb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVuaGFuY2VkQ29uZmlnT3B0aW9ucyhcclxuICBiYXNlT3B0aW9uczogQ29uZmlnTW9kdWxlT3B0aW9ucyA9IHt9LFxyXG4gIGludGVncmF0aW9uT3B0aW9uczogSW50ZWdyYXRpb25PcHRpb25zID0ge31cclxuKTogUHJvbWlzZTxDb25maWdNb2R1bGVPcHRpb25zPiB7XHJcbiAgLy8gSW1wb3J0IHNlcnZpY2VzIGR5bmFtaWNhbGx5XHJcbiAgY29uc3QgeyBBc3luY0NvbmZpZ0hlbHBlclNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvYXN5bmMtY29uZmlnLWhlbHBlci5zZXJ2aWNlJyk7XHJcbiAgY29uc3QgeyBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9mYWN0b3J5LXJlZ2lzdHJhdGlvbi5zZXJ2aWNlJyk7XHJcbiAgY29uc3QgeyBDb25maWd1cmF0aW9uRmFjdG9yeVByb3ZpZGVySW1wbCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9wcm92aWRlcnMvY29uZmlndXJhdGlvbi1mYWN0b3J5LnByb3ZpZGVyJyk7XHJcbiAgY29uc3QgeyBBd3NDb25maWd1cmF0aW9uTG9hZGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9wcm92aWRlcnMvYXdzLWNvbmZpZ3VyYXRpb24tbG9hZGVyLnNlcnZpY2UnKTtcclxuICBjb25zdCB7IFByZWNlZGVuY2VIYW5kbGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9wcmVjZWRlbmNlLWhhbmRsZXIuc2VydmljZScpO1xyXG4gIGNvbnN0IHsgTmFtZXNwYWNlSGFuZGxlclNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvbmFtZXNwYWNlLWhhbmRsZXIuc2VydmljZScpO1xyXG4gIGNvbnN0IHsgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy92YWxpZGF0aW9uLWludGVncmF0aW9uLnNlcnZpY2UnKTtcclxuXHJcbiAgLy8gQ3JlYXRlIHNlcnZpY2UgaW5zdGFuY2VzXHJcbiAgY29uc3QgcHJlY2VkZW5jZUhhbmRsZXIgPSBuZXcgUHJlY2VkZW5jZUhhbmRsZXJTZXJ2aWNlKCk7XHJcbiAgY29uc3QgY29uZmlnRmFjdG9yeVByb3ZpZGVyID0gbmV3IENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsKHByZWNlZGVuY2VIYW5kbGVyKTtcclxuICBjb25zdCBhd3NMb2FkZXIgPSBuZXcgQXdzQ29uZmlndXJhdGlvbkxvYWRlclNlcnZpY2UoaW50ZWdyYXRpb25PcHRpb25zKTtcclxuICBjb25zdCBuYW1lc3BhY2VIYW5kbGVyID0gbmV3IE5hbWVzcGFjZUhhbmRsZXJTZXJ2aWNlKCk7XHJcbiAgY29uc3QgdmFsaWRhdGlvblNlcnZpY2UgPSBuZXcgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSgpO1xyXG4gIGNvbnN0IGZhY3RvcnlSZWdpc3RyYXRpb24gPSBuZXcgRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UoXHJcbiAgICBjb25maWdGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICBhd3NMb2FkZXIsXHJcbiAgICBuYW1lc3BhY2VIYW5kbGVyLFxyXG4gICAgdmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBpbnRlZ3JhdGlvbk9wdGlvbnNcclxuICApO1xyXG4gIGNvbnN0IGFzeW5jSGVscGVyID0gbmV3IEFzeW5jQ29uZmlnSGVscGVyU2VydmljZShmYWN0b3J5UmVnaXN0cmF0aW9uLCBpbnRlZ3JhdGlvbk9wdGlvbnMpO1xyXG5cclxuICAvLyBDcmVhdGUgYW5kIHJldHVybiBlbmhhbmNlZCBvcHRpb25zXHJcbiAgcmV0dXJuIGF3YWl0IGFzeW5jSGVscGVyLmNyZWF0ZUFzeW5jQ29uZmlnT3B0aW9ucyhiYXNlT3B0aW9ucyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb21wbGV0ZSBpbnRlZ3JhdGlvbiBtb2R1bGUgZm9yIHVzZSB3aXRoIEBuZXN0anMvY29uZmlnLlxyXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBtb2R1bGUgdGhhdCBjYW4gYmUgaW1wb3J0ZWQgYWxvbmdzaWRlIENvbmZpZ01vZHVsZS5cclxuICogXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gSW50ZWdyYXRpb24gb3B0aW9ucyBmb3IgQVdTIGNvbmZpZ3VyYXRpb25cclxuICogQHJldHVybnMgRHluYW1pYyBtb2R1bGUgZm9yIEFXUyBpbnRlZ3JhdGlvblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3c0ludGVncmF0aW9uTW9kdWxlKG9wdGlvbnM6IEludGVncmF0aW9uT3B0aW9ucyA9IHt9KTogRHluYW1pY01vZHVsZSB7XHJcbiAgcmV0dXJuIE5lc3RDb25maWdBd3NJbnRlZ3JhdGlvbk1vZHVsZS5mb3JSb290KG9wdGlvbnMpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGFzeW5jIGludGVncmF0aW9uIG1vZHVsZSBmb3IgdXNlIHdpdGggQG5lc3Rqcy9jb25maWcuXHJcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG1vZHVsZSB0aGF0IGNhbiBiZSBpbXBvcnRlZCBhbG9uZ3NpZGUgQ29uZmlnTW9kdWxlIGZvciBhc3luYyBzY2VuYXJpb3MuXHJcbiAqIFxyXG4gKiBAcGFyYW0gdXNlRmFjdG9yeSAtIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGludGVncmF0aW9uIG9wdGlvbnNcclxuICogQHBhcmFtIGluamVjdCAtIERlcGVuZGVuY2llcyB0byBpbmplY3QgaW50byB0aGUgZmFjdG9yeSBmdW5jdGlvblxyXG4gKiBAcGFyYW0gaW1wb3J0cyAtIE1vZHVsZXMgdG8gaW1wb3J0IGZvciB0aGUgZmFjdG9yeSBmdW5jdGlvblxyXG4gKiBAcmV0dXJucyBEeW5hbWljIG1vZHVsZSBmb3IgYXN5bmMgQVdTIGludGVncmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXN5bmNBd3NJbnRlZ3JhdGlvbk1vZHVsZShcclxuICB1c2VGYWN0b3J5OiAoLi4uYXJnczogYW55W10pID0+IFByb21pc2U8SW50ZWdyYXRpb25PcHRpb25zPiB8IEludGVncmF0aW9uT3B0aW9ucyxcclxuICBpbmplY3Q6IGFueVtdID0gW10sXHJcbiAgaW1wb3J0czogYW55W10gPSBbXVxyXG4pOiBEeW5hbWljTW9kdWxlIHtcclxuICByZXR1cm4gTmVzdENvbmZpZ0F3c0ludGVncmF0aW9uTW9kdWxlLmZvclJvb3RBc3luYyh7XHJcbiAgICB1c2VGYWN0b3J5LFxyXG4gICAgaW5qZWN0LFxyXG4gICAgaW1wb3J0cyxcclxuICB9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIENvbmZpZ01vZHVsZS5mb3JSb290KCkuXHJcbiAqIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBsb2FkcyBBV1MgY29uZmlndXJhdGlvbiBhbmQgbWVyZ2VzIGl0IHdpdGggbG9jYWwgY29uZmlndXJhdGlvbi5cclxuICogXHJcbiAqIEBwYXJhbSBpbnRlZ3JhdGlvbk9wdGlvbnMgLSBJbnRlZ3JhdGlvbiBvcHRpb25zIGZvciBBV1MgY29uZmlndXJhdGlvblxyXG4gKiBAcmV0dXJucyBGYWN0b3J5IGZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBDb25maWdNb2R1bGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWdNb2R1bGVGYWN0b3J5KFxyXG4gIGludGVncmF0aW9uT3B0aW9uczogSW50ZWdyYXRpb25PcHRpb25zID0ge31cclxuKTogKCkgPT4gUHJvbWlzZTxDb25maWdNb2R1bGVPcHRpb25zPiB7XHJcbiAgcmV0dXJuIGFzeW5jICgpOiBQcm9taXNlPENvbmZpZ01vZHVsZU9wdGlvbnM+ID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENyZWF0ZSBBV1MgY29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAgICAgIGNvbnN0IGF3c0ZhY3RvcnkgPSBhd2FpdCBjcmVhdGVBd3NDb25maWdGYWN0b3J5KGludGVncmF0aW9uT3B0aW9ucyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gQ29uZmlnTW9kdWxlIG9wdGlvbnMgd2l0aCBBV1MgZmFjdG9yeVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGxvYWQ6IFthd3NGYWN0b3J5XSxcclxuICAgICAgICBpc0dsb2JhbDogaW50ZWdyYXRpb25PcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSxcclxuICAgICAgICBjYWNoZTogaW50ZWdyYXRpb25PcHRpb25zLmZhY3RvcnlPcHRpb25zPy5jYWNoZSA/PyB0cnVlLFxyXG4gICAgICAgIGV4cGFuZFZhcmlhYmxlczogaW50ZWdyYXRpb25PcHRpb25zLmZhY3RvcnlPcHRpb25zPy5leHBhbmRWYXJpYWJsZXMgPz8gdHJ1ZSxcclxuICAgICAgfTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIEhhbmRsZSBlcnJvciBiYXNlZCBvbiBpbnRlZ3JhdGlvbiBvcHRpb25zXHJcbiAgICAgIGlmIChpbnRlZ3JhdGlvbk9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGJhc2ljIG9wdGlvbnMgYXMgZmFsbGJhY2tcclxuICAgICAgaWYgKGludGVncmF0aW9uT3B0aW9ucy5mYWxsYmFja1RvTG9jYWwpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbG9hZDogW10sXHJcbiAgICAgICAgICBpc0dsb2JhbDogaW50ZWdyYXRpb25PcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSxcclxuICAgICAgICAgIGNhY2hlOiBpbnRlZ3JhdGlvbk9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmNhY2hlID8/IHRydWUsXHJcbiAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IGludGVncmF0aW9uT3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uZXhwYW5kVmFyaWFibGVzID8/IHRydWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbiBzdXBwb3J0LlxyXG4gKiBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY2FuIHJlY2VpdmUgaW5qZWN0ZWQgZGVwZW5kZW5jaWVzIGFuZCB1c2UgdGhlbSB0byBjb25maWd1cmUgQVdTIGludGVncmF0aW9uLlxyXG4gKiBcclxuICogQHBhcmFtIGludGVncmF0aW9uT3B0aW9ucyAtIEludGVncmF0aW9uIG9wdGlvbnMgZm9yIEFXUyBjb25maWd1cmF0aW9uXHJcbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBBcnJheSBvZiBkZXBlbmRlbmN5IHRva2VucyB0byBpbmplY3RcclxuICogQHJldHVybnMgRmFjdG9yeSBmdW5jdGlvbiB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN1cHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWdNb2R1bGVGYWN0b3J5V2l0aERlcGVuZGVuY2llcyhcclxuICBpbnRlZ3JhdGlvbk9wdGlvbnM6IEludGVncmF0aW9uT3B0aW9ucyA9IHt9LFxyXG4gIGRlcGVuZGVuY2llczogYW55W10gPSBbXVxyXG4pOiAoLi4uYXJnczogYW55W10pID0+IFByb21pc2U8Q29uZmlnTW9kdWxlT3B0aW9ucz4ge1xyXG4gIHJldHVybiBhc3luYyAoLi4uaW5qZWN0ZWREZXBlbmRlbmNpZXM6IGFueVtdKTogUHJvbWlzZTxDb25maWdNb2R1bGVPcHRpb25zPiA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBJbXBvcnQgc2VydmljZXMgZHluYW1pY2FsbHlcclxuICAgICAgY29uc3QgeyBBc3luY0NvbmZpZ0hlbHBlclNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvYXN5bmMtY29uZmlnLWhlbHBlci5zZXJ2aWNlJyk7XHJcbiAgICAgIGNvbnN0IHsgRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvZmFjdG9yeS1yZWdpc3RyYXRpb24uc2VydmljZScpO1xyXG4gICAgICBjb25zdCB7IENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3Byb3ZpZGVycy9jb25maWd1cmF0aW9uLWZhY3RvcnkucHJvdmlkZXInKTtcclxuICAgICAgY29uc3QgeyBBd3NDb25maWd1cmF0aW9uTG9hZGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9wcm92aWRlcnMvYXdzLWNvbmZpZ3VyYXRpb24tbG9hZGVyLnNlcnZpY2UnKTtcclxuICAgICAgY29uc3QgeyBQcmVjZWRlbmNlSGFuZGxlclNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvcHJlY2VkZW5jZS1oYW5kbGVyLnNlcnZpY2UnKTtcclxuICAgICAgY29uc3QgeyBOYW1lc3BhY2VIYW5kbGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9uYW1lc3BhY2UtaGFuZGxlci5zZXJ2aWNlJyk7XHJcbiAgICAgIGNvbnN0IHsgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy92YWxpZGF0aW9uLWludGVncmF0aW9uLnNlcnZpY2UnKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSBzZXJ2aWNlIGluc3RhbmNlc1xyXG4gICAgICBjb25zdCBwcmVjZWRlbmNlSGFuZGxlciA9IG5ldyBQcmVjZWRlbmNlSGFuZGxlclNlcnZpY2UoKTtcclxuICAgICAgY29uc3QgY29uZmlnRmFjdG9yeVByb3ZpZGVyID0gbmV3IENvbmZpZ3VyYXRpb25GYWN0b3J5UHJvdmlkZXJJbXBsKHByZWNlZGVuY2VIYW5kbGVyKTtcclxuICAgICAgY29uc3QgYXdzTG9hZGVyID0gbmV3IEF3c0NvbmZpZ3VyYXRpb25Mb2FkZXJTZXJ2aWNlKGludGVncmF0aW9uT3B0aW9ucyk7XHJcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUhhbmRsZXIgPSBuZXcgTmFtZXNwYWNlSGFuZGxlclNlcnZpY2UoKTtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvblNlcnZpY2UgPSBuZXcgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSgpO1xyXG4gICAgICBjb25zdCBmYWN0b3J5UmVnaXN0cmF0aW9uID0gbmV3IEZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlKFxyXG4gICAgICAgIGNvbmZpZ0ZhY3RvcnlQcm92aWRlcixcclxuICAgICAgICBhd3NMb2FkZXIsXHJcbiAgICAgICAgbmFtZXNwYWNlSGFuZGxlcixcclxuICAgICAgICB2YWxpZGF0aW9uU2VydmljZSxcclxuICAgICAgICBpbnRlZ3JhdGlvbk9wdGlvbnNcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgYXN5bmNIZWxwZXIgPSBuZXcgQXN5bmNDb25maWdIZWxwZXJTZXJ2aWNlKGZhY3RvcnlSZWdpc3RyYXRpb24sIGludGVncmF0aW9uT3B0aW9ucyk7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgZmFjdG9yeSB3aXRoIGRlcGVuZGVuY2llc1xyXG4gICAgICBjb25zdCBmYWN0b3J5V2l0aERlcHMgPSBhc3luY0hlbHBlci5jcmVhdGVBc3luY0ZhY3RvcnlXaXRoRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBFeGVjdXRlIGZhY3Rvcnkgd2l0aCBpbmplY3RlZCBkZXBlbmRlbmNpZXNcclxuICAgICAgcmV0dXJuIGF3YWl0IGZhY3RvcnlXaXRoRGVwcyguLi5pbmplY3RlZERlcGVuZGVuY2llcyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gaW50ZWdyYXRpb24gb3B0aW9uc1xyXG4gICAgICBpZiAoaW50ZWdyYXRpb25PcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBiYXNpYyBvcHRpb25zIGFzIGZhbGxiYWNrXHJcbiAgICAgIGlmIChpbnRlZ3JhdGlvbk9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGxvYWQ6IFtdLFxyXG4gICAgICAgICAgaXNHbG9iYWw6IGludGVncmF0aW9uT3B0aW9ucy5yZWdpc3Rlckdsb2JhbGx5ID8/IHRydWUsXHJcbiAgICAgICAgICBjYWNoZTogaW50ZWdyYXRpb25PcHRpb25zLmZhY3RvcnlPcHRpb25zPy5jYWNoZSA/PyB0cnVlLFxyXG4gICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiBpbnRlZ3JhdGlvbk9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmV4cGFuZFZhcmlhYmxlcyA/PyB0cnVlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBBV1MgY29uZmlndXJhdGlvbiBpcyBhdmFpbGFibGUgZm9yIGludGVncmF0aW9uLlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBBV1MgaW50ZWdyYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQuXHJcbiAqIFxyXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEludGVncmF0aW9uIG9wdGlvbnMgZm9yIEFXUyBjb25maWd1cmF0aW9uXHJcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGF2YWlsYWJpbGl0eSBzdGF0dXNcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0F3c0NvbmZpZ0F2YWlsYWJpbGl0eShcclxuICBvcHRpb25zOiBJbnRlZ3JhdGlvbk9wdGlvbnMgPSB7fVxyXG4pOiBQcm9taXNlPHtcclxuICBpc0F2YWlsYWJsZTogYm9vbGVhbjtcclxuICBmYWN0b3JpZXNDb3VudDogbnVtYmVyO1xyXG4gIGVycm9yczogc3RyaW5nW107XHJcbn0+IHtcclxuICB0cnkge1xyXG4gICAgLy8gSW1wb3J0IHNlcnZpY2VzIGR5bmFtaWNhbGx5XHJcbiAgICBjb25zdCB7IEFzeW5jQ29uZmlnSGVscGVyU2VydmljZSB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9hc3luYy1jb25maWctaGVscGVyLnNlcnZpY2UnKTtcclxuICAgIGNvbnN0IHsgRmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvZmFjdG9yeS1yZWdpc3RyYXRpb24uc2VydmljZScpO1xyXG4gICAgY29uc3QgeyBDb25maWd1cmF0aW9uRmFjdG9yeVByb3ZpZGVySW1wbCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9wcm92aWRlcnMvY29uZmlndXJhdGlvbi1mYWN0b3J5LnByb3ZpZGVyJyk7XHJcbiAgICBjb25zdCB7IEF3c0NvbmZpZ3VyYXRpb25Mb2FkZXJTZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3Byb3ZpZGVycy9hd3MtY29uZmlndXJhdGlvbi1sb2FkZXIuc2VydmljZScpO1xyXG4gICAgY29uc3QgeyBQcmVjZWRlbmNlSGFuZGxlclNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvcHJlY2VkZW5jZS1oYW5kbGVyLnNlcnZpY2UnKTtcclxuICAgIGNvbnN0IHsgTmFtZXNwYWNlSGFuZGxlclNlcnZpY2UgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvbmFtZXNwYWNlLWhhbmRsZXIuc2VydmljZScpO1xyXG4gICAgY29uc3QgeyBWYWxpZGF0aW9uSW50ZWdyYXRpb25TZXJ2aWNlIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24taW50ZWdyYXRpb24uc2VydmljZScpO1xyXG5cclxuICAgIC8vIENyZWF0ZSBzZXJ2aWNlIGluc3RhbmNlc1xyXG4gICAgY29uc3QgcHJlY2VkZW5jZUhhbmRsZXIgPSBuZXcgUHJlY2VkZW5jZUhhbmRsZXJTZXJ2aWNlKCk7XHJcbiAgICBjb25zdCBjb25maWdGYWN0b3J5UHJvdmlkZXIgPSBuZXcgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlckltcGwocHJlY2VkZW5jZUhhbmRsZXIpO1xyXG4gICAgY29uc3QgYXdzTG9hZGVyID0gbmV3IEF3c0NvbmZpZ3VyYXRpb25Mb2FkZXJTZXJ2aWNlKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgbmFtZXNwYWNlSGFuZGxlciA9IG5ldyBOYW1lc3BhY2VIYW5kbGVyU2VydmljZSgpO1xyXG4gICAgY29uc3QgdmFsaWRhdGlvblNlcnZpY2UgPSBuZXcgVmFsaWRhdGlvbkludGVncmF0aW9uU2VydmljZSgpO1xyXG4gICAgY29uc3QgZmFjdG9yeVJlZ2lzdHJhdGlvbiA9IG5ldyBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZShcclxuICAgICAgY29uZmlnRmFjdG9yeVByb3ZpZGVyLFxyXG4gICAgICBhd3NMb2FkZXIsXHJcbiAgICAgIG5hbWVzcGFjZUhhbmRsZXIsXHJcbiAgICAgIHZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgICBvcHRpb25zXHJcbiAgICApO1xyXG4gICAgY29uc3QgYXN5bmNIZWxwZXIgPSBuZXcgQXN5bmNDb25maWdIZWxwZXJTZXJ2aWNlKGZhY3RvcnlSZWdpc3RyYXRpb24sIG9wdGlvbnMpO1xyXG5cclxuICAgIC8vIENoZWNrIGF2YWlsYWJpbGl0eVxyXG4gICAgcmV0dXJuIGF3YWl0IGFzeW5jSGVscGVyLmNoZWNrQXN5bmNBdmFpbGFiaWxpdHkoKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc3QgYXZhaWxhYmlsaXR5RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgZmFjdG9yaWVzQ291bnQ6IDAsXHJcbiAgICAgIGVycm9yczogW2F2YWlsYWJpbGl0eUVycm9yLm1lc3NhZ2VdLFxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
@@ -0,0 +1,3 @@
1
+ // Integration utilities exports
2
+ export * from './config-integration.util';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvaW50ZWdyYXRpb24vdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDO0FBQ2hDLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbnRlZ3JhdGlvbiB1dGlsaXRpZXMgZXhwb3J0c1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy1pbnRlZ3JhdGlvbi51dGlsJzsiXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Abstract ConfigService interface for dependency injection.
3
+ * Provides type-safe access to configuration values with generic type support.
4
+ */
5
+ export class ConfigService {
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXNlcnZpY2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvY29uZmlnLXNlcnZpY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsYUFBYTtDQW1CbEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQWJzdHJhY3QgQ29uZmlnU2VydmljZSBpbnRlcmZhY2UgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxyXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdpdGggZ2VuZXJpYyB0eXBlIHN1cHBvcnQuXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29uZmlnU2VydmljZTxUID0gYW55PiB7XHJcbiAgLyoqXHJcbiAgICogR2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZSBieSBrZXkgd2l0aCB0eXBlIHNhZmV0eS5cclxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGNvbmZpZ3VyYXRpb24ga2V5IHRvIHJldHJpZXZlXHJcbiAgICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWUgd2l0aCBwcm9wZXIgdHlwaW5nXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBUW0tdO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGUgY29uZmlndXJhdGlvbiBzZXJ2aWNlIGhhcyBiZWVuIGluaXRpYWxpemVkLlxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHNlcnZpY2UgaXMgcmVhZHkgdG8gc2VydmUgY29uZmlndXJhdGlvbiB2YWx1ZXNcclxuICAgKi9cclxuICBhYnN0cmFjdCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMuXHJcbiAgICogQHJldHVybnMgVGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICovXHJcbiAgYWJzdHJhY3QgZ2V0QWxsKCk6IFQ7XHJcbn1cclxuIl19
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Default configuration schema using Zod.
4
+ * Provides a flexible base schema that can be extended by applications.
5
+ */
6
+ export const defaultConfigSchema = z.object({
7
+ /** Node.js environment */
8
+ NODE_ENV: z.enum(['production', 'development', 'test']).optional(),
9
+ /** Application environment (mirrors NODE_ENV with 'local' default) */
10
+ APP_ENV: z.enum(['production', 'test', 'development', 'local']).default('local'),
11
+ /** AWS region for services */
12
+ AWS_REGION: z.string().optional(),
13
+ /** AWS profile for local development */
14
+ AWS_PROFILE: z.string().optional(),
15
+ /** Application port */
16
+ PORT: z.coerce.number().positive().optional(),
17
+ /** Application host */
18
+ HOST: z.string().optional(),
19
+ /** Log level */
20
+ LOG_LEVEL: z.enum(['error', 'warn', 'info', 'debug', 'verbose']).optional(),
21
+ /** Database URL */
22
+ DATABASE_URL: z.string().url().optional(),
23
+ /** Redis URL */
24
+ REDIS_URL: z.string().url().optional(),
25
+ });
26
+ /**
27
+ * Environment-specific validation schemas.
28
+ */
29
+ export const environmentSchemas = {
30
+ local: defaultConfigSchema.extend({
31
+ // Local environment may have fewer required fields
32
+ AWS_REGION: z.string().optional(),
33
+ }),
34
+ development: defaultConfigSchema.extend({
35
+ // Development environment requirements
36
+ AWS_REGION: z.string().min(1, 'AWS_REGION is required in development'),
37
+ }),
38
+ test: defaultConfigSchema.extend({
39
+ // Test environment requirements
40
+ AWS_REGION: z.string().min(1, 'AWS_REGION is required in test'),
41
+ }),
42
+ production: defaultConfigSchema.extend({
43
+ // Production environment requirements
44
+ AWS_REGION: z.string().min(1, 'AWS_REGION is required in production'),
45
+ LOG_LEVEL: z.enum(['error', 'warn', 'info']).default('info'),
46
+ }),
47
+ };
48
+ /**
49
+ * Helper function to get the appropriate schema for the current environment.
50
+ */
51
+ export function getSchemaForEnvironment(appEnv) {
52
+ const env = appEnv;
53
+ return environmentSchemas[env] || defaultConfigSchema;
54
+ }
55
+ /**
56
+ * Validation helper for APP_ENV values.
57
+ */
58
+ export const appEnvSchema = z.enum(['production', 'test', 'development', 'local']);
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1zY2hlbWEuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvZGVmYXVsdC1zY2hlbWEuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQywwQkFBMEI7SUFDMUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBRWxFLHNFQUFzRTtJQUN0RSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUVoRiw4QkFBOEI7SUFDOUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFakMsd0NBQXdDO0lBQ3hDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRWxDLHVCQUF1QjtJQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFN0MsdUJBQXVCO0lBQ3ZCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRTNCLGdCQUFnQjtJQUNoQixTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUUzRSxtQkFBbUI7SUFDbkIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFekMsZ0JBQWdCO0lBQ2hCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3ZDLENBQUMsQ0FBQztBQU9IOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUNoQyxtREFBbUQ7UUFDbkQsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDbEMsQ0FBQztJQUVGLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7UUFDdEMsdUNBQXVDO1FBQ3ZDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQztLQUN2RSxDQUFDO0lBRUYsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUMvQixnQ0FBZ0M7UUFDaEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGdDQUFnQyxDQUFDO0tBQ2hFLENBQUM7SUFFRixVQUFVLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBQ3JDLHNDQUFzQztRQUN0QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsc0NBQXNDLENBQUM7UUFDckUsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUM3RCxDQUFDO0NBQ0gsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE1BQWM7SUFDcEQsTUFBTSxHQUFHLEdBQUcsTUFBeUMsQ0FBQztJQUN0RCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBQ3hELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgY29uZmlndXJhdGlvbiBzY2hlbWEgdXNpbmcgWm9kLlxyXG4gKiBQcm92aWRlcyBhIGZsZXhpYmxlIGJhc2Ugc2NoZW1hIHRoYXQgY2FuIGJlIGV4dGVuZGVkIGJ5IGFwcGxpY2F0aW9ucy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xyXG4gIC8qKiBOb2RlLmpzIGVudmlyb25tZW50ICovXHJcbiAgTk9ERV9FTlY6IHouZW51bShbJ3Byb2R1Y3Rpb24nLCAnZGV2ZWxvcG1lbnQnLCAndGVzdCddKS5vcHRpb25hbCgpLFxyXG4gIFxyXG4gIC8qKiBBcHBsaWNhdGlvbiBlbnZpcm9ubWVudCAobWlycm9ycyBOT0RFX0VOViB3aXRoICdsb2NhbCcgZGVmYXVsdCkgKi9cclxuICBBUFBfRU5WOiB6LmVudW0oWydwcm9kdWN0aW9uJywgJ3Rlc3QnLCAnZGV2ZWxvcG1lbnQnLCAnbG9jYWwnXSkuZGVmYXVsdCgnbG9jYWwnKSxcclxuICBcclxuICAvKiogQVdTIHJlZ2lvbiBmb3Igc2VydmljZXMgKi9cclxuICBBV1NfUkVHSU9OOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXHJcbiAgXHJcbiAgLyoqIEFXUyBwcm9maWxlIGZvciBsb2NhbCBkZXZlbG9wbWVudCAqL1xyXG4gIEFXU19QUk9GSUxFOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXHJcbiAgXHJcbiAgLyoqIEFwcGxpY2F0aW9uIHBvcnQgKi9cclxuICBQT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5wb3NpdGl2ZSgpLm9wdGlvbmFsKCksXHJcbiAgXHJcbiAgLyoqIEFwcGxpY2F0aW9uIGhvc3QgKi9cclxuICBIT1NUOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXHJcbiAgXHJcbiAgLyoqIExvZyBsZXZlbCAqL1xyXG4gIExPR19MRVZFTDogei5lbnVtKFsnZXJyb3InLCAnd2FybicsICdpbmZvJywgJ2RlYnVnJywgJ3ZlcmJvc2UnXSkub3B0aW9uYWwoKSxcclxuICBcclxuICAvKiogRGF0YWJhc2UgVVJMICovXHJcbiAgREFUQUJBU0VfVVJMOiB6LnN0cmluZygpLnVybCgpLm9wdGlvbmFsKCksXHJcbiAgXHJcbiAgLyoqIFJlZGlzIFVSTCAqL1xyXG4gIFJFRElTX1VSTDogei5zdHJpbmcoKS51cmwoKS5vcHRpb25hbCgpLFxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBUeXBlIGluZmVyZW5jZSBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBzY2hlbWEuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBEZWZhdWx0Q29uZmlnU2NoZW1hID0gei5pbmZlcjx0eXBlb2YgZGVmYXVsdENvbmZpZ1NjaGVtYT47XHJcblxyXG4vKipcclxuICogRW52aXJvbm1lbnQtc3BlY2lmaWMgdmFsaWRhdGlvbiBzY2hlbWFzLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50U2NoZW1hcyA9IHtcclxuICBsb2NhbDogZGVmYXVsdENvbmZpZ1NjaGVtYS5leHRlbmQoe1xyXG4gICAgLy8gTG9jYWwgZW52aXJvbm1lbnQgbWF5IGhhdmUgZmV3ZXIgcmVxdWlyZWQgZmllbGRzXHJcbiAgICBBV1NfUkVHSU9OOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXHJcbiAgfSksXHJcbiAgXHJcbiAgZGV2ZWxvcG1lbnQ6IGRlZmF1bHRDb25maWdTY2hlbWEuZXh0ZW5kKHtcclxuICAgIC8vIERldmVsb3BtZW50IGVudmlyb25tZW50IHJlcXVpcmVtZW50c1xyXG4gICAgQVdTX1JFR0lPTjogei5zdHJpbmcoKS5taW4oMSwgJ0FXU19SRUdJT04gaXMgcmVxdWlyZWQgaW4gZGV2ZWxvcG1lbnQnKSxcclxuICB9KSxcclxuICBcclxuICB0ZXN0OiBkZWZhdWx0Q29uZmlnU2NoZW1hLmV4dGVuZCh7XHJcbiAgICAvLyBUZXN0IGVudmlyb25tZW50IHJlcXVpcmVtZW50c1xyXG4gICAgQVdTX1JFR0lPTjogei5zdHJpbmcoKS5taW4oMSwgJ0FXU19SRUdJT04gaXMgcmVxdWlyZWQgaW4gdGVzdCcpLFxyXG4gIH0pLFxyXG4gIFxyXG4gIHByb2R1Y3Rpb246IGRlZmF1bHRDb25maWdTY2hlbWEuZXh0ZW5kKHtcclxuICAgIC8vIFByb2R1Y3Rpb24gZW52aXJvbm1lbnQgcmVxdWlyZW1lbnRzXHJcbiAgICBBV1NfUkVHSU9OOiB6LnN0cmluZygpLm1pbigxLCAnQVdTX1JFR0lPTiBpcyByZXF1aXJlZCBpbiBwcm9kdWN0aW9uJyksXHJcbiAgICBMT0dfTEVWRUw6IHouZW51bShbJ2Vycm9yJywgJ3dhcm4nLCAnaW5mbyddKS5kZWZhdWx0KCdpbmZvJyksXHJcbiAgfSksXHJcbn07XHJcblxyXG4vKipcclxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFGb3JFbnZpcm9ubWVudChhcHBFbnY6IHN0cmluZyk6IHouWm9kU2NoZW1hIHtcclxuICBjb25zdCBlbnYgPSBhcHBFbnYgYXMga2V5b2YgdHlwZW9mIGVudmlyb25tZW50U2NoZW1hcztcclxuICByZXR1cm4gZW52aXJvbm1lbnRTY2hlbWFzW2Vudl0gfHwgZGVmYXVsdENvbmZpZ1NjaGVtYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRpb24gaGVscGVyIGZvciBBUFBfRU5WIHZhbHVlcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBhcHBFbnZTY2hlbWEgPSB6LmVudW0oWydwcm9kdWN0aW9uJywgJ3Rlc3QnLCAnZGV2ZWxvcG1lbnQnLCAnbG9jYWwnXSk7XHJcblxyXG4vKipcclxuICogVHlwZSBmb3IgdmFsaWQgQVBQX0VOViB2YWx1ZXMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBcHBFbnYgPSB6LmluZmVyPHR5cGVvZiBhcHBFbnZTY2hlbWE+O1xyXG4iXX0=
@@ -0,0 +1,8 @@
1
+ // Core interfaces
2
+ export * from './config-service.interface';
3
+ export * from './module-options.interface';
4
+ // Error classes - re-export from core for backward compatibility
5
+ export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from '@dyanet/config-aws';
6
+ // Default schema and types
7
+ export * from './default-schema.interface';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0I7QUFDbEIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGlFQUFpRTtBQUNqRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixlQUFlLEVBQ2Ysc0JBQXNCLEVBQ3RCLHlCQUF5QixHQUMxQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLDJCQUEyQjtBQUMzQixjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29yZSBpbnRlcmZhY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnLXNlcnZpY2UuaW50ZXJmYWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2R1bGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5cclxuLy8gRXJyb3IgY2xhc3NlcyAtIHJlLWV4cG9ydCBmcm9tIGNvcmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuZXhwb3J0IHtcclxuICBDb25maWd1cmF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIEFXU1NlcnZpY2VFcnJvcixcclxuICBDb25maWd1cmF0aW9uTG9hZEVycm9yLFxyXG4gIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IsXHJcbn0gZnJvbSAnQGR5YW5ldC9jb25maWctYXdzJztcclxuXHJcbi8vIERlZmF1bHQgc2NoZW1hIGFuZCB0eXBlc1xyXG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtc2NoZW1hLmludGVyZmFjZSc7XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLW9wdGlvbnMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvbW9kdWxlLW9wdGlvbnMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBab2RUeXBlIH0gZnJvbSAnem9kJztcclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIGZvciBBV1MgU2VjcmV0cyBNYW5hZ2VyIGludGVncmF0aW9uLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzTWFuYWdlckNvbmZpZyB7XHJcbiAgLyoqIEFXUyByZWdpb24gZm9yIFNlY3JldHMgTWFuYWdlciAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogQmFzZSBwYXRoIGZvciBzZWNyZXRzIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMgKi9cclxuICBwYXRocz86IHtcclxuICAgIGRldmVsb3BtZW50Pzogc3RyaW5nO1xyXG4gICAgdGVzdD86IHN0cmluZztcclxuICAgIHByb2R1Y3Rpb24/OiBzdHJpbmc7XHJcbiAgfTtcclxuICAvKiogV2hldGhlciB0byBlbmFibGUgU2VjcmV0cyBNYW5hZ2VyIGludGVncmF0aW9uICovXHJcbiAgZW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIGZvciBBV1MgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBTdG9yZSBpbnRlZ3JhdGlvbi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU1NNQ29uZmlnIHtcclxuICAvKiogQVdTIHJlZ2lvbiBmb3IgU1NNIFBhcmFtZXRlciBTdG9yZSAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogQmFzZSBwYXRoIGZvciBwYXJhbWV0ZXJzIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMgKi9cclxuICBwYXRocz86IHtcclxuICAgIGRldmVsb3BtZW50Pzogc3RyaW5nO1xyXG4gICAgdGVzdD86IHN0cmluZztcclxuICAgIHByb2R1Y3Rpb24/OiBzdHJpbmc7XHJcbiAgfTtcclxuICAvKiogV2hldGhlciB0byBlbmFibGUgU1NNIFBhcmFtZXRlciBTdG9yZSBpbnRlZ3JhdGlvbiAqL1xyXG4gIGVuYWJsZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRvIGRlY3J5cHQgU2VjdXJlU3RyaW5nIHBhcmFtZXRlcnMgKi9cclxuICBkZWNyeXB0PzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBOZXN0SlMgQVdTIENvbmZpZ3VyYXRpb24gbW9kdWxlLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBOZXN0Q29uZmlnQXdzTW9kdWxlT3B0aW9uczxUID0gYW55PiB7XHJcbiAgLyoqIFpvZCBzY2hlbWEgZm9yIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiAqL1xyXG4gIHNjaGVtYT86IFpvZFR5cGU8VD47XHJcbiAgXHJcbiAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIEFXUyBTZWNyZXRzIE1hbmFnZXIgaW50ZWdyYXRpb24gKi9cclxuICBzZWNyZXRzTWFuYWdlckNvbmZpZz86IFNlY3JldHNNYW5hZ2VyQ29uZmlnO1xyXG4gIFxyXG4gIC8qKiBDb25maWd1cmF0aW9uIGZvciBBV1MgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBTdG9yZSBpbnRlZ3JhdGlvbiAqL1xyXG4gIHNzbUNvbmZpZz86IFNTTUNvbmZpZztcclxuICBcclxuICAvKiogUHJlZml4IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sICdBUFBfJykgKi9cclxuICBlbnZQcmVmaXg/OiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIFdoZXRoZXIgdG8gaWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBjb250aW51ZSB3aXRoIHBhcnRpYWwgY29uZmlnICovXHJcbiAgaWdub3JlVmFsaWRhdGlvbkVycm9ycz86IGJvb2xlYW47XHJcbiAgXHJcbiAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBBUFBfRU5WIChkZWZhdWx0cyB0byAnQVBQX0VOVicpICovXHJcbiAgYXBwRW52VmFyaWFibGU/OiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIFdoZXRoZXIgdG8gbG9hZCBjb25maWd1cmF0aW9uIHN5bmNocm9ub3VzbHkgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqL1xyXG4gIGxvYWRTeW5jPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFzeW5jIGZhY3Rvcnkgb3B0aW9ucyBmb3IgZHluYW1pYyBtb2R1bGUgY29uZmlndXJhdGlvbi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmVzdENvbmZpZ0F3c01vZHVsZUFzeW5jT3B0aW9uczxUID0gYW55PiB7XHJcbiAgLyoqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIG1vZHVsZSBvcHRpb25zICovXHJcbiAgdXNlRmFjdG9yeTogKC4uLmFyZ3M6IGFueVtdKSA9PiBQcm9taXNlPE5lc3RDb25maWdBd3NNb2R1bGVPcHRpb25zPFQ+PiB8IE5lc3RDb25maWdBd3NNb2R1bGVPcHRpb25zPFQ+O1xyXG4gIFxyXG4gIC8qKiBEZXBlbmRlbmNpZXMgdG8gaW5qZWN0IGludG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gKi9cclxuICBpbmplY3Q/OiBhbnlbXTtcclxuICBcclxuICAvKiogSW1wb3J0cyByZXF1aXJlZCBmb3IgdGhlIGZhY3RvcnkgZnVuY3Rpb24gKi9cclxuICBpbXBvcnRzPzogYW55W107XHJcbn1cclxuIl19
@@ -0,0 +1,139 @@
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 ConfigServiceImpl_1;
11
+ import { Injectable, Logger } from '@nestjs/common';
12
+ import { ConfigManager, ConfigurationError } from '@dyanet/config-aws';
13
+ import { ConfigService } from '../interfaces/config-service.interface';
14
+ /**
15
+ * NestJS Injectable wrapper around ConfigManager from @dyanet/config-aws.
16
+ * Provides type-safe configuration access with NestJS dependency injection support.
17
+ *
18
+ * This is a thin adapter layer that delegates all configuration loading and
19
+ * management to the framework-agnostic ConfigManager from config-aws.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { ConfigServiceImpl } from '@dyanet/nestjs-config-aws';
24
+ * import { z } from 'zod';
25
+ *
26
+ * const schema = z.object({
27
+ * DATABASE_URL: z.string(),
28
+ * PORT: z.coerce.number().default(3000),
29
+ * });
30
+ *
31
+ * const configService = new ConfigServiceImpl({
32
+ * loaders: [new EnvironmentLoader()],
33
+ * schema,
34
+ * });
35
+ *
36
+ * await configService.initialize();
37
+ * const dbUrl = configService.get('DATABASE_URL');
38
+ * ```
39
+ */
40
+ let ConfigServiceImpl = ConfigServiceImpl_1 = class ConfigServiceImpl extends ConfigService {
41
+ logger = new Logger(ConfigServiceImpl_1.name);
42
+ configManager;
43
+ enableNestLogging;
44
+ constructor(options = {}) {
45
+ super();
46
+ this.enableNestLogging = options.enableNestLogging ?? true;
47
+ // Create ConfigManager from config-aws with provided options
48
+ this.configManager = new ConfigManager({
49
+ loaders: options.loaders,
50
+ schema: options.schema,
51
+ precedence: options.precedence,
52
+ validateOnLoad: options.validateOnLoad,
53
+ enableLogging: options.enableLogging,
54
+ logger: options.logger,
55
+ verbose: options.verbose,
56
+ });
57
+ }
58
+ /**
59
+ * Initialize the configuration service by loading configuration from all sources.
60
+ * This method should be called during application startup.
61
+ *
62
+ * @throws ConfigurationError if loading or validation fails
63
+ */
64
+ async initialize() {
65
+ if (this.configManager.isLoaded()) {
66
+ return;
67
+ }
68
+ try {
69
+ if (this.enableNestLogging) {
70
+ this.logger.log('Initializing configuration service...');
71
+ }
72
+ await this.configManager.load();
73
+ if (this.enableNestLogging) {
74
+ this.logger.log('Configuration service initialized successfully');
75
+ }
76
+ }
77
+ catch (error) {
78
+ const errorMessage = `Failed to initialize configuration service: ${error instanceof Error ? error.message : String(error)}`;
79
+ this.logger.error(errorMessage);
80
+ throw error;
81
+ }
82
+ }
83
+ /**
84
+ * Get a configuration value by key with type safety.
85
+ *
86
+ * @param key - The configuration key to retrieve
87
+ * @returns The configuration value with proper typing
88
+ * @throws ConfigurationError if configuration is not initialized
89
+ */
90
+ get(key) {
91
+ if (!this.configManager.isLoaded()) {
92
+ throw new ConfigurationError('Configuration service not initialized. Call initialize() first.');
93
+ }
94
+ return this.configManager.get(key);
95
+ }
96
+ /**
97
+ * Check if the configuration service has been initialized.
98
+ *
99
+ * @returns True if the service is ready to serve configuration values
100
+ */
101
+ isInitialized() {
102
+ return this.configManager.isLoaded();
103
+ }
104
+ /**
105
+ * Get all configuration values.
106
+ *
107
+ * @returns The complete configuration object
108
+ * @throws ConfigurationError if configuration is not initialized
109
+ */
110
+ getAll() {
111
+ if (!this.configManager.isLoaded()) {
112
+ throw new ConfigurationError('Configuration service not initialized. Call initialize() first.');
113
+ }
114
+ return this.configManager.getAll();
115
+ }
116
+ /**
117
+ * Get the current application environment.
118
+ *
119
+ * @returns The APP_ENV value or 'development' as default
120
+ */
121
+ getAppEnv() {
122
+ return this.configManager.getAppEnv();
123
+ }
124
+ /**
125
+ * Get the underlying ConfigManager instance.
126
+ * Useful for advanced use cases that need direct access to ConfigManager features.
127
+ *
128
+ * @returns The ConfigManager instance from @dyanet/config-aws
129
+ */
130
+ getConfigManager() {
131
+ return this.configManager;
132
+ }
133
+ };
134
+ ConfigServiceImpl = ConfigServiceImpl_1 = __decorate([
135
+ Injectable(),
136
+ __metadata("design:paramtypes", [Object])
137
+ ], ConfigServiceImpl);
138
+ export { ConfigServiceImpl };
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQWN2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVJLElBQU0saUJBQWlCLHlCQUF2QixNQUFNLGlCQUErQyxTQUFRLGFBQWdCO0lBQ2pFLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxhQUFhLENBQW1CO0lBQ2hDLGlCQUFpQixDQUFVO0lBRTVDLFlBQVksVUFBbUMsRUFBRTtRQUMvQyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDO1FBRTNELDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFJO1lBQ3hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRWhDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxZQUFZLEdBQUcsK0NBQStDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxHQUFHLENBQW9CLEdBQU07UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksa0JBQWtCLENBQzFCLGlFQUFpRSxDQUNsRSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsaUVBQWlFLENBQ2xFLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGLENBQUE7QUE1R1ksaUJBQWlCO0lBRDdCLFVBQVUsRUFBRTs7R0FDQSxpQkFBaUIsQ0E0RzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTG9nZ2VyIH0gZnJvbSAnQG5lc3Rqcy9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyLCBDb25maWd1cmF0aW9uRXJyb3IgfSBmcm9tICdAZHlhbmV0L2NvbmZpZy1hd3MnO1xyXG5pbXBvcnQgdHlwZSB7IENvbmZpZ01hbmFnZXJPcHRpb25zIH0gZnJvbSAnQGR5YW5ldC9jb25maWctYXdzJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy1zZXJ2aWNlLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOZXN0SlMgQ29uZmlnU2VydmljZSB3cmFwcGVyLlxyXG4gKiBFeHRlbmRzIENvbmZpZ01hbmFnZXJPcHRpb25zIGZyb20gQGR5YW5ldC9jb25maWctYXdzLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTZXJ2aWNlT3B0aW9uczxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IGV4dGVuZHMgQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4ge1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIE5lc3RKUyBsb2dnaW5nXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIGVuYWJsZU5lc3RMb2dnaW5nPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIE5lc3RKUyBJbmplY3RhYmxlIHdyYXBwZXIgYXJvdW5kIENvbmZpZ01hbmFnZXIgZnJvbSBAZHlhbmV0L2NvbmZpZy1hd3MuXHJcbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGFjY2VzcyB3aXRoIE5lc3RKUyBkZXBlbmRlbmN5IGluamVjdGlvbiBzdXBwb3J0LlxyXG4gKiBcclxuICogVGhpcyBpcyBhIHRoaW4gYWRhcHRlciBsYXllciB0aGF0IGRlbGVnYXRlcyBhbGwgY29uZmlndXJhdGlvbiBsb2FkaW5nIGFuZFxyXG4gKiBtYW5hZ2VtZW50IHRvIHRoZSBmcmFtZXdvcmstYWdub3N0aWMgQ29uZmlnTWFuYWdlciBmcm9tIGNvbmZpZy1hd3MuXHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IENvbmZpZ1NlcnZpY2VJbXBsIH0gZnJvbSAnQGR5YW5ldC9uZXN0anMtY29uZmlnLWF3cyc7XHJcbiAqIGltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xyXG4gKiBcclxuICogY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xyXG4gKiAgIERBVEFCQVNFX1VSTDogei5zdHJpbmcoKSxcclxuICogICBQT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMDApLFxyXG4gKiB9KTtcclxuICogXHJcbiAqIGNvbnN0IGNvbmZpZ1NlcnZpY2UgPSBuZXcgQ29uZmlnU2VydmljZUltcGwoe1xyXG4gKiAgIGxvYWRlcnM6IFtuZXcgRW52aXJvbm1lbnRMb2FkZXIoKV0sXHJcbiAqICAgc2NoZW1hLFxyXG4gKiB9KTtcclxuICogXHJcbiAqIGF3YWl0IGNvbmZpZ1NlcnZpY2UuaW5pdGlhbGl6ZSgpO1xyXG4gKiBjb25zdCBkYlVybCA9IGNvbmZpZ1NlcnZpY2UuZ2V0KCdEQVRBQkFTRV9VUkwnKTtcclxuICogYGBgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDb25maWdTZXJ2aWNlSW1wbDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IGV4dGVuZHMgQ29uZmlnU2VydmljZTxUPiB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBuZXcgTG9nZ2VyKENvbmZpZ1NlcnZpY2VJbXBsLm5hbWUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnTWFuYWdlcjogQ29uZmlnTWFuYWdlcjxUPjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZU5lc3RMb2dnaW5nOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb25maWdTZXJ2aWNlT3B0aW9uczxUPiA9IHt9KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgXHJcbiAgICB0aGlzLmVuYWJsZU5lc3RMb2dnaW5nID0gb3B0aW9ucy5lbmFibGVOZXN0TG9nZ2luZyA/PyB0cnVlO1xyXG4gICAgXHJcbiAgICAvLyBDcmVhdGUgQ29uZmlnTWFuYWdlciBmcm9tIGNvbmZpZy1hd3Mgd2l0aCBwcm92aWRlZCBvcHRpb25zXHJcbiAgICB0aGlzLmNvbmZpZ01hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcjxUPih7XHJcbiAgICAgIGxvYWRlcnM6IG9wdGlvbnMubG9hZGVycyxcclxuICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYSxcclxuICAgICAgcHJlY2VkZW5jZTogb3B0aW9ucy5wcmVjZWRlbmNlLFxyXG4gICAgICB2YWxpZGF0ZU9uTG9hZDogb3B0aW9ucy52YWxpZGF0ZU9uTG9hZCxcclxuICAgICAgZW5hYmxlTG9nZ2luZzogb3B0aW9ucy5lbmFibGVMb2dnaW5nLFxyXG4gICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxyXG4gICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gc2VydmljZSBieSBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgc291cmNlcy5cclxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwLlxyXG4gICAqIFxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkVycm9yIGlmIGxvYWRpbmcgb3IgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAqL1xyXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdNYW5hZ2VyLmlzTG9hZGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZU5lc3RMb2dnaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKCdJbml0aWFsaXppbmcgY29uZmlndXJhdGlvbiBzZXJ2aWNlLi4uJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci5sb2FkKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVOZXN0TG9nZ2luZykge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmxvZygnQ29uZmlndXJhdGlvbiBzZXJ2aWNlIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHRvIGluaXRpYWxpemUgY29uZmlndXJhdGlvbiBzZXJ2aWNlOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIGNvbmZpZ3VyYXRpb24gdmFsdWUgYnkga2V5IHdpdGggdHlwZSBzYWZldHkuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGtleSAtIFRoZSBjb25maWd1cmF0aW9uIGtleSB0byByZXRyaWV2ZVxyXG4gICAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIHZhbHVlIHdpdGggcHJvcGVyIHR5cGluZ1xyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkVycm9yIGlmIGNvbmZpZ3VyYXRpb24gaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICovXHJcbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IEspOiBUW0tdIHtcclxuICAgIGlmICghdGhpcy5jb25maWdNYW5hZ2VyLmlzTG9hZGVkKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcclxuICAgICAgICAnQ29uZmlndXJhdGlvbiBzZXJ2aWNlIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0aWFsaXplKCkgZmlyc3QuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnTWFuYWdlci5nZXQoa2V5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoZSBjb25maWd1cmF0aW9uIHNlcnZpY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2VydmljZSBpcyByZWFkeSB0byBzZXJ2ZSBjb25maWd1cmF0aW9uIHZhbHVlc1xyXG4gICAqL1xyXG4gIGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdNYW5hZ2VyLmlzTG9hZGVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsIGNvbmZpZ3VyYXRpb24gdmFsdWVzLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkVycm9yIGlmIGNvbmZpZ3VyYXRpb24gaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICovXHJcbiAgZ2V0QWxsKCk6IFQge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZ01hbmFnZXIuaXNMb2FkZWQoKSkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxyXG4gICAgICAgICdDb25maWd1cmF0aW9uIHNlcnZpY2Ugbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXRpYWxpemUoKSBmaXJzdC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdNYW5hZ2VyLmdldEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGVudmlyb25tZW50LlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFRoZSBBUFBfRU5WIHZhbHVlIG9yICdkZXZlbG9wbWVudCcgYXMgZGVmYXVsdFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnTWFuYWdlci5nZXRBcHBFbnYoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgdW5kZXJseWluZyBDb25maWdNYW5hZ2VyIGluc3RhbmNlLlxyXG4gICAqIFVzZWZ1bCBmb3IgYWR2YW5jZWQgdXNlIGNhc2VzIHRoYXQgbmVlZCBkaXJlY3QgYWNjZXNzIHRvIENvbmZpZ01hbmFnZXIgZmVhdHVyZXMuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgVGhlIENvbmZpZ01hbmFnZXIgaW5zdGFuY2UgZnJvbSBAZHlhbmV0L2NvbmZpZy1hd3NcclxuICAgKi9cclxuICBnZXRDb25maWdNYW5hZ2VyKCk6IENvbmZpZ01hbmFnZXI8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnTWFuYWdlcjtcclxuICB9XHJcbn1cclxuIl19