@dyanet/nestjs-config-aws 1.0.1 → 1.2.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/README.md +213 -1013
- package/dist/cjs/config-aws/src/config-manager.js +366 -0
- package/dist/cjs/config-aws/src/errors/index.js +77 -0
- package/dist/cjs/config-aws/src/index.js +37 -0
- package/dist/cjs/config-aws/src/interfaces/config-loader.interface.js +3 -0
- package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +3 -0
- package/dist/cjs/config-aws/src/interfaces/env-file-loader.interface.js +3 -0
- package/dist/cjs/config-aws/src/interfaces/environment-loader.interface.js +3 -0
- package/dist/cjs/config-aws/src/interfaces/s3-loader.interface.js +3 -0
- package/dist/cjs/config-aws/src/interfaces/secrets-manager-loader.interface.js +3 -0
- package/dist/cjs/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +3 -0
- package/dist/cjs/config-aws/src/loaders/env-file.loader.js +169 -0
- package/dist/cjs/config-aws/src/loaders/environment.loader.js +85 -0
- package/dist/cjs/config-aws/src/loaders/s3.loader.js +145 -0
- package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +169 -0
- package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +199 -0
- package/dist/cjs/config-aws/src/utils/env-file-parser.util.js +98 -0
- package/dist/cjs/config-aws/src/utils/validation.util.js +116 -0
- package/dist/cjs/nestjs-config-aws/src/config.module.js +175 -0
- package/dist/cjs/nestjs-config-aws/src/index.js +61 -0
- package/dist/cjs/{integration → nestjs-config-aws/src/integration}/index.js +1 -1
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +3 -0
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +3 -0
- package/dist/cjs/{integration → nestjs-config-aws/src/integration}/interfaces/index.js +1 -1
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +3 -0
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +3 -0
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +73 -0
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +3 -0
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +4 -0
- package/dist/cjs/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +52 -0
- package/dist/cjs/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +124 -0
- package/dist/cjs/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +592 -0
- package/dist/cjs/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +385 -0
- package/dist/cjs/{integration → nestjs-config-aws/src/integration}/providers/index.js +1 -1
- package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +366 -0
- package/dist/cjs/nestjs-config-aws/src/integration/services/error-handler.service.js +267 -0
- package/dist/cjs/nestjs-config-aws/src/integration/services/factory-registration.service.js +517 -0
- package/dist/cjs/{integration → nestjs-config-aws/src/integration}/services/index.js +1 -1
- package/dist/cjs/nestjs-config-aws/src/integration/services/integration-state.service.js +81 -0
- package/dist/cjs/nestjs-config-aws/src/integration/services/namespace-handler.service.js +465 -0
- package/dist/cjs/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +318 -0
- package/dist/cjs/nestjs-config-aws/src/integration/services/precedence-handler.service.js +292 -0
- package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +595 -0
- package/dist/cjs/nestjs-config-aws/src/integration/utils/config-integration.util.js +283 -0
- package/dist/cjs/{integration → nestjs-config-aws/src/integration}/utils/index.js +1 -1
- package/dist/cjs/nestjs-config-aws/src/interfaces/config-service.interface.js +11 -0
- package/dist/cjs/nestjs-config-aws/src/interfaces/default-schema.interface.js +63 -0
- package/dist/cjs/nestjs-config-aws/src/interfaces/index.js +30 -0
- package/dist/cjs/nestjs-config-aws/src/interfaces/module-options.interface.js +3 -0
- package/dist/cjs/nestjs-config-aws/src/services/config.service.js +142 -0
- package/dist/esm/config-aws/src/config-manager.js +362 -0
- package/dist/esm/config-aws/src/errors/index.js +69 -0
- package/dist/esm/config-aws/src/index.js +21 -0
- package/dist/esm/config-aws/src/interfaces/config-loader.interface.js +2 -0
- package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +2 -0
- package/dist/esm/config-aws/src/interfaces/env-file-loader.interface.js +2 -0
- package/dist/esm/config-aws/src/interfaces/environment-loader.interface.js +2 -0
- package/dist/esm/config-aws/src/interfaces/s3-loader.interface.js +2 -0
- package/dist/esm/config-aws/src/interfaces/secrets-manager-loader.interface.js +2 -0
- package/dist/esm/config-aws/src/interfaces/ssm-parameter-store-loader.interface.js +2 -0
- package/dist/esm/config-aws/src/loaders/env-file.loader.js +132 -0
- package/dist/esm/config-aws/src/loaders/environment.loader.js +81 -0
- package/dist/esm/config-aws/src/loaders/s3.loader.js +141 -0
- package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +165 -0
- package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +195 -0
- package/dist/esm/config-aws/src/utils/env-file-parser.util.js +94 -0
- package/dist/esm/config-aws/src/utils/validation.util.js +112 -0
- package/dist/esm/nestjs-config-aws/src/config.module.js +172 -0
- package/dist/esm/nestjs-config-aws/src/index.js +23 -0
- package/dist/esm/nestjs-config-aws/src/integration/index.js +7 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.js +2 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.js +2 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/index.js +10 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-options.interface.js +2 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/integration-state.interface.js +2 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.js +64 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.js +2 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.js +3 -0
- package/dist/esm/nestjs-config-aws/src/integration/interfaces/utility-types.interface.js +44 -0
- package/dist/esm/nestjs-config-aws/src/integration/nestjs-config-integration.module.js +121 -0
- package/dist/esm/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.js +589 -0
- package/dist/esm/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js +382 -0
- package/dist/esm/nestjs-config-aws/src/integration/providers/index.js +4 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +363 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/error-handler.service.js +264 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/factory-registration.service.js +514 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/index.js +10 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/integration-state.service.js +78 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/namespace-handler.service.js +462 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.js +315 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/precedence-handler.service.js +289 -0
- package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +589 -0
- package/dist/esm/nestjs-config-aws/src/integration/utils/config-integration.util.js +240 -0
- package/dist/esm/nestjs-config-aws/src/integration/utils/index.js +3 -0
- package/dist/esm/nestjs-config-aws/src/interfaces/config-service.interface.js +7 -0
- package/dist/esm/nestjs-config-aws/src/interfaces/default-schema.interface.js +59 -0
- package/dist/esm/nestjs-config-aws/src/interfaces/index.js +8 -0
- package/dist/esm/nestjs-config-aws/src/interfaces/module-options.interface.js +2 -0
- package/dist/esm/nestjs-config-aws/src/services/config.service.js +139 -0
- package/dist/types/config-aws/src/config-manager.d.ts +119 -0
- package/dist/types/config-aws/src/config-manager.d.ts.map +1 -0
- package/dist/types/config-aws/src/errors/index.d.ts +43 -0
- package/dist/types/config-aws/src/errors/index.d.ts.map +1 -0
- package/dist/types/config-aws/src/index.d.ts +24 -0
- package/dist/types/config-aws/src/index.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts +33 -0
- package/dist/types/config-aws/src/interfaces/config-loader.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +86 -0
- package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts +12 -0
- package/dist/types/config-aws/src/interfaces/env-file-loader.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts +10 -0
- package/dist/types/config-aws/src/interfaces/environment-loader.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts +14 -0
- package/dist/types/config-aws/src/interfaces/s3-loader.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts +12 -0
- package/dist/types/config-aws/src/interfaces/secrets-manager-loader.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts +14 -0
- package/dist/types/config-aws/src/interfaces/ssm-parameter-store-loader.interface.d.ts.map +1 -0
- package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +69 -0
- package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +1 -0
- package/dist/types/config-aws/src/loaders/environment.loader.d.ts +46 -0
- package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +1 -0
- package/dist/types/config-aws/src/loaders/s3.loader.d.ts +62 -0
- package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +1 -0
- package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +68 -0
- package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +1 -0
- package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +78 -0
- package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +1 -0
- package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts +45 -0
- package/dist/types/config-aws/src/utils/env-file-parser.util.d.ts.map +1 -0
- package/dist/types/{utils → config-aws/src/utils}/validation.util.d.ts +10 -10
- package/dist/types/config-aws/src/utils/validation.util.d.ts.map +1 -0
- package/dist/types/{config.module.d.ts → nestjs-config-aws/src/config.module.d.ts} +1 -0
- package/dist/types/nestjs-config-aws/src/config.module.d.ts.map +1 -0
- package/dist/types/{index.d.ts → nestjs-config-aws/src/index.d.ts} +2 -4
- package/dist/types/nestjs-config-aws/src/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-factory.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/configuration-source.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-options.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/integration-state.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/nestjs-config-integration.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/typed-configuration.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/interfaces/utility-types.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/nestjs-config-integration.module.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/providers/aws-configuration-loader.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/providers/configuration-factory.provider.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/providers/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/error-handler.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/factory-registration.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/integration-state.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/namespace-handler.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/nestjs-config-integration.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/precedence-handler.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/utils/config-integration.util.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/integration/utils/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/interfaces/config-service.interface.d.ts.map +1 -0
- package/dist/types/{interfaces → nestjs-config-aws/src/interfaces}/default-schema.interface.d.ts +28 -28
- package/dist/types/nestjs-config-aws/src/interfaces/default-schema.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts +5 -0
- package/dist/types/nestjs-config-aws/src/interfaces/index.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/interfaces/module-options.interface.d.ts.map +1 -0
- package/dist/types/nestjs-config-aws/src/services/config.service.d.ts +88 -0
- package/dist/types/nestjs-config-aws/src/services/config.service.d.ts.map +1 -0
- package/package.json +20 -27
- package/LICENSE +0 -21
- package/dist/cjs/config.module.js +0 -178
- package/dist/cjs/config.module.js.map +0 -1
- package/dist/cjs/index.js +0 -47
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/integration/index.js.map +0 -1
- package/dist/cjs/integration/interfaces/configuration-factory.interface.js +0 -3
- package/dist/cjs/integration/interfaces/configuration-factory.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/configuration-source.interface.js +0 -3
- package/dist/cjs/integration/interfaces/configuration-source.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/index.js.map +0 -1
- package/dist/cjs/integration/interfaces/integration-options.interface.js +0 -3
- package/dist/cjs/integration/interfaces/integration-options.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/integration-state.interface.js +0 -3
- package/dist/cjs/integration/interfaces/integration-state.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js +0 -73
- package/dist/cjs/integration/interfaces/nestjs-config-compatibility.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js +0 -3
- package/dist/cjs/integration/interfaces/nestjs-config-integration.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/typed-configuration.interface.js +0 -4
- package/dist/cjs/integration/interfaces/typed-configuration.interface.js.map +0 -1
- package/dist/cjs/integration/interfaces/utility-types.interface.js +0 -52
- package/dist/cjs/integration/interfaces/utility-types.interface.js.map +0 -1
- package/dist/cjs/integration/nestjs-config-integration.module.js +0 -124
- package/dist/cjs/integration/nestjs-config-integration.module.js.map +0 -1
- package/dist/cjs/integration/providers/aws-configuration-loader.service.js +0 -591
- package/dist/cjs/integration/providers/aws-configuration-loader.service.js.map +0 -1
- package/dist/cjs/integration/providers/configuration-factory.provider.js +0 -383
- package/dist/cjs/integration/providers/configuration-factory.provider.js.map +0 -1
- package/dist/cjs/integration/providers/index.js.map +0 -1
- package/dist/cjs/integration/services/async-config-helper.service.js +0 -356
- package/dist/cjs/integration/services/async-config-helper.service.js.map +0 -1
- package/dist/cjs/integration/services/error-handler.service.js +0 -265
- package/dist/cjs/integration/services/error-handler.service.js.map +0 -1
- package/dist/cjs/integration/services/factory-registration.service.js +0 -512
- package/dist/cjs/integration/services/factory-registration.service.js.map +0 -1
- package/dist/cjs/integration/services/index.js.map +0 -1
- package/dist/cjs/integration/services/integration-state.service.js +0 -83
- package/dist/cjs/integration/services/integration-state.service.js.map +0 -1
- package/dist/cjs/integration/services/namespace-handler.service.js +0 -467
- package/dist/cjs/integration/services/namespace-handler.service.js.map +0 -1
- package/dist/cjs/integration/services/nestjs-config-integration.service.js +0 -316
- package/dist/cjs/integration/services/nestjs-config-integration.service.js.map +0 -1
- package/dist/cjs/integration/services/precedence-handler.service.js +0 -294
- package/dist/cjs/integration/services/precedence-handler.service.js.map +0 -1
- package/dist/cjs/integration/services/validation-integration.service.js +0 -591
- package/dist/cjs/integration/services/validation-integration.service.js.map +0 -1
- package/dist/cjs/integration/utils/config-integration.util.js +0 -283
- package/dist/cjs/integration/utils/config-integration.util.js.map +0 -1
- package/dist/cjs/integration/utils/index.js.map +0 -1
- package/dist/cjs/interfaces/config-loader.interface.js +0 -3
- package/dist/cjs/interfaces/config-loader.interface.js.map +0 -1
- package/dist/cjs/interfaces/config-service.interface.js +0 -11
- package/dist/cjs/interfaces/config-service.interface.js.map +0 -1
- package/dist/cjs/interfaces/default-schema.interface.js +0 -63
- package/dist/cjs/interfaces/default-schema.interface.js.map +0 -1
- package/dist/cjs/interfaces/errors.interface.js +0 -77
- package/dist/cjs/interfaces/errors.interface.js.map +0 -1
- package/dist/cjs/interfaces/index.js +0 -25
- package/dist/cjs/interfaces/index.js.map +0 -1
- package/dist/cjs/interfaces/module-options.interface.js +0 -3
- package/dist/cjs/interfaces/module-options.interface.js.map +0 -1
- package/dist/cjs/loaders/environment.loader.js +0 -59
- package/dist/cjs/loaders/environment.loader.js.map +0 -1
- package/dist/cjs/loaders/secrets-manager.loader.js +0 -122
- package/dist/cjs/loaders/secrets-manager.loader.js.map +0 -1
- package/dist/cjs/loaders/ssm-parameter-store.loader.js +0 -146
- package/dist/cjs/loaders/ssm-parameter-store.loader.js.map +0 -1
- package/dist/cjs/services/config.service.js +0 -297
- package/dist/cjs/services/config.service.js.map +0 -1
- package/dist/cjs/utils/validation.util.js +0 -114
- package/dist/cjs/utils/validation.util.js.map +0 -1
- package/dist/esm/config.module.js +0 -175
- package/dist/esm/config.module.js.map +0 -1
- package/dist/esm/index.js +0 -18
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/integration/index.js +0 -7
- package/dist/esm/integration/index.js.map +0 -1
- package/dist/esm/integration/interfaces/configuration-factory.interface.js +0 -2
- package/dist/esm/integration/interfaces/configuration-factory.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/configuration-source.interface.js +0 -2
- package/dist/esm/integration/interfaces/configuration-source.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/index.js +0 -10
- package/dist/esm/integration/interfaces/index.js.map +0 -1
- package/dist/esm/integration/interfaces/integration-options.interface.js +0 -2
- package/dist/esm/integration/interfaces/integration-options.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/integration-state.interface.js +0 -2
- package/dist/esm/integration/interfaces/integration-state.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js +0 -64
- package/dist/esm/integration/interfaces/nestjs-config-compatibility.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js +0 -2
- package/dist/esm/integration/interfaces/nestjs-config-integration.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/typed-configuration.interface.js +0 -3
- package/dist/esm/integration/interfaces/typed-configuration.interface.js.map +0 -1
- package/dist/esm/integration/interfaces/utility-types.interface.js +0 -44
- package/dist/esm/integration/interfaces/utility-types.interface.js.map +0 -1
- package/dist/esm/integration/nestjs-config-integration.module.js +0 -121
- package/dist/esm/integration/nestjs-config-integration.module.js.map +0 -1
- package/dist/esm/integration/providers/aws-configuration-loader.service.js +0 -588
- package/dist/esm/integration/providers/aws-configuration-loader.service.js.map +0 -1
- package/dist/esm/integration/providers/configuration-factory.provider.js +0 -380
- package/dist/esm/integration/providers/configuration-factory.provider.js.map +0 -1
- package/dist/esm/integration/providers/index.js +0 -4
- package/dist/esm/integration/providers/index.js.map +0 -1
- package/dist/esm/integration/services/async-config-helper.service.js +0 -353
- package/dist/esm/integration/services/async-config-helper.service.js.map +0 -1
- package/dist/esm/integration/services/error-handler.service.js +0 -262
- package/dist/esm/integration/services/error-handler.service.js.map +0 -1
- package/dist/esm/integration/services/factory-registration.service.js +0 -509
- package/dist/esm/integration/services/factory-registration.service.js.map +0 -1
- package/dist/esm/integration/services/index.js +0 -10
- package/dist/esm/integration/services/index.js.map +0 -1
- package/dist/esm/integration/services/integration-state.service.js +0 -80
- package/dist/esm/integration/services/integration-state.service.js.map +0 -1
- package/dist/esm/integration/services/namespace-handler.service.js +0 -464
- package/dist/esm/integration/services/namespace-handler.service.js.map +0 -1
- package/dist/esm/integration/services/nestjs-config-integration.service.js +0 -313
- package/dist/esm/integration/services/nestjs-config-integration.service.js.map +0 -1
- package/dist/esm/integration/services/precedence-handler.service.js +0 -291
- package/dist/esm/integration/services/precedence-handler.service.js.map +0 -1
- package/dist/esm/integration/services/validation-integration.service.js +0 -585
- package/dist/esm/integration/services/validation-integration.service.js.map +0 -1
- package/dist/esm/integration/utils/config-integration.util.js +0 -240
- package/dist/esm/integration/utils/config-integration.util.js.map +0 -1
- package/dist/esm/integration/utils/index.js +0 -3
- package/dist/esm/integration/utils/index.js.map +0 -1
- package/dist/esm/interfaces/config-loader.interface.js +0 -2
- package/dist/esm/interfaces/config-loader.interface.js.map +0 -1
- package/dist/esm/interfaces/config-service.interface.js +0 -7
- package/dist/esm/interfaces/config-service.interface.js.map +0 -1
- package/dist/esm/interfaces/default-schema.interface.js +0 -59
- package/dist/esm/interfaces/default-schema.interface.js.map +0 -1
- package/dist/esm/interfaces/errors.interface.js +0 -69
- package/dist/esm/interfaces/errors.interface.js.map +0 -1
- package/dist/esm/interfaces/index.js +0 -9
- package/dist/esm/interfaces/index.js.map +0 -1
- package/dist/esm/interfaces/module-options.interface.js +0 -2
- package/dist/esm/interfaces/module-options.interface.js.map +0 -1
- package/dist/esm/loaders/environment.loader.js +0 -55
- package/dist/esm/loaders/environment.loader.js.map +0 -1
- package/dist/esm/loaders/secrets-manager.loader.js +0 -118
- package/dist/esm/loaders/secrets-manager.loader.js.map +0 -1
- package/dist/esm/loaders/ssm-parameter-store.loader.js +0 -142
- package/dist/esm/loaders/ssm-parameter-store.loader.js.map +0 -1
- package/dist/esm/services/config.service.js +0 -261
- package/dist/esm/services/config.service.js.map +0 -1
- package/dist/esm/utils/validation.util.js +0 -110
- package/dist/esm/utils/validation.util.js.map +0 -1
- package/dist/types/config.module.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/integration/index.d.ts.map +0 -1
- package/dist/types/integration/interfaces/configuration-factory.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/configuration-source.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/index.d.ts.map +0 -1
- package/dist/types/integration/interfaces/integration-options.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/integration-state.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/nestjs-config-compatibility.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/nestjs-config-integration.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/typed-configuration.interface.d.ts.map +0 -1
- package/dist/types/integration/interfaces/utility-types.interface.d.ts.map +0 -1
- package/dist/types/integration/nestjs-config-integration.module.d.ts.map +0 -1
- package/dist/types/integration/providers/aws-configuration-loader.service.d.ts.map +0 -1
- package/dist/types/integration/providers/configuration-factory.provider.d.ts.map +0 -1
- package/dist/types/integration/providers/index.d.ts.map +0 -1
- package/dist/types/integration/services/async-config-helper.service.d.ts.map +0 -1
- package/dist/types/integration/services/error-handler.service.d.ts.map +0 -1
- package/dist/types/integration/services/factory-registration.service.d.ts.map +0 -1
- package/dist/types/integration/services/index.d.ts.map +0 -1
- package/dist/types/integration/services/integration-state.service.d.ts.map +0 -1
- package/dist/types/integration/services/namespace-handler.service.d.ts.map +0 -1
- package/dist/types/integration/services/nestjs-config-integration.service.d.ts.map +0 -1
- package/dist/types/integration/services/precedence-handler.service.d.ts.map +0 -1
- package/dist/types/integration/services/validation-integration.service.d.ts.map +0 -1
- package/dist/types/integration/utils/config-integration.util.d.ts.map +0 -1
- package/dist/types/integration/utils/index.d.ts.map +0 -1
- package/dist/types/interfaces/config-loader.interface.d.ts +0 -22
- package/dist/types/interfaces/config-loader.interface.d.ts.map +0 -1
- package/dist/types/interfaces/config-service.interface.d.ts.map +0 -1
- package/dist/types/interfaces/default-schema.interface.d.ts.map +0 -1
- package/dist/types/interfaces/errors.interface.d.ts +0 -38
- package/dist/types/interfaces/errors.interface.d.ts.map +0 -1
- package/dist/types/interfaces/index.d.ts +0 -6
- package/dist/types/interfaces/index.d.ts.map +0 -1
- package/dist/types/interfaces/module-options.interface.d.ts.map +0 -1
- package/dist/types/loaders/environment.loader.d.ts +0 -26
- package/dist/types/loaders/environment.loader.d.ts.map +0 -1
- package/dist/types/loaders/secrets-manager.loader.d.ts +0 -52
- package/dist/types/loaders/secrets-manager.loader.d.ts.map +0 -1
- package/dist/types/loaders/ssm-parameter-store.loader.d.ts +0 -68
- package/dist/types/loaders/ssm-parameter-store.loader.d.ts.map +0 -1
- package/dist/types/services/config.service.d.ts +0 -94
- package/dist/types/services/config.service.d.ts.map +0 -1
- package/dist/types/utils/validation.util.d.ts.map +0 -1
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/index.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/configuration-factory.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/configuration-source.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/index.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/integration-options.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/integration-state.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/nestjs-config-compatibility.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/nestjs-config-integration.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/typed-configuration.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/interfaces/utility-types.interface.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/nestjs-config-integration.module.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/providers/aws-configuration-loader.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/providers/configuration-factory.provider.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/providers/index.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/async-config-helper.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/error-handler.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/factory-registration.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/index.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/integration-state.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/namespace-handler.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/nestjs-config-integration.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/precedence-handler.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/services/validation-integration.service.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/utils/config-integration.util.d.ts +0 -0
- /package/dist/types/{integration → nestjs-config-aws/src/integration}/utils/index.d.ts +0 -0
- /package/dist/types/{interfaces → nestjs-config-aws/src/interfaces}/config-service.interface.d.ts +0 -0
- /package/dist/types/{interfaces → nestjs-config-aws/src/interfaces}/module-options.interface.d.ts +0 -0
package/dist/cjs/nestjs-config-aws/src/integration/providers/configuration-factory.provider.js
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var ConfigurationFactoryProviderImpl_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ConfigurationFactoryProviderImpl = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const config_1 = require("@nestjs/config");
|
|
19
|
+
const precedence_handler_service_1 = require("../services/precedence-handler.service");
|
|
20
|
+
const nestjs_config_integration_module_1 = require("../nestjs-config-integration.module");
|
|
21
|
+
/**
|
|
22
|
+
* Implementation of ConfigurationFactoryProvider that creates configuration factories
|
|
23
|
+
* for @nestjs/config integration with AWS configuration sources.
|
|
24
|
+
*/
|
|
25
|
+
let ConfigurationFactoryProviderImpl = ConfigurationFactoryProviderImpl_1 = class ConfigurationFactoryProviderImpl {
|
|
26
|
+
precedenceHandler;
|
|
27
|
+
options;
|
|
28
|
+
logger = new common_1.Logger(ConfigurationFactoryProviderImpl_1.name);
|
|
29
|
+
constructor(precedenceHandler, options) {
|
|
30
|
+
this.precedenceHandler = precedenceHandler;
|
|
31
|
+
this.options = options;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a configuration factory for a specific namespace.
|
|
35
|
+
* @param namespace - The namespace for the configuration
|
|
36
|
+
* @param config - The configuration data
|
|
37
|
+
* @returns A configuration factory that can be used with @nestjs/config
|
|
38
|
+
*/
|
|
39
|
+
createFactory(namespace, config) {
|
|
40
|
+
this.logger.debug(`Creating configuration factory for namespace: ${namespace}`);
|
|
41
|
+
// Create a factory function that returns the configuration
|
|
42
|
+
const factory = () => {
|
|
43
|
+
this.logger.debug(`Factory called for namespace: ${namespace}`);
|
|
44
|
+
const processedConfig = this.processConfigurationValues(config);
|
|
45
|
+
// Add metadata for debugging and introspection
|
|
46
|
+
if (this.options?.enableLogging) {
|
|
47
|
+
this.logger.debug(`Factory returning ${Object.keys(processedConfig).length} configuration keys for namespace: ${namespace}`);
|
|
48
|
+
}
|
|
49
|
+
return processedConfig;
|
|
50
|
+
};
|
|
51
|
+
// If namespace is provided, use registerAs to create a namespaced factory
|
|
52
|
+
if (namespace && namespace.trim() !== '') {
|
|
53
|
+
const namespacedFactory = (0, config_1.registerAs)(namespace, factory);
|
|
54
|
+
// Enhance the factory with additional metadata for better integration
|
|
55
|
+
namespacedFactory.__namespace = namespace;
|
|
56
|
+
namespacedFactory.__isAwsFactory = true;
|
|
57
|
+
namespacedFactory.__configKeys = Object.keys(config);
|
|
58
|
+
return namespacedFactory;
|
|
59
|
+
}
|
|
60
|
+
// For non-namespaced factories, add metadata as well
|
|
61
|
+
factory.__isAwsFactory = true;
|
|
62
|
+
factory.__configKeys = Object.keys(config);
|
|
63
|
+
return factory;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create multiple namespaced configuration factories from a configuration object.
|
|
67
|
+
* @param config - The configuration data organized by namespace
|
|
68
|
+
* @returns Array of configuration factories
|
|
69
|
+
*/
|
|
70
|
+
createNamespacedFactories(config) {
|
|
71
|
+
this.logger.debug(`Creating namespaced factories for ${Object.keys(config).length} namespaces`);
|
|
72
|
+
const factories = [];
|
|
73
|
+
for (const [namespace, namespaceConfig] of Object.entries(config)) {
|
|
74
|
+
if (this.isValidNamespaceConfig(namespace, namespaceConfig)) {
|
|
75
|
+
try {
|
|
76
|
+
const factory = this.createFactory(namespace, namespaceConfig);
|
|
77
|
+
factories.push(factory);
|
|
78
|
+
this.logger.debug(`Created factory for namespace: ${namespace}`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
this.logger.error(`Failed to create factory for namespace ${namespace}:`, error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.logger.warn(`Skipping invalid namespace configuration: ${namespace}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return factories;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Merge AWS configuration with existing local configuration using precedence rules.
|
|
92
|
+
* @param awsConfig - Configuration loaded from AWS sources
|
|
93
|
+
* @param localConfig - Local configuration data
|
|
94
|
+
* @returns Merged configuration data
|
|
95
|
+
*/
|
|
96
|
+
mergeWithExisting(awsConfig, localConfig) {
|
|
97
|
+
this.logger.debug('Merging AWS configuration with local configuration');
|
|
98
|
+
// Create configuration sources for precedence handling
|
|
99
|
+
const sources = [
|
|
100
|
+
{
|
|
101
|
+
name: 'local-config',
|
|
102
|
+
type: 'local-file',
|
|
103
|
+
priority: 1,
|
|
104
|
+
data: localConfig,
|
|
105
|
+
loadedAt: new Date()
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'aws-config',
|
|
109
|
+
type: 'secrets-manager', // Assume AWS config is from secrets manager for now
|
|
110
|
+
priority: 2,
|
|
111
|
+
data: awsConfig,
|
|
112
|
+
loadedAt: new Date()
|
|
113
|
+
}
|
|
114
|
+
];
|
|
115
|
+
// Use AWS-first precedence by default
|
|
116
|
+
const merged = this.precedenceHandler.applyPrecedenceRules(sources, 'aws-first');
|
|
117
|
+
this.logger.debug(`Merged configuration with ${Object.keys(merged).length} top-level keys`);
|
|
118
|
+
return merged;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create an enhanced AWS configuration factory with metadata.
|
|
122
|
+
* @param namespace - Optional namespace for the configuration
|
|
123
|
+
* @param config - The configuration data
|
|
124
|
+
* @param sources - Sources that contributed to this configuration
|
|
125
|
+
* @param precedenceRule - Precedence rule applied to this configuration
|
|
126
|
+
* @returns Enhanced AWS configuration factory
|
|
127
|
+
*/
|
|
128
|
+
createAwsConfigurationFactory(namespace, config, sources, precedenceRule) {
|
|
129
|
+
const baseFactory = namespace
|
|
130
|
+
? this.createFactory(namespace, config)
|
|
131
|
+
: this.createFactory('', config);
|
|
132
|
+
// Enhance the factory with AWS-specific metadata
|
|
133
|
+
const awsFactory = baseFactory;
|
|
134
|
+
awsFactory.namespace = namespace;
|
|
135
|
+
awsFactory.sources = sources;
|
|
136
|
+
awsFactory.precedenceRule = precedenceRule;
|
|
137
|
+
this.logger.debug(`Created AWS configuration factory with ${sources.length} sources and precedence: ${precedenceRule}`);
|
|
138
|
+
return awsFactory;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create configuration factories from multiple sources with proper organization.
|
|
142
|
+
* @param sourceConfigs - Map of source name to configuration data
|
|
143
|
+
* @param namespaces - Optional list of namespaces to organize configuration
|
|
144
|
+
* @returns Array of configuration factories organized by namespace
|
|
145
|
+
*/
|
|
146
|
+
createFactoriesFromSources(sourceConfigs, namespaces) {
|
|
147
|
+
this.logger.debug(`Creating factories from ${sourceConfigs.size} sources`);
|
|
148
|
+
const factories = [];
|
|
149
|
+
if (namespaces && namespaces.length > 0) {
|
|
150
|
+
// Create namespaced factories
|
|
151
|
+
for (const namespace of namespaces) {
|
|
152
|
+
const namespaceConfig = this.extractNamespaceConfig(sourceConfigs, namespace);
|
|
153
|
+
if (Object.keys(namespaceConfig).length > 0) {
|
|
154
|
+
const factory = this.createFactory(namespace, namespaceConfig);
|
|
155
|
+
factories.push(factory);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Create a single factory with all configuration
|
|
161
|
+
const mergedConfig = this.mergeSourceConfigs(sourceConfigs);
|
|
162
|
+
if (Object.keys(mergedConfig).length > 0) {
|
|
163
|
+
const factory = this.createFactory('', mergedConfig);
|
|
164
|
+
factories.push(factory);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
this.logger.debug(`Created ${factories.length} factories from sources`);
|
|
168
|
+
return factories;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create configuration factories from sources with precedence rules.
|
|
172
|
+
* @param sources - Array of configuration sources
|
|
173
|
+
* @param precedenceRule - Precedence rule to apply
|
|
174
|
+
* @param namespaces - Optional list of namespaces to organize configuration
|
|
175
|
+
* @returns Array of configuration factories
|
|
176
|
+
*/
|
|
177
|
+
createFactoriesWithPrecedence(sources, precedenceRule, namespaces) {
|
|
178
|
+
this.logger.debug(`Creating factories with precedence rule: ${precedenceRule}`);
|
|
179
|
+
// Validate sources first
|
|
180
|
+
const validation = this.precedenceHandler.validateSources(sources);
|
|
181
|
+
if (!validation.valid) {
|
|
182
|
+
this.logger.error('Invalid sources provided:', validation.issues);
|
|
183
|
+
throw new Error(`Invalid configuration sources: ${validation.issues.join(', ')}`);
|
|
184
|
+
}
|
|
185
|
+
const factories = [];
|
|
186
|
+
if (namespaces && namespaces.length > 0) {
|
|
187
|
+
// Create namespaced factories with precedence
|
|
188
|
+
for (const namespace of namespaces) {
|
|
189
|
+
const namespaceSources = this.extractNamespaceSources(sources, namespace);
|
|
190
|
+
if (namespaceSources.length > 0) {
|
|
191
|
+
const mergedConfig = this.precedenceHandler.applyPrecedenceRules(namespaceSources, precedenceRule);
|
|
192
|
+
const factory = this.createAwsConfigurationFactory(namespace, mergedConfig, namespaceSources, precedenceRule);
|
|
193
|
+
factories.push(factory);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Create a single factory with all configuration
|
|
199
|
+
const mergedConfig = this.precedenceHandler.applyPrecedenceRules(sources, precedenceRule);
|
|
200
|
+
const factory = this.createAwsConfigurationFactory(undefined, mergedConfig, sources, precedenceRule);
|
|
201
|
+
factories.push(factory);
|
|
202
|
+
}
|
|
203
|
+
this.logger.debug(`Created ${factories.length} factories with precedence`);
|
|
204
|
+
return factories;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Merge configuration with explicit precedence rule.
|
|
208
|
+
* @param sources - Configuration sources
|
|
209
|
+
* @param precedenceRule - Precedence rule to apply
|
|
210
|
+
* @returns Merged configuration data
|
|
211
|
+
*/
|
|
212
|
+
mergeWithPrecedence(sources, precedenceRule) {
|
|
213
|
+
this.logger.debug(`Merging ${sources.length} sources with precedence: ${precedenceRule}`);
|
|
214
|
+
const validation = this.precedenceHandler.validateSources(sources);
|
|
215
|
+
if (!validation.valid) {
|
|
216
|
+
this.logger.error('Invalid sources provided:', validation.issues);
|
|
217
|
+
throw new Error(`Invalid configuration sources: ${validation.issues.join(', ')}`);
|
|
218
|
+
}
|
|
219
|
+
return this.precedenceHandler.applyPrecedenceRules(sources, precedenceRule);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Process configuration values to handle special cases and transformations.
|
|
223
|
+
* @param config - Raw configuration object
|
|
224
|
+
* @returns Processed configuration object
|
|
225
|
+
*/
|
|
226
|
+
processConfigurationValues(config) {
|
|
227
|
+
const processed = {};
|
|
228
|
+
for (const [key, value] of Object.entries(config)) {
|
|
229
|
+
processed[key] = this.processValue(value);
|
|
230
|
+
}
|
|
231
|
+
return processed;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Process individual configuration values.
|
|
235
|
+
* @param value - The value to process
|
|
236
|
+
* @returns Processed value
|
|
237
|
+
*/
|
|
238
|
+
processValue(value) {
|
|
239
|
+
if (value === null || value === undefined) {
|
|
240
|
+
return value;
|
|
241
|
+
}
|
|
242
|
+
// Handle string values that might need type conversion
|
|
243
|
+
if (typeof value === 'string') {
|
|
244
|
+
return this.convertStringValue(value);
|
|
245
|
+
}
|
|
246
|
+
// Handle nested objects
|
|
247
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
248
|
+
return this.processConfigurationValues(value);
|
|
249
|
+
}
|
|
250
|
+
// Handle arrays
|
|
251
|
+
if (Array.isArray(value)) {
|
|
252
|
+
return value.map(item => this.processValue(item));
|
|
253
|
+
}
|
|
254
|
+
return value;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Convert string values to appropriate types.
|
|
258
|
+
* @param value - String value to convert
|
|
259
|
+
* @returns Converted value
|
|
260
|
+
*/
|
|
261
|
+
convertStringValue(value) {
|
|
262
|
+
// Handle boolean strings
|
|
263
|
+
if (value.toLowerCase() === 'true')
|
|
264
|
+
return true;
|
|
265
|
+
if (value.toLowerCase() === 'false')
|
|
266
|
+
return false;
|
|
267
|
+
// Handle numeric strings
|
|
268
|
+
if (/^\d+$/.test(value)) {
|
|
269
|
+
const num = parseInt(value, 10);
|
|
270
|
+
return isNaN(num) ? value : num;
|
|
271
|
+
}
|
|
272
|
+
if (/^\d*\.\d+$/.test(value)) {
|
|
273
|
+
const num = parseFloat(value);
|
|
274
|
+
return isNaN(num) ? value : num;
|
|
275
|
+
}
|
|
276
|
+
// Handle JSON strings
|
|
277
|
+
if ((value.startsWith('{') && value.endsWith('}')) ||
|
|
278
|
+
(value.startsWith('[') && value.endsWith(']'))) {
|
|
279
|
+
try {
|
|
280
|
+
return JSON.parse(value);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// If parsing fails, return as string
|
|
284
|
+
return value;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return value;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Validate if a namespace configuration is valid.
|
|
291
|
+
* @param namespace - The namespace name
|
|
292
|
+
* @param config - The configuration data
|
|
293
|
+
* @returns True if valid, false otherwise
|
|
294
|
+
*/
|
|
295
|
+
isValidNamespaceConfig(namespace, config) {
|
|
296
|
+
return typeof namespace === 'string' &&
|
|
297
|
+
namespace.trim() !== '' &&
|
|
298
|
+
config !== null &&
|
|
299
|
+
config !== undefined &&
|
|
300
|
+
typeof config === 'object' &&
|
|
301
|
+
!Array.isArray(config);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Deep merge two configuration objects.
|
|
305
|
+
* @param target - Target object
|
|
306
|
+
* @param source - Source object
|
|
307
|
+
* @returns Merged object
|
|
308
|
+
*/
|
|
309
|
+
deepMerge(target, source) {
|
|
310
|
+
const result = { ...target };
|
|
311
|
+
for (const [key, value] of Object.entries(source)) {
|
|
312
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
313
|
+
if (result[key] && typeof result[key] === 'object' && !Array.isArray(result[key])) {
|
|
314
|
+
result[key] = this.deepMerge(result[key], value);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
result[key] = { ...value };
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
result[key] = value;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return result;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Extract configuration for a specific namespace from multiple sources.
|
|
328
|
+
* @param sourceConfigs - Map of source configurations
|
|
329
|
+
* @param namespace - Target namespace
|
|
330
|
+
* @returns Configuration for the namespace
|
|
331
|
+
*/
|
|
332
|
+
extractNamespaceConfig(sourceConfigs, namespace) {
|
|
333
|
+
let namespaceConfig = {};
|
|
334
|
+
for (const [sourceName, config] of sourceConfigs) {
|
|
335
|
+
if (config[namespace]) {
|
|
336
|
+
namespaceConfig = this.deepMerge(namespaceConfig, config[namespace]);
|
|
337
|
+
this.logger.debug(`Extracted ${namespace} config from source: ${sourceName}`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return namespaceConfig;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Merge configuration from multiple sources.
|
|
344
|
+
* @param sourceConfigs - Map of source configurations
|
|
345
|
+
* @returns Merged configuration
|
|
346
|
+
*/
|
|
347
|
+
mergeSourceConfigs(sourceConfigs) {
|
|
348
|
+
let mergedConfig = {};
|
|
349
|
+
for (const [sourceName, config] of sourceConfigs) {
|
|
350
|
+
mergedConfig = this.deepMerge(mergedConfig, config);
|
|
351
|
+
this.logger.debug(`Merged config from source: ${sourceName}`);
|
|
352
|
+
}
|
|
353
|
+
return mergedConfig;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Extract sources for a specific namespace.
|
|
357
|
+
* @param sources - All configuration sources
|
|
358
|
+
* @param namespace - Target namespace
|
|
359
|
+
* @returns Sources filtered for the namespace
|
|
360
|
+
*/
|
|
361
|
+
extractNamespaceSources(sources, namespace) {
|
|
362
|
+
const namespaceSources = [];
|
|
363
|
+
for (const source of sources) {
|
|
364
|
+
if (source.namespace === namespace || source.data[namespace]) {
|
|
365
|
+
const namespaceData = source.namespace === namespace ? source.data : source.data[namespace];
|
|
366
|
+
if (namespaceData && typeof namespaceData === 'object') {
|
|
367
|
+
namespaceSources.push({
|
|
368
|
+
...source,
|
|
369
|
+
data: namespaceData,
|
|
370
|
+
namespace: namespace
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return namespaceSources;
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
exports.ConfigurationFactoryProviderImpl = ConfigurationFactoryProviderImpl;
|
|
379
|
+
exports.ConfigurationFactoryProviderImpl = ConfigurationFactoryProviderImpl = ConfigurationFactoryProviderImpl_1 = __decorate([
|
|
380
|
+
(0, common_1.Injectable)(),
|
|
381
|
+
__param(1, (0, common_1.Optional)()),
|
|
382
|
+
__param(1, (0, common_1.Inject)(nestjs_config_integration_module_1.NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS)),
|
|
383
|
+
__metadata("design:paramtypes", [precedence_handler_service_1.PrecedenceHandlerService, Object])
|
|
384
|
+
], ConfigurationFactoryProviderImpl);
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1mYWN0b3J5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3Byb3ZpZGVycy9jb25maWd1cmF0aW9uLWZhY3RvcnkucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFzRTtBQUN0RSwyQ0FBMkQ7QUFJM0QsdUZBQWtGO0FBQ2xGLDBGQUE0RjtBQUU1Rjs7O0dBR0c7QUFFSSxJQUFNLGdDQUFnQyx3Q0FBdEMsTUFBTSxnQ0FBZ0M7SUFJeEI7SUFFQTtJQUxGLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxrQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RSxZQUNtQixpQkFBMkMsRUFFM0MsT0FBNEI7UUFGNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQUUzQyxZQUFPLEdBQVAsT0FBTyxDQUFxQjtJQUM1QyxDQUFDO0lBRUo7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsU0FBaUIsRUFBRSxNQUEyQjtRQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVoRiwyREFBMkQ7UUFDM0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVoRSwrQ0FBK0M7WUFDL0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLHNDQUFzQyxTQUFT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QUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0NBQ0YsQ0FBQTtBQXRhWSw0RUFBZ0M7MkNBQWhDLGdDQUFnQztJQUQ1QyxJQUFBLG1CQUFVLEdBQUU7SUFNUixXQUFBLElBQUEsaUJBQVEsR0FBRSxDQUFBO0lBQUUsV0FBQSxJQUFBLGVBQU0sRUFBQyx3RUFBcUMsQ0FBQyxDQUFBO3FDQUR0QixxREFBd0I7R0FKbkQsZ0NBQWdDLENBc2E1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIExvZ2dlciwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0BuZXN0anMvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnRmFjdG9yeSwgcmVnaXN0ZXJBcyB9IGZyb20gJ0BuZXN0anMvY29uZmlnJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlciwgQXdzQ29uZmlndXJhdGlvbkZhY3RvcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZ3VyYXRpb24tZmFjdG9yeS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU291cmNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWd1cmF0aW9uLXNvdXJjZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQcmVjZWRlbmNlUnVsZSwgSW50ZWdyYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlZ3JhdGlvbi1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFByZWNlZGVuY2VIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ByZWNlZGVuY2UtaGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTkVTVEpTX0NPTkZJR19BV1NfSU5URUdSQVRJT05fT1BUSU9OUyB9IGZyb20gJy4uL25lc3Rqcy1jb25maWctaW50ZWdyYXRpb24ubW9kdWxlJztcclxuXHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBDb25maWd1cmF0aW9uRmFjdG9yeVByb3ZpZGVyIHRoYXQgY3JlYXRlcyBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gKiBmb3IgQG5lc3Rqcy9jb25maWcgaW50ZWdyYXRpb24gd2l0aCBBV1MgY29uZmlndXJhdGlvbiBzb3VyY2VzLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlckltcGwgaW1wbGVtZW50cyBDb25maWd1cmF0aW9uRmFjdG9yeVByb3ZpZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IG5ldyBMb2dnZXIoQ29uZmlndXJhdGlvbkZhY3RvcnlQcm92aWRlckltcGwubmFtZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVjZWRlbmNlSGFuZGxlcjogUHJlY2VkZW5jZUhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChORVNUSlNfQ09ORklHX0FXU19JTlRFR1JBVElPTl9PUFRJT05TKSBcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IEludGVncmF0aW9uT3B0aW9uc1xyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgY29uZmlndXJhdGlvbiBmYWN0b3J5IGZvciBhIHNwZWNpZmljIG5hbWVzcGFjZS5cclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqIEByZXR1cm5zIEEgY29uZmlndXJhdGlvbiBmYWN0b3J5IHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBAbmVzdGpzL2NvbmZpZ1xyXG4gICAqL1xyXG4gIGNyZWF0ZUZhY3RvcnkobmFtZXNwYWNlOiBzdHJpbmcsIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IENvbmZpZ0ZhY3Rvcnkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZX1gKTtcclxuICAgIFxyXG4gICAgLy8gQ3JlYXRlIGEgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgIGNvbnN0IGZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGYWN0b3J5IGNhbGxlZCBmb3IgbmFtZXNwYWNlOiAke25hbWVzcGFjZX1gKTtcclxuICAgICAgY29uc3QgcHJvY2Vzc2VkQ29uZmlnID0gdGhpcy5wcm9jZXNzQ29uZmlndXJhdGlvblZhbHVlcyhjb25maWcpO1xyXG4gICAgICBcclxuICAgICAgLy8gQWRkIG1ldGFkYXRhIGZvciBkZWJ1Z2dpbmcgYW5kIGludHJvc3BlY3Rpb25cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucz8uZW5hYmxlTG9nZ2luZykge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGYWN0b3J5IHJldHVybmluZyAke09iamVjdC5rZXlzKHByb2Nlc3NlZENvbmZpZykubGVuZ3RofSBjb25maWd1cmF0aW9uIGtleXMgZm9yIG5hbWVzcGFjZTogJHtuYW1lc3BhY2V9YCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHJldHVybiBwcm9jZXNzZWRDb25maWc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIElmIG5hbWVzcGFjZSBpcyBwcm92aWRlZCwgdXNlIHJlZ2lzdGVyQXMgdG8gY3JlYXRlIGEgbmFtZXNwYWNlZCBmYWN0b3J5XHJcbiAgICBpZiAobmFtZXNwYWNlICYmIG5hbWVzcGFjZS50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgIGNvbnN0IG5hbWVzcGFjZWRGYWN0b3J5ID0gcmVnaXN0ZXJBcyhuYW1lc3BhY2UsIGZhY3RvcnkpO1xyXG4gICAgICBcclxuICAgICAgLy8gRW5oYW5jZSB0aGUgZmFjdG9yeSB3aXRoIGFkZGl0aW9uYWwgbWV0YWRhdGEgZm9yIGJldHRlciBpbnRlZ3JhdGlvblxyXG4gICAgICAobmFtZXNwYWNlZEZhY3RvcnkgYXMgYW55KS5fX25hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgICAgKG5hbWVzcGFjZWRGYWN0b3J5IGFzIGFueSkuX19pc0F3c0ZhY3RvcnkgPSB0cnVlO1xyXG4gICAgICAobmFtZXNwYWNlZEZhY3RvcnkgYXMgYW55KS5fX2NvbmZpZ0tleXMgPSBPYmplY3Qua2V5cyhjb25maWcpO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuIG5hbWVzcGFjZWRGYWN0b3J5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBub24tbmFtZXNwYWNlZCBmYWN0b3JpZXMsIGFkZCBtZXRhZGF0YSBhcyB3ZWxsXHJcbiAgICAoZmFjdG9yeSBhcyBhbnkpLl9faXNBd3NGYWN0b3J5ID0gdHJ1ZTtcclxuICAgIChmYWN0b3J5IGFzIGFueSkuX19jb25maWdLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGZhY3Rvcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgbXVsdGlwbGUgbmFtZXNwYWNlZCBjb25maWd1cmF0aW9uIGZhY3RvcmllcyBmcm9tIGEgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGRhdGEgb3JnYW5pemVkIGJ5IG5hbWVzcGFjZVxyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzXHJcbiAgICovXHJcbiAgY3JlYXRlTmFtZXNwYWNlZEZhY3Rvcmllcyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBDb25maWdGYWN0b3J5W10ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIG5hbWVzcGFjZWQgZmFjdG9yaWVzIGZvciAke09iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RofSBuYW1lc3BhY2VzYCk7XHJcbiAgICBjb25zdCBmYWN0b3JpZXM6IENvbmZpZ0ZhY3RvcnlbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lc3BhY2UsIG5hbWVzcGFjZUNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnKSkge1xyXG4gICAgICBpZiAodGhpcy5pc1ZhbGlkTmFtZXNwYWNlQ29uZmlnKG5hbWVzcGFjZSwgbmFtZXNwYWNlQ29uZmlnKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jcmVhdGVGYWN0b3J5KG5hbWVzcGFjZSwgbmFtZXNwYWNlQ29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xyXG4gICAgICAgICAgZmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCBmYWN0b3J5IGZvciBuYW1lc3BhY2U6ICR7bmFtZXNwYWNlfWApO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmYWN0b3J5IGZvciBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9OmAsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgU2tpcHBpbmcgaW52YWxpZCBuYW1lc3BhY2UgY29uZmlndXJhdGlvbjogJHtuYW1lc3BhY2V9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIGZhY3RvcmllcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lcmdlIEFXUyBjb25maWd1cmF0aW9uIHdpdGggZXhpc3RpbmcgbG9jYWwgY29uZmlndXJhdGlvbiB1c2luZyBwcmVjZWRlbmNlIHJ1bGVzLlxyXG4gICAqIEBwYXJhbSBhd3NDb25maWcgLSBDb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIEFXUyBzb3VyY2VzXHJcbiAgICogQHBhcmFtIGxvY2FsQ29uZmlnIC0gTG9jYWwgY29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICogQHJldHVybnMgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gZGF0YVxyXG4gICAqL1xyXG4gIG1lcmdlV2l0aEV4aXN0aW5nKFxyXG4gICAgYXdzQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBcclxuICAgIGxvY2FsQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTWVyZ2luZyBBV1MgY29uZmlndXJhdGlvbiB3aXRoIGxvY2FsIGNvbmZpZ3VyYXRpb24nKTtcclxuICAgIFxyXG4gICAgLy8gQ3JlYXRlIGNvbmZpZ3VyYXRpb24gc291cmNlcyBmb3IgcHJlY2VkZW5jZSBoYW5kbGluZ1xyXG4gICAgY29uc3Qgc291cmNlczogQ29uZmlndXJhdGlvblNvdXJjZVtdID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2xvY2FsLWNvbmZpZycsXHJcbiAgICAgICAgdHlwZTogJ2xvY2FsLWZpbGUnLFxyXG4gICAgICAgIHByaW9yaXR5OiAxLFxyXG4gICAgICAgIGRhdGE6IGxvY2FsQ29uZmlnLFxyXG4gICAgICAgIGxvYWRlZEF0OiBuZXcgRGF0ZSgpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnYXdzLWNvbmZpZycsXHJcbiAgICAgICAgdHlwZTogJ3NlY3JldHMtbWFuYWdlcicsIC8vIEFzc3VtZSBBV1MgY29uZmlnIGlzIGZyb20gc2VjcmV0cyBtYW5hZ2VyIGZvciBub3dcclxuICAgICAgICBwcmlvcml0eTogMixcclxuICAgICAgICBkYXRhOiBhd3NDb25maWcsXHJcbiAgICAgICAgbG9hZGVkQXQ6IG5ldyBEYXRlKClcclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBVc2UgQVdTLWZpcnN0IHByZWNlZGVuY2UgYnkgZGVmYXVsdFxyXG4gICAgY29uc3QgbWVyZ2VkID0gdGhpcy5wcmVjZWRlbmNlSGFuZGxlci5hcHBseVByZWNlZGVuY2VSdWxlcyhzb3VyY2VzLCAnYXdzLWZpcnN0Jyk7XHJcbiAgICBcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBNZXJnZWQgY29uZmlndXJhdGlvbiB3aXRoICR7T2JqZWN0LmtleXMobWVyZ2VkKS5sZW5ndGh9IHRvcC1sZXZlbCBrZXlzYCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGVuaGFuY2VkIEFXUyBjb25maWd1cmF0aW9uIGZhY3Rvcnkgd2l0aCBtZXRhZGF0YS5cclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gT3B0aW9uYWwgbmFtZXNwYWNlIGZvciB0aGUgY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBTb3VyY2VzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uXHJcbiAgICogQHBhcmFtIHByZWNlZGVuY2VSdWxlIC0gUHJlY2VkZW5jZSBydWxlIGFwcGxpZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uXHJcbiAgICogQHJldHVybnMgRW5oYW5jZWQgQVdTIGNvbmZpZ3VyYXRpb24gZmFjdG9yeVxyXG4gICAqL1xyXG4gIGNyZWF0ZUF3c0NvbmZpZ3VyYXRpb25GYWN0b3J5KFxyXG4gICAgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXHJcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICBzb3VyY2VzOiBDb25maWd1cmF0aW9uU291cmNlW10sXHJcbiAgICBwcmVjZWRlbmNlUnVsZTogUHJlY2VkZW5jZVJ1bGVcclxuICApOiBBd3NDb25maWd1cmF0aW9uRmFjdG9yeSB7XHJcbiAgICBjb25zdCBiYXNlRmFjdG9yeSA9IG5hbWVzcGFjZSBcclxuICAgICAgPyB0aGlzLmNyZWF0ZUZhY3RvcnkobmFtZXNwYWNlLCBjb25maWcpXHJcbiAgICAgIDogdGhpcy5jcmVhdGVGYWN0b3J5KCcnLCBjb25maWcpO1xyXG5cclxuICAgIC8vIEVuaGFuY2UgdGhlIGZhY3Rvcnkgd2l0aCBBV1Mtc3BlY2lmaWMgbWV0YWRhdGFcclxuICAgIGNvbnN0IGF3c0ZhY3RvcnkgPSBiYXNlRmFjdG9yeSBhcyBBd3NDb25maWd1cmF0aW9uRmFjdG9yeTtcclxuICAgIGF3c0ZhY3RvcnkubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xyXG4gICAgYXdzRmFjdG9yeS5zb3VyY2VzID0gc291cmNlcztcclxuICAgIGF3c0ZhY3RvcnkucHJlY2VkZW5jZVJ1bGUgPSBwcmVjZWRlbmNlUnVsZTtcclxuXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRlZCBBV1MgY29uZmlndXJhdGlvbiBmYWN0b3J5IHdpdGggJHtzb3VyY2VzLmxlbmd0aH0gc291cmNlcyBhbmQgcHJlY2VkZW5jZTogJHtwcmVjZWRlbmNlUnVsZX1gKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGF3c0ZhY3Rvcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzIHdpdGggcHJvcGVyIG9yZ2FuaXphdGlvbi5cclxuICAgKiBAcGFyYW0gc291cmNlQ29uZmlncyAtIE1hcCBvZiBzb3VyY2UgbmFtZSB0byBjb25maWd1cmF0aW9uIGRhdGFcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlcyAtIE9wdGlvbmFsIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBvcmdhbml6ZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHJldHVybnMgQXJyYXkgb2YgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgb3JnYW5pemVkIGJ5IG5hbWVzcGFjZVxyXG4gICAqL1xyXG4gIGNyZWF0ZUZhY3Rvcmllc0Zyb21Tb3VyY2VzKFxyXG4gICAgc291cmNlQ29uZmlnczogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4sXHJcbiAgICBuYW1lc3BhY2VzPzogc3RyaW5nW11cclxuICApOiBDb25maWdGYWN0b3J5W10ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIGZhY3RvcmllcyBmcm9tICR7c291cmNlQ29uZmlncy5zaXplfSBzb3VyY2VzYCk7XHJcbiAgICBjb25zdCBmYWN0b3JpZXM6IENvbmZpZ0ZhY3RvcnlbXSA9IFtdO1xyXG5cclxuICAgIGlmIChuYW1lc3BhY2VzICYmIG5hbWVzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBDcmVhdGUgbmFtZXNwYWNlZCBmYWN0b3JpZXNcclxuICAgICAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgbmFtZXNwYWNlcykge1xyXG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZUNvbmZpZyA9IHRoaXMuZXh0cmFjdE5hbWVzcGFjZUNvbmZpZyhzb3VyY2VDb25maWdzLCBuYW1lc3BhY2UpO1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhuYW1lc3BhY2VDb25maWcpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNyZWF0ZUZhY3RvcnkobmFtZXNwYWNlLCBuYW1lc3BhY2VDb25maWcpO1xyXG4gICAgICAgICAgZmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYSBzaW5nbGUgZmFjdG9yeSB3aXRoIGFsbCBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IG1lcmdlZENvbmZpZyA9IHRoaXMubWVyZ2VTb3VyY2VDb25maWdzKHNvdXJjZUNvbmZpZ3MpO1xyXG4gICAgICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkQ29uZmlnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuY3JlYXRlRmFjdG9yeSgnJywgbWVyZ2VkQ29uZmlnKTtcclxuICAgICAgICBmYWN0b3JpZXMucHVzaChmYWN0b3J5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkICR7ZmFjdG9yaWVzLmxlbmd0aH0gZmFjdG9yaWVzIGZyb20gc291cmNlc2ApO1xyXG4gICAgcmV0dXJuIGZhY3RvcmllcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBjb25maWd1cmF0aW9uIGZhY3RvcmllcyBmcm9tIHNvdXJjZXMgd2l0aCBwcmVjZWRlbmNlIHJ1bGVzLlxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQXJyYXkgb2YgY29uZmlndXJhdGlvbiBzb3VyY2VzXHJcbiAgICogQHBhcmFtIHByZWNlZGVuY2VSdWxlIC0gUHJlY2VkZW5jZSBydWxlIHRvIGFwcGx5XHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZXMgLSBPcHRpb25hbCBsaXN0IG9mIG5hbWVzcGFjZXMgdG8gb3JnYW5pemUgY29uZmlndXJhdGlvblxyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGNvbmZpZ3VyYXRpb24gZmFjdG9yaWVzXHJcbiAgICovXHJcbiAgY3JlYXRlRmFjdG9yaWVzV2l0aFByZWNlZGVuY2UoXHJcbiAgICBzb3VyY2VzOiBDb25maWd1cmF0aW9uU291cmNlW10sXHJcbiAgICBwcmVjZWRlbmNlUnVsZTogUHJlY2VkZW5jZVJ1bGUsXHJcbiAgICBuYW1lc3BhY2VzPzogc3RyaW5nW11cclxuICApOiBDb25maWdGYWN0b3J5W10ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYENyZWF0aW5nIGZhY3RvcmllcyB3aXRoIHByZWNlZGVuY2UgcnVsZTogJHtwcmVjZWRlbmNlUnVsZX1gKTtcclxuICAgIFxyXG4gICAgLy8gVmFsaWRhdGUgc291cmNlcyBmaXJzdFxyXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMucHJlY2VkZW5jZUhhbmRsZXIudmFsaWRhdGVTb3VyY2VzKHNvdXJjZXMpO1xyXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNvdXJjZXMgcHJvdmlkZWQ6JywgdmFsaWRhdGlvbi5pc3N1ZXMpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29uZmlndXJhdGlvbiBzb3VyY2VzOiAke3ZhbGlkYXRpb24uaXNzdWVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmFjdG9yaWVzOiBDb25maWdGYWN0b3J5W10gPSBbXTtcclxuXHJcbiAgICBpZiAobmFtZXNwYWNlcyAmJiBuYW1lc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gQ3JlYXRlIG5hbWVzcGFjZWQgZmFjdG9yaWVzIHdpdGggcHJlY2VkZW5jZVxyXG4gICAgICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiBuYW1lc3BhY2VzKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlU291cmNlcyA9IHRoaXMuZXh0cmFjdE5hbWVzcGFjZVNvdXJjZXMoc291cmNlcywgbmFtZXNwYWNlKTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlU291cmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXJnZWRDb25maWcgPSB0aGlzLnByZWNlZGVuY2VIYW5kbGVyLmFwcGx5UHJlY2VkZW5jZVJ1bGVzKG5hbWVzcGFjZVNvdXJjZXMsIHByZWNlZGVuY2VSdWxlKTtcclxuICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNyZWF0ZUF3c0NvbmZpZ3VyYXRpb25GYWN0b3J5KG5hbWVzcGFjZSwgbWVyZ2VkQ29uZmlnLCBuYW1lc3BhY2VTb3VyY2VzLCBwcmVjZWRlbmNlUnVsZSk7XHJcbiAgICAgICAgICBmYWN0b3JpZXMucHVzaChmYWN0b3J5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIHNpbmdsZSBmYWN0b3J5IHdpdGggYWxsIGNvbmZpZ3VyYXRpb25cclxuICAgICAgY29uc3QgbWVyZ2VkQ29uZmlnID0gdGhpcy5wcmVjZWRlbmNlSGFuZGxlci5hcHBseVByZWNlZGVuY2VSdWxlcyhzb3VyY2VzLCBwcmVjZWRlbmNlUnVsZSk7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNyZWF0ZUF3c0NvbmZpZ3VyYXRpb25GYWN0b3J5KHVuZGVmaW5lZCwgbWVyZ2VkQ29uZmlnLCBzb3VyY2VzLCBwcmVjZWRlbmNlUnVsZSk7XHJcbiAgICAgIGZhY3Rvcmllcy5wdXNoKGZhY3RvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkICR7ZmFjdG9yaWVzLmxlbmd0aH0gZmFjdG9yaWVzIHdpdGggcHJlY2VkZW5jZWApO1xyXG4gICAgcmV0dXJuIGZhY3RvcmllcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lcmdlIGNvbmZpZ3VyYXRpb24gd2l0aCBleHBsaWNpdCBwcmVjZWRlbmNlIHJ1bGUuXHJcbiAgICogQHBhcmFtIHNvdXJjZXMgLSBDb25maWd1cmF0aW9uIHNvdXJjZXNcclxuICAgKiBAcGFyYW0gcHJlY2VkZW5jZVJ1bGUgLSBQcmVjZWRlbmNlIHJ1bGUgdG8gYXBwbHlcclxuICAgKiBAcmV0dXJucyBNZXJnZWQgY29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICovXHJcbiAgbWVyZ2VXaXRoUHJlY2VkZW5jZShcclxuICAgIHNvdXJjZXM6IENvbmZpZ3VyYXRpb25Tb3VyY2VbXSxcclxuICAgIHByZWNlZGVuY2VSdWxlOiBQcmVjZWRlbmNlUnVsZVxyXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYE1lcmdpbmcgJHtzb3VyY2VzLmxlbmd0aH0gc291cmNlcyB3aXRoIHByZWNlZGVuY2U6ICR7cHJlY2VkZW5jZVJ1bGV9YCk7XHJcbiAgICBcclxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnByZWNlZGVuY2VIYW5kbGVyLnZhbGlkYXRlU291cmNlcyhzb3VyY2VzKTtcclxuICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignSW52YWxpZCBzb3VyY2VzIHByb3ZpZGVkOicsIHZhbGlkYXRpb24uaXNzdWVzKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gc291cmNlczogJHt2YWxpZGF0aW9uLmlzc3Vlcy5qb2luKCcsICcpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnByZWNlZGVuY2VIYW5kbGVyLmFwcGx5UHJlY2VkZW5jZVJ1bGVzKHNvdXJjZXMsIHByZWNlZGVuY2VSdWxlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy5cclxuICAgKiBAcGFyYW0gY29uZmlnIC0gUmF3IGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHJldHVybnMgUHJvY2Vzc2VkIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcm9jZXNzQ29uZmlndXJhdGlvblZhbHVlcyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZykpIHtcclxuICAgICAgcHJvY2Vzc2VkW2tleV0gPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcy5cclxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcHJvY2Vzc1xyXG4gICAqIEByZXR1cm5zIFByb2Nlc3NlZCB2YWx1ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJvY2Vzc1ZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBzdHJpbmcgdmFsdWVzIHRoYXQgbWlnaHQgbmVlZCB0eXBlIGNvbnZlcnNpb25cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRTdHJpbmdWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIG5lc3RlZCBvYmplY3RzXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0NvbmZpZ3VyYXRpb25WYWx1ZXModmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBhcnJheXNcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW0gPT4gdGhpcy5wcm9jZXNzVmFsdWUoaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgc3RyaW5nIHZhbHVlcyB0byBhcHByb3ByaWF0ZSB0eXBlcy5cclxuICAgKiBAcGFyYW0gdmFsdWUgLSBTdHJpbmcgdmFsdWUgdG8gY29udmVydFxyXG4gICAqIEByZXR1cm5zIENvbnZlcnRlZCB2YWx1ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29udmVydFN0cmluZ1ZhbHVlKHZhbHVlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gSGFuZGxlIGJvb2xlYW4gc3RyaW5nc1xyXG4gICAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8vIEhhbmRsZSBudW1lcmljIHN0cmluZ3NcclxuICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBudW0gPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IHZhbHVlIDogbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvXlxcZCpcXC5cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgY29uc3QgbnVtID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gdmFsdWUgOiBudW07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIEpTT04gc3RyaW5nc1xyXG4gICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCd7JykgJiYgdmFsdWUuZW5kc1dpdGgoJ30nKSkgfHwgXHJcbiAgICAgICAgKHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXScpKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gSWYgcGFyc2luZyBmYWlscywgcmV0dXJuIGFzIHN0cmluZ1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIGlmIGEgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuXHJcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgbmFtZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc1ZhbGlkTmFtZXNwYWNlQ29uZmlnKG5hbWVzcGFjZTogc3RyaW5nLCBjb25maWc6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnICYmIFxyXG4gICAgICAgICAgIG5hbWVzcGFjZS50cmltKCkgIT09ICcnICYmXHJcbiAgICAgICAgICAgY29uZmlnICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgY29uZmlnICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgICFBcnJheS5pc0FycmF5KGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWVwIG1lcmdlIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMuXHJcbiAgICogQHBhcmFtIHRhcmdldCAtIFRhcmdldCBvYmplY3RcclxuICAgKiBAcGFyYW0gc291cmNlIC0gU291cmNlIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIE1lcmdlZCBvYmplY3RcclxuICAgKi9cclxuICBwcml2YXRlIGRlZXBNZXJnZSh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvdXJjZTogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0geyAuLi50YXJnZXQgfTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIGlmIChyZXN1bHRba2V5XSAmJiB0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlc3VsdFtrZXldKSkge1xyXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmRlZXBNZXJnZShyZXN1bHRba2V5XSwgdmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHsgLi4udmFsdWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0IGNvbmZpZ3VyYXRpb24gZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlIGZyb20gbXVsdGlwbGUgc291cmNlcy5cclxuICAgKiBAcGFyYW0gc291cmNlQ29uZmlncyAtIE1hcCBvZiBzb3VyY2UgY29uZmlndXJhdGlvbnNcclxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGFyZ2V0IG5hbWVzcGFjZVxyXG4gICAqIEByZXR1cm5zIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBuYW1lc3BhY2VcclxuICAgKi9cclxuICBwcml2YXRlIGV4dHJhY3ROYW1lc3BhY2VDb25maWcoXHJcbiAgICBzb3VyY2VDb25maWdzOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PixcclxuICAgIG5hbWVzcGFjZTogc3RyaW5nXHJcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBsZXQgbmFtZXNwYWNlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBbc291cmNlTmFtZSwgY29uZmlnXSBvZiBzb3VyY2VDb25maWdzKSB7XHJcbiAgICAgIGlmIChjb25maWdbbmFtZXNwYWNlXSkge1xyXG4gICAgICAgIG5hbWVzcGFjZUNvbmZpZyA9IHRoaXMuZGVlcE1lcmdlKG5hbWVzcGFjZUNvbmZpZywgY29uZmlnW25hbWVzcGFjZV0pO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFeHRyYWN0ZWQgJHtuYW1lc3BhY2V9IGNvbmZpZyBmcm9tIHNvdXJjZTogJHtzb3VyY2VOYW1lfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWVzcGFjZUNvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lcmdlIGNvbmZpZ3VyYXRpb24gZnJvbSBtdWx0aXBsZSBzb3VyY2VzLlxyXG4gICAqIEBwYXJhbSBzb3VyY2VDb25maWdzIC0gTWFwIG9mIHNvdXJjZSBjb25maWd1cmF0aW9uc1xyXG4gICAqIEByZXR1cm5zIE1lcmdlZCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtZXJnZVNvdXJjZUNvbmZpZ3Moc291cmNlQ29uZmlnczogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGxldCBtZXJnZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtzb3VyY2VOYW1lLCBjb25maWddIG9mIHNvdXJjZUNvbmZpZ3MpIHtcclxuICAgICAgbWVyZ2VkQ29uZmlnID0gdGhpcy5kZWVwTWVyZ2UobWVyZ2VkQ29uZmlnLCBjb25maWcpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTWVyZ2VkIGNvbmZpZyBmcm9tIHNvdXJjZTogJHtzb3VyY2VOYW1lfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtZXJnZWRDb25maWc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0IHNvdXJjZXMgZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlLlxyXG4gICAqIEBwYXJhbSBzb3VyY2VzIC0gQWxsIGNvbmZpZ3VyYXRpb24gc291cmNlc1xyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUYXJnZXQgbmFtZXNwYWNlXHJcbiAgICogQHJldHVybnMgU291cmNlcyBmaWx0ZXJlZCBmb3IgdGhlIG5hbWVzcGFjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZXh0cmFjdE5hbWVzcGFjZVNvdXJjZXMoc291cmNlczogQ29uZmlndXJhdGlvblNvdXJjZVtdLCBuYW1lc3BhY2U6IHN0cmluZyk6IENvbmZpZ3VyYXRpb25Tb3VyY2VbXSB7XHJcbiAgICBjb25zdCBuYW1lc3BhY2VTb3VyY2VzOiBDb25maWd1cmF0aW9uU291cmNlW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgIGlmIChzb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgfHwgc291cmNlLmRhdGFbbmFtZXNwYWNlXSkge1xyXG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZURhdGEgPSBzb3VyY2UubmFtZXNwYWNlID09PSBuYW1lc3BhY2UgPyBzb3VyY2UuZGF0YSA6IHNvdXJjZS5kYXRhW25hbWVzcGFjZV07XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZURhdGEgJiYgdHlwZW9mIG5hbWVzcGFjZURhdGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBuYW1lc3BhY2VTb3VyY2VzLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5zb3VyY2UsXHJcbiAgICAgICAgICAgIGRhdGE6IG5hbWVzcGFjZURhdGEsXHJcbiAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmFtZXNwYWNlU291cmNlcztcclxuICB9XHJcbn0iXX0=
|
|
@@ -17,4 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
// Integration providers exports
|
|
18
18
|
__exportStar(require("./configuration-factory.provider"), exports);
|
|
19
19
|
__exportStar(require("./aws-configuration-loader.service"), exports);
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvaW50ZWdyYXRpb24vcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnQ0FBZ0M7QUFDaEMsbUVBQWlEO0FBQ2pELHFFQUFtRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEludGVncmF0aW9uIHByb3ZpZGVycyBleHBvcnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlndXJhdGlvbi1mYWN0b3J5LnByb3ZpZGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9hd3MtY29uZmlndXJhdGlvbi1sb2FkZXIuc2VydmljZSc7Il19
|