@dyanet/nestjs-config-aws 1.0.1

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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1183 -0
  3. package/dist/cjs/config.module.js +178 -0
  4. package/dist/cjs/config.module.js.map +1 -0
  5. package/dist/cjs/index.js +47 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/integration/index.js +23 -0
  8. package/dist/cjs/integration/index.js.map +1 -0
  9. package/dist/cjs/integration/interfaces/configuration-factory.interface.js +3 -0
  10. package/dist/cjs/integration/interfaces/configuration-factory.interface.js.map +1 -0
  11. package/dist/cjs/integration/interfaces/configuration-source.interface.js +3 -0
  12. package/dist/cjs/integration/interfaces/configuration-source.interface.js.map +1 -0
  13. package/dist/cjs/integration/interfaces/index.js +26 -0
  14. package/dist/cjs/integration/interfaces/index.js.map +1 -0
  15. package/dist/cjs/integration/interfaces/integration-options.interface.js +3 -0
  16. package/dist/cjs/integration/interfaces/integration-options.interface.js.map +1 -0
  17. package/dist/cjs/integration/interfaces/integration-state.interface.js +3 -0
  18. package/dist/cjs/integration/interfaces/integration-state.interface.js.map +1 -0
  19. package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js +73 -0
  20. package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js.map +1 -0
  21. package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js +3 -0
  22. package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js.map +1 -0
  23. package/dist/cjs/integration/interfaces/typed-configuration.interface.js +4 -0
  24. package/dist/cjs/integration/interfaces/typed-configuration.interface.js.map +1 -0
  25. package/dist/cjs/integration/interfaces/utility-types.interface.js +52 -0
  26. package/dist/cjs/integration/interfaces/utility-types.interface.js.map +1 -0
  27. package/dist/cjs/integration/nestjs-config-integration.module.js +124 -0
  28. package/dist/cjs/integration/nestjs-config-integration.module.js.map +1 -0
  29. package/dist/cjs/integration/providers/aws-configuration-loader.service.js +591 -0
  30. package/dist/cjs/integration/providers/aws-configuration-loader.service.js.map +1 -0
  31. package/dist/cjs/integration/providers/configuration-factory.provider.js +383 -0
  32. package/dist/cjs/integration/providers/configuration-factory.provider.js.map +1 -0
  33. package/dist/cjs/integration/providers/index.js +20 -0
  34. package/dist/cjs/integration/providers/index.js.map +1 -0
  35. package/dist/cjs/integration/services/async-config-helper.service.js +356 -0
  36. package/dist/cjs/integration/services/async-config-helper.service.js.map +1 -0
  37. package/dist/cjs/integration/services/error-handler.service.js +265 -0
  38. package/dist/cjs/integration/services/error-handler.service.js.map +1 -0
  39. package/dist/cjs/integration/services/factory-registration.service.js +512 -0
  40. package/dist/cjs/integration/services/factory-registration.service.js.map +1 -0
  41. package/dist/cjs/integration/services/index.js +26 -0
  42. package/dist/cjs/integration/services/index.js.map +1 -0
  43. package/dist/cjs/integration/services/integration-state.service.js +83 -0
  44. package/dist/cjs/integration/services/integration-state.service.js.map +1 -0
  45. package/dist/cjs/integration/services/namespace-handler.service.js +467 -0
  46. package/dist/cjs/integration/services/namespace-handler.service.js.map +1 -0
  47. package/dist/cjs/integration/services/nestjs-config-integration.service.js +316 -0
  48. package/dist/cjs/integration/services/nestjs-config-integration.service.js.map +1 -0
  49. package/dist/cjs/integration/services/precedence-handler.service.js +294 -0
  50. package/dist/cjs/integration/services/precedence-handler.service.js.map +1 -0
  51. package/dist/cjs/integration/services/validation-integration.service.js +591 -0
  52. package/dist/cjs/integration/services/validation-integration.service.js.map +1 -0
  53. package/dist/cjs/integration/utils/config-integration.util.js +283 -0
  54. package/dist/cjs/integration/utils/config-integration.util.js.map +1 -0
  55. package/dist/cjs/integration/utils/index.js +19 -0
  56. package/dist/cjs/integration/utils/index.js.map +1 -0
  57. package/dist/cjs/interfaces/config-loader.interface.js +3 -0
  58. package/dist/cjs/interfaces/config-loader.interface.js.map +1 -0
  59. package/dist/cjs/interfaces/config-service.interface.js +11 -0
  60. package/dist/cjs/interfaces/config-service.interface.js.map +1 -0
  61. package/dist/cjs/interfaces/default-schema.interface.js +63 -0
  62. package/dist/cjs/interfaces/default-schema.interface.js.map +1 -0
  63. package/dist/cjs/interfaces/errors.interface.js +77 -0
  64. package/dist/cjs/interfaces/errors.interface.js.map +1 -0
  65. package/dist/cjs/interfaces/index.js +25 -0
  66. package/dist/cjs/interfaces/index.js.map +1 -0
  67. package/dist/cjs/interfaces/module-options.interface.js +3 -0
  68. package/dist/cjs/interfaces/module-options.interface.js.map +1 -0
  69. package/dist/cjs/loaders/environment.loader.js +59 -0
  70. package/dist/cjs/loaders/environment.loader.js.map +1 -0
  71. package/dist/cjs/loaders/secrets-manager.loader.js +122 -0
  72. package/dist/cjs/loaders/secrets-manager.loader.js.map +1 -0
  73. package/dist/cjs/loaders/ssm-parameter-store.loader.js +146 -0
  74. package/dist/cjs/loaders/ssm-parameter-store.loader.js.map +1 -0
  75. package/dist/cjs/services/config.service.js +297 -0
  76. package/dist/cjs/services/config.service.js.map +1 -0
  77. package/dist/cjs/utils/validation.util.js +114 -0
  78. package/dist/cjs/utils/validation.util.js.map +1 -0
  79. package/dist/esm/config.module.js +175 -0
  80. package/dist/esm/config.module.js.map +1 -0
  81. package/dist/esm/index.js +18 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/integration/index.js +7 -0
  84. package/dist/esm/integration/index.js.map +1 -0
  85. package/dist/esm/integration/interfaces/configuration-factory.interface.js +2 -0
  86. package/dist/esm/integration/interfaces/configuration-factory.interface.js.map +1 -0
  87. package/dist/esm/integration/interfaces/configuration-source.interface.js +2 -0
  88. package/dist/esm/integration/interfaces/configuration-source.interface.js.map +1 -0
  89. package/dist/esm/integration/interfaces/index.js +10 -0
  90. package/dist/esm/integration/interfaces/index.js.map +1 -0
  91. package/dist/esm/integration/interfaces/integration-options.interface.js +2 -0
  92. package/dist/esm/integration/interfaces/integration-options.interface.js.map +1 -0
  93. package/dist/esm/integration/interfaces/integration-state.interface.js +2 -0
  94. package/dist/esm/integration/interfaces/integration-state.interface.js.map +1 -0
  95. package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js +64 -0
  96. package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js.map +1 -0
  97. package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js +2 -0
  98. package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js.map +1 -0
  99. package/dist/esm/integration/interfaces/typed-configuration.interface.js +3 -0
  100. package/dist/esm/integration/interfaces/typed-configuration.interface.js.map +1 -0
  101. package/dist/esm/integration/interfaces/utility-types.interface.js +44 -0
  102. package/dist/esm/integration/interfaces/utility-types.interface.js.map +1 -0
  103. package/dist/esm/integration/nestjs-config-integration.module.js +121 -0
  104. package/dist/esm/integration/nestjs-config-integration.module.js.map +1 -0
  105. package/dist/esm/integration/providers/aws-configuration-loader.service.js +588 -0
  106. package/dist/esm/integration/providers/aws-configuration-loader.service.js.map +1 -0
  107. package/dist/esm/integration/providers/configuration-factory.provider.js +380 -0
  108. package/dist/esm/integration/providers/configuration-factory.provider.js.map +1 -0
  109. package/dist/esm/integration/providers/index.js +4 -0
  110. package/dist/esm/integration/providers/index.js.map +1 -0
  111. package/dist/esm/integration/services/async-config-helper.service.js +353 -0
  112. package/dist/esm/integration/services/async-config-helper.service.js.map +1 -0
  113. package/dist/esm/integration/services/error-handler.service.js +262 -0
  114. package/dist/esm/integration/services/error-handler.service.js.map +1 -0
  115. package/dist/esm/integration/services/factory-registration.service.js +509 -0
  116. package/dist/esm/integration/services/factory-registration.service.js.map +1 -0
  117. package/dist/esm/integration/services/index.js +10 -0
  118. package/dist/esm/integration/services/index.js.map +1 -0
  119. package/dist/esm/integration/services/integration-state.service.js +80 -0
  120. package/dist/esm/integration/services/integration-state.service.js.map +1 -0
  121. package/dist/esm/integration/services/namespace-handler.service.js +464 -0
  122. package/dist/esm/integration/services/namespace-handler.service.js.map +1 -0
  123. package/dist/esm/integration/services/nestjs-config-integration.service.js +313 -0
  124. package/dist/esm/integration/services/nestjs-config-integration.service.js.map +1 -0
  125. package/dist/esm/integration/services/precedence-handler.service.js +291 -0
  126. package/dist/esm/integration/services/precedence-handler.service.js.map +1 -0
  127. package/dist/esm/integration/services/validation-integration.service.js +585 -0
  128. package/dist/esm/integration/services/validation-integration.service.js.map +1 -0
  129. package/dist/esm/integration/utils/config-integration.util.js +240 -0
  130. package/dist/esm/integration/utils/config-integration.util.js.map +1 -0
  131. package/dist/esm/integration/utils/index.js +3 -0
  132. package/dist/esm/integration/utils/index.js.map +1 -0
  133. package/dist/esm/interfaces/config-loader.interface.js +2 -0
  134. package/dist/esm/interfaces/config-loader.interface.js.map +1 -0
  135. package/dist/esm/interfaces/config-service.interface.js +7 -0
  136. package/dist/esm/interfaces/config-service.interface.js.map +1 -0
  137. package/dist/esm/interfaces/default-schema.interface.js +59 -0
  138. package/dist/esm/interfaces/default-schema.interface.js.map +1 -0
  139. package/dist/esm/interfaces/errors.interface.js +69 -0
  140. package/dist/esm/interfaces/errors.interface.js.map +1 -0
  141. package/dist/esm/interfaces/index.js +9 -0
  142. package/dist/esm/interfaces/index.js.map +1 -0
  143. package/dist/esm/interfaces/module-options.interface.js +2 -0
  144. package/dist/esm/interfaces/module-options.interface.js.map +1 -0
  145. package/dist/esm/loaders/environment.loader.js +55 -0
  146. package/dist/esm/loaders/environment.loader.js.map +1 -0
  147. package/dist/esm/loaders/secrets-manager.loader.js +118 -0
  148. package/dist/esm/loaders/secrets-manager.loader.js.map +1 -0
  149. package/dist/esm/loaders/ssm-parameter-store.loader.js +142 -0
  150. package/dist/esm/loaders/ssm-parameter-store.loader.js.map +1 -0
  151. package/dist/esm/services/config.service.js +261 -0
  152. package/dist/esm/services/config.service.js.map +1 -0
  153. package/dist/esm/utils/validation.util.js +110 -0
  154. package/dist/esm/utils/validation.util.js.map +1 -0
  155. package/dist/types/config.module.d.ts +46 -0
  156. package/dist/types/config.module.d.ts.map +1 -0
  157. package/dist/types/index.d.ts +13 -0
  158. package/dist/types/index.d.ts.map +1 -0
  159. package/dist/types/integration/index.d.ts +6 -0
  160. package/dist/types/integration/index.d.ts.map +1 -0
  161. package/dist/types/integration/interfaces/configuration-factory.interface.d.ts +71 -0
  162. package/dist/types/integration/interfaces/configuration-factory.interface.d.ts.map +1 -0
  163. package/dist/types/integration/interfaces/configuration-source.interface.d.ts +24 -0
  164. package/dist/types/integration/interfaces/configuration-source.interface.d.ts.map +1 -0
  165. package/dist/types/integration/interfaces/index.d.ts +9 -0
  166. package/dist/types/integration/interfaces/index.d.ts.map +1 -0
  167. package/dist/types/integration/interfaces/integration-options.interface.d.ts +66 -0
  168. package/dist/types/integration/interfaces/integration-options.interface.d.ts.map +1 -0
  169. package/dist/types/integration/interfaces/integration-state.interface.d.ts +17 -0
  170. package/dist/types/integration/interfaces/integration-state.interface.d.ts.map +1 -0
  171. package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts +332 -0
  172. package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +1 -0
  173. package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts +259 -0
  174. package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts.map +1 -0
  175. package/dist/types/integration/interfaces/typed-configuration.interface.d.ts +209 -0
  176. package/dist/types/integration/interfaces/typed-configuration.interface.d.ts.map +1 -0
  177. package/dist/types/integration/interfaces/utility-types.interface.d.ts +249 -0
  178. package/dist/types/integration/interfaces/utility-types.interface.d.ts.map +1 -0
  179. package/dist/types/integration/nestjs-config-integration.module.d.ts +36 -0
  180. package/dist/types/integration/nestjs-config-integration.module.d.ts.map +1 -0
  181. package/dist/types/integration/providers/aws-configuration-loader.service.d.ts +134 -0
  182. package/dist/types/integration/providers/aws-configuration-loader.service.d.ts.map +1 -0
  183. package/dist/types/integration/providers/configuration-factory.provider.d.ts +119 -0
  184. package/dist/types/integration/providers/configuration-factory.provider.d.ts.map +1 -0
  185. package/dist/types/integration/providers/index.d.ts +3 -0
  186. package/dist/types/integration/providers/index.d.ts.map +1 -0
  187. package/dist/types/integration/services/async-config-helper.service.d.ts +84 -0
  188. package/dist/types/integration/services/async-config-helper.service.d.ts.map +1 -0
  189. package/dist/types/integration/services/error-handler.service.d.ts +84 -0
  190. package/dist/types/integration/services/error-handler.service.d.ts.map +1 -0
  191. package/dist/types/integration/services/factory-registration.service.d.ts +158 -0
  192. package/dist/types/integration/services/factory-registration.service.d.ts.map +1 -0
  193. package/dist/types/integration/services/index.d.ts +9 -0
  194. package/dist/types/integration/services/index.d.ts.map +1 -0
  195. package/dist/types/integration/services/integration-state.service.d.ts +41 -0
  196. package/dist/types/integration/services/integration-state.service.d.ts.map +1 -0
  197. package/dist/types/integration/services/namespace-handler.service.d.ts +192 -0
  198. package/dist/types/integration/services/namespace-handler.service.d.ts.map +1 -0
  199. package/dist/types/integration/services/nestjs-config-integration.service.d.ts +87 -0
  200. package/dist/types/integration/services/nestjs-config-integration.service.d.ts.map +1 -0
  201. package/dist/types/integration/services/precedence-handler.service.d.ts +103 -0
  202. package/dist/types/integration/services/precedence-handler.service.d.ts.map +1 -0
  203. package/dist/types/integration/services/validation-integration.service.d.ts +222 -0
  204. package/dist/types/integration/services/validation-integration.service.d.ts.map +1 -0
  205. package/dist/types/integration/utils/config-integration.util.d.ts +81 -0
  206. package/dist/types/integration/utils/config-integration.util.d.ts.map +1 -0
  207. package/dist/types/integration/utils/index.d.ts +2 -0
  208. package/dist/types/integration/utils/index.d.ts.map +1 -0
  209. package/dist/types/interfaces/config-loader.interface.d.ts +22 -0
  210. package/dist/types/interfaces/config-loader.interface.d.ts.map +1 -0
  211. package/dist/types/interfaces/config-service.interface.d.ts +23 -0
  212. package/dist/types/interfaces/config-service.interface.d.ts.map +1 -0
  213. package/dist/types/interfaces/default-schema.interface.d.ts +195 -0
  214. package/dist/types/interfaces/default-schema.interface.d.ts.map +1 -0
  215. package/dist/types/interfaces/errors.interface.d.ts +38 -0
  216. package/dist/types/interfaces/errors.interface.d.ts.map +1 -0
  217. package/dist/types/interfaces/index.d.ts +6 -0
  218. package/dist/types/interfaces/index.d.ts.map +1 -0
  219. package/dist/types/interfaces/module-options.interface.d.ts +64 -0
  220. package/dist/types/interfaces/module-options.interface.d.ts.map +1 -0
  221. package/dist/types/loaders/environment.loader.d.ts +26 -0
  222. package/dist/types/loaders/environment.loader.d.ts.map +1 -0
  223. package/dist/types/loaders/secrets-manager.loader.d.ts +52 -0
  224. package/dist/types/loaders/secrets-manager.loader.d.ts.map +1 -0
  225. package/dist/types/loaders/ssm-parameter-store.loader.d.ts +68 -0
  226. package/dist/types/loaders/ssm-parameter-store.loader.d.ts.map +1 -0
  227. package/dist/types/services/config.service.d.ts +94 -0
  228. package/dist/types/services/config.service.d.ts.map +1 -0
  229. package/dist/types/utils/validation.util.d.ts +53 -0
  230. package/dist/types/utils/validation.util.d.ts.map +1 -0
  231. package/package.json +102 -0
@@ -0,0 +1,591 @@
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 ValidationIntegrationService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ValidationIntegrationService = exports.CustomValidationProvider = exports.ClassValidatorProvider = exports.JoiValidationProvider = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ /**
16
+ * Joi validation schema provider.
17
+ */
18
+ class JoiValidationProvider {
19
+ constructor() {
20
+ this.name = 'joi';
21
+ try {
22
+ // Try to import Joi dynamically
23
+ this.joi = require('joi');
24
+ }
25
+ catch (error) {
26
+ // Joi is not available
27
+ this.joi = null;
28
+ }
29
+ }
30
+ isAvailable() {
31
+ return this.joi !== null;
32
+ }
33
+ validate(config, schema) {
34
+ if (!this.joi) {
35
+ return { isValid: false, errors: ['Joi is not available'] };
36
+ }
37
+ try {
38
+ const { error } = this.joi.attempt ?
39
+ { error: null } :
40
+ schema.validate(config);
41
+ if (error) {
42
+ const errors = error.details?.map((detail) => detail.message) || [error.message];
43
+ return { isValid: false, errors };
44
+ }
45
+ return { isValid: true, errors: [] };
46
+ }
47
+ catch (error) {
48
+ const validationError = error instanceof Error ? error : new Error(String(error));
49
+ return { isValid: false, errors: [validationError.message] };
50
+ }
51
+ }
52
+ }
53
+ exports.JoiValidationProvider = JoiValidationProvider;
54
+ /**
55
+ * Class-validator validation schema provider.
56
+ */
57
+ class ClassValidatorProvider {
58
+ constructor() {
59
+ this.name = 'class-validator';
60
+ try {
61
+ // Try to import class-validator and class-transformer dynamically
62
+ this.classValidator = require('class-validator');
63
+ this.classTransformer = require('class-transformer');
64
+ }
65
+ catch (error) {
66
+ // class-validator is not available
67
+ this.classValidator = null;
68
+ this.classTransformer = null;
69
+ }
70
+ }
71
+ isAvailable() {
72
+ return this.classValidator !== null && this.classTransformer !== null;
73
+ }
74
+ validate(config, schemaClass) {
75
+ if (!this.classValidator || !this.classTransformer) {
76
+ return { isValid: false, errors: ['class-validator or class-transformer is not available'] };
77
+ }
78
+ try {
79
+ // Transform plain object to class instance
80
+ const instance = this.classTransformer.plainToClass(schemaClass, config);
81
+ // Validate the instance
82
+ const errors = this.classValidator.validateSync(instance);
83
+ if (errors && errors.length > 0) {
84
+ const errorMessages = errors.map((error) => {
85
+ const constraints = error.constraints || {};
86
+ return Object.values(constraints).join(', ');
87
+ }).filter((msg) => msg.length > 0);
88
+ return { isValid: false, errors: errorMessages };
89
+ }
90
+ return { isValid: true, errors: [] };
91
+ }
92
+ catch (error) {
93
+ const validationError = error instanceof Error ? error : new Error(String(error));
94
+ return { isValid: false, errors: [validationError.message] };
95
+ }
96
+ }
97
+ }
98
+ exports.ClassValidatorProvider = ClassValidatorProvider;
99
+ /**
100
+ * Custom validation function provider.
101
+ */
102
+ class CustomValidationProvider {
103
+ constructor() {
104
+ this.name = 'custom';
105
+ }
106
+ isAvailable() {
107
+ return true;
108
+ }
109
+ validate(config, validationFn) {
110
+ try {
111
+ const result = validationFn(config);
112
+ if (Array.isArray(result) && result.length > 0) {
113
+ return { isValid: false, errors: result };
114
+ }
115
+ return { isValid: true, errors: [] };
116
+ }
117
+ catch (error) {
118
+ const validationError = error instanceof Error ? error : new Error(String(error));
119
+ return { isValid: false, errors: [validationError.message] };
120
+ }
121
+ }
122
+ }
123
+ exports.CustomValidationProvider = CustomValidationProvider;
124
+ /**
125
+ * Service for integrating AWS-sourced configuration with @nestjs/config validation.
126
+ * Supports Joi, class-validator, and custom validation functions.
127
+ */
128
+ let ValidationIntegrationService = ValidationIntegrationService_1 = class ValidationIntegrationService {
129
+ constructor() {
130
+ this.logger = new common_1.Logger(ValidationIntegrationService_1.name);
131
+ this.validationProviders = new Map();
132
+ // Register available validation providers
133
+ this.registerValidationProviders();
134
+ }
135
+ /**
136
+ * Create a validated configuration factory.
137
+ * This factory will validate AWS-sourced configuration before returning it.
138
+ *
139
+ * @param namespace - Optional namespace for the configuration
140
+ * @param config - Configuration data to validate
141
+ * @param validationSchema - Validation schema (Joi schema, class-validator class, or custom function)
142
+ * @param validationType - Type of validation ('joi', 'class-validator', or 'custom')
143
+ * @param sources - Configuration sources metadata
144
+ * @returns Validated configuration factory
145
+ */
146
+ createValidatedFactory(namespace, config, validationSchema, validationType, sources) {
147
+ this.logger.debug(`Creating validated factory for namespace: ${namespace || 'default'} with ${validationType} validation`);
148
+ const factory = () => {
149
+ this.logger.debug(`Validated factory called for namespace: ${namespace || 'default'}`);
150
+ // Validate configuration
151
+ const validationResult = this.validateConfiguration(config, validationSchema, validationType, sources);
152
+ if (!validationResult.isValid) {
153
+ const errorMessage = `Configuration validation failed for ${namespace || 'default'}: ${validationResult.errors.join(', ')}`;
154
+ this.logger.error(errorMessage);
155
+ // Create detailed error with source information
156
+ const detailedError = this.createValidationError(namespace || 'default', validationResult.errors, sources);
157
+ throw detailedError;
158
+ }
159
+ this.logger.debug(`Configuration validation passed for namespace: ${namespace || 'default'}`);
160
+ return config;
161
+ };
162
+ // Add validation metadata
163
+ factory.__isValidatedFactory = true;
164
+ factory.__validationType = validationType;
165
+ factory.__namespace = namespace;
166
+ factory.__sources = sources?.map(s => s.name) || [];
167
+ return factory;
168
+ }
169
+ /**
170
+ * Validate configuration using the specified validation type and schema.
171
+ *
172
+ * @param config - Configuration to validate
173
+ * @param schema - Validation schema
174
+ * @param validationType - Type of validation
175
+ * @param sources - Configuration sources for error reporting
176
+ * @returns Validation result
177
+ */
178
+ validateConfiguration(config, schema, validationType, sources) {
179
+ const provider = this.validationProviders.get(validationType);
180
+ if (!provider) {
181
+ return {
182
+ isValid: false,
183
+ errors: [`Validation provider '${validationType}' is not available`],
184
+ warnings: []
185
+ };
186
+ }
187
+ if (!provider.isAvailable()) {
188
+ return {
189
+ isValid: false,
190
+ errors: [`Validation provider '${validationType}' is not properly configured`],
191
+ warnings: []
192
+ };
193
+ }
194
+ try {
195
+ const result = provider.validate(config, schema);
196
+ // Add source information to errors
197
+ const enhancedErrors = result.errors.map(error => this.enhanceErrorWithSourceInfo(error, sources));
198
+ return {
199
+ isValid: result.isValid,
200
+ errors: enhancedErrors,
201
+ warnings: []
202
+ };
203
+ }
204
+ catch (error) {
205
+ const validationError = error instanceof Error ? error : new Error(String(error));
206
+ return {
207
+ isValid: false,
208
+ errors: [validationError.message],
209
+ warnings: []
210
+ };
211
+ }
212
+ }
213
+ /**
214
+ * Create a factory that validates configuration and provides fallback values.
215
+ *
216
+ * @param namespace - Optional namespace
217
+ * @param config - Configuration data
218
+ * @param validationSchema - Validation schema
219
+ * @param validationType - Type of validation
220
+ * @param fallbackConfig - Fallback configuration to use if validation fails
221
+ * @param sources - Configuration sources
222
+ * @returns Factory with validation and fallback
223
+ */
224
+ createValidatedFactoryWithFallback(namespace, config, validationSchema, validationType, fallbackConfig, sources) {
225
+ this.logger.debug(`Creating validated factory with fallback for namespace: ${namespace || 'default'}`);
226
+ const factory = () => {
227
+ this.logger.debug(`Validated factory with fallback called for namespace: ${namespace || 'default'}`);
228
+ // Validate configuration
229
+ const validationResult = this.validateConfiguration(config, validationSchema, validationType, sources);
230
+ if (!validationResult.isValid) {
231
+ this.logger.warn(`Configuration validation failed for ${namespace || 'default'}, using fallback: ${validationResult.errors.join(', ')}`);
232
+ // Validate fallback configuration
233
+ const fallbackValidation = this.validateConfiguration(fallbackConfig, validationSchema, validationType);
234
+ if (fallbackValidation.isValid) {
235
+ return fallbackConfig;
236
+ }
237
+ else {
238
+ // Both primary and fallback failed
239
+ const errorMessage = `Both primary and fallback configuration validation failed for ${namespace || 'default'}`;
240
+ this.logger.error(errorMessage);
241
+ const detailedError = this.createValidationError(namespace || 'default', [...validationResult.errors, ...fallbackValidation.errors], sources);
242
+ throw detailedError;
243
+ }
244
+ }
245
+ this.logger.debug(`Configuration validation passed for namespace: ${namespace || 'default'}`);
246
+ return config;
247
+ };
248
+ // Add metadata
249
+ factory.__isValidatedFactory = true;
250
+ factory.__hasFallback = true;
251
+ factory.__validationType = validationType;
252
+ factory.__namespace = namespace;
253
+ factory.__sources = sources?.map(s => s.name) || [];
254
+ return factory;
255
+ }
256
+ /**
257
+ * Validate multiple namespace configurations.
258
+ *
259
+ * @param namespacedConfig - Configuration organized by namespace
260
+ * @param validationSchemas - Validation schemas for each namespace
261
+ * @param validationType - Type of validation
262
+ * @param sources - Configuration sources
263
+ * @returns Validation results for each namespace
264
+ */
265
+ validateNamespacedConfiguration(namespacedConfig, validationSchemas, validationType, sources) {
266
+ const results = {};
267
+ for (const [namespace, config] of Object.entries(namespacedConfig)) {
268
+ const schema = validationSchemas[namespace];
269
+ if (schema) {
270
+ results[namespace] = this.validateConfiguration(config, schema, validationType, sources);
271
+ }
272
+ else {
273
+ results[namespace] = {
274
+ isValid: true,
275
+ errors: [],
276
+ warnings: [`No validation schema provided for namespace: ${namespace}`]
277
+ };
278
+ }
279
+ }
280
+ return results;
281
+ }
282
+ /**
283
+ * Check which validation providers are available.
284
+ *
285
+ * @returns Object indicating availability of each provider
286
+ */
287
+ getAvailableValidationProviders() {
288
+ const availability = {};
289
+ for (const [name, provider] of this.validationProviders) {
290
+ availability[name] = provider.isAvailable();
291
+ }
292
+ return availability;
293
+ }
294
+ /**
295
+ * Get validation recommendations based on configuration structure.
296
+ *
297
+ * @param config - Configuration to analyze
298
+ * @returns Validation recommendations
299
+ */
300
+ getValidationRecommendations(config) {
301
+ const analysis = this.analyzeConfigurationStructure(config);
302
+ let recommendedProvider = 'custom';
303
+ const reasons = [];
304
+ const examples = {};
305
+ // Determine best validation approach
306
+ if (analysis.hasComplexNesting || analysis.hasArrays) {
307
+ if (this.validationProviders.get('joi')?.isAvailable()) {
308
+ recommendedProvider = 'joi';
309
+ reasons.push('Complex nested structure detected - Joi provides excellent nested validation');
310
+ examples['joi'] = this.generateJoiExample(config);
311
+ }
312
+ }
313
+ if (analysis.hasTypedValues && this.validationProviders.get('class-validator')?.isAvailable()) {
314
+ recommendedProvider = 'class-validator';
315
+ reasons.push('Typed values detected - class-validator provides strong type safety');
316
+ examples['class-validator'] = this.generateClassValidatorExample(config);
317
+ }
318
+ // Always provide custom example
319
+ examples['custom'] = this.generateCustomValidationExample(config);
320
+ return {
321
+ recommendedProvider,
322
+ reasons,
323
+ examples
324
+ };
325
+ }
326
+ /**
327
+ * Register validation providers.
328
+ */
329
+ registerValidationProviders() {
330
+ this.validationProviders.set('joi', new JoiValidationProvider());
331
+ this.validationProviders.set('class-validator', new ClassValidatorProvider());
332
+ this.validationProviders.set('custom', new CustomValidationProvider());
333
+ // Log available providers
334
+ const available = Array.from(this.validationProviders.entries())
335
+ .filter(([_, provider]) => provider.isAvailable())
336
+ .map(([name]) => name);
337
+ this.logger.debug(`Available validation providers: ${available.join(', ')}`);
338
+ }
339
+ /**
340
+ * Create a detailed validation error with source information.
341
+ *
342
+ * @param namespace - Namespace that failed validation
343
+ * @param errors - Validation errors
344
+ * @param sources - Configuration sources
345
+ * @returns Detailed error
346
+ */
347
+ createValidationError(namespace, errors, sources) {
348
+ let message = `Configuration validation failed for namespace '${namespace}':\n`;
349
+ message += errors.map(error => ` - ${error}`).join('\n');
350
+ if (sources && sources.length > 0) {
351
+ message += '\n\nConfiguration sources:\n';
352
+ message += sources.map(source => ` - ${source.name} (${source.type}): ${Object.keys(source.data).length} keys`).join('\n');
353
+ }
354
+ const error = new Error(message);
355
+ error.name = 'ConfigurationValidationError';
356
+ error.namespace = namespace;
357
+ error.validationErrors = errors;
358
+ error.sources = sources;
359
+ return error;
360
+ }
361
+ /**
362
+ * Enhance error message with source information.
363
+ *
364
+ * @param error - Original error message
365
+ * @param sources - Configuration sources
366
+ * @returns Enhanced error message
367
+ */
368
+ enhanceErrorWithSourceInfo(error, sources) {
369
+ if (!sources || sources.length === 0) {
370
+ return error;
371
+ }
372
+ const sourceNames = sources.map(s => s.name).join(', ');
373
+ return `${error} (from sources: ${sourceNames})`;
374
+ }
375
+ /**
376
+ * Analyze configuration structure for validation recommendations.
377
+ *
378
+ * @param config - Configuration to analyze
379
+ * @returns Structure analysis
380
+ */
381
+ analyzeConfigurationStructure(config) {
382
+ let hasComplexNesting = false;
383
+ let hasArrays = false;
384
+ let hasTypedValues = false;
385
+ let maxDepth = 0;
386
+ const analyze = (obj, depth = 0) => {
387
+ maxDepth = Math.max(maxDepth, depth);
388
+ if (depth > 2) {
389
+ hasComplexNesting = true;
390
+ }
391
+ for (const value of Object.values(obj)) {
392
+ if (Array.isArray(value)) {
393
+ hasArrays = true;
394
+ }
395
+ else if (typeof value === 'object' && value !== null) {
396
+ analyze(value, depth + 1);
397
+ }
398
+ else if (typeof value === 'number' || typeof value === 'boolean') {
399
+ hasTypedValues = true;
400
+ }
401
+ }
402
+ };
403
+ analyze(config);
404
+ return {
405
+ hasComplexNesting,
406
+ hasArrays,
407
+ hasTypedValues,
408
+ depth: maxDepth
409
+ };
410
+ }
411
+ /**
412
+ * Generate Joi validation example.
413
+ *
414
+ * @param config - Configuration to generate example for
415
+ * @returns Joi validation example
416
+ */
417
+ generateJoiExample(config) {
418
+ const schema = this.generateJoiSchemaFromConfig(config);
419
+ return `const Joi = require('joi');
420
+
421
+ const schema = ${schema};
422
+
423
+ // Usage in factory
424
+ const factory = () => {
425
+ const config = loadAwsConfig();
426
+ const { error, value } = schema.validate(config);
427
+ if (error) throw error;
428
+ return value;
429
+ };`;
430
+ }
431
+ /**
432
+ * Generate class-validator example.
433
+ *
434
+ * @param config - Configuration to generate example for
435
+ * @returns class-validator example
436
+ */
437
+ generateClassValidatorExample(config) {
438
+ const classDefinition = this.generateClassFromConfig(config);
439
+ return `import { IsString, IsNumber, IsOptional, validateSync } from 'class-validator';
440
+ import { plainToClass } from 'class-transformer';
441
+
442
+ ${classDefinition}
443
+
444
+ // Usage in factory
445
+ const factory = () => {
446
+ const config = loadAwsConfig();
447
+ const instance = plainToClass(ConfigClass, config);
448
+ const errors = validateSync(instance);
449
+ if (errors.length > 0) throw new Error('Validation failed');
450
+ return config;
451
+ };`;
452
+ }
453
+ /**
454
+ * Generate custom validation example.
455
+ *
456
+ * @param config - Configuration to generate example for
457
+ * @returns Custom validation example
458
+ */
459
+ generateCustomValidationExample(config) {
460
+ const validationChecks = this.generateValidationChecks(config);
461
+ return `const validateConfig = (config) => {
462
+ const errors = [];
463
+
464
+ ${validationChecks}
465
+
466
+ return errors;
467
+ };
468
+
469
+ // Usage in factory
470
+ const factory = () => {
471
+ const config = loadAwsConfig();
472
+ const errors = validateConfig(config);
473
+ if (errors.length > 0) throw new Error(\`Validation failed: \${errors.join(', ')}\`);
474
+ return config;
475
+ };`;
476
+ }
477
+ /**
478
+ * Generate Joi schema from configuration structure.
479
+ *
480
+ * @param config - Configuration object
481
+ * @returns Joi schema string
482
+ */
483
+ generateJoiSchemaFromConfig(config) {
484
+ const generateSchema = (obj) => {
485
+ if (typeof obj === 'string')
486
+ return 'Joi.string()';
487
+ if (typeof obj === 'number')
488
+ return 'Joi.number()';
489
+ if (typeof obj === 'boolean')
490
+ return 'Joi.boolean()';
491
+ if (Array.isArray(obj))
492
+ return 'Joi.array()';
493
+ if (typeof obj === 'object' && obj !== null) {
494
+ const properties = Object.entries(obj)
495
+ .map(([key, value]) => ` ${key}: ${generateSchema(value)}`)
496
+ .join(',\n');
497
+ return `Joi.object({\n${properties}\n})`;
498
+ }
499
+ return 'Joi.any()';
500
+ };
501
+ return generateSchema(config);
502
+ }
503
+ /**
504
+ * Generate class definition from configuration structure.
505
+ *
506
+ * @param config - Configuration object
507
+ * @returns Class definition string
508
+ */
509
+ generateClassFromConfig(config) {
510
+ const properties = Object.entries(config)
511
+ .map(([key, value]) => {
512
+ const decorator = this.getClassValidatorDecorator(value);
513
+ return ` ${decorator}\n ${key}: ${this.getTypeScriptType(value)};`;
514
+ })
515
+ .join('\n\n');
516
+ return `class ConfigClass {\n${properties}\n}`;
517
+ }
518
+ /**
519
+ * Generate validation checks for custom validation.
520
+ *
521
+ * @param config - Configuration object
522
+ * @returns Validation checks string
523
+ */
524
+ generateValidationChecks(config) {
525
+ return Object.entries(config)
526
+ .map(([key, value]) => {
527
+ const check = this.getValidationCheck(key, value);
528
+ return ` ${check}`;
529
+ })
530
+ .join('\n');
531
+ }
532
+ /**
533
+ * Get class-validator decorator for a value.
534
+ *
535
+ * @param value - Value to get decorator for
536
+ * @returns Decorator string
537
+ */
538
+ getClassValidatorDecorator(value) {
539
+ if (typeof value === 'string')
540
+ return '@IsString()';
541
+ if (typeof value === 'number')
542
+ return '@IsNumber()';
543
+ if (typeof value === 'boolean')
544
+ return '@IsBoolean()';
545
+ return '@IsOptional()';
546
+ }
547
+ /**
548
+ * Get TypeScript type for a value.
549
+ *
550
+ * @param value - Value to get type for
551
+ * @returns TypeScript type string
552
+ */
553
+ getTypeScriptType(value) {
554
+ if (typeof value === 'string')
555
+ return 'string';
556
+ if (typeof value === 'number')
557
+ return 'number';
558
+ if (typeof value === 'boolean')
559
+ return 'boolean';
560
+ if (Array.isArray(value))
561
+ return 'any[]';
562
+ if (typeof value === 'object')
563
+ return 'object';
564
+ return 'any';
565
+ }
566
+ /**
567
+ * Get validation check for custom validation.
568
+ *
569
+ * @param key - Configuration key
570
+ * @param value - Configuration value
571
+ * @returns Validation check string
572
+ */
573
+ getValidationCheck(key, value) {
574
+ if (typeof value === 'string') {
575
+ return `if (!config.${key} || typeof config.${key} !== 'string') errors.push('${key} must be a string');`;
576
+ }
577
+ if (typeof value === 'number') {
578
+ return `if (config.${key} === undefined || typeof config.${key} !== 'number') errors.push('${key} must be a number');`;
579
+ }
580
+ if (typeof value === 'boolean') {
581
+ return `if (config.${key} === undefined || typeof config.${key} !== 'boolean') errors.push('${key} must be a boolean');`;
582
+ }
583
+ return `if (config.${key} === undefined) errors.push('${key} is required');`;
584
+ }
585
+ };
586
+ exports.ValidationIntegrationService = ValidationIntegrationService;
587
+ exports.ValidationIntegrationService = ValidationIntegrationService = ValidationIntegrationService_1 = __decorate([
588
+ (0, common_1.Injectable)(),
589
+ __metadata("design:paramtypes", [])
590
+ ], ValidationIntegrationService);
591
+ //# sourceMappingURL=validation-integration.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-integration.service.js","sourceRoot":"","sources":["../../../../src/integration/services/validation-integration.service.ts"],"names":[],"mappings":"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"}