aws-cdk 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +276 -0
- package/LICENSE +202 -0
- package/NOTICE +16 -0
- package/README.md +1274 -0
- package/THIRD_PARTY_LICENSES +26821 -0
- package/bin/cdk +6 -0
- package/build-info.json +4 -0
- package/db.json.gz +0 -0
- package/generate.sh +25 -0
- package/images/garbage-collection.png +0 -0
- package/lib/api/aws-auth/account-cache.d.ts +39 -0
- package/lib/api/aws-auth/account-cache.js +102 -0
- package/lib/api/aws-auth/awscli-compatible.d.ts +42 -0
- package/lib/api/aws-auth/awscli-compatible.js +264 -0
- package/lib/api/aws-auth/cached.d.ts +11 -0
- package/lib/api/aws-auth/cached.js +26 -0
- package/lib/api/aws-auth/credential-plugins.d.ts +36 -0
- package/lib/api/aws-auth/credential-plugins.js +153 -0
- package/lib/api/aws-auth/index.d.ts +3 -0
- package/lib/api/aws-auth/index.js +20 -0
- package/lib/api/aws-auth/provider-caching.d.ts +13 -0
- package/lib/api/aws-auth/provider-caching.js +24 -0
- package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
- package/lib/api/aws-auth/sdk-logger.js +130 -0
- package/lib/api/aws-auth/sdk-provider.d.ts +207 -0
- package/lib/api/aws-auth/sdk-provider.js +359 -0
- package/lib/api/aws-auth/sdk.d.ts +223 -0
- package/lib/api/aws-auth/sdk.js +366 -0
- package/lib/api/aws-auth/tracing.d.ts +11 -0
- package/lib/api/aws-auth/tracing.js +61 -0
- package/lib/api/aws-auth/user-agent.d.ts +7 -0
- package/lib/api/aws-auth/user-agent.js +21 -0
- package/lib/api/aws-auth/util.d.ts +6 -0
- package/lib/api/aws-auth/util.js +23 -0
- package/lib/api/bootstrap/bootstrap-environment.d.ts +33 -0
- package/lib/api/bootstrap/bootstrap-environment.js +322 -0
- package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
- package/lib/api/bootstrap/bootstrap-props.js +14 -0
- package/lib/api/bootstrap/bootstrap-template.yaml +692 -0
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +37 -0
- package/lib/api/bootstrap/deploy-bootstrap.js +143 -0
- package/lib/api/bootstrap/index.d.ts +2 -0
- package/lib/api/bootstrap/index.js +19 -0
- package/lib/api/bootstrap/legacy-template.d.ts +2 -0
- package/lib/api/bootstrap/legacy-template.js +82 -0
- package/lib/api/context.d.ts +40 -0
- package/lib/api/context.js +82 -0
- package/lib/api/cxapp/cloud-assembly.d.ts +150 -0
- package/lib/api/cxapp/cloud-assembly.js +305 -0
- package/lib/api/cxapp/cloud-executable.d.ts +44 -0
- package/lib/api/cxapp/cloud-executable.js +90 -0
- package/lib/api/cxapp/environments.d.ts +9 -0
- package/lib/api/cxapp/environments.js +66 -0
- package/lib/api/cxapp/exec.d.ts +56 -0
- package/lib/api/cxapp/exec.js +275 -0
- package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
- package/lib/api/deployments/asset-manifest-builder.js +35 -0
- package/lib/api/deployments/asset-publishing.d.ts +77 -0
- package/lib/api/deployments/asset-publishing.js +163 -0
- package/lib/api/deployments/assets.d.ts +10 -0
- package/lib/api/deployments/assets.js +111 -0
- package/lib/api/deployments/checks.d.ts +8 -0
- package/lib/api/deployments/checks.js +73 -0
- package/lib/api/deployments/cloudformation.d.ts +235 -0
- package/lib/api/deployments/cloudformation.js +598 -0
- package/lib/api/deployments/deploy-stack.d.ts +177 -0
- package/lib/api/deployments/deploy-stack.js +484 -0
- package/lib/api/deployments/deployment-method.d.ts +24 -0
- package/lib/api/deployments/deployment-method.js +3 -0
- package/lib/api/deployments/deployment-result.d.ts +21 -0
- package/lib/api/deployments/deployment-result.js +10 -0
- package/lib/api/deployments/deployments.d.ts +340 -0
- package/lib/api/deployments/deployments.js +369 -0
- package/lib/api/deployments/hotswap-deployments.d.ts +14 -0
- package/lib/api/deployments/hotswap-deployments.js +357 -0
- package/lib/api/deployments/index.d.ts +6 -0
- package/lib/api/deployments/index.js +23 -0
- package/lib/api/deployments/nested-stack-helpers.d.ts +25 -0
- package/lib/api/deployments/nested-stack-helpers.js +88 -0
- package/lib/api/environment-access.d.ts +138 -0
- package/lib/api/environment-access.js +203 -0
- package/lib/api/environment-resources.d.ts +73 -0
- package/lib/api/environment-resources.js +208 -0
- package/lib/api/evaluate-cloudformation-template.d.ts +84 -0
- package/lib/api/evaluate-cloudformation-template.js +443 -0
- package/lib/api/garbage-collection/garbage-collector.d.ts +152 -0
- package/lib/api/garbage-collection/garbage-collector.js +607 -0
- package/lib/api/garbage-collection/progress-printer.d.ts +21 -0
- package/lib/api/garbage-collection/progress-printer.js +69 -0
- package/lib/api/garbage-collection/stack-refresh.d.ts +44 -0
- package/lib/api/garbage-collection/stack-refresh.js +154 -0
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +157 -0
- package/lib/api/hotswap/code-build-projects.d.ts +3 -0
- package/lib/api/hotswap/code-build-projects.js +55 -0
- package/lib/api/hotswap/common.d.ts +126 -0
- package/lib/api/hotswap/common.js +170 -0
- package/lib/api/hotswap/ecs-services.d.ts +3 -0
- package/lib/api/hotswap/ecs-services.js +140 -0
- package/lib/api/hotswap/lambda-functions.d.ts +3 -0
- package/lib/api/hotswap/lambda-functions.js +309 -0
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +9 -0
- package/lib/api/hotswap/s3-bucket-deployments.js +112 -0
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -0
- package/lib/api/hotswap/stepfunctions-state-machines.js +42 -0
- package/lib/api/index.d.ts +5 -0
- package/lib/api/index.js +22 -0
- package/lib/api/logs/find-cloudwatch-logs.d.ts +24 -0
- package/lib/api/logs/find-cloudwatch-logs.js +97 -0
- package/lib/api/logs/logs-monitor.d.ts +53 -0
- package/lib/api/logs/logs-monitor.js +169 -0
- package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
- package/lib/api/plugin/context-provider-plugin.js +7 -0
- package/lib/api/plugin/index.d.ts +3 -0
- package/lib/api/plugin/index.js +20 -0
- package/lib/api/plugin/mode.d.ts +4 -0
- package/lib/api/plugin/mode.js +9 -0
- package/lib/api/plugin/plugin.d.ts +63 -0
- package/lib/api/plugin/plugin.js +106 -0
- package/lib/api/settings.d.ts +29 -0
- package/lib/api/settings.js +141 -0
- package/lib/api/tags.d.ts +9 -0
- package/lib/api/tags.js +10 -0
- package/lib/api/toolkit-info.d.ts +51 -0
- package/lib/api/toolkit-info.js +156 -0
- package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +237 -0
- package/lib/api/util/cloudformation/stack-activity-monitor.js +550 -0
- package/lib/api/util/cloudformation/stack-event-poller.d.ts +63 -0
- package/lib/api/util/cloudformation/stack-event-poller.js +129 -0
- package/lib/api/util/cloudformation/stack-status.d.ts +42 -0
- package/lib/api/util/cloudformation/stack-status.js +88 -0
- package/lib/api/util/display.d.ts +13 -0
- package/lib/api/util/display.js +80 -0
- package/lib/api/util/placeholders.d.ts +10 -0
- package/lib/api/util/placeholders.js +24 -0
- package/lib/api/util/rwlock.d.ts +65 -0
- package/lib/api/util/rwlock.js +179 -0
- package/lib/api/util/string-manipulation.d.ts +10 -0
- package/lib/api/util/string-manipulation.js +33 -0
- package/lib/api/util/template-body-parameter.d.ts +21 -0
- package/lib/api/util/template-body-parameter.js +104 -0
- package/lib/cli/cdk-toolkit.d.ts +594 -0
- package/lib/cli/cdk-toolkit.js +1019 -0
- package/lib/cli/cli-config.d.ts +10 -0
- package/lib/cli/cli-config.js +406 -0
- package/lib/cli/cli.d.ts +4 -0
- package/lib/cli/cli.js +538 -0
- package/lib/cli/convert-to-user-input.d.ts +3 -0
- package/lib/cli/convert-to-user-input.js +434 -0
- package/lib/cli/parse-command-line-arguments.d.ts +1 -0
- package/lib/cli/parse-command-line-arguments.js +806 -0
- package/lib/cli/platform-warnings.d.ts +2 -0
- package/lib/cli/platform-warnings.js +45 -0
- package/lib/cli/user-configuration.d.ts +90 -0
- package/lib/cli/user-configuration.js +272 -0
- package/lib/cli/user-input.d.ts +1163 -0
- package/lib/cli/user-input.js +3 -0
- package/lib/cli/util/console-formatters.d.ts +18 -0
- package/lib/cli/util/console-formatters.js +42 -0
- package/lib/cli/util/npm.d.ts +1 -0
- package/lib/cli/util/npm.js +22 -0
- package/lib/cli/util/yargs-helpers.d.ts +22 -0
- package/lib/cli/util/yargs-helpers.js +49 -0
- package/lib/cli/version.d.ts +13 -0
- package/lib/cli/version.js +120 -0
- package/lib/commands/context.d.ts +35 -0
- package/lib/commands/context.js +156 -0
- package/lib/commands/docs.d.ts +13 -0
- package/lib/commands/docs.js +32 -0
- package/lib/commands/doctor.d.ts +1 -0
- package/lib/commands/doctor.js +69 -0
- package/lib/commands/migrate.d.ts +327 -0
- package/lib/commands/migrate.js +804 -0
- package/lib/context-providers/ami.d.ts +11 -0
- package/lib/context-providers/ami.js +50 -0
- package/lib/context-providers/availability-zones.d.ts +11 -0
- package/lib/context-providers/availability-zones.js +27 -0
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +11 -0
- package/lib/context-providers/endpoint-service-availability-zones.js +33 -0
- package/lib/context-providers/hosted-zones.d.ts +10 -0
- package/lib/context-providers/hosted-zones.js +67 -0
- package/lib/context-providers/index.d.ts +30 -0
- package/lib/context-providers/index.js +109 -0
- package/lib/context-providers/keys.d.ts +11 -0
- package/lib/context-providers/keys.js +52 -0
- package/lib/context-providers/load-balancers.d.ts +20 -0
- package/lib/context-providers/load-balancers.js +159 -0
- package/lib/context-providers/security-groups.d.ts +9 -0
- package/lib/context-providers/security-groups.js +70 -0
- package/lib/context-providers/ssm-parameters.d.ts +23 -0
- package/lib/context-providers/ssm-parameters.js +59 -0
- package/lib/context-providers/vpcs.d.ts +11 -0
- package/lib/context-providers/vpcs.js +288 -0
- package/lib/diff.d.ts +28 -0
- package/lib/diff.js +165 -0
- package/lib/import.d.ts +182 -0
- package/lib/import.js +335 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +348304 -0
- package/lib/index_bg.wasm +0 -0
- package/lib/init-hooks.d.ts +40 -0
- package/lib/init-hooks.js +64 -0
- package/lib/init-templates/.init-version.json +1 -0
- package/lib/init-templates/.no-packagejson-validator +0 -0
- package/lib/init-templates/.recommended-feature-flags.json +68 -0
- package/lib/init-templates/LICENSE +16 -0
- package/lib/init-templates/app/csharp/.template.gitignore +342 -0
- package/lib/init-templates/app/csharp/README.md +14 -0
- package/lib/init-templates/app/csharp/cdk.template.json +15 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +20 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +13 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +1 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs +44 -0
- package/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/app/fsharp/.template.gitignore +342 -0
- package/lib/init-templates/app/fsharp/README.md +18 -0
- package/lib/init-templates/app/fsharp/cdk.template.json +14 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +25 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +8 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs +11 -0
- package/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/app/go/%name%.template.go +70 -0
- package/lib/init-templates/app/go/%name%_test.template.go +26 -0
- package/lib/init-templates/app/go/.template.gitignore +19 -0
- package/lib/init-templates/app/go/README.md +12 -0
- package/lib/init-templates/app/go/cdk.template.json +13 -0
- package/lib/init-templates/app/go/go.template.mod +9 -0
- package/lib/init-templates/app/info.json +4 -0
- package/lib/init-templates/app/java/.template.gitignore +13 -0
- package/lib/init-templates/app/java/README.md +18 -0
- package/lib/init-templates/app/java/cdk.json +13 -0
- package/lib/init-templates/app/java/pom.xml +60 -0
- package/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +42 -0
- package/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +24 -0
- package/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java +26 -0
- package/lib/init-templates/app/javascript/.template.gitignore +5 -0
- package/lib/init-templates/app/javascript/.template.npmignore +3 -0
- package/lib/init-templates/app/javascript/README.md +12 -0
- package/lib/init-templates/app/javascript/bin/%name%.template.js +21 -0
- package/lib/init-templates/app/javascript/cdk.template.json +15 -0
- package/lib/init-templates/app/javascript/jest.config.js +3 -0
- package/lib/init-templates/app/javascript/lib/%name%-stack.template.js +23 -0
- package/lib/init-templates/app/javascript/package.json +20 -0
- package/lib/init-templates/app/javascript/test/%name%.test.template.js +17 -0
- package/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +19 -0
- package/lib/init-templates/app/python/%name.PythonModule%/__init__.py +0 -0
- package/lib/init-templates/app/python/.template.gitignore +10 -0
- package/lib/init-templates/app/python/README.template.md +58 -0
- package/lib/init-templates/app/python/app.template.py +28 -0
- package/lib/init-templates/app/python/cdk.template.json +15 -0
- package/lib/init-templates/app/python/requirements-dev.txt +1 -0
- package/lib/init-templates/app/python/requirements.txt +2 -0
- package/lib/init-templates/app/python/source.bat +13 -0
- package/lib/init-templates/app/python/tests/__init__.py +0 -0
- package/lib/init-templates/app/python/tests/unit/__init__.py +0 -0
- package/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py +15 -0
- package/lib/init-templates/app/typescript/.template.gitignore +8 -0
- package/lib/init-templates/app/typescript/.template.npmignore +6 -0
- package/lib/init-templates/app/typescript/README.md +14 -0
- package/lib/init-templates/app/typescript/bin/%name%.template.ts +20 -0
- package/lib/init-templates/app/typescript/cdk.template.json +17 -0
- package/lib/init-templates/app/typescript/jest.config.js +8 -0
- package/lib/init-templates/app/typescript/lib/%name%-stack.template.ts +16 -0
- package/lib/init-templates/app/typescript/package.json +26 -0
- package/lib/init-templates/app/typescript/test/%name%.test.template.ts +17 -0
- package/lib/init-templates/app/typescript/tsconfig.json +31 -0
- package/lib/init-templates/lib/info.json +4 -0
- package/lib/init-templates/lib/typescript/.template.gitignore +8 -0
- package/lib/init-templates/lib/typescript/.template.npmignore +6 -0
- package/lib/init-templates/lib/typescript/README.template.md +12 -0
- package/lib/init-templates/lib/typescript/jest.config.js +8 -0
- package/lib/init-templates/lib/typescript/lib/index.template.ts +21 -0
- package/lib/init-templates/lib/typescript/package.json +24 -0
- package/lib/init-templates/lib/typescript/test/%name%.test.template.ts +18 -0
- package/lib/init-templates/lib/typescript/tsconfig.json +31 -0
- package/lib/init-templates/sample-app/csharp/.template.gitignore +342 -0
- package/lib/init-templates/sample-app/csharp/README.template.md +19 -0
- package/lib/init-templates/sample-app/csharp/cdk.template.json +15 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +20 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +24 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +1 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs +15 -0
- package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/sample-app/fsharp/.template.gitignore +342 -0
- package/lib/init-templates/sample-app/fsharp/README.template.md +20 -0
- package/lib/init-templates/sample-app/fsharp/cdk.template.json +14 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +25 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +14 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs +11 -0
- package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln +18 -0
- package/lib/init-templates/sample-app/go/%name%.template.go +73 -0
- package/lib/init-templates/sample-app/go/%name%_test.template.go +25 -0
- package/lib/init-templates/sample-app/go/.template.gitignore +19 -0
- package/lib/init-templates/sample-app/go/README.md +12 -0
- package/lib/init-templates/sample-app/go/cdk.template.json +13 -0
- package/lib/init-templates/sample-app/go/go.template.mod +9 -0
- package/lib/init-templates/sample-app/info.json +4 -0
- package/lib/init-templates/sample-app/java/.template.gitignore +13 -0
- package/lib/init-templates/sample-app/java/README.template.md +19 -0
- package/lib/init-templates/sample-app/java/cdk.json +13 -0
- package/lib/init-templates/sample-app/java/pom.xml +55 -0
- package/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +13 -0
- package/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +29 -0
- package/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java +27 -0
- package/lib/init-templates/sample-app/javascript/.template.gitignore +5 -0
- package/lib/init-templates/sample-app/javascript/.template.npmignore +3 -0
- package/lib/init-templates/sample-app/javascript/README.template.md +13 -0
- package/lib/init-templates/sample-app/javascript/bin/%name%.template.js +6 -0
- package/lib/init-templates/sample-app/javascript/cdk.template.json +15 -0
- package/lib/init-templates/sample-app/javascript/jest.config.js +3 -0
- package/lib/init-templates/sample-app/javascript/lib/%name%-stack.template.js +25 -0
- package/lib/init-templates/sample-app/javascript/package.json +20 -0
- package/lib/init-templates/sample-app/javascript/test/%name%.test.template.js +16 -0
- package/lib/init-templates/sample-app/javascript/tsconfig.json +34 -0
- package/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +26 -0
- package/lib/init-templates/sample-app/python/%name.PythonModule%/__init__.py +0 -0
- package/lib/init-templates/sample-app/python/.template.gitignore +22 -0
- package/lib/init-templates/sample-app/python/README.template.md +65 -0
- package/lib/init-templates/sample-app/python/app.template.py +11 -0
- package/lib/init-templates/sample-app/python/cdk.template.json +15 -0
- package/lib/init-templates/sample-app/python/requirements-dev.txt +1 -0
- package/lib/init-templates/sample-app/python/requirements.txt +2 -0
- package/lib/init-templates/sample-app/python/source.bat +13 -0
- package/lib/init-templates/sample-app/python/tests/__init__.py +0 -0
- package/lib/init-templates/sample-app/python/tests/unit/__init__.py +0 -0
- package/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py +21 -0
- package/lib/init-templates/sample-app/typescript/.template.gitignore +8 -0
- package/lib/init-templates/sample-app/typescript/.template.npmignore +6 -0
- package/lib/init-templates/sample-app/typescript/README.template.md +15 -0
- package/lib/init-templates/sample-app/typescript/bin/%name%.template.ts +6 -0
- package/lib/init-templates/sample-app/typescript/cdk.template.json +17 -0
- package/lib/init-templates/sample-app/typescript/jest.config.js +8 -0
- package/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts +19 -0
- package/lib/init-templates/sample-app/typescript/package.json +26 -0
- package/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts +17 -0
- package/lib/init-templates/sample-app/typescript/tsconfig.json +31 -0
- package/lib/init.d.ts +52 -0
- package/lib/init.js +430 -0
- package/lib/legacy-exports-source.d.ts +27 -0
- package/lib/legacy-exports-source.js +88 -0
- package/lib/legacy-exports.d.ts +10 -0
- package/lib/legacy-exports.js +28 -0
- package/lib/legacy-logging-source.d.ts +32 -0
- package/lib/legacy-logging-source.js +107 -0
- package/lib/list-stacks.d.ts +22 -0
- package/lib/list-stacks.js +23 -0
- package/lib/logging.d.ts +109 -0
- package/lib/logging.js +159 -0
- package/lib/migrator.d.ts +25 -0
- package/lib/migrator.js +67 -0
- package/lib/notices.d.ts +156 -0
- package/lib/notices.js +373 -0
- package/lib/os.d.ts +7 -0
- package/lib/os.js +92 -0
- package/lib/serialize.d.ts +27 -0
- package/lib/serialize.js +86 -0
- package/lib/toolkit/cli-io-host.d.ts +208 -0
- package/lib/toolkit/cli-io-host.js +282 -0
- package/lib/toolkit/error.d.ts +44 -0
- package/lib/toolkit/error.js +78 -0
- package/lib/tree.d.ts +31 -0
- package/lib/tree.js +40 -0
- package/lib/util/archive.d.ts +1 -0
- package/lib/util/archive.js +86 -0
- package/lib/util/arrays.d.ts +14 -0
- package/lib/util/arrays.js +36 -0
- package/lib/util/bool.d.ts +7 -0
- package/lib/util/bool.js +13 -0
- package/lib/util/bytes.d.ts +8 -0
- package/lib/util/bytes.js +21 -0
- package/lib/util/content-hash.d.ts +5 -0
- package/lib/util/content-hash.js +43 -0
- package/lib/util/directories.d.ts +23 -0
- package/lib/util/directories.js +57 -0
- package/lib/util/error.d.ts +9 -0
- package/lib/util/error.js +22 -0
- package/lib/util/index.d.ts +5 -0
- package/lib/util/index.js +22 -0
- package/lib/util/objects.d.ts +52 -0
- package/lib/util/objects.js +183 -0
- package/lib/util/parallel.d.ts +6 -0
- package/lib/util/parallel.js +44 -0
- package/lib/util/tables.d.ts +1 -0
- package/lib/util/tables.js +10 -0
- package/lib/util/type-brands.d.ts +39 -0
- package/lib/util/type-brands.js +38 -0
- package/lib/util/types.d.ts +27 -0
- package/lib/util/types.js +25 -0
- package/lib/util/validate-notification-arn.d.ts +4 -0
- package/lib/util/validate-notification-arn.js +10 -0
- package/lib/util/version-range.d.ts +2 -0
- package/lib/util/version-range.js +36 -0
- package/lib/util/work-graph-builder.d.ts +32 -0
- package/lib/util/work-graph-builder.js +167 -0
- package/lib/util/work-graph-types.d.ts +50 -0
- package/lib/util/work-graph-types.js +14 -0
- package/lib/util/work-graph.d.ts +70 -0
- package/lib/util/work-graph.js +344 -0
- package/lib/util/yaml-cfn.d.ts +15 -0
- package/lib/util/yaml-cfn.js +56 -0
- package/package.json +197 -0
- package/scripts/user-input-gen +2 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Deployments = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const cdk_assets = require("cdk-assets");
|
|
6
|
+
const chalk = require("chalk");
|
|
7
|
+
const asset_manifest_builder_1 = require("./asset-manifest-builder");
|
|
8
|
+
const asset_publishing_1 = require("./asset-publishing");
|
|
9
|
+
const checks_1 = require("./checks");
|
|
10
|
+
const cloudformation_1 = require("./cloudformation");
|
|
11
|
+
const deploy_stack_1 = require("./deploy-stack");
|
|
12
|
+
const nested_stack_helpers_1 = require("./nested-stack-helpers");
|
|
13
|
+
const logging_1 = require("../../logging");
|
|
14
|
+
const error_1 = require("../../toolkit/error");
|
|
15
|
+
const error_2 = require("../../util/error");
|
|
16
|
+
const environment_access_1 = require("../environment-access");
|
|
17
|
+
const toolkit_info_1 = require("../toolkit-info");
|
|
18
|
+
const stack_activity_monitor_1 = require("../util/cloudformation/stack-activity-monitor");
|
|
19
|
+
const stack_event_poller_1 = require("../util/cloudformation/stack-event-poller");
|
|
20
|
+
const stack_status_1 = require("../util/cloudformation/stack-status");
|
|
21
|
+
const template_body_parameter_1 = require("../util/template-body-parameter");
|
|
22
|
+
const BOOTSTRAP_STACK_VERSION_FOR_ROLLBACK = 23;
|
|
23
|
+
/**
|
|
24
|
+
* Scope for a single set of deployments from a set of Cloud Assembly Artifacts
|
|
25
|
+
*
|
|
26
|
+
* Manages lookup of SDKs, Bootstrap stacks, etc.
|
|
27
|
+
*/
|
|
28
|
+
class Deployments {
|
|
29
|
+
constructor(props) {
|
|
30
|
+
var _a;
|
|
31
|
+
this.props = props;
|
|
32
|
+
this.publisherCache = new Map();
|
|
33
|
+
this.assetSdkProvider = props.sdkProvider;
|
|
34
|
+
this.deployStackSdkProvider = props.sdkProvider;
|
|
35
|
+
this.envs = new environment_access_1.EnvironmentAccess(props.sdkProvider, (_a = props.toolkitStackName) !== null && _a !== void 0 ? _a : toolkit_info_1.DEFAULT_TOOLKIT_STACK_NAME);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolves the environment for a stack.
|
|
39
|
+
*/
|
|
40
|
+
async resolveEnvironment(stack) {
|
|
41
|
+
return this.envs.resolveStackEnvironment(stack);
|
|
42
|
+
}
|
|
43
|
+
async readCurrentTemplateWithNestedStacks(rootStackArtifact, retrieveProcessedTemplate = false) {
|
|
44
|
+
const env = await this.envs.accessStackForLookupBestEffort(rootStackArtifact);
|
|
45
|
+
return (0, nested_stack_helpers_1.loadCurrentTemplateWithNestedStacks)(rootStackArtifact, env.sdk, retrieveProcessedTemplate);
|
|
46
|
+
}
|
|
47
|
+
async readCurrentTemplate(stackArtifact) {
|
|
48
|
+
(0, logging_1.debug)(`Reading existing template for stack ${stackArtifact.displayName}.`);
|
|
49
|
+
const env = await this.envs.accessStackForLookupBestEffort(stackArtifact);
|
|
50
|
+
return (0, nested_stack_helpers_1.loadCurrentTemplate)(stackArtifact, env.sdk);
|
|
51
|
+
}
|
|
52
|
+
async resourceIdentifierSummaries(stackArtifact) {
|
|
53
|
+
var _a;
|
|
54
|
+
(0, logging_1.debug)(`Retrieving template summary for stack ${stackArtifact.displayName}.`);
|
|
55
|
+
// Currently, needs to use `deploy-role` since it may need to read templates in the staging
|
|
56
|
+
// bucket which have been encrypted with a KMS key (and lookup-role may not read encrypted things)
|
|
57
|
+
const env = await this.envs.accessStackForReadOnlyStackOperations(stackArtifact);
|
|
58
|
+
const cfn = env.sdk.cloudFormation();
|
|
59
|
+
await (0, cloudformation_1.uploadStackTemplateAssets)(stackArtifact, this);
|
|
60
|
+
// Upload the template, if necessary, before passing it to CFN
|
|
61
|
+
const builder = new asset_manifest_builder_1.AssetManifestBuilder();
|
|
62
|
+
const cfnParam = await (0, template_body_parameter_1.makeBodyParameter)(stackArtifact, env.resolvedEnvironment, builder, env.resources);
|
|
63
|
+
// If the `makeBodyParameter` before this added assets, make sure to publish them before
|
|
64
|
+
// calling the API.
|
|
65
|
+
const addedAssets = builder.toManifest(stackArtifact.assembly.directory);
|
|
66
|
+
for (const entry of addedAssets.entries) {
|
|
67
|
+
await this.buildSingleAsset('no-version-validation', addedAssets, entry, {
|
|
68
|
+
stack: stackArtifact,
|
|
69
|
+
});
|
|
70
|
+
await this.publishSingleAsset(addedAssets, entry, {
|
|
71
|
+
stack: stackArtifact,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const response = await cfn.getTemplateSummary(cfnParam);
|
|
75
|
+
if (!response.ResourceIdentifierSummaries) {
|
|
76
|
+
(0, logging_1.debug)('GetTemplateSummary API call did not return "ResourceIdentifierSummaries"');
|
|
77
|
+
}
|
|
78
|
+
return (_a = response.ResourceIdentifierSummaries) !== null && _a !== void 0 ? _a : [];
|
|
79
|
+
}
|
|
80
|
+
async deployStack(options) {
|
|
81
|
+
var _a;
|
|
82
|
+
let deploymentMethod = options.deploymentMethod;
|
|
83
|
+
if (options.changeSetName || options.execute !== undefined) {
|
|
84
|
+
if (deploymentMethod) {
|
|
85
|
+
throw new error_1.ToolkitError("You cannot supply both 'deploymentMethod' and 'changeSetName/execute'. Supply one or the other.");
|
|
86
|
+
}
|
|
87
|
+
deploymentMethod = {
|
|
88
|
+
method: 'change-set',
|
|
89
|
+
changeSetName: options.changeSetName,
|
|
90
|
+
execute: options.execute,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const env = await this.envs.accessStackForMutableStackOperations(options.stack);
|
|
94
|
+
// Do a verification of the bootstrap stack version
|
|
95
|
+
await this.validateBootstrapStackVersion(options.stack.stackName, options.stack.requiresBootstrapStackVersion, options.stack.bootstrapStackVersionSsmParameter, env.resources);
|
|
96
|
+
const executionRoleArn = await env.replacePlaceholders((_a = options.roleArn) !== null && _a !== void 0 ? _a : options.stack.cloudFormationExecutionRoleArn);
|
|
97
|
+
return (0, deploy_stack_1.deployStack)({
|
|
98
|
+
stack: options.stack,
|
|
99
|
+
resolvedEnvironment: env.resolvedEnvironment,
|
|
100
|
+
deployName: options.deployName,
|
|
101
|
+
notificationArns: options.notificationArns,
|
|
102
|
+
quiet: options.quiet,
|
|
103
|
+
sdk: env.sdk,
|
|
104
|
+
sdkProvider: this.deployStackSdkProvider,
|
|
105
|
+
roleArn: executionRoleArn,
|
|
106
|
+
reuseAssets: options.reuseAssets,
|
|
107
|
+
envResources: env.resources,
|
|
108
|
+
tags: options.tags,
|
|
109
|
+
deploymentMethod,
|
|
110
|
+
force: options.force,
|
|
111
|
+
parameters: options.parameters,
|
|
112
|
+
usePreviousParameters: options.usePreviousParameters,
|
|
113
|
+
progress: options.progress,
|
|
114
|
+
ci: options.ci,
|
|
115
|
+
rollback: options.rollback,
|
|
116
|
+
hotswap: options.hotswap,
|
|
117
|
+
hotswapPropertyOverrides: options.hotswapPropertyOverrides,
|
|
118
|
+
extraUserAgent: options.extraUserAgent,
|
|
119
|
+
resourcesToImport: options.resourcesToImport,
|
|
120
|
+
overrideTemplate: options.overrideTemplate,
|
|
121
|
+
assetParallelism: options.assetParallelism,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
async rollbackStack(options) {
|
|
125
|
+
var _a, _b, _c, _d;
|
|
126
|
+
let resourcesToSkip = (_a = options.orphanLogicalIds) !== null && _a !== void 0 ? _a : [];
|
|
127
|
+
if (options.force && resourcesToSkip.length > 0) {
|
|
128
|
+
throw new error_1.ToolkitError('Cannot combine --force with --orphan');
|
|
129
|
+
}
|
|
130
|
+
const env = await this.envs.accessStackForMutableStackOperations(options.stack);
|
|
131
|
+
if ((_b = options.validateBootstrapStackVersion) !== null && _b !== void 0 ? _b : true) {
|
|
132
|
+
// Do a verification of the bootstrap stack version
|
|
133
|
+
await this.validateBootstrapStackVersion(options.stack.stackName, BOOTSTRAP_STACK_VERSION_FOR_ROLLBACK, options.stack.bootstrapStackVersionSsmParameter, env.resources);
|
|
134
|
+
}
|
|
135
|
+
const cfn = env.sdk.cloudFormation();
|
|
136
|
+
const deployName = options.stack.stackName;
|
|
137
|
+
// We loop in case of `--force` and the stack ends up in `CONTINUE_UPDATE_ROLLBACK`.
|
|
138
|
+
let maxLoops = 10;
|
|
139
|
+
while (maxLoops--) {
|
|
140
|
+
let cloudFormationStack = await cloudformation_1.CloudFormationStack.lookup(cfn, deployName);
|
|
141
|
+
const executionRoleArn = await env.replacePlaceholders((_c = options.roleArn) !== null && _c !== void 0 ? _c : options.stack.cloudFormationExecutionRoleArn);
|
|
142
|
+
switch (cloudFormationStack.stackStatus.rollbackChoice) {
|
|
143
|
+
case stack_status_1.RollbackChoice.NONE:
|
|
144
|
+
(0, logging_1.warning)(`Stack ${deployName} does not need a rollback: ${cloudFormationStack.stackStatus}`);
|
|
145
|
+
return { notInRollbackableState: true };
|
|
146
|
+
case stack_status_1.RollbackChoice.START_ROLLBACK:
|
|
147
|
+
(0, logging_1.debug)(`Initiating rollback of stack ${deployName}`);
|
|
148
|
+
await cfn.rollbackStack({
|
|
149
|
+
StackName: deployName,
|
|
150
|
+
RoleARN: executionRoleArn,
|
|
151
|
+
ClientRequestToken: (0, crypto_1.randomUUID)(),
|
|
152
|
+
// Enabling this is just the better overall default, the only reason it isn't the upstream default is backwards compatibility
|
|
153
|
+
RetainExceptOnCreate: true,
|
|
154
|
+
});
|
|
155
|
+
break;
|
|
156
|
+
case stack_status_1.RollbackChoice.CONTINUE_UPDATE_ROLLBACK:
|
|
157
|
+
if (options.force) {
|
|
158
|
+
// Find the failed resources from the deployment and automatically skip them
|
|
159
|
+
// (Using deployment log because we definitely have `DescribeStackEvents` permissions, and we might not have
|
|
160
|
+
// `DescribeStackResources` permissions).
|
|
161
|
+
const poller = new stack_event_poller_1.StackEventPoller(cfn, {
|
|
162
|
+
stackName: deployName,
|
|
163
|
+
stackStatuses: ['ROLLBACK_IN_PROGRESS', 'UPDATE_ROLLBACK_IN_PROGRESS'],
|
|
164
|
+
});
|
|
165
|
+
await poller.poll();
|
|
166
|
+
resourcesToSkip = poller.resourceErrors
|
|
167
|
+
.filter((r) => !r.isStackEvent && r.parentStackLogicalIds.length === 0)
|
|
168
|
+
.map((r) => { var _a; return (_a = r.event.LogicalResourceId) !== null && _a !== void 0 ? _a : ''; });
|
|
169
|
+
}
|
|
170
|
+
const skipDescription = resourcesToSkip.length > 0 ? ` (orphaning: ${resourcesToSkip.join(', ')})` : '';
|
|
171
|
+
(0, logging_1.warning)(`Continuing rollback of stack ${deployName}${skipDescription}`);
|
|
172
|
+
await cfn.continueUpdateRollback({
|
|
173
|
+
StackName: deployName,
|
|
174
|
+
ClientRequestToken: (0, crypto_1.randomUUID)(),
|
|
175
|
+
RoleARN: executionRoleArn,
|
|
176
|
+
ResourcesToSkip: resourcesToSkip,
|
|
177
|
+
});
|
|
178
|
+
break;
|
|
179
|
+
case stack_status_1.RollbackChoice.ROLLBACK_FAILED:
|
|
180
|
+
(0, logging_1.warning)(`Stack ${deployName} failed creation and rollback. This state cannot be rolled back. You can recreate this stack by running 'cdk deploy'.`);
|
|
181
|
+
return { notInRollbackableState: true };
|
|
182
|
+
default:
|
|
183
|
+
throw new error_1.ToolkitError(`Unexpected rollback choice: ${cloudFormationStack.stackStatus.rollbackChoice}`);
|
|
184
|
+
}
|
|
185
|
+
const monitor = options.quiet
|
|
186
|
+
? undefined
|
|
187
|
+
: stack_activity_monitor_1.StackActivityMonitor.withDefaultPrinter(cfn, deployName, options.stack, {
|
|
188
|
+
ci: options.ci,
|
|
189
|
+
}).start();
|
|
190
|
+
let stackErrorMessage = undefined;
|
|
191
|
+
let finalStackState = cloudFormationStack;
|
|
192
|
+
try {
|
|
193
|
+
const successStack = await (0, cloudformation_1.stabilizeStack)(cfn, deployName);
|
|
194
|
+
// This shouldn't really happen, but catch it anyway. You never know.
|
|
195
|
+
if (!successStack) {
|
|
196
|
+
throw new error_1.ToolkitError('Stack deploy failed (the stack disappeared while we were rolling it back)');
|
|
197
|
+
}
|
|
198
|
+
finalStackState = successStack;
|
|
199
|
+
const errors = (_d = monitor === null || monitor === void 0 ? void 0 : monitor.errors) === null || _d === void 0 ? void 0 : _d.join(', ');
|
|
200
|
+
if (errors) {
|
|
201
|
+
stackErrorMessage = errors;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
stackErrorMessage = suffixWithErrors((0, error_2.formatErrorMessage)(e), monitor === null || monitor === void 0 ? void 0 : monitor.errors);
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
await (monitor === null || monitor === void 0 ? void 0 : monitor.stop());
|
|
209
|
+
}
|
|
210
|
+
if (finalStackState.stackStatus.isRollbackSuccess || !stackErrorMessage) {
|
|
211
|
+
return { success: true };
|
|
212
|
+
}
|
|
213
|
+
// Either we need to ignore some resources to continue the rollback, or something went wrong
|
|
214
|
+
if (finalStackState.stackStatus.rollbackChoice === stack_status_1.RollbackChoice.CONTINUE_UPDATE_ROLLBACK && options.force) {
|
|
215
|
+
// Do another loop-de-loop
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
throw new error_1.ToolkitError(`${stackErrorMessage} (fix problem and retry, or orphan these resources using --orphan or --force)`);
|
|
219
|
+
}
|
|
220
|
+
throw new error_1.ToolkitError("Rollback did not finish after a large number of iterations; stopping because it looks like we're not making progress anymore. You can retry if rollback was progressing as expected.");
|
|
221
|
+
}
|
|
222
|
+
async destroyStack(options) {
|
|
223
|
+
var _a;
|
|
224
|
+
const env = await this.envs.accessStackForMutableStackOperations(options.stack);
|
|
225
|
+
const executionRoleArn = await env.replacePlaceholders((_a = options.roleArn) !== null && _a !== void 0 ? _a : options.stack.cloudFormationExecutionRoleArn);
|
|
226
|
+
return (0, deploy_stack_1.destroyStack)({
|
|
227
|
+
sdk: env.sdk,
|
|
228
|
+
roleArn: executionRoleArn,
|
|
229
|
+
stack: options.stack,
|
|
230
|
+
deployName: options.deployName,
|
|
231
|
+
quiet: options.quiet,
|
|
232
|
+
ci: options.ci,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
async stackExists(options) {
|
|
236
|
+
var _a;
|
|
237
|
+
let env;
|
|
238
|
+
if (options.tryLookupRole) {
|
|
239
|
+
env = await this.envs.accessStackForLookupBestEffort(options.stack);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
env = await this.envs.accessStackForReadOnlyStackOperations(options.stack);
|
|
243
|
+
}
|
|
244
|
+
const stack = await cloudformation_1.CloudFormationStack.lookup(env.sdk.cloudFormation(), (_a = options.deployName) !== null && _a !== void 0 ? _a : options.stack.stackName);
|
|
245
|
+
return stack.exists;
|
|
246
|
+
}
|
|
247
|
+
async prepareAndValidateAssets(asset, options) {
|
|
248
|
+
const env = await this.envs.accessStackForMutableStackOperations(options.stack);
|
|
249
|
+
await this.validateBootstrapStackVersion(options.stack.stackName, asset.requiresBootstrapStackVersion, asset.bootstrapStackVersionSsmParameter, env.resources);
|
|
250
|
+
const manifest = cdk_assets.AssetManifest.fromFile(asset.file);
|
|
251
|
+
return { manifest, stackEnv: env.resolvedEnvironment };
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Build all assets in a manifest
|
|
255
|
+
*
|
|
256
|
+
* @deprecated Use `buildSingleAsset` instead
|
|
257
|
+
*/
|
|
258
|
+
async buildAssets(asset, options) {
|
|
259
|
+
const { manifest, stackEnv } = await this.prepareAndValidateAssets(asset, options);
|
|
260
|
+
await (0, asset_publishing_1.buildAssets)(manifest, this.assetSdkProvider, stackEnv, options.buildOptions);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Publish all assets in a manifest
|
|
264
|
+
*
|
|
265
|
+
* @deprecated Use `publishSingleAsset` instead
|
|
266
|
+
*/
|
|
267
|
+
async publishAssets(asset, options) {
|
|
268
|
+
const { manifest, stackEnv } = await this.prepareAndValidateAssets(asset, options);
|
|
269
|
+
await (0, asset_publishing_1.publishAssets)(manifest, this.assetSdkProvider, stackEnv, {
|
|
270
|
+
...options.publishOptions,
|
|
271
|
+
allowCrossAccount: await this.allowCrossAccountAssetPublishingForEnv(options.stack),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Build a single asset from an asset manifest
|
|
276
|
+
*
|
|
277
|
+
* If an assert manifest artifact is given, the bootstrap stack version
|
|
278
|
+
* will be validated according to the constraints in that manifest artifact.
|
|
279
|
+
* If that is not necessary, `'no-version-validation'` can be passed.
|
|
280
|
+
*/
|
|
281
|
+
// eslint-disable-next-line max-len
|
|
282
|
+
async buildSingleAsset(assetArtifact, assetManifest, asset, options) {
|
|
283
|
+
if (assetArtifact !== 'no-version-validation') {
|
|
284
|
+
const env = await this.envs.accessStackForReadOnlyStackOperations(options.stack);
|
|
285
|
+
await this.validateBootstrapStackVersion(options.stack.stackName, assetArtifact.requiresBootstrapStackVersion, assetArtifact.bootstrapStackVersionSsmParameter, env.resources);
|
|
286
|
+
}
|
|
287
|
+
const resolvedEnvironment = await this.envs.resolveStackEnvironment(options.stack);
|
|
288
|
+
const publisher = this.cachedPublisher(assetManifest, resolvedEnvironment, options.stackName);
|
|
289
|
+
await publisher.buildEntry(asset);
|
|
290
|
+
if (publisher.hasFailures) {
|
|
291
|
+
throw new error_1.ToolkitError(`Failed to build asset ${asset.id}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Publish a single asset from an asset manifest
|
|
296
|
+
*/
|
|
297
|
+
// eslint-disable-next-line max-len
|
|
298
|
+
async publishSingleAsset(assetManifest, asset, options) {
|
|
299
|
+
const stackEnv = await this.envs.resolveStackEnvironment(options.stack);
|
|
300
|
+
// No need to validate anymore, we already did that during build
|
|
301
|
+
const publisher = this.cachedPublisher(assetManifest, stackEnv, options.stackName);
|
|
302
|
+
await publisher.publishEntry(asset, { allowCrossAccount: await this.allowCrossAccountAssetPublishingForEnv(options.stack) });
|
|
303
|
+
if (publisher.hasFailures) {
|
|
304
|
+
throw new error_1.ToolkitError(`Failed to publish asset ${asset.id}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
async allowCrossAccountAssetPublishingForEnv(stack) {
|
|
308
|
+
if (this._allowCrossAccountAssetPublishing === undefined) {
|
|
309
|
+
const env = await this.envs.accessStackForReadOnlyStackOperations(stack);
|
|
310
|
+
this._allowCrossAccountAssetPublishing = await (0, checks_1.determineAllowCrossAccountAssetPublishing)(env.sdk, this.props.toolkitStackName);
|
|
311
|
+
}
|
|
312
|
+
return this._allowCrossAccountAssetPublishing;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Return whether a single asset has been published already
|
|
316
|
+
*/
|
|
317
|
+
async isSingleAssetPublished(assetManifest, asset, options) {
|
|
318
|
+
const stackEnv = await this.envs.resolveStackEnvironment(options.stack);
|
|
319
|
+
const publisher = this.cachedPublisher(assetManifest, stackEnv, options.stackName);
|
|
320
|
+
return publisher.isEntryPublished(asset);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Validate that the bootstrap stack has the right version for this stack
|
|
324
|
+
*
|
|
325
|
+
* Call into envResources.validateVersion, but prepend the stack name in case of failure.
|
|
326
|
+
*/
|
|
327
|
+
async validateBootstrapStackVersion(stackName, requiresBootstrapStackVersion, bootstrapStackVersionSsmParameter, envResources) {
|
|
328
|
+
try {
|
|
329
|
+
await envResources.validateVersion(requiresBootstrapStackVersion, bootstrapStackVersionSsmParameter);
|
|
330
|
+
}
|
|
331
|
+
catch (e) {
|
|
332
|
+
throw new error_1.ToolkitError(`${stackName}: ${(0, error_2.formatErrorMessage)(e)}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
cachedPublisher(assetManifest, env, stackName) {
|
|
336
|
+
var _a;
|
|
337
|
+
const existing = this.publisherCache.get(assetManifest);
|
|
338
|
+
if (existing) {
|
|
339
|
+
return existing;
|
|
340
|
+
}
|
|
341
|
+
const prefix = stackName ? `${chalk.bold(stackName)}: ` : '';
|
|
342
|
+
const publisher = new cdk_assets.AssetPublishing(assetManifest, {
|
|
343
|
+
// The AssetPublishing class takes care of role assuming etc, so it's okay to
|
|
344
|
+
// give it a direct `SdkProvider`.
|
|
345
|
+
aws: new asset_publishing_1.PublishingAws(this.assetSdkProvider, env),
|
|
346
|
+
progressListener: new ParallelSafeAssetProgress(prefix, (_a = this.props.quiet) !== null && _a !== void 0 ? _a : false),
|
|
347
|
+
});
|
|
348
|
+
this.publisherCache.set(assetManifest, publisher);
|
|
349
|
+
return publisher;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
exports.Deployments = Deployments;
|
|
353
|
+
/**
|
|
354
|
+
* Asset progress that doesn't do anything with percentages (currently)
|
|
355
|
+
*/
|
|
356
|
+
class ParallelSafeAssetProgress {
|
|
357
|
+
constructor(prefix, quiet) {
|
|
358
|
+
this.prefix = prefix;
|
|
359
|
+
this.quiet = quiet;
|
|
360
|
+
}
|
|
361
|
+
onPublishEvent(type, event) {
|
|
362
|
+
const handler = this.quiet && type !== 'fail' ? logging_1.debug : asset_publishing_1.EVENT_TO_LOGGER[type];
|
|
363
|
+
handler(`${this.prefix}${type}: ${event.message}`);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function suffixWithErrors(msg, errors) {
|
|
367
|
+
return errors && errors.length > 0 ? `${msg}: ${errors.join(', ')}` : msg;
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ltZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFFcEMseUNBQXlDO0FBQ3pDLCtCQUErQjtBQUMvQixxRUFBZ0U7QUFDaEUseURBTzRCO0FBQzVCLHFDQUFxRTtBQUNyRSxxREFPMEI7QUFDMUIsaURBQTJEO0FBRzNELGlFQUlnQztBQUNoQywyQ0FBK0M7QUFDL0MsK0NBQW1EO0FBQ25ELDRDQUFzRDtBQUV0RCw4REFBMEQ7QUFJMUQsa0RBQTZEO0FBQzdELDBGQUE0RztBQUM1RyxrRkFBNkU7QUFDN0Usc0VBQXFFO0FBQ3JFLDZFQUFvRTtBQUVwRSxNQUFNLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQztBQTJTaEQ7Ozs7R0FJRztBQUNILE1BQWEsV0FBVztJQTBCdEIsWUFBNkIsS0FBdUI7O1FBQXZCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBSG5DLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXdELENBQUM7UUFJaEcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDMUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHNDQUFpQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLG1DQUFJLHlDQUEwQixDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQXdDO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLG1DQUFtQyxDQUM5QyxpQkFBb0QsRUFDcEQsNEJBQXFDLEtBQUs7UUFFMUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJ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QU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgY2RrX2Fzc2V0cyBmcm9tICdjZGstYXNzZXRzJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB7XG4gIGJ1aWxkQXNzZXRzLFxuICB0eXBlIEJ1aWxkQXNzZXRzT3B0aW9ucyxcbiAgRVZFTlRfVE9fTE9HR0VSLFxuICBwdWJsaXNoQXNzZXRzLFxuICB0eXBlIFB1Ymxpc2hBc3NldHNPcHRpb25zLFxuICBQdWJsaXNoaW5nQXdzLFxufSBmcm9tICcuL2Fzc2V0LXB1Ymxpc2hpbmcnO1xuaW1wb3J0IHsgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcgfSBmcm9tICcuL2NoZWNrcyc7XG5pbXBvcnQge1xuICBDbG91ZEZvcm1hdGlvblN0YWNrLFxuICB0eXBlIFJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcyxcbiAgUmVzb3VyY2VzVG9JbXBvcnQsXG4gIHN0YWJpbGl6ZVN0YWNrLFxuICBUZW1wbGF0ZSxcbiAgdXBsb2FkU3RhY2tUZW1wbGF0ZUFzc2V0cyxcbn0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBkZXBsb3lTdGFjaywgZGVzdHJveVN0YWNrIH0gZnJvbSAnLi9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgRGVwbG95bWVudE1ldGhvZCB9IGZyb20gJy4vZGVwbG95bWVudC1tZXRob2QnO1xuaW1wb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuL2RlcGxveW1lbnQtcmVzdWx0JztcbmltcG9ydCB7XG4gIGxvYWRDdXJyZW50VGVtcGxhdGUsXG4gIGxvYWRDdXJyZW50VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzLFxuICB0eXBlIFJvb3RUZW1wbGF0ZVdpdGhOZXN0ZWRTdGFja3MsXG59IGZyb20gJy4vbmVzdGVkLXN0YWNrLWhlbHBlcnMnO1xuaW1wb3J0IHsgZGVidWcsIHdhcm5pbmcgfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvZXJyb3InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbC9lcnJvcic7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IEVudmlyb25tZW50QWNjZXNzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQtYWNjZXNzJztcbmltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnRSZXNvdXJjZXMgfSBmcm9tICcuLi9lbnZpcm9ubWVudC1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSG90c3dhcE1vZGUsIEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyB9IGZyb20gJy4uL2hvdHN3YXAvY29tbW9uJztcbmltcG9ydCB0eXBlIHsgVGFnIH0gZnJvbSAnLi4vdGFncyc7XG5pbXBvcnQgeyBERUZBVUxUX1RPT0xLSVRfU1RBQ0tfTkFNRSB9IGZyb20gJy4uL3Rvb2xraXQtaW5mbyc7XG5pbXBvcnQgeyBTdGFja0FjdGl2aXR5TW9uaXRvciwgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi4vdXRpbC9jbG91ZGZvcm1hdGlvbi9zdGFjay1hY3Rpdml0eS1tb25pdG9yJztcbmltcG9ydCB7IFN0YWNrRXZlbnRQb2xsZXIgfSBmcm9tICcuLi91dGlsL2Nsb3VkZm9ybWF0aW9uL3N0YWNrLWV2ZW50LXBvbGxlcic7XG5pbXBvcnQgeyBSb2xsYmFja0Nob2ljZSB9IGZyb20gJy4uL3V0aWwvY2xvdWRmb3JtYXRpb24vc3RhY2stc3RhdHVzJztcbmltcG9ydCB7IG1ha2VCb2R5UGFyYW1ldGVyIH0gZnJvbSAnLi4vdXRpbC90ZW1wbGF0ZS1ib2R5LXBhcmFtZXRlcic7XG5cbmNvbnN0IEJPT1RTVFJBUF9TVEFDS19WRVJTSU9OX0ZPUl9ST0xMQkFDSyA9IDIzO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVN0YWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayB0byBkZXBsb3lcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiByb2xlIGZvciB0aGUgZGVwbG95bWVudCAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEN1cnJlbnQgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVG9waWMgQVJOcyB0byBzZW5kIGEgbWVzc2FnZSB3aGVuIGRlcGxveW1lbnQgZmluaXNoZXMgKHBhc3MgdGhyb3VnaCB0byBDbG91ZEZvcm1hdGlvbilcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIG5hbWUgdW5kZXIgd2hpY2ggc3RhY2sgd2lsbCBiZSBkZXBsb3llZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZSBhcnRpZmFjdCBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkZXBsb3lOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb24ndCBzaG93IHN0YWNrIGRlcGxveW1lbnQgZXZlbnRzLCBqdXN0IHdhaXRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdG9vbGtpdCBzdGFjaywgaWYgbm90IHRoZSBkZWZhdWx0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ0NES1Rvb2xraXQnXG4gICAqL1xuICByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFzc2V0IElEcyB3aGljaCBzaG91bGQgTk9UIGJlIGJ1aWx0IG9yIHVwbG9hZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQnVpbGQgYWxsIGFzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2VBc3NldHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3RhY2sgdGFncyAocGFzcyB0aHJvdWdoIHRvIENsb3VkRm9ybWF0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IFRhZ1tdO1xuXG4gIC8qKlxuICAgKiBTdGFnZSB0aGUgY2hhbmdlIHNldCBidXQgZG9uJ3QgZXhlY3V0ZSBpdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICogQGRlcHJlY2F0ZWQgVXNlICdkZXBsb3ltZW50TWV0aG9kJyBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgbmFtZSB0byB1c2UgZm9yIHRoZSBDbG91ZEZvcm1hdGlvbiBjaGFuZ2Ugc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2RlcGxveW1lbnRNZXRob2QnIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZVNldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlbGVjdCB0aGUgZGVwbG95bWVudCBtZXRob2QgKGRpcmVjdCBvciB1c2luZyBhIGNoYW5nZSBzZXQpXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2hhbmdlIHNldCB3aXRoIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudE1ldGhvZD86IERlcGxveW1lbnRNZXRob2Q7XG5cbiAgLyoqXG4gICAqIEZvcmNlIGRlcGxveW1lbnQsIGV2ZW4gaWYgdGhlIGRlcGxveWVkIHRlbXBsYXRlIGlzIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGFyZSBhYm91dCB0byBkZXBsb3kuXG4gICAqIEBkZWZhdWx0IGZhbHNlIGRlcGxveW1lbnQgd2lsbCBiZSBza2lwcGVkIGlmIHRoZSB0ZW1wbGF0ZSBpcyBpZGVudGljYWxcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXh0cmEgcGFyYW1ldGVycyBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbiAgLyoqXG4gICAqIFVzZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICpcbiAgICogSWYgbm90IHNldCwgYWxsIHBhcmFtZXRlcnMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZVByZXZpb3VzUGFyYW1ldGVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgbW9kZSBmb3Igc3RhY2sgZGVwbG95bWVudCBwcm9ncmVzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuQmFyIC0gc3RhY2sgZXZlbnRzIHdpbGwgYmUgZGlzcGxheWVkIGZvclxuICAgKiAgIHRoZSByZXNvdXJjZSBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9ncmVzcz86IFN0YWNrQWN0aXZpdHlQcm9ncmVzcztcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBhcmUgb24gYSBDSSBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNpPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUm9sbGJhY2sgZmFpbGVkIGRlcGxveW1lbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrPzogYm9vbGVhbjtcblxuICAvKlxuICAgKiBXaGV0aGVyIHRvIHBlcmZvcm0gYSAnaG90c3dhcCcgZGVwbG95bWVudC5cbiAgICogQSAnaG90c3dhcCcgZGVwbG95bWVudCB3aWxsIGF0dGVtcHQgdG8gc2hvcnQtY2lyY3VpdCBDbG91ZEZvcm1hdGlvblxuICAgKiBhbmQgdXBkYXRlIHRoZSBhZmZlY3RlZCByZXNvdXJjZXMgbGlrZSBMYW1iZGEgZnVuY3Rpb25zIGRpcmVjdGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBIb3Rzd2FwTW9kZS5GVUxMX0RFUExPWU1FTlRgIGZvciByZWd1bGFyIGRlcGxveW1lbnRzLCBgSG90c3dhcE1vZGUuSE9UU1dBUF9PTkxZYCBmb3IgJ3dhdGNoJyBkZXBsb3ltZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgaG90c3dhcD86IEhvdHN3YXBNb2RlO1xuXG4gIC8qKlxuICAqIFByb3BlcnRpZXMgdGhhdCBjb25maWd1cmUgaG90c3dhcCBiZWhhdmlvclxuICAqL1xuICByZWFkb25seSBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM/OiBIb3Rzd2FwUHJvcGVydHlPdmVycmlkZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBleHRyYSBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlciB3aGVuIHBlcmZvcm1pbmcgQVdTIFNESyBjYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3RoaW5nIGV4dHJhIGlzIGFwcGVuZGVkIHRvIHRoZSBVc2VyLUFnZW50IGhlYWRlclxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFVc2VyQWdlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZXhpc3RpbmcgcmVzb3VyY2VzIHRvIGJlIElNUE9SVEVEIGludG8gdGhlIHN0YWNrLCBpbnN0ZWFkIG9mIGJlaW5nIENSRUFURURcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VzVG9JbXBvcnQ7XG5cbiAgLyoqXG4gICAqIElmIHByZXNlbnQsIHVzZSB0aGlzIGdpdmVuIHRlbXBsYXRlIGluc3RlYWQgb2YgdGhlIHN0b3JlZCBvbmVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2UgdGhlIHN0b3JlZCB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVUZW1wbGF0ZT86IGFueTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBidWlsZC9wdWJsaXNoIGFzc2V0cyBpbiBwYXJhbGxlbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIFRvIHJlbWFpbiBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRQYXJhbGxlbGlzbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGlmIHRoZSBhcHAgY29udGFpbnMgbm8gc3RhY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaWdub3JlTm9TdGFja3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGxiYWNrU3RhY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YWNrIHRvIHJvbGwgYmFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogRXhlY3V0aW9uIHJvbGUgZm9yIHRoZSBkZXBsb3ltZW50IChwYXNzIHRocm91Z2ggdG8gQ2xvdWRGb3JtYXRpb24pXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCByb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb24ndCBzaG93IHN0YWNrIGRlcGxveW1lbnQgZXZlbnRzLCBqdXN0IHdhaXRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBhcmUgb24gYSBDSSBzeXN0ZW1cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNpPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgdG9vbGtpdCBzdGFjaywgaWYgbm90IHRoZSBkZWZhdWx0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgJ0NES1Rvb2xraXQnXG4gICAqL1xuICByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZvcmNlIGEgcm9sbGJhY2sgb3Igbm90XG4gICAqXG4gICAqIEZvcmNpbmcgYSByb2xsYmFjayB3aWxsIG9ycGhhbiBhbGwgdW5kZWxldGFibGUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcnBoYW4gdGhlIHJlc291cmNlcyB3aXRoIHRoZSBnaXZlbiBsb2dpY2FsIElEc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG9ycGhhbmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgb3JwaGFuTG9naWNhbElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG1vZGUgZm9yIHN0YWNrIGRlcGxveW1lbnQgcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU3RhY2tBY3Rpdml0eVByb2dyZXNzLkJhciAtIHN0YWNrIGV2ZW50cyB3aWxsIGJlIGRpc3BsYXllZCBmb3JcbiAgICogICB0aGUgcmVzb3VyY2UgY3VycmVudGx5IGJlaW5nIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZ3Jlc3M/OiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3M7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIHZlcnNpb24gb2YgdGhlIGJvb3RzdHJhcCBzdGFjayBwZXJtaXNzaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9sbGJhY2tTdGFja1Jlc3VsdCB7XG4gIHJlYWRvbmx5IG5vdEluUm9sbGJhY2thYmxlU3RhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBzdWNjZXNzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEFzc2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGFjayB3aXRoIGFzc2V0cyB0byBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiByb2xlIGZvciB0aGUgYnVpbGRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCByb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU3RhY2tBc3NldHNPcHRpb25zIGV4dGVuZHMgQXNzZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbnMgdG8gcGFzcyBvbiB0byBgYnVpbGRBc3NldHMoKWAgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkT3B0aW9ucz86IEJ1aWxkQXNzZXRzT3B0aW9ucztcblxuICAvKipcbiAgICogU3RhY2sgbmFtZSB0aGlzIGFzc2V0IGlzIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucyBleHRlbmRzIEFzc2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIHBhc3Mgb24gdG8gYHB1Ymxpc2hBc2VzdHMoKWAgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hPcHRpb25zPzogT21pdDxQdWJsaXNoQXNzZXRzT3B0aW9ucywgJ2J1aWxkQXNzZXRzJz47XG5cbiAgLyoqXG4gICAqIFN0YWNrIG5hbWUgdGhpcyBhc3NldCBpcyBmb3JcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95U3RhY2tPcHRpb25zIHtcbiAgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgZGVwbG95TmFtZT86IHN0cmluZztcbiAgcm9sZUFybj86IHN0cmluZztcbiAgcXVpZXQ/OiBib29sZWFuO1xuICBmb3JjZT86IGJvb2xlYW47XG4gIGNpPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0V4aXN0c09wdGlvbnMge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3lOYW1lPzogc3RyaW5nO1xuICB0cnlMb29rdXBSb2xlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50c1Byb3BzIHtcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuICByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2NvcGUgZm9yIGEgc2luZ2xlIHNldCBvZiBkZXBsb3ltZW50cyBmcm9tIGEgc2V0IG9mIENsb3VkIEFzc2VtYmx5IEFydGlmYWN0c1xuICpcbiAqIE1hbmFnZXMgbG9va3VwIG9mIFNES3MsIEJvb3RzdHJhcCBzdGFja3MsIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlcGxveW1lbnRzIHtcbiAgcHVibGljIHJlYWRvbmx5IGVudnM6IEVudmlyb25tZW50QWNjZXNzO1xuXG4gIC8qKlxuICAgKiBTREsgcHJvdmlkZXIgZm9yIGFzc2V0IHB1Ymxpc2hpbmcgKGRvIG5vdCB1c2UgZm9yIGFueXRoaW5nIGVsc2UpLlxuICAgKlxuICAgKiBUaGlzIFNESyBwcm92aWRlciBpcyBvbmx5IGFsbG93ZWQgdG8gYmUgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLCBub3RoaW5nIGVsc2UuXG4gICAqXG4gICAqIEl0J3Mgbm90IGEgZGlmZmVyZW50IG9iamVjdCwgYnV0IHRoZSBmaWVsZCBuYW1lIHNob3VsZCBpbXBseSB0aGF0IHRoaXNcbiAgICogb2JqZWN0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSwgZXhjZXB0IHRvIHBhc3MgdG8gYXNzZXQgaGFuZGxpbmcgcm91dGluZXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFzc2V0U2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBTREsgcHJvdmlkZXIgZm9yIHBhc3NpbmcgdG8gZGVwbG95U3RhY2tcbiAgICpcbiAgICogVGhpcyBTREsgcHJvdmlkZXIgaXMgb25seSBhbGxvd2VkIHRvIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgbm90aGluZyBlbHNlLlxuICAgKlxuICAgKiBJdCdzIG5vdCBhIGRpZmZlcmVudCBvYmplY3QsIGJ1dCB0aGUgZmllbGQgbmFtZSBzaG91bGQgaW1wbHkgdGhhdCB0aGlzXG4gICAqIG9iamVjdCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHksIGV4Y2VwdCB0byBwYXNzIHRvIGBkZXBsb3lTdGFja2AuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlcGxveVN0YWNrU2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaGVyQ2FjaGUgPSBuZXcgTWFwPGNka19hc3NldHMuQXNzZXRNYW5pZmVzdCwgY2RrX2Fzc2V0cy5Bc3NldFB1Ymxpc2hpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfYWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveW1lbnRzUHJvcHMpIHtcbiAgICB0aGlzLmFzc2V0U2RrUHJvdmlkZXIgPSBwcm9wcy5zZGtQcm92aWRlcjtcbiAgICB0aGlzLmRlcGxveVN0YWNrU2RrUHJvdmlkZXIgPSBwcm9wcy5zZGtQcm92aWRlcjtcbiAgICB0aGlzLmVudnMgPSBuZXcgRW52aXJvbm1lbnRBY2Nlc3MocHJvcHMuc2RrUHJvdmlkZXIsIHByb3BzLnRvb2xraXRTdGFja05hbWUgPz8gREVGQVVMVF9UT09MS0lUX1NUQUNLX05BTUUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8Y3hhcGkuRW52aXJvbm1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnZzLnJlc29sdmVTdGFja0Vudmlyb25tZW50KHN0YWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkQ3VycmVudFRlbXBsYXRlV2l0aE5lc3RlZFN0YWNrcyhcbiAgICByb290U3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIHJldHJpZXZlUHJvY2Vzc2VkVGVtcGxhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogUHJvbWlzZTxSb290VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzPiB7XG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTG9va3VwQmVzdEVmZm9ydChyb290U3RhY2tBcnRpZmFjdCk7XG4gICAgcmV0dXJuIGxvYWRDdXJyZW50VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzKHJvb3RTdGFja0FydGlmYWN0LCBlbnYuc2RrLCByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkQ3VycmVudFRlbXBsYXRlKHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICBkZWJ1ZyhgUmVhZGluZyBleGlzdGluZyB0ZW1wbGF0ZSBmb3Igc3RhY2sgJHtzdGFja0FydGlmYWN0LmRpc3BsYXlOYW1lfS5gKTtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JMb29rdXBCZXN0RWZmb3J0KHN0YWNrQXJ0aWZhY3QpO1xuICAgIHJldHVybiBsb2FkQ3VycmVudFRlbXBsYXRlKHN0YWNrQXJ0aWZhY3QsIGVudi5zZGspO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc291cmNlSWRlbnRpZmllclN1bW1hcmllcyhcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICk6IFByb21pc2U8UmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzPiB7XG4gICAgZGVidWcoYFJldHJpZXZpbmcgdGVtcGxhdGUgc3VtbWFyeSBmb3Igc3RhY2sgJHtzdGFja0FydGlmYWN0LmRpc3BsYXlOYW1lfS5gKTtcbiAgICAvLyBDdXJyZW50bHksIG5lZWRzIHRvIHVzZSBgZGVwbG95LXJvbGVgIHNpbmNlIGl0IG1heSBuZWVkIHRvIHJlYWQgdGVtcGxhdGVzIGluIHRoZSBzdGFnaW5nXG4gICAgLy8gYnVja2V0IHdoaWNoIGhhdmUgYmVlbiBlbmNyeXB0ZWQgd2l0aCBhIEtNUyBrZXkgKGFuZCBsb29rdXAtcm9sZSBtYXkgbm90IHJlYWQgZW5jcnlwdGVkIHRoaW5ncylcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JSZWFkT25seVN0YWNrT3BlcmF0aW9ucyhzdGFja0FydGlmYWN0KTtcbiAgICBjb25zdCBjZm4gPSBlbnYuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG5cbiAgICBhd2FpdCB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKHN0YWNrQXJ0aWZhY3QsIHRoaXMpO1xuXG4gICAgLy8gVXBsb2FkIHRoZSB0ZW1wbGF0ZSwgaWYgbmVjZXNzYXJ5LCBiZWZvcmUgcGFzc2luZyBpdCB0byBDRk5cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEFzc2V0TWFuaWZlc3RCdWlsZGVyKCk7XG4gICAgY29uc3QgY2ZuUGFyYW0gPSBhd2FpdCBtYWtlQm9keVBhcmFtZXRlcihcbiAgICAgIHN0YWNrQXJ0aWZhY3QsXG4gICAgICBlbnYucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBlbnYucmVzb3VyY2VzKTtcblxuICAgIC8vIElmIHRoZSBgbWFrZUJvZHlQYXJhbWV0ZXJgIGJlZm9yZSB0aGlzIGFkZGVkIGFzc2V0cywgbWFrZSBzdXJlIHRvIHB1Ymxpc2ggdGhlbSBiZWZvcmVcbiAgICAvLyBjYWxsaW5nIHRoZSBBUEkuXG4gICAgY29uc3QgYWRkZWRBc3NldHMgPSBidWlsZGVyLnRvTWFuaWZlc3Qoc3RhY2tBcnRpZmFjdC5hc3NlbWJseS5kaXJlY3RvcnkpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgYWRkZWRBc3NldHMuZW50cmllcykge1xuICAgICAgYXdhaXQgdGhpcy5idWlsZFNpbmdsZUFzc2V0KCduby12ZXJzaW9uLXZhbGlkYXRpb24nLCBhZGRlZEFzc2V0cywgZW50cnksIHtcbiAgICAgICAgc3RhY2s6IHN0YWNrQXJ0aWZhY3QsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucHVibGlzaFNpbmdsZUFzc2V0KGFkZGVkQXNzZXRzLCBlbnRyeSwge1xuICAgICAgICBzdGFjazogc3RhY2tBcnRpZmFjdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlU3VtbWFyeShjZm5QYXJhbSk7XG4gICAgaWYgKCFyZXNwb25zZS5SZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXMpIHtcbiAgICAgIGRlYnVnKCdHZXRUZW1wbGF0ZVN1bW1hcnkgQVBJIGNhbGwgZGlkIG5vdCByZXR1cm4gXCJSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJpZXNcIicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzID8/IFtdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveVN0YWNrKG9wdGlvbnM6IERlcGxveVN0YWNrT3B0aW9ucyk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQ+IHtcbiAgICBsZXQgZGVwbG95bWVudE1ldGhvZCA9IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZDtcbiAgICBpZiAob3B0aW9ucy5jaGFuZ2VTZXROYW1lIHx8IG9wdGlvbnMuZXhlY3V0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGVwbG95bWVudE1ldGhvZCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgIFwiWW91IGNhbm5vdCBzdXBwbHkgYm90aCAnZGVwbG95bWVudE1ldGhvZCcgYW5kICdjaGFuZ2VTZXROYW1lL2V4ZWN1dGUnLiBTdXBwbHkgb25lIG9yIHRoZSBvdGhlci5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlcGxveW1lbnRNZXRob2QgPSB7XG4gICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICBjaGFuZ2VTZXROYW1lOiBvcHRpb25zLmNoYW5nZVNldE5hbWUsXG4gICAgICAgIGV4ZWN1dGU6IG9wdGlvbnMuZXhlY3V0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTXV0YWJsZVN0YWNrT3BlcmF0aW9ucyhvcHRpb25zLnN0YWNrKTtcblxuICAgIC8vIERvIGEgdmVyaWZpY2F0aW9uIG9mIHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvblxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSxcbiAgICAgIG9wdGlvbnMuc3RhY2sucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sXG4gICAgICBvcHRpb25zLnN0YWNrLmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcixcbiAgICAgIGVudi5yZXNvdXJjZXMpO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMucm9sZUFybiA/PyBvcHRpb25zLnN0YWNrLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUm9sZUFybik7XG5cbiAgICByZXR1cm4gZGVwbG95U3RhY2soe1xuICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICByZXNvbHZlZEVudmlyb25tZW50OiBlbnYucmVzb2x2ZWRFbnZpcm9ubWVudCxcbiAgICAgIGRlcGxveU5hbWU6IG9wdGlvbnMuZGVwbG95TmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvbkFybnM6IG9wdGlvbnMubm90aWZpY2F0aW9uQXJucyxcbiAgICAgIHF1aWV0OiBvcHRpb25zLnF1aWV0LFxuICAgICAgc2RrOiBlbnYuc2RrLFxuICAgICAgc2RrUHJvdmlkZXI6IHRoaXMuZGVwbG95U3RhY2tTZGtQcm92aWRlcixcbiAgICAgIHJvbGVBcm46IGV4ZWN1dGlvblJvbGVBcm4sXG4gICAgICByZXVzZUFzc2V0czogb3B0aW9ucy5yZXVzZUFzc2V0cyxcbiAgICAgIGVudlJlc291cmNlczogZW52LnJlc291cmNlcyxcbiAgICAgIHRhZ3M6IG9wdGlvbnMudGFncyxcbiAgICAgIGRlcGxveW1lbnRNZXRob2QsXG4gICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZSxcbiAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnMucGFyYW1ldGVycyxcbiAgICAgIHVzZVByZXZpb3VzUGFyYW1ldGVyczogb3B0aW9ucy51c2VQcmV2aW91c1BhcmFtZXRlcnMsXG4gICAgICBwcm9ncmVzczogb3B0aW9ucy5wcm9ncmVzcyxcbiAgICAgIGNpOiBvcHRpb25zLmNpLFxuICAgICAgcm9sbGJhY2s6IG9wdGlvbnMucm9sbGJhY2ssXG4gICAgICBob3Rzd2FwOiBvcHRpb25zLmhvdHN3YXAsXG4gICAgICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM6IG9wdGlvbnMuaG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICAgICAgZXh0cmFVc2VyQWdlbnQ6IG9wdGlvbnMuZXh0cmFVc2VyQWdlbnQsXG4gICAgICByZXNvdXJjZXNUb0ltcG9ydDogb3B0aW9ucy5yZXNvdXJjZXNUb0ltcG9ydCxcbiAgICAgIG92ZXJyaWRlVGVtcGxhdGU6IG9wdGlvbnMub3ZlcnJpZGVUZW1wbGF0ZSxcbiAgICAgIGFzc2V0UGFyYWxsZWxpc206IG9wdGlvbnMuYXNzZXRQYXJhbGxlbGlzbSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByb2xsYmFja1N0YWNrKG9wdGlvbnM6IFJvbGxiYWNrU3RhY2tPcHRpb25zKTogUHJvbWlzZTxSb2xsYmFja1N0YWNrUmVzdWx0PiB7XG4gICAgbGV0IHJlc291cmNlc1RvU2tpcDogc3RyaW5nW10gPSBvcHRpb25zLm9ycGhhbkxvZ2ljYWxJZHMgPz8gW107XG4gICAgaWYgKG9wdGlvbnMuZm9yY2UgJiYgcmVzb3VyY2VzVG9Ta2lwLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0Nhbm5vdCBjb21iaW5lIC0tZm9yY2Ugd2l0aCAtLW9ycGhhbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0Zvck11dGFibGVTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG5cbiAgICBpZiAob3B0aW9ucy52YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbiA/PyB0cnVlKSB7XG4gICAgICAvLyBEbyBhIHZlcmlmaWNhdGlvbiBvZiB0aGUgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb25cbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICAgIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgICAgICBCT09UU1RSQVBfU1RBQ0tfVkVSU0lPTl9GT1JfUk9MTEJBQ0ssXG4gICAgICAgIG9wdGlvbnMuc3RhY2suYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyLFxuICAgICAgICBlbnYucmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjZm4gPSBlbnYuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgZGVwbG95TmFtZSA9IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lO1xuXG4gICAgLy8gV2UgbG9vcCBpbiBjYXNlIG9mIGAtLWZvcmNlYCBhbmQgdGhlIHN0YWNrIGVuZHMgdXAgaW4gYENPTlRJTlVFX1VQREFURV9ST0xMQkFDS2AuXG4gICAgbGV0IG1heExvb3BzID0gMTA7XG4gICAgd2hpbGUgKG1heExvb3BzLS0pIHtcbiAgICAgIGxldCBjbG91ZEZvcm1hdGlvblN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoY2ZuLCBkZXBsb3lOYW1lKTtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMucm9sZUFybiA/PyBvcHRpb25zLnN0YWNrLmNsb3VkRm9ybWF0aW9uRXhlY3V0aW9uUm9sZUFybik7XG5cbiAgICAgIHN3aXRjaCAoY2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1cy5yb2xsYmFja0Nob2ljZSkge1xuICAgICAgICBjYXNlIFJvbGxiYWNrQ2hvaWNlLk5PTkU6XG4gICAgICAgICAgd2FybmluZyhgU3RhY2sgJHtkZXBsb3lOYW1lfSBkb2VzIG5vdCBuZWVkIGEgcm9sbGJhY2s6ICR7Y2xvdWRGb3JtYXRpb25TdGFjay5zdGFja1N0YXR1c31gKTtcbiAgICAgICAgICByZXR1cm4geyBub3RJblJvbGxiYWNrYWJsZVN0YXRlOiB0cnVlIH07XG5cbiAgICAgICAgY2FzZSBSb2xsYmFja0Nob2ljZS5TVEFSVF9ST0xMQkFDSzpcbiAgICAgICAgICBkZWJ1ZyhgSW5pdGlhdGluZyByb2xsYmFjayBvZiBzdGFjayAke2RlcGxveU5hbWV9YCk7XG4gICAgICAgICAgYXdhaXQgY2ZuLnJvbGxiYWNrU3RhY2soe1xuICAgICAgICAgICAgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgICAgICAgICAgUm9sZUFSTjogZXhlY3V0aW9uUm9sZUFybixcbiAgICAgICAgICAgIENsaWVudFJlcXVlc3RUb2tlbjogcmFuZG9tVVVJRCgpLFxuICAgICAgICAgICAgLy8gRW5hYmxpbmcgdGhpcyBpcyBqdXN0IHRoZSBiZXR0ZXIgb3ZlcmFsbCBkZWZhdWx0LCB0aGUgb25seSByZWFzb24gaXQgaXNuJ3QgdGhlIHVwc3RyZWFtIGRlZmF1bHQgaXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIFJldGFpbkV4Y2VwdE9uQ3JlYXRlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUm9sbGJhY2tDaG9pY2UuQ09OVElOVUVfVVBEQVRFX1JPTExCQUNLOlxuICAgICAgICAgIGlmIChvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBmYWlsZWQgcmVzb3VyY2VzIGZyb20gdGhlIGRlcGxveW1lbnQgYW5kIGF1dG9tYXRpY2FsbHkgc2tpcCB0aGVtXG4gICAgICAgICAgICAvLyAoVXNpbmcgZGVwbG95bWVudCBsb2cgYmVjYXVzZSB3ZSBkZWZpbml0ZWx5IGhhdmUgYERlc2NyaWJlU3RhY2tFdmVudHNgIHBlcm1pc3Npb25zLCBhbmQgd2UgbWlnaHQgbm90IGhhdmVcbiAgICAgICAgICAgIC8vIGBEZXNjcmliZVN0YWNrUmVzb3VyY2VzYCBwZXJtaXNzaW9ucykuXG4gICAgICAgICAgICBjb25zdCBwb2xsZXIgPSBuZXcgU3RhY2tFdmVudFBvbGxlcihjZm4sIHtcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgICAgICAgICAgICBzdGFja1N0YXR1c2VzOiBbJ1JPTExCQUNLX0lOX1BST0dSRVNTJywgJ1VQREFURV9ST0xMQkFDS19JTl9QUk9HUkVTUyddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCBwb2xsZXIucG9sbCgpO1xuICAgICAgICAgICAgcmVzb3VyY2VzVG9Ta2lwID0gcG9sbGVyLnJlc291cmNlRXJyb3JzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+ICFyLmlzU3RhY2tFdmVudCAmJiByLnBhcmVudFN0YWNrTG9naWNhbElkcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgIC5tYXAoKHIpID0+IHIuZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNraXBEZXNjcmlwdGlvbiA9IHJlc291cmNlc1RvU2tpcC5sZW5ndGggPiAwID8gYCAob3JwaGFuaW5nOiAke3Jlc291cmNlc1RvU2tpcC5qb2luKCcsICcpfSlgIDogJyc7XG4gICAgICAgICAgd2FybmluZyhgQ29udGludWluZyByb2xsYmFjayBvZiBzdGFjayAke2RlcGxveU5hbWV9JHtza2lwRGVzY3JpcHRpb259YCk7XG4gICAgICAgICAgYXdhaXQgY2ZuLmNvbnRpbnVlVXBkYXRlUm9sbGJhY2soe1xuICAgICAgICAgICAgU3RhY2tOYW1lOiBkZXBsb3lOYW1lLFxuICAgICAgICAgICAgQ2xpZW50UmVxdWVzdFRva2VuOiByYW5kb21VVUlEKCksXG4gICAgICAgICAgICBSb2xlQVJOOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgICAgICAgICAgUmVzb3VyY2VzVG9Ta2lwOiByZXNvdXJjZXNUb1NraXAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSb2xsYmFja0Nob2ljZS5ST0xMQkFDS19GQUlMRUQ6XG4gICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgIGBTdGFjayAke2RlcGxveU5hbWV9IGZhaWxlZCBjcmVhdGlvbiBhbmQgcm9sbGJhY2suIFRoaXMgc3RhdGUgY2Fubm90IGJlIHJvbGxlZCBiYWNrLiBZb3UgY2FuIHJlY3JlYXRlIHRoaXMgc3RhY2sgYnkgcnVubmluZyAnY2RrIGRlcGxveScuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IG5vdEluUm9sbGJhY2thYmxlU3RhdGU6IHRydWUgfTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuZXhwZWN0ZWQgcm9sbGJhY2sgY2hvaWNlOiAke2Nsb3VkRm9ybWF0aW9uU3RhY2suc3RhY2tTdGF0dXMucm9sbGJhY2tDaG9pY2V9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vbml0b3IgPSBvcHRpb25zLnF1aWV0XG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogU3RhY2tBY3Rpdml0eU1vbml0b3Iud2l0aERlZmF1bHRQcmludGVyKGNmbiwgZGVwbG95TmFtZSwgb3B0aW9ucy5zdGFjaywge1xuICAgICAgICAgIGNpOiBvcHRpb25zLmNpLFxuICAgICAgICB9KS5zdGFydCgpO1xuXG4gICAgICBsZXQgc3RhY2tFcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmaW5hbFN0YWNrU3RhdGUgPSBjbG91ZEZvcm1hdGlvblN0YWNrO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc1N0YWNrID0gYXdhaXQgc3RhYmlsaXplU3RhY2soY2ZuLCBkZXBsb3lOYW1lKTtcblxuICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuLCBidXQgY2F0Y2ggaXQgYW55d2F5LiBZb3UgbmV2ZXIga25vdy5cbiAgICAgICAgaWYgKCFzdWNjZXNzU3RhY2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdTdGFjayBkZXBsb3kgZmFpbGVkICh0aGUgc3RhY2sgZGlzYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSByb2xsaW5nIGl0IGJhY2spJyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxTdGFja1N0YXRlID0gc3VjY2Vzc1N0YWNrO1xuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IG1vbml0b3I/LmVycm9ycz8uam9pbignLCAnKTtcbiAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgIHN0YWNrRXJyb3JNZXNzYWdlID0gZXJyb3JzO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgc3RhY2tFcnJvck1lc3NhZ2UgPSBzdWZmaXhXaXRoRXJyb3JzKGZvcm1hdEVycm9yTWVzc2FnZShlKSwgbW9uaXRvcj8uZXJyb3JzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IG1vbml0b3I/LnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsU3RhY2tTdGF0ZS5zdGFja1N0YXR1cy5pc1JvbGxiYWNrU3VjY2VzcyB8fCAhc3RhY2tFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICAvLyBFaXRoZXIgd2UgbmVlZCB0byBpZ25vcmUgc29tZSByZXNvdXJjZXMgdG8gY29udGludWUgdGhlIHJvbGxiYWNrLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgaWYgKGZpbmFsU3RhY2tTdGF0ZS5zdGFja1N0YXR1cy5yb2xsYmFja0Nob2ljZSA9PT0gUm9sbGJhY2tDaG9pY2UuQ09OVElOVUVfVVBEQVRFX1JPTExCQUNLICYmIG9wdGlvbnMuZm9yY2UpIHtcbiAgICAgICAgLy8gRG8gYW5vdGhlciBsb29wLWRlLWxvb3BcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgIGAke3N0YWNrRXJyb3JNZXNzYWdlfSAoZml4IHByb2JsZW0gYW5kIHJldHJ5LCBvciBvcnBoYW4gdGhlc2UgcmVzb3VyY2VzIHVzaW5nIC0tb3JwaGFuIG9yIC0tZm9yY2UpYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICBcIlJvbGxiYWNrIGRpZCBub3QgZmluaXNoIGFmdGVyIGEgbGFyZ2UgbnVtYmVyIG9mIGl0ZXJhdGlvbnM7IHN0b3BwaW5nIGJlY2F1c2UgaXQgbG9va3MgbGlrZSB3ZSdyZSBub3QgbWFraW5nIHByb2dyZXNzIGFueW1vcmUuIFlvdSBjYW4gcmV0cnkgaWYgcm9sbGJhY2sgd2FzIHByb2dyZXNzaW5nIGFzIGV4cGVjdGVkLlwiLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveVN0YWNrKG9wdGlvbnM6IERlc3Ryb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JNdXRhYmxlU3RhY2tPcGVyYXRpb25zKG9wdGlvbnMuc3RhY2spO1xuICAgIGNvbnN0IGV4ZWN1dGlvblJvbGVBcm4gPSBhd2FpdCBlbnYucmVwbGFjZVBsYWNlaG9sZGVycyhvcHRpb25zLnJvbGVBcm4gPz8gb3B0aW9ucy5zdGFjay5jbG91ZEZvcm1hdGlvbkV4ZWN1dGlvblJvbGVBcm4pO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdGFjayh7XG4gICAgICBzZGs6IGVudi5zZGssXG4gICAgICByb2xlQXJuOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgICAgc3RhY2s6IG9wdGlvbnMuc3RhY2ssXG4gICAgICBkZXBsb3lOYW1lOiBvcHRpb25zLmRlcGxveU5hbWUsXG4gICAgICBxdWlldDogb3B0aW9ucy5xdWlldCxcbiAgICAgIGNpOiBvcHRpb25zLmNpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YWNrRXhpc3RzKG9wdGlvbnM6IFN0YWNrRXhpc3RzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBlbnY7XG4gICAgaWYgKG9wdGlvbnMudHJ5TG9va3VwUm9sZSkge1xuICAgICAgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yTG9va3VwQmVzdEVmZm9ydChvcHRpb25zLnN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW52ID0gYXdhaXQgdGhpcy5lbnZzLmFjY2Vzc1N0YWNrRm9yUmVhZE9ubHlTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG4gICAgfVxuICAgIGNvbnN0IHN0YWNrID0gYXdhaXQgQ2xvdWRGb3JtYXRpb25TdGFjay5sb29rdXAoZW52LnNkay5jbG91ZEZvcm1hdGlvbigpLCBvcHRpb25zLmRlcGxveU5hbWUgPz8gb3B0aW9ucy5zdGFjay5zdGFja05hbWUpO1xuICAgIHJldHVybiBzdGFjay5leGlzdHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVBbmRWYWxpZGF0ZUFzc2V0cyhhc3NldDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0LCBvcHRpb25zOiBBc3NldE9wdGlvbnMpIHtcbiAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JNdXRhYmxlU3RhY2tPcGVyYXRpb25zKG9wdGlvbnMuc3RhY2spO1xuXG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZUJvb3RzdHJhcFN0YWNrVmVyc2lvbihcbiAgICAgIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgICAgYXNzZXQucmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb24sXG4gICAgICBhc3NldC5ib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXIsXG4gICAgICBlbnYucmVzb3VyY2VzKTtcblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gY2RrX2Fzc2V0cy5Bc3NldE1hbmlmZXN0LmZyb21GaWxlKGFzc2V0LmZpbGUpO1xuXG4gICAgcmV0dXJuIHsgbWFuaWZlc3QsIHN0YWNrRW52OiBlbnYucmVzb2x2ZWRFbnZpcm9ubWVudCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFsbCBhc3NldHMgaW4gYSBtYW5pZmVzdFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGJ1aWxkU2luZ2xlQXNzZXRgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBidWlsZEFzc2V0cyhhc3NldDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0LCBvcHRpb25zOiBCdWlsZFN0YWNrQXNzZXRzT3B0aW9ucykge1xuICAgIGNvbnN0IHsgbWFuaWZlc3QsIHN0YWNrRW52IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVBbmRWYWxpZGF0ZUFzc2V0cyhhc3NldCwgb3B0aW9ucyk7XG4gICAgYXdhaXQgYnVpbGRBc3NldHMobWFuaWZlc3QsIHRoaXMuYXNzZXRTZGtQcm92aWRlciwgc3RhY2tFbnYsIG9wdGlvbnMuYnVpbGRPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGFsbCBhc3NldHMgaW4gYSBtYW5pZmVzdFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHB1Ymxpc2hTaW5nbGVBc3NldGAgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2hBc3NldHMoYXNzZXQ6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdCwgb3B0aW9uczogUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucykge1xuICAgIGNvbnN0IHsgbWFuaWZlc3QsIHN0YWNrRW52IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVBbmRWYWxpZGF0ZUFzc2V0cyhhc3NldCwgb3B0aW9ucyk7XG4gICAgYXdhaXQgcHVibGlzaEFzc2V0cyhtYW5pZmVzdCwgdGhpcy5hc3NldFNka1Byb3ZpZGVyLCBzdGFja0Vudiwge1xuICAgICAgLi4ub3B0aW9ucy5wdWJsaXNoT3B0aW9ucyxcbiAgICAgIGFsbG93Q3Jvc3NBY2NvdW50OiBhd2FpdCB0aGlzLmFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nRm9yRW52KG9wdGlvbnMuc3RhY2spLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgc2luZ2xlIGFzc2V0IGZyb20gYW4gYXNzZXQgbWFuaWZlc3RcbiAgICpcbiAgICogSWYgYW4gYXNzZXJ0IG1hbmlmZXN0IGFydGlmYWN0IGlzIGdpdmVuLCB0aGUgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb25cbiAgICogd2lsbCBiZSB2YWxpZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25zdHJhaW50cyBpbiB0aGF0IG1hbmlmZXN0IGFydGlmYWN0LlxuICAgKiBJZiB0aGF0IGlzIG5vdCBuZWNlc3NhcnksIGAnbm8tdmVyc2lvbi12YWxpZGF0aW9uJ2AgY2FuIGJlIHBhc3NlZC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gIHB1YmxpYyBhc3luYyBidWlsZFNpbmdsZUFzc2V0KFxuICAgIGFzc2V0QXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdCB8ICduby12ZXJzaW9uLXZhbGlkYXRpb24nLFxuICAgIGFzc2V0TWFuaWZlc3Q6IGNka19hc3NldHMuQXNzZXRNYW5pZmVzdCxcbiAgICBhc3NldDogY2RrX2Fzc2V0cy5JTWFuaWZlc3RFbnRyeSxcbiAgICBvcHRpb25zOiBCdWlsZFN0YWNrQXNzZXRzT3B0aW9ucyxcbiAgKSB7XG4gICAgaWYgKGFzc2V0QXJ0aWZhY3QgIT09ICduby12ZXJzaW9uLXZhbGlkYXRpb24nKSB7XG4gICAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmVudnMuYWNjZXNzU3RhY2tGb3JSZWFkT25seVN0YWNrT3BlcmF0aW9ucyhvcHRpb25zLnN0YWNrKTtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgICAgIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgICAgICBhc3NldEFydGlmYWN0LnJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uLFxuICAgICAgICBhc3NldEFydGlmYWN0LmJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcixcbiAgICAgICAgZW52LnJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRFbnZpcm9ubWVudCA9IGF3YWl0IHRoaXMuZW52cy5yZXNvbHZlU3RhY2tFbnZpcm9ubWVudChvcHRpb25zLnN0YWNrKTtcblxuICAgIGNvbnN0IHB1Ymxpc2hlciA9IHRoaXMuY2FjaGVkUHVibGlzaGVyKGFzc2V0TWFuaWZlc3QsIHJlc29sdmVkRW52aXJvbm1lbnQsIG9wdGlvbnMuc3RhY2tOYW1lKTtcbiAgICBhd2FpdCBwdWJsaXNoZXIuYnVpbGRFbnRyeShhc3NldCk7XG4gICAgaWYgKHB1Ymxpc2hlci5oYXNGYWlsdXJlcykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRmFpbGVkIHRvIGJ1aWxkIGFzc2V0ICR7YXNzZXQuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggYSBzaW5nbGUgYXNzZXQgZnJvbSBhbiBhc3NldCBtYW5pZmVzdFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2hTaW5nbGVBc3NldChcbiAgICBhc3NldE1hbmlmZXN0OiBjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsXG4gICAgYXNzZXQ6IGNka19hc3NldHMuSU1hbmlmZXN0RW50cnksXG4gICAgb3B0aW9uczogUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgc3RhY2tFbnYgPSBhd2FpdCB0aGlzLmVudnMucmVzb2x2ZVN0YWNrRW52aXJvbm1lbnQob3B0aW9ucy5zdGFjayk7XG5cbiAgICAvLyBObyBuZWVkIHRvIHZhbGlkYXRlIGFueW1vcmUsIHdlIGFscmVhZHkgZGlkIHRoYXQgZHVyaW5nIGJ1aWxkXG4gICAgY29uc3QgcHVibGlzaGVyID0gdGhpcy5jYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdCwgc3RhY2tFbnYsIG9wdGlvbnMuc3RhY2tOYW1lKTtcbiAgICBhd2FpdCBwdWJsaXNoZXIucHVibGlzaEVudHJ5KGFzc2V0LCB7IGFsbG93Q3Jvc3NBY2NvdW50OiBhd2FpdCB0aGlzLmFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nRm9yRW52KG9wdGlvbnMuc3RhY2spIH0pO1xuICAgIGlmIChwdWJsaXNoZXIuaGFzRmFpbHVyZXMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEZhaWxlZCB0byBwdWJsaXNoIGFzc2V0ICR7YXNzZXQuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZ0ZvckVudihzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZW52cy5hY2Nlc3NTdGFja0ZvclJlYWRPbmx5U3RhY2tPcGVyYXRpb25zKHN0YWNrKTtcbiAgICAgIHRoaXMuX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nID0gYXdhaXQgZGV0ZXJtaW5lQWxsb3dDcm9zc0FjY291bnRBc3NldFB1Ymxpc2hpbmcoZW52LnNkaywgdGhpcy5wcm9wcy50b29sa2l0U3RhY2tOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIGEgc2luZ2xlIGFzc2V0IGhhcyBiZWVuIHB1Ymxpc2hlZCBhbHJlYWR5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNTaW5nbGVBc3NldFB1Ymxpc2hlZChcbiAgICBhc3NldE1hbmlmZXN0OiBjZGtfYXNzZXRzLkFzc2V0TWFuaWZlc3QsXG4gICAgYXNzZXQ6IGNka19hc3NldHMuSU1hbmlmZXN0RW50cnksXG4gICAgb3B0aW9uczogUHVibGlzaFN0YWNrQXNzZXRzT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgc3RhY2tFbnYgPSBhd2FpdCB0aGlzLmVudnMucmVzb2x2ZVN0YWNrRW52aXJvbm1lbnQob3B0aW9ucy5zdGFjayk7XG4gICAgY29uc3QgcHVibGlzaGVyID0gdGhpcy5jYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdCwgc3RhY2tFbnYsIG9wdGlvbnMuc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gcHVibGlzaGVyLmlzRW50cnlQdWJsaXNoZWQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGJvb3RzdHJhcCBzdGFjayBoYXMgdGhlIHJpZ2h0IHZlcnNpb24gZm9yIHRoaXMgc3RhY2tcbiAgICpcbiAgICogQ2FsbCBpbnRvIGVudlJlc291cmNlcy52YWxpZGF0ZVZlcnNpb24sIGJ1dCBwcmVwZW5kIHRoZSBzdGFjayBuYW1lIGluIGNhc2Ugb2YgZmFpbHVyZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVCb290c3RyYXBTdGFja1ZlcnNpb24oXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBlbnZSZXNvdXJjZXM6IEVudmlyb25tZW50UmVzb3VyY2VzLFxuICApIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZW52UmVzb3VyY2VzLnZhbGlkYXRlVmVyc2lvbihyZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbiwgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYCR7c3RhY2tOYW1lfTogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZWRQdWJsaXNoZXIoYXNzZXRNYW5pZmVzdDogY2RrX2Fzc2V0cy5Bc3NldE1hbmlmZXN0LCBlbnY6IGN4YXBpLkVudmlyb25tZW50LCBzdGFja05hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMucHVibGlzaGVyQ2FjaGUuZ2V0KGFzc2V0TWFuaWZlc3QpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSBzdGFja05hbWUgPyBgJHtjaGFsay5ib2xkKHN0YWNrTmFtZSl9OiBgIDogJyc7XG4gICAgY29uc3QgcHVibGlzaGVyID0gbmV3IGNka19hc3NldHMuQXNzZXRQdWJsaXNoaW5nKGFzc2V0TWFuaWZlc3QsIHtcbiAgICAgIC8vIFRoZSBBc3NldFB1Ymxpc2hpbmcgY2xhc3MgdGFrZXMgY2FyZSBvZiByb2xlIGFzc3VtaW5nIGV0Yywgc28gaXQncyBva2F5IHRvXG4gICAgICAvLyBnaXZlIGl0IGEgZGlyZWN0IGBTZGtQcm92aWRlcmAuXG4gICAgICBhd3M6IG5ldyBQdWJsaXNoaW5nQXdzKHRoaXMuYXNzZXRTZGtQcm92aWRlciwgZW52KSxcbiAgICAgIHByb2dyZXNzTGlzdGVuZXI6IG5ldyBQYXJhbGxlbFNhZmVBc3NldFByb2dyZXNzKHByZWZpeCwgdGhpcy5wcm9wcy5xdWlldCA/PyBmYWxzZSksXG4gICAgfSk7XG4gICAgdGhpcy5wdWJsaXNoZXJDYWNoZS5zZXQoYXNzZXRNYW5pZmVzdCwgcHVibGlzaGVyKTtcbiAgICByZXR1cm4gcHVibGlzaGVyO1xuICB9XG59XG5cbi8qKlxuICogQXNzZXQgcHJvZ3Jlc3MgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggcGVyY2VudGFnZXMgKGN1cnJlbnRseSlcbiAqL1xuY2xhc3MgUGFyYWxsZWxTYWZlQXNzZXRQcm9ncmVzcyBpbXBsZW1lbnRzIGNka19hc3NldHMuSVB1Ymxpc2hQcm9ncmVzc0xpc3RlbmVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1aWV0OiBib29sZWFuLFxuICApIHt9XG5cbiAgcHVibGljIG9uUHVibGlzaEV2ZW50KHR5cGU6IGNka19hc3NldHMuRXZlbnRUeXBlLCBldmVudDogY2RrX2Fzc2V0cy5JUHVibGlzaFByb2dyZXNzKTogdm9pZCB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMucXVpZXQgJiYgdHlwZSAhPT0gJ2ZhaWwnID8gZGVidWcgOiBFVkVOVF9UT19MT0dHRVJbdHlwZV07XG4gICAgaGFuZGxlcihgJHt0aGlzLnByZWZpeH0ke3R5cGV9OiAke2V2ZW50Lm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VmZml4V2l0aEVycm9ycyhtc2c6IHN0cmluZywgZXJyb3JzPzogc3RyaW5nW10pIHtcbiAgcmV0dXJuIGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCA/IGAke21zZ306ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCA6IG1zZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as cxapi from '@aws-cdk/cx-api';
|
|
2
|
+
import type { SdkProvider } from '../aws-auth';
|
|
3
|
+
import type { CloudFormationStack } from './cloudformation';
|
|
4
|
+
import { HotswapMode, HotswapPropertyOverrides } from '../hotswap/common';
|
|
5
|
+
import { SuccessfulDeployStackResult } from './deployment-result';
|
|
6
|
+
/**
|
|
7
|
+
* Perform a hotswap deployment, short-circuiting CloudFormation if possible.
|
|
8
|
+
* If it's not possible to short-circuit the deployment
|
|
9
|
+
* (because the CDK Stack contains changes that cannot be deployed without CloudFormation),
|
|
10
|
+
* returns `undefined`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function tryHotswapDeployment(sdkProvider: SdkProvider, assetParams: {
|
|
13
|
+
[key: string]: string;
|
|
14
|
+
}, cloudFormationStack: CloudFormationStack, stackArtifact: cxapi.CloudFormationStackArtifact, hotswapMode: HotswapMode, hotswapPropertyOverrides: HotswapPropertyOverrides): Promise<SuccessfulDeployStackResult | undefined>;
|