@dyanet/nestjs-config-aws 1.2.0 → 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 -0
- 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 +12 -6
- 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';
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZGOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQVc7SUFDNUIsR0FBRyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUM5QyxLQUFLLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ2xELElBQUksRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDaEQsS0FBSyxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztDQUNuRCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFekc7O0dBRUc7QUFDSCxNQUFNLHVCQUF1QixHQUE2QjtJQUN4RCxPQUFPLEVBQUUsSUFBSTtJQUNiLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsVUFBVSxFQUFFLElBQUk7SUFDaEIsYUFBYSxFQUFFLHNCQUFzQjtDQUN0QyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBa0Q7SUFDdkUsMERBQTBEO0lBQzFELFdBQVcsRUFBRTtRQUNYLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsVUFBVTtRQUNWLHNCQUFzQjtRQUN0Qix5QkFBeUI7S0FDMUI7SUFDRCw0REFBNEQ7SUFDNUQsYUFBYSxFQUFFO1FBQ2IseUJBQXlCO1FBQ3pCLHNCQUFzQjtRQUN0QixVQUFVO1FBQ1YsZUFBZTtRQUNmLG1CQUFtQjtLQUNwQjtDQUNGLENBQUM7QUFHRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLGdCQUFnQjtJQUNHLFFBQVEsQ0FJekI7SUFDRixnQkFBZ0I7SUFDRyxPQUFPLENBQVM7SUFDbkMsZ0JBQWdCO0lBQ0csZUFBZSxDQUFrQztJQUU1RCxNQUFNLEdBQWEsSUFBSSxDQUFDO0lBQ3hCLFVBQVUsR0FBK0IsSUFBSSxDQUFDO0lBQzlDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFdkIsWUFBWSxVQUFtQyxFQUFFO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQzlCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxXQUFXO1lBQzdDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUk7WUFDOUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksS0FBSztZQUM3QyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FBQyxPQUFrQztRQUM5RCxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxPQUFPO1lBQzNELFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLHVCQUF1QixDQUFDLFNBQVM7WUFDakUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksdUJBQXVCLENBQUMsWUFBWTtZQUMxRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTO1lBQ2pFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLHVCQUF1QixDQUFDLFVBQVU7WUFDcEUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksdUJBQXVCLENBQUMsYUFBYTtTQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssR0FBRyxDQUFDLE9BQWU7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5DLCtDQUErQztRQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3pELENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN0RCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFHRDs7O09BR0c7SUFDSyxZQUFZO1FBQ2xCLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU5QyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQkFBc0IsQ0FBQyxPQUF1QixFQUFFLFVBQThCO1FBQ3BGLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQzlDLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDM0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRCxPQUFPLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FBQyxPQUF1QixFQUFFLEtBQWU7UUFDcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDM0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFMUQseUVBQXlFO1FBQ3pFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0MsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUF1QixFQUFFLENBQUM7UUFDdkMsSUFBSSxZQUFZLEdBQTRCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztRQUVyRixJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNDLEtBQUssTUFBTSxNQUFNLElBQUksY0FBYyxFQUFFLENBQUM7WUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUVuQyxJQUFJLENBQUM7Z0JBQ0gsK0JBQStCO2dCQUMvQixNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLDJCQUEyQixDQUFDLENBQUM7b0JBQ3JELENBQUM7b0JBQ0QsU0FBUztnQkFDWCxDQUFDO2dCQUVELHNDQUFzQztnQkFDdEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUM7Z0JBRTlDLG9CQUFvQjtnQkFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsVUFBVTtvQkFDVixRQUFRO2lCQUNULENBQUMsQ0FBQztnQkFFSCxzQkFBc0I7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsWUFBWSxVQUFVLENBQUMsTUFBTSxZQUFZLFFBQVEsSUFBSSxDQUFDLENBQUM7Z0JBQy9FLENBQUM7Z0JBRUQsMENBQTBDO2dCQUMxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUM3QixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxNQUFNLFVBQVUsR0FBRyxjQUFjLEtBQUssU0FBUyxDQUFDO29CQUVoRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUM7d0JBQ2xDLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7d0JBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDbkMsT0FBTyxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDOUQsQ0FBQzt3QkFDRCxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUNwRCxPQUFPLElBQUksZUFBZSxjQUFjLEdBQUcsQ0FBQzt3QkFDOUMsQ0FBQzt3QkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwQixDQUFDO29CQUVELFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUVELDREQUE0RDtnQkFDNUQsWUFBWSxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztZQUN0RCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksc0JBQXNCLENBQzlCLHFDQUFxQyxVQUFVLEtBQUssS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQzVHLFVBQVUsRUFDVixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7UUFFM0YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLFNBQVMsZ0JBQWdCLGFBQWEsZUFBZSxhQUFhLFVBQVUsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFFRCwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBaUIsQ0FBQztnQkFDMUMsTUFBTSxJQUFJLGVBQWUsQ0FDdkIsb0NBQW9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUNoSCxRQUFRLENBQUMsTUFBTSxFQUNmLFNBQVMsQ0FDVixDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQVMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBaUIsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTztZQUNQLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtTQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFvQixHQUFNO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLGtCQUFrQixDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELG1GQUFtRjtRQUNuRixPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksa0JBQWtCLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVM7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUNoQixJQUFZLEVBQ1osVUFBbUMsRUFBRTtRQUVyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLGlDQUFpQztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBaUIsQ0FBQztnQkFDMUMsTUFBTSxJQUFJLGVBQWUsQ0FDdkIsc0NBQXNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUNsSCxRQUFRLENBQUMsTUFBTSxFQUNmLFNBQVMsQ0FDVixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUksT0FBTyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFXLENBQUM7UUFDN0IsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxDQUFDLFVBQVUsR0FBRztZQUNuQixNQUFNLEVBQUUsTUFBVztZQUNuQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xGLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtTQUNyQixDQUFDO1FBRUYsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBab2RFcnJvciB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIENvbmZpZ01hbmFnZXJPcHRpb25zLFxyXG4gIENvbmZpZ0xvYWRSZXN1bHQsXHJcbiAgQ29uZmlnU291cmNlSW5mbyxcclxuICBMb2dnZXIsXHJcbiAgTG9hZGVyUHJlY2VkZW5jZSxcclxuICBWZXJib3NlT3B0aW9ucyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBDb25maWd1cmF0aW9uTG9hZEVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBjb25zb2xlIGxvZ2dlciBpbXBsZW1lbnRhdGlvblxyXG4gKi9cclxuY29uc3QgZGVmYXVsdExvZ2dlcjogTG9nZ2VyID0ge1xyXG4gIGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS5sb2cobWVzc2FnZSksXHJcbiAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSksXHJcbiAgd2FybjogKG1lc3NhZ2U6IHN0cmluZykgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UpLFxyXG4gIGRlYnVnOiAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UpLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgc2Vuc2l0aXZlIGtleXMgdGhhdCBzaG91bGQgYWx3YXlzIGJlIG1hc2tlZFxyXG4gKi9cclxuY29uc3QgREVGQVVMVF9TRU5TSVRJVkVfS0VZUyA9IFsncGFzc3dvcmQnLCAnc2VjcmV0JywgJ2tleScsICd0b2tlbicsICdjcmVkZW50aWFsJywgJ2FwaV9rZXknLCAnYXBpa2V5J107XHJcblxyXG4vKipcclxuICogRGVmYXVsdCB2ZXJib3NlIG9wdGlvbnNcclxuICovXHJcbmNvbnN0IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gPSB7XHJcbiAgbG9nS2V5czogdHJ1ZSxcclxuICBsb2dWYWx1ZXM6IGZhbHNlLFxyXG4gIGxvZ092ZXJyaWRlczogdHJ1ZSxcclxuICBsb2dUaW1pbmc6IHRydWUsXHJcbiAgbWFza1ZhbHVlczogdHJ1ZSxcclxuICBzZW5zaXRpdmVLZXlzOiBERUZBVUxUX1NFTlNJVElWRV9LRVlTLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFByZWRlZmluZWQgcHJlY2VkZW5jZSBvcmRlcnMgZm9yIGNvbW1vbiBzdHJhdGVnaWVzXHJcbiAqIEhpZ2hlciBpbmRleCA9IGhpZ2hlciBwcmlvcml0eSAobGF0ZXIgbG9hZGVycyBvdmVycmlkZSBlYXJsaWVyIG9uZXMpXHJcbiAqL1xyXG5jb25zdCBQUkVDRURFTkNFX09SREVSUzogUmVjb3JkPCdhd3MtZmlyc3QnIHwgJ2xvY2FsLWZpcnN0Jywgc3RyaW5nW10+ID0ge1xyXG4gIC8vIEFXUyB3aW5zOiBlbnYgLT4gZW52RmlsZSAtPiBzMyAtPiBzZWNyZXRzTWFuYWdlciAtPiBzc21cclxuICAnYXdzLWZpcnN0JzogW1xyXG4gICAgJ0Vudmlyb25tZW50TG9hZGVyJyxcclxuICAgICdFbnZGaWxlTG9hZGVyJyxcclxuICAgICdTM0xvYWRlcicsXHJcbiAgICAnU2VjcmV0c01hbmFnZXJMb2FkZXInLFxyXG4gICAgJ1NTTVBhcmFtZXRlclN0b3JlTG9hZGVyJyxcclxuICBdLFxyXG4gIC8vIExvY2FsIHdpbnM6IHNzbSAtPiBzZWNyZXRzTWFuYWdlciAtPiBzMyAtPiBlbnZGaWxlIC0+IGVudlxyXG4gICdsb2NhbC1maXJzdCc6IFtcclxuICAgICdTU01QYXJhbWV0ZXJTdG9yZUxvYWRlcicsXHJcbiAgICAnU2VjcmV0c01hbmFnZXJMb2FkZXInLFxyXG4gICAgJ1MzTG9hZGVyJyxcclxuICAgICdFbnZGaWxlTG9hZGVyJyxcclxuICAgICdFbnZpcm9ubWVudExvYWRlcicsXHJcbiAgXSxcclxufTtcclxuXHJcblxyXG4vKipcclxuICogQ29uZmlnTWFuYWdlciBvcmNoZXN0cmF0ZXMgbG9hZGluZyBjb25maWd1cmF0aW9uIGZyb20gbXVsdGlwbGUgc291cmNlc1xyXG4gKiB3aXRoIGNvbmZpZ3VyYWJsZSBwcmVjZWRlbmNlIGFuZCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IENvbmZpZ01hbmFnZXIsIEVudmlyb25tZW50TG9hZGVyLCBTZWNyZXRzTWFuYWdlckxvYWRlciB9IGZyb20gJ0BkeWFuZXQvY29uZmlnLWF3cyc7XHJcbiAqIGltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xyXG4gKlxyXG4gKiBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XHJcbiAqICAgREFUQUJBU0VfVVJMOiB6LnN0cmluZygpLFxyXG4gKiAgIEFQSV9LRVk6IHouc3RyaW5nKCksXHJcbiAqICAgUE9SVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzMDAwKSxcclxuICogfSk7XHJcbiAqXHJcbiAqIGNvbnN0IG1hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcih7XHJcbiAqICAgbG9hZGVyczogW1xyXG4gKiAgICAgbmV3IEVudmlyb25tZW50TG9hZGVyKHsgcHJlZml4OiAnQVBQXycgfSksXHJcbiAqICAgICBuZXcgU2VjcmV0c01hbmFnZXJMb2FkZXIoeyBzZWNyZXROYW1lOiAnL215LWFwcC9jb25maWcnIH0pLFxyXG4gKiAgIF0sXHJcbiAqICAgc2NoZW1hLFxyXG4gKiAgIHByZWNlZGVuY2U6ICdhd3MtZmlyc3QnLFxyXG4gKiAgIHZlcmJvc2U6IHRydWUsXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBhd2FpdCBtYW5hZ2VyLmxvYWQoKTtcclxuICogY29uc3QgZGJVcmwgPSBtYW5hZ2VyLmdldCgnREFUQUJBU0VfVVJMJyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ01hbmFnZXI8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogUmVxdWlyZWQ8T21pdDxDb25maWdNYW5hZ2VyT3B0aW9uczxUPiwgJ3NjaGVtYScgfCAnbG9nZ2VyJyB8ICd2ZXJib3NlJz4+ICYge1xyXG4gICAgc2NoZW1hPzogQ29uZmlnTWFuYWdlck9wdGlvbnM8VD5bJ3NjaGVtYSddO1xyXG4gICAgbG9nZ2VyPzogTG9nZ2VyO1xyXG4gICAgdmVyYm9zZT86IFZlcmJvc2VPcHRpb25zIHwgYm9vbGVhbjtcclxuICB9O1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xvZ2dlcjogTG9nZ2VyO1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZlcmJvc2VPcHRpb25zOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIGNvbmZpZzogVCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZFJlc3VsdDogQ29uZmlnTG9hZFJlc3VsdDxUPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+ID0ge30pIHtcclxuICAgIHRoaXMuX29wdGlvbnMgPSB7XHJcbiAgICAgIGxvYWRlcnM6IG9wdGlvbnMubG9hZGVycyA/PyBbXSxcclxuICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYSxcclxuICAgICAgcHJlY2VkZW5jZTogb3B0aW9ucy5wcmVjZWRlbmNlID8/ICdhd3MtZmlyc3QnLFxyXG4gICAgICB2YWxpZGF0ZU9uTG9hZDogb3B0aW9ucy52YWxpZGF0ZU9uTG9hZCA/PyB0cnVlLFxyXG4gICAgICBlbmFibGVMb2dnaW5nOiBvcHRpb25zLmVuYWJsZUxvZ2dpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIsXHJcbiAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9sb2dnZXIgPSBvcHRpb25zLmxvZ2dlciA/PyBkZWZhdWx0TG9nZ2VyO1xyXG4gICAgdGhpcy5fdmVyYm9zZU9wdGlvbnMgPSB0aGlzLnJlc29sdmVWZXJib3NlT3B0aW9ucyhvcHRpb25zLnZlcmJvc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZSB2ZXJib3NlIG9wdGlvbnMgZnJvbSBib29sZWFuIG9yIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzb2x2ZVZlcmJvc2VPcHRpb25zKHZlcmJvc2U/OiBWZXJib3NlT3B0aW9ucyB8IGJvb2xlYW4pOiBSZXF1aXJlZDxWZXJib3NlT3B0aW9ucz4gfCBudWxsIHtcclxuICAgIGlmICh2ZXJib3NlID09PSB1bmRlZmluZWQgfHwgdmVyYm9zZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyYm9zZSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4geyAuLi5ERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUyB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbG9nS2V5czogdmVyYm9zZS5sb2dLZXlzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ0tleXMsXHJcbiAgICAgIGxvZ1ZhbHVlczogdmVyYm9zZS5sb2dWYWx1ZXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMubG9nVmFsdWVzLFxyXG4gICAgICBsb2dPdmVycmlkZXM6IHZlcmJvc2UubG9nT3ZlcnJpZGVzID8/IERFRkFVTFRfVkVSQk9TRV9PUFRJT05TLmxvZ092ZXJyaWRlcyxcclxuICAgICAgbG9nVGltaW5nOiB2ZXJib3NlLmxvZ1RpbWluZyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5sb2dUaW1pbmcsXHJcbiAgICAgIG1hc2tWYWx1ZXM6IHZlcmJvc2UubWFza1ZhbHVlcyA/PyBERUZBVUxUX1ZFUkJPU0VfT1BUSU9OUy5tYXNrVmFsdWVzLFxyXG4gICAgICBzZW5zaXRpdmVLZXlzOiB2ZXJib3NlLnNlbnNpdGl2ZUtleXMgPz8gREVGQVVMVF9WRVJCT1NFX09QVElPTlMuc2Vuc2l0aXZlS2V5cyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2cgYSBtZXNzYWdlIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuZW5hYmxlTG9nZ2luZyB8fCB0aGlzLl92ZXJib3NlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLl9sb2dnZXIubG9nKGBbY29uZmlnLWF3c10gJHttZXNzYWdlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFzayBhIHZhbHVlIGZvciBsb2dnaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXNrVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1ZhbHVlcykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RyVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBrZXkgY29udGFpbnMgYW55IHNlbnNpdGl2ZSBwYXR0ZXJuc1xyXG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSB0aGlzLl92ZXJib3NlT3B0aW9ucy5zZW5zaXRpdmVLZXlzLnNvbWUoXHJcbiAgICAgIChwYXR0ZXJuKSA9PiBsb3dlcktleS5pbmNsdWRlcyhwYXR0ZXJuLnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucy5tYXNrVmFsdWVzIHx8IGlzU2Vuc2l0aXZlKSB7XHJcbiAgICAgIGlmIChzdHJWYWx1ZS5sZW5ndGggPD0gNCkge1xyXG4gICAgICAgIHJldHVybiAnKioqKic7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGAke3N0clZhbHVlLnNsaWNlKDAsIDIpfSoqLi4uJHtzdHJWYWx1ZS5zbGljZSgtMil9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyVmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsb2FkaW5nIG9yZGVyIGZvciBsb2FkZXJzIGJhc2VkIG9uIHByZWNlZGVuY2Ugc3RyYXRlZ3kuXHJcbiAgICogUmV0dXJucyBsb2FkZXJzIHNvcnRlZCBieSBwcmlvcml0eSAobG93ZXIgcHJpb3JpdHkgZmlyc3QsIHNvIGhpZ2hlciBwcmlvcml0eSBsb2FkcyBsYXN0IGFuZCB3aW5zKS5cclxuICAgKi9cclxuICBwcml2YXRlIGdldExvYWRPcmRlcigpOiBDb25maWdMb2FkZXJbXSB7XHJcbiAgICBjb25zdCB7IGxvYWRlcnMsIHByZWNlZGVuY2UgfSA9IHRoaXMuX29wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFsb2FkZXJzIHx8IGxvYWRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBwcmVjZWRlbmNlIGlzIGEgY3VzdG9tIGFycmF5LCB1c2UgaXRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHByZWNlZGVuY2UpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRCeUN1c3RvbVByZWNlZGVuY2UobG9hZGVycywgcHJlY2VkZW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXNlIHByZWRlZmluZWQgcHJlY2VkZW5jZSBvcmRlclxyXG4gICAgY29uc3Qgb3JkZXIgPSBQUkVDRURFTkNFX09SREVSU1twcmVjZWRlbmNlXTtcclxuICAgIHJldHVybiB0aGlzLnNvcnRCeVByZWRlZmluZWRPcmRlcihsb2FkZXJzLCBvcmRlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb3J0IGxvYWRlcnMgYnkgY3VzdG9tIHByZWNlZGVuY2UgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc29ydEJ5Q3VzdG9tUHJlY2VkZW5jZShsb2FkZXJzOiBDb25maWdMb2FkZXJbXSwgcHJlY2VkZW5jZTogTG9hZGVyUHJlY2VkZW5jZVtdKTogQ29uZmlnTG9hZGVyW10ge1xyXG4gICAgY29uc3QgcHJpb3JpdHlNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgZm9yIChjb25zdCBwIG9mIHByZWNlZGVuY2UpIHtcclxuICAgICAgcHJpb3JpdHlNYXAuc2V0KHAubG9hZGVyLCBwLnByaW9yaXR5KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3J0IGJ5IHByaW9yaXR5IChsb3dlciBmaXJzdCwgc28gaGlnaGVyIHByaW9yaXR5IGxvYWRzIGxhc3QgYW5kIHdpbnMpXHJcbiAgICByZXR1cm4gWy4uLmxvYWRlcnNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgcHJpb3JpdHlBID0gcHJpb3JpdHlNYXAuZ2V0KGEuZ2V0TmFtZSgpKSA/PyAwO1xyXG4gICAgICBjb25zdCBwcmlvcml0eUIgPSBwcmlvcml0eU1hcC5nZXQoYi5nZXROYW1lKCkpID8/IDA7XHJcbiAgICAgIHJldHVybiBwcmlvcml0eUEgLSBwcmlvcml0eUI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbG9hZGVycyBieSBwcmVkZWZpbmVkIG9yZGVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzb3J0QnlQcmVkZWZpbmVkT3JkZXIobG9hZGVyczogQ29uZmlnTG9hZGVyW10sIG9yZGVyOiBzdHJpbmdbXSk6IENvbmZpZ0xvYWRlcltdIHtcclxuICAgIGNvbnN0IG9yZGVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICAgIG9yZGVyLmZvckVhY2goKG5hbWUsIGluZGV4KSA9PiBvcmRlck1hcC5zZXQobmFtZSwgaW5kZXgpKTtcclxuXHJcbiAgICAvLyBTb3J0IGJ5IG9yZGVyIGluZGV4IChsb3dlciBmaXJzdCwgc28gaGlnaGVyIGluZGV4IGxvYWRzIGxhc3QgYW5kIHdpbnMpXHJcbiAgICByZXR1cm4gWy4uLmxvYWRlcnNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXhBID0gb3JkZXJNYXAuZ2V0KGEuZ2V0TmFtZSgpKSA/PyAtMTtcclxuICAgICAgY29uc3QgaW5kZXhCID0gb3JkZXJNYXAuZ2V0KGIuZ2V0TmFtZSgpKSA/PyAtMTtcclxuICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIGNvbmZpZ3VyZWQgbG9hZGVycy5cclxuICAgKiBMb2FkZXJzIGFyZSBleGVjdXRlZCBpbiBwcmVjZWRlbmNlIG9yZGVyLCB3aXRoIGxhdGVyIGxvYWRlcnMgb3ZlcnJpZGluZyBlYXJsaWVyIG9uZXMuXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICBjb25zdCBzb3VyY2VzOiBDb25maWdTb3VyY2VJbmZvW10gPSBbXTtcclxuICAgIGxldCBtZXJnZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcbiAgICBjb25zdCBrZXlPcmlnaW5zOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBUcmFjayB3aGljaCBsb2FkZXIgc2V0IGVhY2gga2V5XHJcblxyXG4gICAgdGhpcy5sb2coJ0xvYWRpbmcgY29uZmlndXJhdGlvbi4uLicpO1xyXG5cclxuICAgIGNvbnN0IG9yZGVyZWRMb2FkZXJzID0gdGhpcy5nZXRMb2FkT3JkZXIoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBvcmRlcmVkTG9hZGVycykge1xyXG4gICAgICBjb25zdCBsb2FkZXJOYW1lID0gbG9hZGVyLmdldE5hbWUoKTtcclxuICAgICAgY29uc3QgbG9hZGVyU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgbG9hZGVyIGlzIGF2YWlsYWJsZVxyXG4gICAgICAgIGNvbnN0IGlzQXZhaWxhYmxlID0gYXdhaXQgbG9hZGVyLmlzQXZhaWxhYmxlKCk7XHJcbiAgICAgICAgaWYgKCFpc0F2YWlsYWJsZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dUaW1pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2coYCR7bG9hZGVyTmFtZX06IHNraXBwZWQgKG5vdCBhdmFpbGFibGUpYCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIHRoaXMgbG9hZGVyXHJcbiAgICAgICAgY29uc3QgbG9hZGVyQ29uZmlnID0gYXdhaXQgbG9hZGVyLmxvYWQoKTtcclxuICAgICAgICBjb25zdCBrZXlzTG9hZGVkID0gT2JqZWN0LmtleXMobG9hZGVyQ29uZmlnKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBsb2FkZXJTdGFydFRpbWU7XHJcblxyXG4gICAgICAgIC8vIFRyYWNrIHNvdXJjZSBpbmZvXHJcbiAgICAgICAgc291cmNlcy5wdXNoKHtcclxuICAgICAgICAgIGxvYWRlcjogbG9hZGVyTmFtZSxcclxuICAgICAgICAgIGtleXNMb2FkZWQsXHJcbiAgICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTG9nIHRpbWluZyBhbmQga2V5c1xyXG4gICAgICAgIGlmICh0aGlzLl92ZXJib3NlT3B0aW9ucz8ubG9nVGltaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvZyhgJHtsb2FkZXJOYW1lfTogbG9hZGVkICR7a2V5c0xvYWRlZC5sZW5ndGh9IGtleXMgaW4gJHtkdXJhdGlvbn1tc2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTG9nIGluZGl2aWR1YWwga2V5cyBhbmQgdHJhY2sgb3ZlcnJpZGVzXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0xvYWRlZCkge1xyXG4gICAgICAgICAgY29uc3QgcHJldmlvdXNMb2FkZXIgPSBrZXlPcmlnaW5zLmdldChrZXkpO1xyXG4gICAgICAgICAgY29uc3QgaXNPdmVycmlkZSA9IHByZXZpb3VzTG9hZGVyICE9PSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3ZlcmJvc2VPcHRpb25zPy5sb2dLZXlzKSB7XHJcbiAgICAgICAgICAgIGxldCBsb2dMaW5lID0gYCAgLSAke2tleX1gO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnMubG9nVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgbG9nTGluZSArPSBgID0gXCIke3RoaXMubWFza1ZhbHVlKGtleSwgbG9hZGVyQ29uZmlnW2tleV0pfVwiYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNPdmVycmlkZSAmJiB0aGlzLl92ZXJib3NlT3B0aW9ucy5sb2dPdmVycmlkZXMpIHtcclxuICAgICAgICAgICAgICBsb2dMaW5lICs9IGAgKG92ZXJyaWRlcyAke3ByZXZpb3VzTG9hZGVyfSlgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9nKGxvZ0xpbmUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGtleU9yaWdpbnMuc2V0KGtleSwgbG9hZGVyTmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9uIChsYXRlciBsb2FkZXJzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcclxuICAgICAgICBtZXJnZWRDb25maWcgPSB7IC4uLm1lcmdlZENvbmZpZywgLi4ubG9hZGVyQ29uZmlnIH07XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IoXHJcbiAgICAgICAgICBgRmFpbGVkIHRvIGxvYWQgY29uZmlndXJhdGlvbiBmcm9tICR7bG9hZGVyTmFtZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXHJcbiAgICAgICAgICBsb2FkZXJOYW1lLFxyXG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENvdW50IG92ZXJyaWRlc1xyXG4gICAgY29uc3QgdG90YWxLZXlzID0gT2JqZWN0LmtleXMobWVyZ2VkQ29uZmlnKS5sZW5ndGg7XHJcbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcclxuICAgIGNvbnN0IG92ZXJyaWRlQ291bnQgPSBzb3VyY2VzLnJlZHVjZSgoYWNjLCBzKSA9PiBhY2MgKyBzLmtleXNMb2FkZWQubGVuZ3RoLCAwKSAtIHRvdGFsS2V5cztcclxuXHJcbiAgICBpZiAodGhpcy5fdmVyYm9zZU9wdGlvbnM/LmxvZ1RpbWluZykge1xyXG4gICAgICB0aGlzLmxvZyhgQ29uZmlndXJhdGlvbiBsb2FkZWQ6ICR7dG90YWxLZXlzfSB0b3RhbCBrZXlzLCAke292ZXJyaWRlQ291bnR9IG92ZXJyaWRlcywgJHt0b3RhbER1cmF0aW9ufW1zIHRvdGFsYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgaWYgc2NoZW1hIGlzIHByb3ZpZGVkIGFuZCB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcclxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNjaGVtYSAmJiB0aGlzLl9vcHRpb25zLnZhbGlkYXRlT25Mb2FkKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX29wdGlvbnMuc2NoZW1hLnNhZmVQYXJzZShtZXJnZWRDb25maWcpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgY29uc3Qgem9kRXJyb3IgPSByZXN1bHQuZXJyb3IgYXMgWm9kRXJyb3I7XHJcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcclxuICAgICAgICAgIGBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3pvZEVycm9yLmVycm9ycy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgICB6b2RFcnJvci5lcnJvcnMsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmlnID0gcmVzdWx0LmRhdGEgYXMgVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gbWVyZ2VkQ29uZmlnIGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkUmVzdWx0ID0ge1xyXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxyXG4gICAgICBzb3VyY2VzLFxyXG4gICAgICBsb2FkZWRBdDogbmV3IERhdGUoKSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWUgYnkga2V5LlxyXG4gICAqIEBwYXJhbSBrZXkgVGhlIGNvbmZpZ3VyYXRpb24ga2V5XHJcbiAgICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBsb2FkZWRcclxuICAgKi9cclxuICBnZXQ8SyBleHRlbmRzIGtleW9mIFQ+KGtleTogSyk6IFRbS10ge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZCB8fCB0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdDb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuIENhbGwgbG9hZCgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgLy8gTm9uLW51bGwgYXNzZXJ0aW9uIGlzIHNhZmUgaGVyZSBiZWNhdXNlIHdlJ3ZlIGNoZWNrZWQgdGhpcy5jb25maWcgIT09IG51bGwgYWJvdmVcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZyFba2V5XTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgY29uZmlndXJhdGlvbiB2YWx1ZXMuXHJcbiAgICogQHJldHVybnMgVGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgZ2V0QWxsKCk6IFQge1xyXG4gICAgaWYgKCF0aGlzLmxvYWRlZCB8fCB0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKCdDb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuIENhbGwgbG9hZCgpIGZpcnN0LicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsb2FkZWQuXHJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBjb25maWd1cmF0aW9uIGlzIGxvYWRlZFxyXG4gICAqL1xyXG4gIGlzTG9hZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIGVudmlyb25tZW50LlxyXG4gICAqIEByZXR1cm5zIFRoZSBBUFBfRU5WIHZhbHVlIG9yICdkZXZlbG9wbWVudCcgYXMgZGVmYXVsdFxyXG4gICAqL1xyXG4gIGdldEFwcEVudigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52WydBUFBfRU5WJ10gPz8gJ2RldmVsb3BtZW50JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbG9hZCByZXN1bHQgd2l0aCBzb3VyY2UgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGxvYWQgcmVzdWx0IG9yIG51bGwgaWYgbm90IGxvYWRlZFxyXG4gICAqL1xyXG4gIGdldExvYWRSZXN1bHQoKTogQ29uZmlnTG9hZFJlc3VsdDxUPiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZFJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcmlhbGl6ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIEpTT04gc3RyaW5nLlxyXG4gICAqIEByZXR1cm5zIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHRocm93cyBDb25maWd1cmF0aW9uRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBub3QgbG9hZGVkXHJcbiAgICovXHJcbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMubG9hZGVkIHx8IHRoaXMuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4gQ2FsbCBsb2FkKCkgZmlyc3QuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IENvbmZpZ01hbmFnZXIgd2l0aCBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIGEgSlNPTiBzdHJpbmcuXHJcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHJlc3RvcmluZyBjb25maWd1cmF0aW9uIGZyb20gYSBzZXJpYWxpemVkIHN0YXRlLlxyXG4gICAqIEBwYXJhbSBqc29uIEpTT04gc3RyaW5nIHRvIGRlc2VyaWFsaXplXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgQ29uZmlnTWFuYWdlciBvcHRpb25zIChzY2hlbWEgd2lsbCBiZSB1c2VkIGZvciB2YWxpZGF0aW9uKVxyXG4gICAqIEByZXR1cm5zIEEgbmV3IENvbmZpZ01hbmFnZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZGVzZXJpYWxpemVkIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBzdGF0aWMgZGVzZXJpYWxpemU8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcclxuICAgIGpzb246IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zPFQ+ID0ge31cclxuICApOiBDb25maWdNYW5hZ2VyPFQ+IHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvbik7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgaWYgc2NoZW1hIGlzIHByb3ZpZGVkXHJcbiAgICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5zY2hlbWEuc2FmZVBhcnNlKHBhcnNlZCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICBjb25zdCB6b2RFcnJvciA9IHJlc3VsdC5lcnJvciBhcyBab2RFcnJvcjtcclxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxyXG4gICAgICAgICAgYERlc2VyaWFsaXphdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt6b2RFcnJvci5lcnJvcnMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKX1gLFxyXG4gICAgICAgICAgem9kRXJyb3IuZXJyb3JzLFxyXG4gICAgICAgICAgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyBDb25maWdNYW5hZ2VyIGFuZCBzZXQgaXRzIGludGVybmFsIHN0YXRlXHJcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IENvbmZpZ01hbmFnZXI8VD4ob3B0aW9ucyk7XHJcbiAgICBtYW5hZ2VyLmNvbmZpZyA9IHBhcnNlZCBhcyBUO1xyXG4gICAgbWFuYWdlci5sb2FkZWQgPSB0cnVlO1xyXG4gICAgbWFuYWdlci5sb2FkUmVzdWx0ID0ge1xyXG4gICAgICBjb25maWc6IHBhcnNlZCBhcyBULFxyXG4gICAgICBzb3VyY2VzOiBbeyBsb2FkZXI6ICdkZXNlcmlhbGl6ZScsIGtleXNMb2FkZWQ6IE9iamVjdC5rZXlzKHBhcnNlZCksIGR1cmF0aW9uOiAwIH1dLFxyXG4gICAgICBsb2FkZWRBdDogbmV3IERhdGUoKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1hbmFnZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -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';
|
|
10
|
-
// Loaders
|
|
11
|
-
export { EnvironmentLoader } from './loaders/environment.loader';
|
|
12
|
-
export { EnvFileLoader } from './loaders/env-file.loader';
|
|
13
|
-
export { S3Loader } from './loaders/s3.loader';
|
|
14
|
-
export { SecretsManagerLoader } from './loaders/secrets-manager.loader';
|
|
15
|
-
export { SSMParameterStoreLoader } from './loaders/ssm-parameter-store.loader';
|
|
16
|
-
// ConfigManager
|
|
17
|
-
export { ConfigManager } from './config-manager';
|
|
18
|
-
// Utilities
|
|
19
|
-
export { ConfigValidationUtil } from './utils/validation.util';
|
|
20
|
-
export { EnvFileParser } from './utils/env-file-parser.util';
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFzQ0gsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLFVBQVU7QUFDVixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRS9FLGdCQUFnQjtBQUNoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsWUFBWTtBQUNaLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAZHlhbmV0L2NvbmZpZy1hd3NcclxuICpcclxuICogRnJhbWV3b3JrLWFnbm9zdGljIEFXUyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgbGlicmFyeS5cclxuICogU3VwcG9ydHMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBBV1MgU2VjcmV0cyBNYW5hZ2VyLCBTU00gUGFyYW1ldGVyIFN0b3JlLFxyXG4gKiBTMywgYW5kIC5lbnYgZmlsZXMgd2l0aCBjb25maWd1cmFibGUgcHJlY2VkZW5jZS5cclxuICovXHJcblxyXG4vLyBJbnRlcmZhY2VzXHJcbmV4cG9ydCB0eXBlIHtcclxuICBDb25maWdMb2FkZXIsXHJcbiAgQ29uZmlnTG9hZGVyUmVzdWx0LFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgQ29uZmlnTWFuYWdlck9wdGlvbnMsXHJcbiAgTG9hZGVyUHJlY2VkZW5jZSxcclxuICBWZXJib3NlT3B0aW9ucyxcclxuICBQcmVjZWRlbmNlU3RyYXRlZ3ksXHJcbiAgQ29uZmlnTG9hZFJlc3VsdCxcclxuICBDb25maWdTb3VyY2VJbmZvLFxyXG4gIExvZ2dlcixcclxufSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBFbnZpcm9ubWVudExvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvZW52aXJvbm1lbnQtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgRW52RmlsZUxvYWRlckNvbmZpZyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMvZW52LWZpbGUtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgUzNMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3MzLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlY3JldHNNYW5hZ2VyTG9hZGVyQ29uZmlnLFxyXG59IGZyb20gJy4vaW50ZXJmYWNlcy9zZWNyZXRzLW1hbmFnZXItbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXJDb25maWcsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3NzbS1wYXJhbWV0ZXItc3RvcmUtbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vLyBFcnJvciBjbGFzc2VzXHJcbmV4cG9ydCB7XHJcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25FcnJvcixcclxuICBBV1NTZXJ2aWNlRXJyb3IsXHJcbiAgQ29uZmlndXJhdGlvbkxvYWRFcnJvcixcclxuICBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yLFxyXG59IGZyb20gJy4vZXJyb3JzJztcclxuXHJcbi8vIExvYWRlcnNcclxuZXhwb3J0IHsgRW52aXJvbm1lbnRMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvZW52aXJvbm1lbnQubG9hZGVyJztcclxuZXhwb3J0IHsgRW52RmlsZUxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9lbnYtZmlsZS5sb2FkZXInO1xyXG5leHBvcnQgeyBTM0xvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zMy5sb2FkZXInO1xyXG5leHBvcnQgeyBTZWNyZXRzTWFuYWdlckxvYWRlciB9IGZyb20gJy4vbG9hZGVycy9zZWNyZXRzLW1hbmFnZXIubG9hZGVyJztcclxuZXhwb3J0IHsgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXIgfSBmcm9tICcuL2xvYWRlcnMvc3NtLXBhcmFtZXRlci1zdG9yZS5sb2FkZXInO1xyXG5cclxuLy8gQ29uZmlnTWFuYWdlclxyXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi9jb25maWctbWFuYWdlcic7XHJcblxyXG4vLyBVdGlsaXRpZXNcclxuZXhwb3J0IHsgQ29uZmlnVmFsaWRhdGlvblV0aWwgfSBmcm9tICcuL3V0aWxzL3ZhbGlkYXRpb24udXRpbCc7XHJcbmV4cG9ydCB7IEVudkZpbGVQYXJzZXIgfSBmcm9tICcuL3V0aWxzL2Vudi1maWxlLXBhcnNlci51dGlsJztcclxuIl19
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLW1hbmFnZXIuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvaW50ZXJmYWNlcy9jb25maWctbWFuYWdlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgWm9kVHlwZSB9IGZyb20gJ3pvZCc7XHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogTG9nZ2VyIGludGVyZmFjZSBmb3IgQ29uZmlnTWFuYWdlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGRlYnVnPyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgdmVyYm9zZSBsb2dnaW5nIG91dHB1dFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBWZXJib3NlT3B0aW9ucyB7XHJcbiAgLyoqIExvZyBhbGwgdmFyaWFibGUgbmFtZXMgYmVpbmcgbG9hZGVkLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nS2V5cz86IGJvb2xlYW47XHJcbiAgLyoqIExvZyB2YXJpYWJsZSB2YWx1ZXMgKFdBUk5JTkc6IG1heSBleHBvc2Ugc2VjcmV0cykuIERlZmF1bHQ6IGZhbHNlICovXHJcbiAgbG9nVmFsdWVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIHdoZW4gYSB2YXJpYWJsZSBpcyBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyLXByZWNlZGVuY2UgbG9hZGVyLiBEZWZhdWx0OiB0cnVlICovXHJcbiAgbG9nT3ZlcnJpZGVzPzogYm9vbGVhbjtcclxuICAvKiogTG9nIGxvYWRlciB0aW1pbmcgaW5mb3JtYXRpb24uIERlZmF1bHQ6IHRydWUgKi9cclxuICBsb2dUaW1pbmc/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==
|