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