@aws-cdk/toolkit-lib 0.3.1 → 0.3.3
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 +1 -1
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/bootstrap/index.d.ts +1 -1
- package/lib/actions/bootstrap/index.js +5 -5
- package/lib/actions/deploy/index.d.ts +1 -1
- package/lib/actions/deploy/index.js +1 -1
- package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
- package/lib/actions/deploy/private/deploy-options.js +1 -1
- package/lib/actions/deploy/private/helpers.d.ts +3 -2
- package/lib/actions/deploy/private/helpers.js +3 -3
- package/lib/actions/diff/private/helpers.d.ts +5 -9
- package/lib/actions/diff/private/helpers.js +6 -23
- package/lib/api/aws-auth/account-cache.d.ts +41 -0
- package/lib/api/aws-auth/account-cache.js +108 -0
- package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
- package/lib/api/aws-auth/awscli-compatible.js +250 -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 +38 -0
- package/lib/api/aws-auth/credential-plugins.js +154 -0
- package/lib/api/aws-auth/private/index.d.ts +11 -0
- package/lib/api/aws-auth/private/index.js +37 -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/proxy-agent.d.ts +13 -0
- package/lib/api/aws-auth/proxy-agent.js +54 -0
- package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
- package/lib/api/aws-auth/sdk-logger.js +128 -0
- package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
- package/lib/api/aws-auth/sdk-provider.js +373 -0
- package/lib/api/aws-auth/sdk.d.ts +235 -0
- package/lib/api/aws-auth/sdk.js +391 -0
- package/lib/api/aws-auth/tracing.d.ts +11 -0
- package/lib/api/aws-auth/tracing.js +60 -0
- package/lib/api/aws-auth/types.d.ts +79 -1
- package/lib/api/aws-auth/types.js +74 -1
- package/lib/api/aws-auth/user-agent.d.ts +7 -0
- package/lib/api/aws-auth/user-agent.js +20 -0
- package/lib/api/aws-auth/util.d.ts +6 -0
- package/lib/api/aws-auth/util.js +21 -0
- package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
- package/lib/api/bootstrap/bootstrap-environment.js +323 -0
- package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
- package/lib/api/bootstrap/bootstrap-props.js +14 -0
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
- package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
- package/lib/api/bootstrap/index.d.ts +3 -0
- package/lib/api/bootstrap/index.js +23 -0
- package/lib/api/bootstrap/legacy-template.d.ts +2 -0
- package/lib/api/bootstrap/legacy-template.js +82 -0
- package/lib/api/cloud-assembly/environment.d.ts +43 -0
- package/lib/api/cloud-assembly/environment.js +127 -0
- package/lib/api/cloud-assembly/index.d.ts +1 -1
- package/lib/api/cloud-assembly/index.js +3 -3
- package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
- package/lib/api/cloud-assembly/private/context-aware-source.js +5 -5
- package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
- package/lib/api/cloud-assembly/private/prepare-source.js +14 -12
- package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
- package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
- package/lib/api/cloud-assembly/private/source-builder.js +10 -8
- package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
- package/lib/api/cloud-assembly/private/stack-assembly.js +10 -9
- package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
- package/lib/api/cloud-assembly/stack-assembly.js +139 -0
- package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
- package/lib/api/cloud-assembly/stack-collection.js +112 -0
- package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
- package/lib/api/cloud-assembly/stack-selector.js +62 -5
- package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
- package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
- package/lib/api/cloudformation/index.d.ts +4 -0
- package/lib/api/cloudformation/index.js +21 -0
- package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
- package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
- package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
- package/lib/api/cloudformation/stack-helpers.js +163 -0
- package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
- package/lib/api/cloudformation/template-body-parameter.js +104 -0
- package/lib/api/context.d.ts +40 -0
- package/lib/api/context.js +84 -0
- package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
- package/lib/api/deployments/asset-manifest-builder.js +33 -0
- package/lib/api/deployments/asset-publishing.d.ts +60 -0
- package/lib/api/deployments/asset-publishing.js +144 -0
- package/lib/api/deployments/assets.d.ts +11 -0
- package/lib/api/deployments/assets.js +109 -0
- package/lib/api/deployments/cfn-api.d.ts +145 -0
- package/lib/api/deployments/cfn-api.js +444 -0
- package/lib/api/deployments/checks.d.ts +9 -0
- package/lib/api/deployments/checks.js +72 -0
- package/lib/api/deployments/deploy-stack.d.ts +164 -0
- package/lib/api/deployments/deploy-stack.js +490 -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 +289 -0
- package/lib/api/deployments/deployments.js +355 -0
- package/lib/api/deployments/index.d.ts +6 -0
- package/lib/api/deployments/index.js +27 -0
- package/lib/api/diff/diff-formatter.d.ts +147 -0
- package/lib/api/diff/diff-formatter.js +225 -0
- package/lib/api/diff/index.d.ts +1 -0
- package/lib/api/diff/index.js +18 -0
- package/lib/api/environment/environment-access.d.ts +139 -0
- package/lib/api/environment/environment-access.js +205 -0
- package/lib/api/environment/environment-resources.d.ts +75 -0
- package/lib/api/environment/environment-resources.js +213 -0
- package/lib/api/environment/index.d.ts +3 -0
- package/lib/api/environment/index.js +20 -0
- package/lib/api/environment/placeholders.d.ts +10 -0
- package/lib/api/environment/placeholders.js +23 -0
- package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
- package/lib/api/garbage-collection/garbage-collector.js +614 -0
- package/lib/api/garbage-collection/index.d.ts +3 -0
- package/lib/api/garbage-collection/index.js +21 -0
- package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
- package/lib/api/garbage-collection/progress-printer.js +80 -0
- package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
- package/lib/api/garbage-collection/stack-refresh.js +152 -0
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
- package/lib/api/hotswap/code-build-projects.d.ts +4 -0
- package/lib/api/hotswap/code-build-projects.js +62 -0
- package/lib/api/hotswap/common.d.ts +89 -0
- package/lib/api/hotswap/common.js +137 -0
- package/lib/api/hotswap/ecs-services.d.ts +4 -0
- package/lib/api/hotswap/ecs-services.js +159 -0
- package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
- package/lib/api/hotswap/hotswap-deployments.js +441 -0
- package/lib/api/hotswap/index.d.ts +2 -0
- package/lib/api/hotswap/index.js +19 -0
- package/lib/api/hotswap/lambda-functions.d.ts +4 -0
- package/lib/api/hotswap/lambda-functions.js +297 -0
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
- package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
- package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
- package/lib/api/index.d.ts +25 -0
- package/lib/api/index.js +42 -0
- package/lib/api/io/index.d.ts +3 -1
- package/lib/api/io/index.js +18 -1
- package/lib/api/io/io-host.d.ts +15 -0
- package/lib/api/io/io-host.js +3 -0
- package/lib/api/io/io-message.d.ts +76 -0
- package/lib/api/io/io-message.js +3 -0
- package/lib/api/io/private/index.d.ts +7 -1
- package/lib/api/io/private/index.js +8 -5
- package/lib/api/io/private/io-default-messages.d.ts +21 -0
- package/lib/api/io/private/io-default-messages.js +59 -0
- package/lib/api/io/private/io-helper.d.ts +32 -0
- package/lib/api/io/private/io-helper.js +51 -0
- package/lib/api/io/private/level-priority.d.ts +11 -0
- package/lib/api/io/private/level-priority.js +33 -0
- package/lib/api/io/private/message-maker.d.ts +89 -0
- package/lib/api/io/private/message-maker.js +60 -0
- package/lib/api/io/private/messages.d.ts +178 -0
- package/lib/api/io/private/messages.js +534 -0
- package/lib/api/io/private/span.d.ts +93 -0
- package/lib/api/io/private/span.js +87 -0
- package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
- package/lib/api/io/private/testing/fake-io-host.js +41 -0
- package/lib/api/io/private/testing/index.d.ts +2 -0
- package/lib/api/io/private/testing/index.js +19 -0
- package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
- package/lib/api/io/private/testing/test-io-host.js +61 -0
- package/lib/api/io/private/types.d.ts +4 -0
- package/lib/api/io/private/types.js +3 -0
- package/lib/api/io/toolkit-action.d.ts +4 -0
- package/lib/api/io/toolkit-action.js +3 -0
- package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
- package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
- package/lib/api/logs-monitor/index.d.ts +2 -0
- package/lib/api/logs-monitor/index.js +19 -0
- package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
- package/lib/api/logs-monitor/logs-monitor.js +194 -0
- package/lib/api/notices.d.ts +210 -0
- package/lib/api/notices.js +430 -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 +72 -0
- package/lib/api/plugin/plugin.js +132 -0
- package/lib/api/private.d.ts +1 -0
- package/lib/api/private.js +18 -0
- package/lib/api/refactoring/cloudformation.d.ts +15 -0
- package/lib/api/refactoring/cloudformation.js +3 -0
- package/lib/api/refactoring/digest.d.ts +26 -0
- package/lib/api/refactoring/digest.js +175 -0
- package/lib/api/refactoring/index.d.ts +51 -0
- package/lib/api/refactoring/index.js +223 -0
- package/lib/api/require-approval.d.ts +17 -0
- package/lib/api/require-approval.js +22 -0
- package/lib/api/resource-import/importer.d.ts +216 -0
- package/lib/api/resource-import/importer.js +331 -0
- package/lib/api/resource-import/index.d.ts +2 -0
- package/lib/api/resource-import/index.js +19 -0
- package/lib/api/resource-import/migrator.d.ts +26 -0
- package/lib/api/resource-import/migrator.js +73 -0
- package/lib/api/resource-metadata/index.d.ts +1 -0
- package/lib/api/resource-metadata/index.js +18 -0
- package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
- package/lib/api/resource-metadata/resource-metadata.js +42 -0
- package/lib/api/rwlock.d.ts +60 -0
- package/lib/api/rwlock.js +204 -0
- package/lib/api/settings.d.ts +26 -0
- package/lib/api/settings.js +107 -0
- package/lib/api/shared-private.d.ts +8 -5
- package/lib/api/shared-private.js +2921 -9246
- package/lib/api/shared-private.js.map +4 -4
- package/lib/api/shared-public.d.ts +179 -37
- package/lib/api/shared-public.js +3106 -16
- package/lib/api/shared-public.js.map +4 -4
- package/lib/api/stack-events/index.d.ts +4 -0
- package/lib/api/stack-events/index.js +23 -0
- package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
- package/lib/api/stack-events/stack-activity-monitor.js +164 -0
- package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
- package/lib/api/stack-events/stack-event-poller.js +130 -0
- package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
- package/lib/api/stack-events/stack-progress-monitor.js +98 -0
- package/lib/api/stack-events/stack-status.d.ts +42 -0
- package/lib/api/stack-events/stack-status.js +90 -0
- package/lib/api/streams.d.ts +7 -0
- package/lib/api/streams.js +24 -0
- package/lib/api/tags.d.ts +9 -0
- package/lib/api/tags.js +10 -0
- package/lib/api/toolkit-error.d.ts +86 -0
- package/lib/api/toolkit-error.js +132 -0
- package/lib/api/toolkit-info.d.ts +52 -0
- package/lib/api/toolkit-info.js +157 -0
- package/lib/api/tree.d.ts +31 -0
- package/lib/api/tree.js +37 -0
- package/lib/api/work-graph/index.d.ts +3 -0
- package/lib/api/work-graph/index.js +20 -0
- package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
- package/lib/api/work-graph/work-graph-builder.js +172 -0
- package/lib/api/work-graph/work-graph-types.d.ts +50 -0
- package/lib/api/work-graph/work-graph-types.js +13 -0
- package/lib/api/work-graph/work-graph.d.ts +72 -0
- package/lib/api/work-graph/work-graph.js +349 -0
- package/lib/context-providers/ami.d.ts +13 -0
- package/lib/context-providers/ami.js +52 -0
- package/lib/context-providers/availability-zones.d.ts +13 -0
- package/lib/context-providers/availability-zones.js +29 -0
- package/lib/context-providers/cc-api-provider.d.ts +30 -0
- package/lib/context-providers/cc-api-provider.js +145 -0
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
- package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
- package/lib/context-providers/hosted-zones.d.ts +12 -0
- package/lib/context-providers/hosted-zones.js +69 -0
- package/lib/context-providers/index.d.ts +44 -0
- package/lib/context-providers/index.js +128 -0
- package/lib/context-providers/keys.d.ts +13 -0
- package/lib/context-providers/keys.js +54 -0
- package/lib/context-providers/load-balancers.d.ts +20 -0
- package/lib/context-providers/load-balancers.js +161 -0
- package/lib/context-providers/security-groups.d.ts +9 -0
- package/lib/context-providers/security-groups.js +69 -0
- package/lib/context-providers/ssm-parameters.d.ts +25 -0
- package/lib/context-providers/ssm-parameters.js +61 -0
- package/lib/context-providers/vpcs.d.ts +13 -0
- package/lib/context-providers/vpcs.js +291 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index_bg.wasm +0 -0
- package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
- package/lib/payloads/bootstrap-environment-progress.js +3 -0
- package/lib/payloads/context.d.ts +9 -0
- package/lib/payloads/context.js +3 -0
- package/lib/payloads/deploy.d.ts +43 -0
- package/lib/payloads/deploy.js +3 -0
- package/lib/payloads/destroy.d.ts +23 -0
- package/lib/payloads/destroy.js +3 -0
- package/lib/payloads/diff.d.ts +31 -0
- package/lib/payloads/diff.js +22 -0
- package/lib/payloads/hotswap.d.ts +211 -0
- package/lib/payloads/hotswap.js +43 -0
- package/lib/payloads/index.d.ts +17 -0
- package/lib/payloads/index.js +34 -0
- package/lib/payloads/list.d.ts +4 -0
- package/lib/payloads/list.js +3 -0
- package/lib/payloads/logs-monitor.d.ts +33 -0
- package/lib/payloads/logs-monitor.js +3 -0
- package/lib/payloads/progress.d.ts +14 -0
- package/lib/payloads/progress.js +3 -0
- package/lib/payloads/refactor.d.ts +14 -0
- package/lib/payloads/refactor.js +3 -0
- package/lib/payloads/rollback.d.ts +17 -0
- package/lib/payloads/rollback.js +3 -0
- package/lib/payloads/sdk-trace.d.ts +20 -0
- package/lib/payloads/sdk-trace.js +3 -0
- package/lib/payloads/stack-activity.d.ts +53 -0
- package/lib/payloads/stack-activity.js +3 -0
- package/lib/payloads/stack-details.d.ts +17 -0
- package/lib/payloads/stack-details.js +3 -0
- package/lib/payloads/synth.d.ts +7 -0
- package/lib/payloads/synth.js +3 -0
- package/lib/payloads/types.d.ts +95 -0
- package/lib/payloads/types.js +3 -0
- package/lib/payloads/watch.d.ts +27 -0
- package/lib/payloads/watch.js +3 -0
- package/lib/private/activity-printer/base.d.ts +50 -0
- package/lib/private/activity-printer/base.js +120 -0
- package/lib/private/activity-printer/current.d.ts +26 -0
- package/lib/private/activity-printer/current.js +122 -0
- package/lib/private/activity-printer/display.d.ts +13 -0
- package/lib/private/activity-printer/display.js +81 -0
- package/lib/private/activity-printer/history.d.ts +32 -0
- package/lib/private/activity-printer/history.js +109 -0
- package/lib/private/activity-printer/index.d.ts +3 -0
- package/lib/private/activity-printer/index.js +20 -0
- package/lib/private/index.d.ts +1 -0
- package/lib/private/index.js +18 -0
- package/lib/private/util.d.ts +1 -1
- package/lib/private/util.js +22 -22
- package/lib/private/util.js.map +2 -2
- package/lib/toolkit/private/index.d.ts +2 -0
- package/lib/toolkit/private/index.js +1 -1
- package/lib/toolkit/toolkit.d.ts +16 -0
- package/lib/toolkit/toolkit.js +158 -124
- package/lib/toolkit/types.d.ts +0 -55
- package/lib/toolkit/types.js +1 -1
- 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/cloudformation.d.ts +16 -0
- package/lib/util/cloudformation.js +36 -0
- package/lib/util/content-hash.d.ts +5 -0
- package/lib/util/content-hash.js +43 -0
- package/lib/util/directories.d.ts +22 -0
- package/lib/util/directories.js +59 -0
- package/lib/util/format-error.d.ts +9 -0
- package/lib/util/format-error.js +22 -0
- package/lib/util/index.d.ts +18 -0
- package/lib/util/index.js +35 -0
- package/lib/util/json.d.ts +48 -0
- package/lib/util/json.js +68 -0
- package/lib/util/objects.d.ts +65 -0
- package/lib/util/objects.js +230 -0
- package/lib/util/package-info.d.ts +3 -0
- package/lib/util/package-info.js +22 -0
- package/lib/util/parallel.d.ts +6 -0
- package/lib/util/parallel.js +48 -0
- package/lib/util/serialize.d.ts +27 -0
- package/lib/util/serialize.js +86 -0
- package/lib/util/string-manipulation.d.ts +18 -0
- package/lib/util/string-manipulation.js +46 -0
- package/lib/util/type-brands.d.ts +39 -0
- package/lib/util/type-brands.js +39 -0
- package/lib/util/types.d.ts +27 -0
- package/lib/util/types.js +25 -0
- package/lib/util/version-range.d.ts +2 -0
- package/lib/util/version-range.js +36 -0
- package/lib/util/yaml-cfn.d.ts +15 -0
- package/lib/util/yaml-cfn.js +58 -0
- package/package.json +12 -13
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VpcNetworkContextProviderPlugin = void 0;
|
|
4
|
+
const cx_api_1 = require("@aws-cdk/cx-api");
|
|
5
|
+
const private_1 = require("../api/aws-auth/private");
|
|
6
|
+
const toolkit_error_1 = require("../api/toolkit-error");
|
|
7
|
+
class VpcNetworkContextProviderPlugin {
|
|
8
|
+
aws;
|
|
9
|
+
io;
|
|
10
|
+
constructor(aws, io) {
|
|
11
|
+
this.aws = aws;
|
|
12
|
+
this.io = io;
|
|
13
|
+
}
|
|
14
|
+
async getValue(args) {
|
|
15
|
+
const ec2 = (await (0, private_1.initContextProviderSdk)(this.aws, args)).ec2();
|
|
16
|
+
const vpcId = await this.findVpc(ec2, args);
|
|
17
|
+
return this.readVpcProps(ec2, vpcId, args);
|
|
18
|
+
}
|
|
19
|
+
async findVpc(ec2, args) {
|
|
20
|
+
// Build request filter (map { Name -> Value } to list of [{ Name, Values }])
|
|
21
|
+
const filters = Object.entries(args.filter).map(([tag, value]) => ({ Name: tag, Values: [value] }));
|
|
22
|
+
await this.io.debug(`Listing VPCs in ${args.account}:${args.region}`);
|
|
23
|
+
const response = await ec2.describeVpcs({ Filters: filters });
|
|
24
|
+
const vpcs = response.Vpcs || [];
|
|
25
|
+
if (vpcs.length === 0) {
|
|
26
|
+
throw new toolkit_error_1.ContextProviderError(`Could not find any VPCs matching ${JSON.stringify(args)}`);
|
|
27
|
+
}
|
|
28
|
+
if (vpcs.length > 1) {
|
|
29
|
+
throw new toolkit_error_1.ContextProviderError(`Found ${vpcs.length} VPCs matching ${JSON.stringify(args)}; please narrow the search criteria`);
|
|
30
|
+
}
|
|
31
|
+
return vpcs[0];
|
|
32
|
+
}
|
|
33
|
+
async readVpcProps(ec2, vpc, args) {
|
|
34
|
+
const vpcId = vpc.VpcId;
|
|
35
|
+
await this.io.debug(`Describing VPC ${vpcId}`);
|
|
36
|
+
const filters = { Filters: [{ Name: 'vpc-id', Values: [vpcId] }] };
|
|
37
|
+
const subnetsResponse = await ec2.describeSubnets(filters);
|
|
38
|
+
const listedSubnets = subnetsResponse.Subnets || [];
|
|
39
|
+
const routeTablesResponse = await ec2.describeRouteTables(filters);
|
|
40
|
+
const routeTables = new RouteTables(routeTablesResponse.RouteTables || []);
|
|
41
|
+
// Now comes our job to separate these subnets out into AZs and subnet groups (Public, Private, Isolated)
|
|
42
|
+
// We have the following attributes to go on:
|
|
43
|
+
// - Type tag, we tag subnets with their type. In absence of this tag, we
|
|
44
|
+
// determine the subnet must be Public if either:
|
|
45
|
+
// a) it has the property MapPublicIpOnLaunch
|
|
46
|
+
// b) it has a route to an Internet Gateway
|
|
47
|
+
// If both of the above is false but the subnet has a route to a NAT Gateway
|
|
48
|
+
// and the destination CIDR block is "0.0.0.0/0", we assume it to be a Private subnet.
|
|
49
|
+
// Anything else is considered Isolated.
|
|
50
|
+
// - Name tag, we tag subnets with their subnet group name. In absence of this tag,
|
|
51
|
+
// we use the type as the name.
|
|
52
|
+
const azs = Array.from(new Set(listedSubnets.map((s) => s.AvailabilityZone)));
|
|
53
|
+
azs.sort();
|
|
54
|
+
const subnets = listedSubnets.map((subnet) => {
|
|
55
|
+
let type = getTag('aws-cdk:subnet-type', subnet.Tags);
|
|
56
|
+
if (type === undefined && subnet.MapPublicIpOnLaunch) {
|
|
57
|
+
type = SubnetType.Public;
|
|
58
|
+
}
|
|
59
|
+
if (type === undefined && routeTables.hasRouteToIgw(subnet.SubnetId)) {
|
|
60
|
+
type = SubnetType.Public;
|
|
61
|
+
}
|
|
62
|
+
if (type === undefined && routeTables.hasRouteToNatGateway(subnet.SubnetId)) {
|
|
63
|
+
type = SubnetType.Private;
|
|
64
|
+
}
|
|
65
|
+
if (type === undefined && routeTables.hasRouteToTransitGateway(subnet.SubnetId)) {
|
|
66
|
+
type = SubnetType.Private;
|
|
67
|
+
}
|
|
68
|
+
if (type === undefined) {
|
|
69
|
+
type = SubnetType.Isolated;
|
|
70
|
+
}
|
|
71
|
+
if (!isValidSubnetType(type)) {
|
|
72
|
+
// eslint-disable-next-line max-len
|
|
73
|
+
throw new toolkit_error_1.ContextProviderError(`Subnet ${subnet.SubnetArn} has invalid subnet type ${type} (must be ${SubnetType.Public}, ${SubnetType.Private} or ${SubnetType.Isolated})`);
|
|
74
|
+
}
|
|
75
|
+
if (args.subnetGroupNameTag && !getTag(args.subnetGroupNameTag, subnet.Tags)) {
|
|
76
|
+
throw new toolkit_error_1.ContextProviderError(`Invalid subnetGroupNameTag: Subnet ${subnet.SubnetArn} does not have an associated tag with Key='${args.subnetGroupNameTag}'`);
|
|
77
|
+
}
|
|
78
|
+
const name = getTag(args.subnetGroupNameTag || 'aws-cdk:subnet-name', subnet.Tags) || type;
|
|
79
|
+
const routeTableId = routeTables.routeTableIdForSubnetId(subnet.SubnetId);
|
|
80
|
+
if (!routeTableId) {
|
|
81
|
+
throw new toolkit_error_1.ContextProviderError(`Subnet ${subnet.SubnetArn} does not have an associated route table (and there is no "main" table)`);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
az: subnet.AvailabilityZone,
|
|
85
|
+
cidr: subnet.CidrBlock,
|
|
86
|
+
type,
|
|
87
|
+
name,
|
|
88
|
+
subnetId: subnet.SubnetId,
|
|
89
|
+
routeTableId,
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
let grouped;
|
|
93
|
+
let assymetricSubnetGroups;
|
|
94
|
+
if (args.returnAsymmetricSubnets) {
|
|
95
|
+
grouped = { azs: [], groups: [] };
|
|
96
|
+
assymetricSubnetGroups = groupAsymmetricSubnets(subnets);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
grouped = groupSubnets(subnets);
|
|
100
|
+
assymetricSubnetGroups = undefined;
|
|
101
|
+
}
|
|
102
|
+
// Find attached+available VPN gateway for this VPC
|
|
103
|
+
const vpnGatewayResponse = (args.returnVpnGateways ?? true)
|
|
104
|
+
? await ec2.describeVpnGateways({
|
|
105
|
+
Filters: [
|
|
106
|
+
{
|
|
107
|
+
Name: 'attachment.vpc-id',
|
|
108
|
+
Values: [vpcId],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
Name: 'attachment.state',
|
|
112
|
+
Values: ['attached'],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
Name: 'state',
|
|
116
|
+
Values: ['available'],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
})
|
|
120
|
+
: undefined;
|
|
121
|
+
const vpnGatewayId = vpnGatewayResponse?.VpnGateways?.length === 1 ? vpnGatewayResponse.VpnGateways[0].VpnGatewayId : undefined;
|
|
122
|
+
return {
|
|
123
|
+
vpcId,
|
|
124
|
+
vpcCidrBlock: vpc.CidrBlock,
|
|
125
|
+
ownerAccountId: vpc.OwnerId,
|
|
126
|
+
availabilityZones: grouped.azs,
|
|
127
|
+
isolatedSubnetIds: collapse(flatMap(findGroups(SubnetType.Isolated, grouped), (group) => group.subnets.map((s) => s.subnetId))),
|
|
128
|
+
isolatedSubnetNames: collapse(flatMap(findGroups(SubnetType.Isolated, grouped), (group) => (group.name ? [group.name] : []))),
|
|
129
|
+
isolatedSubnetRouteTableIds: collapse(flatMap(findGroups(SubnetType.Isolated, grouped), (group) => group.subnets.map((s) => s.routeTableId))),
|
|
130
|
+
privateSubnetIds: collapse(flatMap(findGroups(SubnetType.Private, grouped), (group) => group.subnets.map((s) => s.subnetId))),
|
|
131
|
+
privateSubnetNames: collapse(flatMap(findGroups(SubnetType.Private, grouped), (group) => (group.name ? [group.name] : []))),
|
|
132
|
+
privateSubnetRouteTableIds: collapse(flatMap(findGroups(SubnetType.Private, grouped), (group) => group.subnets.map((s) => s.routeTableId))),
|
|
133
|
+
publicSubnetIds: collapse(flatMap(findGroups(SubnetType.Public, grouped), (group) => group.subnets.map((s) => s.subnetId))),
|
|
134
|
+
publicSubnetNames: collapse(flatMap(findGroups(SubnetType.Public, grouped), (group) => (group.name ? [group.name] : []))),
|
|
135
|
+
publicSubnetRouteTableIds: collapse(flatMap(findGroups(SubnetType.Public, grouped), (group) => group.subnets.map((s) => s.routeTableId))),
|
|
136
|
+
vpnGatewayId,
|
|
137
|
+
subnetGroups: assymetricSubnetGroups,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.VpcNetworkContextProviderPlugin = VpcNetworkContextProviderPlugin;
|
|
142
|
+
class RouteTables {
|
|
143
|
+
tables;
|
|
144
|
+
mainRouteTable;
|
|
145
|
+
constructor(tables) {
|
|
146
|
+
this.tables = tables;
|
|
147
|
+
this.mainRouteTable = this.tables.find((table) => !!table.Associations && table.Associations.some((assoc) => !!assoc.Main));
|
|
148
|
+
}
|
|
149
|
+
routeTableIdForSubnetId(subnetId) {
|
|
150
|
+
const table = this.tableForSubnet(subnetId);
|
|
151
|
+
return (table && table.RouteTableId) || (this.mainRouteTable && this.mainRouteTable.RouteTableId);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Whether the given subnet has a route to a NAT Gateway
|
|
155
|
+
*/
|
|
156
|
+
hasRouteToNatGateway(subnetId) {
|
|
157
|
+
const table = this.tableForSubnet(subnetId) || this.mainRouteTable;
|
|
158
|
+
return (!!table &&
|
|
159
|
+
!!table.Routes &&
|
|
160
|
+
table.Routes.some((route) => !!route.NatGatewayId && route.DestinationCidrBlock === '0.0.0.0/0'));
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Whether the given subnet has a route to a Transit Gateway
|
|
164
|
+
*/
|
|
165
|
+
hasRouteToTransitGateway(subnetId) {
|
|
166
|
+
const table = this.tableForSubnet(subnetId) || this.mainRouteTable;
|
|
167
|
+
return (!!table &&
|
|
168
|
+
!!table.Routes &&
|
|
169
|
+
table.Routes.some((route) => !!route.TransitGatewayId && route.DestinationCidrBlock === '0.0.0.0/0'));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Whether the given subnet has a route to an IGW
|
|
173
|
+
*/
|
|
174
|
+
hasRouteToIgw(subnetId) {
|
|
175
|
+
const table = this.tableForSubnet(subnetId) || this.mainRouteTable;
|
|
176
|
+
return (!!table && !!table.Routes && table.Routes.some((route) => !!route.GatewayId && route.GatewayId.startsWith('igw-')));
|
|
177
|
+
}
|
|
178
|
+
tableForSubnet(subnetId) {
|
|
179
|
+
return this.tables.find((table) => !!table.Associations && table.Associations.some((assoc) => assoc.SubnetId === subnetId));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Return the value of a tag from a set of tags
|
|
184
|
+
*/
|
|
185
|
+
function getTag(name, tags) {
|
|
186
|
+
for (const tag of tags || []) {
|
|
187
|
+
if (tag.Key === name) {
|
|
188
|
+
return tag.Value;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Group subnets of the same type together, and order by AZ
|
|
195
|
+
*/
|
|
196
|
+
function groupSubnets(subnets) {
|
|
197
|
+
const grouping = {};
|
|
198
|
+
for (const subnet of subnets) {
|
|
199
|
+
const key = [subnet.type, subnet.name].toString();
|
|
200
|
+
if (!(key in grouping)) {
|
|
201
|
+
grouping[key] = [];
|
|
202
|
+
}
|
|
203
|
+
grouping[key].push(subnet);
|
|
204
|
+
}
|
|
205
|
+
const groups = Object.values(grouping).map((sns) => {
|
|
206
|
+
sns.sort((a, b) => a.az.localeCompare(b.az));
|
|
207
|
+
return {
|
|
208
|
+
type: sns[0].type,
|
|
209
|
+
name: sns[0].name,
|
|
210
|
+
subnets: sns,
|
|
211
|
+
};
|
|
212
|
+
});
|
|
213
|
+
const azs = groups[0].subnets.map((s) => s.az);
|
|
214
|
+
for (const group of groups) {
|
|
215
|
+
const groupAZs = group.subnets.map((s) => s.az);
|
|
216
|
+
if (!arraysEqual(groupAZs, azs)) {
|
|
217
|
+
throw new toolkit_error_1.ContextProviderError(`Not all subnets in VPC have the same AZs: ${groupAZs} vs ${azs}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return { azs, groups };
|
|
221
|
+
}
|
|
222
|
+
function groupAsymmetricSubnets(subnets) {
|
|
223
|
+
const grouping = {};
|
|
224
|
+
for (const subnet of subnets) {
|
|
225
|
+
const key = [subnet.type, subnet.name].toString();
|
|
226
|
+
if (!(key in grouping)) {
|
|
227
|
+
grouping[key] = [];
|
|
228
|
+
}
|
|
229
|
+
grouping[key].push(subnet);
|
|
230
|
+
}
|
|
231
|
+
return Object.values(grouping).map((subnetArray) => {
|
|
232
|
+
subnetArray.sort((subnet1, subnet2) => subnet1.az.localeCompare(subnet2.az));
|
|
233
|
+
return {
|
|
234
|
+
name: subnetArray[0].name,
|
|
235
|
+
type: subnetTypeToVpcSubnetType(subnetArray[0].type),
|
|
236
|
+
subnets: subnetArray.map((subnet) => ({
|
|
237
|
+
subnetId: subnet.subnetId,
|
|
238
|
+
cidr: subnet.cidr,
|
|
239
|
+
availabilityZone: subnet.az,
|
|
240
|
+
routeTableId: subnet.routeTableId,
|
|
241
|
+
})),
|
|
242
|
+
};
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function subnetTypeToVpcSubnetType(type) {
|
|
246
|
+
switch (type) {
|
|
247
|
+
case SubnetType.Isolated:
|
|
248
|
+
return cx_api_1.VpcSubnetGroupType.ISOLATED;
|
|
249
|
+
case SubnetType.Private:
|
|
250
|
+
return cx_api_1.VpcSubnetGroupType.PRIVATE;
|
|
251
|
+
case SubnetType.Public:
|
|
252
|
+
return cx_api_1.VpcSubnetGroupType.PUBLIC;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
var SubnetType;
|
|
256
|
+
(function (SubnetType) {
|
|
257
|
+
SubnetType["Public"] = "Public";
|
|
258
|
+
SubnetType["Private"] = "Private";
|
|
259
|
+
SubnetType["Isolated"] = "Isolated";
|
|
260
|
+
})(SubnetType || (SubnetType = {}));
|
|
261
|
+
function isValidSubnetType(val) {
|
|
262
|
+
return val === SubnetType.Public || val === SubnetType.Private || val === SubnetType.Isolated;
|
|
263
|
+
}
|
|
264
|
+
function arraysEqual(as, bs) {
|
|
265
|
+
if (as.length !== bs.length) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
for (let i = 0; i < as.length; i++) {
|
|
269
|
+
if (as[i] !== bs[i]) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
function findGroups(type, groups) {
|
|
276
|
+
return groups.groups.filter((g) => g.type === type);
|
|
277
|
+
}
|
|
278
|
+
function flatMap(xs, fn) {
|
|
279
|
+
const ret = new Array();
|
|
280
|
+
for (const x of xs) {
|
|
281
|
+
ret.push(...fn(x));
|
|
282
|
+
}
|
|
283
|
+
return ret;
|
|
284
|
+
}
|
|
285
|
+
function collapse(xs) {
|
|
286
|
+
if (xs.length > 0) {
|
|
287
|
+
return xs;
|
|
288
|
+
}
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQW1HO0FBR25HLHFEQUFpRTtBQUdqRSx3REFBNEQ7QUFFNUQsTUFBYSwrQkFBK0I7SUFDYjtJQUFtQztJQUFoRSxZQUE2QixHQUFnQixFQUFtQixFQUE0QjtRQUEvRCxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQTBCO0lBQzVGLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQXFCO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFBLGdDQUFzQixFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVqRSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQWUsRUFBRSxJQUFxQjtRQUMxRCw2RUFBNkU7UUFDN0UsTUFBTSxPQUFPLEdBQWEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlHLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFOUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FBQyxvQ0FBb0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksb0NBQW9CLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxrQkFBa0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNsSSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBZSxFQUFFLEdBQVEsRUFBRSxJQUFxQjtRQUN6RSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBTSxDQUFDO1FBRXpCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFL0MsTUFBTSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFbkUsTUFBTSxlQUFlLEdBQUcsTUFBTSxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRXBELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxHQUFHLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsbUJBQW1CLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLHlHQUF5RztRQUN6Ryw2Q0FBNkM7UUFDN0MseUVBQXlFO1FBQ3pFLG1EQUFtRDtRQUNuRCwrQ0FBK0M7UUFDL0MsNkNBQTZDO1FBQzdDLDhFQUE4RTtRQUM5RSx3RkFBd0Y7UUFDeEYsMENBQTBDO1FBQzFDLG1GQUFtRjtRQUNuRixpQ0FBaUM7UUFFakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBUyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkYsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVgsTUFBTSxPQUFPLEdBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3JELElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMzQixDQUFDO1lBQ0QsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM1RSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDaEYsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM3QixDQUFDO1lBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLG1DQUFtQztnQkFDbkMsTUFBTSxJQUFJLG9DQUFvQixDQUM1QixVQUFVLE1BQU0sQ0FBQyxTQUFTLDRCQUE0QixJQUFJLGFBQWEsVUFBVSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxPQUFPLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FDN0ksQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdFLE1BQU0sSUFBSSxvQ0FBb0IsQ0FDNUIsc0NBQXNDLE1BQU0sQ0FBQyxTQUFTLDhDQUE4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FDL0gsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDM0YsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUxRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sSUFBSSxvQ0FBb0IsQ0FDNUIsVUFBVSxNQUFNLENBQUMsU0FBUyx5RUFBeUUsQ0FDcEcsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPO2dCQUNMLEVBQUUsRUFBRSxNQUFNLENBQUMsZ0JBQWlCO2dCQUM1QixJQUFJLEVBQUUsTUFBTSxDQUFDLFNBQVU7Z0JBQ3ZCLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVM7Z0JBQzFCLFlBQVk7YUFDYixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQXFCLENBQUM7UUFDMUIsSUFBSSxzQkFBb0QsQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7UUFDckMsQ0FBQztRQUVELG1EQUFtRDtRQUNuRCxNQUFNLGtCQUFrQixHQUN0QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUM7WUFDOUIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLG1CQUFtQixDQUFDO2dCQUM5QixPQUFPLEVBQUU7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjt3QkFDekIsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDO3FCQUNoQjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUM7cUJBQ3JCO29CQUNEO3dCQUNFLElBQUksRUFBRSxPQUFPO3dCQUNiLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQztxQkFDdEI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixNQUFNLFlBQVksR0FDaEIsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUU3RyxPQUFPO1lBQ0wsS0FBSztZQUNMLFlBQVksRUFBRSxHQUFHLENBQUMsU0FBVTtZQUM1QixjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDM0IsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDOUIsaUJBQWlCLEVBQUUsUUFBUSxDQUN6QixPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDbkc7WUFDRCxtQkFBbUIsRUFBRSxRQUFRLENBQzNCLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDL0Y7WUFDRCwyQkFBMkIsRUFBRSxRQUFRLENBQ25DLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUN2RztZQUNELGdCQUFnQixFQUFFLFFBQVEsQ0FDeEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ2xHO1lBQ0Qsa0JBQWtCLEVBQUUsUUFBUSxDQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzlGO1lBQ0QsMEJBQTBCLEVBQUUsUUFBUSxDQUNsQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDdEc7WUFDRCxlQUFlLEVBQUUsUUFBUSxDQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDakc7WUFDRCxpQkFBaUIsRUFBRSxRQUFRLENBQ3pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDN0Y7WUFDRCx5QkFBeUIsRUFBRSxRQUFRLENBQ2pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNyRztZQUNELFlBQVk7WUFDWixZQUFZLEVBQUUsc0JBQXNCO1NBQ3JDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFqTEQsMEVBaUxDO0FBRUQsTUFBTSxXQUFXO0lBR2M7SUFGYixjQUFjLENBQWM7SUFFNUMsWUFBNkIsTUFBb0I7UUFBcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ3BGLENBQUM7SUFDSixDQUFDO0lBRU0sdUJBQXVCLENBQUMsUUFBNEI7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxRQUE0QjtRQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFbkUsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ2QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLENBQUMsQ0FDakcsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLHdCQUF3QixDQUFDLFFBQTRCO1FBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUVuRSxPQUFPLENBQ0wsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDZCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEtBQUssV0FBVyxDQUFDLENBQ3JHLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsUUFBNEI7UUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRW5FLE9BQU8sQ0FDTCxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNuSCxDQUFDO0lBQ0osQ0FBQztJQUVNLGNBQWMsQ0FBQyxRQUE0QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQ25HLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsTUFBTSxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzdCLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFpQjtJQUNyQyxNQUFNLFFBQVEsR0FBZ0MsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPO1lBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNqQixPQUFPLEVBQUUsR0FBRztTQUNiLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLG9DQUFvQixDQUFDLDZDQUE2QyxRQUFRLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsT0FBaUI7SUFDL0MsTUFBTSxRQUFRLEdBQWdDLEVBQUUsQ0FBQztJQUNqRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ2pELFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFlLEVBQUUsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU3RixPQUFPO1lBQ0wsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3pCLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTthQUNsQyxDQUFDLENBQUM7U0FDSixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxJQUFnQjtJQUNqRCxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxVQUFVLENBQUMsUUFBUTtZQUN0QixPQUFPLDJCQUFrQixDQUFDLFFBQVEsQ0FBQztRQUNyQyxLQUFLLFVBQVUsQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sMkJBQWtCLENBQUMsT0FBTyxDQUFDO1FBQ3BDLEtBQUssVUFBVSxDQUFDLE1BQU07WUFDcEIsT0FBTywyQkFBa0IsQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFLLFVBSUo7QUFKRCxXQUFLLFVBQVU7SUFDYiwrQkFBaUIsQ0FBQTtJQUNqQixpQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSkksVUFBVSxLQUFWLFVBQVUsUUFJZDtBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBVztJQUNwQyxPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxVQUFVLENBQUMsT0FBTyxJQUFJLEdBQUcsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQ2hHLENBQUM7QUFzQkQsU0FBUyxXQUFXLENBQUMsRUFBWSxFQUFFLEVBQVk7SUFDN0MsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFnQixFQUFFLE1BQW9CO0lBQ3hELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFPLEVBQU8sRUFBRSxFQUFpQjtJQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFDO0lBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBSSxFQUFPO0lBQzFCLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBWcGNDb250ZXh0UXVlcnkgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHsgdHlwZSBWcGNDb250ZXh0UmVzcG9uc2UsIHR5cGUgVnBjU3VibmV0R3JvdXAsIFZwY1N1Ym5ldEdyb3VwVHlwZSB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEZpbHRlciwgUm91dGVUYWJsZSwgVGFnLCBWcGMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWMyJztcbmltcG9ydCB0eXBlIHsgSUNvbnRleHRQcm92aWRlck1lc3NhZ2VzIH0gZnJvbSAnLic7XG5pbXBvcnQgeyBpbml0Q29udGV4dFByb3ZpZGVyU2RrIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJRUMyQ2xpZW50LCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2FwaS9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi4vYXBpL3BsdWdpbic7XG5pbXBvcnQgeyBDb250ZXh0UHJvdmlkZXJFcnJvciB9IGZyb20gJy4uL2FwaS90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGNsYXNzIFZwY05ldHdvcmtDb250ZXh0UHJvdmlkZXJQbHVnaW4gaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJQbHVnaW4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF3czogU2RrUHJvdmlkZXIsIHByaXZhdGUgcmVhZG9ubHkgaW86IElDb250ZXh0UHJvdmlkZXJNZXNzYWdlcykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKGFyZ3M6IFZwY0NvbnRleHRRdWVyeSkge1xuICAgIGNvbnN0IGVjMiA9IChhd2FpdCBpbml0Q29udGV4dFByb3ZpZGVyU2RrKHRoaXMuYXdzLCBhcmdzKSkuZWMyKCk7XG5cbiAgICBjb25zdCB2cGNJZCA9IGF3YWl0IHRoaXMuZmluZFZwYyhlYzIsIGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXMucmVhZFZwY1Byb3BzKGVjMiwgdnBjSWQsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kVnBjKGVjMjogSUVDMkNsaWVudCwgYXJnczogVnBjQ29udGV4dFF1ZXJ5KTogUHJvbWlzZTxWcGM+IHtcbiAgICAvLyBCdWlsZCByZXF1ZXN0IGZpbHRlciAobWFwIHsgTmFtZSAtPiBWYWx1ZSB9IHRvIGxpc3Qgb2YgW3sgTmFtZSwgVmFsdWVzIH1dKVxuICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gT2JqZWN0LmVudHJpZXMoYXJncy5maWx0ZXIpLm1hcCgoW3RhZywgdmFsdWVdKSA9PiAoeyBOYW1lOiB0YWcsIFZhbHVlczogW3ZhbHVlXSB9KSk7XG5cbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBMaXN0aW5nIFZQQ3MgaW4gJHthcmdzLmFjY291bnR9OiR7YXJncy5yZWdpb259YCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlYzIuZGVzY3JpYmVWcGNzKHsgRmlsdGVyczogZmlsdGVycyB9KTtcblxuICAgIGNvbnN0IHZwY3MgPSByZXNwb25zZS5WcGNzIHx8IFtdO1xuICAgIGlmICh2cGNzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKGBDb3VsZCBub3QgZmluZCBhbnkgVlBDcyBtYXRjaGluZyAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICAgIH1cbiAgICBpZiAodnBjcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoYEZvdW5kICR7dnBjcy5sZW5ndGh9IFZQQ3MgbWF0Y2hpbmcgJHtKU09OLnN0cmluZ2lmeShhcmdzKX07IHBsZWFzZSBuYXJyb3cgdGhlIHNlYXJjaCBjcml0ZXJpYWApO1xuICAgIH1cblxuICAgIHJldHVybiB2cGNzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkVnBjUHJvcHMoZWMyOiBJRUMyQ2xpZW50LCB2cGM6IFZwYywgYXJnczogVnBjQ29udGV4dFF1ZXJ5KTogUHJvbWlzZTxWcGNDb250ZXh0UmVzcG9uc2U+IHtcbiAgICBjb25zdCB2cGNJZCA9IHZwYy5WcGNJZCE7XG5cbiAgICBhd2FpdCB0aGlzLmlvLmRlYnVnKGBEZXNjcmliaW5nIFZQQyAke3ZwY0lkfWApO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHsgRmlsdGVyczogW3sgTmFtZTogJ3ZwYy1pZCcsIFZhbHVlczogW3ZwY0lkXSB9XSB9O1xuXG4gICAgY29uc3Qgc3VibmV0c1Jlc3BvbnNlID0gYXdhaXQgZWMyLmRlc2NyaWJlU3VibmV0cyhmaWx0ZXJzKTtcbiAgICBjb25zdCBsaXN0ZWRTdWJuZXRzID0gc3VibmV0c1Jlc3BvbnNlLlN1Ym5ldHMgfHwgW107XG5cbiAgICBjb25zdCByb3V0ZVRhYmxlc1Jlc3BvbnNlID0gYXdhaXQgZWMyLmRlc2NyaWJlUm91dGVUYWJsZXMoZmlsdGVycyk7XG4gICAgY29uc3Qgcm91dGVUYWJsZXMgPSBuZXcgUm91dGVUYWJsZXMocm91dGVUYWJsZXNSZXNwb25zZS5Sb3V0ZVRhYmxlcyB8fCBbXSk7XG5cbiAgICAvLyBOb3cgY29tZXMgb3VyIGpvYiB0byBzZXBhcmF0ZSB0aGVzZSBzdWJuZXRzIG91dCBpbnRvIEFacyBhbmQgc3VibmV0IGdyb3VwcyAoUHVibGljLCBQcml2YXRlLCBJc29sYXRlZClcbiAgICAvLyBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB0byBnbyBvbjpcbiAgICAvLyAtIFR5cGUgdGFnLCB3ZSB0YWcgc3VibmV0cyB3aXRoIHRoZWlyIHR5cGUuIEluIGFic2VuY2Ugb2YgdGhpcyB0YWcsIHdlXG4gICAgLy8gICBkZXRlcm1pbmUgdGhlIHN1Ym5ldCBtdXN0IGJlIFB1YmxpYyBpZiBlaXRoZXI6XG4gICAgLy8gICBhKSBpdCBoYXMgdGhlIHByb3BlcnR5IE1hcFB1YmxpY0lwT25MYXVuY2hcbiAgICAvLyAgIGIpIGl0IGhhcyBhIHJvdXRlIHRvIGFuIEludGVybmV0IEdhdGV3YXlcbiAgICAvLyAgIElmIGJvdGggb2YgdGhlIGFib3ZlIGlzIGZhbHNlIGJ1dCB0aGUgc3VibmV0IGhhcyBhIHJvdXRlIHRvIGEgTkFUIEdhdGV3YXlcbiAgICAvLyAgIGFuZCB0aGUgZGVzdGluYXRpb24gQ0lEUiBibG9jayBpcyBcIjAuMC4wLjAvMFwiLCB3ZSBhc3N1bWUgaXQgdG8gYmUgYSBQcml2YXRlIHN1Ym5ldC5cbiAgICAvLyAgIEFueXRoaW5nIGVsc2UgaXMgY29uc2lkZXJlZCBJc29sYXRlZC5cbiAgICAvLyAtIE5hbWUgdGFnLCB3ZSB0YWcgc3VibmV0cyB3aXRoIHRoZWlyIHN1Ym5ldCBncm91cCBuYW1lLiBJbiBhYnNlbmNlIG9mIHRoaXMgdGFnLFxuICAgIC8vICAgd2UgdXNlIHRoZSB0eXBlIGFzIHRoZSBuYW1lLlxuXG4gICAgY29uc3QgYXpzID0gQXJyYXkuZnJvbShuZXcgU2V0PHN0cmluZz4obGlzdGVkU3VibmV0cy5tYXAoKHMpID0+IHMuQXZhaWxhYmlsaXR5Wm9uZSEpKSk7XG4gICAgYXpzLnNvcnQoKTtcblxuICAgIGNvbnN0IHN1Ym5ldHM6IFN1Ym5ldFtdID0gbGlzdGVkU3VibmV0cy5tYXAoKHN1Ym5ldCkgPT4ge1xuICAgICAgbGV0IHR5cGUgPSBnZXRUYWcoJ2F3cy1jZGs6c3VibmV0LXR5cGUnLCBzdWJuZXQuVGFncyk7XG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIHN1Ym5ldC5NYXBQdWJsaWNJcE9uTGF1bmNoKSB7XG4gICAgICAgIHR5cGUgPSBTdWJuZXRUeXBlLlB1YmxpYztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgJiYgcm91dGVUYWJsZXMuaGFzUm91dGVUb0lndyhzdWJuZXQuU3VibmV0SWQpKSB7XG4gICAgICAgIHR5cGUgPSBTdWJuZXRUeXBlLlB1YmxpYztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgJiYgcm91dGVUYWJsZXMuaGFzUm91dGVUb05hdEdhdGV3YXkoc3VibmV0LlN1Ym5ldElkKSkge1xuICAgICAgICB0eXBlID0gU3VibmV0VHlwZS5Qcml2YXRlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCAmJiByb3V0ZVRhYmxlcy5oYXNSb3V0ZVRvVHJhbnNpdEdhdGV3YXkoc3VibmV0LlN1Ym5ldElkKSkge1xuICAgICAgICB0eXBlID0gU3VibmV0VHlwZS5Qcml2YXRlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0eXBlID0gU3VibmV0VHlwZS5Jc29sYXRlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1ZhbGlkU3VibmV0VHlwZSh0eXBlKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICB0aHJvdyBuZXcgQ29udGV4dFByb3ZpZGVyRXJyb3IoXG4gICAgICAgICAgYFN1Ym5ldCAke3N1Ym5ldC5TdWJuZXRBcm59IGhhcyBpbnZhbGlkIHN1Ym5ldCB0eXBlICR7dHlwZX0gKG11c3QgYmUgJHtTdWJuZXRUeXBlLlB1YmxpY30sICR7U3VibmV0VHlwZS5Qcml2YXRlfSBvciAke1N1Ym5ldFR5cGUuSXNvbGF0ZWR9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLnN1Ym5ldEdyb3VwTmFtZVRhZyAmJiAhZ2V0VGFnKGFyZ3Muc3VibmV0R3JvdXBOYW1lVGFnLCBzdWJuZXQuVGFncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIHN1Ym5ldEdyb3VwTmFtZVRhZzogU3VibmV0ICR7c3VibmV0LlN1Ym5ldEFybn0gZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHRhZyB3aXRoIEtleT0nJHthcmdzLnN1Ym5ldEdyb3VwTmFtZVRhZ30nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZSA9IGdldFRhZyhhcmdzLnN1Ym5ldEdyb3VwTmFtZVRhZyB8fCAnYXdzLWNkazpzdWJuZXQtbmFtZScsIHN1Ym5ldC5UYWdzKSB8fCB0eXBlO1xuICAgICAgY29uc3Qgcm91dGVUYWJsZUlkID0gcm91dGVUYWJsZXMucm91dGVUYWJsZUlkRm9yU3VibmV0SWQoc3VibmV0LlN1Ym5ldElkKTtcblxuICAgICAgaWYgKCFyb3V0ZVRhYmxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbnRleHRQcm92aWRlckVycm9yKFxuICAgICAgICAgIGBTdWJuZXQgJHtzdWJuZXQuU3VibmV0QXJufSBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcm91dGUgdGFibGUgKGFuZCB0aGVyZSBpcyBubyBcIm1haW5cIiB0YWJsZSlgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhejogc3VibmV0LkF2YWlsYWJpbGl0eVpvbmUhLFxuICAgICAgICBjaWRyOiBzdWJuZXQuQ2lkckJsb2NrISxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc3VibmV0SWQ6IHN1Ym5ldC5TdWJuZXRJZCEsXG4gICAgICAgIHJvdXRlVGFibGVJZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBsZXQgZ3JvdXBlZDogU3VibmV0R3JvdXBzO1xuICAgIGxldCBhc3N5bWV0cmljU3VibmV0R3JvdXBzOiBWcGNTdWJuZXRHcm91cFtdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChhcmdzLnJldHVybkFzeW1tZXRyaWNTdWJuZXRzKSB7XG4gICAgICBncm91cGVkID0geyBhenM6IFtdLCBncm91cHM6IFtdIH07XG4gICAgICBhc3N5bWV0cmljU3VibmV0R3JvdXBzID0gZ3JvdXBBc3ltbWV0cmljU3VibmV0cyhzdWJuZXRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBlZCA9IGdyb3VwU3VibmV0cyhzdWJuZXRzKTtcbiAgICAgIGFzc3ltZXRyaWNTdWJuZXRHcm91cHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gRmluZCBhdHRhY2hlZCthdmFpbGFibGUgVlBOIGdhdGV3YXkgZm9yIHRoaXMgVlBDXG4gICAgY29uc3QgdnBuR2F0ZXdheVJlc3BvbnNlID1cbiAgICAgIChhcmdzLnJldHVyblZwbkdhdGV3YXlzID8/IHRydWUpXG4gICAgICAgID8gYXdhaXQgZWMyLmRlc2NyaWJlVnBuR2F0ZXdheXMoe1xuICAgICAgICAgIEZpbHRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgTmFtZTogJ2F0dGFjaG1lbnQudnBjLWlkJyxcbiAgICAgICAgICAgICAgVmFsdWVzOiBbdnBjSWRdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgTmFtZTogJ2F0dGFjaG1lbnQuc3RhdGUnLFxuICAgICAgICAgICAgICBWYWx1ZXM6IFsnYXR0YWNoZWQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIE5hbWU6ICdzdGF0ZScsXG4gICAgICAgICAgICAgIFZhbHVlczogWydhdmFpbGFibGUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdnBuR2F0ZXdheUlkID1cbiAgICAgIHZwbkdhdGV3YXlSZXNwb25zZT8uVnBuR2F0ZXdheXM/Lmxlbmd0aCA9PT0gMSA/IHZwbkdhdGV3YXlSZXNwb25zZS5WcG5HYXRld2F5c1swXS5WcG5HYXRld2F5SWQgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdnBjSWQsXG4gICAgICB2cGNDaWRyQmxvY2s6IHZwYy5DaWRyQmxvY2shLFxuICAgICAgb3duZXJBY2NvdW50SWQ6IHZwYy5Pd25lcklkLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IGdyb3VwZWQuYXpzLFxuICAgICAgaXNvbGF0ZWRTdWJuZXRJZHM6IGNvbGxhcHNlKFxuICAgICAgICBmbGF0TWFwKGZpbmRHcm91cHMoU3VibmV0VHlwZS5Jc29sYXRlZCwgZ3JvdXBlZCksIChncm91cCkgPT4gZ3JvdXAuc3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpKSxcbiAgICAgICksXG4gICAgICBpc29sYXRlZFN1Ym5ldE5hbWVzOiBjb2xsYXBzZShcbiAgICAgICAgZmxhdE1hcChmaW5kR3JvdXBzKFN1Ym5ldFR5cGUuSXNvbGF0ZWQsIGdyb3VwZWQpLCAoZ3JvdXApID0+IChncm91cC5uYW1lID8gW2dyb3VwLm5hbWVdIDogW10pKSxcbiAgICAgICksXG4gICAgICBpc29sYXRlZFN1Ym5ldFJvdXRlVGFibGVJZHM6IGNvbGxhcHNlKFxuICAgICAgICBmbGF0TWFwKGZpbmRHcm91cHMoU3VibmV0VHlwZS5Jc29sYXRlZCwgZ3JvdXBlZCksIChncm91cCkgPT4gZ3JvdXAuc3VibmV0cy5tYXAoKHMpID0+IHMucm91dGVUYWJsZUlkKSksXG4gICAgICApLFxuICAgICAgcHJpdmF0ZVN1Ym5ldElkczogY29sbGFwc2UoXG4gICAgICAgIGZsYXRNYXAoZmluZEdyb3VwcyhTdWJuZXRUeXBlLlByaXZhdGUsIGdyb3VwZWQpLCAoZ3JvdXApID0+IGdyb3VwLnN1Ym5ldHMubWFwKChzKSA9PiBzLnN1Ym5ldElkKSksXG4gICAgICApLFxuICAgICAgcHJpdmF0ZVN1Ym5ldE5hbWVzOiBjb2xsYXBzZShcbiAgICAgICAgZmxhdE1hcChmaW5kR3JvdXBzKFN1Ym5ldFR5cGUuUHJpdmF0ZSwgZ3JvdXBlZCksIChncm91cCkgPT4gKGdyb3VwLm5hbWUgPyBbZ3JvdXAubmFtZV0gOiBbXSkpLFxuICAgICAgKSxcbiAgICAgIHByaXZhdGVTdWJuZXRSb3V0ZVRhYmxlSWRzOiBjb2xsYXBzZShcbiAgICAgICAgZmxhdE1hcChmaW5kR3JvdXBzKFN1Ym5ldFR5cGUuUHJpdmF0ZSwgZ3JvdXBlZCksIChncm91cCkgPT4gZ3JvdXAuc3VibmV0cy5tYXAoKHMpID0+IHMucm91dGVUYWJsZUlkKSksXG4gICAgICApLFxuICAgICAgcHVibGljU3VibmV0SWRzOiBjb2xsYXBzZShcbiAgICAgICAgZmxhdE1hcChmaW5kR3JvdXBzKFN1Ym5ldFR5cGUuUHVibGljLCBncm91cGVkKSwgKGdyb3VwKSA9PiBncm91cC5zdWJuZXRzLm1hcCgocykgPT4gcy5zdWJuZXRJZCkpLFxuICAgICAgKSxcbiAgICAgIHB1YmxpY1N1Ym5ldE5hbWVzOiBjb2xsYXBzZShcbiAgICAgICAgZmxhdE1hcChmaW5kR3JvdXBzKFN1Ym5ldFR5cGUuUHVibGljLCBncm91cGVkKSwgKGdyb3VwKSA9PiAoZ3JvdXAubmFtZSA/IFtncm91cC5uYW1lXSA6IFtdKSksXG4gICAgICApLFxuICAgICAgcHVibGljU3VibmV0Um91dGVUYWJsZUlkczogY29sbGFwc2UoXG4gICAgICAgIGZsYXRNYXAoZmluZEdyb3VwcyhTdWJuZXRUeXBlLlB1YmxpYywgZ3JvdXBlZCksIChncm91cCkgPT4gZ3JvdXAuc3VibmV0cy5tYXAoKHMpID0+IHMucm91dGVUYWJsZUlkKSksXG4gICAgICApLFxuICAgICAgdnBuR2F0ZXdheUlkLFxuICAgICAgc3VibmV0R3JvdXBzOiBhc3N5bWV0cmljU3VibmV0R3JvdXBzLFxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgUm91dGVUYWJsZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgbWFpblJvdXRlVGFibGU/OiBSb3V0ZVRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGFibGVzOiBSb3V0ZVRhYmxlW10pIHtcbiAgICB0aGlzLm1haW5Sb3V0ZVRhYmxlID0gdGhpcy50YWJsZXMuZmluZChcbiAgICAgICh0YWJsZSkgPT4gISF0YWJsZS5Bc3NvY2lhdGlvbnMgJiYgdGFibGUuQXNzb2NpYXRpb25zLnNvbWUoKGFzc29jKSA9PiAhIWFzc29jLk1haW4pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcm91dGVUYWJsZUlkRm9yU3VibmV0SWQoc3VibmV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yU3VibmV0KHN1Ym5ldElkKTtcbiAgICByZXR1cm4gKHRhYmxlICYmIHRhYmxlLlJvdXRlVGFibGVJZCkgfHwgKHRoaXMubWFpblJvdXRlVGFibGUgJiYgdGhpcy5tYWluUm91dGVUYWJsZS5Sb3V0ZVRhYmxlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdpdmVuIHN1Ym5ldCBoYXMgYSByb3V0ZSB0byBhIE5BVCBHYXRld2F5XG4gICAqL1xuICBwdWJsaWMgaGFzUm91dGVUb05hdEdhdGV3YXkoc3VibmV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvclN1Ym5ldChzdWJuZXRJZCkgfHwgdGhpcy5tYWluUm91dGVUYWJsZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhIXRhYmxlICYmXG4gICAgICAhIXRhYmxlLlJvdXRlcyAmJlxuICAgICAgdGFibGUuUm91dGVzLnNvbWUoKHJvdXRlKSA9PiAhIXJvdXRlLk5hdEdhdGV3YXlJZCAmJiByb3V0ZS5EZXN0aW5hdGlvbkNpZHJCbG9jayA9PT0gJzAuMC4wLjAvMCcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnaXZlbiBzdWJuZXQgaGFzIGEgcm91dGUgdG8gYSBUcmFuc2l0IEdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyBoYXNSb3V0ZVRvVHJhbnNpdEdhdGV3YXkoc3VibmV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvclN1Ym5ldChzdWJuZXRJZCkgfHwgdGhpcy5tYWluUm91dGVUYWJsZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhIXRhYmxlICYmXG4gICAgICAhIXRhYmxlLlJvdXRlcyAmJlxuICAgICAgdGFibGUuUm91dGVzLnNvbWUoKHJvdXRlKSA9PiAhIXJvdXRlLlRyYW5zaXRHYXRld2F5SWQgJiYgcm91dGUuRGVzdGluYXRpb25DaWRyQmxvY2sgPT09ICcwLjAuMC4wLzAnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gc3VibmV0IGhhcyBhIHJvdXRlIHRvIGFuIElHV1xuICAgKi9cbiAgcHVibGljIGhhc1JvdXRlVG9JZ3coc3VibmV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvclN1Ym5ldChzdWJuZXRJZCkgfHwgdGhpcy5tYWluUm91dGVUYWJsZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhIXRhYmxlICYmICEhdGFibGUuUm91dGVzICYmIHRhYmxlLlJvdXRlcy5zb21lKChyb3V0ZSkgPT4gISFyb3V0ZS5HYXRld2F5SWQgJiYgcm91dGUuR2F0ZXdheUlkLnN0YXJ0c1dpdGgoJ2lndy0nKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRhYmxlRm9yU3VibmV0KHN1Ym5ldElkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXMuZmluZChcbiAgICAgICh0YWJsZSkgPT4gISF0YWJsZS5Bc3NvY2lhdGlvbnMgJiYgdGFibGUuQXNzb2NpYXRpb25zLnNvbWUoKGFzc29jKSA9PiBhc3NvYy5TdWJuZXRJZCA9PT0gc3VibmV0SWQpLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgdGFnIGZyb20gYSBzZXQgb2YgdGFnc1xuICovXG5mdW5jdGlvbiBnZXRUYWcobmFtZTogc3RyaW5nLCB0YWdzPzogVGFnW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzIHx8IFtdKSB7XG4gICAgaWYgKHRhZy5LZXkgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiB0YWcuVmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR3JvdXAgc3VibmV0cyBvZiB0aGUgc2FtZSB0eXBlIHRvZ2V0aGVyLCBhbmQgb3JkZXIgYnkgQVpcbiAqL1xuZnVuY3Rpb24gZ3JvdXBTdWJuZXRzKHN1Ym5ldHM6IFN1Ym5ldFtdKTogU3VibmV0R3JvdXBzIHtcbiAgY29uc3QgZ3JvdXBpbmc6IHsgW2tleTogc3RyaW5nXTogU3VibmV0W10gfSA9IHt9O1xuICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBzdWJuZXRzKSB7XG4gICAgY29uc3Qga2V5ID0gW3N1Ym5ldC50eXBlLCBzdWJuZXQubmFtZV0udG9TdHJpbmcoKTtcbiAgICBpZiAoIShrZXkgaW4gZ3JvdXBpbmcpKSB7XG4gICAgICBncm91cGluZ1trZXldID0gW107XG4gICAgfVxuICAgIGdyb3VwaW5nW2tleV0ucHVzaChzdWJuZXQpO1xuICB9XG5cbiAgY29uc3QgZ3JvdXBzID0gT2JqZWN0LnZhbHVlcyhncm91cGluZykubWFwKChzbnMpID0+IHtcbiAgICBzbnMuc29ydCgoYTogU3VibmV0LCBiOiBTdWJuZXQpID0+IGEuYXoubG9jYWxlQ29tcGFyZShiLmF6KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHNuc1swXS50eXBlLFxuICAgICAgbmFtZTogc25zWzBdLm5hbWUsXG4gICAgICBzdWJuZXRzOiBzbnMsXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3QgYXpzID0gZ3JvdXBzWzBdLnN1Ym5ldHMubWFwKChzKSA9PiBzLmF6KTtcblxuICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xuICAgIGNvbnN0IGdyb3VwQVpzID0gZ3JvdXAuc3VibmV0cy5tYXAoKHMpID0+IHMuYXopO1xuICAgIGlmICghYXJyYXlzRXF1YWwoZ3JvdXBBWnMsIGF6cykpIHtcbiAgICAgIHRocm93IG5ldyBDb250ZXh0UHJvdmlkZXJFcnJvcihgTm90IGFsbCBzdWJuZXRzIGluIFZQQyBoYXZlIHRoZSBzYW1lIEFaczogJHtncm91cEFac30gdnMgJHthenN9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYXpzLCBncm91cHMgfTtcbn1cblxuZnVuY3Rpb24gZ3JvdXBBc3ltbWV0cmljU3VibmV0cyhzdWJuZXRzOiBTdWJuZXRbXSk6IFZwY1N1Ym5ldEdyb3VwW10ge1xuICBjb25zdCBncm91cGluZzogeyBba2V5OiBzdHJpbmddOiBTdWJuZXRbXSB9ID0ge307XG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIHN1Ym5ldHMpIHtcbiAgICBjb25zdCBrZXkgPSBbc3VibmV0LnR5cGUsIHN1Ym5ldC5uYW1lXS50b1N0cmluZygpO1xuICAgIGlmICghKGtleSBpbiBncm91cGluZykpIHtcbiAgICAgIGdyb3VwaW5nW2tleV0gPSBbXTtcbiAgICB9XG4gICAgZ3JvdXBpbmdba2V5XS5wdXNoKHN1Ym5ldCk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhncm91cGluZykubWFwKChzdWJuZXRBcnJheSkgPT4ge1xuICAgIHN1Ym5ldEFycmF5LnNvcnQoKHN1Ym5ldDE6IFN1Ym5ldCwgc3VibmV0MjogU3VibmV0KSA9PiBzdWJuZXQxLmF6LmxvY2FsZUNvbXBhcmUoc3VibmV0Mi5heikpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHN1Ym5ldEFycmF5WzBdLm5hbWUsXG4gICAgICB0eXBlOiBzdWJuZXRUeXBlVG9WcGNTdWJuZXRUeXBlKHN1Ym5ldEFycmF5WzBdLnR5cGUpLFxuICAgICAgc3VibmV0czogc3VibmV0QXJyYXkubWFwKChzdWJuZXQpID0+ICh7XG4gICAgICAgIHN1Ym5ldElkOiBzdWJuZXQuc3VibmV0SWQsXG4gICAgICAgIGNpZHI6IHN1Ym5ldC5jaWRyLFxuICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBzdWJuZXQuYXosXG4gICAgICAgIHJvdXRlVGFibGVJZDogc3VibmV0LnJvdXRlVGFibGVJZCxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3VibmV0VHlwZVRvVnBjU3VibmV0VHlwZSh0eXBlOiBTdWJuZXRUeXBlKTogVnBjU3VibmV0R3JvdXBUeXBlIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBTdWJuZXRUeXBlLklzb2xhdGVkOlxuICAgICAgcmV0dXJuIFZwY1N1Ym5ldEdyb3VwVHlwZS5JU09MQVRFRDtcbiAgICBjYXNlIFN1Ym5ldFR5cGUuUHJpdmF0ZTpcbiAgICAgIHJldHVybiBWcGNTdWJuZXRHcm91cFR5cGUuUFJJVkFURTtcbiAgICBjYXNlIFN1Ym5ldFR5cGUuUHVibGljOlxuICAgICAgcmV0dXJuIFZwY1N1Ym5ldEdyb3VwVHlwZS5QVUJMSUM7XG4gIH1cbn1cblxuZW51bSBTdWJuZXRUeXBlIHtcbiAgUHVibGljID0gJ1B1YmxpYycsXG4gIFByaXZhdGUgPSAnUHJpdmF0ZScsXG4gIElzb2xhdGVkID0gJ0lzb2xhdGVkJyxcbn1cblxuZnVuY3Rpb24gaXNWYWxpZFN1Ym5ldFR5cGUodmFsOiBzdHJpbmcpOiB2YWwgaXMgU3VibmV0VHlwZSB7XG4gIHJldHVybiB2YWwgPT09IFN1Ym5ldFR5cGUuUHVibGljIHx8IHZhbCA9PT0gU3VibmV0VHlwZS5Qcml2YXRlIHx8IHZhbCA9PT0gU3VibmV0VHlwZS5Jc29sYXRlZDtcbn1cblxuaW50ZXJmYWNlIFN1Ym5ldCB7XG4gIGF6OiBzdHJpbmc7XG4gIGNpZHI6IHN0cmluZztcbiAgdHlwZTogU3VibmV0VHlwZTtcbiAgbmFtZTogc3RyaW5nO1xuICByb3V0ZVRhYmxlSWQ6IHN0cmluZztcbiAgc3VibmV0SWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN1Ym5ldEdyb3VwIHtcbiAgdHlwZTogU3VibmV0VHlwZTtcbiAgbmFtZTogc3RyaW5nO1xuICBzdWJuZXRzOiBTdWJuZXRbXTtcbn1cblxuaW50ZXJmYWNlIFN1Ym5ldEdyb3VwcyB7XG4gIGF6czogc3RyaW5nW107XG4gIGdyb3VwczogU3VibmV0R3JvdXBbXTtcbn1cblxuZnVuY3Rpb24gYXJyYXlzRXF1YWwoYXM6IHN0cmluZ1tdLCBiczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKGFzLmxlbmd0aCAhPT0gYnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhc1tpXSAhPT0gYnNbaV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZmluZEdyb3Vwcyh0eXBlOiBTdWJuZXRUeXBlLCBncm91cHM6IFN1Ym5ldEdyb3Vwcyk6IFN1Ym5ldEdyb3VwW10ge1xuICByZXR1cm4gZ3JvdXBzLmdyb3Vwcy5maWx0ZXIoKGcpID0+IGcudHlwZSA9PT0gdHlwZSk7XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXA8VCwgVT4oeHM6IFRbXSwgZm46ICh4OiBUKSA9PiBVW10pOiBVW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8VT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0LnB1c2goLi4uZm4oeCkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbGxhcHNlPFQ+KHhzOiBUW10pOiBUW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB4cztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -26,5 +26,6 @@ __exportStar(require("./actions"), exports);
|
|
|
26
26
|
__exportStar(require("./api/aws-auth"), exports);
|
|
27
27
|
__exportStar(require("./api/cloud-assembly"), exports);
|
|
28
28
|
__exportStar(require("./api/io"), exports);
|
|
29
|
+
__exportStar(require("./api/tags"), exports);
|
|
29
30
|
__exportStar(require("./api/shared-public"), exports);
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxrQkFBa0I7QUFDbEIsc0NBQW9DO0FBRXBDLGdCQUFnQjtBQUNoQiw0Q0FBMEI7QUFDMUIsNENBQTBCO0FBRTFCLGtCQUFrQjtBQUNsQixpREFBK0I7QUFDL0IsdURBQXFDO0FBQ3JDLDJDQUF5QjtBQUN6Qiw2Q0FBMkI7QUFDM0Isc0RBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIHRvb2xraXQtbGliXG4gKi9cblxuLy8gUG9seWZpbGxzIGZpcnN0XG5pbXBvcnQgJy4vcHJpdmF0ZS9kaXNwb3NlLXBvbHlmaWxsJztcblxuLy8gVGhlIG1haW4gc2hvd1xuZXhwb3J0ICogZnJvbSAnLi90b29sa2l0JztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucyc7XG5cbi8vIFN1cHBvcnRpbmcgYWN0c1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvYXdzLWF1dGgnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvY2xvdWQtYXNzZW1ibHknO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvaW8nO1xuZXhwb3J0ICogZnJvbSAnLi9hcGkvdGFncyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9zaGFyZWQtcHVibGljJztcbiJdfQ==
|
package/lib/index_bg.wasm
CHANGED
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type * as cxapi from '@aws-cdk/cx-api';
|
|
2
|
+
export interface BootstrapEnvironmentProgress {
|
|
3
|
+
/**
|
|
4
|
+
* The total number of environments being deployed
|
|
5
|
+
*/
|
|
6
|
+
readonly total: number;
|
|
7
|
+
/**
|
|
8
|
+
* The count of the environment currently bootstrapped
|
|
9
|
+
*
|
|
10
|
+
* This is counting value, not an identifier.
|
|
11
|
+
*/
|
|
12
|
+
readonly current: number;
|
|
13
|
+
/**
|
|
14
|
+
* The environment that's currently being bootstrapped
|
|
15
|
+
*/
|
|
16
|
+
readonly environment: cxapi.Environment;
|
|
17
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLWVudmlyb25tZW50LXByb2dyZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYm9vdHN0cmFwLWVudmlyb25tZW50LXByb2dyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwRW52aXJvbm1lbnRQcm9ncmVzcyB7XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGVudmlyb25tZW50cyBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWw6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBjb3VudCBvZiB0aGUgZW52aXJvbm1lbnQgY3VycmVudGx5IGJvb3RzdHJhcHBlZFxuICAgKlxuICAgKiBUaGlzIGlzIGNvdW50aW5nIHZhbHVlLCBub3QgYW4gaWRlbnRpZmllci5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0J3MgY3VycmVudGx5IGJlaW5nIGJvb3RzdHJhcHBlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWlzc2luZ0NvbnRleHQge1xuICBtaXNzaW5nS2V5czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlZENvbnRleHQge1xuICBjb250ZXh0RmlsZTogc3RyaW5nO1xuICBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuIl19
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CloudFormationStackArtifact } from '@aws-cdk/cx-api';
|
|
2
|
+
import type { IManifestEntry } from 'cdk-assets';
|
|
3
|
+
import type { PermissionChangeType } from './diff';
|
|
4
|
+
import type { ConfirmationRequest } from './types';
|
|
5
|
+
export { DeployStackResult, SuccessfulDeployStackResult, NeedRollbackFirstDeployStackResult, ReplacementRequiresRollbackStackResult } from '../api/deployments/deployment-result';
|
|
6
|
+
export interface StackDeployProgress {
|
|
7
|
+
/**
|
|
8
|
+
* The total number of stacks being deployed
|
|
9
|
+
*/
|
|
10
|
+
readonly total: number;
|
|
11
|
+
/**
|
|
12
|
+
* The count of the stack currently attempted to be deployed
|
|
13
|
+
*
|
|
14
|
+
* This is counting value, not an identifier.
|
|
15
|
+
*/
|
|
16
|
+
readonly current: number;
|
|
17
|
+
/**
|
|
18
|
+
* The stack that's currently being deployed
|
|
19
|
+
*/
|
|
20
|
+
readonly stack: CloudFormationStackArtifact;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Payload for a yes/no confirmation in deploy. Includes information on
|
|
24
|
+
* what kind of change is being made.
|
|
25
|
+
*/
|
|
26
|
+
export interface DeployConfirmationRequest extends ConfirmationRequest {
|
|
27
|
+
/**
|
|
28
|
+
* The type of change being made to the IAM permissions.
|
|
29
|
+
*/
|
|
30
|
+
readonly permissionChangeType: PermissionChangeType;
|
|
31
|
+
}
|
|
32
|
+
export interface BuildAsset {
|
|
33
|
+
/**
|
|
34
|
+
* The asset that is build
|
|
35
|
+
*/
|
|
36
|
+
readonly asset: IManifestEntry;
|
|
37
|
+
}
|
|
38
|
+
export interface PublishAsset {
|
|
39
|
+
/**
|
|
40
|
+
* The asset that is published
|
|
41
|
+
*/
|
|
42
|
+
readonly asset: IManifestEntry;
|
|
43
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IElNYW5pZmVzdEVudHJ5IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25DaGFuZ2VUeXBlIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCB0eXBlIHsgQ29uZmlybWF0aW9uUmVxdWVzdCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyByZS1leHBvcnQgc28gdGhleSBhcmUgcGFydCBvZiB0aGUgcHVibGljIEFQSVxuZXhwb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQsIFN1Y2Nlc3NmdWxEZXBsb3lTdGFja1Jlc3VsdCwgTmVlZFJvbGxiYWNrRmlyc3REZXBsb3lTdGFja1Jlc3VsdCwgUmVwbGFjZW1lbnRSZXF1aXJlc1JvbGxiYWNrU3RhY2tSZXN1bHQgfSBmcm9tICcuLi9hcGkvZGVwbG95bWVudHMvZGVwbG95bWVudC1yZXN1bHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrRGVwbG95UHJvZ3Jlc3Mge1xuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzdGFja3MgYmVpbmcgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHRvdGFsOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY291bnQgb2YgdGhlIHN0YWNrIGN1cnJlbnRseSBhdHRlbXB0ZWQgdG8gYmUgZGVwbG95ZWRcbiAgICpcbiAgICogVGhpcyBpcyBjb3VudGluZyB2YWx1ZSwgbm90IGFuIGlkZW50aWZpZXIuXG4gICAqL1xuICByZWFkb25seSBjdXJyZW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBhIHllcy9ubyBjb25maXJtYXRpb24gaW4gZGVwbG95LiBJbmNsdWRlcyBpbmZvcm1hdGlvbiBvblxuICogd2hhdCBraW5kIG9mIGNoYW5nZSBpcyBiZWluZyBtYWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUNvbmZpcm1hdGlvblJlcXVlc3QgZXh0ZW5kcyBDb25maXJtYXRpb25SZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNoYW5nZSBiZWluZyBtYWRlIHRvIHRoZSBJQU0gcGVybWlzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uQ2hhbmdlVHlwZTogUGVybWlzc2lvbkNoYW5nZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRBc3NldCB7XG4gIC8qKlxuICAgKiBUaGUgYXNzZXQgdGhhdCBpcyBidWlsZFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXQ6IElNYW5pZmVzdEVudHJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hBc3NldCB7XG5cbiAgLyoqXG4gICAqIFRoZSBhc3NldCB0aGF0IGlzIHB1Ymxpc2hlZFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXQ6IElNYW5pZmVzdEVudHJ5O1xufVxuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CloudFormationStackArtifact } from '@aws-cdk/cx-api';
|
|
2
|
+
export interface StackDestroy {
|
|
3
|
+
/**
|
|
4
|
+
* The stacks that will be destroyed
|
|
5
|
+
*/
|
|
6
|
+
readonly stacks: CloudFormationStackArtifact[];
|
|
7
|
+
}
|
|
8
|
+
export interface StackDestroyProgress {
|
|
9
|
+
/**
|
|
10
|
+
* The total number of stacks being destroyed
|
|
11
|
+
*/
|
|
12
|
+
readonly total: number;
|
|
13
|
+
/**
|
|
14
|
+
* The count of the stack currently attempted to be destroyed
|
|
15
|
+
*
|
|
16
|
+
* This is counting value, not an identifier.
|
|
17
|
+
*/
|
|
18
|
+
readonly current: number;
|
|
19
|
+
/**
|
|
20
|
+
* The stack that's currently being destroyed
|
|
21
|
+
*/
|
|
22
|
+
readonly stack: CloudFormationStackArtifact;
|
|
23
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlc3Ryb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0Rlc3Ryb3kge1xuICAvKipcbiAgICogVGhlIHN0YWNrcyB0aGF0IHdpbGwgYmUgZGVzdHJveWVkXG4gICAqL1xuICByZWFkb25seSBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrRGVzdHJveVByb2dyZXNzIHtcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygc3RhY2tzIGJlaW5nIGRlc3Ryb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgdG90YWw6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBjb3VudCBvZiB0aGUgc3RhY2sgY3VycmVudGx5IGF0dGVtcHRlZCB0byBiZSBkZXN0cm95ZWRcbiAgICpcbiAgICogVGhpcyBpcyBjb3VudGluZyB2YWx1ZSwgbm90IGFuIGlkZW50aWZpZXIuXG4gICAqL1xuICByZWFkb25seSBjdXJyZW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBkZXN0cm95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBDbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG59XG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Duration } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Different types of permission related changes in a diff
|
|
4
|
+
*/
|
|
5
|
+
export declare enum PermissionChangeType {
|
|
6
|
+
/**
|
|
7
|
+
* No permission changes
|
|
8
|
+
*/
|
|
9
|
+
NONE = "none",
|
|
10
|
+
/**
|
|
11
|
+
* Permissions are broadening
|
|
12
|
+
*/
|
|
13
|
+
BROADENING = "broadening",
|
|
14
|
+
/**
|
|
15
|
+
* Permissions are changed but not broadening
|
|
16
|
+
*/
|
|
17
|
+
NON_BROADENING = "non-broadening"
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Output of the diff command
|
|
21
|
+
*/
|
|
22
|
+
export interface DiffResult extends Duration {
|
|
23
|
+
/**
|
|
24
|
+
* Stack diff formatted as a string
|
|
25
|
+
*/
|
|
26
|
+
readonly formattedStackDiff: string;
|
|
27
|
+
/**
|
|
28
|
+
* Security diff formatted as a string
|
|
29
|
+
*/
|
|
30
|
+
readonly formattedSecurityDiff: string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PermissionChangeType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Different types of permission related changes in a diff
|
|
6
|
+
*/
|
|
7
|
+
var PermissionChangeType;
|
|
8
|
+
(function (PermissionChangeType) {
|
|
9
|
+
/**
|
|
10
|
+
* No permission changes
|
|
11
|
+
*/
|
|
12
|
+
PermissionChangeType["NONE"] = "none";
|
|
13
|
+
/**
|
|
14
|
+
* Permissions are broadening
|
|
15
|
+
*/
|
|
16
|
+
PermissionChangeType["BROADENING"] = "broadening";
|
|
17
|
+
/**
|
|
18
|
+
* Permissions are changed but not broadening
|
|
19
|
+
*/
|
|
20
|
+
PermissionChangeType["NON_BROADENING"] = "non-broadening";
|
|
21
|
+
})(PermissionChangeType || (exports.PermissionChangeType = PermissionChangeType = {}));
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRpZmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7O0dBRUc7QUFDSCxJQUFZLG9CQWVYO0FBZkQsV0FBWSxvQkFBb0I7SUFDOUI7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpREFBeUIsQ0FBQTtJQUV6Qjs7T0FFRztJQUNILHlEQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFmVyxvQkFBb0Isb0NBQXBCLG9CQUFvQixRQWUvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRHVyYXRpb24gfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBEaWZmZXJlbnQgdHlwZXMgb2YgcGVybWlzc2lvbiByZWxhdGVkIGNoYW5nZXMgaW4gYSBkaWZmXG4gKi9cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25DaGFuZ2VUeXBlIHtcbiAgLyoqXG4gICAqIE5vIHBlcm1pc3Npb24gY2hhbmdlc1xuICAgKi9cbiAgTk9ORSA9ICdub25lJyxcblxuICAvKipcbiAgICogUGVybWlzc2lvbnMgYXJlIGJyb2FkZW5pbmdcbiAgICovXG4gIEJST0FERU5JTkcgPSAnYnJvYWRlbmluZycsXG5cbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIGFyZSBjaGFuZ2VkIGJ1dCBub3QgYnJvYWRlbmluZ1xuICAgKi9cbiAgTk9OX0JST0FERU5JTkcgPSAnbm9uLWJyb2FkZW5pbmcnLFxufVxuXG4vKipcbiAqIE91dHB1dCBvZiB0aGUgZGlmZiBjb21tYW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlJlc3VsdCBleHRlbmRzIER1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFN0YWNrIGRpZmYgZm9ybWF0dGVkIGFzIGEgc3RyaW5nXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZWRTdGFja0RpZmY6IHN0cmluZztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZGlmZiBmb3JtYXR0ZWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlZFNlY3VyaXR5RGlmZjogc3RyaW5nO1xufVxuIl19
|