@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.
- package/LICENSE +21 -0
- package/README.md +1183 -0
- package/dist/cjs/config.module.js +178 -0
- package/dist/cjs/config.module.js.map +1 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integration/index.js +23 -0
- package/dist/cjs/integration/index.js.map +1 -0
- package/dist/cjs/integration/interfaces/configuration-factory.interface.js +3 -0
- package/dist/cjs/integration/interfaces/configuration-factory.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/configuration-source.interface.js +3 -0
- package/dist/cjs/integration/interfaces/configuration-source.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/index.js +26 -0
- package/dist/cjs/integration/interfaces/index.js.map +1 -0
- package/dist/cjs/integration/interfaces/integration-options.interface.js +3 -0
- package/dist/cjs/integration/interfaces/integration-options.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/integration-state.interface.js +3 -0
- package/dist/cjs/integration/interfaces/integration-state.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js +73 -0
- package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js +3 -0
- package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/typed-configuration.interface.js +4 -0
- package/dist/cjs/integration/interfaces/typed-configuration.interface.js.map +1 -0
- package/dist/cjs/integration/interfaces/utility-types.interface.js +52 -0
- package/dist/cjs/integration/interfaces/utility-types.interface.js.map +1 -0
- package/dist/cjs/integration/nestjs-config-integration.module.js +124 -0
- package/dist/cjs/integration/nestjs-config-integration.module.js.map +1 -0
- package/dist/cjs/integration/providers/aws-configuration-loader.service.js +591 -0
- package/dist/cjs/integration/providers/aws-configuration-loader.service.js.map +1 -0
- package/dist/cjs/integration/providers/configuration-factory.provider.js +383 -0
- package/dist/cjs/integration/providers/configuration-factory.provider.js.map +1 -0
- package/dist/cjs/integration/providers/index.js +20 -0
- package/dist/cjs/integration/providers/index.js.map +1 -0
- package/dist/cjs/integration/services/async-config-helper.service.js +356 -0
- package/dist/cjs/integration/services/async-config-helper.service.js.map +1 -0
- package/dist/cjs/integration/services/error-handler.service.js +265 -0
- package/dist/cjs/integration/services/error-handler.service.js.map +1 -0
- package/dist/cjs/integration/services/factory-registration.service.js +512 -0
- package/dist/cjs/integration/services/factory-registration.service.js.map +1 -0
- package/dist/cjs/integration/services/index.js +26 -0
- package/dist/cjs/integration/services/index.js.map +1 -0
- package/dist/cjs/integration/services/integration-state.service.js +83 -0
- package/dist/cjs/integration/services/integration-state.service.js.map +1 -0
- package/dist/cjs/integration/services/namespace-handler.service.js +467 -0
- package/dist/cjs/integration/services/namespace-handler.service.js.map +1 -0
- package/dist/cjs/integration/services/nestjs-config-integration.service.js +316 -0
- package/dist/cjs/integration/services/nestjs-config-integration.service.js.map +1 -0
- package/dist/cjs/integration/services/precedence-handler.service.js +294 -0
- package/dist/cjs/integration/services/precedence-handler.service.js.map +1 -0
- package/dist/cjs/integration/services/validation-integration.service.js +591 -0
- package/dist/cjs/integration/services/validation-integration.service.js.map +1 -0
- package/dist/cjs/integration/utils/config-integration.util.js +283 -0
- package/dist/cjs/integration/utils/config-integration.util.js.map +1 -0
- package/dist/cjs/integration/utils/index.js +19 -0
- package/dist/cjs/integration/utils/index.js.map +1 -0
- package/dist/cjs/interfaces/config-loader.interface.js +3 -0
- package/dist/cjs/interfaces/config-loader.interface.js.map +1 -0
- package/dist/cjs/interfaces/config-service.interface.js +11 -0
- package/dist/cjs/interfaces/config-service.interface.js.map +1 -0
- package/dist/cjs/interfaces/default-schema.interface.js +63 -0
- package/dist/cjs/interfaces/default-schema.interface.js.map +1 -0
- package/dist/cjs/interfaces/errors.interface.js +77 -0
- package/dist/cjs/interfaces/errors.interface.js.map +1 -0
- package/dist/cjs/interfaces/index.js +25 -0
- package/dist/cjs/interfaces/index.js.map +1 -0
- package/dist/cjs/interfaces/module-options.interface.js +3 -0
- package/dist/cjs/interfaces/module-options.interface.js.map +1 -0
- package/dist/cjs/loaders/environment.loader.js +59 -0
- package/dist/cjs/loaders/environment.loader.js.map +1 -0
- package/dist/cjs/loaders/secrets-manager.loader.js +122 -0
- package/dist/cjs/loaders/secrets-manager.loader.js.map +1 -0
- package/dist/cjs/loaders/ssm-parameter-store.loader.js +146 -0
- package/dist/cjs/loaders/ssm-parameter-store.loader.js.map +1 -0
- package/dist/cjs/services/config.service.js +297 -0
- package/dist/cjs/services/config.service.js.map +1 -0
- package/dist/cjs/utils/validation.util.js +114 -0
- package/dist/cjs/utils/validation.util.js.map +1 -0
- package/dist/esm/config.module.js +175 -0
- package/dist/esm/config.module.js.map +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/integration/index.js +7 -0
- package/dist/esm/integration/index.js.map +1 -0
- package/dist/esm/integration/interfaces/configuration-factory.interface.js +2 -0
- package/dist/esm/integration/interfaces/configuration-factory.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/configuration-source.interface.js +2 -0
- package/dist/esm/integration/interfaces/configuration-source.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/index.js +10 -0
- package/dist/esm/integration/interfaces/index.js.map +1 -0
- package/dist/esm/integration/interfaces/integration-options.interface.js +2 -0
- package/dist/esm/integration/interfaces/integration-options.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/integration-state.interface.js +2 -0
- package/dist/esm/integration/interfaces/integration-state.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js +64 -0
- package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js +2 -0
- package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/typed-configuration.interface.js +3 -0
- package/dist/esm/integration/interfaces/typed-configuration.interface.js.map +1 -0
- package/dist/esm/integration/interfaces/utility-types.interface.js +44 -0
- package/dist/esm/integration/interfaces/utility-types.interface.js.map +1 -0
- package/dist/esm/integration/nestjs-config-integration.module.js +121 -0
- package/dist/esm/integration/nestjs-config-integration.module.js.map +1 -0
- package/dist/esm/integration/providers/aws-configuration-loader.service.js +588 -0
- package/dist/esm/integration/providers/aws-configuration-loader.service.js.map +1 -0
- package/dist/esm/integration/providers/configuration-factory.provider.js +380 -0
- package/dist/esm/integration/providers/configuration-factory.provider.js.map +1 -0
- package/dist/esm/integration/providers/index.js +4 -0
- package/dist/esm/integration/providers/index.js.map +1 -0
- package/dist/esm/integration/services/async-config-helper.service.js +353 -0
- package/dist/esm/integration/services/async-config-helper.service.js.map +1 -0
- package/dist/esm/integration/services/error-handler.service.js +262 -0
- package/dist/esm/integration/services/error-handler.service.js.map +1 -0
- package/dist/esm/integration/services/factory-registration.service.js +509 -0
- package/dist/esm/integration/services/factory-registration.service.js.map +1 -0
- package/dist/esm/integration/services/index.js +10 -0
- package/dist/esm/integration/services/index.js.map +1 -0
- package/dist/esm/integration/services/integration-state.service.js +80 -0
- package/dist/esm/integration/services/integration-state.service.js.map +1 -0
- package/dist/esm/integration/services/namespace-handler.service.js +464 -0
- package/dist/esm/integration/services/namespace-handler.service.js.map +1 -0
- package/dist/esm/integration/services/nestjs-config-integration.service.js +313 -0
- package/dist/esm/integration/services/nestjs-config-integration.service.js.map +1 -0
- package/dist/esm/integration/services/precedence-handler.service.js +291 -0
- package/dist/esm/integration/services/precedence-handler.service.js.map +1 -0
- package/dist/esm/integration/services/validation-integration.service.js +585 -0
- package/dist/esm/integration/services/validation-integration.service.js.map +1 -0
- package/dist/esm/integration/utils/config-integration.util.js +240 -0
- package/dist/esm/integration/utils/config-integration.util.js.map +1 -0
- package/dist/esm/integration/utils/index.js +3 -0
- package/dist/esm/integration/utils/index.js.map +1 -0
- package/dist/esm/interfaces/config-loader.interface.js +2 -0
- package/dist/esm/interfaces/config-loader.interface.js.map +1 -0
- package/dist/esm/interfaces/config-service.interface.js +7 -0
- package/dist/esm/interfaces/config-service.interface.js.map +1 -0
- package/dist/esm/interfaces/default-schema.interface.js +59 -0
- package/dist/esm/interfaces/default-schema.interface.js.map +1 -0
- package/dist/esm/interfaces/errors.interface.js +69 -0
- package/dist/esm/interfaces/errors.interface.js.map +1 -0
- package/dist/esm/interfaces/index.js +9 -0
- package/dist/esm/interfaces/index.js.map +1 -0
- package/dist/esm/interfaces/module-options.interface.js +2 -0
- package/dist/esm/interfaces/module-options.interface.js.map +1 -0
- package/dist/esm/loaders/environment.loader.js +55 -0
- package/dist/esm/loaders/environment.loader.js.map +1 -0
- package/dist/esm/loaders/secrets-manager.loader.js +118 -0
- package/dist/esm/loaders/secrets-manager.loader.js.map +1 -0
- package/dist/esm/loaders/ssm-parameter-store.loader.js +142 -0
- package/dist/esm/loaders/ssm-parameter-store.loader.js.map +1 -0
- package/dist/esm/services/config.service.js +261 -0
- package/dist/esm/services/config.service.js.map +1 -0
- package/dist/esm/utils/validation.util.js +110 -0
- package/dist/esm/utils/validation.util.js.map +1 -0
- package/dist/types/config.module.d.ts +46 -0
- package/dist/types/config.module.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/integration/index.d.ts +6 -0
- package/dist/types/integration/index.d.ts.map +1 -0
- package/dist/types/integration/interfaces/configuration-factory.interface.d.ts +71 -0
- package/dist/types/integration/interfaces/configuration-factory.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/configuration-source.interface.d.ts +24 -0
- package/dist/types/integration/interfaces/configuration-source.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/index.d.ts +9 -0
- package/dist/types/integration/interfaces/index.d.ts.map +1 -0
- package/dist/types/integration/interfaces/integration-options.interface.d.ts +66 -0
- package/dist/types/integration/interfaces/integration-options.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/integration-state.interface.d.ts +17 -0
- package/dist/types/integration/interfaces/integration-state.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts +332 -0
- package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts +259 -0
- package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/typed-configuration.interface.d.ts +209 -0
- package/dist/types/integration/interfaces/typed-configuration.interface.d.ts.map +1 -0
- package/dist/types/integration/interfaces/utility-types.interface.d.ts +249 -0
- package/dist/types/integration/interfaces/utility-types.interface.d.ts.map +1 -0
- package/dist/types/integration/nestjs-config-integration.module.d.ts +36 -0
- package/dist/types/integration/nestjs-config-integration.module.d.ts.map +1 -0
- package/dist/types/integration/providers/aws-configuration-loader.service.d.ts +134 -0
- package/dist/types/integration/providers/aws-configuration-loader.service.d.ts.map +1 -0
- package/dist/types/integration/providers/configuration-factory.provider.d.ts +119 -0
- package/dist/types/integration/providers/configuration-factory.provider.d.ts.map +1 -0
- package/dist/types/integration/providers/index.d.ts +3 -0
- package/dist/types/integration/providers/index.d.ts.map +1 -0
- package/dist/types/integration/services/async-config-helper.service.d.ts +84 -0
- package/dist/types/integration/services/async-config-helper.service.d.ts.map +1 -0
- package/dist/types/integration/services/error-handler.service.d.ts +84 -0
- package/dist/types/integration/services/error-handler.service.d.ts.map +1 -0
- package/dist/types/integration/services/factory-registration.service.d.ts +158 -0
- package/dist/types/integration/services/factory-registration.service.d.ts.map +1 -0
- package/dist/types/integration/services/index.d.ts +9 -0
- package/dist/types/integration/services/index.d.ts.map +1 -0
- package/dist/types/integration/services/integration-state.service.d.ts +41 -0
- package/dist/types/integration/services/integration-state.service.d.ts.map +1 -0
- package/dist/types/integration/services/namespace-handler.service.d.ts +192 -0
- package/dist/types/integration/services/namespace-handler.service.d.ts.map +1 -0
- package/dist/types/integration/services/nestjs-config-integration.service.d.ts +87 -0
- package/dist/types/integration/services/nestjs-config-integration.service.d.ts.map +1 -0
- package/dist/types/integration/services/precedence-handler.service.d.ts +103 -0
- package/dist/types/integration/services/precedence-handler.service.d.ts.map +1 -0
- package/dist/types/integration/services/validation-integration.service.d.ts +222 -0
- package/dist/types/integration/services/validation-integration.service.d.ts.map +1 -0
- package/dist/types/integration/utils/config-integration.util.d.ts +81 -0
- package/dist/types/integration/utils/config-integration.util.d.ts.map +1 -0
- package/dist/types/integration/utils/index.d.ts +2 -0
- package/dist/types/integration/utils/index.d.ts.map +1 -0
- package/dist/types/interfaces/config-loader.interface.d.ts +22 -0
- package/dist/types/interfaces/config-loader.interface.d.ts.map +1 -0
- package/dist/types/interfaces/config-service.interface.d.ts +23 -0
- package/dist/types/interfaces/config-service.interface.d.ts.map +1 -0
- package/dist/types/interfaces/default-schema.interface.d.ts +195 -0
- package/dist/types/interfaces/default-schema.interface.d.ts.map +1 -0
- package/dist/types/interfaces/errors.interface.d.ts +38 -0
- package/dist/types/interfaces/errors.interface.d.ts.map +1 -0
- package/dist/types/interfaces/index.d.ts +6 -0
- package/dist/types/interfaces/index.d.ts.map +1 -0
- package/dist/types/interfaces/module-options.interface.d.ts +64 -0
- package/dist/types/interfaces/module-options.interface.d.ts.map +1 -0
- package/dist/types/loaders/environment.loader.d.ts +26 -0
- package/dist/types/loaders/environment.loader.d.ts.map +1 -0
- package/dist/types/loaders/secrets-manager.loader.d.ts +52 -0
- package/dist/types/loaders/secrets-manager.loader.d.ts.map +1 -0
- package/dist/types/loaders/ssm-parameter-store.loader.d.ts +68 -0
- package/dist/types/loaders/ssm-parameter-store.loader.d.ts.map +1 -0
- package/dist/types/services/config.service.d.ts +94 -0
- package/dist/types/services/config.service.d.ts.map +1 -0
- package/dist/types/utils/validation.util.d.ts +53 -0
- package/dist/types/utils/validation.util.d.ts.map +1 -0
- 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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"}
|