@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,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DiffFormatter = void 0;
|
|
4
|
+
const node_util_1 = require("node:util");
|
|
5
|
+
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
|
6
|
+
const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
|
|
7
|
+
const chalk = require("chalk");
|
|
8
|
+
const payloads_1 = require("../../payloads");
|
|
9
|
+
const private_1 = require("../io/private");
|
|
10
|
+
const streams_1 = require("../streams");
|
|
11
|
+
/**
|
|
12
|
+
* Class for formatting the diff output
|
|
13
|
+
*/
|
|
14
|
+
class DiffFormatter {
|
|
15
|
+
ioHelper;
|
|
16
|
+
oldTemplate;
|
|
17
|
+
newTemplate;
|
|
18
|
+
stackName;
|
|
19
|
+
changeSet;
|
|
20
|
+
nestedStacks;
|
|
21
|
+
isImport;
|
|
22
|
+
/**
|
|
23
|
+
* Stores the TemplateDiffs that get calculated in this DiffFormatter,
|
|
24
|
+
* indexed by the stack name.
|
|
25
|
+
*/
|
|
26
|
+
_diffs = {};
|
|
27
|
+
constructor(props) {
|
|
28
|
+
this.ioHelper = props.ioHelper;
|
|
29
|
+
this.oldTemplate = props.templateInfo.oldTemplate;
|
|
30
|
+
this.newTemplate = props.templateInfo.newTemplate;
|
|
31
|
+
this.stackName = props.templateInfo.newTemplate.stackName;
|
|
32
|
+
this.changeSet = props.templateInfo.changeSet;
|
|
33
|
+
this.nestedStacks = props.templateInfo.nestedStacks;
|
|
34
|
+
this.isImport = props.templateInfo.isImport ?? false;
|
|
35
|
+
}
|
|
36
|
+
get diffs() {
|
|
37
|
+
return this._diffs;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get or creates the diff of a stack.
|
|
41
|
+
* If it creates the diff, it stores the result in a map for
|
|
42
|
+
* easier retreval later.
|
|
43
|
+
*/
|
|
44
|
+
diff(stackName, oldTemplate) {
|
|
45
|
+
const realStackName = stackName ?? this.stackName;
|
|
46
|
+
if (!this._diffs[realStackName]) {
|
|
47
|
+
this._diffs[realStackName] = (0, cloudformation_diff_1.fullDiff)(oldTemplate ?? this.oldTemplate, this.newTemplate.template, this.changeSet, this.isImport);
|
|
48
|
+
}
|
|
49
|
+
return this._diffs[realStackName];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Return whether the diff has security-impacting changes that need confirmation.
|
|
53
|
+
*
|
|
54
|
+
* If no stackName is given, then the root stack name is used.
|
|
55
|
+
*/
|
|
56
|
+
permissionType(stackName) {
|
|
57
|
+
const diff = this.diff(stackName);
|
|
58
|
+
if (diff.permissionsBroadened) {
|
|
59
|
+
return payloads_1.PermissionChangeType.BROADENING;
|
|
60
|
+
}
|
|
61
|
+
else if (diff.permissionsAnyChanges) {
|
|
62
|
+
return payloads_1.PermissionChangeType.NON_BROADENING;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return payloads_1.PermissionChangeType.NONE;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format the stack diff
|
|
70
|
+
*/
|
|
71
|
+
formatStackDiff(options = {}) {
|
|
72
|
+
const ioDefaultHelper = new private_1.IoDefaultMessages(this.ioHelper);
|
|
73
|
+
return this.formatStackDiffHelper(this.oldTemplate, this.stackName, this.nestedStacks, {
|
|
74
|
+
...options,
|
|
75
|
+
ioDefaultHelper,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
formatStackDiffHelper(oldTemplate, stackName, nestedStackTemplates, options) {
|
|
79
|
+
let diff = this.diff(stackName, oldTemplate);
|
|
80
|
+
// The stack diff is formatted via `Formatter`, which takes in a stream
|
|
81
|
+
// and sends its output directly to that stream. To faciliate use of the
|
|
82
|
+
// global CliIoHost, we create our own stream to capture the output of
|
|
83
|
+
// `Formatter` and return the output as a string for the consumer of
|
|
84
|
+
// `formatStackDiff` to decide what to do with it.
|
|
85
|
+
const stream = new streams_1.StringWriteStream();
|
|
86
|
+
let numStacksWithChanges = 0;
|
|
87
|
+
let formattedDiff = '';
|
|
88
|
+
let filteredChangesCount = 0;
|
|
89
|
+
try {
|
|
90
|
+
// must output the stack name if there are differences, even if quiet
|
|
91
|
+
if (stackName && (!options.quiet || !diff.isEmpty)) {
|
|
92
|
+
stream.write((0, node_util_1.format)(`Stack ${chalk.bold(stackName)}\n`));
|
|
93
|
+
}
|
|
94
|
+
if (!options.quiet && this.isImport) {
|
|
95
|
+
stream.write('Parameters and rules created during migration do not affect resource configuration.\n');
|
|
96
|
+
}
|
|
97
|
+
// detect and filter out mangled characters from the diff
|
|
98
|
+
if (diff.differenceCount && !options.strict) {
|
|
99
|
+
const mangledNewTemplate = JSON.parse((0, cloudformation_diff_1.mangleLikeCloudFormation)(JSON.stringify(this.newTemplate.template)));
|
|
100
|
+
const mangledDiff = (0, cloudformation_diff_1.fullDiff)(this.oldTemplate, mangledNewTemplate, this.changeSet);
|
|
101
|
+
filteredChangesCount = Math.max(0, diff.differenceCount - mangledDiff.differenceCount);
|
|
102
|
+
if (filteredChangesCount > 0) {
|
|
103
|
+
diff = mangledDiff;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// filter out 'AWS::CDK::Metadata' resources from the template
|
|
107
|
+
// filter out 'CheckBootstrapVersion' rules from the template
|
|
108
|
+
if (!options.strict) {
|
|
109
|
+
obscureDiff(diff);
|
|
110
|
+
}
|
|
111
|
+
if (!diff.isEmpty) {
|
|
112
|
+
numStacksWithChanges++;
|
|
113
|
+
// formatDifferences updates the stream with the formatted stack diff
|
|
114
|
+
(0, cloudformation_diff_1.formatDifferences)(stream, diff, {
|
|
115
|
+
...logicalIdMapFromTemplate(this.oldTemplate),
|
|
116
|
+
...buildLogicalToPathMap(this.newTemplate),
|
|
117
|
+
}, options.context);
|
|
118
|
+
}
|
|
119
|
+
else if (!options.quiet) {
|
|
120
|
+
stream.write(chalk.green('There were no differences\n'));
|
|
121
|
+
}
|
|
122
|
+
if (filteredChangesCount > 0) {
|
|
123
|
+
stream.write(chalk.yellow(`Omitted ${filteredChangesCount} changes because they are likely mangled non-ASCII characters. Use --strict to print them.\n`));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
// store the stream containing a formatted stack diff
|
|
128
|
+
formattedDiff = stream.toString();
|
|
129
|
+
stream.end();
|
|
130
|
+
}
|
|
131
|
+
for (const nestedStackLogicalId of Object.keys(nestedStackTemplates ?? {})) {
|
|
132
|
+
if (!nestedStackTemplates) {
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
const nestedStack = nestedStackTemplates[nestedStackLogicalId];
|
|
136
|
+
this.newTemplate._template = nestedStack.generatedTemplate;
|
|
137
|
+
const nextDiff = this.formatStackDiffHelper(nestedStack.deployedTemplate, nestedStack.physicalName ?? nestedStackLogicalId, nestedStack.nestedStackTemplates, options);
|
|
138
|
+
numStacksWithChanges += nextDiff.numStacksWithChanges;
|
|
139
|
+
formattedDiff += nextDiff.formattedDiff;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
numStacksWithChanges,
|
|
143
|
+
formattedDiff,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Format the security diff
|
|
148
|
+
*/
|
|
149
|
+
formatSecurityDiff() {
|
|
150
|
+
const diff = this.diff();
|
|
151
|
+
// The security diff is formatted via `Formatter`, which takes in a stream
|
|
152
|
+
// and sends its output directly to that stream. To faciliate use of the
|
|
153
|
+
// global CliIoHost, we create our own stream to capture the output of
|
|
154
|
+
// `Formatter` and return the output as a string for the consumer of
|
|
155
|
+
// `formatSecurityDiff` to decide what to do with it.
|
|
156
|
+
const stream = new streams_1.StringWriteStream();
|
|
157
|
+
stream.write((0, node_util_1.format)(`Stack ${chalk.bold(this.stackName)}\n`));
|
|
158
|
+
try {
|
|
159
|
+
// formatSecurityChanges updates the stream with the formatted security diff
|
|
160
|
+
(0, cloudformation_diff_1.formatSecurityChanges)(stream, diff, buildLogicalToPathMap(this.newTemplate));
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
stream.end();
|
|
164
|
+
}
|
|
165
|
+
// store the stream containing a formatted stack diff
|
|
166
|
+
const formattedDiff = stream.toString();
|
|
167
|
+
return { formattedDiff, permissionChangeType: this.permissionType() };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.DiffFormatter = DiffFormatter;
|
|
171
|
+
function buildLogicalToPathMap(stack) {
|
|
172
|
+
const map = {};
|
|
173
|
+
for (const md of stack.findMetadataByType(cxschema.ArtifactMetadataEntryType.LOGICAL_ID)) {
|
|
174
|
+
map[md.data] = md.path;
|
|
175
|
+
}
|
|
176
|
+
return map;
|
|
177
|
+
}
|
|
178
|
+
function logicalIdMapFromTemplate(template) {
|
|
179
|
+
const ret = {};
|
|
180
|
+
for (const [logicalId, resource] of Object.entries(template.Resources ?? {})) {
|
|
181
|
+
const path = resource?.Metadata?.['aws:cdk:path'];
|
|
182
|
+
if (path) {
|
|
183
|
+
ret[logicalId] = path;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return ret;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove any template elements that we don't want to show users.
|
|
190
|
+
* This is currently:
|
|
191
|
+
* - AWS::CDK::Metadata resource
|
|
192
|
+
* - CheckBootstrapVersion Rule
|
|
193
|
+
*/
|
|
194
|
+
function obscureDiff(diff) {
|
|
195
|
+
if (diff.unknown) {
|
|
196
|
+
// see https://github.com/aws/aws-cdk/issues/17942
|
|
197
|
+
diff.unknown = diff.unknown.filter(change => {
|
|
198
|
+
if (!change) {
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
if (change.newValue?.CheckBootstrapVersion) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
if (change.oldValue?.CheckBootstrapVersion) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
return true;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (diff.resources) {
|
|
211
|
+
diff.resources = diff.resources.filter(change => {
|
|
212
|
+
if (!change) {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
if (change.newResourceType === 'AWS::CDK::Metadata') {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
if (change.oldResourceType === 'AWS::CDK::Metadata') {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
return true;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaWZmLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBbUM7QUFDbkMsMkRBQTJEO0FBQzNELHNFQU1zQztBQUV0QywrQkFBK0I7QUFDL0IsNkNBQXNEO0FBR3RELDJDQUFrRDtBQUNsRCx3Q0FBK0M7QUF1SC9DOztHQUVHO0FBQ0gsTUFBYSxhQUFhO0lBQ1AsUUFBUSxDQUFXO0lBQ25CLFdBQVcsQ0FBTTtJQUNqQixXQUFXLENBQW9DO0lBQy9DLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQU87SUFDaEIsWUFBWSxDQUF1RTtJQUNuRixRQUFRLENBQVU7SUFFbkM7OztPQUdHO0lBQ0ssTUFBTSxHQUFxQyxFQUFFLENBQUM7SUFFdEQsWUFBWSxLQUF5QjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssSUFBSSxDQUFDLFNB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cnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgZm9ybWF0RGlmZmVyZW5jZXMsXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyxcbiAgZnVsbERpZmYsXG4gIG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbixcbiAgdHlwZSBUZW1wbGF0ZURpZmYsXG59IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkNoYW5nZVR5cGUgfSBmcm9tICcuLi8uLi9wYXlsb2Fkcyc7XG5pbXBvcnQgdHlwZSB7IE5lc3RlZFN0YWNrVGVtcGxhdGVzIH0gZnJvbSAnLi4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgSW9EZWZhdWx0TWVzc2FnZXMgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IFN0cmluZ1dyaXRlU3RyZWFtIH0gZnJvbSAnLi4vc3RyZWFtcyc7XG5cbi8qKlxuICogT3V0cHV0IG9mIGZvcm1hdFNlY3VyaXR5RGlmZlxuICovXG5pbnRlcmZhY2UgRm9ybWF0U2VjdXJpdHlEaWZmT3V0cHV0IHtcbiAgLyoqXG4gICAqIENvbXBsZXRlIGZvcm1hdHRlZCBzZWN1cml0eSBkaWZmXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZWREaWZmOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHBlcm1pc3Npb24gY2hhbmdlcyBpbiB0aGUgc2VjdXJpdHkgZGlmZi5cbiAgICogVGhlIElvSG9zdCB3aWxsIHVzZSB0aGlzIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25DaGFuZ2VUeXBlOiBQZXJtaXNzaW9uQ2hhbmdlVHlwZTtcbn1cblxuLyoqXG4gKiBPdXRwdXQgb2YgZm9ybWF0U3RhY2tEaWZmXG4gKi9cbmludGVyZmFjZSBGb3JtYXRTdGFja0RpZmZPdXRwdXQge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHN0YWNrcyB3aXRoIGRpZmYgY2hhbmdlc1xuICAgKi9cbiAgcmVhZG9ubHkgbnVtU3RhY2tzV2l0aENoYW5nZXM6IG51bWJlcjtcblxuICAvKipcbiAgICogQ29tcGxldGUgZm9ybWF0dGVkIGRpZmZcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlZERpZmY6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIERpZmYgRm9ybWF0dGVyXG4gKi9cbmludGVyZmFjZSBEaWZmRm9ybWF0dGVyUHJvcHMge1xuICAvKipcbiAgICogSGVscGVyIGZvciB0aGUgSW9Ib3N0IGNsYXNzXG4gICAqL1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgdGhlIFRlbXBsYXRlIHRoYXQgaXMgYmVpbmcgZGlmZmVkLlxuICAgKiBJbmNsdWRlcyB0aGUgb2xkL2N1cnJlbnQgc3RhdGUgb2YgdGhlIHN0YWNrIGFzIHdlbGwgYXMgdGhlIG5ldyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlSW5mbzogVGVtcGxhdGVJbmZvO1xufVxuXG4vKipcbiAqIFBSb3BlcnRpZXMgc3BlY2lmaWMgdG8gZm9ybWF0dGluZyB0aGUgc3RhY2sgZGlmZlxuICovXG5pbnRlcmZhY2UgRm9ybWF0U3RhY2tEaWZmT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBkbyBub3QgZmlsdGVyIG91dCBBV1M6OkNESzo6TWV0YWRhdGEgb3IgUnVsZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0cmljdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGxpbmVzIG9mIGNvbnRleHQgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmZcbiAgICpcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IG51bWJlcjtcblxuICAvKipcbiAgICogc2lsZW5jZXMgXFwnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcJyBtZXNzYWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUmV1c2FibGVTdGFja0RpZmZPcHRpb25zIGV4dGVuZHMgRm9ybWF0U3RhY2tEaWZmT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGlvRGVmYXVsdEhlbHBlcjogSW9EZWZhdWx0TWVzc2FnZXM7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb24gYSB0ZW1wbGF0ZSdzIG9sZC9uZXcgc3RhdGVcbiAqIHRoYXQgaXMgdXNlZCBmb3IgZGlmZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUluZm8ge1xuICAvKipcbiAgICogVGhlIG9sZC9leGlzdGluZyB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb2xkVGVtcGxhdGU6IGFueTtcblxuICAvKipcbiAgICogVGhlIG5ldyB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV3VGVtcGxhdGU6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogQSBDbG91ZEZvcm1hdGlvbiBDaGFuZ2VTZXQgdG8gaGVscCB0aGUgZGlmZiBvcGVyYXRpb24uXG4gICAqIFByb2JhYmx5IGNyZWF0ZWQgdmlhIGBjcmVhdGVEaWZmQ2hhbmdlU2V0YC5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VTZXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW1wb3J0ZWQgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc0ltcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFueSBuZXN0ZWQgc3RhY2tzIGluY2x1ZGVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgbmVzdGVkU3RhY2tzPzoge1xuICAgIFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXM7XG4gIH07XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIGZvcm1hdHRpbmcgdGhlIGRpZmYgb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBEaWZmRm9ybWF0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2xkVGVtcGxhdGU6IGFueTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXdUZW1wbGF0ZTogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZVNldD86IGFueTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXN0ZWRTdGFja3M6IHsgW25lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzSW1wb3J0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIFRlbXBsYXRlRGlmZnMgdGhhdCBnZXQgY2FsY3VsYXRlZCBpbiB0aGlzIERpZmZGb3JtYXR0ZXIsXG4gICAqIGluZGV4ZWQgYnkgdGhlIHN0YWNrIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIF9kaWZmczogeyBbbmFtZTogc3RyaW5nXTogVGVtcGxhdGVEaWZmIH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRGlmZkZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IHByb3BzLmlvSGVscGVyO1xuICAgIHRoaXMub2xkVGVtcGxhdGUgPSBwcm9wcy50ZW1wbGF0ZUluZm8ub2xkVGVtcGxhdGU7XG4gICAgdGhpcy5uZXdUZW1wbGF0ZSA9IHByb3BzLnRlbXBsYXRlSW5mby5uZXdUZW1wbGF0ZTtcbiAgICB0aGlzLnN0YWNrTmFtZSA9IHByb3BzLnRlbXBsYXRlSW5mby5uZXdUZW1wbGF0ZS5zdGFja05hbWU7XG4gICAgdGhpcy5jaGFuZ2VTZXQgPSBwcm9wcy50ZW1wbGF0ZUluZm8uY2hhbmdlU2V0O1xuICAgIHRoaXMubmVzdGVkU3RhY2tzID0gcHJvcHMudGVtcGxhdGVJbmZvLm5lc3RlZFN0YWNrcztcbiAgICB0aGlzLmlzSW1wb3J0ID0gcHJvcHMudGVtcGxhdGVJbmZvLmlzSW1wb3J0ID8/IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBkaWZmcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlmZnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIGNyZWF0ZXMgdGhlIGRpZmYgb2YgYSBzdGFjay5cbiAgICogSWYgaXQgY3JlYXRlcyB0aGUgZGlmZiwgaXQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBtYXAgZm9yXG4gICAqIGVhc2llciByZXRyZXZhbCBsYXRlci5cbiAgICovXG4gIHByaXZhdGUgZGlmZihzdGFja05hbWU/OiBzdHJpbmcsIG9sZFRlbXBsYXRlPzogYW55KSB7XG4gICAgY29uc3QgcmVhbFN0YWNrTmFtZSA9IHN0YWNrTmFtZSA/PyB0aGlzLnN0YWNrTmFtZTtcblxuICAgIGlmICghdGhpcy5fZGlmZnNbcmVhbFN0YWNrTmFtZV0pIHtcbiAgICAgIHRoaXMuX2RpZmZzW3JlYWxTdGFja05hbWVdID0gZnVsbERpZmYoXG4gICAgICAgIG9sZFRlbXBsYXRlID8/IHRoaXMub2xkVGVtcGxhdGUsXG4gICAgICAgIHRoaXMubmV3VGVtcGxhdGUudGVtcGxhdGUsXG4gICAgICAgIHRoaXMuY2hhbmdlU2V0LFxuICAgICAgICB0aGlzLmlzSW1wb3J0LFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RpZmZzW3JlYWxTdGFja05hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBkaWZmIGhhcyBzZWN1cml0eS1pbXBhY3RpbmcgY2hhbmdlcyB0aGF0IG5lZWQgY29uZmlybWF0aW9uLlxuICAgKlxuICAgKiBJZiBubyBzdGFja05hbWUgaXMgZ2l2ZW4sIHRoZW4gdGhlIHJvb3Qgc3RhY2sgbmFtZSBpcyB1c2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBwZXJtaXNzaW9uVHlwZShzdGFja05hbWU/OiBzdHJpbmcpOiBQZXJtaXNzaW9uQ2hhbmdlVHlwZSB7XG4gICAgY29uc3QgZGlmZiA9IHRoaXMuZGlmZihzdGFja05hbWUpO1xuXG4gICAgaWYgKGRpZmYucGVybWlzc2lvbnNCcm9hZGVuZWQpIHtcbiAgICAgIHJldHVybiBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5CUk9BREVOSU5HO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5wZXJtaXNzaW9uc0FueUNoYW5nZXMpIHtcbiAgICAgIHJldHVybiBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5OT05fQlJPQURFTklORztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTkU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZGlmZlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRGlmZihvcHRpb25zOiBGb3JtYXRTdGFja0RpZmZPcHRpb25zID0ge30pOiBGb3JtYXRTdGFja0RpZmZPdXRwdXQge1xuICAgIGNvbnN0IGlvRGVmYXVsdEhlbHBlciA9IG5ldyBJb0RlZmF1bHRNZXNzYWdlcyh0aGlzLmlvSGVscGVyKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRTdGFja0RpZmZIZWxwZXIoXG4gICAgICB0aGlzLm9sZFRlbXBsYXRlLFxuICAgICAgdGhpcy5zdGFja05hbWUsXG4gICAgICB0aGlzLm5lc3RlZFN0YWNrcyxcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaW9EZWZhdWx0SGVscGVyLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTdGFja0RpZmZIZWxwZXIoXG4gICAgb2xkVGVtcGxhdGU6IGFueSxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBuZXN0ZWRTdGFja1RlbXBsYXRlczogeyBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzIH0gfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogUmV1c2FibGVTdGFja0RpZmZPcHRpb25zLFxuICApIHtcbiAgICBsZXQgZGlmZiA9IHRoaXMuZGlmZihzdGFja05hbWUsIG9sZFRlbXBsYXRlKTtcblxuICAgIC8vIFRoZSBzdGFjayBkaWZmIGlzIGZvcm1hdHRlZCB2aWEgYEZvcm1hdHRlcmAsIHdoaWNoIHRha2VzIGluIGEgc3RyZWFtXG4gICAgLy8gYW5kIHNlbmRzIGl0cyBvdXRwdXQgZGlyZWN0bHkgdG8gdGhhdCBzdHJlYW0uIFRvIGZhY2lsaWF0ZSB1c2Ugb2YgdGhlXG4gICAgLy8gZ2xvYmFsIENsaUlvSG9zdCwgd2UgY3JlYXRlIG91ciBvd24gc3RyZWFtIHRvIGNhcHR1cmUgdGhlIG91dHB1dCBvZlxuICAgIC8vIGBGb3JtYXR0ZXJgIGFuZCByZXR1cm4gdGhlIG91dHB1dCBhcyBhIHN0cmluZyBmb3IgdGhlIGNvbnN1bWVyIG9mXG4gICAgLy8gYGZvcm1hdFN0YWNrRGlmZmAgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdC5cbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nV3JpdGVTdHJlYW0oKTtcblxuICAgIGxldCBudW1TdGFja3NXaXRoQ2hhbmdlcyA9IDA7XG4gICAgbGV0IGZvcm1hdHRlZERpZmYgPSAnJztcbiAgICBsZXQgZmlsdGVyZWRDaGFuZ2VzQ291bnQgPSAwO1xuICAgIHRyeSB7XG4gICAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZGlmZmVyZW5jZXMsIGV2ZW4gaWYgcXVpZXRcbiAgICAgIGlmIChzdGFja05hbWUgJiYgKCFvcHRpb25zLnF1aWV0IHx8ICFkaWZmLmlzRW1wdHkpKSB7XG4gICAgICAgIHN0cmVhbS53cml0ZShmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZChzdGFja05hbWUpfVxcbmApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnF1aWV0ICYmIHRoaXMuaXNJbXBvcnQpIHtcbiAgICAgICAgc3RyZWFtLndyaXRlKCdQYXJhbWV0ZXJzIGFuZCBydWxlcyBjcmVhdGVkIGR1cmluZyBtaWdyYXRpb24gZG8gbm90IGFmZmVjdCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxcbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBkZXRlY3QgYW5kIGZpbHRlciBvdXQgbWFuZ2xlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGRpZmZcbiAgICAgIGlmIChkaWZmLmRpZmZlcmVuY2VDb3VudCAmJiAhb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgY29uc3QgbWFuZ2xlZE5ld1RlbXBsYXRlID0gSlNPTi5wYXJzZShtYW5nbGVMaWtlQ2xvdWRGb3JtYXRpb24oSlNPTi5zdHJpbmdpZnkodGhpcy5uZXdUZW1wbGF0ZS50ZW1wbGF0ZSkpKTtcbiAgICAgICAgY29uc3QgbWFuZ2xlZERpZmYgPSBmdWxsRGlmZih0aGlzLm9sZFRlbXBsYXRlLCBtYW5nbGVkTmV3VGVtcGxhdGUsIHRoaXMuY2hhbmdlU2V0KTtcbiAgICAgICAgZmlsdGVyZWRDaGFuZ2VzQ291bnQgPSBNYXRoLm1heCgwLCBkaWZmLmRpZmZlcmVuY2VDb3VudCAtIG1hbmdsZWREaWZmLmRpZmZlcmVuY2VDb3VudCk7XG4gICAgICAgIGlmIChmaWx0ZXJlZENoYW5nZXNDb3VudCA+IDApIHtcbiAgICAgICAgICBkaWZmID0gbWFuZ2xlZERpZmY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZmlsdGVyIG91dCAnQVdTOjpDREs6Ok1ldGFkYXRhJyByZXNvdXJjZXMgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICAgIC8vIGZpbHRlciBvdXQgJ0NoZWNrQm9vdHN0cmFwVmVyc2lvbicgcnVsZXMgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICAgIGlmICghb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgb2JzY3VyZURpZmYoZGlmZik7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlmZi5pc0VtcHR5KSB7XG4gICAgICAgIG51bVN0YWNrc1dpdGhDaGFuZ2VzKys7XG5cbiAgICAgICAgLy8gZm9ybWF0RGlmZmVyZW5jZXMgdXBkYXRlcyB0aGUgc3RyZWFtIHdpdGggdGhlIGZvcm1hdHRlZCBzdGFjayBkaWZmXG4gICAgICAgIGZvcm1hdERpZmZlcmVuY2VzKHN0cmVhbSwgZGlmZiwge1xuICAgICAgICAgIC4uLmxvZ2ljYWxJZE1hcEZyb21UZW1wbGF0ZSh0aGlzLm9sZFRlbXBsYXRlKSxcbiAgICAgICAgICAuLi5idWlsZExvZ2ljYWxUb1BhdGhNYXAodGhpcy5uZXdUZW1wbGF0ZSksXG4gICAgICAgIH0sIG9wdGlvbnMuY29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnF1aWV0KSB7XG4gICAgICAgIHN0cmVhbS53cml0ZShjaGFsay5ncmVlbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcbicpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbHRlcmVkQ2hhbmdlc0NvdW50ID4gMCkge1xuICAgICAgICBzdHJlYW0ud3JpdGUoY2hhbGsueWVsbG93KGBPbWl0dGVkICR7ZmlsdGVyZWRDaGFuZ2VzQ291bnR9IGNoYW5nZXMgYmVjYXVzZSB0aGV5IGFyZSBsaWtlbHkgbWFuZ2xlZCBub24tQVNDSUkgY2hhcmFjdGVycy4gVXNlIC0tc3RyaWN0IHRvIHByaW50IHRoZW0uXFxuYCkpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBzdG9yZSB0aGUgc3RyZWFtIGNvbnRhaW5pbmcgYSBmb3JtYXR0ZWQgc3RhY2sgZGlmZlxuICAgICAgZm9ybWF0dGVkRGlmZiA9IHN0cmVhbS50b1N0cmluZygpO1xuICAgICAgc3RyZWFtLmVuZCgpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmVzdGVkU3RhY2tMb2dpY2FsSWQgb2YgT2JqZWN0LmtleXMobmVzdGVkU3RhY2tUZW1wbGF0ZXMgPz8ge30pKSB7XG4gICAgICBpZiAoIW5lc3RlZFN0YWNrVGVtcGxhdGVzKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc3QgbmVzdGVkU3RhY2sgPSBuZXN0ZWRTdGFja1RlbXBsYXRlc1tuZXN0ZWRTdGFja0xvZ2ljYWxJZF07XG5cbiAgICAgICh0aGlzLm5ld1RlbXBsYXRlIGFzIGFueSkuX3RlbXBsYXRlID0gbmVzdGVkU3RhY2suZ2VuZXJhdGVkVGVtcGxhdGU7XG4gICAgICBjb25zdCBuZXh0RGlmZiA9IHRoaXMuZm9ybWF0U3RhY2tEaWZmSGVscGVyKFxuICAgICAgICBuZXN0ZWRTdGFjay5kZXBsb3llZFRlbXBsYXRlLFxuICAgICAgICBuZXN0ZWRTdGFjay5waHlzaWNhbE5hbWUgPz8gbmVzdGVkU3RhY2tMb2dpY2FsSWQsXG4gICAgICAgIG5lc3RlZFN0YWNrLm5lc3RlZFN0YWNrVGVtcGxhdGVzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKTtcbiAgICAgIG51bVN0YWNrc1dpdGhDaGFuZ2VzICs9IG5leHREaWZmLm51bVN0YWNrc1dpdGhDaGFuZ2VzO1xuICAgICAgZm9ybWF0dGVkRGlmZiArPSBuZXh0RGlmZi5mb3JtYXR0ZWREaWZmO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBudW1TdGFja3NXaXRoQ2hhbmdlcyxcbiAgICAgIGZvcm1hdHRlZERpZmYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIHNlY3VyaXR5IGRpZmZcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRTZWN1cml0eURpZmYoKTogRm9ybWF0U2VjdXJpdHlEaWZmT3V0cHV0IHtcbiAgICBjb25zdCBkaWZmID0gdGhpcy5kaWZmKCk7XG5cbiAgICAvLyBUaGUgc2VjdXJpdHkgZGlmZiBpcyBmb3JtYXR0ZWQgdmlhIGBGb3JtYXR0ZXJgLCB3aGljaCB0YWtlcyBpbiBhIHN0cmVhbVxuICAgIC8vIGFuZCBzZW5kcyBpdHMgb3V0cHV0IGRpcmVjdGx5IHRvIHRoYXQgc3RyZWFtLiBUbyBmYWNpbGlhdGUgdXNlIG9mIHRoZVxuICAgIC8vIGdsb2JhbCBDbGlJb0hvc3QsIHdlIGNyZWF0ZSBvdXIgb3duIHN0cmVhbSB0byBjYXB0dXJlIHRoZSBvdXRwdXQgb2ZcbiAgICAvLyBgRm9ybWF0dGVyYCBhbmQgcmV0dXJuIHRoZSBvdXRwdXQgYXMgYSBzdHJpbmcgZm9yIHRoZSBjb25zdW1lciBvZlxuICAgIC8vIGBmb3JtYXRTZWN1cml0eURpZmZgIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggaXQuXG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG5cbiAgICBzdHJlYW0ud3JpdGUoZm9ybWF0KGBTdGFjayAke2NoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpfVxcbmApKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBmb3JtYXRTZWN1cml0eUNoYW5nZXMgdXBkYXRlcyB0aGUgc3RyZWFtIHdpdGggdGhlIGZvcm1hdHRlZCBzZWN1cml0eSBkaWZmXG4gICAgICBmb3JtYXRTZWN1cml0eUNoYW5nZXMoc3RyZWFtLCBkaWZmLCBidWlsZExvZ2ljYWxUb1BhdGhNYXAodGhpcy5uZXdUZW1wbGF0ZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzdHJlYW0uZW5kKCk7XG4gICAgfVxuICAgIC8vIHN0b3JlIHRoZSBzdHJlYW0gY29udGFpbmluZyBhIGZvcm1hdHRlZCBzdGFjayBkaWZmXG4gICAgY29uc3QgZm9ybWF0dGVkRGlmZiA9IHN0cmVhbS50b1N0cmluZygpO1xuICAgIHJldHVybiB7IGZvcm1hdHRlZERpZmYsIHBlcm1pc3Npb25DaGFuZ2VUeXBlOiB0aGlzLnBlcm1pc3Npb25UeXBlKCkgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZExvZ2ljYWxUb1BhdGhNYXAoc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCkge1xuICBjb25zdCBtYXA6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBmb3IgKGNvbnN0IG1kIG9mIHN0YWNrLmZpbmRNZXRhZGF0YUJ5VHlwZShjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLkxPR0lDQUxfSUQpKSB7XG4gICAgbWFwW21kLmRhdGEgYXMgc3RyaW5nXSA9IG1kLnBhdGg7XG4gIH1cbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gbG9naWNhbElkTWFwRnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBhbnkpIHtcbiAgY29uc3QgcmV0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXModGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9KSkge1xuICAgIGNvbnN0IHBhdGggPSAocmVzb3VyY2UgYXMgYW55KT8uTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ107XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHJldFtsb2dpY2FsSWRdID0gcGF0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYW55IHRlbXBsYXRlIGVsZW1lbnRzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBzaG93IHVzZXJzLlxuICogVGhpcyBpcyBjdXJyZW50bHk6XG4gKiAtIEFXUzo6Q0RLOjpNZXRhZGF0YSByZXNvdXJjZVxuICogLSBDaGVja0Jvb3RzdHJhcFZlcnNpb24gUnVsZVxuICovXG5mdW5jdGlvbiBvYnNjdXJlRGlmZihkaWZmOiBUZW1wbGF0ZURpZmYpIHtcbiAgaWYgKGRpZmYudW5rbm93bikge1xuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE3OTQyXG4gICAgZGlmZi51bmtub3duID0gZGlmZi51bmtub3duLmZpbHRlcihjaGFuZ2UgPT4ge1xuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm5ld1ZhbHVlPy5DaGVja0Jvb3RzdHJhcFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5vbGRWYWx1ZT8uQ2hlY2tCb290c3RyYXBWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRpZmYucmVzb3VyY2VzKSB7XG4gICAgZGlmZi5yZXNvdXJjZXMgPSBkaWZmLnJlc291cmNlcy5maWx0ZXIoY2hhbmdlID0+IHtcbiAgICAgIGlmICghY2hhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5uZXdSZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNESzo6TWV0YWRhdGEnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2Uub2xkUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './diff-formatter';
|
|
@@ -0,0 +1,18 @@
|
|
|
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("./diff-formatter"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaWZmLWZvcm1hdHRlcic7XG4iXX0=
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type * as cxapi from '@aws-cdk/cx-api';
|
|
2
|
+
import type { EnvironmentResources } from './environment-resources';
|
|
3
|
+
import type { StringWithoutPlaceholders } from './placeholders';
|
|
4
|
+
import type { SDK, SdkProvider } from '../aws-auth/private';
|
|
5
|
+
import { type IoHelper } from '../io/private';
|
|
6
|
+
/**
|
|
7
|
+
* Access particular AWS resources, based on information from the CX manifest
|
|
8
|
+
*
|
|
9
|
+
* It is not possible to grab direct access to AWS credentials; 9 times out of 10
|
|
10
|
+
* we have to allow for role assumption, and role assumption can only work if
|
|
11
|
+
* there is a CX Manifest that contains a role ARN.
|
|
12
|
+
*
|
|
13
|
+
* This class exists so new code isn't tempted to go and get SDK credentials directly.
|
|
14
|
+
*/
|
|
15
|
+
export declare class EnvironmentAccess {
|
|
16
|
+
private readonly sdkProvider;
|
|
17
|
+
private readonly sdkCache;
|
|
18
|
+
private readonly environmentResources;
|
|
19
|
+
private readonly ioHelper;
|
|
20
|
+
constructor(sdkProvider: SdkProvider, toolkitStackName: string, ioHelper: IoHelper);
|
|
21
|
+
/**
|
|
22
|
+
* Resolves the environment for a stack.
|
|
23
|
+
*/
|
|
24
|
+
resolveStackEnvironment(stack: cxapi.CloudFormationStackArtifact): Promise<cxapi.Environment>;
|
|
25
|
+
/**
|
|
26
|
+
* Get an SDK to access the given stack's environment for stack operations
|
|
27
|
+
*
|
|
28
|
+
* Will ask plugins for readonly credentials if available, use the default
|
|
29
|
+
* AWS credentials if not.
|
|
30
|
+
*
|
|
31
|
+
* Will assume the deploy role if configured on the stack. Check the default `deploy-role`
|
|
32
|
+
* policies to see what you can do with this role.
|
|
33
|
+
*/
|
|
34
|
+
accessStackForReadOnlyStackOperations(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
|
|
35
|
+
/**
|
|
36
|
+
* Get an SDK to access the given stack's environment for stack operations
|
|
37
|
+
*
|
|
38
|
+
* Will ask plugins for mutating credentials if available, use the default AWS
|
|
39
|
+
* credentials if not. The `mode` parameter is only used for querying
|
|
40
|
+
* plugins.
|
|
41
|
+
*
|
|
42
|
+
* Will assume the deploy role if configured on the stack. Check the default `deploy-role`
|
|
43
|
+
* policies to see what you can do with this role.
|
|
44
|
+
*/
|
|
45
|
+
accessStackForMutableStackOperations(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
|
|
46
|
+
/**
|
|
47
|
+
* Get an SDK to access the given stack's environment for environmental lookups
|
|
48
|
+
*
|
|
49
|
+
* Will use a plugin if available, use the default AWS credentials if not.
|
|
50
|
+
* The `mode` parameter is only used for querying plugins.
|
|
51
|
+
*
|
|
52
|
+
* Will assume the lookup role if configured on the stack. Check the default `lookup-role`
|
|
53
|
+
* policies to see what you can do with this role. It can generally read everything
|
|
54
|
+
* in the account that does not require KMS access.
|
|
55
|
+
*
|
|
56
|
+
* ---
|
|
57
|
+
*
|
|
58
|
+
* For backwards compatibility reasons, there are some scenarios that are handled here:
|
|
59
|
+
*
|
|
60
|
+
* 1. The lookup role may not exist (it was added in bootstrap stack version 7). If so:
|
|
61
|
+
* a. Return the default credentials if the default credentials are for the stack account
|
|
62
|
+
* (you will notice this as `isFallbackCredentials=true`).
|
|
63
|
+
* b. Throw an error if the default credentials are not for the stack account.
|
|
64
|
+
*
|
|
65
|
+
* 2. The lookup role may not have the correct permissions (for example, ReadOnlyAccess was added in
|
|
66
|
+
* bootstrap stack version 8); the stack will have a minimum version number on it.
|
|
67
|
+
* a. If it does not we throw an error which should be handled in the calling
|
|
68
|
+
* function (and fallback to use a different role, etc)
|
|
69
|
+
*
|
|
70
|
+
* Upon success, caller will have an SDK for the right account, which may or may not have
|
|
71
|
+
* the right permissions.
|
|
72
|
+
*/
|
|
73
|
+
accessStackForLookup(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
|
|
74
|
+
/**
|
|
75
|
+
* Get an SDK to access the given stack's environment for reading stack attributes
|
|
76
|
+
*
|
|
77
|
+
* Will use a plugin if available, use the default AWS credentials if not.
|
|
78
|
+
* The `mode` parameter is only used for querying plugins.
|
|
79
|
+
*
|
|
80
|
+
* Will try to assume the lookup role if given, will use the regular stack operations
|
|
81
|
+
* access (deploy-role) otherwise. When calling this, you should assume that you will get
|
|
82
|
+
* the least privileged role, so don't try to use it for anything the `deploy-role`
|
|
83
|
+
* wouldn't be able to do. Also you cannot rely on being able to read encrypted anything.
|
|
84
|
+
*/
|
|
85
|
+
accessStackForLookupBestEffort(stack: cxapi.CloudFormationStackArtifact): Promise<TargetEnvironment>;
|
|
86
|
+
/**
|
|
87
|
+
* Get an SDK to access the given stack's environment for stack operations
|
|
88
|
+
*
|
|
89
|
+
* Will use a plugin if available, use the default AWS credentials if not.
|
|
90
|
+
* The `mode` parameter is only used for querying plugins.
|
|
91
|
+
*
|
|
92
|
+
* Will assume the deploy role if configured on the stack. Check the default `deploy-role`
|
|
93
|
+
* policies to see what you can do with this role.
|
|
94
|
+
*/
|
|
95
|
+
private accessStackForStackOperations;
|
|
96
|
+
/**
|
|
97
|
+
* Prepare an SDK for use in the given environment and optionally with a role assumed.
|
|
98
|
+
*/
|
|
99
|
+
private prepareSdk;
|
|
100
|
+
private cachedSdkForEnvironment;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* SDK obtained by assuming the deploy role
|
|
104
|
+
* for a given environment
|
|
105
|
+
*/
|
|
106
|
+
export interface TargetEnvironment {
|
|
107
|
+
/**
|
|
108
|
+
* The SDK for the given environment
|
|
109
|
+
*/
|
|
110
|
+
readonly sdk: SDK;
|
|
111
|
+
/**
|
|
112
|
+
* The resolved environment for the stack
|
|
113
|
+
* (no more 'unknown-account/unknown-region')
|
|
114
|
+
*/
|
|
115
|
+
readonly resolvedEnvironment: cxapi.Environment;
|
|
116
|
+
/**
|
|
117
|
+
* Access class for environmental resources to help the deployment
|
|
118
|
+
*/
|
|
119
|
+
readonly resources: EnvironmentResources;
|
|
120
|
+
/**
|
|
121
|
+
* Whether or not we assumed a role in the process of getting these credentials
|
|
122
|
+
*/
|
|
123
|
+
readonly didAssumeRole: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Whether or not these are fallback credentials
|
|
126
|
+
*
|
|
127
|
+
* Fallback credentials means that assuming the intended role failed, but the
|
|
128
|
+
* base credentials happen to be for the right account so we just picked those
|
|
129
|
+
* and hope the future SDK calls succeed.
|
|
130
|
+
*
|
|
131
|
+
* This is a backwards compatibility mechanism from around the time we introduced
|
|
132
|
+
* deployment roles.
|
|
133
|
+
*/
|
|
134
|
+
readonly isFallbackCredentials: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Replace environment placeholders according to the current environment
|
|
137
|
+
*/
|
|
138
|
+
replacePlaceholders(x: string | undefined): Promise<StringWithoutPlaceholders | undefined>;
|
|
139
|
+
}
|