@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,467 @@
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 NamespaceHandlerService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.NamespaceHandlerService = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const config_1 = require("@nestjs/config");
13
+ /**
14
+ * Service for handling namespace-aware configuration loading and factory creation.
15
+ * Provides enhanced namespace support for @nestjs/config integration.
16
+ */
17
+ let NamespaceHandlerService = NamespaceHandlerService_1 = class NamespaceHandlerService {
18
+ constructor() {
19
+ this.logger = new common_1.Logger(NamespaceHandlerService_1.name);
20
+ }
21
+ /**
22
+ * Create a registerAs factory for a specific namespace.
23
+ * This method creates a factory that can be used with @nestjs/config's registerAs pattern.
24
+ *
25
+ * @param namespace - The namespace for the configuration
26
+ * @param config - The configuration data for the namespace
27
+ * @param sources - Optional configuration sources metadata
28
+ * @returns A registerAs factory for the namespace
29
+ */
30
+ createNamespaceFactory(namespace, config, sources) {
31
+ this.logger.debug(`Creating namespace factory for: ${namespace}`);
32
+ // Validate namespace
33
+ if (!this.isValidNamespace(namespace)) {
34
+ throw new Error(`Invalid namespace: ${namespace}`);
35
+ }
36
+ // Create the factory function
37
+ const factory = () => {
38
+ this.logger.debug(`Namespace factory called for: ${namespace}`);
39
+ // Process and validate configuration
40
+ const processedConfig = this.processNamespaceConfig(config, namespace);
41
+ this.logger.debug(`Namespace factory returning ${Object.keys(processedConfig).length} keys for: ${namespace}`);
42
+ return processedConfig;
43
+ };
44
+ // Create registerAs factory
45
+ const namespacedFactory = (0, config_1.registerAs)(namespace, factory);
46
+ // Add metadata for introspection and debugging
47
+ this.addFactoryMetadata(namespacedFactory, namespace, config, sources);
48
+ return namespacedFactory;
49
+ }
50
+ /**
51
+ * Create multiple namespace factories from configuration data.
52
+ *
53
+ * @param namespacedConfig - Configuration data organized by namespace
54
+ * @param sources - Optional configuration sources metadata
55
+ * @returns Array of namespace factories
56
+ */
57
+ createMultipleNamespaceFactories(namespacedConfig, sources) {
58
+ this.logger.debug(`Creating multiple namespace factories for: ${Object.keys(namespacedConfig).join(', ')}`);
59
+ const factories = [];
60
+ for (const [namespace, config] of Object.entries(namespacedConfig)) {
61
+ if (this.isValidNamespaceConfig(namespace, config)) {
62
+ try {
63
+ const namespaceSources = sources?.filter(s => s.namespace === namespace ||
64
+ s.data[namespace] !== undefined);
65
+ const factory = this.createNamespaceFactory(namespace, config, namespaceSources);
66
+ factories.push(factory);
67
+ this.logger.debug(`Created namespace factory for: ${namespace}`);
68
+ }
69
+ catch (error) {
70
+ this.logger.error(`Failed to create namespace factory for ${namespace}:`, error);
71
+ }
72
+ }
73
+ else {
74
+ this.logger.warn(`Skipping invalid namespace configuration: ${namespace}`);
75
+ }
76
+ }
77
+ this.logger.debug(`Created ${factories.length} namespace factories`);
78
+ return factories;
79
+ }
80
+ /**
81
+ * Extract namespace configuration from flat configuration using various strategies.
82
+ *
83
+ * @param config - Flat configuration object
84
+ * @param namespace - Target namespace
85
+ * @returns Configuration for the namespace
86
+ */
87
+ extractNamespaceConfig(config, namespace) {
88
+ const namespaceConfig = {};
89
+ // Strategy 1: Direct namespace key (e.g., config.database)
90
+ if (config[namespace] && typeof config[namespace] === 'object') {
91
+ Object.assign(namespaceConfig, config[namespace]);
92
+ }
93
+ // Strategy 2: Prefixed keys (e.g., DATABASE_HOST -> host)
94
+ const prefixedConfig = this.extractPrefixedConfig(config, namespace);
95
+ Object.assign(namespaceConfig, prefixedConfig);
96
+ // Strategy 3: Path-based keys (e.g., /app/database/host -> host)
97
+ const pathConfig = this.extractPathBasedConfig(config, namespace);
98
+ Object.assign(namespaceConfig, pathConfig);
99
+ return namespaceConfig;
100
+ }
101
+ /**
102
+ * Organize flat configuration into namespaces based on patterns.
103
+ *
104
+ * @param config - Flat configuration object
105
+ * @param namespaces - List of target namespaces
106
+ * @returns Configuration organized by namespace
107
+ */
108
+ organizeConfigByNamespaces(config, namespaces) {
109
+ const organized = {};
110
+ // Initialize all namespaces
111
+ for (const namespace of namespaces) {
112
+ organized[namespace] = {};
113
+ }
114
+ // Extract configuration for each namespace
115
+ for (const namespace of namespaces) {
116
+ organized[namespace] = this.extractNamespaceConfig(config, namespace);
117
+ }
118
+ // Handle remaining configuration that doesn't match any namespace
119
+ const remainingConfig = this.extractRemainingConfig(config, namespaces);
120
+ if (Object.keys(remainingConfig).length > 0) {
121
+ organized['default'] = remainingConfig;
122
+ }
123
+ return organized;
124
+ }
125
+ /**
126
+ * Validate namespace access patterns for @nestjs/config compatibility.
127
+ *
128
+ * @param namespace - Namespace to validate
129
+ * @param config - Configuration for the namespace
130
+ * @returns Validation result with suggestions
131
+ */
132
+ validateNamespaceAccess(namespace, config) {
133
+ const issues = [];
134
+ const suggestions = [];
135
+ // Check namespace name validity
136
+ if (!this.isValidNamespace(namespace)) {
137
+ issues.push(`Invalid namespace name: ${namespace}`);
138
+ suggestions.push('Use alphanumeric characters and underscores only');
139
+ }
140
+ // Check for reserved namespace names
141
+ if (this.isReservedNamespace(namespace)) {
142
+ issues.push(`Reserved namespace name: ${namespace}`);
143
+ suggestions.push('Choose a different namespace name');
144
+ }
145
+ // Check configuration structure
146
+ if (!this.isValidNamespaceConfig(namespace, config)) {
147
+ issues.push('Invalid configuration structure for namespace');
148
+ suggestions.push('Ensure configuration is a non-empty object');
149
+ }
150
+ // Check for potential key conflicts
151
+ const conflicts = this.findKeyConflicts(config);
152
+ if (conflicts.length > 0) {
153
+ issues.push(`Key conflicts found: ${conflicts.join(', ')}`);
154
+ suggestions.push('Resolve key naming conflicts');
155
+ }
156
+ return {
157
+ isValid: issues.length === 0,
158
+ issues,
159
+ suggestions
160
+ };
161
+ }
162
+ /**
163
+ * Generate access patterns documentation for a namespace.
164
+ *
165
+ * @param namespace - Namespace name
166
+ * @param config - Configuration for the namespace
167
+ * @returns Access patterns documentation
168
+ */
169
+ generateAccessPatterns(namespace, config) {
170
+ const patterns = {
171
+ injection: `@Inject(${namespace}Config.KEY)`,
172
+ service: `this.configService.get('${namespace}')`,
173
+ direct: `this.configService.get('${namespace}.key')`
174
+ };
175
+ const examples = this.generateUsageExamples(namespace, config);
176
+ return {
177
+ namespace,
178
+ patterns,
179
+ examples
180
+ };
181
+ }
182
+ /**
183
+ * Process namespace configuration with validation and transformation.
184
+ *
185
+ * @param config - Raw configuration for the namespace
186
+ * @param namespace - Namespace name
187
+ * @returns Processed configuration
188
+ */
189
+ processNamespaceConfig(config, namespace) {
190
+ // Deep clone to avoid mutations
191
+ const processed = JSON.parse(JSON.stringify(config));
192
+ // Apply transformations
193
+ this.transformConfigValues(processed);
194
+ // Validate processed configuration
195
+ this.validateProcessedConfig(processed, namespace);
196
+ return processed;
197
+ }
198
+ /**
199
+ * Extract configuration using prefix patterns.
200
+ *
201
+ * @param config - Source configuration
202
+ * @param namespace - Target namespace
203
+ * @returns Prefixed configuration
204
+ */
205
+ extractPrefixedConfig(config, namespace) {
206
+ const prefixedConfig = {};
207
+ const prefix = namespace.toUpperCase() + '_';
208
+ for (const [key, value] of Object.entries(config)) {
209
+ if (key.toUpperCase().startsWith(prefix)) {
210
+ const namespacedKey = key.substring(prefix.length);
211
+ const camelCaseKey = this.toCamelCase(namespacedKey);
212
+ if (camelCaseKey) {
213
+ prefixedConfig[camelCaseKey] = value;
214
+ }
215
+ }
216
+ }
217
+ return prefixedConfig;
218
+ }
219
+ /**
220
+ * Extract configuration using path patterns.
221
+ *
222
+ * @param config - Source configuration
223
+ * @param namespace - Target namespace
224
+ * @returns Path-based configuration
225
+ */
226
+ extractPathBasedConfig(config, namespace) {
227
+ const pathConfig = {};
228
+ const namespacePath = `/${namespace}/`;
229
+ for (const [key, value] of Object.entries(config)) {
230
+ if (key.includes(namespacePath)) {
231
+ const pathIndex = key.indexOf(namespacePath);
232
+ const afterNamespace = key.substring(pathIndex + namespacePath.length);
233
+ if (afterNamespace) {
234
+ const nestedKey = this.pathToNestedKey(afterNamespace);
235
+ this.setNestedValue(pathConfig, nestedKey, value);
236
+ }
237
+ }
238
+ }
239
+ return pathConfig;
240
+ }
241
+ /**
242
+ * Extract configuration that doesn't belong to any namespace.
243
+ *
244
+ * @param config - Source configuration
245
+ * @param namespaces - Known namespaces
246
+ * @returns Remaining configuration
247
+ */
248
+ extractRemainingConfig(config, namespaces) {
249
+ const remaining = {};
250
+ const namespacePrefixes = namespaces.map(ns => ns.toUpperCase() + '_');
251
+ const namespacePaths = namespaces.map(ns => `/${ns}/`);
252
+ for (const [key, value] of Object.entries(config)) {
253
+ const upperKey = key.toUpperCase();
254
+ // Skip if key belongs to a known namespace
255
+ const belongsToNamespace = namespaces.includes(key) ||
256
+ namespacePrefixes.some(prefix => upperKey.startsWith(prefix)) ||
257
+ namespacePaths.some(path => key.includes(path));
258
+ if (!belongsToNamespace) {
259
+ remaining[key] = value;
260
+ }
261
+ }
262
+ return remaining;
263
+ }
264
+ /**
265
+ * Add metadata to a factory for introspection.
266
+ *
267
+ * @param factory - Configuration factory
268
+ * @param namespace - Namespace name
269
+ * @param config - Configuration data
270
+ * @param sources - Configuration sources
271
+ */
272
+ addFactoryMetadata(factory, namespace, config, sources) {
273
+ factory.__namespace = namespace;
274
+ factory.__isAwsNamespaceFactory = true;
275
+ factory.__configKeys = Object.keys(config);
276
+ factory.__sources = sources?.map(s => s.name) || [];
277
+ factory.__createdAt = new Date().toISOString();
278
+ }
279
+ /**
280
+ * Transform configuration values (type conversion, etc.).
281
+ *
282
+ * @param config - Configuration to transform
283
+ */
284
+ transformConfigValues(config) {
285
+ for (const [key, value] of Object.entries(config)) {
286
+ if (typeof value === 'string') {
287
+ config[key] = this.convertStringValue(value);
288
+ }
289
+ else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
290
+ this.transformConfigValues(value);
291
+ }
292
+ }
293
+ }
294
+ /**
295
+ * Convert string values to appropriate types.
296
+ *
297
+ * @param value - String value to convert
298
+ * @returns Converted value
299
+ */
300
+ convertStringValue(value) {
301
+ // Boolean conversion
302
+ if (value.toLowerCase() === 'true')
303
+ return true;
304
+ if (value.toLowerCase() === 'false')
305
+ return false;
306
+ // Number conversion
307
+ if (/^\d+$/.test(value)) {
308
+ const num = parseInt(value, 10);
309
+ return isNaN(num) ? value : num;
310
+ }
311
+ if (/^\d*\.\d+$/.test(value)) {
312
+ const num = parseFloat(value);
313
+ return isNaN(num) ? value : num;
314
+ }
315
+ // JSON conversion
316
+ if ((value.startsWith('{') && value.endsWith('}')) ||
317
+ (value.startsWith('[') && value.endsWith(']'))) {
318
+ try {
319
+ return JSON.parse(value);
320
+ }
321
+ catch {
322
+ return value;
323
+ }
324
+ }
325
+ return value;
326
+ }
327
+ /**
328
+ * Validate processed configuration.
329
+ *
330
+ * @param config - Configuration to validate
331
+ * @param namespace - Namespace name
332
+ */
333
+ validateProcessedConfig(config, namespace) {
334
+ if (!config || typeof config !== 'object') {
335
+ throw new Error(`Invalid processed configuration for namespace: ${namespace}`);
336
+ }
337
+ // Additional validation can be added here
338
+ }
339
+ /**
340
+ * Convert snake_case or kebab-case to camelCase.
341
+ *
342
+ * @param str - String to convert
343
+ * @returns camelCase string
344
+ */
345
+ toCamelCase(str) {
346
+ return str
347
+ .toLowerCase()
348
+ .replace(/[_-](.)/g, (_, char) => char.toUpperCase());
349
+ }
350
+ /**
351
+ * Convert path segments to nested key structure.
352
+ *
353
+ * @param path - Path string
354
+ * @returns Nested key structure
355
+ */
356
+ pathToNestedKey(path) {
357
+ return path
358
+ .split('/')
359
+ .map(segment => this.toCamelCase(segment))
360
+ .join('.');
361
+ }
362
+ /**
363
+ * Set a nested value in an object using dot notation.
364
+ *
365
+ * @param obj - Target object
366
+ * @param path - Dot notation path
367
+ * @param value - Value to set
368
+ */
369
+ setNestedValue(obj, path, value) {
370
+ const keys = path.split('.');
371
+ let current = obj;
372
+ for (let i = 0; i < keys.length - 1; i++) {
373
+ const key = keys[i];
374
+ if (key && (!(key in current) || typeof current[key] !== 'object')) {
375
+ current[key] = {};
376
+ }
377
+ if (key) {
378
+ current = current[key];
379
+ }
380
+ }
381
+ const lastKey = keys[keys.length - 1];
382
+ if (lastKey) {
383
+ current[lastKey] = value;
384
+ }
385
+ }
386
+ /**
387
+ * Validate namespace name.
388
+ *
389
+ * @param namespace - Namespace to validate
390
+ * @returns Whether namespace is valid
391
+ */
392
+ isValidNamespace(namespace) {
393
+ return typeof namespace === 'string' &&
394
+ namespace.trim() !== '' &&
395
+ /^[a-zA-Z][a-zA-Z0-9_]*$/.test(namespace);
396
+ }
397
+ /**
398
+ * Check if namespace is reserved.
399
+ *
400
+ * @param namespace - Namespace to check
401
+ * @returns Whether namespace is reserved
402
+ */
403
+ isReservedNamespace(namespace) {
404
+ const reserved = ['config', 'env', 'process', 'global', 'default', 'root'];
405
+ return reserved.includes(namespace.toLowerCase());
406
+ }
407
+ /**
408
+ * Validate namespace configuration.
409
+ *
410
+ * @param namespace - Namespace name
411
+ * @param config - Configuration data
412
+ * @returns Whether configuration is valid
413
+ */
414
+ isValidNamespaceConfig(namespace, config) {
415
+ return typeof namespace === 'string' &&
416
+ namespace.trim() !== '' &&
417
+ config !== null &&
418
+ config !== undefined &&
419
+ typeof config === 'object' &&
420
+ !Array.isArray(config) &&
421
+ Object.keys(config).length > 0;
422
+ }
423
+ /**
424
+ * Find key conflicts in configuration.
425
+ *
426
+ * @param config - Configuration to check
427
+ * @returns Array of conflicting keys
428
+ */
429
+ findKeyConflicts(config) {
430
+ const conflicts = [];
431
+ const keys = Object.keys(config);
432
+ // Check for case-insensitive duplicates
433
+ const lowerKeys = keys.map(k => k.toLowerCase());
434
+ const duplicates = lowerKeys.filter((key, index) => lowerKeys.indexOf(key) !== index);
435
+ conflicts.push(...duplicates);
436
+ return [...new Set(conflicts)];
437
+ }
438
+ /**
439
+ * Generate usage examples for a namespace.
440
+ *
441
+ * @param namespace - Namespace name
442
+ * @param config - Configuration data
443
+ * @returns Array of usage examples
444
+ */
445
+ generateUsageExamples(namespace, config) {
446
+ const examples = [];
447
+ const sampleKeys = Object.keys(config).slice(0, 3);
448
+ examples.push(`// Inject the entire ${namespace} configuration`);
449
+ examples.push(`@Inject(${namespace}Config.KEY) private ${namespace}: ConfigType<typeof ${namespace}Config>`);
450
+ examples.push('');
451
+ examples.push(`// Access via ConfigService`);
452
+ examples.push(`const ${namespace}Config = this.configService.get('${namespace}');`);
453
+ if (sampleKeys.length > 0) {
454
+ examples.push('');
455
+ examples.push(`// Access specific values`);
456
+ sampleKeys.forEach(key => {
457
+ examples.push(`const ${key} = this.configService.get('${namespace}.${key}');`);
458
+ });
459
+ }
460
+ return examples;
461
+ }
462
+ };
463
+ exports.NamespaceHandlerService = NamespaceHandlerService;
464
+ exports.NamespaceHandlerService = NamespaceHandlerService = NamespaceHandlerService_1 = __decorate([
465
+ (0, common_1.Injectable)()
466
+ ], NamespaceHandlerService);
467
+ //# sourceMappingURL=namespace-handler.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace-handler.service.js","sourceRoot":"","sources":["../../../../src/integration/services/namespace-handler.service.ts"],"names":[],"mappings":"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"}