@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,21 @@
1
+ /**
2
+ * @dyanet/config-aws
3
+ *
4
+ * Framework-agnostic AWS configuration management library.
5
+ * Supports environment variables, AWS Secrets Manager, SSM Parameter Store,
6
+ * S3, and .env files with configurable precedence.
7
+ */
8
+ // Error classes
9
+ export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from './errors';
10
+ // Loaders
11
+ export { EnvironmentLoader } from './loaders/environment.loader';
12
+ export { EnvFileLoader } from './loaders/env-file.loader';
13
+ export { S3Loader } from './loaders/s3.loader';
14
+ export { SecretsManagerLoader } from './loaders/secrets-manager.loader';
15
+ export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader';
16
+ // ConfigManager
17
+ export { ConfigManager } from './config-manager';
18
+ // Utilities
19
+ export { ConfigValidationUtil } from './utils/validation.util';
20
+ export { EnvFileParser } from './utils/env-file-parser.util';
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQ0gsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLFVBQVU7QUFDVixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLGdCQUFnQjtBQUNoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsWUFBWTtBQUNaLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZHlhbmV0L2NvbmZpZy1hd3NcclxuICpcclxuICogRnJhbWV3b3JrLWFnbm9zdGljIEFXUyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgbGlicmFyeS5cclxuICogU3VwcG9ydHMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBBV1MgU2VjcmV0cyBNYW5hZ2VyLCBTU00gUGFyYW1ldGVyIFN0b3JlLFxyXG4gKiBTMywgYW5kIC5lbnYgZmlsZXMgd2l0aCBjb25maWd1cmFibGUgcHJlY2VkZW5jZS5cclxuICovXHJcblxyXG4vLyBJbnRlcmZhY2VzXHJcbmV4cG9ydCB0eXBlIHtcclxuICBDb25maWdMb2FkZXIsXHJcbiAgQ29uZmlnTG9hZGVyUmVzdWx0LFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgQ29uZmlnTWFuYWdlck9wdGlvbnMsXHJcbiAgTG9hZGVyUHJlY2VkZW5jZSxcclxuICBWZXJib3NlT3B0aW9ucyxcclxuICBQcmVjZWRlbmNlU3RyYXRlZ3ksXHJcbiAgQ29uZmlnTG9hZFJlc3VsdCxcclxuICBDb25maWdTb3VyY2VJbmZvLFxyXG4gIExvZ2dlcixcclxufSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBFbnZpcm9ubWVudExvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgRW52RmlsZUxvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgUzNMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3MzLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlY3JldHNNYW5hZ2VyTG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9zZWNyZXRzLW1hbmFnZXItbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3NzbS1wYXJhbWV0ZXItc3RvcmUtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vLyBFcnJvciBjbGFzc2VzXHJcbmV4cG9ydCB7XHJcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25FcnJvcixcclxuICBBV1NTZXJ2aWNlRXJyb3IsXHJcbiAgQ29uZmlndXJhdGlvbkxvYWRFcnJvcixcclxuICBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yLFxyXG59IGZyb20gJy4vZXJyb3JzJztcclxuXHJcbi8vIExvYWRlcnNcclxuZXhwb3J0IHsgRW52aXJvbm1lbnRMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvZW52aXJvbm1lbnQubG9hZGVyJztcclxuZXhwb3J0IHsgRW52RmlsZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9lbnYtZmlsZS5sb2FkZXInO1xyXG5leHBvcnQgeyBTM0xvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zMy5sb2FkZXInO1xyXG5leHBvcnQgeyBTZWNyZXRzTWFuYWdlckxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zZWNyZXRzLW1hbmFnZXIubG9hZGVyJztcclxuZXhwb3J0IHsgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvc3NtLXBhcmFtZXRlci1zdG9yZS5sb2FkZXInO1xyXG5cclxuLy8gQ29uZmlnTWFuYWdlclxyXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi9jb25maWctbWFuYWdlcic7XHJcblxyXG4vLyBVdGlsaXRpZXNcclxuZXhwb3J0IHsgQ29uZmlnVmFsaWRhdGlvblV0aWwgfSBmcm9tICcuL3V0aWxzL3ZhbGlkYXRpb24udXRpbCc7XHJcbmV4cG9ydCB7IEVudkZpbGVQYXJzZXIgfSBmcm9tICcuL3V0aWxzL2Vudi1maWxlLXBhcnNlci51dGlsJztcclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUmVzdWx0IHJldHVybmVkIGJ5IGEgY29uZmlndXJhdGlvbiBsb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZGVyUmVzdWx0IHtcclxuICAvKiogVGhlIGxvYWRlZCBjb25maWd1cmF0aW9uIGtleS12YWx1ZSBwYWlycyAqL1xyXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgLyoqIEtleXMgdGhhdCB3ZXJlIGxvYWRlZCBieSB0aGlzIGxvYWRlciAqL1xyXG4gIGtleXNMb2FkZWQ6IHN0cmluZ1tdO1xyXG4gIC8qKiBUaW1lIHRha2VuIHRvIGxvYWQgaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgZHVyYXRpb246IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgY29uZmlndXJhdGlvbiBsb2FkZXJzLlxyXG4gKiBBbGwgbG9hZGVycyBtdXN0IGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIHdpdGggQ29uZmlnTWFuYWdlci5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZGVyIHtcclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc291cmNlLlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBsb2FkZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIGxvYWRlciBmb3IgbG9nZ2luZyBhbmQgZGVidWdnaW5nLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZXIgbmFtZVxyXG4gICAqL1xyXG4gIGdldE5hbWUoKTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGlzIGxvYWRlciBpcyBhdmFpbGFibGUgYW5kIGNhbiBsb2FkIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiB0aGUgbG9hZGVyIGNhbiBsb2FkIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/OiBib29sZWFuO1xyXG4gIC8qKiBNYXNrIHNlbnNpdGl2ZSB2YWx1ZXMgKHNob3cgZmlyc3QvbGFzdCAyIGNoYXJzIG9ubHkpLiBEZWZhdWx0OiB0cnVlICh3aGVuIGxvZ1ZhbHVlcyBpcyB0cnVlKSAqL1xyXG4gIG1hc2tWYWx1ZXM/OiBib29sZWFuO1xyXG4gIC8qKiBLZXlzIHRvIGFsd2F5cyBtYXNrIHJlZ2FyZGxlc3Mgb2YgbWFza1ZhbHVlcyBzZXR0aW5nLiBEZWZhdWx0OiBbJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdrZXknLCAndG9rZW4nXSAqL1xyXG4gIHNlbnNpdGl2ZUtleXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBsb2FkZXIgcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclByZWNlZGVuY2Uge1xyXG4gIC8qKiBMb2FkZXIgbmFtZSAqL1xyXG4gIGxvYWRlcjogc3RyaW5nO1xyXG4gIC8qKiBQcmlvcml0eSAtIGhpZ2hlciB2YWx1ZXMgb3ZlcnJpZGUgbG93ZXIgdmFsdWVzICovXHJcbiAgcHJpb3JpdHk6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZWNlZGVuY2Ugc3RyYXRlZ3kgZm9yIG1lcmdpbmcgY29uZmlndXJhdGlvbnNcclxuICogLSAnYXdzLWZpcnN0JzogZW52IC0+IGVudkZpbGUgLT4gczMgLT4gc2VjcmV0c01hbmFnZXIgLT4gc3NtIChBV1Mgd2lucylcclxuICogLSAnbG9jYWwtZmlyc3QnOiBzZWNyZXRzTWFuYWdlciAtPiBzc20gLT4gczMgLT4gZW52RmlsZSAtPiBlbnYgKGxvY2FsIHdpbnMpXHJcbiAqIC0gQ3VzdG9tIGFycmF5OiB1c2VyLWRlZmluZWQgb3JkZXIgdmlhIExvYWRlclByZWNlZGVuY2VbXVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgUHJlY2VkZW5jZVN0cmF0ZWd5ID0gJ2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnIHwgTG9hZGVyUHJlY2VkZW5jZVtdO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIENvbmZpZ01hbmFnZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFuYWdlck9wdGlvbnM8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEFycmF5IG9mIGxvYWRlcnMgdG8gdXNlICovXHJcbiAgbG9hZGVycz86IENvbmZpZ0xvYWRlcltdO1xyXG4gIC8qKiBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW9uICovXHJcbiAgc2NoZW1hPzogWm9kVHlwZTxUPjtcclxuICAvKiogUHJlY2VkZW5jZSBzdHJhdGVneSBmb3IgbWVyZ2luZyBjb25maWd1cmF0aW9ucyAqL1xyXG4gIHByZWNlZGVuY2U/OiBQcmVjZWRlbmNlU3RyYXRlZ3k7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgY29uZmlndXJhdGlvbiBvbiBsb2FkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgdmFsaWRhdGVPbkxvYWQ/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gRGVmYXVsdDogZmFsc2UgKi9cclxuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcclxuICAvKiogQ3VzdG9tIGxvZ2dlciBpbnN0YW5jZSAqL1xyXG4gIGxvZ2dlcj86IExvZ2dlcjtcclxuICAvKiogVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IG9wdGlvbnMgKi9cclxuICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uIHNvdXJjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTb3VyY2VJbmZvIHtcclxuICAvKiogTmFtZSBvZiB0aGUgbG9hZGVyICovXHJcbiAgbG9hZGVyOiBzdHJpbmc7XHJcbiAgLyoqIEtleXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyICovXHJcbiAga2V5c0xvYWRlZDogc3RyaW5nW107XHJcbiAgLyoqIFRpbWUgdGFrZW4gdG8gbG9hZCBpbiBtaWxsaXNlY29uZHMgKi9cclxuICBkdXJhdGlvbjogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzdWx0IG9mIGxvYWRpbmcgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkUmVzdWx0PFQ+IHtcclxuICAvKiogVGhlIG1lcmdlZCBjb25maWd1cmF0aW9uICovXHJcbiAgY29uZmlnOiBUO1xyXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNvdXJjZSAqL1xyXG4gIHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXTtcclxuICAvKiogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbG9hZGVkICovXHJcbiAgbG9hZGVkQXQ6IERhdGU7XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRW52RmlsZUxvYWRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFbnZGaWxlTG9hZGVyQ29uZmlnIHtcclxuICAvKiogUGF0aHMgdG8gLmVudiBmaWxlcyB0byBsb2FkLiBEZWZhdWx0OiBbJy5lbnYnLCAnLmVudi5sb2NhbCddICovXHJcbiAgcGF0aHM/OiBzdHJpbmdbXTtcclxuICAvKiogRmlsZSBlbmNvZGluZy4gRGVmYXVsdDogJ3V0Zi04JyAqL1xyXG4gIGVuY29kaW5nPzogQnVmZmVyRW5jb2Rpbmc7XHJcbiAgLyoqIFdoZXRoZXIgbGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgb3ZlcnJpZGU/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRW52aXJvbm1lbnRMb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnRMb2FkZXJDb25maWcge1xyXG4gIC8qKiBQcmVmaXggdG8gZmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gT25seSB2YXJpYWJsZXMgc3RhcnRpbmcgd2l0aCB0aGlzIHByZWZpeCB3aWxsIGJlIGxvYWRlZC4gKi9cclxuICBwcmVmaXg/OiBzdHJpbmc7XHJcbiAgLyoqIExpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIGxvYWRpbmcgKi9cclxuICBleGNsdWRlPzogc3RyaW5nW107XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvczMtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUzNMb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUzNMb2FkZXJDb25maWcge1xyXG4gIC8qKiBTMyBidWNrZXQgbmFtZSAqL1xyXG4gIGJ1Y2tldDogc3RyaW5nO1xyXG4gIC8qKiBTMyBvYmplY3Qga2V5ICovXHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogRm9ybWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIERlZmF1bHQ6ICdhdXRvJyAoYXV0by1kZXRlY3QgYmFzZWQgb24gY29udGVudCkgKi9cclxuICBmb3JtYXQ/OiAnanNvbicgfCAnZW52JyB8ICdhdXRvJztcclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1tYW5hZ2VyLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTZWNyZXRzTWFuYWdlckxvYWRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzTWFuYWdlckxvYWRlckNvbmZpZyB7XHJcbiAgLyoqIE5hbWUgb3IgQVJOIG9mIHRoZSBzZWNyZXQgdG8gbG9hZCAqL1xyXG4gIHNlY3JldE5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogTWFwcGluZyBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byBwYXRoIHByZWZpeGVzICovXHJcbiAgZW52aXJvbm1lbnRNYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1zdG9yZS1sb2FkZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9zc20tcGFyYW1ldGVyLXN0b3JlLWxvYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnIHtcclxuICAvKiogUGF0aCBwcmVmaXggZm9yIHBhcmFtZXRlcnMgdG8gbG9hZCAqL1xyXG4gIHBhcmFtZXRlclBhdGg/OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogTWFwcGluZyBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byBwYXRoIHByZWZpeGVzICovXHJcbiAgZW52aXJvbm1lbnRNYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAvKiogV2hldGhlciB0byBkZWNyeXB0IFNlY3VyZVN0cmluZyBwYXJhbWV0ZXJzLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgd2l0aERlY3J5cHRpb24/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,132 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { EnvFileParser } from '../utils/env-file-parser.util';
4
+ import { ConfigurationLoadError } from '../errors';
5
+ /**
6
+ * Loader that reads configuration from .env files on the filesystem.
7
+ * Uses AWS ECS-compatible format for parsing.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // Load from default paths (.env, .env.local)
12
+ * const loader = new EnvFileLoader();
13
+ *
14
+ * // Load from specific paths
15
+ * const loader = new EnvFileLoader({
16
+ * paths: ['.env', '.env.production']
17
+ * });
18
+ *
19
+ * // Disable override (first file wins)
20
+ * const loader = new EnvFileLoader({
21
+ * paths: ['.env', '.env.local'],
22
+ * override: false
23
+ * });
24
+ * ```
25
+ *
26
+ * @see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/use-environment-file.html
27
+ */
28
+ export class EnvFileLoader {
29
+ /** @internal */
30
+ _config;
31
+ /** Default paths to search for .env files */
32
+ static DEFAULT_PATHS = ['.env', '.env.local'];
33
+ /** Default file encoding */
34
+ static DEFAULT_ENCODING = 'utf-8';
35
+ constructor(config = {}) {
36
+ this._config = {
37
+ paths: config.paths ?? EnvFileLoader.DEFAULT_PATHS,
38
+ encoding: config.encoding ?? EnvFileLoader.DEFAULT_ENCODING,
39
+ override: config.override ?? true,
40
+ };
41
+ }
42
+ getName() {
43
+ return 'EnvFileLoader';
44
+ }
45
+ /**
46
+ * Check if at least one of the configured .env files exists.
47
+ * @returns Promise resolving to true if any file exists
48
+ */
49
+ async isAvailable() {
50
+ for (const filePath of this._config.paths) {
51
+ const resolvedPath = this.resolvePath(filePath);
52
+ if (await this.fileExists(resolvedPath)) {
53
+ return true;
54
+ }
55
+ }
56
+ return false;
57
+ }
58
+ /**
59
+ * Load configuration from .env files.
60
+ *
61
+ * Files are processed in order. When override is true (default),
62
+ * later files override earlier ones. When override is false,
63
+ * earlier files take precedence.
64
+ *
65
+ * Missing files are silently skipped.
66
+ *
67
+ * @returns Promise resolving to the merged configuration
68
+ * @throws ConfigurationLoadError if a file exists but cannot be read
69
+ */
70
+ async load() {
71
+ const result = {};
72
+ for (const filePath of this._config.paths) {
73
+ const resolvedPath = this.resolvePath(filePath);
74
+ if (!(await this.fileExists(resolvedPath))) {
75
+ // Skip missing files silently
76
+ continue;
77
+ }
78
+ try {
79
+ const content = await this.readFile(resolvedPath);
80
+ const parsed = EnvFileParser.parse(content);
81
+ // Merge based on override setting
82
+ if (this._config.override) {
83
+ // Later files override earlier ones
84
+ Object.assign(result, parsed);
85
+ }
86
+ else {
87
+ // Earlier files take precedence - only add keys that don't exist
88
+ for (const [key, value] of Object.entries(parsed)) {
89
+ if (!(key in result)) {
90
+ result[key] = value;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ catch (error) {
96
+ throw new ConfigurationLoadError(`Failed to read env file: ${resolvedPath}`, this.getName(), error instanceof Error ? error : undefined);
97
+ }
98
+ }
99
+ return result;
100
+ }
101
+ /**
102
+ * Resolve a file path relative to the current working directory.
103
+ * @internal
104
+ */
105
+ resolvePath(filePath) {
106
+ if (path.isAbsolute(filePath)) {
107
+ return filePath;
108
+ }
109
+ return path.resolve(process.cwd(), filePath);
110
+ }
111
+ /**
112
+ * Check if a file exists.
113
+ * @internal
114
+ */
115
+ async fileExists(filePath) {
116
+ try {
117
+ await fs.promises.access(filePath, fs.constants.R_OK);
118
+ return true;
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
124
+ /**
125
+ * Read a file's contents.
126
+ * @internal
127
+ */
128
+ async readFile(filePath) {
129
+ return fs.promises.readFile(filePath, { encoding: this._config.encoding });
130
+ }
131
+ }
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWZpbGUubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvbG9hZGVycy9lbnYtZmlsZS5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLGdCQUFnQjtJQUNHLE9BQU8sQ0FBZ0M7SUFFMUQsNkNBQTZDO0lBQ3JDLE1BQU0sQ0FBVSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFL0QsNEJBQTRCO0lBQ3BCLE1BQU0sQ0FBVSxnQkFBZ0IsR0FBbUIsT0FBTyxDQUFDO0lBRW5FLFlBQVksU0FBOEIsRUFBRTtRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLGFBQWE7WUFDbEQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLGdCQUFnQjtZQUMzRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFHRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELElBQUksTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztRQUUzQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQyw4QkFBOEI7Z0JBQzlCLFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFNUMsa0NBQWtDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzFCLG9DQUFvQztvQkFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixpRUFBaUU7b0JBQ2pFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ2xELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDOzRCQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sSUFBSSxzQkFBc0IsQ0FDOUIsNEJBQTRCLFlBQVksRUFBRSxFQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2QsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQzNDLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxXQUFXLENBQUMsUUFBZ0I7UUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNPLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0I7UUFDekMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUN2QyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUgeyBFbnZGaWxlTG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbnYtZmlsZS1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRW52RmlsZVBhcnNlciB9IGZyb20gJy4uL3V0aWxzL2Vudi1maWxlLXBhcnNlci51dGlsJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkxvYWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XHJcblxyXG4vKipcclxuICogTG9hZGVyIHRoYXQgcmVhZHMgY29uZmlndXJhdGlvbiBmcm9tIC5lbnYgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uXHJcbiAqIFVzZXMgQVdTIEVDUy1jb21wYXRpYmxlIGZvcm1hdCBmb3IgcGFyc2luZy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiAvLyBMb2FkIGZyb20gZGVmYXVsdCBwYXRocyAoLmVudiwgLmVudi5sb2NhbClcclxuICogY29uc3QgbG9hZGVyID0gbmV3IEVudkZpbGVMb2FkZXIoKTtcclxuICpcclxuICogLy8gTG9hZCBmcm9tIHNwZWNpZmljIHBhdGhzXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBFbnZGaWxlTG9hZGVyKHtcclxuICogICBwYXRoczogWycuZW52JywgJy5lbnYucHJvZHVjdGlvbiddXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBEaXNhYmxlIG92ZXJyaWRlIChmaXJzdCBmaWxlIHdpbnMpXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBFbnZGaWxlTG9hZGVyKHtcclxuICogICBwYXRoczogWycuZW52JywgJy5lbnYubG9jYWwnXSxcclxuICogICBvdmVycmlkZTogZmFsc2VcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZS1lbnZpcm9ubWVudC1maWxlLmh0bWxcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbnZGaWxlTG9hZGVyIGltcGxlbWVudHMgQ29uZmlnTG9hZGVyIHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb25maWc6IFJlcXVpcmVkPEVudkZpbGVMb2FkZXJDb25maWc+O1xyXG5cclxuICAvKiogRGVmYXVsdCBwYXRocyB0byBzZWFyY2ggZm9yIC5lbnYgZmlsZXMgKi9cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BBVEhTID0gWycuZW52JywgJy5lbnYubG9jYWwnXTtcclxuXHJcbiAgLyoqIERlZmF1bHQgZmlsZSBlbmNvZGluZyAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfRU5DT0RJTkc6IEJ1ZmZlckVuY29kaW5nID0gJ3V0Zi04JztcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBFbnZGaWxlTG9hZGVyQ29uZmlnID0ge30pIHtcclxuICAgIHRoaXMuX2NvbmZpZyA9IHtcclxuICAgICAgcGF0aHM6IGNvbmZpZy5wYXRocyA/PyBFbnZGaWxlTG9hZGVyLkRFRkFVTFRfUEFUSFMsXHJcbiAgICAgIGVuY29kaW5nOiBjb25maWcuZW5jb2RpbmcgPz8gRW52RmlsZUxvYWRlci5ERUZBVUxUX0VOQ09ESU5HLFxyXG4gICAgICBvdmVycmlkZTogY29uZmlnLm92ZXJyaWRlID8/IHRydWUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdFbnZGaWxlTG9hZGVyJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQgLmVudiBmaWxlcyBleGlzdHMuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiBhbnkgZmlsZSBleGlzdHNcclxuICAgKi9cclxuICBhc3luYyBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5fY29uZmlnLnBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5maWxlRXhpc3RzKHJlc29sdmVkUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gLmVudiBmaWxlcy5cclxuICAgKlxyXG4gICAqIEZpbGVzIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIuIFdoZW4gb3ZlcnJpZGUgaXMgdHJ1ZSAoZGVmYXVsdCksXHJcbiAgICogbGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzLiBXaGVuIG92ZXJyaWRlIGlzIGZhbHNlLFxyXG4gICAqIGVhcmxpZXIgZmlsZXMgdGFrZSBwcmVjZWRlbmNlLlxyXG4gICAqXHJcbiAgICogTWlzc2luZyBmaWxlcyBhcmUgc2lsZW50bHkgc2tpcHBlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBtZXJnZWQgY29uZmlndXJhdGlvblxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBhIGZpbGUgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgcmVhZFxyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5fY29uZmlnLnBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5maWxlRXhpc3RzKHJlc29sdmVkUGF0aCkpKSB7XHJcbiAgICAgICAgLy8gU2tpcCBtaXNzaW5nIGZpbGVzIHNpbGVudGx5XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMucmVhZEZpbGUocmVzb2x2ZWRQYXRoKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBFbnZGaWxlUGFyc2VyLnBhcnNlKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAvLyBNZXJnZSBiYXNlZCBvbiBvdmVycmlkZSBzZXR0aW5nXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5vdmVycmlkZSkge1xyXG4gICAgICAgICAgLy8gTGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzXHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgcGFyc2VkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gRWFybGllciBmaWxlcyB0YWtlIHByZWNlZGVuY2UgLSBvbmx5IGFkZCBrZXlzIHRoYXQgZG9uJ3QgZXhpc3RcclxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcclxuICAgICAgICAgICAgaWYgKCEoa2V5IGluIHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uTG9hZEVycm9yKFxyXG4gICAgICAgICAgYEZhaWxlZCB0byByZWFkIGVudiBmaWxlOiAke3Jlc29sdmVkUGF0aH1gLFxyXG4gICAgICAgICAgdGhpcy5nZXROYW1lKCksXHJcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIGEgZmlsZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZXNvbHZlUGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpKSB7XHJcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBmaWxlIGV4aXN0cy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgZmlsZUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MoZmlsZVBhdGgsIGZzLmNvbnN0YW50cy5SX09LKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhZCBhIGZpbGUncyBjb250ZW50cy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgcmVhZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZVBhdGgsIHsgZW5jb2Rpbmc6IHRoaXMuX2NvbmZpZy5lbmNvZGluZyB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Loader that reads configuration from process.env.
3
+ * Supports prefix filtering and exclusion lists.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * // Load all environment variables
8
+ * const loader = new EnvironmentLoader();
9
+ *
10
+ * // Load only variables starting with 'APP_', stripping the prefix
11
+ * const loader = new EnvironmentLoader({ prefix: 'APP_' });
12
+ *
13
+ * // Load all except specific variables
14
+ * const loader = new EnvironmentLoader({ exclude: ['PATH', 'HOME'] });
15
+ *
16
+ * // Combine prefix and exclusion
17
+ * const loader = new EnvironmentLoader({
18
+ * prefix: 'APP_',
19
+ * exclude: ['APP_DEBUG']
20
+ * });
21
+ * ```
22
+ */
23
+ export class EnvironmentLoader {
24
+ /** @internal */
25
+ _config;
26
+ constructor(config = {}) {
27
+ this._config = config;
28
+ }
29
+ getName() {
30
+ return 'EnvironmentLoader';
31
+ }
32
+ async isAvailable() {
33
+ return true;
34
+ }
35
+ /**
36
+ * Load configuration from process.env.
37
+ *
38
+ * When a prefix is specified:
39
+ * - Only variables starting with the prefix are included
40
+ * - The prefix is stripped from the resulting key names
41
+ *
42
+ * When an exclusion list is specified:
43
+ * - Variables in the list are excluded from the result
44
+ * - Exclusion is checked against the original key (before prefix stripping)
45
+ *
46
+ * @returns Promise resolving to the loaded configuration
47
+ */
48
+ async load() {
49
+ const result = {};
50
+ const { prefix, exclude = [] } = this._config;
51
+ const excludeSet = new Set(exclude);
52
+ for (const [key, value] of Object.entries(process.env)) {
53
+ // Skip undefined values
54
+ if (value === undefined) {
55
+ continue;
56
+ }
57
+ // Check exclusion list (against original key)
58
+ if (excludeSet.has(key)) {
59
+ continue;
60
+ }
61
+ // Handle prefix filtering
62
+ if (prefix) {
63
+ if (key.startsWith(prefix)) {
64
+ // Strip prefix from key
65
+ const strippedKey = key.slice(prefix.length);
66
+ // Only include if there's a key remaining after stripping
67
+ if (strippedKey) {
68
+ result[strippedKey] = value;
69
+ }
70
+ }
71
+ // Skip keys that don't match the prefix
72
+ }
73
+ else {
74
+ // No prefix - include all non-excluded keys
75
+ result[key] = value;
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvbG9hZGVycy9lbnZpcm9ubWVudC5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsZ0JBQWdCO0lBQ0csT0FBTyxDQUEwQjtJQUVwRCxZQUFZLFNBQWtDLEVBQUU7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZELHdCQUF3QjtZQUN4QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsU0FBUztZQUNYLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLFNBQVM7WUFDWCxDQUFDO1lBRUQsMEJBQTBCO1lBQzFCLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzNCLHdCQUF3QjtvQkFDeEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdDLDBEQUEwRDtvQkFDMUQsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDOUIsQ0FBQztnQkFDSCxDQUFDO2dCQUNELHdDQUF3QztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sNENBQTRDO2dCQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudExvYWRlckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogTG9hZGVyIHRoYXQgcmVhZHMgY29uZmlndXJhdGlvbiBmcm9tIHByb2Nlc3MuZW52LlxyXG4gKiBTdXBwb3J0cyBwcmVmaXggZmlsdGVyaW5nIGFuZCBleGNsdXNpb24gbGlzdHMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogLy8gTG9hZCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBFbnZpcm9ubWVudExvYWRlcigpO1xyXG4gKlxyXG4gKiAvLyBMb2FkIG9ubHkgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggJ0FQUF8nLCBzdHJpcHBpbmcgdGhlIHByZWZpeFxyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgRW52aXJvbm1lbnRMb2FkZXIoeyBwcmVmaXg6ICdBUFBfJyB9KTtcclxuICpcclxuICogLy8gTG9hZCBhbGwgZXhjZXB0IHNwZWNpZmljIHZhcmlhYmxlc1xyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgRW52aXJvbm1lbnRMb2FkZXIoeyBleGNsdWRlOiBbJ1BBVEgnLCAnSE9NRSddIH0pO1xyXG4gKlxyXG4gKiAvLyBDb21iaW5lIHByZWZpeCBhbmQgZXhjbHVzaW9uXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBFbnZpcm9ubWVudExvYWRlcih7XHJcbiAqICAgcHJlZml4OiAnQVBQXycsXHJcbiAqICAgZXhjbHVkZTogWydBUFBfREVCVUcnXVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRMb2FkZXIgaW1wbGVtZW50cyBDb25maWdMb2FkZXIge1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbmZpZzogRW52aXJvbm1lbnRMb2FkZXJDb25maWc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogRW52aXJvbm1lbnRMb2FkZXJDb25maWcgPSB7fSkge1xyXG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdFbnZpcm9ubWVudExvYWRlcic7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gcHJvY2Vzcy5lbnYuXHJcbiAgICpcclxuICAgKiBXaGVuIGEgcHJlZml4IGlzIHNwZWNpZmllZDpcclxuICAgKiAtIE9ubHkgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggdGhlIHByZWZpeCBhcmUgaW5jbHVkZWRcclxuICAgKiAtIFRoZSBwcmVmaXggaXMgc3RyaXBwZWQgZnJvbSB0aGUgcmVzdWx0aW5nIGtleSBuYW1lc1xyXG4gICAqXHJcbiAgICogV2hlbiBhbiBleGNsdXNpb24gbGlzdCBpcyBzcGVjaWZpZWQ6XHJcbiAgICogLSBWYXJpYWJsZXMgaW4gdGhlIGxpc3QgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHJlc3VsdFxyXG4gICAqIC0gRXhjbHVzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgb3JpZ2luYWwga2V5IChiZWZvcmUgcHJlZml4IHN0cmlwcGluZylcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBsb2FkZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG4gICAgY29uc3QgeyBwcmVmaXgsIGV4Y2x1ZGUgPSBbXSB9ID0gdGhpcy5fY29uZmlnO1xyXG4gICAgY29uc3QgZXhjbHVkZVNldCA9IG5ldyBTZXQoZXhjbHVkZSk7XHJcblxyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvY2Vzcy5lbnYpKSB7XHJcbiAgICAgIC8vIFNraXAgdW5kZWZpbmVkIHZhbHVlc1xyXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBleGNsdXNpb24gbGlzdCAoYWdhaW5zdCBvcmlnaW5hbCBrZXkpXHJcbiAgICAgIGlmIChleGNsdWRlU2V0LmhhcyhrZXkpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhbmRsZSBwcmVmaXggZmlsdGVyaW5nXHJcbiAgICAgIGlmIChwcmVmaXgpIHtcclxuICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICAgICAgLy8gU3RyaXAgcHJlZml4IGZyb20ga2V5XHJcbiAgICAgICAgICBjb25zdCBzdHJpcHBlZEtleSA9IGtleS5zbGljZShwcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICAgIC8vIE9ubHkgaW5jbHVkZSBpZiB0aGVyZSdzIGEga2V5IHJlbWFpbmluZyBhZnRlciBzdHJpcHBpbmdcclxuICAgICAgICAgIGlmIChzdHJpcHBlZEtleSkge1xyXG4gICAgICAgICAgICByZXN1bHRbc3RyaXBwZWRLZXldID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFNraXAga2V5cyB0aGF0IGRvbid0IG1hdGNoIHRoZSBwcmVmaXhcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBObyBwcmVmaXggLSBpbmNsdWRlIGFsbCBub24tZXhjbHVkZWQga2V5c1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,141 @@
1
+ import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
2
+ import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
3
+ import { EnvFileParser } from '../utils/env-file-parser.util';
4
+ import { AWSServiceError, ConfigurationLoadError } from '../errors';
5
+ /**
6
+ * Loader that reads configuration from S3 buckets.
7
+ * Supports JSON and .env file formats with auto-detection.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // Load JSON config from S3
12
+ * const loader = new S3Loader({
13
+ * bucket: 'my-config-bucket',
14
+ * key: 'config/app.json',
15
+ * format: 'json'
16
+ * });
17
+ *
18
+ * // Load .env file from S3 with auto-detection
19
+ * const loader = new S3Loader({
20
+ * bucket: 'my-config-bucket',
21
+ * key: 'config/.env'
22
+ * });
23
+ * ```
24
+ *
25
+ * @see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/use-environment-file.html
26
+ */
27
+ export class S3Loader {
28
+ /** @internal */
29
+ _config;
30
+ /** @internal */
31
+ _client;
32
+ constructor(config) {
33
+ this._config = {
34
+ bucket: config.bucket,
35
+ key: config.key,
36
+ region: config.region || process.env['AWS_REGION'] || 'us-east-1',
37
+ format: config.format || 'auto',
38
+ };
39
+ this._client = new S3Client({
40
+ credentials: fromNodeProviderChain(),
41
+ region: this._config.region,
42
+ });
43
+ }
44
+ getName() {
45
+ return `S3Loader(s3://${this._config.bucket}/${this._config.key})`;
46
+ }
47
+ /**
48
+ * Check if this loader is available by verifying AWS credentials.
49
+ * @returns Promise resolving to true if AWS credentials are available
50
+ */
51
+ async isAvailable() {
52
+ try {
53
+ await this._client.config.credentials();
54
+ return true;
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ /**
61
+ * Load configuration from S3.
62
+ * @returns Promise resolving to configuration key-value pairs
63
+ * @throws AWSServiceError if S3 operation fails
64
+ * @throws ConfigurationLoadError if content cannot be parsed
65
+ */
66
+ async load() {
67
+ try {
68
+ const command = new GetObjectCommand({
69
+ Bucket: this._config.bucket,
70
+ Key: this._config.key,
71
+ });
72
+ const response = await this._client.send(command);
73
+ if (!response.Body) {
74
+ return {};
75
+ }
76
+ const content = await response.Body.transformToString();
77
+ if (!content || content.trim() === '') {
78
+ return {};
79
+ }
80
+ return this.parseContent(content);
81
+ }
82
+ catch (error) {
83
+ if (error instanceof ConfigurationLoadError) {
84
+ throw error;
85
+ }
86
+ if (error instanceof Error) {
87
+ if (error.name === 'NoSuchKey' || error.name === 'NoSuchBucket') {
88
+ // Object or bucket doesn't exist - return empty config
89
+ return {};
90
+ }
91
+ if (error.name === 'AccessDenied') {
92
+ throw new AWSServiceError(`Access denied when retrieving s3://${this._config.bucket}/${this._config.key}. Check AWS credentials and permissions.`, 'S3', 'GetObject', error);
93
+ }
94
+ }
95
+ throw new AWSServiceError(`Failed to retrieve s3://${this._config.bucket}/${this._config.key}: ${error instanceof Error ? error.message : String(error)}`, 'S3', 'GetObject', error instanceof Error ? error : undefined);
96
+ }
97
+ }
98
+ /**
99
+ * Parse content based on format setting or auto-detection.
100
+ * @internal
101
+ */
102
+ parseContent(content) {
103
+ const format = this._config.format === 'auto' ? this.detectFormat(content) : this._config.format;
104
+ if (format === 'json') {
105
+ return this.parseJson(content);
106
+ }
107
+ else {
108
+ return EnvFileParser.parse(content);
109
+ }
110
+ }
111
+ /**
112
+ * Detect content format based on structure.
113
+ * JSON content starts with '{' after trimming whitespace.
114
+ * @internal
115
+ */
116
+ detectFormat(content) {
117
+ const trimmed = content.trim();
118
+ if (trimmed.startsWith('{')) {
119
+ return 'json';
120
+ }
121
+ return 'env';
122
+ }
123
+ /**
124
+ * Parse JSON content.
125
+ * @internal
126
+ */
127
+ parseJson(content) {
128
+ try {
129
+ const parsed = JSON.parse(content);
130
+ if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
131
+ return parsed;
132
+ }
133
+ // If not an object, wrap it
134
+ return { CONFIG_VALUE: parsed };
135
+ }
136
+ catch (error) {
137
+ throw new ConfigurationLoadError(`Failed to parse JSON from s3://${this._config.bucket}/${this._config.key}: ${error instanceof Error ? error.message : String(error)}`, this.getName(), error instanceof Error ? error : undefined);
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvbG9hZGVycy9zMy5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNuQixnQkFBZ0I7SUFDRyxPQUFPLENBQTJCO0lBQ3JELGdCQUFnQjtJQUNHLE9BQU8sQ0FBVztJQUVyQyxZQUFZLE1BQXNCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxXQUFXO1lBQ2pFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU07U0FDaEMsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUM7WUFDMUIsV0FBVyxFQUFFLHFCQUFxQixFQUFFO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxD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dENvbW1hbmQsIFMzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcclxuaW1wb3J0IHsgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgdHlwZSB7IENvbmZpZ0xvYWRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgdHlwZSB7IFMzTG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zMy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRW52RmlsZVBhcnNlciB9IGZyb20gJy4uL3V0aWxzL2Vudi1maWxlLXBhcnNlci51dGlsJztcclxuaW1wb3J0IHsgQVdTU2VydmljZUVycm9yLCBDb25maWd1cmF0aW9uTG9hZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcclxuXHJcbi8qKlxyXG4gKiBMb2FkZXIgdGhhdCByZWFkcyBjb25maWd1cmF0aW9uIGZyb20gUzMgYnVja2V0cy5cclxuICogU3VwcG9ydHMgSlNPTiBhbmQgLmVudiBmaWxlIGZvcm1hdHMgd2l0aCBhdXRvLWRldGVjdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiAvLyBMb2FkIEpTT04gY29uZmlnIGZyb20gUzNcclxuICogY29uc3QgbG9hZGVyID0gbmV3IFMzTG9hZGVyKHtcclxuICogICBidWNrZXQ6ICdteS1jb25maWctYnVja2V0JyxcclxuICogICBrZXk6ICdjb25maWcvYXBwLmpzb24nLFxyXG4gKiAgIGZvcm1hdDogJ2pzb24nXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBMb2FkIC5lbnYgZmlsZSBmcm9tIFMzIHdpdGggYXV0by1kZXRlY3Rpb25cclxuICogY29uc3QgbG9hZGVyID0gbmV3IFMzTG9hZGVyKHtcclxuICogICBidWNrZXQ6ICdteS1jb25maWctYnVja2V0JyxcclxuICogICBrZXk6ICdjb25maWcvLmVudidcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZS1lbnZpcm9ubWVudC1maWxlLmh0bWxcclxuICovXHJcbmV4cG9ydCBjbGFzcyBTM0xvYWRlciBpbXBsZW1lbnRzIENvbmZpZ0xvYWRlciB7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfY29uZmlnOiBSZXF1aXJlZDxTM0xvYWRlckNvbmZpZz47XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfY2xpZW50OiBTM0NsaWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBTM0xvYWRlckNvbmZpZykge1xyXG4gICAgdGhpcy5fY29uZmlnID0ge1xyXG4gICAgICBidWNrZXQ6IGNvbmZpZy5idWNrZXQsXHJcbiAgICAgIGtleTogY29uZmlnLmtleSxcclxuICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uIHx8IHByb2Nlc3MuZW52WydBV1NfUkVHSU9OJ10gfHwgJ3VzLWVhc3QtMScsXHJcbiAgICAgIGZvcm1hdDogY29uZmlnLmZvcm1hdCB8fCAnYXV0bycsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2NsaWVudCA9IG5ldyBTM0NsaWVudCh7XHJcbiAgICAgIGNyZWRlbnRpYWxzOiBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4oKSxcclxuICAgICAgcmVnaW9uOiB0aGlzLl9jb25maWcucmVnaW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXROYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYFMzTG9hZGVyKHMzOi8vJHt0aGlzLl9jb25maWcuYnVja2V0fS8ke3RoaXMuX2NvbmZpZy5rZXl9KWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgdGhpcyBsb2FkZXIgaXMgYXZhaWxhYmxlIGJ5IHZlcmlmeWluZyBBV1MgY3JlZGVudGlhbHMuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiBBV1MgY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIGFzeW5jIGlzQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LmNvbmZpZy5jcmVkZW50aWFscygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBTMy5cclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBjb25maWd1cmF0aW9uIGtleS12YWx1ZSBwYWlyc1xyXG4gICAqIEB0aHJvd3MgQVdTU2VydmljZUVycm9yIGlmIFMzIG9wZXJhdGlvbiBmYWlsc1xyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBjb250ZW50IGNhbm5vdCBiZSBwYXJzZWRcclxuICAgKi9cclxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0T2JqZWN0Q29tbWFuZCh7XHJcbiAgICAgICAgQnVja2V0OiB0aGlzLl9jb25maWcuYnVja2V0LFxyXG4gICAgICAgIEtleTogdGhpcy5fY29uZmlnLmtleSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2NsaWVudC5zZW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25zZS5Cb2R5KSB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UuQm9keS50cmFuc2Zvcm1Ub1N0cmluZygpO1xyXG5cclxuICAgICAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQudHJpbSgpID09PSAnJykge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ29uZmlndXJhdGlvbkxvYWRFcnJvcikge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnTm9TdWNoS2V5JyB8fCBlcnJvci5uYW1lID09PSAnTm9TdWNoQnVja2V0Jykge1xyXG4gICAgICAgICAgLy8gT2JqZWN0IG9yIGJ1Y2tldCBkb2Vzbid0IGV4aXN0IC0gcmV0dXJuIGVtcHR5IGNvbmZpZ1xyXG4gICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWQnKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgQVdTU2VydmljZUVycm9yKFxyXG4gICAgICAgICAgICBgQWNjZXNzIGRlbmllZCB3aGVuIHJldHJpZXZpbmcgczM6Ly8ke3RoaXMuX2NvbmZpZy5idWNrZXR9LyR7dGhpcy5fY29uZmlnLmtleX0uIENoZWNrIEFXUyBjcmVkZW50aWFscyBhbmQgcGVybWlzc2lvbnMuYCxcclxuICAgICAgICAgICAgJ1MzJyxcclxuICAgICAgICAgICAgJ0dldE9iamVjdCcsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRocm93IG5ldyBBV1NTZXJ2aWNlRXJyb3IoXHJcbiAgICAgICAgYEZhaWxlZCB0byByZXRyaWV2ZSBzMzovLyR7dGhpcy5fY29uZmlnLmJ1Y2tldH0vJHt0aGlzLl9jb25maWcua2V5fTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAnUzMnLFxyXG4gICAgICAgICdHZXRPYmplY3QnLFxyXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IHVuZGVmaW5lZCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGNvbnRlbnQgYmFzZWQgb24gZm9ybWF0IHNldHRpbmcgb3IgYXV0by1kZXRlY3Rpb24uXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHBhcnNlQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XHJcbiAgICBjb25zdCBmb3JtYXQgPSB0aGlzLl9jb25maWcuZm9ybWF0ID09PSAnYXV0bycgPyB0aGlzLmRldGVjdEZvcm1hdChjb250ZW50KSA6IHRoaXMuX2NvbmZpZy5mb3JtYXQ7XHJcblxyXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlSnNvbihjb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBFbnZGaWxlUGFyc2VyLnBhcnNlKGNvbnRlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZWN0IGNvbnRlbnQgZm9ybWF0IGJhc2VkIG9uIHN0cnVjdHVyZS5cclxuICAgKiBKU09OIGNvbnRlbnQgc3RhcnRzIHdpdGggJ3snIGFmdGVyIHRyaW1taW5nIHdoaXRlc3BhY2UuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGRldGVjdEZvcm1hdChjb250ZW50OiBzdHJpbmcpOiAnanNvbicgfCAnZW52JyB7XHJcbiAgICBjb25zdCB0cmltbWVkID0gY29udGVudC50cmltKCk7XHJcbiAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCd7JykpIHtcclxuICAgICAgcmV0dXJuICdqc29uJztcclxuICAgIH1cclxuICAgIHJldHVybiAnZW52JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIEpTT04gY29udGVudC5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcGFyc2VKc29uKGNvbnRlbnQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBub3QgYW4gb2JqZWN0LCB3cmFwIGl0XHJcbiAgICAgIHJldHVybiB7IENPTkZJR19WQUxVRTogcGFyc2VkIH07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkxvYWRFcnJvcihcclxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIEpTT04gZnJvbSBzMzovLyR7dGhpcy5fY29uZmlnLmJ1Y2tldH0vJHt0aGlzLl9jb25maWcua2V5fTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICB0aGlzLmdldE5hbWUoKSxcclxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==