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