@dyanet/nestjs-config-aws 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -43
  3. package/dist/cjs/aws-config-loader.js +57 -0
  4. package/dist/cjs/build-loaders.js +58 -0
  5. package/dist/cjs/config.module.js +138 -0
  6. package/dist/cjs/index.js +46 -0
  7. package/dist/cjs/interfaces/config-service.interface.js +11 -0
  8. package/dist/cjs/interfaces/default-schema.interface.js +63 -0
  9. package/dist/cjs/{nestjs-config-aws/src/interfaces → interfaces}/index.js +1 -1
  10. package/dist/cjs/interfaces/module-options.interface.js +3 -0
  11. package/dist/cjs/package.json +3 -0
  12. package/dist/cjs/services/config.service.js +142 -0
  13. package/dist/esm/aws-config-loader.js +54 -0
  14. package/dist/esm/build-loaders.js +55 -0
  15. package/dist/esm/config.module.js +135 -0
  16. package/dist/esm/index.js +18 -0
  17. package/dist/esm/interfaces/config-service.interface.js +7 -0
  18. package/dist/esm/interfaces/default-schema.interface.js +59 -0
  19. package/dist/esm/interfaces/index.js +8 -0
  20. package/dist/esm/interfaces/module-options.interface.js +2 -0
  21. package/dist/esm/package.json +3 -0
  22. package/dist/esm/services/config.service.js +139 -0
  23. package/dist/types/aws-config-loader.d.ts +74 -0
  24. package/dist/types/aws-config-loader.d.ts.map +1 -0
  25. package/dist/types/build-loaders.d.ts +30 -0
  26. package/dist/types/build-loaders.d.ts.map +1 -0
  27. package/dist/types/{nestjs-config-aws/src/config.module.d.ts → config.module.d.ts} +2 -8
  28. package/dist/types/config.module.d.ts.map +1 -0
  29. package/dist/types/index.d.ts +10 -0
  30. package/dist/types/index.d.ts.map +1 -0
  31. package/dist/types/interfaces/config-service.interface.d.ts.map +1 -0
  32. package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/default-schema.interface.d.ts +14 -14
  33. package/dist/types/interfaces/default-schema.interface.d.ts.map +1 -0
  34. package/dist/types/interfaces/index.d.ts.map +1 -0
  35. package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/module-options.interface.d.ts +22 -3
  36. package/dist/types/interfaces/module-options.interface.d.ts.map +1 -0
  37. package/dist/types/services/config.service.d.ts.map +1 -0
  38. package/package.json +12 -6
  39. package/dist/cjs/config-aws/src/config-manager.js +0 -366
  40. package/dist/cjs/config-aws/src/errors/index.js +0 -77
  41. package/dist/cjs/config-aws/src/index.js +0 -37
  42. package/dist/cjs/config-aws/src/interfaces/config-loader.interface.js +0 -3
  43. package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +0 -3
  44. package/dist/cjs/config-aws/src/interfaces/env-file-loader.interface.js +0 -3
  45. package/dist/cjs/config-aws/src/interfaces/environment-loader.interface.js +0 -3
  46. package/dist/cjs/config-aws/src/interfaces/s3-loader.interface.js +0 -3
  47. package/dist/cjs/config-aws/src/interfaces/secrets-manager-loader.interface.js +0 -3
  48. package/dist/cjs/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +0 -3
  49. package/dist/cjs/config-aws/src/loaders/env-file.loader.js +0 -169
  50. package/dist/cjs/config-aws/src/loaders/environment.loader.js +0 -85
  51. package/dist/cjs/config-aws/src/loaders/s3.loader.js +0 -145
  52. package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +0 -169
  53. package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +0 -199
  54. package/dist/cjs/config-aws/src/utils/env-file-parser.util.js +0 -98
  55. package/dist/cjs/config-aws/src/utils/validation.util.js +0 -116
  56. package/dist/cjs/nestjs-config-aws/src/config.module.js +0 -175
  57. package/dist/cjs/nestjs-config-aws/src/index.js +0 -61
  58. package/dist/cjs/nestjs-config-aws/src/integration/index.js +0 -23
  59. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +0 -3
  60. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +0 -3
  61. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/index.js +0 -26
  62. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +0 -3
  63. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +0 -3
  64. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +0 -73
  65. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +0 -3
  66. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +0 -4
  67. package/dist/cjs/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +0 -52
  68. package/dist/cjs/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +0 -124
  69. package/dist/cjs/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +0 -592
  70. package/dist/cjs/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +0 -385
  71. package/dist/cjs/nestjs-config-aws/src/integration/providers/index.js +0 -20
  72. package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +0 -366
  73. package/dist/cjs/nestjs-config-aws/src/integration/services/error-handler.service.js +0 -267
  74. package/dist/cjs/nestjs-config-aws/src/integration/services/factory-registration.service.js +0 -517
  75. package/dist/cjs/nestjs-config-aws/src/integration/services/index.js +0 -26
  76. package/dist/cjs/nestjs-config-aws/src/integration/services/integration-state.service.js +0 -81
  77. package/dist/cjs/nestjs-config-aws/src/integration/services/namespace-handler.service.js +0 -465
  78. package/dist/cjs/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +0 -318
  79. package/dist/cjs/nestjs-config-aws/src/integration/services/precedence-handler.service.js +0 -292
  80. package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +0 -595
  81. package/dist/cjs/nestjs-config-aws/src/integration/utils/config-integration.util.js +0 -283
  82. package/dist/cjs/nestjs-config-aws/src/integration/utils/index.js +0 -19
  83. package/dist/cjs/nestjs-config-aws/src/interfaces/config-service.interface.js +0 -11
  84. package/dist/cjs/nestjs-config-aws/src/interfaces/default-schema.interface.js +0 -63
  85. package/dist/cjs/nestjs-config-aws/src/interfaces/module-options.interface.js +0 -3
  86. package/dist/cjs/nestjs-config-aws/src/services/config.service.js +0 -142
  87. package/dist/esm/config-aws/src/config-manager.js +0 -362
  88. package/dist/esm/config-aws/src/errors/index.js +0 -69
  89. package/dist/esm/config-aws/src/index.js +0 -21
  90. package/dist/esm/config-aws/src/interfaces/config-loader.interface.js +0 -2
  91. package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +0 -2
  92. package/dist/esm/config-aws/src/interfaces/env-file-loader.interface.js +0 -2
  93. package/dist/esm/config-aws/src/interfaces/environment-loader.interface.js +0 -2
  94. package/dist/esm/config-aws/src/interfaces/s3-loader.interface.js +0 -2
  95. package/dist/esm/config-aws/src/interfaces/secrets-manager-loader.interface.js +0 -2
  96. package/dist/esm/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +0 -2
  97. package/dist/esm/config-aws/src/loaders/env-file.loader.js +0 -132
  98. package/dist/esm/config-aws/src/loaders/environment.loader.js +0 -81
  99. package/dist/esm/config-aws/src/loaders/s3.loader.js +0 -141
  100. package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +0 -165
  101. package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +0 -195
  102. package/dist/esm/config-aws/src/utils/env-file-parser.util.js +0 -94
  103. package/dist/esm/config-aws/src/utils/validation.util.js +0 -112
  104. package/dist/esm/nestjs-config-aws/src/config.module.js +0 -172
  105. package/dist/esm/nestjs-config-aws/src/index.js +0 -23
  106. package/dist/esm/nestjs-config-aws/src/integration/index.js +0 -7
  107. package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +0 -2
  108. package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +0 -2
  109. package/dist/esm/nestjs-config-aws/src/integration/interfaces/index.js +0 -10
  110. package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +0 -2
  111. package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +0 -2
  112. package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +0 -64
  113. package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +0 -2
  114. package/dist/esm/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +0 -3
  115. package/dist/esm/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +0 -44
  116. package/dist/esm/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +0 -121
  117. package/dist/esm/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +0 -589
  118. package/dist/esm/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +0 -382
  119. package/dist/esm/nestjs-config-aws/src/integration/providers/index.js +0 -4
  120. package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +0 -363
  121. package/dist/esm/nestjs-config-aws/src/integration/services/error-handler.service.js +0 -264
  122. package/dist/esm/nestjs-config-aws/src/integration/services/factory-registration.service.js +0 -514
  123. package/dist/esm/nestjs-config-aws/src/integration/services/index.js +0 -10
  124. package/dist/esm/nestjs-config-aws/src/integration/services/integration-state.service.js +0 -78
  125. package/dist/esm/nestjs-config-aws/src/integration/services/namespace-handler.service.js +0 -462
  126. package/dist/esm/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +0 -315
  127. package/dist/esm/nestjs-config-aws/src/integration/services/precedence-handler.service.js +0 -289
  128. package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +0 -589
  129. package/dist/esm/nestjs-config-aws/src/integration/utils/config-integration.util.js +0 -240
  130. package/dist/esm/nestjs-config-aws/src/integration/utils/index.js +0 -3
  131. package/dist/esm/nestjs-config-aws/src/interfaces/config-service.interface.js +0 -7
  132. package/dist/esm/nestjs-config-aws/src/interfaces/default-schema.interface.js +0 -59
  133. package/dist/esm/nestjs-config-aws/src/interfaces/index.js +0 -8
  134. package/dist/esm/nestjs-config-aws/src/interfaces/module-options.interface.js +0 -2
  135. package/dist/esm/nestjs-config-aws/src/services/config.service.js +0 -139
  136. package/dist/types/config-aws/src/config-manager.d.ts +0 -119
  137. package/dist/types/config-aws/src/config-manager.d.ts.map +0 -1
  138. package/dist/types/config-aws/src/errors/index.d.ts +0 -43
  139. package/dist/types/config-aws/src/errors/index.d.ts.map +0 -1
  140. package/dist/types/config-aws/src/index.d.ts +0 -24
  141. package/dist/types/config-aws/src/index.d.ts.map +0 -1
  142. package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts +0 -33
  143. package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts.map +0 -1
  144. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +0 -86
  145. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +0 -1
  146. package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts +0 -12
  147. package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts.map +0 -1
  148. package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts +0 -10
  149. package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts.map +0 -1
  150. package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts +0 -14
  151. package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts.map +0 -1
  152. package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts +0 -12
  153. package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts.map +0 -1
  154. package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts +0 -14
  155. package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts.map +0 -1
  156. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +0 -69
  157. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +0 -1
  158. package/dist/types/config-aws/src/loaders/environment.loader.d.ts +0 -46
  159. package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +0 -1
  160. package/dist/types/config-aws/src/loaders/s3.loader.d.ts +0 -62
  161. package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +0 -1
  162. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +0 -68
  163. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +0 -1
  164. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +0 -78
  165. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +0 -1
  166. package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts +0 -45
  167. package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts.map +0 -1
  168. package/dist/types/config-aws/src/utils/validation.util.d.ts +0 -53
  169. package/dist/types/config-aws/src/utils/validation.util.d.ts.map +0 -1
  170. package/dist/types/nestjs-config-aws/src/config.module.d.ts.map +0 -1
  171. package/dist/types/nestjs-config-aws/src/index.d.ts +0 -11
  172. package/dist/types/nestjs-config-aws/src/index.d.ts.map +0 -1
  173. package/dist/types/nestjs-config-aws/src/integration/index.d.ts +0 -6
  174. package/dist/types/nestjs-config-aws/src/integration/index.d.ts.map +0 -1
  175. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts +0 -71
  176. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts.map +0 -1
  177. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts +0 -24
  178. package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts.map +0 -1
  179. package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts +0 -9
  180. package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts.map +0 -1
  181. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts +0 -66
  182. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts.map +0 -1
  183. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts +0 -17
  184. package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts.map +0 -1
  185. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts +0 -332
  186. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +0 -1
  187. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts +0 -259
  188. package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts.map +0 -1
  189. package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts +0 -209
  190. package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts.map +0 -1
  191. package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts +0 -249
  192. package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts.map +0 -1
  193. package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts +0 -36
  194. package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts.map +0 -1
  195. package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts +0 -134
  196. package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts.map +0 -1
  197. package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts +0 -119
  198. package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts.map +0 -1
  199. package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts +0 -3
  200. package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts.map +0 -1
  201. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts +0 -84
  202. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +0 -1
  203. package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts +0 -84
  204. package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts.map +0 -1
  205. package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts +0 -158
  206. package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts.map +0 -1
  207. package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts +0 -9
  208. package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts.map +0 -1
  209. package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts +0 -41
  210. package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts.map +0 -1
  211. package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts +0 -192
  212. package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts.map +0 -1
  213. package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts +0 -87
  214. package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts.map +0 -1
  215. package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts +0 -103
  216. package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts.map +0 -1
  217. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts +0 -222
  218. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +0 -1
  219. package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts +0 -81
  220. package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts.map +0 -1
  221. package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts +0 -2
  222. package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts.map +0 -1
  223. package/dist/types/nestjs-config-aws/src/interfaces/config-service.interface.d.ts.map +0 -1
  224. package/dist/types/nestjs-config-aws/src/interfaces/default-schema.interface.d.ts.map +0 -1
  225. package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts.map +0 -1
  226. package/dist/types/nestjs-config-aws/src/interfaces/module-options.interface.d.ts.map +0 -1
  227. package/dist/types/nestjs-config-aws/src/services/config.service.d.ts.map +0 -1
  228. /package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/config-service.interface.d.ts +0 -0
  229. /package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/index.d.ts +0 -0
  230. /package/dist/types/{nestjs-config-aws/src/services → services}/config.service.d.ts +0 -0
@@ -1,362 +0,0 @@
1
- import { ConfigurationError, ConfigurationLoadError, ValidationError } from './errors';
2
- /**
3
- * Default console logger implementation
4
- */
5
- const defaultLogger = {
6
- log: (message) => console.log(message),
7
- error: (message) => console.error(message),
8
- warn: (message) => console.warn(message),
9
- debug: (message) => console.debug(message),
10
- };
11
- /**
12
- * Default sensitive keys that should always be masked
13
- */
14
- const DEFAULT_SENSITIVE_KEYS = ['password', 'secret', 'key', 'token', 'credential', 'api_key', 'apikey'];
15
- /**
16
- * Default verbose options
17
- */
18
- const DEFAULT_VERBOSE_OPTIONS = {
19
- logKeys: true,
20
- logValues: false,
21
- logOverrides: true,
22
- logTiming: true,
23
- maskValues: true,
24
- sensitiveKeys: DEFAULT_SENSITIVE_KEYS,
25
- };
26
- /**
27
- * Predefined precedence orders for common strategies
28
- * Higher index = higher priority (later loaders override earlier ones)
29
- */
30
- const PRECEDENCE_ORDERS = {
31
- // AWS wins: env -> envFile -> s3 -> secretsManager -> ssm
32
- 'aws-first': [
33
- 'EnvironmentLoader',
34
- 'EnvFileLoader',
35
- 'S3Loader',
36
- 'SecretsManagerLoader',
37
- 'SSMParameterStoreLoader',
38
- ],
39
- // Local wins: ssm -> secretsManager -> s3 -> envFile -> env
40
- 'local-first': [
41
- 'SSMParameterStoreLoader',
42
- 'SecretsManagerLoader',
43
- 'S3Loader',
44
- 'EnvFileLoader',
45
- 'EnvironmentLoader',
46
- ],
47
- };
48
- /**
49
- * ConfigManager orchestrates loading configuration from multiple sources
50
- * with configurable precedence and validation.
51
- *
52
- * @example
53
- * ```typescript
54
- * import { ConfigManager, EnvironmentLoader, SecretsManagerLoader } from '@dyanet/config-aws';
55
- * import { z } from 'zod';
56
- *
57
- * const schema = z.object({
58
- * DATABASE_URL: z.string(),
59
- * API_KEY: z.string(),
60
- * PORT: z.coerce.number().default(3000),
61
- * });
62
- *
63
- * const manager = new ConfigManager({
64
- * loaders: [
65
- * new EnvironmentLoader({ prefix: 'APP_' }),
66
- * new SecretsManagerLoader({ secretName: '/my-app/config' }),
67
- * ],
68
- * schema,
69
- * precedence: 'aws-first',
70
- * verbose: true,
71
- * });
72
- *
73
- * await manager.load();
74
- * const dbUrl = manager.get('DATABASE_URL');
75
- * ```
76
- */
77
- export class ConfigManager {
78
- /** @internal */
79
- _options;
80
- /** @internal */
81
- _logger;
82
- /** @internal */
83
- _verboseOptions;
84
- config = null;
85
- loadResult = null;
86
- loaded = false;
87
- constructor(options = {}) {
88
- this._options = {
89
- loaders: options.loaders ?? [],
90
- schema: options.schema,
91
- precedence: options.precedence ?? 'aws-first',
92
- validateOnLoad: options.validateOnLoad ?? true,
93
- enableLogging: options.enableLogging ?? false,
94
- logger: options.logger,
95
- verbose: options.verbose,
96
- };
97
- this._logger = options.logger ?? defaultLogger;
98
- this._verboseOptions = this.resolveVerboseOptions(options.verbose);
99
- }
100
- /**
101
- * Resolve verbose options from boolean or object
102
- */
103
- resolveVerboseOptions(verbose) {
104
- if (verbose === undefined || verbose === false) {
105
- return null;
106
- }
107
- if (verbose === true) {
108
- return { ...DEFAULT_VERBOSE_OPTIONS };
109
- }
110
- return {
111
- logKeys: verbose.logKeys ?? DEFAULT_VERBOSE_OPTIONS.logKeys,
112
- logValues: verbose.logValues ?? DEFAULT_VERBOSE_OPTIONS.logValues,
113
- logOverrides: verbose.logOverrides ?? DEFAULT_VERBOSE_OPTIONS.logOverrides,
114
- logTiming: verbose.logTiming ?? DEFAULT_VERBOSE_OPTIONS.logTiming,
115
- maskValues: verbose.maskValues ?? DEFAULT_VERBOSE_OPTIONS.maskValues,
116
- sensitiveKeys: verbose.sensitiveKeys ?? DEFAULT_VERBOSE_OPTIONS.sensitiveKeys,
117
- };
118
- }
119
- /**
120
- * Log a message if logging is enabled
121
- */
122
- log(message) {
123
- if (this._options.enableLogging || this._verboseOptions) {
124
- this._logger.log(`[config-aws] ${message}`);
125
- }
126
- }
127
- /**
128
- * Mask a value for logging
129
- */
130
- maskValue(key, value) {
131
- if (!this._verboseOptions?.logValues) {
132
- return '';
133
- }
134
- const strValue = String(value);
135
- const lowerKey = key.toLowerCase();
136
- // Check if key contains any sensitive patterns
137
- const isSensitive = this._verboseOptions.sensitiveKeys.some((pattern) => lowerKey.includes(pattern.toLowerCase()));
138
- if (this._verboseOptions.maskValues || isSensitive) {
139
- if (strValue.length <= 4) {
140
- return '****';
141
- }
142
- return `${strValue.slice(0, 2)}**...${strValue.slice(-2)}`;
143
- }
144
- return strValue;
145
- }
146
- /**
147
- * Get the loading order for loaders based on precedence strategy.
148
- * Returns loaders sorted by priority (lower priority first, so higher priority loads last and wins).
149
- */
150
- getLoadOrder() {
151
- const { loaders, precedence } = this._options;
152
- if (!loaders || loaders.length === 0) {
153
- return [];
154
- }
155
- // If precedence is a custom array, use it
156
- if (Array.isArray(precedence)) {
157
- return this.sortByCustomPrecedence(loaders, precedence);
158
- }
159
- // Use predefined precedence order
160
- const order = PRECEDENCE_ORDERS[precedence];
161
- return this.sortByPredefinedOrder(loaders, order);
162
- }
163
- /**
164
- * Sort loaders by custom precedence configuration
165
- */
166
- sortByCustomPrecedence(loaders, precedence) {
167
- const priorityMap = new Map();
168
- for (const p of precedence) {
169
- priorityMap.set(p.loader, p.priority);
170
- }
171
- // Sort by priority (lower first, so higher priority loads last and wins)
172
- return [...loaders].sort((a, b) => {
173
- const priorityA = priorityMap.get(a.getName()) ?? 0;
174
- const priorityB = priorityMap.get(b.getName()) ?? 0;
175
- return priorityA - priorityB;
176
- });
177
- }
178
- /**
179
- * Sort loaders by predefined order
180
- */
181
- sortByPredefinedOrder(loaders, order) {
182
- const orderMap = new Map();
183
- order.forEach((name, index) => orderMap.set(name, index));
184
- // Sort by order index (lower first, so higher index loads last and wins)
185
- return [...loaders].sort((a, b) => {
186
- const indexA = orderMap.get(a.getName()) ?? -1;
187
- const indexB = orderMap.get(b.getName()) ?? -1;
188
- return indexA - indexB;
189
- });
190
- }
191
- /**
192
- * Load configuration from all configured loaders.
193
- * Loaders are executed in precedence order, with later loaders overriding earlier ones.
194
- */
195
- async load() {
196
- const startTime = Date.now();
197
- const sources = [];
198
- let mergedConfig = {};
199
- const keyOrigins = new Map(); // Track which loader set each key
200
- this.log('Loading configuration...');
201
- const orderedLoaders = this.getLoadOrder();
202
- for (const loader of orderedLoaders) {
203
- const loaderName = loader.getName();
204
- const loaderStartTime = Date.now();
205
- try {
206
- // Check if loader is available
207
- const isAvailable = await loader.isAvailable();
208
- if (!isAvailable) {
209
- if (this._verboseOptions?.logTiming) {
210
- this.log(`${loaderName}: skipped (not available)`);
211
- }
212
- continue;
213
- }
214
- // Load configuration from this loader
215
- const loaderConfig = await loader.load();
216
- const keysLoaded = Object.keys(loaderConfig);
217
- const duration = Date.now() - loaderStartTime;
218
- // Track source info
219
- sources.push({
220
- loader: loaderName,
221
- keysLoaded,
222
- duration,
223
- });
224
- // Log timing and keys
225
- if (this._verboseOptions?.logTiming) {
226
- this.log(`${loaderName}: loaded ${keysLoaded.length} keys in ${duration}ms`);
227
- }
228
- // Log individual keys and track overrides
229
- for (const key of keysLoaded) {
230
- const previousLoader = keyOrigins.get(key);
231
- const isOverride = previousLoader !== undefined;
232
- if (this._verboseOptions?.logKeys) {
233
- let logLine = ` - ${key}`;
234
- if (this._verboseOptions.logValues) {
235
- logLine += ` = "${this.maskValue(key, loaderConfig[key])}"`;
236
- }
237
- if (isOverride && this._verboseOptions.logOverrides) {
238
- logLine += ` (overrides ${previousLoader})`;
239
- }
240
- this.log(logLine);
241
- }
242
- keyOrigins.set(key, loaderName);
243
- }
244
- // Merge configuration (later loaders override earlier ones)
245
- mergedConfig = { ...mergedConfig, ...loaderConfig };
246
- }
247
- catch (error) {
248
- throw new ConfigurationLoadError(`Failed to load configuration from ${loaderName}: ${error instanceof Error ? error.message : String(error)}`, loaderName, error instanceof Error ? error : undefined);
249
- }
250
- }
251
- // Count overrides
252
- const totalKeys = Object.keys(mergedConfig).length;
253
- const totalDuration = Date.now() - startTime;
254
- const overrideCount = sources.reduce((acc, s) => acc + s.keysLoaded.length, 0) - totalKeys;
255
- if (this._verboseOptions?.logTiming) {
256
- this.log(`Configuration loaded: ${totalKeys} total keys, ${overrideCount} overrides, ${totalDuration}ms total`);
257
- }
258
- // Validate if schema is provided and validation is enabled
259
- if (this._options.schema && this._options.validateOnLoad) {
260
- const result = this._options.schema.safeParse(mergedConfig);
261
- if (!result.success) {
262
- const zodError = result.error;
263
- throw new ValidationError(`Configuration validation failed: ${zodError.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')}`, zodError.errors, undefined);
264
- }
265
- this.config = result.data;
266
- }
267
- else {
268
- this.config = mergedConfig;
269
- }
270
- this.loadResult = {
271
- config: this.config,
272
- sources,
273
- loadedAt: new Date(),
274
- };
275
- this.loaded = true;
276
- }
277
- /**
278
- * Get a specific configuration value by key.
279
- * @param key The configuration key
280
- * @returns The configuration value
281
- * @throws ConfigurationError if configuration is not loaded
282
- */
283
- get(key) {
284
- if (!this.loaded || this.config === null) {
285
- throw new ConfigurationError('Configuration not loaded. Call load() first.');
286
- }
287
- // Non-null assertion is safe here because we've checked this.config !== null above
288
- return this.config[key];
289
- }
290
- /**
291
- * Get all configuration values.
292
- * @returns The complete configuration object
293
- * @throws ConfigurationError if configuration is not loaded
294
- */
295
- getAll() {
296
- if (!this.loaded || this.config === null) {
297
- throw new ConfigurationError('Configuration not loaded. Call load() first.');
298
- }
299
- return this.config;
300
- }
301
- /**
302
- * Check if configuration has been loaded.
303
- * @returns true if configuration is loaded
304
- */
305
- isLoaded() {
306
- return this.loaded;
307
- }
308
- /**
309
- * Get the current application environment.
310
- * @returns The APP_ENV value or 'development' as default
311
- */
312
- getAppEnv() {
313
- return process.env['APP_ENV'] ?? 'development';
314
- }
315
- /**
316
- * Get the load result with source information.
317
- * @returns The load result or null if not loaded
318
- */
319
- getLoadResult() {
320
- return this.loadResult;
321
- }
322
- /**
323
- * Serialize the current configuration to JSON string.
324
- * @returns JSON string representation of the configuration
325
- * @throws ConfigurationError if configuration is not loaded
326
- */
327
- serialize() {
328
- if (!this.loaded || this.config === null) {
329
- throw new ConfigurationError('Configuration not loaded. Call load() first.');
330
- }
331
- return JSON.stringify(this.config);
332
- }
333
- /**
334
- * Create a new ConfigManager with configuration loaded from a JSON string.
335
- * This is useful for restoring configuration from a serialized state.
336
- * @param json JSON string to deserialize
337
- * @param options Optional ConfigManager options (schema will be used for validation)
338
- * @returns A new ConfigManager instance with the deserialized configuration
339
- */
340
- static deserialize(json, options = {}) {
341
- const parsed = JSON.parse(json);
342
- // Validate if schema is provided
343
- if (options.schema) {
344
- const result = options.schema.safeParse(parsed);
345
- if (!result.success) {
346
- const zodError = result.error;
347
- throw new ValidationError(`Deserialization validation failed: ${zodError.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')}`, zodError.errors, undefined);
348
- }
349
- }
350
- // Create a new ConfigManager and set its internal state
351
- const manager = new ConfigManager(options);
352
- manager.config = parsed;
353
- manager.loaded = true;
354
- manager.loadResult = {
355
- config: parsed,
356
- sources: [{ loader: 'deserialize', keysLoaded: Object.keys(parsed), duration: 0 }],
357
- loadedAt: new Date(),
358
- };
359
- return manager;
360
- }
361
- }
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQVc7SUFDNUIsR0FBRyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUM5QyxLQUFLLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2xELElBQUksRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDaEQsS0FBSyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztDQUNuRCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFekc7O0dBRUc7QUFDSCxNQUFNLHVCQUF1QixHQUE2QjtJQUN4RCxPQUFPLEVBQUUsSUFBSTtJQUNiLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsVUFBVSxFQUFFLElBQUk7SUFDaEIsYUFBYSxFQUFFLHNCQUFzQjtDQUN0QyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBa0Q7SUFDdkUsMERBQTBEO0lBQzFELFdBQVcsRUFBRTtRQUNYLG1CQUFtQjtRQUNuQixl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QXNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUNsSCxRQUFRLENBQUMsTUFBTSxFQUNmLFNBQVMsQ0FDVixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUksT0FBTyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFXLENBQUM7UUFDN0IsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxDQUFDLFVBQVUsR0FBRztZQUNuQixNQUFNLEVBQUUsTUFBVztZQUNuQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xGLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtTQUNyQixDQUFDO1FBRUYsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBab2RFcnJvciB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIENvbmZpZ01hbmFnZXJPcHRpb25zLFxyXG4gIENvbmZpZ0xvYWRSZXN1bHQsXHJcbiAgQ29uZmlnU291cmNlSW5mbyxcclxuICBMb2dnZXIsXHJcbiAgTG9hZGVyUHJlY2VkZW5jZSxcclxuICBWZXJib3NlT3B0aW9ucyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBDb25maWd1cmF0aW9uTG9hZEVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBjb25zb2xlIGxvZ2dlciBpbXBsZW1lbnRhdGlvblxyXG4gKi9cclxuY29uc3QgZGVmYXVsdExvZ2dlcjogTG9nZ2VyID0ge1xyXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS5sb2cobWVzc2FnZSksXHJcbiAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSksXHJcbiAgd2FybjogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UpLFxyXG4gIGRlYnVnOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UpLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgc2Vuc2l0aXZlIGtleXMgdGhhdCBzaG91bGQgYWx3YXlzIGJlIG1hc2tlZFxyXG4gKi9cclxuY29uc3QgREVGQVVMVF9TRU5TSVRJVkVfS0VZUyA9IFsncGFzc3dvcmQnLCAnc2VjcmV0JywgJ2tleScsICd0b2tlbicsICdjcmVkZW50aWFsJywgJ2FwaV9rZXknLCAnYXBpa2V5J107XHJcblxyXG4vKipcclxuICogRGVmYXVsdCB2ZXJib3NlIG9wdGlvbnNcclxuICovXHJcbmNvbnN0IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gPSB7XHJcbiAgbG9nS2V5czogdHJ1ZSxcclxuICBsb2dWYWx1ZXM6IGZhbHNlLFxyXG4gIGxvZ092ZXJyaWRlczogdHJ1ZSxcclxuICBsb2dUaW1pbmc6IHRydWUsXHJcbiAgbWFza1ZhbHVlczogdHJ1ZSxcclxuICBzZW5zaXRpdmVLZXlzOiBERUZBVUxUX1NFTlNJVElWRV9LRVlTLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFByZWRlZmluZWQgcHJlY2VkZW5jZSBvcmRlcnMgZm9yIGNvbW1vbiBzdHJhdGVnaWVzXHJcbiAqIEhpZ2hlciBpbmRleCA9IGhpZ2hlciBwcmlvcml0eSAobGF0ZXIgbG9hZGVycyBvdmVycmlkZSBlYXJsaWVyIG9uZXMpXHJcbiAqL1xyXG5jb25zdCBQUkVDRURFTkNFX09SREVSUzogUmVjb3JkPCdhd3MtZmlyc3QnIHwgJ2xvY2FsLWZpcnN0Jywgc3RyaW5nW10+ID0ge1xyXG4gIC8vIEFXUyB3aW5zOiBlbnYgLT4gZW52RmlsZSAtPiBzMyAtPiBzZWNyZXRzTWFuYWdlciAtPiBzc21cclxuICAnYXdzLWZpcnN0JzogW1xyXG4gICAgJ0Vudmlyb25tZW50TG9hZGVyJyxcclxuICAgICdFbnZGaWxlTG9hZGVyJyxcclxuICAgICdTM0xvYWRlcicsXHJcbiAgICAnU2VjcmV0c01hbmFnZXJMb2FkZXInLFxyXG4gICAgJ1NTTVBhcmFtZXRlclN0b3JlTG9hZGVyJyxcclxuICBdLFxyXG4gIC8vIExvY2FsIHdpbnM6IHNzbSAtPiBzZWNyZXRzTWFuYWdlciAtPiBzMyAtPiBlbnZGaWxlIC0+IGVudlxyXG4gICdsb2NhbC1maXJzdCc6IFtcclxuICAgICdTU01QYXJhbWV0ZXJTdG9yZUxvYWRlcicsXHJcbiAgICAnU2VjcmV0c01hbmFnZXJMb2FkZXInLFxyXG4gICAgJ1MzTG9hZGVyJyxcclxuICAgICdFbnZGaWxlTG9hZGVyJyxcclxuICAgICdFbnZpcm9ubWVudExvYWRlcicsXHJcbiAgXSxcclxufTtcclxuXHJcblxyXG4vKipcclxuICogQ29uZmlnTWFuYWdlciBvcmNoZXN0cmF0ZXMgbG9hZGluZyBjb25maWd1cmF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlc1xyXG4gKiB3aXRoIGNvbmZpZ3VyYWJsZSBwcmVjZWRlbmNlIGFuZCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IENvbmZpZ01hbmFnZXIsIEVudmlyb25tZW50TG9hZGVyLCBTZWNyZXRzTWFuYWdlckxvYWRlciB9IGZyb20gJ0BkeWFuZXQvY29uZmlnLWF3cyc7XHJcbiAqIGltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xyXG4gKlxyXG4gKiBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XHJcbiAqICAgREFUQUJBU0VfVVJMOiB6LnN0cmluZygpLFxyXG4gKiAgIEFQSV9LRVk6IHouc3RyaW5nKCksXHJcbiAqICAgUE9SVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDAwKSxcclxuICogfSk7XHJcbiAqXHJcbiAqIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcih7XHJcbiAqICAgbG9hZGVyczogW1xyXG4gKiAgICAgbmV3IEVudmlyb25tZW50TG9hZGVyKHsgcHJlZml4OiAnQVBQXycgfSksXHJcbiAqICAgICBuZXcgU2VjcmV0c01hbmFnZXJMb2FkZXIoeyBzZWNyZXROYW1lOiAnL215LWFwcC9jb25maWcnIH0pLFxyXG4gKiAgIF0sXHJcbiAqICAgc2NoZW1hLFxyXG4gKiAgIHByZWNlZGVuY2U6ICdhd3MtZmlyc3QnLFxyXG4gKiAgIHZlcmJvc2U6IHRydWUsXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBhd2FpdCBtYW5hZ2VyLmxvYWQoKTtcclxuICogY29uc3QgZGJVcmwgPSBtYW5hZ2VyLmdldCgnREFUQUJBU0VfVVJMJyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ01hbmFnZXI8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogUmVxdWlyZWQ8T21pdDxDb25maWdNYW5hZ2VyT3B0aW9uczxUPiwgJ3NjaGVtYScgfCAnbG9nZ2VyJyB8ICd2ZXJib3NlJz4+ICYge1xyXG4gICAgc2NoZW1hPzogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD5bJ3NjaGVtYSddO1xyXG4gICAgbG9nZ2VyPzogTG9nZ2VyO1xyXG4gICAgdmVyYm9zZT86IFZlcmJvc2VPcHRpb25zIHwgYm9vbGVhbjtcclxuICB9O1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xvZ2dlcjogTG9nZ2VyO1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZlcmJvc2VPcHRpb25zOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIGNvbmZpZzogVCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZFJlc3VsdDogQ29uZmlnTG9hZFJlc3VsdDxUPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+ID0ge30pIHtcclxuICAgIHRoaXMuX29wdGlvbnMgPSB7XHJcbiAgICAgIGxvYWRlcnM6IG9wdGlvbnMubG9hZGVycyA/PyBbXSxcclxuICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYSxcclxuICAgICAgcHJlY2VkZW5jZTogb3B0aW9ucy5wcmVjZWRlbmNlID8/ICdhd3MtZmlyc3QnLFxyXG4gICAgICB2YWxpZGF0ZU9uTG9hZDogb3B0aW9ucy52YWxpZGF0ZU9uTG9hZCA/PyB0cnVlLFxyXG4gICAgICBlbmFibGVMb2dnaW5nOiBvcHRpb25zLmVuYWJsZUxvZ2dpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIsXHJcbiAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9sb2dnZXIgPSBvcHRpb25zLmxvZ2dlciA/PyBkZWZhdWx0TG9nZ2VyO1xyXG4gICAgdGhpcy5fdmVyYm9zZU9wdGlvbnMgPSB0aGlzLnJlc29sdmVWZXJib3NlT3B0aW9ucyhvcHRpb25zLnZlcmJvc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZSB2ZXJib3NlIG9wdGlvbnMgZnJvbSBib29sZWFuIG9yIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzb2x2ZVZlcmJvc2VPcHRpb25zKHZlcmJvc2U/OiBWZXJib3NlT3B0aW9ucyB8IGJvb2xlYW4pOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gfCBudWxsIHtcclxuICAgIGlmICh2ZXJib3NlID09PSB1bmRlZmluZWQgfHwgdmVyYm9zZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyYm9zZSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4geyAuLi5ERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUyB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbG9nS2V5czogdmVyYm9zZS5sb2dLZXlzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ0tleXMsXHJcbiAgICAgIGxvZ1ZhbHVlczogdmVyYm9zZS5sb2dWYWx1ZXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nVmFsdWVzLFxyXG4gICAgICBsb2dPdmVycmlkZXM6IHZlcmJvc2UubG9nT3ZlcnJpZGVzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ092ZXJyaWRlcyxcclxuICAgICAgbG9nVGltaW5nOiB2ZXJib3NlLmxvZ1RpbWluZyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5sb2dUaW1pbmcsXHJcbiAgICAgIG1hc2tWYWx1ZXM6IHZlcmJvc2UubWFza1ZhbHVlcyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5tYXNrVmFsdWVzLFxyXG4gICAgICBzZW5zaXRpdmVLZXlzOiB2ZXJib3NlLnNlbnNpdGl2ZUtleXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMuc2Vuc2l0aXZlS2V5cyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2cgYSBtZXNzYWdlIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuZW5hYmxlTG9nZ2luZyB8fCB0aGlzLl92ZXJib3NlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLl9sb2dnZXIubG9nKGBbY29uZmlnLWF3c10gJHttZXNzYWdlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFzayBhIHZhbHVlIGZvciBsb2dnaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXNrVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1ZhbHVlcykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RyVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBrZXkgY29udGFpbnMgYW55IHNlbnNpdGl2ZSBwYXR0ZXJuc1xyXG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSB0aGlzLl92ZXJib3NlT3B0aW9ucy5zZW5zaXRpdmVLZXlzLnNvbWUoXHJcbiAgICAgIChwYXR0ZXJuKSA9PiBsb3dlcktleS5pbmNsdWRlcyhwYXR0ZXJuLnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucy5tYXNrVmFsdWVzIHx8IGlzU2Vuc2l0aXZlKSB7XHJcbiAgICAgIGlmIChzdHJWYWx1ZS5sZW5ndGggPD0gNCkge1xyXG4gICAgICAgIHJldHVybiAnKioqKic7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGAke3N0clZhbHVlLnNsaWNlKDAsIDIpfSoqLi4uJHtzdHJWYWx1ZS5zbGljZSgtMil9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyVmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsb2FkaW5nIG9yZGVyIGZvciBsb2FkZXJzIGJhc2VkIG9uIHByZWNlZGVuY2Ugc3RyYXRlZ3kuXHJcbiAgICogUmV0dXJucyBsb2FkZXJzIHNvcnRlZCBieSBwcmlvcml0eSAobG93ZXIgcHJpb3JpdHkgZmlyc3QsIHNvIGhpZ2hlciBwcmlvcml0eSBsb2FkcyBsYXN0IGFuZCB3aW5zKS5cclxuICAgKi9cclxuICBwcml2YXRlIGdldExvYWRPcmRlcigpOiBDb25maWdMb2FkZXJbXSB7XHJcbiAgICBjb25zdCB7IGxvYWRlcnMsIHByZWNlZGVuY2UgfSA9IHRoaXMuX29wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFsb2FkZXJzIHx8IGxvYWRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBwcmVjZWRlbmNlIGlzIGEgY3VzdG9tIGFycmF5LCB1c2UgaXRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHByZWNlZGVuY2UpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRCeUN1c3RvbVByZWNlZGVuY2UobG9hZGVycywgcHJlY2VkZW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXNlIHByZWRlZmluZWQgcHJlY2VkZW5jZSBvcmRlclxyXG4gICAgY29uc3Qgb3JkZXIgPSBQUkVDRURFTkNFX09SREVSU1twcmVjZWRlbmNlXTtcclxuICAgIHJldHVybiB0aGlzLnNvcnRCeVByZWRlZmluZWRPcmRlcihsb2FkZXJzLCBvcmRlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IGxvYWRlcnMgYnkgY3VzdG9tIHByZWNlZGVuY2UgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc29ydEJ5Q3VzdG9tUHJlY2VkZW5jZShsb2FkZXJzOiBDb25maWdMb2FkZXJbXSwgcHJlY2VkZW5jZTogTG9hZGVyUHJlY2VkZW5jZVtdKTogQ29uZmlnTG9hZGVyW10ge1xyXG4gICAgY29uc3QgcHJpb3JpdHlNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgZm9yIChjb25zdCBwIG9mIHByZWNlZGVuY2UpIHtcclxuICAgICAgcHJpb3JpdHlNYXAuc2V0KHAubG9hZGVyLCBwLnByaW9yaXR5KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3J0IGJ5IHByaW9yaXR5IChsb3dlciBmaXJzdCwgc28gaGlnaGVyIHByaW9yaXR5IGxvYWRzIGxhc3QgYW5kIHdpbnMpXHJcbiAgICByZXR1cm4gWy4uLmxvYWRlcnNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgcHJpb3JpdHlBID0gcHJpb3JpdHlNYXAuZ2V0KGEuZ2V0TmFtZSgpKSA/PyAwO1xyXG4gICAgICBjb25zdCBwcmlvcml0eUIgPSBwcmlvcml0eU1hcC5nZXQoYi5nZXROYW1lKCkpID8/IDA7XHJcbiAgICAgIHJldHVybiBwcmlvcml0eUEgLSBwcmlvcml0eUI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbG9hZGVycyBieSBwcmVkZWZpbmVkIG9yZGVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzb3J0QnlQcmVkZWZpbmVkT3JkZXIobG9hZGVyczogQ29uZmlnTG9hZGVyW10sIG9yZGVyOiBzdHJpbmdbXSk6IENvbmZpZ0xvYWRlcltdIHtcclxuICAgIGNvbnN0IG9yZGVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICAgIG9yZGVyLmZvckVhY2goKG5hbWUsIGluZGV4KSA9PiBvcmRlck1hcC5zZXQobmFtZSwgaW5kZXgpKTtcclxuXHJcbiAgICAvLyBTb3J0IGJ5IG9yZGVyIGluZGV4IChsb3dlciBmaXJzdCwgc28gaGlnaGVyIGluZGV4IGxvYWRzIGxhc3QgYW5kIHdpbnMpXHJcbiAgICByZXR1cm4gWy4uLmxvYWRlcnNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXhBID0gb3JkZXJNYXAuZ2V0KGEuZ2V0TmFtZSgpKSA/PyAtMTtcclxuICAgICAgY29uc3QgaW5kZXhCID0gb3JkZXJNYXAuZ2V0KGIuZ2V0TmFtZSgpKSA/PyAtMTtcclxuICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIGNvbmZpZ3VyZWQgbG9hZGVycy5cclxuICAgKiBMb2FkZXJzIGFyZSBleGVjdXRlZCBpbiBwcmVjZWRlbmNlIG9yZGVyLCB3aXRoIGxhdGVyIGxvYWRlcnMgb3ZlcnJpZGluZyBlYXJsaWVyIG9uZXMuXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICBjb25zdCBzb3VyY2VzOiBDb25maWdTb3VyY2VJbmZvW10gPSBbXTtcclxuICAgIGxldCBtZXJnZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcbiAgICBjb25zdCBrZXlPcmlnaW5zOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBUcmFjayB3aGljaCBsb2FkZXIgc2V0IGVhY2gga2V5XHJcblxyXG4gICAgdGhpcy5sb2coJ0xvYWRpbmcgY29uZmlndXJhdGlvbi4uLicpO1xyXG5cclxuICAgIGNvbnN0IG9yZGVyZWRMb2FkZXJzID0gdGhpcy5nZXRMb2FkT3JkZXIoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBvcmRlcmVkTG9hZGVycykge1xyXG4gICAgICBjb25zdCBsb2FkZXJOYW1lID0gbG9hZGVyLmdldE5hbWUoKTtcclxuICAgICAgY29uc3QgbG9hZGVyU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgbG9hZGVyIGlzIGF2YWlsYWJsZVxyXG4gICAgICAgIGNvbnN0IGlzQXZhaWxhYmxlID0gYXdhaXQgbG9hZGVyLmlzQXZhaWxhYmxlKCk7XHJcbiAgICAgICAgaWYgKCFpc0F2YWlsYWJsZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dUaW1pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coYCR7bG9hZGVyTmFtZX06IHNraXBwZWQgKG5vdCBhdmFpbGFibGUpYCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIHRoaXMgbG9hZGVyXHJcbiAgICAgICAgY29uc3QgbG9hZGVyQ29uZmlnID0gYXdhaXQgbG9hZGVyLmxvYWQoKTtcclxuICAgICAgICBjb25zdCBrZXlzTG9hZGVkID0gT2JqZWN0LmtleXMobG9hZGVyQ29uZmlnKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBsb2FkZXJTdGFydFRpbWU7XHJcblxyXG4gICAgICAgIC8vIFRyYWNrIHNvdXJjZSBpbmZvXHJcbiAgICAgICAgc291cmNlcy5wdXNoKHtcclxuICAgICAgICAgIGxvYWRlcjogbG9hZGVyTmFtZSxcclxuICAgICAgICAgIGtleXNMb2FkZWQsXHJcbiAgICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTG9nIHRpbWluZyBhbmQga2V5c1xyXG4gICAgICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVGltaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvZyhgJHtsb2FkZXJOYW1lfTogbG9hZGVkICR7a2V5c0xvYWRlZC5sZW5ndGh9IGtleXMgaW4gJHtkdXJhdGlvbn1tc2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9nIGluZGl2aWR1YWwga2V5cyBhbmQgdHJhY2sgb3ZlcnJpZGVzXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0xvYWRlZCkge1xyXG4gICAgICAgICAgY29uc3QgcHJldmlvdXNMb2FkZXIgPSBrZXlPcmlnaW5zLmdldChrZXkpO1xyXG4gICAgICAgICAgY29uc3QgaXNPdmVycmlkZSA9IHByZXZpb3VzTG9hZGVyICE9PSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dLZXlzKSB7XHJcbiAgICAgICAgICAgIGxldCBsb2dMaW5lID0gYCAgLSAke2tleX1gO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnMubG9nVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgbG9nTGluZSArPSBgID0gXCIke3RoaXMubWFza1ZhbHVlKGtleSwgbG9hZGVyQ29uZmlnW2tleV0pfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNPdmVycmlkZSAmJiB0aGlzLl92ZXJib3NlT3B0aW9ucy5sb2dPdmVycmlkZXMpIHtcclxuICAgICAgICAgICAgICBsb2dMaW5lICs9IGAgKG92ZXJyaWRlcyAke3ByZXZpb3VzTG9hZGVyfSlgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9nKGxvZ0xpbmUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGtleU9yaWdpbnMuc2V0KGtleSwgbG9hZGVyTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9uIChsYXRlciBsb2FkZXJzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcclxuICAgICAgICBtZXJnZWRDb25maWcgPSB7IC4uLm1lcmdlZENvbmZpZywgLi4ubG9hZGVyQ29uZmlnIH07XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IoXHJcbiAgICAgICAgICBgRmFpbGVkIHRvIGxvYWQgY29uZmlndXJhdGlvbiBmcm9tICR7bG9hZGVyTmFtZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXHJcbiAgICAgICAgICBsb2FkZXJOYW1lLFxyXG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENvdW50IG92ZXJyaWRlc1xyXG4gICAgY29uc3QgdG90YWxLZXlzID0gT2JqZWN0LmtleXMobWVyZ2VkQ29uZmlnKS5sZW5ndGg7XHJcbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcclxuICAgIGNvbnN0IG92ZXJyaWRlQ291bnQgPSBzb3VyY2VzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLmtleXNMb2FkZWQubGVuZ3RoLCAwKSAtIHRvdGFsS2V5cztcclxuXHJcbiAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1RpbWluZykge1xyXG4gICAgICB0aGlzLmxvZyhgQ29uZmlndXJhdGlvbiBsb2FkZWQ6ICR7dG90YWxLZXlzfSB0b3RhbCBrZXlzLCAke292ZXJyaWRlQ291bnR9IG92ZXJyaWRlcywgJHt0b3RhbER1cmF0aW9ufW1zIHRvdGFsYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgaWYgc2NoZW1hIGlzIHByb3ZpZGVkIGFuZCB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcclxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNjaGVtYSAmJiB0aGlzLl9vcHRpb25zLnZhbGlkYXRlT25Mb2FkKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX29wdGlvbnMuc2NoZW1hLnNhZmVQYXJzZShtZXJnZWRDb25maWcpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgY29uc3Qgem9kRXJyb3IgPSByZXN1bHQuZXJyb3IgYXMgWm9kRXJyb3I7XHJcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcclxuICAgICAgICAgIGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3pvZEVycm9yLmVycm9ycy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgICB6b2RFcnJvci5lcnJvcnMsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmlnID0gcmVzdWx0LmRhdGEgYXMgVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gbWVyZ2VkQ29uZmlnIGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkUmVzdWx0ID0ge1xyXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxyXG4gICAgICBzb3VyY2VzLFxyXG4gICAgICBsb2FkZWRBdDogbmV3IERhdGUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWUgYnkga2V5LlxyXG4gICAqIEBwYXJhbSBrZXkgVGhlIGNvbmZpZ3VyYXRpb24ga2V5XHJcbiAgICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBnZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IFRbS10ge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZCB8fCB0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdDb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuIENhbGwgbG9hZCgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgLy8gTm9uLW51bGwgYXNzZXJ0aW9uIGlzIHNhZmUgaGVyZSBiZWNhdXNlIHdlJ3ZlIGNoZWNrZWQgdGhpcy5jb25maWcgIT09IG51bGwgYWJvdmVcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZyFba2V5XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMuXHJcbiAgICogQHJldHVybnMgVGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgZ2V0QWxsKCk6IFQge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZCB8fCB0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdDb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuIENhbGwgbG9hZCgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsb2FkZWQuXHJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBjb25maWd1cmF0aW9uIGlzIGxvYWRlZFxyXG4gICAqL1xyXG4gIGlzTG9hZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGVudmlyb25tZW50LlxyXG4gICAqIEByZXR1cm5zIFRoZSBBUFBfRU5WIHZhbHVlIG9yICdkZXZlbG9wbWVudCcgYXMgZGVmYXVsdFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydBUFBfRU5WJ10gPz8gJ2RldmVsb3BtZW50JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbG9hZCByZXN1bHQgd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGxvYWQgcmVzdWx0IG9yIG51bGwgaWYgbm90IGxvYWRlZFxyXG4gICAqL1xyXG4gIGdldExvYWRSZXN1bHQoKTogQ29uZmlnTG9hZFJlc3VsdDxUPiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZFJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIEpTT04gc3RyaW5nLlxyXG4gICAqIEByZXR1cm5zIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IENvbmZpZ01hbmFnZXIgd2l0aCBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIGEgSlNPTiBzdHJpbmcuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHJlc3RvcmluZyBjb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVkIHN0YXRlLlxyXG4gICAqIEBwYXJhbSBqc29uIEpTT04gc3RyaW5nIHRvIGRlc2VyaWFsaXplXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgQ29uZmlnTWFuYWdlciBvcHRpb25zIChzY2hlbWEgd2lsbCBiZSB1c2VkIGZvciB2YWxpZGF0aW9uKVxyXG4gICAqIEByZXR1cm5zIEEgbmV3IENvbmZpZ01hbmFnZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZGVzZXJpYWxpemVkIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBzdGF0aWMgZGVzZXJpYWxpemU8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcclxuICAgIGpzb246IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+ID0ge31cclxuICApOiBDb25maWdNYW5hZ2VyPFQ+IHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvbik7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgaWYgc2NoZW1hIGlzIHByb3ZpZGVkXHJcbiAgICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5zY2hlbWEuc2FmZVBhcnNlKHBhcnNlZCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB6b2RFcnJvciA9IHJlc3VsdC5lcnJvciBhcyBab2RFcnJvcjtcclxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgYERlc2VyaWFsaXphdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt6b2RFcnJvci5lcnJvcnMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKX1gLFxyXG4gICAgICAgICAgem9kRXJyb3IuZXJyb3JzLFxyXG4gICAgICAgICAgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyBDb25maWdNYW5hZ2VyIGFuZCBzZXQgaXRzIGludGVybmFsIHN0YXRlXHJcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IENvbmZpZ01hbmFnZXI8VD4ob3B0aW9ucyk7XHJcbiAgICBtYW5hZ2VyLmNvbmZpZyA9IHBhcnNlZCBhcyBUO1xyXG4gICAgbWFuYWdlci5sb2FkZWQgPSB0cnVlO1xyXG4gICAgbWFuYWdlci5sb2FkUmVzdWx0ID0ge1xyXG4gICAgICBjb25maWc6IHBhcnNlZCBhcyBULFxyXG4gICAgICBzb3VyY2VzOiBbeyBsb2FkZXI6ICdkZXNlcmlhbGl6ZScsIGtleXNMb2FkZWQ6IE9iamVjdC5rZXlzKHBhcnNlZCksIGR1cmF0aW9uOiAwIH1dLFxyXG4gICAgICBsb2FkZWRBdDogbmV3IERhdGUoKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1hbmFnZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,69 +0,0 @@
1
- /**
2
- * Base error class for all configuration-related errors
3
- */
4
- export class ConfigurationError extends Error {
5
- /** The underlying cause of this error */
6
- cause;
7
- constructor(message, cause) {
8
- super(message);
9
- this.name = 'ConfigurationError';
10
- this.cause = cause;
11
- Object.setPrototypeOf(this, ConfigurationError.prototype);
12
- }
13
- }
14
- /**
15
- * Error thrown when configuration validation fails
16
- */
17
- export class ValidationError extends ConfigurationError {
18
- /** Detailed validation errors from Zod */
19
- validationErrors;
20
- constructor(message, validationErrors, cause) {
21
- super(message, cause);
22
- this.name = 'ValidationError';
23
- this.validationErrors = validationErrors;
24
- Object.setPrototypeOf(this, ValidationError.prototype);
25
- }
26
- }
27
- /**
28
- * Error thrown when an AWS service operation fails
29
- */
30
- export class AWSServiceError extends ConfigurationError {
31
- /** The AWS service that failed */
32
- service;
33
- /** The operation that failed */
34
- operation;
35
- constructor(message, service, operation, cause) {
36
- super(message, cause);
37
- this.name = 'AWSServiceError';
38
- this.service = service;
39
- this.operation = operation;
40
- Object.setPrototypeOf(this, AWSServiceError.prototype);
41
- }
42
- }
43
- /**
44
- * Error thrown when a configuration loader fails to load
45
- */
46
- export class ConfigurationLoadError extends ConfigurationError {
47
- /** The name of the loader that failed */
48
- loader;
49
- constructor(message, loader, cause) {
50
- super(message, cause);
51
- this.name = 'ConfigurationLoadError';
52
- this.loader = loader;
53
- Object.setPrototypeOf(this, ConfigurationLoadError.prototype);
54
- }
55
- }
56
- /**
57
- * Error thrown when required configuration keys are missing
58
- */
59
- export class MissingConfigurationError extends ConfigurationError {
60
- /** The keys that are missing */
61
- missingKeys;
62
- constructor(message, missingKeys, cause) {
63
- super(message, cause);
64
- this.name = 'MissingConfigurationError';
65
- this.missingKeys = missingKeys;
66
- Object.setPrototypeOf(this, MissingConfigurationError.prototype);
67
- }
68
- }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9lcnJvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsS0FBSztJQUMzQyx5Q0FBeUM7SUFDekIsS0FBSyxDQUFTO0lBRTlCLFlBQVksT0FBZSxFQUFFLEtBQWE7UUFDeEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLGtCQUFrQjtJQUNyRCwwQ0FBMEM7SUFDMUIsZ0JBQWdCLENBQVU7SUFFMUMsWUFBWSxPQUFlLEVBQUUsZ0JBQXlCLEVBQUUsS0FBYTtRQUNuRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLGtCQUFrQjtJQUNyRCxrQ0FBa0M7SUFDbEIsT0FBTyxDQUFTO0lBQ2hDLGdDQUFnQztJQUNoQixTQUFTLENBQVM7SUFFbEMsWUFBWSxPQUFlLEVBQUUsT0FBZSxFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUM1RSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQUM1RCx5Q0FBeUM7SUFDekIsTUFBTSxDQUFTO0lBRS9CLFlBQVksT0FBZSxFQUFFLE1BQWMsRUFBRSxLQUFhO1FBQ3hELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyx3QkFBd0IsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxrQkFBa0I7SUFDL0QsZ0NBQWdDO0lBQ2hCLFdBQVcsQ0FBVztJQUV0QyxZQUFZLE9BQWUsRUFBRSxXQUFxQixFQUFFLEtBQWE7UUFDL0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLDJCQUEyQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBCYXNlIGVycm9yIGNsYXNzIGZvciBhbGwgY29uZmlndXJhdGlvbi1yZWxhdGVkIGVycm9yc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAvKiogVGhlIHVuZGVybHlpbmcgY2F1c2Ugb2YgdGhpcyBlcnJvciAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBjYXVzZT86IEVycm9yO1xyXG5cclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGNhdXNlPzogRXJyb3IpIHtcclxuICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ3VyYXRpb25FcnJvcic7XHJcbiAgICB0aGlzLmNhdXNlID0gY2F1c2U7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQ29uZmlndXJhdGlvbkVycm9yLnByb3RvdHlwZSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQ29uZmlndXJhdGlvbkVycm9yIHtcclxuICAvKiogRGV0YWlsZWQgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBab2QgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRhdGlvbkVycm9yczogdW5rbm93bjtcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB2YWxpZGF0aW9uRXJyb3JzOiB1bmtub3duLCBjYXVzZT86IEVycm9yKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7XHJcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcclxuICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRpb25FcnJvcnM7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVmFsaWRhdGlvbkVycm9yLnByb3RvdHlwZSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gYW4gQVdTIHNlcnZpY2Ugb3BlcmF0aW9uIGZhaWxzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQVdTU2VydmljZUVycm9yIGV4dGVuZHMgQ29uZmlndXJhdGlvbkVycm9yIHtcclxuICAvKiogVGhlIEFXUyBzZXJ2aWNlIHRoYXQgZmFpbGVkICovXHJcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcclxuICAvKiogVGhlIG9wZXJhdGlvbiB0aGF0IGZhaWxlZCAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRpb246IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBjYXVzZT86IEVycm9yKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7XHJcbiAgICB0aGlzLm5hbWUgPSAnQVdTU2VydmljZUVycm9yJztcclxuICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XHJcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBBV1NTZXJ2aWNlRXJyb3IucHJvdG90eXBlKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIGNvbmZpZ3VyYXRpb24gbG9hZGVyIGZhaWxzIHRvIGxvYWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uTG9hZEVycm9yIGV4dGVuZHMgQ29uZmlndXJhdGlvbkVycm9yIHtcclxuICAvKiogVGhlIG5hbWUgb2YgdGhlIGxvYWRlciB0aGF0IGZhaWxlZCAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBsb2FkZXI6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBsb2FkZXI6IHN0cmluZywgY2F1c2U/OiBFcnJvcikge1xyXG4gICAgc3VwZXIobWVzc2FnZSwgY2F1c2UpO1xyXG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ3VyYXRpb25Mb2FkRXJyb3InO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQ29uZmlndXJhdGlvbkxvYWRFcnJvci5wcm90b3R5cGUpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEVycm9yIHRocm93biB3aGVuIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24ga2V5cyBhcmUgbWlzc2luZ1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IgZXh0ZW5kcyBDb25maWd1cmF0aW9uRXJyb3Ige1xyXG4gIC8qKiBUaGUga2V5cyB0aGF0IGFyZSBtaXNzaW5nICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG1pc3NpbmdLZXlzOiBzdHJpbmdbXTtcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBtaXNzaW5nS2V5czogc3RyaW5nW10sIGNhdXNlPzogRXJyb3IpIHtcclxuICAgIHN1cGVyKG1lc3NhZ2UsIGNhdXNlKTtcclxuICAgIHRoaXMubmFtZSA9ICdNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yJztcclxuICAgIHRoaXMubWlzc2luZ0tleXMgPSBtaXNzaW5nS2V5cztcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yLnByb3RvdHlwZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,21 +0,0 @@
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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUmVzdWx0IHJldHVybmVkIGJ5IGEgY29uZmlndXJhdGlvbiBsb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZGVyUmVzdWx0IHtcclxuICAvKiogVGhlIGxvYWRlZCBjb25maWd1cmF0aW9uIGtleS12YWx1ZSBwYWlycyAqL1xyXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgLyoqIEtleXMgdGhhdCB3ZXJlIGxvYWRlZCBieSB0aGlzIGxvYWRlciAqL1xyXG4gIGtleXNMb2FkZWQ6IHN0cmluZ1tdO1xyXG4gIC8qKiBUaW1lIHRha2VuIHRvIGxvYWQgaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgZHVyYXRpb246IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgY29uZmlndXJhdGlvbiBsb2FkZXJzLlxyXG4gKiBBbGwgbG9hZGVycyBtdXN0IGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIHdpdGggQ29uZmlnTWFuYWdlci5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZGVyIHtcclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc291cmNlLlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBsb2FkZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIGxvYWRlciBmb3IgbG9nZ2luZyBhbmQgZGVidWdnaW5nLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZXIgbmFtZVxyXG4gICAqL1xyXG4gIGdldE5hbWUoKTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGlzIGxvYWRlciBpcyBhdmFpbGFibGUgYW5kIGNhbiBsb2FkIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiB0aGUgbG9hZGVyIGNhbiBsb2FkIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG59XHJcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/OiBib29sZWFuO1xyXG4gIC8qKiBNYXNrIHNlbnNpdGl2ZSB2YWx1ZXMgKHNob3cgZmlyc3QvbGFzdCAyIGNoYXJzIG9ubHkpLiBEZWZhdWx0OiB0cnVlICh3aGVuIGxvZ1ZhbHVlcyBpcyB0cnVlKSAqL1xyXG4gIG1hc2tWYWx1ZXM/OiBib29sZWFuO1xyXG4gIC8qKiBLZXlzIHRvIGFsd2F5cyBtYXNrIHJlZ2FyZGxlc3Mgb2YgbWFza1ZhbHVlcyBzZXR0aW5nLiBEZWZhdWx0OiBbJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdrZXknLCAndG9rZW4nXSAqL1xyXG4gIHNlbnNpdGl2ZUtleXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBsb2FkZXIgcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclByZWNlZGVuY2Uge1xyXG4gIC8qKiBMb2FkZXIgbmFtZSAqL1xyXG4gIGxvYWRlcjogc3RyaW5nO1xyXG4gIC8qKiBQcmlvcml0eSAtIGhpZ2hlciB2YWx1ZXMgb3ZlcnJpZGUgbG93ZXIgdmFsdWVzICovXHJcbiAgcHJpb3JpdHk6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZWNlZGVuY2Ugc3RyYXRlZ3kgZm9yIG1lcmdpbmcgY29uZmlndXJhdGlvbnNcclxuICogLSAnYXdzLWZpcnN0JzogZW52IC0+IGVudkZpbGUgLT4gczMgLT4gc2VjcmV0c01hbmFnZXIgLT4gc3NtIChBV1Mgd2lucylcclxuICogLSAnbG9jYWwtZmlyc3QnOiBzZWNyZXRzTWFuYWdlciAtPiBzc20gLT4gczMgLT4gZW52RmlsZSAtPiBlbnYgKGxvY2FsIHdpbnMpXHJcbiAqIC0gQ3VzdG9tIGFycmF5OiB1c2VyLWRlZmluZWQgb3JkZXIgdmlhIExvYWRlclByZWNlZGVuY2VbXVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgUHJlY2VkZW5jZVN0cmF0ZWd5ID0gJ2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnIHwgTG9hZGVyUHJlY2VkZW5jZVtdO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIENvbmZpZ01hbmFnZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFuYWdlck9wdGlvbnM8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEFycmF5IG9mIGxvYWRlcnMgdG8gdXNlICovXHJcbiAgbG9hZGVycz86IENvbmZpZ0xvYWRlcltdO1xyXG4gIC8qKiBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW9uICovXHJcbiAgc2NoZW1hPzogWm9kVHlwZTxUPjtcclxuICAvKiogUHJlY2VkZW5jZSBzdHJhdGVneSBmb3IgbWVyZ2luZyBjb25maWd1cmF0aW9ucyAqL1xyXG4gIHByZWNlZGVuY2U/OiBQcmVjZWRlbmNlU3RyYXRlZ3k7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgY29uZmlndXJhdGlvbiBvbiBsb2FkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgdmFsaWRhdGVPbkxvYWQ/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gRGVmYXVsdDogZmFsc2UgKi9cclxuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcclxuICAvKiogQ3VzdG9tIGxvZ2dlciBpbnN0YW5jZSAqL1xyXG4gIGxvZ2dlcj86IExvZ2dlcjtcclxuICAvKiogVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IG9wdGlvbnMgKi9cclxuICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uIHNvdXJjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTb3VyY2VJbmZvIHtcclxuICAvKiogTmFtZSBvZiB0aGUgbG9hZGVyICovXHJcbiAgbG9hZGVyOiBzdHJpbmc7XHJcbiAgLyoqIEtleXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyICovXHJcbiAga2V5c0xvYWRlZDogc3RyaW5nW107XHJcbiAgLyoqIFRpbWUgdGFrZW4gdG8gbG9hZCBpbiBtaWxsaXNlY29uZHMgKi9cclxuICBkdXJhdGlvbjogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzdWx0IG9mIGxvYWRpbmcgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkUmVzdWx0PFQ+IHtcclxuICAvKiogVGhlIG1lcmdlZCBjb25maWd1cmF0aW9uICovXHJcbiAgY29uZmlnOiBUO1xyXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNvdXJjZSAqL1xyXG4gIHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXTtcclxuICAvKiogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbG9hZGVkICovXHJcbiAgbG9hZGVkQXQ6IERhdGU7XHJcbn1cclxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRW52RmlsZUxvYWRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFbnZGaWxlTG9hZGVyQ29uZmlnIHtcclxuICAvKiogUGF0aHMgdG8gLmVudiBmaWxlcyB0byBsb2FkLiBEZWZhdWx0OiBbJy5lbnYnLCAnLmVudi5sb2NhbCddICovXHJcbiAgcGF0aHM/OiBzdHJpbmdbXTtcclxuICAvKiogRmlsZSBlbmNvZGluZy4gRGVmYXVsdDogJ3V0Zi04JyAqL1xyXG4gIGVuY29kaW5nPzogQnVmZmVyRW5jb2Rpbmc7XHJcbiAgLyoqIFdoZXRoZXIgbGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgb3ZlcnJpZGU/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRW52aXJvbm1lbnRMb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnRMb2FkZXJDb25maWcge1xyXG4gIC8qKiBQcmVmaXggdG8gZmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gT25seSB2YXJpYWJsZXMgc3RhcnRpbmcgd2l0aCB0aGlzIHByZWZpeCB3aWxsIGJlIGxvYWRlZC4gKi9cclxuICBwcmVmaXg/OiBzdHJpbmc7XHJcbiAgLyoqIExpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIGxvYWRpbmcgKi9cclxuICBleGNsdWRlPzogc3RyaW5nW107XHJcbn1cclxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvczMtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUzNMb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUzNMb2FkZXJDb25maWcge1xyXG4gIC8qKiBTMyBidWNrZXQgbmFtZSAqL1xyXG4gIGJ1Y2tldDogc3RyaW5nO1xyXG4gIC8qKiBTMyBvYmplY3Qga2V5ICovXHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogRm9ybWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIERlZmF1bHQ6ICdhdXRvJyAoYXV0by1kZXRlY3QgYmFzZWQgb24gY29udGVudCkgKi9cclxuICBmb3JtYXQ/OiAnanNvbicgfCAnZW52JyB8ICdhdXRvJztcclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1tYW5hZ2VyLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTZWNyZXRzTWFuYWdlckxvYWRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzTWFuYWdlckxvYWRlckNvbmZpZyB7XHJcbiAgLyoqIE5hbWUgb3IgQVJOIG9mIHRoZSBzZWNyZXQgdG8gbG9hZCAqL1xyXG4gIHNlY3JldE5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogTWFwcGluZyBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byBwYXRoIHByZWZpeGVzICovXHJcbiAgZW52aXJvbm1lbnRNYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1zdG9yZS1sb2FkZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9zc20tcGFyYW1ldGVyLXN0b3JlLWxvYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnIHtcclxuICAvKiogUGF0aCBwcmVmaXggZm9yIHBhcmFtZXRlcnMgdG8gbG9hZCAqL1xyXG4gIHBhcmFtZXRlclBhdGg/OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogTWFwcGluZyBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byBwYXRoIHByZWZpeGVzICovXHJcbiAgZW52aXJvbm1lbnRNYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAvKiogV2hldGhlciB0byBkZWNyeXB0IFNlY3VyZVN0cmluZyBwYXJhbWV0ZXJzLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgd2l0aERlY3J5cHRpb24/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==