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