@aws-cdk/toolkit-lib 0.3.2 → 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/build-info.json +2 -2
- 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/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 +8 -6
- 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 -6
- package/lib/api/shared-private.js +2838 -9213
- package/lib/api/shared-private.js.map +4 -4
- package/lib/api/shared-public.d.ts +18 -38
- package/lib/api/shared-public.js +2187 -25
- 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/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 -1
- package/lib/toolkit/private/index.js +1 -1
- package/lib/toolkit/toolkit.js +142 -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 +3 -4
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./garbage-collector"), exports);
|
|
18
|
+
// testing exports
|
|
19
|
+
__exportStar(require("./progress-printer"), exports);
|
|
20
|
+
__exportStar(require("./stack-refresh"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DO0FBRXBDLGtCQUFrQjtBQUNsQixxREFBbUM7QUFDbkMsa0RBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9nYXJiYWdlLWNvbGxlY3Rvcic7XG5cbi8vIHRlc3RpbmcgZXhwb3J0c1xuZXhwb3J0ICogZnJvbSAnLi9wcm9ncmVzcy1wcmludGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhY2stcmVmcmVzaCc7XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { GcAsset as GCAsset } from './garbage-collector';
|
|
2
|
+
import { type IoHelper } from '../io/private';
|
|
3
|
+
export declare class ProgressPrinter {
|
|
4
|
+
private ioHelper;
|
|
5
|
+
private totalAssets;
|
|
6
|
+
private assetsScanned;
|
|
7
|
+
private taggedAsset;
|
|
8
|
+
private taggedAssetsSizeMb;
|
|
9
|
+
private deletedAssets;
|
|
10
|
+
private deletedAssetsSizeMb;
|
|
11
|
+
private interval;
|
|
12
|
+
private setInterval?;
|
|
13
|
+
private isPaused;
|
|
14
|
+
constructor(ioHelper: IoHelper, totalAssets: number, interval?: number);
|
|
15
|
+
reportScannedAsset(amt: number): void;
|
|
16
|
+
reportTaggedAsset(assets: GCAsset[]): void;
|
|
17
|
+
reportDeletedAsset(assets: GCAsset[]): void;
|
|
18
|
+
start(): void;
|
|
19
|
+
pause(): void;
|
|
20
|
+
resume(): void;
|
|
21
|
+
stop(): void;
|
|
22
|
+
private print;
|
|
23
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProgressPrinter = void 0;
|
|
4
|
+
const chalk = require("chalk");
|
|
5
|
+
const private_1 = require("../io/private");
|
|
6
|
+
const toolkit_error_1 = require("../toolkit-error");
|
|
7
|
+
class ProgressPrinter {
|
|
8
|
+
ioHelper;
|
|
9
|
+
totalAssets;
|
|
10
|
+
assetsScanned;
|
|
11
|
+
taggedAsset;
|
|
12
|
+
taggedAssetsSizeMb;
|
|
13
|
+
deletedAssets;
|
|
14
|
+
deletedAssetsSizeMb;
|
|
15
|
+
interval;
|
|
16
|
+
setInterval;
|
|
17
|
+
isPaused;
|
|
18
|
+
constructor(ioHelper, totalAssets, interval) {
|
|
19
|
+
this.ioHelper = ioHelper;
|
|
20
|
+
this.totalAssets = totalAssets;
|
|
21
|
+
this.assetsScanned = 0;
|
|
22
|
+
this.taggedAsset = 0;
|
|
23
|
+
this.taggedAssetsSizeMb = 0;
|
|
24
|
+
this.deletedAssets = 0;
|
|
25
|
+
this.deletedAssetsSizeMb = 0;
|
|
26
|
+
this.interval = interval ?? 10_000;
|
|
27
|
+
this.isPaused = false;
|
|
28
|
+
}
|
|
29
|
+
reportScannedAsset(amt) {
|
|
30
|
+
this.assetsScanned += amt;
|
|
31
|
+
}
|
|
32
|
+
reportTaggedAsset(assets) {
|
|
33
|
+
this.taggedAsset += assets.length;
|
|
34
|
+
const sizeInBytes = assets.reduce((total, asset) => total + asset.size, 0);
|
|
35
|
+
this.taggedAssetsSizeMb += sizeInBytes / 1_048_576;
|
|
36
|
+
}
|
|
37
|
+
reportDeletedAsset(assets) {
|
|
38
|
+
this.deletedAssets += assets.length;
|
|
39
|
+
const sizeInBytes = assets.reduce((total, asset) => total + asset.size, 0);
|
|
40
|
+
this.deletedAssetsSizeMb += sizeInBytes / 1_048_576;
|
|
41
|
+
}
|
|
42
|
+
start() {
|
|
43
|
+
// If there is already a running setInterval, throw an error.
|
|
44
|
+
// This is because if this.setInterval is reassigned to another setInterval,
|
|
45
|
+
// the original setInterval remains and can no longer be cleared.
|
|
46
|
+
if (this.setInterval) {
|
|
47
|
+
throw new toolkit_error_1.ToolkitError('ProgressPrinter is already running. Stop it first using the stop() method before starting it again.');
|
|
48
|
+
}
|
|
49
|
+
this.setInterval = setInterval(() => {
|
|
50
|
+
if (!this.isPaused) {
|
|
51
|
+
this.print();
|
|
52
|
+
}
|
|
53
|
+
}, this.interval);
|
|
54
|
+
}
|
|
55
|
+
pause() {
|
|
56
|
+
this.isPaused = true;
|
|
57
|
+
}
|
|
58
|
+
resume() {
|
|
59
|
+
this.isPaused = false;
|
|
60
|
+
}
|
|
61
|
+
stop() {
|
|
62
|
+
clearInterval(this.setInterval);
|
|
63
|
+
// print one last time if not paused
|
|
64
|
+
if (!this.isPaused) {
|
|
65
|
+
this.print();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
print() {
|
|
69
|
+
const percentage = ((this.assetsScanned / this.totalAssets) * 100).toFixed(2);
|
|
70
|
+
// print in MiB until we hit at least 1 GiB of data tagged/deleted
|
|
71
|
+
if (Math.max(this.taggedAssetsSizeMb, this.deletedAssetsSizeMb) >= 1000) {
|
|
72
|
+
void this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_INFO.msg(chalk.green(`[${percentage}%] ${this.assetsScanned} files scanned: ${this.taggedAsset} assets (${(this.taggedAssetsSizeMb / 1000).toFixed(2)} GiB) tagged, ${this.deletedAssets} assets (${(this.deletedAssetsSizeMb / 1000).toFixed(2)} GiB) deleted.`)));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
void this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_INFO.msg(chalk.green(`[${percentage}%] ${this.assetsScanned} files scanned: ${this.taggedAsset} assets (${this.taggedAssetsSizeMb.toFixed(2)} MiB) tagged, ${this.deletedAssets} assets (${this.deletedAssetsSizeMb.toFixed(2)} MiB) deleted.`)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.ProgressPrinter = ProgressPrinter;
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtcHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2dyZXNzLXByaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBRS9CLDJDQUFrRDtBQUNsRCxvREFBZ0Q7QUFFaEQsTUFBYSxlQUFlO0lBQ2xCLFFBQVEsQ0FBVztJQUNuQixXQUFXLENBQVM7SUFDcEIsYUFBYSxDQUFTO0lBQ3RCLFdBQVcsQ0FBUztJQUNwQixrQkFBa0IsQ0FBUztJQUMzQixhQUFhLENBQVM7SUFDdEIsbUJBQW1CLENBQVM7SUFDNUIsUUFBUSxDQUFTO0lBQ2pCLFdBQVcsQ0FBaUM7SUFDNUMsUUFBUSxDQUFVO0lBRTFCLFlBQVksUUFBa0IsRUFBRSxXQUFtQixFQUFFLFFBQWlCO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE1BQWlCO1FBQ3hDLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxD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QUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pTLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoRkQsMENBZ0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBHY0Fzc2V0IGFzIEdDQXNzZXQgfSBmcm9tICcuL2dhcmJhZ2UtY29sbGVjdG9yJztcbmltcG9ydCB7IElPLCB0eXBlIElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGNsYXNzIFByb2dyZXNzUHJpbnRlciB7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHRvdGFsQXNzZXRzOiBudW1iZXI7XG4gIHByaXZhdGUgYXNzZXRzU2Nhbm5lZDogbnVtYmVyO1xuICBwcml2YXRlIHRhZ2dlZEFzc2V0OiBudW1iZXI7XG4gIHByaXZhdGUgdGFnZ2VkQXNzZXRzU2l6ZU1iOiBudW1iZXI7XG4gIHByaXZhdGUgZGVsZXRlZEFzc2V0czogbnVtYmVyO1xuICBwcml2YXRlIGRlbGV0ZWRBc3NldHNTaXplTWI6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnRlcnZhbDogbnVtYmVyO1xuICBwcml2YXRlIHNldEludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgaXNQYXVzZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoaW9IZWxwZXI6IElvSGVscGVyLCB0b3RhbEFzc2V0czogbnVtYmVyLCBpbnRlcnZhbD86IG51bWJlcikge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgICB0aGlzLnRvdGFsQXNzZXRzID0gdG90YWxBc3NldHM7XG4gICAgdGhpcy5hc3NldHNTY2FubmVkID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiA9IDA7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzID0gMDtcbiAgICB0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgPSAwO1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbCA/PyAxMF8wMDA7XG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlcG9ydFNjYW5uZWRBc3NldChhbXQ6IG51bWJlcikge1xuICAgIHRoaXMuYXNzZXRzU2Nhbm5lZCArPSBhbXQ7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0VGFnZ2VkQXNzZXQoYXNzZXRzOiBHQ0Fzc2V0W10pIHtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy50YWdnZWRBc3NldHNTaXplTWIgKz0gc2l6ZUluQnl0ZXMgLyAxXzA0OF81NzY7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0RGVsZXRlZEFzc2V0KGFzc2V0czogR0NBc3NldFtdKSB7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzU2l6ZU1iICs9IHNpemVJbkJ5dGVzIC8gMV8wNDhfNTc2O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBydW5uaW5nIHNldEludGVydmFsLCB0aHJvdyBhbiBlcnJvci5cbiAgICAvLyBUaGlzIGlzIGJlY2F1c2UgaWYgdGhpcy5zZXRJbnRlcnZhbCBpcyByZWFzc2lnbmVkIHRvIGFub3RoZXIgc2V0SW50ZXJ2YWwsXG4gICAgLy8gdGhlIG9yaWdpbmFsIHNldEludGVydmFsIHJlbWFpbnMgYW5kIGNhbiBubyBsb25nZXIgYmUgY2xlYXJlZC5cbiAgICBpZiAodGhpcy5zZXRJbnRlcnZhbCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUHJvZ3Jlc3NQcmludGVyIGlzIGFscmVhZHkgcnVubmluZy4gU3RvcCBpdCBmaXJzdCB1c2luZyB0aGUgc3RvcCgpIG1ldGhvZCBiZWZvcmUgc3RhcnRpbmcgaXQgYWdhaW4uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1BhdXNlZCkge1xuICAgICAgICB0aGlzLnByaW50KCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5pbnRlcnZhbCk7XG4gIH1cblxuICBwdWJsaWMgcGF1c2UoKSB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzdW1lKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlcnZhbCk7XG4gICAgLy8gcHJpbnQgb25lIGxhc3QgdGltZSBpZiBub3QgcGF1c2VkXG4gICAgaWYgKCF0aGlzLmlzUGF1c2VkKSB7XG4gICAgICB0aGlzLnByaW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmludCgpIHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gKCh0aGlzLmFzc2V0c1NjYW5uZWQgLyB0aGlzLnRvdGFsQXNzZXRzKSAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICAvLyBwcmludCBpbiBNaUIgdW50aWwgd2UgaGl0IGF0IGxlYXN0IDEgR2lCIG9mIGRhdGEgdGFnZ2VkL2RlbGV0ZWRcbiAgICBpZiAoTWF0aC5tYXgodGhpcy50YWdnZWRBc3NldHNTaXplTWIsIHRoaXMuZGVsZXRlZEFzc2V0c1NpemVNYikgPj0gMTAwMCkge1xuICAgICAgdm9pZCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfSU5GTy5tc2coY2hhbGsuZ3JlZW4oYFske3BlcmNlbnRhZ2V9JV0gJHt0aGlzLmFzc2V0c1NjYW5uZWR9IGZpbGVzIHNjYW5uZWQ6ICR7dGhpcy50YWdnZWRBc3NldH0gYXNzZXRzICgkeyh0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiAvIDEwMDApLnRvRml4ZWQoMil9IEdpQikgdGFnZ2VkLCAke3RoaXMuZGVsZXRlZEFzc2V0c30gYXNzZXRzICgkeyh0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgLyAxMDAwKS50b0ZpeGVkKDIpfSBHaUIpIGRlbGV0ZWQuYCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfSU5GTy5tc2coY2hhbGsuZ3JlZW4oYFske3BlcmNlbnRhZ2V9JV0gJHt0aGlzLmFzc2V0c1NjYW5uZWR9IGZpbGVzIHNjYW5uZWQ6ICR7dGhpcy50YWdnZWRBc3NldH0gYXNzZXRzICgke3RoaXMudGFnZ2VkQXNzZXRzU2l6ZU1iLnRvRml4ZWQoMil9IE1pQikgdGFnZ2VkLCAke3RoaXMuZGVsZXRlZEFzc2V0c30gYXNzZXRzICgke3RoaXMuZGVsZXRlZEFzc2V0c1NpemVNYi50b0ZpeGVkKDIpfSBNaUIpIGRlbGV0ZWQuYCkpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ICloudFormationClient } from '../aws-auth/private';
|
|
2
|
+
import { type IoHelper } from '../io/private';
|
|
3
|
+
export declare class ActiveAssetCache {
|
|
4
|
+
private readonly stacks;
|
|
5
|
+
rememberStack(stackTemplate: string): void;
|
|
6
|
+
contains(asset: string): boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function refreshStacks(cfn: ICloudFormationClient, ioHelper: IoHelper, activeAssets: ActiveAssetCache, qualifier?: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Background Stack Refresh properties
|
|
11
|
+
*/
|
|
12
|
+
export interface BackgroundStackRefreshProps {
|
|
13
|
+
/**
|
|
14
|
+
* The CFN SDK handler
|
|
15
|
+
*/
|
|
16
|
+
readonly cfn: ICloudFormationClient;
|
|
17
|
+
/**
|
|
18
|
+
* Used to send messages.
|
|
19
|
+
*/
|
|
20
|
+
readonly ioHelper: IoHelper;
|
|
21
|
+
/**
|
|
22
|
+
* Active Asset storage
|
|
23
|
+
*/
|
|
24
|
+
readonly activeAssets: ActiveAssetCache;
|
|
25
|
+
/**
|
|
26
|
+
* Stack bootstrap qualifier
|
|
27
|
+
*/
|
|
28
|
+
readonly qualifier?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Class that controls scheduling of the background stack refresh
|
|
32
|
+
*/
|
|
33
|
+
export declare class BackgroundStackRefresh {
|
|
34
|
+
private readonly props;
|
|
35
|
+
private timeout?;
|
|
36
|
+
private lastRefreshTime;
|
|
37
|
+
private queuedPromises;
|
|
38
|
+
constructor(props: BackgroundStackRefreshProps);
|
|
39
|
+
start(): void;
|
|
40
|
+
private refresh;
|
|
41
|
+
private justRefreshedStacks;
|
|
42
|
+
/**
|
|
43
|
+
* Checks if the last successful background refresh happened within the specified time frame.
|
|
44
|
+
* If the last refresh is older than the specified time frame, it returns a Promise that resolves
|
|
45
|
+
* when the next background refresh completes or rejects if the refresh takes too long.
|
|
46
|
+
*/
|
|
47
|
+
noOlderThan(ms: number): Promise<unknown>;
|
|
48
|
+
stop(): void;
|
|
49
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BackgroundStackRefresh = exports.ActiveAssetCache = void 0;
|
|
4
|
+
exports.refreshStacks = refreshStacks;
|
|
5
|
+
const private_1 = require("../io/private");
|
|
6
|
+
const toolkit_error_1 = require("../toolkit-error");
|
|
7
|
+
class ActiveAssetCache {
|
|
8
|
+
stacks = new Set();
|
|
9
|
+
rememberStack(stackTemplate) {
|
|
10
|
+
this.stacks.add(stackTemplate);
|
|
11
|
+
}
|
|
12
|
+
contains(asset) {
|
|
13
|
+
for (const stack of this.stacks) {
|
|
14
|
+
if (stack.includes(asset)) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ActiveAssetCache = ActiveAssetCache;
|
|
22
|
+
async function paginateSdkCall(cb) {
|
|
23
|
+
let finished = false;
|
|
24
|
+
let nextToken;
|
|
25
|
+
while (!finished) {
|
|
26
|
+
nextToken = await cb(nextToken);
|
|
27
|
+
if (nextToken === undefined) {
|
|
28
|
+
finished = true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fetches all relevant stack templates from CloudFormation. It ignores the following stacks:
|
|
34
|
+
* - stacks in DELETE_COMPLETE or DELETE_IN_PROGRESS stage
|
|
35
|
+
* - stacks that are using a different bootstrap qualifier
|
|
36
|
+
*/
|
|
37
|
+
async function fetchAllStackTemplates(cfn, ioHelper, qualifier) {
|
|
38
|
+
const stackNames = [];
|
|
39
|
+
await paginateSdkCall(async (nextToken) => {
|
|
40
|
+
const stacks = await cfn.listStacks({ NextToken: nextToken });
|
|
41
|
+
// We ignore stacks with these statuses because their assets are no longer live
|
|
42
|
+
const ignoredStatues = ['CREATE_FAILED', 'DELETE_COMPLETE', 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'REVIEW_IN_PROGRESS'];
|
|
43
|
+
stackNames.push(...(stacks.StackSummaries ?? [])
|
|
44
|
+
.filter((s) => !ignoredStatues.includes(s.StackStatus))
|
|
45
|
+
.map((s) => s.StackId ?? s.StackName));
|
|
46
|
+
return stacks.NextToken;
|
|
47
|
+
});
|
|
48
|
+
await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Parsing through ${stackNames.length} stacks`));
|
|
49
|
+
const templates = [];
|
|
50
|
+
for (const stack of stackNames) {
|
|
51
|
+
let summary;
|
|
52
|
+
summary = await cfn.getTemplateSummary({
|
|
53
|
+
StackName: stack,
|
|
54
|
+
});
|
|
55
|
+
if (bootstrapFilter(summary.Parameters, qualifier)) {
|
|
56
|
+
// This stack is definitely bootstrapped to a different qualifier so we can safely ignore it
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const template = await cfn.getTemplate({
|
|
61
|
+
StackName: stack,
|
|
62
|
+
});
|
|
63
|
+
templates.push((template.TemplateBody ?? '') + JSON.stringify(summary?.Parameters));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg('Done parsing through stacks'));
|
|
67
|
+
return templates;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Filter out stacks that we KNOW are using a different bootstrap qualifier
|
|
71
|
+
* This is mostly necessary for the integration tests that can run the same app (with the same assets)
|
|
72
|
+
* under different qualifiers.
|
|
73
|
+
* This is necessary because a stack under a different bootstrap could coincidentally reference the same hash
|
|
74
|
+
* and cause a false negative (cause an asset to be preserved when its isolated)
|
|
75
|
+
* This is intentionally done in a way where we ONLY filter out stacks that are meant for a different qualifier
|
|
76
|
+
* because we are okay with false positives.
|
|
77
|
+
*/
|
|
78
|
+
function bootstrapFilter(parameters, qualifier) {
|
|
79
|
+
const bootstrapVersion = parameters?.find((p) => p.ParameterKey === 'BootstrapVersion');
|
|
80
|
+
const splitBootstrapVersion = bootstrapVersion?.DefaultValue?.split('/');
|
|
81
|
+
// We find the qualifier in a specific part of the bootstrap version parameter
|
|
82
|
+
return (qualifier &&
|
|
83
|
+
splitBootstrapVersion &&
|
|
84
|
+
splitBootstrapVersion.length == 4 &&
|
|
85
|
+
splitBootstrapVersion[2] != qualifier);
|
|
86
|
+
}
|
|
87
|
+
async function refreshStacks(cfn, ioHelper, activeAssets, qualifier) {
|
|
88
|
+
try {
|
|
89
|
+
const stacks = await fetchAllStackTemplates(cfn, ioHelper, qualifier);
|
|
90
|
+
for (const stack of stacks) {
|
|
91
|
+
activeAssets.rememberStack(stack);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
throw new toolkit_error_1.ToolkitError(`Error refreshing stacks: ${err}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Class that controls scheduling of the background stack refresh
|
|
100
|
+
*/
|
|
101
|
+
class BackgroundStackRefresh {
|
|
102
|
+
props;
|
|
103
|
+
timeout;
|
|
104
|
+
lastRefreshTime;
|
|
105
|
+
queuedPromises = [];
|
|
106
|
+
constructor(props) {
|
|
107
|
+
this.props = props;
|
|
108
|
+
this.lastRefreshTime = Date.now();
|
|
109
|
+
}
|
|
110
|
+
start() {
|
|
111
|
+
// Since start is going to be called right after the first invocation of refreshStacks,
|
|
112
|
+
// lets wait some time before beginning the background refresh.
|
|
113
|
+
this.timeout = setTimeout(() => this.refresh(), 300_000); // 5 minutes
|
|
114
|
+
}
|
|
115
|
+
async refresh() {
|
|
116
|
+
const startTime = Date.now();
|
|
117
|
+
await refreshStacks(this.props.cfn, this.props.ioHelper, this.props.activeAssets, this.props.qualifier);
|
|
118
|
+
this.justRefreshedStacks();
|
|
119
|
+
// If the last invocation of refreshStacks takes <5 minutes, the next invocation starts 5 minutes after the last one started.
|
|
120
|
+
// If the last invocation of refreshStacks takes >5 minutes, the next invocation starts immediately.
|
|
121
|
+
this.timeout = setTimeout(() => this.refresh(), Math.max(startTime + 300_000 - Date.now(), 0));
|
|
122
|
+
}
|
|
123
|
+
justRefreshedStacks() {
|
|
124
|
+
this.lastRefreshTime = Date.now();
|
|
125
|
+
for (const p of this.queuedPromises.splice(0, this.queuedPromises.length)) {
|
|
126
|
+
p(undefined);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Checks if the last successful background refresh happened within the specified time frame.
|
|
131
|
+
* If the last refresh is older than the specified time frame, it returns a Promise that resolves
|
|
132
|
+
* when the next background refresh completes or rejects if the refresh takes too long.
|
|
133
|
+
*/
|
|
134
|
+
noOlderThan(ms) {
|
|
135
|
+
const horizon = Date.now() - ms;
|
|
136
|
+
// The last refresh happened within the time frame
|
|
137
|
+
if (this.lastRefreshTime >= horizon) {
|
|
138
|
+
return Promise.resolve();
|
|
139
|
+
}
|
|
140
|
+
// The last refresh happened earlier than the time frame
|
|
141
|
+
// We will wait for the latest refresh to land or reject if it takes too long
|
|
142
|
+
return Promise.race([
|
|
143
|
+
new Promise(resolve => this.queuedPromises.push(resolve)),
|
|
144
|
+
new Promise((_, reject) => setTimeout(() => reject(new toolkit_error_1.ToolkitError('refreshStacks took too long; the background thread likely threw an error')), ms)),
|
|
145
|
+
]);
|
|
146
|
+
}
|
|
147
|
+
stop() {
|
|
148
|
+
clearTimeout(this.timeout);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.BackgroundStackRefresh = BackgroundStackRefresh;
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stcmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLXJlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUdBLHNDQVNDO0FBMUdELDJDQUFrRDtBQUNsRCxvREFBZ0Q7QUFFaEQsTUFBYSxnQkFBZ0I7SUFDVixNQUFNLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFMUMsYUFBYSxDQUFDLGFBQXFCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBZkQsNENBZUM7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQXVEO0lBQ3BGLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNyQixJQUFJLFNBQTZCLENBQUM7SUFDbEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsR0FBMEIsRUFBRSxRQUFrQixFQUFFLFNBQWtCO0lBQ3RHLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFD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Q0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEVBQVU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUVoQyxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsNkVBQTZFO1FBQzdFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDRCQUFZLENBQUMsMEVBQTBFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZKLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUF6REQsd0RBeURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJEZWNsYXJhdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgQWN0aXZlQXNzZXRDYWNoZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgcmVtZW1iZXJTdGFjayhzdGFja1RlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YWNrcy5hZGQoc3RhY2tUZW1wbGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgY29udGFpbnMoYXNzZXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgdGhpcy5zdGFja3MpIHtcbiAgICAgIGlmIChzdGFjay5pbmNsdWRlcyhhc3NldCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVNka0NhbGwoY2I6IChuZXh0VG9rZW4/OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPikge1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB3aGlsZSAoIWZpbmlzaGVkKSB7XG4gICAgbmV4dFRva2VuID0gYXdhaXQgY2IobmV4dFRva2VuKTtcbiAgICBpZiAobmV4dFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFsbCByZWxldmFudCBzdGFjayB0ZW1wbGF0ZXMgZnJvbSBDbG91ZEZvcm1hdGlvbi4gSXQgaWdub3JlcyB0aGUgZm9sbG93aW5nIHN0YWNrczpcbiAqIC0gc3RhY2tzIGluIERFTEVURV9DT01QTEVURSBvciBERUxFVEVfSU5fUFJPR1JFU1Mgc3RhZ2VcbiAqIC0gc3RhY2tzIHRoYXQgYXJlIHVzaW5nIGEgZGlmZmVyZW50IGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbGxTdGFja1RlbXBsYXRlcyhjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCwgaW9IZWxwZXI6IElvSGVscGVyLCBxdWFsaWZpZXI/OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RhY2tOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVTZGtDYWxsKGFzeW5jIChuZXh0VG9rZW4pID0+IHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBjZm4ubGlzdFN0YWNrcyh7IE5leHRUb2tlbjogbmV4dFRva2VuIH0pO1xuXG4gICAgLy8gV2UgaWdub3JlIHN0YWNrcyB3aXRoIHRoZXNlIHN0YXR1c2VzIGJlY2F1c2UgdGhlaXIgYXNzZXRzIGFyZSBubyBsb25nZXIgbGl2ZVxuICAgIGNvbnN0IGlnbm9yZWRTdGF0dWVzID0gWydDUkVBVEVfRkFJTEVEJywgJ0RFTEVURV9DT01QTEVURScsICdERUxFVEVfSU5fUFJPR1JFU1MnLCAnREVMRVRFX0ZBSUxFRCcsICdSRVZJRVdfSU5fUFJPR1JFU1MnXTtcbiAgICBzdGFja05hbWVzLnB1c2goXG4gICAgICAuLi4oc3RhY2tzLlN0YWNrU3VtbWFyaWVzID8/IFtdKVxuICAgICAgICAuZmlsdGVyKChzOiBhbnkpID0+ICFpZ25vcmVkU3RhdHVlcy5pbmNsdWRlcyhzLlN0YWNrU3RhdHVzKSlcbiAgICAgICAgLm1hcCgoczogYW55KSA9PiBzLlN0YWNrSWQgPz8gcy5TdGFja05hbWUpLFxuICAgICk7XG5cbiAgICByZXR1cm4gc3RhY2tzLk5leHRUb2tlbjtcbiAgfSk7XG5cbiAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFBhcnNpbmcgdGhyb3VnaCAke3N0YWNrTmFtZXMubGVuZ3RofSBzdGFja3NgKSk7XG5cbiAgY29uc3QgdGVtcGxhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrTmFtZXMpIHtcbiAgICBsZXQgc3VtbWFyeTtcbiAgICBzdW1tYXJ5ID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlU3VtbWFyeSh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgIH0pO1xuXG4gICAgaWYgKGJvb3RzdHJhcEZpbHRlcihzdW1tYXJ5LlBhcmFtZXRlcnMsIHF1YWxpZmllcikpIHtcbiAgICAgIC8vIFRoaXMgc3RhY2sgaXMgZGVmaW5pdGVseSBib290c3RyYXBwZWQgdG8gYSBkaWZmZXJlbnQgcXVhbGlmaWVyIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlIGl0XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlcy5wdXNoKCh0ZW1wbGF0ZS5UZW1wbGF0ZUJvZHkgPz8gJycpICsgSlNPTi5zdHJpbmdpZnkoc3VtbWFyeT8uUGFyYW1ldGVycykpO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKCdEb25lIHBhcnNpbmcgdGhyb3VnaCBzdGFja3MnKSk7XG5cbiAgcmV0dXJuIHRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IHdlIEtOT1cgYXJlIHVzaW5nIGEgZGlmZmVyZW50IGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAqIFRoaXMgaXMgbW9zdGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGludGVncmF0aW9uIHRlc3RzIHRoYXQgY2FuIHJ1biB0aGUgc2FtZSBhcHAgKHdpdGggdGhlIHNhbWUgYXNzZXRzKVxuICogdW5kZXIgZGlmZmVyZW50IHF1YWxpZmllcnMuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGEgc3RhY2sgdW5kZXIgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIGNvdWxkIGNvaW5jaWRlbnRhbGx5IHJlZmVyZW5jZSB0aGUgc2FtZSBoYXNoXG4gKiBhbmQgY2F1c2UgYSBmYWxzZSBuZWdhdGl2ZSAoY2F1c2UgYW4gYXNzZXQgdG8gYmUgcHJlc2VydmVkIHdoZW4gaXRzIGlzb2xhdGVkKVxuICogVGhpcyBpcyBpbnRlbnRpb25hbGx5IGRvbmUgaW4gYSB3YXkgd2hlcmUgd2UgT05MWSBmaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IGFyZSBtZWFudCBmb3IgYSBkaWZmZXJlbnQgcXVhbGlmaWVyXG4gKiBiZWNhdXNlIHdlIGFyZSBva2F5IHdpdGggZmFsc2UgcG9zaXRpdmVzLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBGaWx0ZXIocGFyYW1ldGVycz86IFBhcmFtZXRlckRlY2xhcmF0aW9uW10sIHF1YWxpZmllcj86IHN0cmluZykge1xuICBjb25zdCBib290c3RyYXBWZXJzaW9uID0gcGFyYW1ldGVycz8uZmluZCgocCkgPT4gcC5QYXJhbWV0ZXJLZXkgPT09ICdCb290c3RyYXBWZXJzaW9uJyk7XG4gIGNvbnN0IHNwbGl0Qm9vdHN0cmFwVmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb24/LkRlZmF1bHRWYWx1ZT8uc3BsaXQoJy8nKTtcbiAgLy8gV2UgZmluZCB0aGUgcXVhbGlmaWVyIGluIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyXG4gIHJldHVybiAocXVhbGlmaWVyICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uLmxlbmd0aCA9PSA0ICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uWzJdICE9IHF1YWxpZmllcik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoU3RhY2tzKGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBpb0hlbHBlcjogSW9IZWxwZXIsIGFjdGl2ZUFzc2V0czogQWN0aXZlQXNzZXRDYWNoZSwgcXVhbGlmaWVyPzogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgZmV0Y2hBbGxTdGFja1RlbXBsYXRlcyhjZm4sIGlvSGVscGVyLCBxdWFsaWZpZXIpO1xuICAgIGZvciAoY29uc3Qgc3RhY2sgb2Ygc3RhY2tzKSB7XG4gICAgICBhY3RpdmVBc3NldHMucmVtZW1iZXJTdGFjayhzdGFjayk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBFcnJvciByZWZyZXNoaW5nIHN0YWNrczogJHtlcnJ9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYWNrZ3JvdW5kIFN0YWNrIFJlZnJlc2ggcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ0ZOIFNESyBoYW5kbGVyXG4gICAqL1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcblxuICAvKipcbiAgICogVXNlZCB0byBzZW5kIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgQXNzZXQgc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlO1xuXG4gIC8qKlxuICAgKiBTdGFjayBib290c3RyYXAgcXVhbGlmaWVyXG4gICAqL1xuICByZWFkb25seSBxdWFsaWZpZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgdGhhdCBjb250cm9scyBzY2hlZHVsaW5nIG9mIHRoZSBiYWNrZ3JvdW5kIHN0YWNrIHJlZnJlc2hcbiAqL1xuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRTdGFja1JlZnJlc2gge1xuICBwcml2YXRlIHRpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbiAgcHJpdmF0ZSBsYXN0UmVmcmVzaFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBxdWV1ZWRQcm9taXNlczogQXJyYXk8KHZhbHVlOiB1bmtub3duKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcykge1xuICAgIHRoaXMubGFzdFJlZnJlc2hUaW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydCgpIHtcbiAgICAvLyBTaW5jZSBzdGFydCBpcyBnb2luZyB0byBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIGZpcnN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyxcbiAgICAvLyBsZXRzIHdhaXQgc29tZSB0aW1lIGJlZm9yZSBiZWdpbm5pbmcgdGhlIGJhY2tncm91bmQgcmVmcmVzaC5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaCgpLCAzMDBfMDAwKTsgLy8gNSBtaW51dGVzXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIGF3YWl0IHJlZnJlc2hTdGFja3ModGhpcy5wcm9wcy5jZm4sIHRoaXMucHJvcHMuaW9IZWxwZXIsIHRoaXMucHJvcHMuYWN0aXZlQXNzZXRzLCB0aGlzLnByb3BzLnF1YWxpZmllcik7XG4gICAgdGhpcy5qdXN0UmVmcmVzaGVkU3RhY2tzKCk7XG5cbiAgICAvLyBJZiB0aGUgbGFzdCBpbnZvY2F0aW9uIG9mIHJlZnJlc2hTdGFja3MgdGFrZXMgPDUgbWludXRlcywgdGhlIG5leHQgaW52b2NhdGlvbiBzdGFydHMgNSBtaW51dGVzIGFmdGVyIHRoZSBsYXN0IG9uZSBzdGFydGVkLlxuICAgIC8vIElmIHRoZSBsYXN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyB0YWtlcyA+NSBtaW51dGVzLCB0aGUgbmV4dCBpbnZvY2F0aW9uIHN0YXJ0cyBpbW1lZGlhdGVseS5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaCgpLCBNYXRoLm1heChzdGFydFRpbWUgKyAzMDBfMDAwIC0gRGF0ZS5ub3coKSwgMCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBqdXN0UmVmcmVzaGVkU3RhY2tzKCkge1xuICAgIHRoaXMubGFzdFJlZnJlc2hUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5xdWV1ZWRQcm9taXNlcy5zcGxpY2UoMCwgdGhpcy5xdWV1ZWRQcm9taXNlcy5sZW5ndGgpKSB7XG4gICAgICBwKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgbGFzdCBzdWNjZXNzZnVsIGJhY2tncm91bmQgcmVmcmVzaCBoYXBwZW5lZCB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGZyYW1lLlxuICAgKiBJZiB0aGUgbGFzdCByZWZyZXNoIGlzIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCB0aW1lIGZyYW1lLCBpdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gICAqIHdoZW4gdGhlIG5leHQgYmFja2dyb3VuZCByZWZyZXNoIGNvbXBsZXRlcyBvciByZWplY3RzIGlmIHRoZSByZWZyZXNoIHRha2VzIHRvbyBsb25nLlxuICAgKi9cbiAgcHVibGljIG5vT2xkZXJUaGFuKG1zOiBudW1iZXIpIHtcbiAgICBjb25zdCBob3Jpem9uID0gRGF0ZS5ub3coKSAtIG1zO1xuXG4gICAgLy8gVGhlIGxhc3QgcmVmcmVzaCBoYXBwZW5lZCB3aXRoaW4gdGhlIHRpbWUgZnJhbWVcbiAgICBpZiAodGhpcy5sYXN0UmVmcmVzaFRpbWUgPj0gaG9yaXpvbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZSBsYXN0IHJlZnJlc2ggaGFwcGVuZWQgZWFybGllciB0aGFuIHRoZSB0aW1lIGZyYW1lXG4gICAgLy8gV2Ugd2lsbCB3YWl0IGZvciB0aGUgbGF0ZXN0IHJlZnJlc2ggdG8gbGFuZCBvciByZWplY3QgaWYgaXQgdGFrZXMgdG9vIGxvbmdcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5xdWV1ZWRQcm9taXNlcy5wdXNoKHJlc29sdmUpKSxcbiAgICAgIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBUb29sa2l0RXJyb3IoJ3JlZnJlc2hTdGFja3MgdG9vayB0b28gbG9uZzsgdGhlIGJhY2tncm91bmQgdGhyZWFkIGxpa2VseSB0aHJldyBhbiBlcnJvcicpKSwgbXMpKSxcbiAgICBdKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type HotswapChange } from './common';
|
|
2
|
+
import type { ResourceChange } from '../../payloads/hotswap';
|
|
3
|
+
import type { EvaluateCloudFormationTemplate } from '../cloudformation';
|
|
4
|
+
export declare function isHotswappableAppSyncChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isHotswappableAppSyncChange = isHotswappableAppSyncChange;
|
|
4
|
+
const common_1 = require("./common");
|
|
5
|
+
const util_1 = require("../../util");
|
|
6
|
+
const toolkit_error_1 = require("../toolkit-error");
|
|
7
|
+
async function isHotswappableAppSyncChange(logicalId, change, evaluateCfnTemplate) {
|
|
8
|
+
const isResolver = change.newValue.Type === 'AWS::AppSync::Resolver';
|
|
9
|
+
const isFunction = change.newValue.Type === 'AWS::AppSync::FunctionConfiguration';
|
|
10
|
+
const isGraphQLSchema = change.newValue.Type === 'AWS::AppSync::GraphQLSchema';
|
|
11
|
+
const isAPIKey = change.newValue.Type === 'AWS::AppSync::ApiKey';
|
|
12
|
+
if (!isResolver && !isFunction && !isGraphQLSchema && !isAPIKey) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
const ret = [];
|
|
16
|
+
const classifiedChanges = (0, common_1.classifyChanges)(change, [
|
|
17
|
+
'RequestMappingTemplate',
|
|
18
|
+
'RequestMappingTemplateS3Location',
|
|
19
|
+
'ResponseMappingTemplate',
|
|
20
|
+
'ResponseMappingTemplateS3Location',
|
|
21
|
+
'Code',
|
|
22
|
+
'CodeS3Location',
|
|
23
|
+
'Definition',
|
|
24
|
+
'DefinitionS3Location',
|
|
25
|
+
'Expires',
|
|
26
|
+
]);
|
|
27
|
+
classifiedChanges.reportNonHotswappablePropertyChanges(ret);
|
|
28
|
+
const namesOfHotswappableChanges = Object.keys(classifiedChanges.hotswappableProps);
|
|
29
|
+
if (namesOfHotswappableChanges.length > 0) {
|
|
30
|
+
let physicalName = undefined;
|
|
31
|
+
const arn = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, isFunction ? change.newValue.Properties?.Name : undefined);
|
|
32
|
+
if (isResolver) {
|
|
33
|
+
const arnParts = arn?.split('/');
|
|
34
|
+
physicalName = arnParts ? `${arnParts[3]}.${arnParts[5]}` : undefined;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
physicalName = arn;
|
|
38
|
+
}
|
|
39
|
+
// nothing do here
|
|
40
|
+
if (!physicalName) {
|
|
41
|
+
return ret;
|
|
42
|
+
}
|
|
43
|
+
ret.push({
|
|
44
|
+
change: {
|
|
45
|
+
cause: change,
|
|
46
|
+
resources: [{
|
|
47
|
+
logicalId,
|
|
48
|
+
resourceType: change.newValue.Type,
|
|
49
|
+
physicalName,
|
|
50
|
+
metadata: evaluateCfnTemplate.metadataFor(logicalId),
|
|
51
|
+
}],
|
|
52
|
+
},
|
|
53
|
+
hotswappable: true,
|
|
54
|
+
service: 'appsync',
|
|
55
|
+
apply: async (sdk) => {
|
|
56
|
+
const sdkProperties = {
|
|
57
|
+
...change.oldValue.Properties,
|
|
58
|
+
Definition: change.newValue.Properties?.Definition,
|
|
59
|
+
DefinitionS3Location: change.newValue.Properties?.DefinitionS3Location,
|
|
60
|
+
requestMappingTemplate: change.newValue.Properties?.RequestMappingTemplate,
|
|
61
|
+
requestMappingTemplateS3Location: change.newValue.Properties?.RequestMappingTemplateS3Location,
|
|
62
|
+
responseMappingTemplate: change.newValue.Properties?.ResponseMappingTemplate,
|
|
63
|
+
responseMappingTemplateS3Location: change.newValue.Properties?.ResponseMappingTemplateS3Location,
|
|
64
|
+
code: change.newValue.Properties?.Code,
|
|
65
|
+
codeS3Location: change.newValue.Properties?.CodeS3Location,
|
|
66
|
+
expires: change.newValue.Properties?.Expires,
|
|
67
|
+
};
|
|
68
|
+
const evaluatedResourceProperties = await evaluateCfnTemplate.evaluateCfnExpression(sdkProperties);
|
|
69
|
+
const sdkRequestObject = (0, util_1.transformObjectKeys)(evaluatedResourceProperties, util_1.lowerCaseFirstCharacter);
|
|
70
|
+
// resolve s3 location files as SDK doesn't take in s3 location but inline code
|
|
71
|
+
if (sdkRequestObject.requestMappingTemplateS3Location) {
|
|
72
|
+
sdkRequestObject.requestMappingTemplate = await fetchFileFromS3(sdkRequestObject.requestMappingTemplateS3Location, sdk);
|
|
73
|
+
delete sdkRequestObject.requestMappingTemplateS3Location;
|
|
74
|
+
}
|
|
75
|
+
if (sdkRequestObject.responseMappingTemplateS3Location) {
|
|
76
|
+
sdkRequestObject.responseMappingTemplate = await fetchFileFromS3(sdkRequestObject.responseMappingTemplateS3Location, sdk);
|
|
77
|
+
delete sdkRequestObject.responseMappingTemplateS3Location;
|
|
78
|
+
}
|
|
79
|
+
if (sdkRequestObject.definitionS3Location) {
|
|
80
|
+
sdkRequestObject.definition = await fetchFileFromS3(sdkRequestObject.definitionS3Location, sdk);
|
|
81
|
+
delete sdkRequestObject.definitionS3Location;
|
|
82
|
+
}
|
|
83
|
+
if (sdkRequestObject.codeS3Location) {
|
|
84
|
+
sdkRequestObject.code = await fetchFileFromS3(sdkRequestObject.codeS3Location, sdk);
|
|
85
|
+
delete sdkRequestObject.codeS3Location;
|
|
86
|
+
}
|
|
87
|
+
if (isResolver) {
|
|
88
|
+
await sdk.appsync().updateResolver(sdkRequestObject);
|
|
89
|
+
}
|
|
90
|
+
else if (isFunction) {
|
|
91
|
+
// Function version is only applicable when using VTL and mapping templates
|
|
92
|
+
// Runtime only applicable when using code (JS mapping templates)
|
|
93
|
+
if (sdkRequestObject.code) {
|
|
94
|
+
delete sdkRequestObject.functionVersion;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
delete sdkRequestObject.runtime;
|
|
98
|
+
}
|
|
99
|
+
const functions = await sdk.appsync().listFunctions({ apiId: sdkRequestObject.apiId });
|
|
100
|
+
const { functionId } = functions.find((fn) => fn.name === physicalName) ?? {};
|
|
101
|
+
// Updating multiple functions at the same time or along with graphql schema results in `ConcurrentModificationException`
|
|
102
|
+
await exponentialBackOffRetry(() => sdk.appsync().updateFunction({
|
|
103
|
+
...sdkRequestObject,
|
|
104
|
+
functionId: functionId,
|
|
105
|
+
}), 6, 1000, 'ConcurrentModificationException');
|
|
106
|
+
}
|
|
107
|
+
else if (isGraphQLSchema) {
|
|
108
|
+
let schemaCreationResponse = await sdk
|
|
109
|
+
.appsync()
|
|
110
|
+
.startSchemaCreation(sdkRequestObject);
|
|
111
|
+
while (schemaCreationResponse.status &&
|
|
112
|
+
['PROCESSING', 'DELETING'].some((status) => status === schemaCreationResponse.status)) {
|
|
113
|
+
await sleep(1000); // poll every second
|
|
114
|
+
const getSchemaCreationStatusRequest = {
|
|
115
|
+
apiId: sdkRequestObject.apiId,
|
|
116
|
+
};
|
|
117
|
+
schemaCreationResponse = await sdk.appsync().getSchemaCreationStatus(getSchemaCreationStatusRequest);
|
|
118
|
+
}
|
|
119
|
+
if (schemaCreationResponse.status === 'FAILED') {
|
|
120
|
+
throw new toolkit_error_1.ToolkitError(schemaCreationResponse.details ?? 'Schema creation has failed.');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// isApiKey
|
|
125
|
+
if (!sdkRequestObject.id) {
|
|
126
|
+
// ApiKeyId is optional in CFN but required in SDK. Grab the KeyId from physicalArn if not available as part of CFN template
|
|
127
|
+
const arnParts = physicalName?.split('/');
|
|
128
|
+
if (arnParts && arnParts.length === 4) {
|
|
129
|
+
sdkRequestObject.id = arnParts[3];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
await sdk.appsync().updateApiKey(sdkRequestObject);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return ret;
|
|
138
|
+
}
|
|
139
|
+
async function fetchFileFromS3(s3Url, sdk) {
|
|
140
|
+
const s3PathParts = s3Url.split('/');
|
|
141
|
+
const s3Bucket = s3PathParts[2]; // first two are "s3:" and "" due to s3://
|
|
142
|
+
const s3Key = s3PathParts.splice(3).join('/'); // after removing first three we reconstruct the key
|
|
143
|
+
return (await sdk.s3().getObject({ Bucket: s3Bucket, Key: s3Key })).Body?.transformToString();
|
|
144
|
+
}
|
|
145
|
+
async function exponentialBackOffRetry(fn, numOfRetries, backOff, errorCodeToRetry) {
|
|
146
|
+
try {
|
|
147
|
+
await fn();
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (error && error.name === errorCodeToRetry && numOfRetries > 0) {
|
|
151
|
+
await sleep(backOff); // time to wait doubles everytime function fails, starts at 1 second
|
|
152
|
+
await exponentialBackOffRetry(fn, numOfRetries - 1, backOff * 2, errorCodeToRetry);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function sleep(ms) {
|
|
160
|
+
return new Promise((ok) => setTimeout(ok, ms));
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1tYXBwaW5nLXRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwcHN5bmMtbWFwcGluZy10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxrRUE0SkM7QUF2S0QscUNBR2tCO0FBRWxCLHFDQUEwRTtBQUkxRSxvREFBZ0Q7QUFFekMsS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxTQUFpQixFQUNqQixNQUFzQixFQUN0QixtQkFBbUQ7SUFFbkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssd0JBQXdCLENBQUM7SUFDckUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUsscUNBQXFDLENBQUM7SUFDbEYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssNkJBQTZCLENBQUM7SUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLENBQUM7SUFDakUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFvQixFQUFFLENBQUM7SUFFaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHdCQUFlLEVBQUMsTUFBTSxFQUFFO1FBQ2hELHdCQUF3QjtRQUN4QixrQ0FBa0M7UUFDbEMseUJBQXlCO1FBQ3pCLG1DQUFtQztRQUNuQyxNQUFNO1FBQ04sZ0JBQWdCO1FBQ2hCLFlBQVk7UUFDWixzQkFBc0I7UUFDdEIsU0FBUztLQUNWLENBQUMsQ0FBQztJQUNILGlCQUFpQixDQUFDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTVELE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFB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LEVBQUUsQ0FBQztJQUNiLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0VBQW9FO1lBQzFGLE1BQU0sdUJBQXVCLENBQUMsRUFBRSxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCxcbiAgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hcHBzeW5jJztcbmltcG9ydCB7XG4gIHR5cGUgSG90c3dhcENoYW5nZSxcbiAgY2xhc3NpZnlDaGFuZ2VzLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMvaG90c3dhcCc7XG5pbXBvcnQgeyBsb3dlckNhc2VGaXJzdENoYXJhY3RlciwgdHJhbnNmb3JtT2JqZWN0S2V5cyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcblxuaW1wb3J0IHR5cGUgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlQXBwU3luY0NoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcENoYW5nZVtdPiB7XG4gIGNvbnN0IGlzUmVzb2x2ZXIgPSBjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInO1xuICBjb25zdCBpc0Z1bmN0aW9uID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvbic7XG4gIGNvbnN0IGlzR3JhcGhRTFNjaGVtYSA9IGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpBcHBTeW5jOjpHcmFwaFFMU2NoZW1hJztcbiAgY29uc3QgaXNBUElLZXkgPSBjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6QXBwU3luYzo6QXBpS2V5JztcbiAgaWYgKCFpc1Jlc29sdmVyICYmICFpc0Z1bmN0aW9uICYmICFpc0dyYXBoUUxTY2hlbWEgJiYgIWlzQVBJS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcmV0OiBIb3Rzd2FwQ2hhbmdlW10gPSBbXTtcblxuICBjb25zdCBjbGFzc2lmaWVkQ2hhbmdlcyA9IGNsYXNzaWZ5Q2hhbmdlcyhjaGFuZ2UsIFtcbiAgICAnUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZScsXG4gICAgJ1JlcXVlc3RNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uJyxcbiAgICAnUmVzcG9uc2VNYXBwaW5nVGVtcGxhdGUnLFxuICAgICdSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24nLFxuICAgICdDb2RlJyxcbiAgICAnQ29kZVMzTG9jYXRpb24nLFxuICAgICdEZWZpbml0aW9uJyxcbiAgICAnRGVmaW5pdGlvblMzTG9jYXRpb24nLFxuICAgICdFeHBpcmVzJyxcbiAgXSk7XG4gIGNsYXNzaWZpZWRDaGFuZ2VzLnJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQpO1xuXG4gIGNvbnN0IG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzID0gT2JqZWN0LmtleXMoY2xhc3NpZmllZENoYW5nZXMuaG90c3dhcHBhYmxlUHJvcHMpO1xuICBpZiAobmFtZXNPZkhvdHN3YXBwYWJsZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgIGxldCBwaHlzaWNhbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhcm4gPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lKFxuICAgICAgbG9naWNhbElkLFxuICAgICAgaXNGdW5jdGlvbiA/IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5OYW1lIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgaWYgKGlzUmVzb2x2ZXIpIHtcbiAgICAgIGNvbnN0IGFyblBhcnRzID0gYXJuPy5zcGxpdCgnLycpO1xuICAgICAgcGh5c2ljYWxOYW1lID0gYXJuUGFydHMgPyBgJHthcm5QYXJ0c1szXX0uJHthcm5QYXJ0c1s1XX1gIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBwaHlzaWNhbE5hbWUgPSBhcm47XG4gICAgfVxuXG4gICAgLy8gbm90aGluZyBkbyBoZXJlXG4gICAgaWYgKCFwaHlzaWNhbE5hbWUpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goe1xuICAgICAgY2hhbmdlOiB7XG4gICAgICAgIGNhdXNlOiBjaGFuZ2UsXG4gICAgICAgIHJlc291cmNlczogW3tcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgICBwaHlzaWNhbE5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfV0sXG4gICAgICB9LFxuICAgICAgaG90c3dhcHBhYmxlOiB0cnVlLFxuICAgICAgc2VydmljZTogJ2FwcHN5bmMnLFxuICAgICAgYXBwbHk6IGFzeW5jIChzZGs6IFNESykgPT4ge1xuICAgICAgICBjb25zdCBzZGtQcm9wZXJ0aWVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgICAgICAgICAuLi5jaGFuZ2Uub2xkVmFsdWUuUHJvcGVydGllcyxcbiAgICAgICAgICBEZWZpbml0aW9uOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uRGVmaW5pdGlvbixcbiAgICAgICAgICBEZWZpbml0aW9uUzNMb2NhdGlvbjogY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LkRlZmluaXRpb25TM0xvY2F0aW9uLFxuICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SZXF1ZXN0TWFwcGluZ1RlbXBsYXRlLFxuICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24sXG4gICAgICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SZXNwb25zZU1hcHBpbmdUZW1wbGF0ZSxcbiAgICAgICAgICByZXNwb25zZU1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb246IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SZXNwb25zZU1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24sXG4gICAgICAgICAgY29kZTogY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LkNvZGUsXG4gICAgICAgICAgY29kZVMzTG9jYXRpb246IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5Db2RlUzNMb2NhdGlvbixcbiAgICAgICAgICBleHBpcmVzOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uRXhwaXJlcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkUmVzb3VyY2VQcm9wZXJ0aWVzID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oc2RrUHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHNka1JlcXVlc3RPYmplY3QgPSB0cmFuc2Zvcm1PYmplY3RLZXlzKGV2YWx1YXRlZFJlc291cmNlUHJvcGVydGllcywgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIpO1xuXG4gICAgICAgIC8vIHJlc29sdmUgczMgbG9jYXRpb24gZmlsZXMgYXMgU0RLIGRvZXNuJ3QgdGFrZSBpbiBzMyBsb2NhdGlvbiBidXQgaW5saW5lIGNvZGVcbiAgICAgICAgaWYgKHNka1JlcXVlc3RPYmplY3QucmVxdWVzdE1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24pIHtcbiAgICAgICAgICBzZGtSZXF1ZXN0T2JqZWN0LnJlcXVlc3RNYXBwaW5nVGVtcGxhdGUgPSBhd2FpdCBmZXRjaEZpbGVGcm9tUzMoXG4gICAgICAgICAgICBzZGtSZXF1ZXN0T2JqZWN0LnJlcXVlc3RNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uLFxuICAgICAgICAgICAgc2RrLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIHNka1JlcXVlc3RPYmplY3QucmVxdWVzdE1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNka1JlcXVlc3RPYmplY3QucmVzcG9uc2VNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uKSB7XG4gICAgICAgICAgc2RrUmVxdWVzdE9iamVjdC5yZXNwb25zZU1hcHBpbmdUZW1wbGF0ZSA9IGF3YWl0IGZldGNoRmlsZUZyb21TMyhcbiAgICAgICAgICAgIHNka1JlcXVlc3RPYmplY3QucmVzcG9uc2VNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uLFxuICAgICAgICAgICAgc2RrLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIHNka1JlcXVlc3RPYmplY3QucmVzcG9uc2VNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZGtSZXF1ZXN0T2JqZWN0LmRlZmluaXRpb25TM0xvY2F0aW9uKSB7XG4gICAgICAgICAgc2RrUmVxdWVzdE9iamVjdC5kZWZpbml0aW9uID0gYXdhaXQgZmV0Y2hGaWxlRnJvbVMzKHNka1JlcXVlc3RPYmplY3QuZGVmaW5pdGlvblMzTG9jYXRpb24sIHNkayk7XG4gICAgICAgICAgZGVsZXRlIHNka1JlcXVlc3RPYmplY3QuZGVmaW5pdGlvblMzTG9jYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNka1JlcXVlc3RPYmplY3QuY29kZVMzTG9jYXRpb24pIHtcbiAgICAgICAgICBzZGtSZXF1ZXN0T2JqZWN0LmNvZGUgPSBhd2FpdCBmZXRjaEZpbGVGcm9tUzMoc2RrUmVxdWVzdE9iamVjdC5jb2RlUzNMb2NhdGlvbiwgc2RrKTtcbiAgICAgICAgICBkZWxldGUgc2RrUmVxdWVzdE9iamVjdC5jb2RlUzNMb2NhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Jlc29sdmVyKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmFwcHN5bmMoKS51cGRhdGVSZXNvbHZlcihzZGtSZXF1ZXN0T2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKSB7XG4gICAgICAgICAgLy8gRnVuY3Rpb24gdmVyc2lvbiBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiB1c2luZyBWVEwgYW5kIG1hcHBpbmcgdGVtcGxhdGVzXG4gICAgICAgICAgLy8gUnVudGltZSBvbmx5IGFwcGxpY2FibGUgd2hlbiB1c2luZyBjb2RlIChKUyBtYXBwaW5nIHRlbXBsYXRlcylcbiAgICAgICAgICBpZiAoc2RrUmVxdWVzdE9iamVjdC5jb2RlKSB7XG4gICAgICAgICAgICBkZWxldGUgc2RrUmVxdWVzdE9iamVjdC5mdW5jdGlvblZlcnNpb247XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzZGtSZXF1ZXN0T2JqZWN0LnJ1bnRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gYXdhaXQgc2RrLmFwcHN5bmMoKS5saXN0RnVuY3Rpb25zKHsgYXBpSWQ6IHNka1JlcXVlc3RPYmplY3QuYXBpSWQgfSk7XG4gICAgICAgICAgY29uc3QgeyBmdW5jdGlvbklkIH0gPSBmdW5jdGlvbnMuZmluZCgoZm4pID0+IGZuLm5hbWUgPT09IHBoeXNpY2FsTmFtZSkgPz8ge307XG4gICAgICAgICAgLy8gVXBkYXRpbmcgbXVsdGlwbGUgZnVuY3Rpb25zIGF0IHRoZSBzYW1lIHRpbWUgb3IgYWxvbmcgd2l0aCBncmFwaHFsIHNjaGVtYSByZXN1bHRzIGluIGBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uYFxuICAgICAgICAgIGF3YWl0IGV4cG9uZW50aWFsQmFja09mZlJldHJ5KFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgc2RrLmFwcHN5bmMoKS51cGRhdGVGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgLi4uc2RrUmVxdWVzdE9iamVjdCxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbklkOiBmdW5jdGlvbklkLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDYsXG4gICAgICAgICAgICAxMDAwLFxuICAgICAgICAgICAgJ0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24nLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHcmFwaFFMU2NoZW1hKSB7XG4gICAgICAgICAgbGV0IHNjaGVtYUNyZWF0aW9uUmVzcG9uc2U6IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCA9IGF3YWl0IHNka1xuICAgICAgICAgICAgLmFwcHN5bmMoKVxuICAgICAgICAgICAgLnN0YXJ0U2NoZW1hQ3JlYXRpb24oc2RrUmVxdWVzdE9iamVjdCk7XG4gICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgc2NoZW1hQ3JlYXRpb25SZXNwb25zZS5zdGF0dXMgJiZcbiAgICAgICAgICAgIFsnUFJPQ0VTU0lORycsICdERUxFVElORyddLnNvbWUoKHN0YXR1cykgPT4gc3RhdHVzID09PSBzY2hlbWFDcmVhdGlvblJlc3BvbnNlLnN0YXR1cylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApOyAvLyBwb2xsIGV2ZXJ5IHNlY29uZFxuICAgICAgICAgICAgY29uc3QgZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNSZXF1ZXN0OiBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgICAgICAgYXBpSWQ6IHNka1JlcXVlc3RPYmplY3QuYXBpSWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2NoZW1hQ3JlYXRpb25SZXNwb25zZSA9IGF3YWl0IHNkay5hcHBzeW5jKCkuZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXMoZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNSZXF1ZXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNjaGVtYUNyZWF0aW9uUmVzcG9uc2Uuc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihzY2hlbWFDcmVhdGlvblJlc3BvbnNlLmRldGFpbHMgPz8gJ1NjaGVtYSBjcmVhdGlvbiBoYXMgZmFpbGVkLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpc0FwaUtleVxuICAgICAgICAgIGlmICghc2RrUmVxdWVzdE9iamVjdC5pZCkge1xuICAgICAgICAgICAgLy8gQXBpS2V5SWQgaXMgb3B0aW9uYWwgaW4gQ0ZOIGJ1dCByZXF1aXJlZCBpbiBTREsuIEdyYWIgdGhlIEtleUlkIGZyb20gcGh5c2ljYWxBcm4gaWYgbm90IGF2YWlsYWJsZSBhcyBwYXJ0IG9mIENGTiB0ZW1wbGF0ZVxuICAgICAgICAgICAgY29uc3QgYXJuUGFydHMgPSBwaHlzaWNhbE5hbWU/LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBpZiAoYXJuUGFydHMgJiYgYXJuUGFydHMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgIHNka1JlcXVlc3RPYmplY3QuaWQgPSBhcm5QYXJ0c1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2RrLmFwcHN5bmMoKS51cGRhdGVBcGlLZXkoc2RrUmVxdWVzdE9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEZpbGVGcm9tUzMoczNVcmw6IHN0cmluZywgc2RrOiBTREspIHtcbiAgY29uc3QgczNQYXRoUGFydHMgPSBzM1VybC5zcGxpdCgnLycpO1xuICBjb25zdCBzM0J1Y2tldCA9IHMzUGF0aFBhcnRzWzJdOyAvLyBmaXJzdCB0d28gYXJlIFwiczM6XCIgYW5kIFwiXCIgZHVlIHRvIHMzOi8vXG4gIGNvbnN0IHMzS2V5ID0gczNQYXRoUGFydHMuc3BsaWNlKDMpLmpvaW4oJy8nKTsgLy8gYWZ0ZXIgcmVtb3ZpbmcgZmlyc3QgdGhyZWUgd2UgcmVjb25zdHJ1Y3QgdGhlIGtleVxuICByZXR1cm4gKGF3YWl0IHNkay5zMygpLmdldE9iamVjdCh7IEJ1Y2tldDogczNCdWNrZXQsIEtleTogczNLZXkgfSkpLkJvZHk/LnRyYW5zZm9ybVRvU3RyaW5nKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cG9uZW50aWFsQmFja09mZlJldHJ5KGZuOiAoKSA9PiBQcm9taXNlPGFueT4sIG51bU9mUmV0cmllczogbnVtYmVyLCBiYWNrT2ZmOiBudW1iZXIsIGVycm9yQ29kZVRvUmV0cnk6IHN0cmluZykge1xuICB0cnkge1xuICAgIGF3YWl0IGZuKCk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoZXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gZXJyb3JDb2RlVG9SZXRyeSAmJiBudW1PZlJldHJpZXMgPiAwKSB7XG4gICAgICBhd2FpdCBzbGVlcChiYWNrT2ZmKTsgLy8gdGltZSB0byB3YWl0IGRvdWJsZXMgZXZlcnl0aW1lIGZ1bmN0aW9uIGZhaWxzLCBzdGFydHMgYXQgMSBzZWNvbmRcbiAgICAgIGF3YWl0IGV4cG9uZW50aWFsQmFja09mZlJldHJ5KGZuLCBudW1PZlJldHJpZXMgLSAxLCBiYWNrT2ZmICogMiwgZXJyb3JDb2RlVG9SZXRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type HotswapChange } from './common';
|
|
2
|
+
import type { ResourceChange } from '../../payloads/hotswap';
|
|
3
|
+
import type { EvaluateCloudFormationTemplate } from '../cloudformation';
|
|
4
|
+
export declare function isHotswappableCodeBuildProjectChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;
|