@dyanet/nestjs-config-aws 1.2.1 → 2.0.0
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 +60 -43
- package/dist/cjs/aws-config-loader.js +57 -0
- package/dist/cjs/build-loaders.js +58 -0
- package/dist/cjs/config.module.js +138 -0
- package/dist/cjs/index.js +46 -0
- package/dist/cjs/interfaces/config-service.interface.js +11 -0
- package/dist/cjs/interfaces/default-schema.interface.js +63 -0
- package/dist/cjs/{nestjs-config-aws/src/interfaces → interfaces}/index.js +1 -1
- package/dist/cjs/interfaces/module-options.interface.js +3 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/services/config.service.js +142 -0
- package/dist/esm/aws-config-loader.js +54 -0
- package/dist/esm/build-loaders.js +55 -0
- package/dist/esm/config.module.js +135 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/interfaces/config-service.interface.js +7 -0
- package/dist/esm/interfaces/default-schema.interface.js +59 -0
- package/dist/esm/interfaces/index.js +8 -0
- package/dist/esm/interfaces/module-options.interface.js +2 -0
- package/dist/esm/package.json +3 -1
- package/dist/esm/services/config.service.js +139 -0
- package/dist/types/aws-config-loader.d.ts +74 -0
- package/dist/types/aws-config-loader.d.ts.map +1 -0
- package/dist/types/build-loaders.d.ts +30 -0
- package/dist/types/build-loaders.d.ts.map +1 -0
- package/dist/types/{nestjs-config-aws/src/config.module.d.ts → config.module.d.ts} +2 -8
- package/dist/types/config.module.d.ts.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/interfaces/config-service.interface.d.ts.map +1 -0
- package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/default-schema.interface.d.ts +14 -14
- package/dist/types/interfaces/default-schema.interface.d.ts.map +1 -0
- package/dist/types/interfaces/index.d.ts.map +1 -0
- package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/module-options.interface.d.ts +22 -3
- package/dist/types/interfaces/module-options.interface.d.ts.map +1 -0
- package/dist/types/services/config.service.d.ts.map +1 -0
- package/package.json +13 -7
- package/dist/cjs/config-aws/src/config-manager.js +0 -366
- package/dist/cjs/config-aws/src/errors/index.js +0 -77
- package/dist/cjs/config-aws/src/index.js +0 -37
- package/dist/cjs/config-aws/src/interfaces/config-loader.interface.js +0 -3
- package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +0 -3
- package/dist/cjs/config-aws/src/interfaces/env-file-loader.interface.js +0 -3
- package/dist/cjs/config-aws/src/interfaces/environment-loader.interface.js +0 -3
- package/dist/cjs/config-aws/src/interfaces/s3-loader.interface.js +0 -3
- package/dist/cjs/config-aws/src/interfaces/secrets-manager-loader.interface.js +0 -3
- package/dist/cjs/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +0 -3
- package/dist/cjs/config-aws/src/loaders/env-file.loader.js +0 -169
- package/dist/cjs/config-aws/src/loaders/environment.loader.js +0 -85
- package/dist/cjs/config-aws/src/loaders/s3.loader.js +0 -145
- package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +0 -169
- package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +0 -199
- package/dist/cjs/config-aws/src/utils/env-file-parser.util.js +0 -98
- package/dist/cjs/config-aws/src/utils/validation.util.js +0 -116
- package/dist/cjs/nestjs-config-aws/src/config.module.js +0 -175
- package/dist/cjs/nestjs-config-aws/src/index.js +0 -61
- package/dist/cjs/nestjs-config-aws/src/integration/index.js +0 -23
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +0 -3
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +0 -3
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/index.js +0 -26
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +0 -3
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +0 -3
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +0 -73
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +0 -3
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +0 -4
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +0 -52
- package/dist/cjs/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +0 -124
- package/dist/cjs/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +0 -592
- package/dist/cjs/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +0 -385
- package/dist/cjs/nestjs-config-aws/src/integration/providers/index.js +0 -20
- package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +0 -366
- package/dist/cjs/nestjs-config-aws/src/integration/services/error-handler.service.js +0 -267
- package/dist/cjs/nestjs-config-aws/src/integration/services/factory-registration.service.js +0 -517
- package/dist/cjs/nestjs-config-aws/src/integration/services/index.js +0 -26
- package/dist/cjs/nestjs-config-aws/src/integration/services/integration-state.service.js +0 -81
- package/dist/cjs/nestjs-config-aws/src/integration/services/namespace-handler.service.js +0 -465
- package/dist/cjs/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +0 -318
- package/dist/cjs/nestjs-config-aws/src/integration/services/precedence-handler.service.js +0 -292
- package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +0 -595
- package/dist/cjs/nestjs-config-aws/src/integration/utils/config-integration.util.js +0 -283
- package/dist/cjs/nestjs-config-aws/src/integration/utils/index.js +0 -19
- package/dist/cjs/nestjs-config-aws/src/interfaces/config-service.interface.js +0 -11
- package/dist/cjs/nestjs-config-aws/src/interfaces/default-schema.interface.js +0 -63
- package/dist/cjs/nestjs-config-aws/src/interfaces/module-options.interface.js +0 -3
- package/dist/cjs/nestjs-config-aws/src/services/config.service.js +0 -142
- package/dist/esm/config-aws/src/config-manager.js +0 -362
- package/dist/esm/config-aws/src/errors/index.js +0 -69
- package/dist/esm/config-aws/src/index.js +0 -21
- package/dist/esm/config-aws/src/interfaces/config-loader.interface.js +0 -2
- package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +0 -2
- package/dist/esm/config-aws/src/interfaces/env-file-loader.interface.js +0 -2
- package/dist/esm/config-aws/src/interfaces/environment-loader.interface.js +0 -2
- package/dist/esm/config-aws/src/interfaces/s3-loader.interface.js +0 -2
- package/dist/esm/config-aws/src/interfaces/secrets-manager-loader.interface.js +0 -2
- package/dist/esm/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +0 -2
- package/dist/esm/config-aws/src/loaders/env-file.loader.js +0 -132
- package/dist/esm/config-aws/src/loaders/environment.loader.js +0 -81
- package/dist/esm/config-aws/src/loaders/s3.loader.js +0 -141
- package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +0 -165
- package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +0 -195
- package/dist/esm/config-aws/src/utils/env-file-parser.util.js +0 -94
- package/dist/esm/config-aws/src/utils/validation.util.js +0 -112
- package/dist/esm/nestjs-config-aws/src/config.module.js +0 -172
- package/dist/esm/nestjs-config-aws/src/index.js +0 -23
- package/dist/esm/nestjs-config-aws/src/integration/index.js +0 -7
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +0 -2
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +0 -2
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/index.js +0 -10
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +0 -2
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +0 -2
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +0 -64
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +0 -2
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +0 -3
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +0 -44
- package/dist/esm/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +0 -121
- package/dist/esm/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +0 -589
- package/dist/esm/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +0 -382
- package/dist/esm/nestjs-config-aws/src/integration/providers/index.js +0 -4
- package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +0 -363
- package/dist/esm/nestjs-config-aws/src/integration/services/error-handler.service.js +0 -264
- package/dist/esm/nestjs-config-aws/src/integration/services/factory-registration.service.js +0 -514
- package/dist/esm/nestjs-config-aws/src/integration/services/index.js +0 -10
- package/dist/esm/nestjs-config-aws/src/integration/services/integration-state.service.js +0 -78
- package/dist/esm/nestjs-config-aws/src/integration/services/namespace-handler.service.js +0 -462
- package/dist/esm/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +0 -315
- package/dist/esm/nestjs-config-aws/src/integration/services/precedence-handler.service.js +0 -289
- package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +0 -589
- package/dist/esm/nestjs-config-aws/src/integration/utils/config-integration.util.js +0 -240
- package/dist/esm/nestjs-config-aws/src/integration/utils/index.js +0 -3
- package/dist/esm/nestjs-config-aws/src/interfaces/config-service.interface.js +0 -7
- package/dist/esm/nestjs-config-aws/src/interfaces/default-schema.interface.js +0 -59
- package/dist/esm/nestjs-config-aws/src/interfaces/index.js +0 -8
- package/dist/esm/nestjs-config-aws/src/interfaces/module-options.interface.js +0 -2
- package/dist/esm/nestjs-config-aws/src/services/config.service.js +0 -139
- package/dist/types/config-aws/src/config-manager.d.ts +0 -119
- package/dist/types/config-aws/src/config-manager.d.ts.map +0 -1
- package/dist/types/config-aws/src/errors/index.d.ts +0 -43
- package/dist/types/config-aws/src/errors/index.d.ts.map +0 -1
- package/dist/types/config-aws/src/index.d.ts +0 -24
- package/dist/types/config-aws/src/index.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts +0 -33
- package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +0 -86
- package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts +0 -12
- package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts +0 -10
- package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts +0 -14
- package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts +0 -12
- package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts +0 -14
- package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts.map +0 -1
- package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +0 -69
- package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +0 -1
- package/dist/types/config-aws/src/loaders/environment.loader.d.ts +0 -46
- package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +0 -1
- package/dist/types/config-aws/src/loaders/s3.loader.d.ts +0 -62
- package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +0 -1
- package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +0 -68
- package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +0 -1
- package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +0 -78
- package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +0 -1
- package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts +0 -45
- package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts.map +0 -1
- package/dist/types/config-aws/src/utils/validation.util.d.ts +0 -53
- package/dist/types/config-aws/src/utils/validation.util.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/config.module.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/index.d.ts +0 -11
- package/dist/types/nestjs-config-aws/src/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/index.d.ts +0 -6
- package/dist/types/nestjs-config-aws/src/integration/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts +0 -71
- package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts +0 -24
- package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts +0 -9
- package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts +0 -66
- package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts +0 -17
- package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts +0 -332
- package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts +0 -259
- package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts +0 -209
- package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts +0 -249
- package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts +0 -36
- package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts +0 -134
- package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts +0 -119
- package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts +0 -3
- package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts +0 -84
- package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts +0 -84
- package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts +0 -158
- package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts +0 -9
- package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts +0 -41
- package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts +0 -192
- package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts +0 -87
- package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts +0 -103
- package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts +0 -222
- package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts +0 -81
- package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts +0 -2
- package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/interfaces/config-service.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/interfaces/default-schema.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/interfaces/module-options.interface.d.ts.map +0 -1
- package/dist/types/nestjs-config-aws/src/services/config.service.d.ts.map +0 -1
- /package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/config-service.interface.d.ts +0 -0
- /package/dist/types/{nestjs-config-aws/src/interfaces → interfaces}/index.d.ts +0 -0
- /package/dist/types/{nestjs-config-aws/src/services → services}/config.service.d.ts +0 -0
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
import { ConfigurationError, ConfigurationLoadError, ValidationError } from './errors/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Default console logger implementation
|
|
4
|
-
*/
|
|
5
|
-
const defaultLogger = {
|
|
6
|
-
log: (message) => console.log(message),
|
|
7
|
-
error: (message) => console.error(message),
|
|
8
|
-
warn: (message) => console.warn(message),
|
|
9
|
-
debug: (message) => console.debug(message),
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Default sensitive keys that should always be masked
|
|
13
|
-
*/
|
|
14
|
-
const DEFAULT_SENSITIVE_KEYS = ['password', 'secret', 'key', 'token', 'credential', 'api_key', 'apikey'];
|
|
15
|
-
/**
|
|
16
|
-
* Default verbose options
|
|
17
|
-
*/
|
|
18
|
-
const DEFAULT_VERBOSE_OPTIONS = {
|
|
19
|
-
logKeys: true,
|
|
20
|
-
logValues: false,
|
|
21
|
-
logOverrides: true,
|
|
22
|
-
logTiming: true,
|
|
23
|
-
maskValues: true,
|
|
24
|
-
sensitiveKeys: DEFAULT_SENSITIVE_KEYS,
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Predefined precedence orders for common strategies
|
|
28
|
-
* Higher index = higher priority (later loaders override earlier ones)
|
|
29
|
-
*/
|
|
30
|
-
const PRECEDENCE_ORDERS = {
|
|
31
|
-
// AWS wins: env -> envFile -> s3 -> secretsManager -> ssm
|
|
32
|
-
'aws-first': [
|
|
33
|
-
'EnvironmentLoader',
|
|
34
|
-
'EnvFileLoader',
|
|
35
|
-
'S3Loader',
|
|
36
|
-
'SecretsManagerLoader',
|
|
37
|
-
'SSMParameterStoreLoader',
|
|
38
|
-
],
|
|
39
|
-
// Local wins: ssm -> secretsManager -> s3 -> envFile -> env
|
|
40
|
-
'local-first': [
|
|
41
|
-
'SSMParameterStoreLoader',
|
|
42
|
-
'SecretsManagerLoader',
|
|
43
|
-
'S3Loader',
|
|
44
|
-
'EnvFileLoader',
|
|
45
|
-
'EnvironmentLoader',
|
|
46
|
-
],
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* ConfigManager orchestrates loading configuration from multiple sources
|
|
50
|
-
* with configurable precedence and validation.
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```typescript
|
|
54
|
-
* import { ConfigManager, EnvironmentLoader, SecretsManagerLoader } from '@dyanet/config-aws';
|
|
55
|
-
* import { z } from 'zod';
|
|
56
|
-
*
|
|
57
|
-
* const schema = z.object({
|
|
58
|
-
* DATABASE_URL: z.string(),
|
|
59
|
-
* API_KEY: z.string(),
|
|
60
|
-
* PORT: z.coerce.number().default(3000),
|
|
61
|
-
* });
|
|
62
|
-
*
|
|
63
|
-
* const manager = new ConfigManager({
|
|
64
|
-
* loaders: [
|
|
65
|
-
* new EnvironmentLoader({ prefix: 'APP_' }),
|
|
66
|
-
* new SecretsManagerLoader({ secretName: '/my-app/config' }),
|
|
67
|
-
* ],
|
|
68
|
-
* schema,
|
|
69
|
-
* precedence: 'aws-first',
|
|
70
|
-
* verbose: true,
|
|
71
|
-
* });
|
|
72
|
-
*
|
|
73
|
-
* await manager.load();
|
|
74
|
-
* const dbUrl = manager.get('DATABASE_URL');
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
export class ConfigManager {
|
|
78
|
-
/** @internal */
|
|
79
|
-
_options;
|
|
80
|
-
/** @internal */
|
|
81
|
-
_logger;
|
|
82
|
-
/** @internal */
|
|
83
|
-
_verboseOptions;
|
|
84
|
-
config = null;
|
|
85
|
-
loadResult = null;
|
|
86
|
-
loaded = false;
|
|
87
|
-
constructor(options = {}) {
|
|
88
|
-
this._options = {
|
|
89
|
-
loaders: options.loaders ?? [],
|
|
90
|
-
schema: options.schema,
|
|
91
|
-
precedence: options.precedence ?? 'aws-first',
|
|
92
|
-
validateOnLoad: options.validateOnLoad ?? true,
|
|
93
|
-
enableLogging: options.enableLogging ?? false,
|
|
94
|
-
logger: options.logger,
|
|
95
|
-
verbose: options.verbose,
|
|
96
|
-
};
|
|
97
|
-
this._logger = options.logger ?? defaultLogger;
|
|
98
|
-
this._verboseOptions = this.resolveVerboseOptions(options.verbose);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Resolve verbose options from boolean or object
|
|
102
|
-
*/
|
|
103
|
-
resolveVerboseOptions(verbose) {
|
|
104
|
-
if (verbose === undefined || verbose === false) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
if (verbose === true) {
|
|
108
|
-
return { ...DEFAULT_VERBOSE_OPTIONS };
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
logKeys: verbose.logKeys ?? DEFAULT_VERBOSE_OPTIONS.logKeys,
|
|
112
|
-
logValues: verbose.logValues ?? DEFAULT_VERBOSE_OPTIONS.logValues,
|
|
113
|
-
logOverrides: verbose.logOverrides ?? DEFAULT_VERBOSE_OPTIONS.logOverrides,
|
|
114
|
-
logTiming: verbose.logTiming ?? DEFAULT_VERBOSE_OPTIONS.logTiming,
|
|
115
|
-
maskValues: verbose.maskValues ?? DEFAULT_VERBOSE_OPTIONS.maskValues,
|
|
116
|
-
sensitiveKeys: verbose.sensitiveKeys ?? DEFAULT_VERBOSE_OPTIONS.sensitiveKeys,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Log a message if logging is enabled
|
|
121
|
-
*/
|
|
122
|
-
log(message) {
|
|
123
|
-
if (this._options.enableLogging || this._verboseOptions) {
|
|
124
|
-
this._logger.log(`[config-aws] ${message}`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Mask a value for logging
|
|
129
|
-
*/
|
|
130
|
-
maskValue(key, value) {
|
|
131
|
-
if (!this._verboseOptions?.logValues) {
|
|
132
|
-
return '';
|
|
133
|
-
}
|
|
134
|
-
const strValue = String(value);
|
|
135
|
-
const lowerKey = key.toLowerCase();
|
|
136
|
-
// Check if key contains any sensitive patterns
|
|
137
|
-
const isSensitive = this._verboseOptions.sensitiveKeys.some((pattern) => lowerKey.includes(pattern.toLowerCase()));
|
|
138
|
-
if (this._verboseOptions.maskValues || isSensitive) {
|
|
139
|
-
if (strValue.length <= 4) {
|
|
140
|
-
return '****';
|
|
141
|
-
}
|
|
142
|
-
return `${strValue.slice(0, 2)}**...${strValue.slice(-2)}`;
|
|
143
|
-
}
|
|
144
|
-
return strValue;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Get the loading order for loaders based on precedence strategy.
|
|
148
|
-
* Returns loaders sorted by priority (lower priority first, so higher priority loads last and wins).
|
|
149
|
-
*/
|
|
150
|
-
getLoadOrder() {
|
|
151
|
-
const { loaders, precedence } = this._options;
|
|
152
|
-
if (!loaders || loaders.length === 0) {
|
|
153
|
-
return [];
|
|
154
|
-
}
|
|
155
|
-
// If precedence is a custom array, use it
|
|
156
|
-
if (Array.isArray(precedence)) {
|
|
157
|
-
return this.sortByCustomPrecedence(loaders, precedence);
|
|
158
|
-
}
|
|
159
|
-
// Use predefined precedence order
|
|
160
|
-
const order = PRECEDENCE_ORDERS[precedence];
|
|
161
|
-
return this.sortByPredefinedOrder(loaders, order);
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Sort loaders by custom precedence configuration
|
|
165
|
-
*/
|
|
166
|
-
sortByCustomPrecedence(loaders, precedence) {
|
|
167
|
-
const priorityMap = new Map();
|
|
168
|
-
for (const p of precedence) {
|
|
169
|
-
priorityMap.set(p.loader, p.priority);
|
|
170
|
-
}
|
|
171
|
-
// Sort by priority (lower first, so higher priority loads last and wins)
|
|
172
|
-
return [...loaders].sort((a, b) => {
|
|
173
|
-
const priorityA = priorityMap.get(a.getName()) ?? 0;
|
|
174
|
-
const priorityB = priorityMap.get(b.getName()) ?? 0;
|
|
175
|
-
return priorityA - priorityB;
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Sort loaders by predefined order
|
|
180
|
-
*/
|
|
181
|
-
sortByPredefinedOrder(loaders, order) {
|
|
182
|
-
const orderMap = new Map();
|
|
183
|
-
order.forEach((name, index) => orderMap.set(name, index));
|
|
184
|
-
// Sort by order index (lower first, so higher index loads last and wins)
|
|
185
|
-
return [...loaders].sort((a, b) => {
|
|
186
|
-
const indexA = orderMap.get(a.getName()) ?? -1;
|
|
187
|
-
const indexB = orderMap.get(b.getName()) ?? -1;
|
|
188
|
-
return indexA - indexB;
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Load configuration from all configured loaders.
|
|
193
|
-
* Loaders are executed in precedence order, with later loaders overriding earlier ones.
|
|
194
|
-
*/
|
|
195
|
-
async load() {
|
|
196
|
-
const startTime = Date.now();
|
|
197
|
-
const sources = [];
|
|
198
|
-
let mergedConfig = {};
|
|
199
|
-
const keyOrigins = new Map(); // Track which loader set each key
|
|
200
|
-
this.log('Loading configuration...');
|
|
201
|
-
const orderedLoaders = this.getLoadOrder();
|
|
202
|
-
for (const loader of orderedLoaders) {
|
|
203
|
-
const loaderName = loader.getName();
|
|
204
|
-
const loaderStartTime = Date.now();
|
|
205
|
-
try {
|
|
206
|
-
// Check if loader is available
|
|
207
|
-
const isAvailable = await loader.isAvailable();
|
|
208
|
-
if (!isAvailable) {
|
|
209
|
-
if (this._verboseOptions?.logTiming) {
|
|
210
|
-
this.log(`${loaderName}: skipped (not available)`);
|
|
211
|
-
}
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
// Load configuration from this loader
|
|
215
|
-
const loaderConfig = await loader.load();
|
|
216
|
-
const keysLoaded = Object.keys(loaderConfig);
|
|
217
|
-
const duration = Date.now() - loaderStartTime;
|
|
218
|
-
// Track source info
|
|
219
|
-
sources.push({
|
|
220
|
-
loader: loaderName,
|
|
221
|
-
keysLoaded,
|
|
222
|
-
duration,
|
|
223
|
-
});
|
|
224
|
-
// Log timing and keys
|
|
225
|
-
if (this._verboseOptions?.logTiming) {
|
|
226
|
-
this.log(`${loaderName}: loaded ${keysLoaded.length} keys in ${duration}ms`);
|
|
227
|
-
}
|
|
228
|
-
// Log individual keys and track overrides
|
|
229
|
-
for (const key of keysLoaded) {
|
|
230
|
-
const previousLoader = keyOrigins.get(key);
|
|
231
|
-
const isOverride = previousLoader !== undefined;
|
|
232
|
-
if (this._verboseOptions?.logKeys) {
|
|
233
|
-
let logLine = ` - ${key}`;
|
|
234
|
-
if (this._verboseOptions.logValues) {
|
|
235
|
-
logLine += ` = "${this.maskValue(key, loaderConfig[key])}"`;
|
|
236
|
-
}
|
|
237
|
-
if (isOverride && this._verboseOptions.logOverrides) {
|
|
238
|
-
logLine += ` (overrides ${previousLoader})`;
|
|
239
|
-
}
|
|
240
|
-
this.log(logLine);
|
|
241
|
-
}
|
|
242
|
-
keyOrigins.set(key, loaderName);
|
|
243
|
-
}
|
|
244
|
-
// Merge configuration (later loaders override earlier ones)
|
|
245
|
-
mergedConfig = { ...mergedConfig, ...loaderConfig };
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
throw new ConfigurationLoadError(`Failed to load configuration from ${loaderName}: ${error instanceof Error ? error.message : String(error)}`, loaderName, error instanceof Error ? error : undefined);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
// Count overrides
|
|
252
|
-
const totalKeys = Object.keys(mergedConfig).length;
|
|
253
|
-
const totalDuration = Date.now() - startTime;
|
|
254
|
-
const overrideCount = sources.reduce((acc, s) => acc + s.keysLoaded.length, 0) - totalKeys;
|
|
255
|
-
if (this._verboseOptions?.logTiming) {
|
|
256
|
-
this.log(`Configuration loaded: ${totalKeys} total keys, ${overrideCount} overrides, ${totalDuration}ms total`);
|
|
257
|
-
}
|
|
258
|
-
// Validate if schema is provided and validation is enabled
|
|
259
|
-
if (this._options.schema && this._options.validateOnLoad) {
|
|
260
|
-
const result = this._options.schema.safeParse(mergedConfig);
|
|
261
|
-
if (!result.success) {
|
|
262
|
-
const zodError = result.error;
|
|
263
|
-
throw new ValidationError(`Configuration validation failed: ${zodError.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')}`, zodError.errors, undefined);
|
|
264
|
-
}
|
|
265
|
-
this.config = result.data;
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
this.config = mergedConfig;
|
|
269
|
-
}
|
|
270
|
-
this.loadResult = {
|
|
271
|
-
config: this.config,
|
|
272
|
-
sources,
|
|
273
|
-
loadedAt: new Date(),
|
|
274
|
-
};
|
|
275
|
-
this.loaded = true;
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Get a specific configuration value by key.
|
|
279
|
-
* @param key The configuration key
|
|
280
|
-
* @returns The configuration value
|
|
281
|
-
* @throws ConfigurationError if configuration is not loaded
|
|
282
|
-
*/
|
|
283
|
-
get(key) {
|
|
284
|
-
if (!this.loaded || this.config === null) {
|
|
285
|
-
throw new ConfigurationError('Configuration not loaded. Call load() first.');
|
|
286
|
-
}
|
|
287
|
-
// Non-null assertion is safe here because we've checked this.config !== null above
|
|
288
|
-
return this.config[key];
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Get all configuration values.
|
|
292
|
-
* @returns The complete configuration object
|
|
293
|
-
* @throws ConfigurationError if configuration is not loaded
|
|
294
|
-
*/
|
|
295
|
-
getAll() {
|
|
296
|
-
if (!this.loaded || this.config === null) {
|
|
297
|
-
throw new ConfigurationError('Configuration not loaded. Call load() first.');
|
|
298
|
-
}
|
|
299
|
-
return this.config;
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Check if configuration has been loaded.
|
|
303
|
-
* @returns true if configuration is loaded
|
|
304
|
-
*/
|
|
305
|
-
isLoaded() {
|
|
306
|
-
return this.loaded;
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Get the current application environment.
|
|
310
|
-
* @returns The APP_ENV value or 'development' as default
|
|
311
|
-
*/
|
|
312
|
-
getAppEnv() {
|
|
313
|
-
return process.env['APP_ENV'] ?? 'development';
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Get the load result with source information.
|
|
317
|
-
* @returns The load result or null if not loaded
|
|
318
|
-
*/
|
|
319
|
-
getLoadResult() {
|
|
320
|
-
return this.loadResult;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* Serialize the current configuration to JSON string.
|
|
324
|
-
* @returns JSON string representation of the configuration
|
|
325
|
-
* @throws ConfigurationError if configuration is not loaded
|
|
326
|
-
*/
|
|
327
|
-
serialize() {
|
|
328
|
-
if (!this.loaded || this.config === null) {
|
|
329
|
-
throw new ConfigurationError('Configuration not loaded. Call load() first.');
|
|
330
|
-
}
|
|
331
|
-
return JSON.stringify(this.config);
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Create a new ConfigManager with configuration loaded from a JSON string.
|
|
335
|
-
* This is useful for restoring configuration from a serialized state.
|
|
336
|
-
* @param json JSON string to deserialize
|
|
337
|
-
* @param options Optional ConfigManager options (schema will be used for validation)
|
|
338
|
-
* @returns A new ConfigManager instance with the deserialized configuration
|
|
339
|
-
*/
|
|
340
|
-
static deserialize(json, options = {}) {
|
|
341
|
-
const parsed = JSON.parse(json);
|
|
342
|
-
// Validate if schema is provided
|
|
343
|
-
if (options.schema) {
|
|
344
|
-
const result = options.schema.safeParse(parsed);
|
|
345
|
-
if (!result.success) {
|
|
346
|
-
const zodError = result.error;
|
|
347
|
-
throw new ValidationError(`Deserialization validation failed: ${zodError.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')}`, zodError.errors, undefined);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
// Create a new ConfigManager and set its internal state
|
|
351
|
-
const manager = new ConfigManager(options);
|
|
352
|
-
manager.config = parsed;
|
|
353
|
-
manager.loaded = true;
|
|
354
|
-
manager.loadResult = {
|
|
355
|
-
config: parsed,
|
|
356
|
-
sources: [{ loader: 'deserialize', keysLoaded: Object.keys(parsed), duration: 0 }],
|
|
357
|
-
loadedAt: new Date(),
|
|
358
|
-
};
|
|
359
|
-
return manager;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEc7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBVztJQUM1QixHQUFHLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzlDLEtBQUssRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNoRCxLQUFLLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0NBQ25ELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUV6Rzs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQTZCO0lBQ3hELE9BQU8sRUFBRSxJQUFJO0lBQ2IsU0FBUyxFQUFFLEtBQUs7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsSUFBSTtJQUNoQixhQUFhLEVBQUUsc0JBQXNCO0NBQ3RDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLGlCQUFpQixHQUFrRDtJQUN2RSwwREFBMEQ7SUFDMUQsV0FBVyxFQUFFO1FBQ1gsbUJBQW1CO1FBQ25C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Q0FBc0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQ2xILFFBQVEsQ0FBQyxNQUFNLEVBQ2YsU0FBUyxDQUNWLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBSSxPQUFPLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQVcsQ0FBQztRQUM3QixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN0QixPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxNQUFXO1lBQ25CLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEYsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFpvZEVycm9yIH0gZnJvbSAnem9kJztcclxuaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQ29uZmlnTWFuYWdlck9wdGlvbnMsXHJcbiAgQ29uZmlnTG9hZFJlc3VsdCxcclxuICBDb25maWdTb3VyY2VJbmZvLFxyXG4gIExvZ2dlcixcclxuICBMb2FkZXJQcmVjZWRlbmNlLFxyXG4gIFZlcmJvc2VPcHRpb25zLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzL2luZGV4LmpzJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IGNvbnNvbGUgbG9nZ2VyIGltcGxlbWVudGF0aW9uXHJcbiAqL1xyXG5jb25zdCBkZWZhdWx0TG9nZ2VyOiBMb2dnZXIgPSB7XHJcbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlKSxcclxuICBlcnJvcjogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlKSxcclxuICB3YXJuOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSksXHJcbiAgZGVidWc6IChtZXNzYWdlOiBzdHJpbmcpID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSksXHJcbn07XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBzZW5zaXRpdmUga2V5cyB0aGF0IHNob3VsZCBhbHdheXMgYmUgbWFza2VkXHJcbiAqL1xyXG5jb25zdCBERUZBVUxUX1NFTlNJVElWRV9LRVlTID0gWydwYXNzd29yZCcsICdzZWNyZXQnLCAna2V5JywgJ3Rva2VuJywgJ2NyZWRlbnRpYWwnLCAnYXBpX2tleScsICdhcGlrZXknXTtcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHZlcmJvc2Ugb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgREVGQVVMVF9WRVJCT1NFX09QVElPTlM6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiA9IHtcclxuICBsb2dLZXlzOiB0cnVlLFxyXG4gIGxvZ1ZhbHVlczogZmFsc2UsXHJcbiAgbG9nT3ZlcnJpZGVzOiB0cnVlLFxyXG4gIGxvZ1RpbWluZzogdHJ1ZSxcclxuICBtYXNrVmFsdWVzOiB0cnVlLFxyXG4gIHNlbnNpdGl2ZUtleXM6IERFRkFVTFRfU0VOU0lUSVZFX0tFWVMsXHJcbn07XHJcblxyXG4vKipcclxuICogUHJlZGVmaW5lZCBwcmVjZWRlbmNlIG9yZGVycyBmb3IgY29tbW9uIHN0cmF0ZWdpZXNcclxuICogSGlnaGVyIGluZGV4ID0gaGlnaGVyIHByaW9yaXR5IChsYXRlciBsb2FkZXJzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcclxuICovXHJcbmNvbnN0IFBSRUNFREVOQ0VfT1JERVJTOiBSZWNvcmQ8J2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnLCBzdHJpbmdbXT4gPSB7XHJcbiAgLy8gQVdTIHdpbnM6IGVudiAtPiBlbnZGaWxlIC0+IHMzIC0+IHNlY3JldHNNYW5hZ2VyIC0+IHNzbVxyXG4gICdhd3MtZmlyc3QnOiBbXHJcbiAgICAnRW52aXJvbm1lbnRMb2FkZXInLFxyXG4gICAgJ0VudkZpbGVMb2FkZXInLFxyXG4gICAgJ1MzTG9hZGVyJyxcclxuICAgICdTZWNyZXRzTWFuYWdlckxvYWRlcicsXHJcbiAgICAnU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXInLFxyXG4gIF0sXHJcbiAgLy8gTG9jYWwgd2luczogc3NtIC0+IHNlY3JldHNNYW5hZ2VyIC0+IHMzIC0+IGVudkZpbGUgLT4gZW52XHJcbiAgJ2xvY2FsLWZpcnN0JzogW1xyXG4gICAgJ1NTTVBhcmFtZXRlclN0b3JlTG9hZGVyJyxcclxuICAgICdTZWNyZXRzTWFuYWdlckxvYWRlcicsXHJcbiAgICAnUzNMb2FkZXInLFxyXG4gICAgJ0VudkZpbGVMb2FkZXInLFxyXG4gICAgJ0Vudmlyb25tZW50TG9hZGVyJyxcclxuICBdLFxyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDb25maWdNYW5hZ2VyIG9yY2hlc3RyYXRlcyBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBtdWx0aXBsZSBzb3VyY2VzXHJcbiAqIHdpdGggY29uZmlndXJhYmxlIHByZWNlZGVuY2UgYW5kIHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgQ29uZmlnTWFuYWdlciwgRW52aXJvbm1lbnRMb2FkZXIsIFNlY3JldHNNYW5hZ2VyTG9hZGVyIH0gZnJvbSAnQGR5YW5ldC9jb25maWctYXdzJztcclxuICogaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XHJcbiAqXHJcbiAqIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcclxuICogICBEQVRBQkFTRV9VUkw6IHouc3RyaW5nKCksXHJcbiAqICAgQVBJX0tFWTogei5zdHJpbmcoKSxcclxuICogICBQT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMDApLFxyXG4gKiB9KTtcclxuICpcclxuICogY29uc3QgbWFuYWdlciA9IG5ldyBDb25maWdNYW5hZ2VyKHtcclxuICogICBsb2FkZXJzOiBbXHJcbiAqICAgICBuZXcgRW52aXJvbm1lbnRMb2FkZXIoeyBwcmVmaXg6ICdBUFBfJyB9KSxcclxuICogICAgIG5ldyBTZWNyZXRzTWFuYWdlckxvYWRlcih7IHNlY3JldE5hbWU6ICcvbXktYXBwL2NvbmZpZycgfSksXHJcbiAqICAgXSxcclxuICogICBzY2hlbWEsXHJcbiAqICAgcHJlY2VkZW5jZTogJ2F3cy1maXJzdCcsXHJcbiAqICAgdmVyYm9zZTogdHJ1ZSxcclxuICogfSk7XHJcbiAqXHJcbiAqIGF3YWl0IG1hbmFnZXIubG9hZCgpO1xyXG4gKiBjb25zdCBkYlVybCA9IG1hbmFnZXIuZ2V0KCdEQVRBQkFTRV9VUkwnKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29uZmlnTWFuYWdlcjxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9vcHRpb25zOiBSZXF1aXJlZDxPbWl0PENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+LCAnc2NoZW1hJyB8ICdsb2dnZXInIHwgJ3ZlcmJvc2UnPj4gJiB7XHJcbiAgICBzY2hlbWE/OiBDb25maWdNYW5hZ2VyT3B0aW9uczxUPlsnc2NoZW1hJ107XHJcbiAgICBsb2dnZXI/OiBMb2dnZXI7XHJcbiAgICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG4gIH07XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfbG9nZ2VyOiBMb2dnZXI7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfdmVyYm9zZU9wdGlvbnM6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiB8IG51bGw7XHJcblxyXG4gIHByaXZhdGUgY29uZmlnOiBUIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkUmVzdWx0OiBDb25maWdMb2FkUmVzdWx0PFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4gPSB7fSkge1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcclxuICAgICAgbG9hZGVyczogb3B0aW9ucy5sb2FkZXJzID8/IFtdLFxyXG4gICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxyXG4gICAgICBwcmVjZWRlbmNlOiBvcHRpb25zLnByZWNlZGVuY2UgPz8gJ2F3cy1maXJzdCcsXHJcbiAgICAgIHZhbGlkYXRlT25Mb2FkOiBvcHRpb25zLnZhbGlkYXRlT25Mb2FkID8/IHRydWUsXHJcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IG9wdGlvbnMuZW5hYmxlTG9nZ2luZyA/PyBmYWxzZSxcclxuICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcclxuICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2xvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGRlZmF1bHRMb2dnZXI7XHJcbiAgICB0aGlzLl92ZXJib3NlT3B0aW9ucyA9IHRoaXMucmVzb2x2ZVZlcmJvc2VPcHRpb25zKG9wdGlvbnMudmVyYm9zZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIHZlcmJvc2Ugb3B0aW9ucyBmcm9tIGJvb2xlYW4gb3Igb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlVmVyYm9zZU9wdGlvbnModmVyYm9zZT86IFZlcmJvc2VPcHRpb25zIHwgYm9vbGVhbik6IFJlcXVpcmVkPFZlcmJvc2VPcHRpb25zPiB8IG51bGwge1xyXG4gICAgaWYgKHZlcmJvc2UgPT09IHVuZGVmaW5lZCB8fCB2ZXJib3NlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh2ZXJib3NlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB7IC4uLkRFRkFVTFRfVkVSQk9TRV9PUFRJT05TIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsb2dLZXlzOiB2ZXJib3NlLmxvZ0tleXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nS2V5cyxcclxuICAgICAgbG9nVmFsdWVzOiB2ZXJib3NlLmxvZ1ZhbHVlcyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5sb2dWYWx1ZXMsXHJcbiAgICAgIGxvZ092ZXJyaWRlczogdmVyYm9zZS5sb2dPdmVycmlkZXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nT3ZlcnJpZGVzLFxyXG4gICAgICBsb2dUaW1pbmc6IHZlcmJvc2UubG9nVGltaW5nID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ1RpbWluZyxcclxuICAgICAgbWFza1ZhbHVlczogdmVyYm9zZS5tYXNrVmFsdWVzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLm1hc2tWYWx1ZXMsXHJcbiAgICAgIHNlbnNpdGl2ZUtleXM6IHZlcmJvc2Uuc2Vuc2l0aXZlS2V5cyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5zZW5zaXRpdmVLZXlzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvZyBhIG1lc3NhZ2UgaWYgbG9nZ2luZyBpcyBlbmFibGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5lbmFibGVMb2dnaW5nIHx8IHRoaXMuX3ZlcmJvc2VPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFtjb25maWctYXdzXSAke21lc3NhZ2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXNrIGEgdmFsdWUgZm9yIGxvZ2dpbmdcclxuICAgKi9cclxuICBwcml2YXRlIG1hc2tWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVmFsdWVzKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdHJWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcbiAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIGtleSBjb250YWlucyBhbnkgc2Vuc2l0aXZlIHBhdHRlcm5zXHJcbiAgICBjb25zdCBpc1NlbnNpdGl2ZSA9IHRoaXMuX3ZlcmJvc2VPcHRpb25zLnNlbnNpdGl2ZUtleXMuc29tZShcclxuICAgICAgKHBhdHRlcm4pID0+IGxvd2VyS2V5LmluY2x1ZGVzKHBhdHRlcm4udG9Mb3dlckNhc2UoKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zLm1hc2tWYWx1ZXMgfHwgaXNTZW5zaXRpdmUpIHtcclxuICAgICAgaWYgKHN0clZhbHVlLmxlbmd0aCA8PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuICcqKioqJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYCR7c3RyVmFsdWUuc2xpY2UoMCwgMil9KiouLi4ke3N0clZhbHVlLnNsaWNlKC0yKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJWYWx1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxvYWRpbmcgb3JkZXIgZm9yIGxvYWRlcnMgYmFzZWQgb24gcHJlY2VkZW5jZSBzdHJhdGVneS5cclxuICAgKiBSZXR1cm5zIGxvYWRlcnMgc29ydGVkIGJ5IHByaW9yaXR5IChsb3dlciBwcmlvcml0eSBmaXJzdCwgc28gaGlnaGVyIHByaW9yaXR5IGxvYWRzIGxhc3QgYW5kIHdpbnMpLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TG9hZE9yZGVyKCk6IENvbmZpZ0xvYWRlcltdIHtcclxuICAgIGNvbnN0IHsgbG9hZGVycywgcHJlY2VkZW5jZSB9ID0gdGhpcy5fb3B0aW9ucztcclxuXHJcbiAgICBpZiAoIWxvYWRlcnMgfHwgbG9hZGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHByZWNlZGVuY2UgaXMgYSBjdXN0b20gYXJyYXksIHVzZSBpdFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJlY2VkZW5jZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydEJ5Q3VzdG9tUHJlY2VkZW5jZShsb2FkZXJzLCBwcmVjZWRlbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgcHJlZGVmaW5lZCBwcmVjZWRlbmNlIG9yZGVyXHJcbiAgICBjb25zdCBvcmRlciA9IFBSRUNFREVOQ0VfT1JERVJTW3ByZWNlZGVuY2VdO1xyXG4gICAgcmV0dXJuIHRoaXMuc29ydEJ5UHJlZGVmaW5lZE9yZGVyKGxvYWRlcnMsIG9yZGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbG9hZGVycyBieSBjdXN0b20gcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzb3J0QnlDdXN0b21QcmVjZWRlbmNlKGxvYWRlcnM6IENvbmZpZ0xvYWRlcltdLCBwcmVjZWRlbmNlOiBMb2FkZXJQcmVjZWRlbmNlW10pOiBDb25maWdMb2FkZXJbXSB7XHJcbiAgICBjb25zdCBwcmlvcml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcbiAgICBmb3IgKGNvbnN0IHAgb2YgcHJlY2VkZW5jZSkge1xyXG4gICAgICBwcmlvcml0eU1hcC5zZXQocC5sb2FkZXIsIHAucHJpb3JpdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnQgYnkgcHJpb3JpdHkgKGxvd2VyIGZpcnN0LCBzbyBoaWdoZXIgcHJpb3JpdHkgbG9hZHMgbGFzdCBhbmQgd2lucylcclxuICAgIHJldHVybiBbLi4ubG9hZGVyc10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBwcmlvcml0eUEgPSBwcmlvcml0eU1hcC5nZXQoYS5nZXROYW1lKCkpID8/IDA7XHJcbiAgICAgIGNvbnN0IHByaW9yaXR5QiA9IHByaW9yaXR5TWFwLmdldChiLmdldE5hbWUoKSkgPz8gMDtcclxuICAgICAgcmV0dXJuIHByaW9yaXR5QSAtIHByaW9yaXR5QjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29ydCBsb2FkZXJzIGJ5IHByZWRlZmluZWQgb3JkZXJcclxuICAgKi9cclxuICBwcml2YXRlIHNvcnRCeVByZWRlZmluZWRPcmRlcihsb2FkZXJzOiBDb25maWdMb2FkZXJbXSwgb3JkZXI6IHN0cmluZ1tdKTogQ29uZmlnTG9hZGVyW10ge1xyXG4gICAgY29uc3Qgb3JkZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgb3JkZXIuZm9yRWFjaCgobmFtZSwgaW5kZXgpID0+IG9yZGVyTWFwLnNldChuYW1lLCBpbmRleCkpO1xyXG5cclxuICAgIC8vIFNvcnQgYnkgb3JkZXIgaW5kZXggKGxvd2VyIGZpcnN0LCBzbyBoaWdoZXIgaW5kZXggbG9hZHMgbGFzdCBhbmQgd2lucylcclxuICAgIHJldHVybiBbLi4ubG9hZGVyc10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleEEgPSBvcmRlck1hcC5nZXQoYS5nZXROYW1lKCkpID8/IC0xO1xyXG4gICAgICBjb25zdCBpbmRleEIgPSBvcmRlck1hcC5nZXQoYi5nZXROYW1lKCkpID8/IC0xO1xyXG4gICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgY29uZmlndXJlZCBsb2FkZXJzLlxyXG4gICAqIExvYWRlcnMgYXJlIGV4ZWN1dGVkIGluIHByZWNlZGVuY2Ugb3JkZXIsIHdpdGggbGF0ZXIgbG9hZGVycyBvdmVycmlkaW5nIGVhcmxpZXIgb25lcy5cclxuICAgKi9cclxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXSA9IFtdO1xyXG4gICAgbGV0IG1lcmdlZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcclxuICAgIGNvbnN0IGtleU9yaWdpbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7IC8vIFRyYWNrIHdoaWNoIGxvYWRlciBzZXQgZWFjaCBrZXlcclxuXHJcbiAgICB0aGlzLmxvZygnTG9hZGluZyBjb25maWd1cmF0aW9uLi4uJyk7XHJcblxyXG4gICAgY29uc3Qgb3JkZXJlZExvYWRlcnMgPSB0aGlzLmdldExvYWRPcmRlcigpO1xyXG5cclxuICAgIGZvciAoY29uc3QgbG9hZGVyIG9mIG9yZGVyZWRMb2FkZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxvYWRlck5hbWUgPSBsb2FkZXIuZ2V0TmFtZSgpO1xyXG4gICAgICBjb25zdCBsb2FkZXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBDaGVjayBpZiBsb2FkZXIgaXMgYXZhaWxhYmxlXHJcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCBsb2FkZXIuaXNBdmFpbGFibGUoKTtcclxuICAgICAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1RpbWluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhgJHtsb2FkZXJOYW1lfTogc2tpcHBlZCAobm90IGF2YWlsYWJsZSlgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9hZCBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBsb2FkZXJcclxuICAgICAgICBjb25zdCBsb2FkZXJDb25maWcgPSBhd2FpdCBsb2FkZXIubG9hZCgpO1xyXG4gICAgICAgIGNvbnN0IGtleXNMb2FkZWQgPSBPYmplY3Qua2V5cyhsb2FkZXJDb25maWcpO1xyXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIGxvYWRlclN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgLy8gVHJhY2sgc291cmNlIGluZm9cclxuICAgICAgICBzb3VyY2VzLnB1c2goe1xyXG4gICAgICAgICAgbG9hZGVyOiBsb2FkZXJOYW1lLFxyXG4gICAgICAgICAga2V5c0xvYWRlZCxcclxuICAgICAgICAgIGR1cmF0aW9uLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBMb2cgdGltaW5nIGFuZCBrZXlzXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dUaW1pbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9nKGAke2xvYWRlck5hbWV9OiBsb2FkZWQgJHtrZXlzTG9hZGVkLmxlbmd0aH0ga2V5cyBpbiAke2R1cmF0aW9ufW1zYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMb2cgaW5kaXZpZHVhbCBrZXlzIGFuZCB0cmFjayBvdmVycmlkZXNcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzTG9hZGVkKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0xvYWRlciA9IGtleU9yaWdpbnMuZ2V0KGtleSk7XHJcbiAgICAgICAgICBjb25zdCBpc092ZXJyaWRlID0gcHJldmlvdXNMb2FkZXIgIT09IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ0tleXMpIHtcclxuICAgICAgICAgICAgbGV0IGxvZ0xpbmUgPSBgICAtICR7a2V5fWA7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucy5sb2dWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBsb2dMaW5lICs9IGAgPSBcIiR7dGhpcy5tYXNrVmFsdWUoa2V5LCBsb2FkZXJDb25maWdba2V5XSl9XCJgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc092ZXJyaWRlICYmIHRoaXMuX3ZlcmJvc2VPcHRpb25zLmxvZ092ZXJyaWRlcykge1xyXG4gICAgICAgICAgICAgIGxvZ0xpbmUgKz0gYCAob3ZlcnJpZGVzICR7cHJldmlvdXNMb2FkZXJ9KWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2cobG9nTGluZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAga2V5T3JpZ2lucy5zZXQoa2V5LCBsb2FkZXJOYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb24gKGxhdGVyIGxvYWRlcnMgb3ZlcnJpZGUgZWFybGllciBvbmVzKVxyXG4gICAgICAgIG1lcmdlZENvbmZpZyA9IHsgLi4ubWVyZ2VkQ29uZmlnLCAuLi5sb2FkZXJDb25maWcgfTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkxvYWRFcnJvcihcclxuICAgICAgICAgIGBGYWlsZWQgdG8gbG9hZCBjb25maWd1cmF0aW9uIGZyb20gJHtsb2FkZXJOYW1lfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAgIGxvYWRlck5hbWUsXHJcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ291bnQgb3ZlcnJpZGVzXHJcbiAgICBjb25zdCB0b3RhbEtleXMgPSBPYmplY3Qua2V5cyhtZXJnZWRDb25maWcpLmxlbmd0aDtcclxuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xyXG4gICAgY29uc3Qgb3ZlcnJpZGVDb3VudCA9IHNvdXJjZXMucmVkdWNlKChhY2MsIHMpID0+IGFjYyArIHMua2V5c0xvYWRlZC5sZW5ndGgsIDApIC0gdG90YWxLZXlzO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVGltaW5nKSB7XHJcbiAgICAgIHRoaXMubG9nKGBDb25maWd1cmF0aW9uIGxvYWRlZDogJHt0b3RhbEtleXN9IHRvdGFsIGtleXMsICR7b3ZlcnJpZGVDb3VudH0gb3ZlcnJpZGVzLCAke3RvdGFsRHVyYXRpb259bXMgdG90YWxgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBpZiBzY2hlbWEgaXMgcHJvdmlkZWQgYW5kIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2NoZW1hICYmIHRoaXMuX29wdGlvbnMudmFsaWRhdGVPbkxvYWQpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fb3B0aW9ucy5zY2hlbWEuc2FmZVBhcnNlKG1lcmdlZENvbmZpZyk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB6b2RFcnJvciA9IHJlc3VsdC5lcnJvciBhcyBab2RFcnJvcjtcclxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7em9kRXJyb3IuZXJyb3JzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyl9YCxcclxuICAgICAgICAgIHpvZEVycm9yLmVycm9ycyxcclxuICAgICAgICAgIHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcgPSByZXN1bHQuZGF0YSBhcyBUO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBtZXJnZWRDb25maWcgYXMgVDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRSZXN1bHQgPSB7XHJcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXHJcbiAgICAgIHNvdXJjZXMsXHJcbiAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB2YWx1ZSBieSBrZXkuXHJcbiAgICogQHBhcmFtIGtleSBUaGUgY29uZmlndXJhdGlvbiBrZXlcclxuICAgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZVxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkVycm9yIGlmIGNvbmZpZ3VyYXRpb24gaXMgbm90IGxvYWRlZFxyXG4gICAqL1xyXG4gIGdldDxLIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBLKTogVFtLXSB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICAvLyBOb24tbnVsbCBhc3NlcnRpb24gaXMgc2FmZSBoZXJlIGJlY2F1c2Ugd2UndmUgY2hlY2tlZCB0aGlzLmNvbmZpZyAhPT0gbnVsbCBhYm92ZVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnIVtrZXldO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCBjb25maWd1cmF0aW9uIHZhbHVlcy5cclxuICAgKiBAcmV0dXJucyBUaGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBnZXRBbGwoKTogVCB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGxvYWRlZC5cclxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGNvbmZpZ3VyYXRpb24gaXMgbG9hZGVkXHJcbiAgICovXHJcbiAgaXNMb2FkZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuXHJcbiAgICogQHJldHVybnMgVGhlIEFQUF9FTlYgdmFsdWUgb3IgJ2RldmVsb3BtZW50JyBhcyBkZWZhdWx0XHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbJ0FQUF9FTlYnXSA/PyAnZGV2ZWxvcG1lbnQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsb2FkIHJlc3VsdCB3aXRoIHNvdXJjZSBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJucyBUaGUgbG9hZCByZXN1bHQgb3IgbnVsbCBpZiBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgZ2V0TG9hZFJlc3VsdCgpOiBDb25maWdMb2FkUmVzdWx0PFQ+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gSlNPTiBzdHJpbmcuXHJcbiAgICogQHJldHVybnMgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5sb2FkZWQgfHwgdGhpcy5jb25maWcgPT09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcignQ29uZmlndXJhdGlvbiBub3QgbG9hZGVkLiBDYWxsIGxvYWQoKSBmaXJzdC4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgQ29uZmlnTWFuYWdlciB3aXRoIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gYSBKU09OIHN0cmluZy5cclxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIHNlcmlhbGl6ZWQgc3RhdGUuXHJcbiAgICogQHBhcmFtIGpzb24gSlNPTiBzdHJpbmcgdG8gZGVzZXJpYWxpemVcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBDb25maWdNYW5hZ2VyIG9wdGlvbnMgKHNjaGVtYSB3aWxsIGJlIHVzZWQgZm9yIHZhbGlkYXRpb24pXHJcbiAgICogQHJldHVybnMgQSBuZXcgQ29uZmlnTWFuYWdlciBpbnN0YW5jZSB3aXRoIHRoZSBkZXNlcmlhbGl6ZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZTxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxyXG4gICAganNvbjogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD4gPSB7fVxyXG4gICk6IENvbmZpZ01hbmFnZXI8VD4ge1xyXG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBpZiBzY2hlbWEgaXMgcHJvdmlkZWRcclxuICAgIGlmIChvcHRpb25zLnNjaGVtYSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBvcHRpb25zLnNjaGVtYS5zYWZlUGFyc2UocGFyc2VkKTtcclxuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnN0IHpvZEVycm9yID0gcmVzdWx0LmVycm9yIGFzIFpvZEVycm9yO1xyXG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXHJcbiAgICAgICAgICBgRGVzZXJpYWxpemF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3pvZEVycm9yLmVycm9ycy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgICB6b2RFcnJvci5lcnJvcnMsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IENvbmZpZ01hbmFnZXIgYW5kIHNldCBpdHMgaW50ZXJuYWwgc3RhdGVcclxuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcjxUPihvcHRpb25zKTtcclxuICAgIG1hbmFnZXIuY29uZmlnID0gcGFyc2VkIGFzIFQ7XHJcbiAgICBtYW5hZ2VyLmxvYWRlZCA9IHRydWU7XHJcbiAgICBtYW5hZ2VyLmxvYWRSZXN1bHQgPSB7XHJcbiAgICAgIGNvbmZpZzogcGFyc2VkIGFzIFQsXHJcbiAgICAgIHNvdXJjZXM6IFt7IGxvYWRlcjogJ2Rlc2VyaWFsaXplJywga2V5c0xvYWRlZDogT2JqZWN0LmtleXMocGFyc2VkKSwgZHVyYXRpb246IDAgfV0sXHJcbiAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbWFuYWdlcjtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base error class for all configuration-related errors
|
|
3
|
-
*/
|
|
4
|
-
export class ConfigurationError extends Error {
|
|
5
|
-
/** The underlying cause of this error */
|
|
6
|
-
cause;
|
|
7
|
-
constructor(message, cause) {
|
|
8
|
-
super(message);
|
|
9
|
-
this.name = 'ConfigurationError';
|
|
10
|
-
this.cause = cause;
|
|
11
|
-
Object.setPrototypeOf(this, ConfigurationError.prototype);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Error thrown when configuration validation fails
|
|
16
|
-
*/
|
|
17
|
-
export class ValidationError extends ConfigurationError {
|
|
18
|
-
/** Detailed validation errors from Zod */
|
|
19
|
-
validationErrors;
|
|
20
|
-
constructor(message, validationErrors, cause) {
|
|
21
|
-
super(message, cause);
|
|
22
|
-
this.name = 'ValidationError';
|
|
23
|
-
this.validationErrors = validationErrors;
|
|
24
|
-
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Error thrown when an AWS service operation fails
|
|
29
|
-
*/
|
|
30
|
-
export class AWSServiceError extends ConfigurationError {
|
|
31
|
-
/** The AWS service that failed */
|
|
32
|
-
service;
|
|
33
|
-
/** The operation that failed */
|
|
34
|
-
operation;
|
|
35
|
-
constructor(message, service, operation, cause) {
|
|
36
|
-
super(message, cause);
|
|
37
|
-
this.name = 'AWSServiceError';
|
|
38
|
-
this.service = service;
|
|
39
|
-
this.operation = operation;
|
|
40
|
-
Object.setPrototypeOf(this, AWSServiceError.prototype);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Error thrown when a configuration loader fails to load
|
|
45
|
-
*/
|
|
46
|
-
export class ConfigurationLoadError extends ConfigurationError {
|
|
47
|
-
/** The name of the loader that failed */
|
|
48
|
-
loader;
|
|
49
|
-
constructor(message, loader, cause) {
|
|
50
|
-
super(message, cause);
|
|
51
|
-
this.name = 'ConfigurationLoadError';
|
|
52
|
-
this.loader = loader;
|
|
53
|
-
Object.setPrototypeOf(this, ConfigurationLoadError.prototype);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Error thrown when required configuration keys are missing
|
|
58
|
-
*/
|
|
59
|
-
export class MissingConfigurationError extends ConfigurationError {
|
|
60
|
-
/** The keys that are missing */
|
|
61
|
-
missingKeys;
|
|
62
|
-
constructor(message, missingKeys, cause) {
|
|
63
|
-
super(message, cause);
|
|
64
|
-
this.name = 'MissingConfigurationError';
|
|
65
|
-
this.missingKeys = missingKeys;
|
|
66
|
-
Object.setPrototypeOf(this, MissingConfigurationError.prototype);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9lcnJvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsS0FBSztJQUMzQyx5Q0FBeUM7SUFDekIsS0FBSyxDQUFTO0lBRTlCLFlBQVksT0FBZSxFQUFFLEtBQWE7UUFDeEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLGtCQUFrQjtJQUNyRCwwQ0FBMEM7SUFDMUIsZ0JBQWdCLENBQVU7SUFFMUMsWUFBWSxPQUFlLEVBQUUsZ0JBQXlCLEVBQUUsS0FBYTtRQUNuRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLGtCQUFrQjtJQUNyRCxrQ0FBa0M7SUFDbEIsT0FBTyxDQUFTO0lBQ2hDLGdDQUFnQztJQUNoQixTQUFTLENBQVM7SUFFbEMsWUFBWSxPQUFlLEVBQUUsT0FBZSxFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUM1RSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQUM1RCx5Q0FBeUM7SUFDekIsTUFBTSxDQUFTO0lBRS9CLFlBQVksT0FBZSxFQUFFLE1BQWMsRUFBRSxLQUFhO1FBQ3hELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyx3QkFBd0IsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxrQkFBa0I7SUFDL0QsZ0NBQWdDO0lBQ2hCLFdBQVcsQ0FBVztJQUV0QyxZQUFZLE9BQWUsRUFBRSxXQUFxQixFQUFFLEtBQWE7UUFDL0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLDJCQUEyQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBCYXNlIGVycm9yIGNsYXNzIGZvciBhbGwgY29uZmlndXJhdGlvbi1yZWxhdGVkIGVycm9yc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAvKiogVGhlIHVuZGVybHlpbmcgY2F1c2Ugb2YgdGhpcyBlcnJvciAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBjYXVzZT86IEVycm9yO1xyXG5cclxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGNhdXNlPzogRXJyb3IpIHtcclxuICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ3VyYXRpb25FcnJvcic7XHJcbiAgICB0aGlzLmNhdXNlID0gY2F1c2U7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQ29uZmlndXJhdGlvbkVycm9yLnByb3RvdHlwZSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQ29uZmlndXJhdGlvbkVycm9yIHtcclxuICAvKiogRGV0YWlsZWQgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBab2QgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRhdGlvbkVycm9yczogdW5rbm93bjtcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB2YWxpZGF0aW9uRXJyb3JzOiB1bmtub3duLCBjYXVzZT86IEVycm9yKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7XHJcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcclxuICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRpb25FcnJvcnM7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVmFsaWRhdGlvbkVycm9yLnByb3RvdHlwZSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gYW4gQVdTIHNlcnZpY2Ugb3BlcmF0aW9uIGZhaWxzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQVdTU2VydmljZUVycm9yIGV4dGVuZHMgQ29uZmlndXJhdGlvbkVycm9yIHtcclxuICAvKiogVGhlIEFXUyBzZXJ2aWNlIHRoYXQgZmFpbGVkICovXHJcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcclxuICAvKiogVGhlIG9wZXJhdGlvbiB0aGF0IGZhaWxlZCAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRpb246IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBjYXVzZT86IEVycm9yKSB7XHJcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7XHJcbiAgICB0aGlzLm5hbWUgPSAnQVdTU2VydmljZUVycm9yJztcclxuICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XHJcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBBV1NTZXJ2aWNlRXJyb3IucHJvdG90eXBlKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIGNvbmZpZ3VyYXRpb24gbG9hZGVyIGZhaWxzIHRvIGxvYWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uTG9hZEVycm9yIGV4dGVuZHMgQ29uZmlndXJhdGlvbkVycm9yIHtcclxuICAvKiogVGhlIG5hbWUgb2YgdGhlIGxvYWRlciB0aGF0IGZhaWxlZCAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBsb2FkZXI6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBsb2FkZXI6IHN0cmluZywgY2F1c2U/OiBFcnJvcikge1xyXG4gICAgc3VwZXIobWVzc2FnZSwgY2F1c2UpO1xyXG4gICAgdGhpcy5uYW1lID0gJ0NvbmZpZ3VyYXRpb25Mb2FkRXJyb3InO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQ29uZmlndXJhdGlvbkxvYWRFcnJvci5wcm90b3R5cGUpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEVycm9yIHRocm93biB3aGVuIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24ga2V5cyBhcmUgbWlzc2luZ1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IgZXh0ZW5kcyBDb25maWd1cmF0aW9uRXJyb3Ige1xyXG4gIC8qKiBUaGUga2V5cyB0aGF0IGFyZSBtaXNzaW5nICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG1pc3NpbmdLZXlzOiBzdHJpbmdbXTtcclxuXHJcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBtaXNzaW5nS2V5czogc3RyaW5nW10sIGNhdXNlPzogRXJyb3IpIHtcclxuICAgIHN1cGVyKG1lc3NhZ2UsIGNhdXNlKTtcclxuICAgIHRoaXMubmFtZSA9ICdNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yJztcclxuICAgIHRoaXMubWlzc2luZ0tleXMgPSBtaXNzaW5nS2V5cztcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yLnByb3RvdHlwZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @dyanet/config-aws
|
|
3
|
-
*
|
|
4
|
-
* Framework-agnostic AWS configuration management library.
|
|
5
|
-
* Supports environment variables, AWS Secrets Manager, SSM Parameter Store,
|
|
6
|
-
* S3, and .env files with configurable precedence.
|
|
7
|
-
*/
|
|
8
|
-
// Error classes
|
|
9
|
-
export { ConfigurationError, ValidationError, AWSServiceError, ConfigurationLoadError, MissingConfigurationError, } from './errors/index.js';
|
|
10
|
-
// Loaders
|
|
11
|
-
export { EnvironmentLoader } from './loaders/environment.loader.js';
|
|
12
|
-
export { EnvFileLoader } from './loaders/env-file.loader.js';
|
|
13
|
-
export { S3Loader } from './loaders/s3.loader.js';
|
|
14
|
-
export { SecretsManagerLoader } from './loaders/secrets-manager.loader.js';
|
|
15
|
-
export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader.js';
|
|
16
|
-
// ConfigManager
|
|
17
|
-
export { ConfigManager } from './config-manager.js';
|
|
18
|
-
// Utilities
|
|
19
|
-
export { ConfigValidationUtil } from './utils/validation.util.js';
|
|
20
|
-
export { EnvFileParser } from './utils/env-file-parser.util.js';
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQ0gsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsVUFBVTtBQUNWLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEYsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxZQUFZO0FBQ1osT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBkeWFuZXQvY29uZmlnLWF3c1xyXG4gKlxyXG4gKiBGcmFtZXdvcmstYWdub3N0aWMgQVdTIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBsaWJyYXJ5LlxyXG4gKiBTdXBwb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIEFXUyBTZWNyZXRzIE1hbmFnZXIsIFNTTSBQYXJhbWV0ZXIgU3RvcmUsXHJcbiAqIFMzLCBhbmQgLmVudiBmaWxlcyB3aXRoIGNvbmZpZ3VyYWJsZSBwcmVjZWRlbmNlLlxyXG4gKi9cclxuXHJcbi8vIEludGVyZmFjZXNcclxuZXhwb3J0IHR5cGUge1xyXG4gIENvbmZpZ0xvYWRlcixcclxuICBDb25maWdMb2FkZXJSZXN1bHQsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBDb25maWdNYW5hZ2VyT3B0aW9ucyxcclxuICBMb2FkZXJQcmVjZWRlbmNlLFxyXG4gIFZlcmJvc2VPcHRpb25zLFxyXG4gIFByZWNlZGVuY2VTdHJhdGVneSxcclxuICBDb25maWdMb2FkUmVzdWx0LFxyXG4gIENvbmZpZ1NvdXJjZUluZm8sXHJcbiAgTG9nZ2VyLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UuanMnO1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIEVudmlyb25tZW50TG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9lbnZpcm9ubWVudC1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBFbnZGaWxlTG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9lbnYtZmlsZS1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTM0xvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvczMtbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgU2VjcmV0c01hbmFnZXJMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvc3NtLXBhcmFtZXRlci1zdG9yZS1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuXHJcbi8vIEVycm9yIGNsYXNzZXNcclxuZXhwb3J0IHtcclxuICBDb25maWd1cmF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIEFXU1NlcnZpY2VFcnJvcixcclxuICBDb25maWd1cmF0aW9uTG9hZEVycm9yLFxyXG4gIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IsXHJcbn0gZnJvbSAnLi9lcnJvcnMvaW5kZXguanMnO1xyXG5cclxuLy8gTG9hZGVyc1xyXG5leHBvcnQgeyBFbnZpcm9ubWVudExvYWRlciB9IGZyb20gJy4vbG9hZGVycy9lbnZpcm9ubWVudC5sb2FkZXIuanMnO1xyXG5leHBvcnQgeyBFbnZGaWxlTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL2Vudi1maWxlLmxvYWRlci5qcyc7XHJcbmV4cG9ydCB7IFMzTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL3MzLmxvYWRlci5qcyc7XHJcbmV4cG9ydCB7IFNlY3JldHNNYW5hZ2VyTG9hZGVyIH0gZnJvbSAnLi9sb2FkZXJzL3NlY3JldHMtbWFuYWdlci5sb2FkZXIuanMnO1xyXG5leHBvcnQgeyBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zc20tcGFyYW1ldGVyLXN0b3JlLmxvYWRlci5qcyc7XHJcblxyXG4vLyBDb25maWdNYW5hZ2VyXHJcbmV4cG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy1tYW5hZ2VyLmpzJztcclxuXHJcbi8vIFV0aWxpdGllc1xyXG5leHBvcnQgeyBDb25maWdWYWxpZGF0aW9uVXRpbCB9IGZyb20gJy4vdXRpbHMvdmFsaWRhdGlvbi51dGlsLmpzJztcclxuZXhwb3J0IHsgRW52RmlsZVBhcnNlciB9IGZyb20gJy4vdXRpbHMvZW52LWZpbGUtcGFyc2VyLnV0aWwuanMnO1xyXG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUmVzdWx0IHJldHVybmVkIGJ5IGEgY29uZmlndXJhdGlvbiBsb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZGVyUmVzdWx0IHtcclxuICAvKiogVGhlIGxvYWRlZCBjb25maWd1cmF0aW9uIGtleS12YWx1ZSBwYWlycyAqL1xyXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgLyoqIEtleXMgdGhhdCB3ZXJlIGxvYWRlZCBieSB0aGlzIGxvYWRlciAqL1xyXG4gIGtleXNMb2FkZWQ6IHN0cmluZ1tdO1xyXG4gIC8qKiBUaW1lIHRha2VuIHRvIGxvYWQgaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgZHVyYXRpb246IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgY29uZmlndXJhdGlvbiBsb2FkZXJzLlxyXG4gKiBBbGwgbG9hZGVycyBtdXN0IGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIHdpdGggQ29uZmlnTWFuYWdlci5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTG9hZGVyIHtcclxuICAvKipcclxuICAgKiBMb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc291cmNlLlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBsb2FkZWQgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIGxvYWRlciBmb3IgbG9nZ2luZyBhbmQgZGVidWdnaW5nLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZXIgbmFtZVxyXG4gICAqL1xyXG4gIGdldE5hbWUoKTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGlzIGxvYWRlciBpcyBhdmFpbGFibGUgYW5kIGNhbiBsb2FkIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiB0aGUgbG9hZGVyIGNhbiBsb2FkIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/OiBib29sZWFuO1xyXG4gIC8qKiBNYXNrIHNlbnNpdGl2ZSB2YWx1ZXMgKHNob3cgZmlyc3QvbGFzdCAyIGNoYXJzIG9ubHkpLiBEZWZhdWx0OiB0cnVlICh3aGVuIGxvZ1ZhbHVlcyBpcyB0cnVlKSAqL1xyXG4gIG1hc2tWYWx1ZXM/OiBib29sZWFuO1xyXG4gIC8qKiBLZXlzIHRvIGFsd2F5cyBtYXNrIHJlZ2FyZGxlc3Mgb2YgbWFza1ZhbHVlcyBzZXR0aW5nLiBEZWZhdWx0OiBbJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdrZXknLCAndG9rZW4nXSAqL1xyXG4gIHNlbnNpdGl2ZUtleXM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBsb2FkZXIgcHJlY2VkZW5jZSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclByZWNlZGVuY2Uge1xyXG4gIC8qKiBMb2FkZXIgbmFtZSAqL1xyXG4gIGxvYWRlcjogc3RyaW5nO1xyXG4gIC8qKiBQcmlvcml0eSAtIGhpZ2hlciB2YWx1ZXMgb3ZlcnJpZGUgbG93ZXIgdmFsdWVzICovXHJcbiAgcHJpb3JpdHk6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZWNlZGVuY2Ugc3RyYXRlZ3kgZm9yIG1lcmdpbmcgY29uZmlndXJhdGlvbnNcclxuICogLSAnYXdzLWZpcnN0JzogZW52IC0+IGVudkZpbGUgLT4gczMgLT4gc2VjcmV0c01hbmFnZXIgLT4gc3NtIChBV1Mgd2lucylcclxuICogLSAnbG9jYWwtZmlyc3QnOiBzZWNyZXRzTWFuYWdlciAtPiBzc20gLT4gczMgLT4gZW52RmlsZSAtPiBlbnYgKGxvY2FsIHdpbnMpXHJcbiAqIC0gQ3VzdG9tIGFycmF5OiB1c2VyLWRlZmluZWQgb3JkZXIgdmlhIExvYWRlclByZWNlZGVuY2VbXVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgUHJlY2VkZW5jZVN0cmF0ZWd5ID0gJ2F3cy1maXJzdCcgfCAnbG9jYWwtZmlyc3QnIHwgTG9hZGVyUHJlY2VkZW5jZVtdO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIENvbmZpZ01hbmFnZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnTWFuYWdlck9wdGlvbnM8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEFycmF5IG9mIGxvYWRlcnMgdG8gdXNlICovXHJcbiAgbG9hZGVycz86IENvbmZpZ0xvYWRlcltdO1xyXG4gIC8qKiBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW9uICovXHJcbiAgc2NoZW1hPzogWm9kVHlwZTxUPjtcclxuICAvKiogUHJlY2VkZW5jZSBzdHJhdGVneSBmb3IgbWVyZ2luZyBjb25maWd1cmF0aW9ucyAqL1xyXG4gIHByZWNlZGVuY2U/OiBQcmVjZWRlbmNlU3RyYXRlZ3k7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgY29uZmlndXJhdGlvbiBvbiBsb2FkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgdmFsaWRhdGVPbkxvYWQ/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gRGVmYXVsdDogZmFsc2UgKi9cclxuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcclxuICAvKiogQ3VzdG9tIGxvZ2dlciBpbnN0YW5jZSAqL1xyXG4gIGxvZ2dlcj86IExvZ2dlcjtcclxuICAvKiogVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0IG9wdGlvbnMgKi9cclxuICB2ZXJib3NlPzogVmVyYm9zZU9wdGlvbnMgfCBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uIHNvdXJjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTb3VyY2VJbmZvIHtcclxuICAvKiogTmFtZSBvZiB0aGUgbG9hZGVyICovXHJcbiAgbG9hZGVyOiBzdHJpbmc7XHJcbiAgLyoqIEtleXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyICovXHJcbiAga2V5c0xvYWRlZDogc3RyaW5nW107XHJcbiAgLyoqIFRpbWUgdGFrZW4gdG8gbG9hZCBpbiBtaWxsaXNlY29uZHMgKi9cclxuICBkdXJhdGlvbjogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzdWx0IG9mIGxvYWRpbmcgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkUmVzdWx0PFQ+IHtcclxuICAvKiogVGhlIG1lcmdlZCBjb25maWd1cmF0aW9uICovXHJcbiAgY29uZmlnOiBUO1xyXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNvdXJjZSAqL1xyXG4gIHNvdXJjZXM6IENvbmZpZ1NvdXJjZUluZm9bXTtcclxuICAvKiogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbG9hZGVkICovXHJcbiAgbG9hZGVkQXQ6IERhdGU7XHJcbn1cclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRW52RmlsZUxvYWRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFbnZGaWxlTG9hZGVyQ29uZmlnIHtcclxuICAvKiogUGF0aHMgdG8gLmVudiBmaWxlcyB0byBsb2FkLiBEZWZhdWx0OiBbJy5lbnYnLCAnLmVudi5sb2NhbCddICovXHJcbiAgcGF0aHM/OiBzdHJpbmdbXTtcclxuICAvKiogRmlsZSBlbmNvZGluZy4gRGVmYXVsdDogJ3V0Zi04JyAqL1xyXG4gIGVuY29kaW5nPzogQnVmZmVyRW5jb2Rpbmc7XHJcbiAgLyoqIFdoZXRoZXIgbGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgb3ZlcnJpZGU/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRW52aXJvbm1lbnRMb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnRMb2FkZXJDb25maWcge1xyXG4gIC8qKiBQcmVmaXggdG8gZmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcy4gT25seSB2YXJpYWJsZXMgc3RhcnRpbmcgd2l0aCB0aGlzIHByZWZpeCB3aWxsIGJlIGxvYWRlZC4gKi9cclxuICBwcmVmaXg/OiBzdHJpbmc7XHJcbiAgLyoqIExpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIGxvYWRpbmcgKi9cclxuICBleGNsdWRlPzogc3RyaW5nW107XHJcbn1cclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtbG9hZGVyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2ludGVyZmFjZXMvczMtbG9hZGVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUzNMb2FkZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUzNMb2FkZXJDb25maWcge1xyXG4gIC8qKiBTMyBidWNrZXQgbmFtZSAqL1xyXG4gIGJ1Y2tldDogc3RyaW5nO1xyXG4gIC8qKiBTMyBvYmplY3Qga2V5ICovXHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogRm9ybWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIERlZmF1bHQ6ICdhdXRvJyAoYXV0by1kZXRlY3QgYmFzZWQgb24gY29udGVudCkgKi9cclxuICBmb3JtYXQ/OiAnanNvbicgfCAnZW52JyB8ICdhdXRvJztcclxufVxyXG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1tYW5hZ2VyLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTZWNyZXRzTWFuYWdlckxvYWRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzTWFuYWdlckxvYWRlckNvbmZpZyB7XHJcbiAgLyoqIE5hbWUgb3IgQVJOIG9mIHRoZSBzZWNyZXQgdG8gbG9hZCAqL1xyXG4gIHNlY3JldE5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogTWFwcGluZyBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byBwYXRoIHByZWZpeGVzICovXHJcbiAgZW52aXJvbm1lbnRNYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxufVxyXG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1zdG9yZS1sb2FkZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9zc20tcGFyYW1ldGVyLXN0b3JlLWxvYWRlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnIHtcclxuICAvKiogUGF0aCBwcmVmaXggZm9yIHBhcmFtZXRlcnMgdG8gbG9hZCAqL1xyXG4gIHBhcmFtZXRlclBhdGg/OiBzdHJpbmc7XHJcbiAgLyoqIEFXUyByZWdpb24uIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgZGVmYXVsdCByZWdpb24gZnJvbSBlbnZpcm9ubWVudCAqL1xyXG4gIHJlZ2lvbj86IHN0cmluZztcclxuICAvKiogTWFwcGluZyBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byBwYXRoIHByZWZpeGVzICovXHJcbiAgZW52aXJvbm1lbnRNYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAvKiogV2hldGhlciB0byBkZWNyeXB0IFNlY3VyZVN0cmluZyBwYXJhbWV0ZXJzLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgd2l0aERlY3J5cHRpb24/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==
|