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