@dyanet/nestjs-config-aws 1.2.1 → 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 -1
  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 +13 -7
  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/index.js';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEc7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBVztJQUM1QixHQUFHLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzlDLEtBQUssRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNoRCxLQUFLLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0NBQ25ELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUV6Rzs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQTZCO0lBQ3hELE9BQU8sRUFBRSxJQUFJO0lBQ2IsU0FBUyxFQUFFLEtBQUs7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsSUFBSTtJQUNoQixhQUFhLEVBQUUsc0JBQXNCO0NBQ3RDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLGlCQUFpQixHQUFrRDtJQUN2RSwwREFBMEQ7SUFDMUQsV0FBVyxFQUFFO1FBQ1gsbUJBQW1CO1FBQ25C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Q0FBc0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQ2xILFFBQVEsQ0FBQyxNQUFNLEVBQ2YsU0FBUyxDQUNWLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBSSxPQUFPLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQVcsQ0FBQztRQUM3QixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN0QixPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxNQUFXO1lBQ25CLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEYsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFpvZEVycm9yIH0gZnJvbSAnem9kJztcclxuaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQ29uZmlnTWFuYWdlck9wdGlvbnMsXHJcbiAgQ29uZmlnTG9hZFJlc3VsdCxcclxuICBDb25maWdTb3VyY2VJbmZvLFxyXG4gIExvZ2dlcixcclxuICBMb2FkZXJQcmVjZWRlbmNlLFxyXG4gIFZlcmJvc2VPcHRpb25zLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzL2luZGV4LmpzJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGNvbnNvbGUgbG9nZ2VyIGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5jb25zdCBkZWZhdWx0TG9nZ2VyOiBMb2dnZXIgPSB7XHJcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlKSxcclxuICBlcnJvcjogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlKSxcclxuICB3YXJuOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSksXHJcbiAgZGVidWc6IChtZXNzYWdlOiBzdHJpbmcpID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSksXHJcbn07XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBzZW5zaXRpdmUga2V5cyB0aGF0IHNob3VsZCBhbHdheXMgYmUgbWFza2VkXHJcbiAqL1xyXG5jb25zdCBERUZBVUxUX1NFTlNJVElWRV9LRVlTID0gWydwYXNzd29yZCcsICdzZWNyZXQnLCAna2V5JywgJ3Rva2VuJywgJ2NyZWRlbnRpYWwnLCAnYXBpX2tleScsICdhcGlrZXknXTtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHZlcmJvc2Ugb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgREVGQVVMVF9WRVJCT1NFX09QVElPTlM6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiA9IHtcclxuICBsb2dLZXlzOiB0cnVlLFxyXG4gIGxvZ1ZhbHVlczogZmFsc2UsXHJcbiAgbG9nT3ZlcnJpZGVzOiB0cnVlLFxyXG4gIGxvZ1RpbWluZzogdHJ1ZSxcclxuICBtYXNrVmFsdWVzOiB0cnVlLFxyXG4gIHNlbnNpdGl2ZUtleXM6IERFRkFVTFRfU0VOU0lUSVZFX0tFWVMsXHJcbn07XHJcblxyXG4vKipcclxuICogUHJlZGVmaW5lZCBwcmVjZWRlbmNlIG9yZGVycyBmb3IgY29tbW9uIHN0cmF0ZWdpZXNcclxuICogSGlnaGVyIGluZGV4ID0gaGlnaGVyIHByaW9yaXR5IChsYXRlciBsb2FkZXJzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcclxuICovXHJcbmNvbnN0IFBSRUNFREVOQ0VfT1JERVJTOiBSZWNvcmQ8J2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnLCBzdHJpbmdbXT4gPSB7XHJcbiAgLy8gQVdTIHdpbnM6IGVudiAtPiBlbnZGaWxlIC0+IHMzIC0+IHNlY3JldHNNYW5hZ2VyIC0+IHNzbVxyXG4gICdhd3MtZmlyc3QnOiBbXHJcbiAgICAnRW52aXJvbm1lbnRMb2FkZXInLFxyXG4gICAgJ0VudkZpbGVMb2FkZXInLFxyXG4gICAgJ1MzTG9hZGVyJyxcclxuICAgICdTZWNyZXRzTWFuYWdlckxvYWRlcicsXHJcbiAgICAnU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXInLFxyXG4gIF0sXHJcbiAgLy8gTG9jYWwgd2luczogc3NtIC0+IHNlY3JldHNNYW5hZ2VyIC0+IHMzIC0+IGVudkZpbGUgLT4gZW52XHJcbiAgJ2xvY2FsLWZpcnN0JzogW1xyXG4gICAgJ1NTTVBhcmFtZXRlclN0b3JlTG9hZGVyJyxcclxuICAgICdTZWNyZXRzTWFuYWdlckxvYWRlcicsXHJcbiAgICAnUzNMb2FkZXInLFxyXG4gICAgJ0VudkZpbGVMb2FkZXInLFxyXG4gICAgJ0Vudmlyb25tZW50TG9hZGVyJyxcclxuICBdLFxyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb25maWdNYW5hZ2VyIG9yY2hlc3RyYXRlcyBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBtdWx0aXBsZSBzb3VyY2VzXHJcbiAqIHdpdGggY29uZmlndXJhYmxlIHByZWNlZGVuY2UgYW5kIHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgQ29uZmlnTWFuYWdlciwgRW52aXJvbm1lbnRMb2FkZXIsIFNlY3JldHNNYW5hZ2VyTG9hZGVyIH0gZnJvbSAnQGR5YW5ldC9jb25maWctYXdzJztcclxuICogaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XHJcbiAqXHJcbiAqIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcclxuICogICBEQVRBQkFTRV9VUkw6IHouc3RyaW5nKCksXHJcbiAqICAgQVBJX0tFWTogei5zdHJpbmcoKSxcclxuICogICBQT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMDApLFxyXG4gKiB9KTtcclxuICpcclxuICogY29uc3QgbWFuYWdlciA9IG5ldyBDb25maWdNYW5hZ2VyKHtcclxuICogICBsb2FkZXJzOiBbXHJcbiAqICAgICBuZXcgRW52aXJvbm1lbnRMb2FkZXIoeyBwcmVmaXg6ICdBUFBfJyB9KSxcclxuICogICAgIG5ldyBTZWNyZXRzTWFuYWdlckxvYWRlcih7IHNlY3JldE5hbWU6ICcvbXktYXBwL2NvbmZpZycgfSksXHJcbiAqICAgXSxcclxuICogICBzY2hlbWEsXHJcbiAqICAgcHJlY2VkZW5jZTogJ2F3cy1maXJzdCcsXHJcbiAqICAgdmVyYm9zZTogdHJ1ZSxcclxuICogfSk7XHJcbiAqXHJcbiAqIGF3YWl0IG1hbmFnZXIubG9hZCgpO1xyXG4gKiBjb25zdCBkYlVybCA9IG1hbmFnZXIuZ2V0KCdEQVRBQkFTRV9VUkwnKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29uZmlnTWFuYWdlcjxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9vcHRpb25zOiBSZXF1aXJlZDxPbWl0PENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+LCAnc2NoZW1hJyB8ICdsb2dnZXInIHwgJ3ZlcmJvc2UnPj4gJiB7XHJcbiAgICBzY2hlbWE/OiBDb25maWdNYW5hZ2VyT3B0aW9uczxUPlsnc2NoZW1hJ107XHJcbiAgICBsb2dnZXI/OiBMb2dnZXI7XHJcbiAgICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG4gIH07XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfbG9nZ2VyOiBMb2dnZXI7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfdmVyYm9zZU9wdGlvbnM6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiB8IG51bGw7XHJcblxyXG4gIHByaXZhdGUgY29uZmlnOiBUIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkUmVzdWx0OiBDb25maWdMb2FkUmVzdWx0PFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4gPSB7fSkge1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcclxuICAgICAgbG9hZGVyczogb3B0aW9ucy5sb2FkZXJzID8/IFtdLFxyXG4gICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxyXG4gICAgICBwcmVjZWRlbmNlOiBvcHRpb25zLnByZWNlZGVuY2UgPz8gJ2F3cy1maXJzdCcsXHJcbiAgICAgIHZhbGlkYXRlT25Mb2FkOiBvcHRpb25zLnZhbGlkYXRlT25Mb2FkID8/IHRydWUsXHJcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IG9wdGlvbnMuZW5hYmxlTG9nZ2luZyA/PyBmYWxzZSxcclxuICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcclxuICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2xvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGRlZmF1bHRMb2dnZXI7XHJcbiAgICB0aGlzLl92ZXJib3NlT3B0aW9ucyA9IHRoaXMucmVzb2x2ZVZlcmJvc2VPcHRpb25zKG9wdGlvbnMudmVyYm9zZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIHZlcmJvc2Ugb3B0aW9ucyBmcm9tIGJvb2xlYW4gb3Igb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlVmVyYm9zZU9wdGlvbnModmVyYm9zZT86IFZlcmJvc2VPcHRpb25zIHwgYm9vbGVhbik6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiB8IG51bGwge1xyXG4gICAgaWYgKHZlcmJvc2UgPT09IHVuZGVmaW5lZCB8fCB2ZXJib3NlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh2ZXJib3NlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB7IC4uLkRFRkFVTFRfVkVSQk9TRV9PUFRJT05TIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsb2dLZXlzOiB2ZXJib3NlLmxvZ0tleXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nS2V5cyxcclxuICAgICAgbG9nVmFsdWVzOiB2ZXJib3NlLmxvZ1ZhbHVlcyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5sb2dWYWx1ZXMsXHJcbiAgICAgIGxvZ092ZXJyaWRlczogdmVyYm9zZS5sb2dPdmVycmlkZXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nT3ZlcnJpZGVzLFxyXG4gICAgICBsb2dUaW1pbmc6IHZlcmJvc2UubG9nVGltaW5nID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ1RpbWluZyxcclxuICAgICAgbWFza1ZhbHVlczogdmVyYm9zZS5tYXNrVmFsdWVzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLm1hc2tWYWx1ZXMsXHJcbiAgICAgIHNlbnNpdGl2ZUtleXM6IHZlcmJvc2Uuc2Vuc2l0aXZlS2V5cyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5zZW5zaXRpdmVLZXlzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvZyBhIG1lc3NhZ2UgaWYgbG9nZ2luZyBpcyBlbmFibGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5lbmFibGVMb2dnaW5nIHx8IHRoaXMuX3ZlcmJvc2VPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFtjb25maWctYXdzXSAke21lc3NhZ2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXNrIGEgdmFsdWUgZm9yIGxvZ2dpbmdcclxuICAgKi9cclxuICBwcml2YXRlIG1hc2tWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVmFsdWVzKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdHJWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcbiAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIGtleSBjb250YWlucyBhbnkgc2Vuc2l0aXZlIHBhdHRlcm5zXHJcbiAgICBjb25zdCBpc1NlbnNpdGl2ZSA9IHRoaXMuX3ZlcmJvc2VPcHRpb25zLnNlbnNpdGl2ZUtleXMuc29tZShcclxuICAgICAgKHBhdHRlcm4pID0+IGxvd2VyS2V5LmluY2x1ZGVzKHBhdHRlcm4udG9Mb3dlckNhc2UoKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zLm1hc2tWYWx1ZXMgfHwgaXNTZW5zaXRpdmUpIHtcclxuICAgICAgaWYgKHN0clZhbHVlLmxlbmd0aCA8PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuICcqKioqJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYCR7c3RyVmFsdWUuc2xpY2UoMCwgMil9KiouLi4ke3N0clZhbHVlLnNsaWNlKC0yKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJWYWx1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxvYWRpbmcgb3JkZXIgZm9yIGxvYWRlcnMgYmFzZWQgb24gcHJlY2VkZW5jZSBzdHJhdGVneS5cclxuICAgKiBSZXR1cm5zIGxvYWRlcnMgc29ydGVkIGJ5IHByaW9yaXR5IChsb3dlciBwcmlvcml0eSBmaXJzdCwgc28gaGlnaGVyIHByaW9yaXR5IGxvYWRzIGxhc3QgYW5kIHdpbnMpLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TG9hZE9yZGVyKCk6IENvbmZpZ0xvYWRlcltdIHtcclxuICAgIGNvbnN0IHsgbG9hZGVycywgcHJlY2VkZW5jZSB9ID0gdGhpcy5fb3B0aW9ucztcclxuXHJcbiAgICBpZiAoIWxvYWRlcnMgfHwgbG9hZGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHByZWNlZGVuY2UgaXMgYSBjdXN0b20gYXJyYXksIHVzZSBpdFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJlY2VkZW5jZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydEJ5Q3VzdG9tUHJlY2VkZW5jZShsb2FkZXJzLCBwcmVjZWRlbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgcHJlZGVmaW5lZCBwcmVjZWRlbmNlIG9yZGVyXHJcbiAgICBjb25zdCBvcmRlciA9IFBSRUNFREVOQ0VfT1JERVJTW3ByZWNlZGVuY2VdO1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydEJ5UHJlZGVmaW5lZE9yZGVyKGxvYWRlcnMsIG9yZGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbG9hZGVycyBieSBjdXN0b20gcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzb3J0QnlDdXN0b21QcmVjZWRlbmNlKGxvYWRlcnM6IENvbmZpZ0xvYWRlcltdLCBwcmVjZWRlbmNlOiBMb2FkZXJQcmVjZWRlbmNlW10pOiBDb25maWdMb2FkZXJbXSB7XHJcbiAgICBjb25zdCBwcmlvcml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcbiAgICBmb3IgKGNvbnN0IHAgb2YgcHJlY2VkZW5jZSkge1xyXG4gICAgICBwcmlvcml0eU1hcC5zZXQocC5sb2FkZXIsIHAucHJpb3JpdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnQgYnkgcHJpb3JpdHkgKGxvd2VyIGZpcnN0LCBzbyBoaWdoZXIgcHJpb3JpdHkgbG9hZHMgbGFzdCBhbmQgd2lucylcclxuICAgIHJldHVybiBbLi4ubG9hZGVyc10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBwcmlvcml0eUEgPSBwcmlvcml0eU1hcC5nZXQoYS5nZXROYW1lKCkpID8/IDA7XHJcbiAgICAgIGNvbnN0IHByaW9yaXR5QiA9IHByaW9yaXR5TWFwLmdldChiLmdldE5hbWUoKSkgPz8gMDtcclxuICAgICAgcmV0dXJuIHByaW9yaXR5QSAtIHByaW9yaXR5QjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCBsb2FkZXJzIGJ5IHByZWRlZmluZWQgb3JkZXJcclxuICAgKi9cclxuICBwcml2YXRlIHNvcnRCeVByZWRlZmluZWRPcmRlcihsb2FkZXJzOiBDb25maWdMb2FkZXJbXSwgb3JkZXI6IHN0cmluZ1tdKTogQ29uZmlnTG9hZGVyW10ge1xyXG4gICAgY29uc3Qgb3JkZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgb3JkZXIuZm9yRWFjaCgobmFtZSwgaW5kZXgpID0+IG9yZGVyTWFwLnNldChuYW1lLCBpbmRleCkpO1xyXG5cclxuICAgIC8vIFNvcnQgYnkgb3JkZXIgaW5kZXggKGxvd2VyIGZpcnN0LCBzbyBoaWdoZXIgaW5kZXggbG9hZHMgbGFzdCBhbmQgd2lucylcclxuICAgIHJldHVybiBbLi4ubG9hZGVyc10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleEEgPSBvcmRlck1hcC5nZXQoYS5nZXROYW1lKCkpID8/IC0xO1xyXG4gICAgICBjb25zdCBpbmRleEIgPSBvcmRlck1hcC5nZXQoYi5nZXROYW1lKCkpID8/IC0xO1xyXG4gICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgY29uZmlndXJlZCBsb2FkZXJzLlxyXG4gICAqIExvYWRlcnMgYXJlIGV4ZWN1dGVkIGluIHByZWNlZGVuY2Ugb3JkZXIsIHdpdGggbGF0ZXIgbG9hZGVycyBvdmVycmlkaW5nIGVhcmxpZXIgb25lcy5cclxuICAgKi9cclxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXSA9IFtdO1xyXG4gICAgbGV0IG1lcmdlZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcclxuICAgIGNvbnN0IGtleU9yaWdpbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7IC8vIFRyYWNrIHdoaWNoIGxvYWRlciBzZXQgZWFjaCBrZXlcclxuXHJcbiAgICB0aGlzLmxvZygnTG9hZGluZyBjb25maWd1cmF0aW9uLi4uJyk7XHJcblxyXG4gICAgY29uc3Qgb3JkZXJlZExvYWRlcnMgPSB0aGlzLmdldExvYWRPcmRlcigpO1xyXG5cclxuICAgIGZvciAoY29uc3QgbG9hZGVyIG9mIG9yZGVyZWRMb2FkZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxvYWRlck5hbWUgPSBsb2FkZXIuZ2V0TmFtZSgpO1xyXG4gICAgICBjb25zdCBsb2FkZXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBsb2FkZXIgaXMgYXZhaWxhYmxlXHJcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCBsb2FkZXIuaXNBdmFpbGFibGUoKTtcclxuICAgICAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1RpbWluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhgJHtsb2FkZXJOYW1lfTogc2tpcHBlZCAobm90IGF2YWlsYWJsZSlgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9hZCBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBsb2FkZXJcclxuICAgICAgICBjb25zdCBsb2FkZXJDb25maWcgPSBhd2FpdCBsb2FkZXIubG9hZCgpO1xyXG4gICAgICAgIGNvbnN0IGtleXNMb2FkZWQgPSBPYmplY3Qua2V5cyhsb2FkZXJDb25maWcpO1xyXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIGxvYWRlclN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgLy8gVHJhY2sgc291cmNlIGluZm9cclxuICAgICAgICBzb3VyY2VzLnB1c2goe1xyXG4gICAgICAgICAgbG9hZGVyOiBsb2FkZXJOYW1lLFxyXG4gICAgICAgICAga2V5c0xvYWRlZCxcclxuICAgICAgICAgIGR1cmF0aW9uLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBMb2cgdGltaW5nIGFuZCBrZXlzXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dUaW1pbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9nKGAke2xvYWRlck5hbWV9OiBsb2FkZWQgJHtrZXlzTG9hZGVkLmxlbmd0aH0ga2V5cyBpbiAke2R1cmF0aW9ufW1zYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMb2cgaW5kaXZpZHVhbCBrZXlzIGFuZCB0cmFjayBvdmVycmlkZXNcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzTG9hZGVkKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0xvYWRlciA9IGtleU9yaWdpbnMuZ2V0KGtleSk7XHJcbiAgICAgICAgICBjb25zdCBpc092ZXJyaWRlID0gcHJldmlvdXNMb2FkZXIgIT09IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ0tleXMpIHtcclxuICAgICAgICAgICAgbGV0IGxvZ0xpbmUgPSBgICAtICR7a2V5fWA7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucy5sb2dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBsb2dMaW5lICs9IGAgPSBcIiR7dGhpcy5tYXNrVmFsdWUoa2V5LCBsb2FkZXJDb25maWdba2V5XSl9XCJgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc092ZXJyaWRlICYmIHRoaXMuX3ZlcmJvc2VPcHRpb25zLmxvZ092ZXJyaWRlcykge1xyXG4gICAgICAgICAgICAgIGxvZ0xpbmUgKz0gYCAob3ZlcnJpZGVzICR7cHJldmlvdXNMb2FkZXJ9KWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2cobG9nTGluZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAga2V5T3JpZ2lucy5zZXQoa2V5LCBsb2FkZXJOYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb24gKGxhdGVyIGxvYWRlcnMgb3ZlcnJpZGUgZWFybGllciBvbmVzKVxyXG4gICAgICAgIG1lcmdlZENvbmZpZyA9IHsgLi4ubWVyZ2VkQ29uZmlnLCAuLi5sb2FkZXJDb25maWcgfTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkxvYWRFcnJvcihcclxuICAgICAgICAgIGBGYWlsZWQgdG8gbG9hZCBjb25maWd1cmF0aW9uIGZyb20gJHtsb2FkZXJOYW1lfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAgIGxvYWRlck5hbWUsXHJcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ291bnQgb3ZlcnJpZGVzXHJcbiAgICBjb25zdCB0b3RhbEtleXMgPSBPYmplY3Qua2V5cyhtZXJnZWRDb25maWcpLmxlbmd0aDtcclxuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xyXG4gICAgY29uc3Qgb3ZlcnJpZGVDb3VudCA9IHNvdXJjZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMua2V5c0xvYWRlZC5sZW5ndGgsIDApIC0gdG90YWxLZXlzO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVGltaW5nKSB7XHJcbiAgICAgIHRoaXMubG9nKGBDb25maWd1cmF0aW9uIGxvYWRlZDogJHt0b3RhbEtleXN9IHRvdGFsIGtleXMsICR7b3ZlcnJpZGVDb3VudH0gb3ZlcnJpZGVzLCAke3RvdGFsRHVyYXRpb259bXMgdG90YWxgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBpZiBzY2hlbWEgaXMgcHJvdmlkZWQgYW5kIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2NoZW1hICYmIHRoaXMuX29wdGlvbnMudmFsaWRhdGVPbkxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fb3B0aW9ucy5zY2hlbWEuc2FmZVBhcnNlKG1lcmdlZENvbmZpZyk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB6b2RFcnJvciA9IHJlc3VsdC5lcnJvciBhcyBab2RFcnJvcjtcclxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7em9kRXJyb3IuZXJyb3JzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyl9YCxcclxuICAgICAgICAgIHpvZEVycm9yLmVycm9ycyxcclxuICAgICAgICAgIHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcgPSByZXN1bHQuZGF0YSBhcyBUO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBtZXJnZWRDb25maWcgYXMgVDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRSZXN1bHQgPSB7XHJcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXHJcbiAgICAgIHNvdXJjZXMsXHJcbiAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB2YWx1ZSBieSBrZXkuXHJcbiAgICogQHBhcmFtIGtleSBUaGUgY29uZmlndXJhdGlvbiBrZXlcclxuICAgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZVxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkVycm9yIGlmIGNvbmZpZ3VyYXRpb24gaXMgbm90IGxvYWRlZFxyXG4gICAqL1xyXG4gIGdldDxLIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBLKTogVFtLXSB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICAvLyBOb24tbnVsbCBhc3NlcnRpb24gaXMgc2FmZSBoZXJlIGJlY2F1c2Ugd2UndmUgY2hlY2tlZCB0aGlzLmNvbmZpZyAhPT0gbnVsbCBhYm92ZVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnIVtrZXldO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCBjb25maWd1cmF0aW9uIHZhbHVlcy5cclxuICAgKiBAcmV0dXJucyBUaGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBnZXRBbGwoKTogVCB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGxvYWRlZC5cclxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGNvbmZpZ3VyYXRpb24gaXMgbG9hZGVkXHJcbiAgICovXHJcbiAgaXNMb2FkZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuXHJcbiAgICogQHJldHVybnMgVGhlIEFQUF9FTlYgdmFsdWUgb3IgJ2RldmVsb3BtZW50JyBhcyBkZWZhdWx0XHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0FQUF9FTlYnXSA/PyAnZGV2ZWxvcG1lbnQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsb2FkIHJlc3VsdCB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJucyBUaGUgbG9hZCByZXN1bHQgb3IgbnVsbCBpZiBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgZ2V0TG9hZFJlc3VsdCgpOiBDb25maWdMb2FkUmVzdWx0PFQ+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gSlNPTiBzdHJpbmcuXHJcbiAgICogQHJldHVybnMgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5sb2FkZWQgfHwgdGhpcy5jb25maWcgPT09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcignQ29uZmlndXJhdGlvbiBub3QgbG9hZGVkLiBDYWxsIGxvYWQoKSBmaXJzdC4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgQ29uZmlnTWFuYWdlciB3aXRoIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gYSBKU09OIHN0cmluZy5cclxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIHNlcmlhbGl6ZWQgc3RhdGUuXHJcbiAgICogQHBhcmFtIGpzb24gSlNPTiBzdHJpbmcgdG8gZGVzZXJpYWxpemVcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBDb25maWdNYW5hZ2VyIG9wdGlvbnMgKHNjaGVtYSB3aWxsIGJlIHVzZWQgZm9yIHZhbGlkYXRpb24pXHJcbiAgICogQHJldHVybnMgQSBuZXcgQ29uZmlnTWFuYWdlciBpbnN0YW5jZSB3aXRoIHRoZSBkZXNlcmlhbGl6ZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZTxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxyXG4gICAganNvbjogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4gPSB7fVxyXG4gICk6IENvbmZpZ01hbmFnZXI8VD4ge1xyXG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBpZiBzY2hlbWEgaXMgcHJvdmlkZWRcclxuICAgIGlmIChvcHRpb25zLnNjaGVtYSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBvcHRpb25zLnNjaGVtYS5zYWZlUGFyc2UocGFyc2VkKTtcclxuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnN0IHpvZEVycm9yID0gcmVzdWx0LmVycm9yIGFzIFpvZEVycm9yO1xyXG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgICBgRGVzZXJpYWxpemF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3pvZEVycm9yLmVycm9ycy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgICB6b2RFcnJvci5lcnJvcnMsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENvbmZpZ01hbmFnZXIgYW5kIHNldCBpdHMgaW50ZXJuYWwgc3RhdGVcclxuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcjxUPihvcHRpb25zKTtcclxuICAgIG1hbmFnZXIuY29uZmlnID0gcGFyc2VkIGFzIFQ7XHJcbiAgICBtYW5hZ2VyLmxvYWRlZCA9IHRydWU7XHJcbiAgICBtYW5hZ2VyLmxvYWRSZXN1bHQgPSB7XHJcbiAgICAgIGNvbmZpZzogcGFyc2VkIGFzIFQsXHJcbiAgICAgIHNvdXJjZXM6IFt7IGxvYWRlcjogJ2Rlc2VyaWFsaXplJywga2V5c0xvYWRlZDogT2JqZWN0LmtleXMocGFyc2VkKSwgZHVyYXRpb246IDAgfV0sXHJcbiAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbWFuYWdlcjtcclxuICB9XHJcbn1cclxuIl19
@@ -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/index.js';
10
- // Loaders
11
- export { EnvironmentLoader } from './loaders/environment.loader.js';
12
- export { EnvFileLoader } from './loaders/env-file.loader.js';
13
- export { S3Loader } from './loaders/s3.loader.js';
14
- export { SecretsManagerLoader } from './loaders/secrets-manager.loader.js';
15
- export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader.js';
16
- // ConfigManager
17
- export { ConfigManager } from './config-manager.js';
18
- // Utilities
19
- export { ConfigValidationUtil } from './utils/validation.util.js';
20
- export { EnvFileParser } from './utils/env-file-parser.util.js';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQ0gsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsVUFBVTtBQUNWLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEYsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxZQUFZO0FBQ1osT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkeWFuZXQvY29uZmlnLWF3c1xyXG4gKlxyXG4gKiBGcmFtZXdvcmstYWdub3N0aWMgQVdTIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBsaWJyYXJ5LlxyXG4gKiBTdXBwb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIEFXUyBTZWNyZXRzIE1hbmFnZXIsIFNTTSBQYXJhbWV0ZXIgU3RvcmUsXHJcbiAqIFMzLCBhbmQgLmVudiBmaWxlcyB3aXRoIGNvbmZpZ3VyYWJsZSBwcmVjZWRlbmNlLlxyXG4gKi9cclxuXHJcbi8vIEludGVyZmFjZXNcclxuZXhwb3J0IHR5cGUge1xyXG4gIENvbmZpZ0xvYWRlcixcclxuICBDb25maWdMb2FkZXJSZXN1bHQsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBDb25maWdNYW5hZ2VyT3B0aW9ucyxcclxuICBMb2FkZXJQcmVjZWRlbmNlLFxyXG4gIFZlcmJvc2VPcHRpb25zLFxyXG4gIFByZWNlZGVuY2VTdHJhdGVneSxcclxuICBDb25maWdMb2FkUmVzdWx0LFxyXG4gIENvbmZpZ1NvdXJjZUluZm8sXHJcbiAgTG9nZ2VyLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UuanMnO1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIEVudmlyb25tZW50TG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9lbnZpcm9ubWVudC1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBFbnZGaWxlTG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9lbnYtZmlsZS1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTM0xvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvczMtbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgU2VjcmV0c01hbmFnZXJMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvc3NtLXBhcmFtZXRlci1zdG9yZS1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbi8vIEVycm9yIGNsYXNzZXNcclxuZXhwb3J0IHtcclxuICBDb25maWd1cmF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIEFXU1NlcnZpY2VFcnJvcixcclxuICBDb25maWd1cmF0aW9uTG9hZEVycm9yLFxyXG4gIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IsXHJcbn0gZnJvbSAnLi9lcnJvcnMvaW5kZXguanMnO1xyXG5cclxuLy8gTG9hZGVyc1xyXG5leHBvcnQgeyBFbnZpcm9ubWVudExvYWRlciB9IGZyb20gJy4vbG9hZGVycy9lbnZpcm9ubWVudC5sb2FkZXIuanMnO1xyXG5leHBvcnQgeyBFbnZGaWxlTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL2Vudi1maWxlLmxvYWRlci5qcyc7XHJcbmV4cG9ydCB7IFMzTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL3MzLmxvYWRlci5qcyc7XHJcbmV4cG9ydCB7IFNlY3JldHNNYW5hZ2VyTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL3NlY3JldHMtbWFuYWdlci5sb2FkZXIuanMnO1xyXG5leHBvcnQgeyBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zc20tcGFyYW1ldGVyLXN0b3JlLmxvYWRlci5qcyc7XHJcblxyXG4vLyBDb25maWdNYW5hZ2VyXHJcbmV4cG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy1tYW5hZ2VyLmpzJztcclxuXHJcbi8vIFV0aWxpdGllc1xyXG5leHBvcnQgeyBDb25maWdWYWxpZGF0aW9uVXRpbCB9IGZyb20gJy4vdXRpbHMvdmFsaWRhdGlvbi51dGlsLmpzJztcclxuZXhwb3J0IHsgRW52RmlsZVBhcnNlciB9IGZyb20gJy4vdXRpbHMvZW52LWZpbGUtcGFyc2VyLnV0aWwuanMnO1xyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/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==