@aws-cdk/toolkit-lib 0.3.2 → 0.3.4
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/api-extractor.json +3 -0
- 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/bootstrap/private/helpers.js +3 -3
- 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/index.d.ts +1 -1
- package/lib/actions/diff/index.js +1 -1
- package/lib/actions/diff/private/helpers.d.ts +5 -9
- package/lib/actions/diff/private/helpers.js +13 -30
- package/lib/actions/refactor/index.d.ts +12 -0
- package/lib/actions/refactor/index.js +1 -1
- 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 +5 -4
- package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
- package/lib/api/cloud-assembly/private/context-aware-source.js +7 -7
- package/lib/api/cloud-assembly/private/exec.js +3 -3
- package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
- package/lib/api/cloud-assembly/private/prepare-source.js +17 -15
- 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.d.ts +10 -8
- package/lib/api/cloud-assembly/private/source-builder.js +43 -24
- package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
- package/lib/api/cloud-assembly/private/stack-assembly.js +16 -15
- package/lib/api/cloud-assembly/source-builder.d.ts +19 -0
- package/lib/api/cloud-assembly/source-builder.js +1 -1
- 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 +108 -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 +24 -0
- package/lib/api/index.js +41 -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/sdk-logger.d.ts +1 -1
- package/lib/api/io/private/sdk-logger.js +6 -6
- 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/cached-data-source.d.ts +13 -0
- package/lib/api/notices/cached-data-source.js +77 -0
- package/lib/api/notices/filter.d.ts +59 -0
- package/lib/api/notices/filter.js +189 -0
- package/lib/api/notices/index.d.ts +1 -0
- package/lib/api/notices/index.js +18 -0
- package/lib/api/notices/notices.d.ts +111 -0
- package/lib/api/notices/notices.js +131 -0
- package/lib/api/notices/types.d.ts +37 -0
- package/lib/api/notices/types.js +3 -0
- package/lib/api/notices/web-data-source.d.ts +9 -0
- package/lib/api/notices/web-data-source.js +70 -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 +70 -0
- package/lib/api/plugin/plugin.js +127 -0
- package/lib/api/private.d.ts +1 -0
- package/lib/api/private.js +18 -0
- package/lib/api/refactoring/cloudformation.d.ts +38 -0
- package/lib/api/refactoring/cloudformation.js +56 -0
- package/lib/api/refactoring/digest.d.ts +26 -0
- package/lib/api/refactoring/digest.js +175 -0
- package/lib/api/refactoring/exclude.d.ts +29 -0
- package/lib/api/refactoring/exclude.js +94 -0
- package/lib/api/refactoring/index.d.ts +32 -0
- package/lib/api/refactoring/index.js +191 -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 +31 -12561
- 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-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 +4 -1
- package/lib/index.js +5 -2
- 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 +50 -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 +212 -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/toolkit/non-interactive-io-host.js +5 -4
- package/lib/toolkit/private/index.d.ts +2 -1
- package/lib/toolkit/private/index.js +1 -1
- package/lib/toolkit/toolkit-error.d.ts +86 -0
- package/lib/toolkit/toolkit-error.js +132 -0
- package/lib/toolkit/toolkit.d.ts +2 -2
- package/lib/toolkit/toolkit.js +161 -130
- 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 +19 -0
- package/lib/util/index.js +36 -0
- package/lib/util/json.d.ts +48 -0
- package/lib/util/json.js +68 -0
- package/lib/util/net.d.ts +9 -0
- package/lib/util/net.js +60 -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 +26 -28
- package/tsdoc.json +15 -0
- package/lib/api/shared-private.js.map +0 -7
- package/lib/api/shared-public.d.ts +0 -2159
- package/lib/api/shared-public.js +0 -1110
- package/lib/api/shared-public.js.map +0 -7
- package/lib/private/util.d.ts +0 -1
- package/lib/private/util.js +0 -787
- package/lib/private/util.js.map +0 -7
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AssemblyManifest } from '@aws-cdk/cloud-assembly-schema';
|
|
2
|
+
import type { ResourceLocation } from './cloudformation';
|
|
3
|
+
export interface ExcludeList {
|
|
4
|
+
isExcluded(location: ResourceLocation): boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class ManifestExcludeList implements ExcludeList {
|
|
7
|
+
private readonly excludedLocations;
|
|
8
|
+
constructor(manifest: AssemblyManifest);
|
|
9
|
+
private getExcludedLocations;
|
|
10
|
+
isExcluded(location: ResourceLocation): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class InMemoryExcludeList implements ExcludeList {
|
|
13
|
+
private readonly excludedLocations;
|
|
14
|
+
private readonly excludedPaths;
|
|
15
|
+
constructor(items: string[]);
|
|
16
|
+
isExcluded(location: ResourceLocation): boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class UnionExcludeList implements ExcludeList {
|
|
19
|
+
private readonly excludeLists;
|
|
20
|
+
constructor(excludeLists: ExcludeList[]);
|
|
21
|
+
isExcluded(location: ResourceLocation): boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare class NeverExclude implements ExcludeList {
|
|
24
|
+
isExcluded(_location: ResourceLocation): boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare class AlwaysExclude implements ExcludeList {
|
|
27
|
+
isExcluded(_location: ResourceLocation): boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare function fromManifestAndExclusionList(manifest: AssemblyManifest, exclude?: string[]): ExcludeList;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AlwaysExclude = exports.NeverExclude = exports.UnionExcludeList = exports.InMemoryExcludeList = exports.ManifestExcludeList = void 0;
|
|
4
|
+
exports.fromManifestAndExclusionList = fromManifestAndExclusionList;
|
|
5
|
+
const cloud_assembly_schema_1 = require("@aws-cdk/cloud-assembly-schema");
|
|
6
|
+
class ManifestExcludeList {
|
|
7
|
+
excludedLocations;
|
|
8
|
+
constructor(manifest) {
|
|
9
|
+
this.excludedLocations = this.getExcludedLocations(manifest);
|
|
10
|
+
}
|
|
11
|
+
getExcludedLocations(asmManifest) {
|
|
12
|
+
// First, we need to filter the artifacts to only include CloudFormation stacks
|
|
13
|
+
const stackManifests = Object.entries(asmManifest.artifacts ?? {}).filter(([_, manifest]) => manifest.type === cloud_assembly_schema_1.ArtifactType.AWS_CLOUDFORMATION_STACK);
|
|
14
|
+
const result = [];
|
|
15
|
+
for (let [stackName, manifest] of stackManifests) {
|
|
16
|
+
const locations = Object.values(manifest.metadata ?? {})
|
|
17
|
+
// Then pick only the resources in each stack marked with DO_NOT_REFACTOR
|
|
18
|
+
.filter((entries) => entries.some((entry) => entry.type === cloud_assembly_schema_1.ArtifactMetadataEntryType.DO_NOT_REFACTOR && entry.data === true))
|
|
19
|
+
// Finally, get the logical ID of each resource
|
|
20
|
+
.map((entries) => {
|
|
21
|
+
const logicalIdEntry = entries.find((entry) => entry.type === cloud_assembly_schema_1.ArtifactMetadataEntryType.LOGICAL_ID);
|
|
22
|
+
const location = {
|
|
23
|
+
StackName: stackName,
|
|
24
|
+
LogicalResourceId: logicalIdEntry.data,
|
|
25
|
+
};
|
|
26
|
+
return location;
|
|
27
|
+
});
|
|
28
|
+
result.push(...locations);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
isExcluded(location) {
|
|
33
|
+
return this.excludedLocations.some((loc) => loc.StackName === location.stack.stackName && loc.LogicalResourceId === location.logicalResourceId);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ManifestExcludeList = ManifestExcludeList;
|
|
37
|
+
class InMemoryExcludeList {
|
|
38
|
+
excludedLocations;
|
|
39
|
+
excludedPaths;
|
|
40
|
+
constructor(items) {
|
|
41
|
+
this.excludedLocations = [];
|
|
42
|
+
this.excludedPaths = [];
|
|
43
|
+
if (items.length === 0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const locationRegex = /^[A-Za-z0-9]+\.[A-Za-z0-9]+$/;
|
|
47
|
+
items.forEach((item) => {
|
|
48
|
+
if (locationRegex.test(item)) {
|
|
49
|
+
const [stackName, logicalId] = item.split('.');
|
|
50
|
+
this.excludedLocations.push({
|
|
51
|
+
StackName: stackName,
|
|
52
|
+
LogicalResourceId: logicalId,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.excludedPaths.push(item);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
isExcluded(location) {
|
|
61
|
+
const containsLocation = this.excludedLocations.some((loc) => {
|
|
62
|
+
return loc.StackName === location.stack.stackName && loc.LogicalResourceId === location.logicalResourceId;
|
|
63
|
+
});
|
|
64
|
+
const containsPath = this.excludedPaths.some((path) => location.toPath() === path);
|
|
65
|
+
return containsLocation || containsPath;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.InMemoryExcludeList = InMemoryExcludeList;
|
|
69
|
+
class UnionExcludeList {
|
|
70
|
+
excludeLists;
|
|
71
|
+
constructor(excludeLists) {
|
|
72
|
+
this.excludeLists = excludeLists;
|
|
73
|
+
}
|
|
74
|
+
isExcluded(location) {
|
|
75
|
+
return this.excludeLists.some((excludeList) => excludeList.isExcluded(location));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.UnionExcludeList = UnionExcludeList;
|
|
79
|
+
class NeverExclude {
|
|
80
|
+
isExcluded(_location) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.NeverExclude = NeverExclude;
|
|
85
|
+
class AlwaysExclude {
|
|
86
|
+
isExcluded(_location) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.AlwaysExclude = AlwaysExclude;
|
|
91
|
+
function fromManifestAndExclusionList(manifest, exclude) {
|
|
92
|
+
return new UnionExcludeList([new ManifestExcludeList(manifest), new InMemoryExcludeList(exclude ?? [])]);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4Y2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNEdBLG9FQUVDO0FBN0dELDBFQUF5RjtBQVF6RixNQUFhLG1CQUFtQjtJQUNiLGlCQUFpQixDQUF3QjtJQUUxRCxZQUFZLFFBQTBCO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFdBQTZCO1FBQ3hELCtFQUErRTtRQUMvRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9DQUFZLENBQUMsd0JBQXdCLENBQzNFLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUN0RCx5RUFBeUU7aUJBQ3hFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssaURBQXlCLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQ3pHO2dCQUNELCtDQUErQztpQkFDOUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxpREFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEcsTUFBTSxRQUFRLEdBQXdCO29CQUNwQyxTQUFTLEVBQUUsU0FBUztvQkFDcEIsaUJBQWlCLEVBQUUsY0FBZSxDQUFDLElBQWU7aUJBQ25ELENBQUM7Z0JBQ0YsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBMEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNoQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLGlCQUFpQixDQUM1RyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdkNELGtEQXVDQztBQUVELE1BQWEsbUJBQW1CO0lBQ2IsaUJBQWlCLENBQXdCO0lBQ3pDLGFBQWEsQ0FBVztJQUV6QyxZQUFZLEtBQWU7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV4QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyw4QkFBOEIsQ0FBQztRQUVyRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFDMUIsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLGlCQUFpQixFQUFFLFNBQVM7aUJBQzdCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQTBCO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzNELE9BQU8sR0FBRyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLGlCQUFpQixDQUFDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNuRixPQUFPLGdCQUFnQixJQUFJLFlBQVksQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUFuQ0Qsa0RBbUNDO0FBRUQsTUFBYSxnQkFBZ0I7SUFDRTtJQUE3QixZQUE2QixZQUEyQjtRQUEzQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtJQUN4RCxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQTBCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0NBQ0Y7QUFQRCw0Q0FPQztBQUVELE1BQWEsWUFBWTtJQUN2QixVQUFVLENBQUMsU0FBMkI7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFKRCxvQ0FJQztBQUVELE1BQWEsYUFBYTtJQUN4QixVQUFVLENBQUMsU0FBMkI7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFKRCxzQ0FJQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLFFBQTBCLEVBQUUsT0FBa0I7SUFDekYsT0FBTyxJQUFJLGdCQUFnQixDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLG1CQUFtQixDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXNzZW1ibHlNYW5pZmVzdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBBcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLCBBcnRpZmFjdFR5cGUgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUxvY2F0aW9uIGFzIENmblJlc291cmNlTG9jYXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZUxpc3Qge1xuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hbmlmZXN0RXhjbHVkZUxpc3QgaW1wbGVtZW50cyBFeGNsdWRlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZWRMb2NhdGlvbnM6IENmblJlc291cmNlTG9jYXRpb25bXTtcblxuICBjb25zdHJ1Y3RvcihtYW5pZmVzdDogQXNzZW1ibHlNYW5pZmVzdCkge1xuICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMgPSB0aGlzLmdldEV4Y2x1ZGVkTG9jYXRpb25zKG1hbmlmZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhjbHVkZWRMb2NhdGlvbnMoYXNtTWFuaWZlc3Q6IEFzc2VtYmx5TWFuaWZlc3QpOiBDZm5SZXNvdXJjZUxvY2F0aW9uW10ge1xuICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIGZpbHRlciB0aGUgYXJ0aWZhY3RzIHRvIG9ubHkgaW5jbHVkZSBDbG91ZEZvcm1hdGlvbiBzdGFja3NcbiAgICBjb25zdCBzdGFja01hbmlmZXN0cyA9IE9iamVjdC5lbnRyaWVzKGFzbU1hbmlmZXN0LmFydGlmYWN0cyA/PyB7fSkuZmlsdGVyKFxuICAgICAgKFtfLCBtYW5pZmVzdF0pID0+IG1hbmlmZXN0LnR5cGUgPT09IEFydGlmYWN0VHlwZS5BV1NfQ0xPVURGT1JNQVRJT05fU1RBQ0ssXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdDogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdID0gW107XG4gICAgZm9yIChsZXQgW3N0YWNrTmFtZSwgbWFuaWZlc3RdIG9mIHN0YWNrTWFuaWZlc3RzKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbnMgPSBPYmplY3QudmFsdWVzKG1hbmlmZXN0Lm1ldGFkYXRhID8/IHt9KVxuICAgICAgICAvLyBUaGVuIHBpY2sgb25seSB0aGUgcmVzb3VyY2VzIGluIGVhY2ggc3RhY2sgbWFya2VkIHdpdGggRE9fTk9UX1JFRkFDVE9SXG4gICAgICAgIC5maWx0ZXIoKGVudHJpZXMpID0+XG4gICAgICAgICAgZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5ET19OT1RfUkVGQUNUT1IgJiYgZW50cnkuZGF0YSA9PT0gdHJ1ZSksXG4gICAgICAgIClcbiAgICAgICAgLy8gRmluYWxseSwgZ2V0IHRoZSBsb2dpY2FsIElEIG9mIGVhY2ggcmVzb3VyY2VcbiAgICAgICAgLm1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZEVudHJ5ID0gZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbjogQ2ZuUmVzb3VyY2VMb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZEVudHJ5IS5kYXRhISBhcyBzdHJpbmcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgIH0pO1xuICAgICAgcmVzdWx0LnB1c2goLi4ubG9jYXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlZExvY2F0aW9ucy5zb21lKFxuICAgICAgKGxvYykgPT4gbG9jLlN0YWNrTmFtZSA9PT0gbG9jYXRpb24uc3RhY2suc3RhY2tOYW1lICYmIGxvYy5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWQsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlFeGNsdWRlTGlzdCBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlZExvY2F0aW9uczogQ2ZuUmVzb3VyY2VMb2NhdGlvbltdO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkUGF0aHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGl0ZW1zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMgPSBbXTtcbiAgICB0aGlzLmV4Y2x1ZGVkUGF0aHMgPSBbXTtcblxuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhdGlvblJlZ2V4ID0gL15bQS1aYS16MC05XStcXC5bQS1aYS16MC05XSskLztcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGxvY2F0aW9uUmVnZXgudGVzdChpdGVtKSkge1xuICAgICAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gaXRlbS5zcGxpdCgnLicpO1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkTG9jYXRpb25zLnB1c2goe1xuICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBsb2dpY2FsSWQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leGNsdWRlZFBhdGhzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0V4Y2x1ZGVkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udGFpbnNMb2NhdGlvbiA9IHRoaXMuZXhjbHVkZWRMb2NhdGlvbnMuc29tZSgobG9jKSA9PiB7XG4gICAgICByZXR1cm4gbG9jLlN0YWNrTmFtZSA9PT0gbG9jYXRpb24uc3RhY2suc3RhY2tOYW1lICYmIGxvYy5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250YWluc1BhdGggPSB0aGlzLmV4Y2x1ZGVkUGF0aHMuc29tZSgocGF0aCkgPT4gbG9jYXRpb24udG9QYXRoKCkgPT09IHBhdGgpO1xuICAgIHJldHVybiBjb250YWluc0xvY2F0aW9uIHx8IGNvbnRhaW5zUGF0aDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pb25FeGNsdWRlTGlzdCBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBleGNsdWRlTGlzdHM6IEV4Y2x1ZGVMaXN0W10pIHtcbiAgfVxuXG4gIGlzRXhjbHVkZWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlTGlzdHMuc29tZSgoZXhjbHVkZUxpc3QpID0+IGV4Y2x1ZGVMaXN0LmlzRXhjbHVkZWQobG9jYXRpb24pKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmV2ZXJFeGNsdWRlIGltcGxlbWVudHMgRXhjbHVkZUxpc3Qge1xuICBpc0V4Y2x1ZGVkKF9sb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWx3YXlzRXhjbHVkZSBpbXBsZW1lbnRzIEV4Y2x1ZGVMaXN0IHtcbiAgaXNFeGNsdWRlZChfbG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hbmlmZXN0QW5kRXhjbHVzaW9uTGlzdChtYW5pZmVzdDogQXNzZW1ibHlNYW5pZmVzdCwgZXhjbHVkZT86IHN0cmluZ1tdKTogRXhjbHVkZUxpc3Qge1xuICByZXR1cm4gbmV3IFVuaW9uRXhjbHVkZUxpc3QoW25ldyBNYW5pZmVzdEV4Y2x1ZGVMaXN0KG1hbmlmZXN0KSwgbmV3IEluTWVtb3J5RXhjbHVkZUxpc3QoZXhjbHVkZSA/PyBbXSldKTtcbn1cblxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TypedMapping } from '@aws-cdk/cloudformation-diff';
|
|
2
|
+
import type { SdkProvider } from '../aws-auth/private';
|
|
3
|
+
import type { CloudFormationStack } from './cloudformation';
|
|
4
|
+
import { ResourceMapping, ResourceLocation } from './cloudformation';
|
|
5
|
+
import { type ExcludeList } from './exclude';
|
|
6
|
+
export * from './exclude';
|
|
7
|
+
/**
|
|
8
|
+
* Represents a set of possible movements of a resource from one location
|
|
9
|
+
* to another. In the ideal case, there is only one source and only one
|
|
10
|
+
* destination.
|
|
11
|
+
*/
|
|
12
|
+
export type ResourceMovement = [ResourceLocation[], ResourceLocation[]];
|
|
13
|
+
export declare class AmbiguityError extends Error {
|
|
14
|
+
readonly movements: ResourceMovement[];
|
|
15
|
+
constructor(movements: ResourceMovement[]);
|
|
16
|
+
paths(): [string[], string[]][];
|
|
17
|
+
}
|
|
18
|
+
export declare function resourceMovements(before: CloudFormationStack[], after: CloudFormationStack[]): ResourceMovement[];
|
|
19
|
+
export declare function ambiguousMovements(movements: ResourceMovement[]): ResourceMovement[];
|
|
20
|
+
/**
|
|
21
|
+
* Converts a list of unambiguous resource movements into a list of resource mappings.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
export declare function resourceMappings(movements: ResourceMovement[], stacks?: CloudFormationStack[]): ResourceMapping[];
|
|
25
|
+
/**
|
|
26
|
+
* Compares the deployed state to the cloud assembly state, and finds all resources
|
|
27
|
+
* that were moved from one location (stack + logical ID) to another. The comparison
|
|
28
|
+
* is done per environment.
|
|
29
|
+
*/
|
|
30
|
+
export declare function findResourceMovements(stacks: CloudFormationStack[], sdkProvider: SdkProvider, exclude?: ExcludeList): Promise<ResourceMovement[]>;
|
|
31
|
+
export declare function formatTypedMappings(mappings: TypedMapping[]): string;
|
|
32
|
+
export declare function formatAmbiguousMappings(paths: [string[], string[]][]): string;
|
|
@@ -0,0 +1,191 @@
|
|
|
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
|
+
exports.AmbiguityError = void 0;
|
|
18
|
+
exports.resourceMovements = resourceMovements;
|
|
19
|
+
exports.ambiguousMovements = ambiguousMovements;
|
|
20
|
+
exports.resourceMappings = resourceMappings;
|
|
21
|
+
exports.findResourceMovements = findResourceMovements;
|
|
22
|
+
exports.formatTypedMappings = formatTypedMappings;
|
|
23
|
+
exports.formatAmbiguousMappings = formatAmbiguousMappings;
|
|
24
|
+
const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
|
|
25
|
+
const util_1 = require("../../util");
|
|
26
|
+
const plugin_1 = require("../plugin");
|
|
27
|
+
const streams_1 = require("../streams");
|
|
28
|
+
const cloudformation_1 = require("./cloudformation");
|
|
29
|
+
const digest_1 = require("./digest");
|
|
30
|
+
const exclude_1 = require("./exclude");
|
|
31
|
+
__exportStar(require("./exclude"), exports);
|
|
32
|
+
class AmbiguityError extends Error {
|
|
33
|
+
movements;
|
|
34
|
+
constructor(movements) {
|
|
35
|
+
super('Ambiguous resource mappings');
|
|
36
|
+
this.movements = movements;
|
|
37
|
+
}
|
|
38
|
+
paths() {
|
|
39
|
+
return this.movements.map(([a, b]) => [convert(a), convert(b)]);
|
|
40
|
+
function convert(locations) {
|
|
41
|
+
return locations.map((l) => l.toPath());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.AmbiguityError = AmbiguityError;
|
|
46
|
+
function groupByKey(entries) {
|
|
47
|
+
const result = {};
|
|
48
|
+
for (const [hash, location] of entries) {
|
|
49
|
+
if (hash in result) {
|
|
50
|
+
result[hash].push(location);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
result[hash] = [location];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
function resourceMovements(before, after) {
|
|
59
|
+
return Object.values(removeUnmovedResources(zip(groupByKey(before.flatMap(resourceDigests)), groupByKey(after.flatMap(resourceDigests)))));
|
|
60
|
+
}
|
|
61
|
+
function ambiguousMovements(movements) {
|
|
62
|
+
// A movement is considered ambiguous if these two conditions are met:
|
|
63
|
+
// 1. Both sides have at least one element (otherwise, it's just addition or deletion)
|
|
64
|
+
// 2. At least one side has more than one element
|
|
65
|
+
return movements
|
|
66
|
+
.filter(([pre, post]) => pre.length > 0 && post.length > 0)
|
|
67
|
+
.filter(([pre, post]) => pre.length > 1 || post.length > 1);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Converts a list of unambiguous resource movements into a list of resource mappings.
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
function resourceMappings(movements, stacks) {
|
|
74
|
+
const stacksPredicate = stacks == null
|
|
75
|
+
? () => true
|
|
76
|
+
: (m) => {
|
|
77
|
+
// Any movement that involves one of the selected stacks (either moving from or to)
|
|
78
|
+
// is considered a candidate for refactoring.
|
|
79
|
+
const stackNames = [m.source.stack.stackName, m.destination.stack.stackName];
|
|
80
|
+
return stacks.some((stack) => stackNames.includes(stack.stackName));
|
|
81
|
+
};
|
|
82
|
+
return movements
|
|
83
|
+
.filter(([pre, post]) => pre.length === 1 && post.length === 1 && !pre[0].equalTo(post[0]))
|
|
84
|
+
.map(([pre, post]) => new cloudformation_1.ResourceMapping(pre[0], post[0]))
|
|
85
|
+
.filter(stacksPredicate);
|
|
86
|
+
}
|
|
87
|
+
function removeUnmovedResources(m) {
|
|
88
|
+
const result = {};
|
|
89
|
+
for (const [hash, [before, after]] of Object.entries(m)) {
|
|
90
|
+
const common = before.filter((b) => after.some((a) => a.equalTo(b)));
|
|
91
|
+
result[hash] = [
|
|
92
|
+
before.filter((b) => !common.some((c) => b.equalTo(c))),
|
|
93
|
+
after.filter((a) => !common.some((c) => a.equalTo(c))),
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* For each hash, identifying a single resource, zip the two lists of locations,
|
|
100
|
+
* producing a resource movement
|
|
101
|
+
*/
|
|
102
|
+
function zip(m1, m2) {
|
|
103
|
+
const result = {};
|
|
104
|
+
for (const [hash, locations] of Object.entries(m1)) {
|
|
105
|
+
if (hash in m2) {
|
|
106
|
+
result[hash] = [locations, m2[hash]];
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
result[hash] = [locations, []];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const [hash, locations] of Object.entries(m2)) {
|
|
113
|
+
if (!(hash in m1)) {
|
|
114
|
+
result[hash] = [[], locations];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Computes a list of pairs [digest, location] for each resource in the stack.
|
|
121
|
+
*/
|
|
122
|
+
function resourceDigests(stack) {
|
|
123
|
+
const digests = (0, digest_1.computeResourceDigests)(stack.template);
|
|
124
|
+
return Object.entries(digests).map(([logicalId, digest]) => {
|
|
125
|
+
const location = new cloudformation_1.ResourceLocation(stack, logicalId);
|
|
126
|
+
return [digest, location];
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Compares the deployed state to the cloud assembly state, and finds all resources
|
|
131
|
+
* that were moved from one location (stack + logical ID) to another. The comparison
|
|
132
|
+
* is done per environment.
|
|
133
|
+
*/
|
|
134
|
+
async function findResourceMovements(stacks, sdkProvider, exclude = new exclude_1.NeverExclude()) {
|
|
135
|
+
const stackGroups = new Map();
|
|
136
|
+
// Group stacks by environment
|
|
137
|
+
for (const stack of stacks) {
|
|
138
|
+
const environment = stack.environment;
|
|
139
|
+
const key = (0, digest_1.hashObject)(environment);
|
|
140
|
+
if (stackGroups.has(key)) {
|
|
141
|
+
stackGroups.get(key)[1].push(stack);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// The first time we see an environment, we need to fetch all stacks deployed to it.
|
|
145
|
+
const before = await getDeployedStacks(sdkProvider, environment);
|
|
146
|
+
stackGroups.set(key, [before, [stack]]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const result = [];
|
|
150
|
+
for (const [_, [before, after]] of stackGroups) {
|
|
151
|
+
result.push(...resourceMovements(before, after));
|
|
152
|
+
}
|
|
153
|
+
return result.filter(mov => {
|
|
154
|
+
const after = mov[1];
|
|
155
|
+
return after.every(l => !exclude.isExcluded(l));
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async function getDeployedStacks(sdkProvider, environment) {
|
|
159
|
+
const cfn = (await sdkProvider.forEnvironment(environment, plugin_1.Mode.ForReading)).sdk.cloudFormation();
|
|
160
|
+
const summaries = await cfn.paginatedListStacks({
|
|
161
|
+
StackStatusFilter: [
|
|
162
|
+
'CREATE_COMPLETE',
|
|
163
|
+
'UPDATE_COMPLETE',
|
|
164
|
+
'UPDATE_ROLLBACK_COMPLETE',
|
|
165
|
+
'IMPORT_COMPLETE',
|
|
166
|
+
'ROLLBACK_COMPLETE',
|
|
167
|
+
],
|
|
168
|
+
});
|
|
169
|
+
const normalize = async (summary) => {
|
|
170
|
+
const templateCommandOutput = await cfn.getTemplate({ StackName: summary.StackName });
|
|
171
|
+
const template = (0, util_1.deserializeStructure)(templateCommandOutput.TemplateBody ?? '{}');
|
|
172
|
+
return {
|
|
173
|
+
environment,
|
|
174
|
+
stackName: summary.StackName,
|
|
175
|
+
template,
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
|
|
179
|
+
return Promise.all(summaries.map(normalize));
|
|
180
|
+
}
|
|
181
|
+
function formatTypedMappings(mappings) {
|
|
182
|
+
const stream = new streams_1.StringWriteStream();
|
|
183
|
+
(0, cloudformation_diff_1.formatTypedMappings)(stream, mappings);
|
|
184
|
+
return stream.toString();
|
|
185
|
+
}
|
|
186
|
+
function formatAmbiguousMappings(paths) {
|
|
187
|
+
const stream = new streams_1.StringWriteStream();
|
|
188
|
+
(0, cloudformation_diff_1.formatAmbiguousMappings)(stream, paths);
|
|
189
|
+
return stream.toString();
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQXFEQSw4Q0FNQztBQUVELGdEQU9DO0FBTUQsNENBa0JDO0FBMkRELHNEQTZCQztBQWdDRCxrREFJQztBQUVELDBEQUlDO0FBN05ELHNFQUdzQztBQUd0QyxxQ0FBa0Q7QUFFbEQsc0NBQWlDO0FBQ2pDLHdDQUErQztBQUUvQyxxREFBcUU7QUFDckUscUNBQThEO0FBQzlELHVDQUEyRDtBQUUzRCw0Q0FBMEI7QUFTMUIsTUFBYSxjQUFlLFNBQVEsS0FBSztJQUNYO0lBQTVCLFlBQTRCLFNBQTZCO1FBQ3ZELEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRFgsY0FBUyxHQUFULFNBQVMsQ0FBb0I7SUFFekQsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsU0FBUyxPQUFPLENBQUMsU0FBNkI7WUFDNUMsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBWkQsd0NBWUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxPQUFzQjtJQUMzQyxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBRXZDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMs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TSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQXFCLEVBQUUsRUFBRTtRQUNoRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBVSxFQUFFLENBQUMsQ0FBQztRQUN2RixNQUFNLFFBQVEsR0FBRyxJQUFBLDJCQUFvQixFQUFDLHFCQUFxQixDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNsRixPQUFPO1lBQ0wsV0FBVztZQUNYLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBVTtZQUM3QixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLHdFQUF3RTtJQUN4RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxRQUF3QjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7SUFDdkMsSUFBQSx5Q0FBZ0IsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLEtBQTZCO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksMkJBQWlCLEVBQUUsQ0FBQztJQUN2QyxJQUFBLDZDQUFvQixFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUeXBlZE1hcHBpbmcgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7XG4gIGZvcm1hdEFtYmlndW91c01hcHBpbmdzIGFzIGZtdEFtYmlndW91c01hcHBpbmdzLFxuICBmb3JtYXRUeXBlZE1hcHBpbmdzIGFzIGZtdFR5cGVkTWFwcGluZ3MsXG59IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBTdGFja1N1bW1hcnkgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgZGVzZXJpYWxpemVTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuaW1wb3J0IHsgU3RyaW5nV3JpdGVTdHJlYW0gfSBmcm9tICcuLi9zdHJlYW1zJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VNYXBwaW5nLCBSZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBjb21wdXRlUmVzb3VyY2VEaWdlc3RzLCBoYXNoT2JqZWN0IH0gZnJvbSAnLi9kaWdlc3QnO1xuaW1wb3J0IHsgTmV2ZXJFeGNsdWRlLCB0eXBlIEV4Y2x1ZGVMaXN0IH0gZnJvbSAnLi9leGNsdWRlJztcblxuZXhwb3J0ICogZnJvbSAnLi9leGNsdWRlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIG1vdmVtZW50cyBvZiBhIHJlc291cmNlIGZyb20gb25lIGxvY2F0aW9uXG4gKiB0byBhbm90aGVyLiBJbiB0aGUgaWRlYWwgY2FzZSwgdGhlcmUgaXMgb25seSBvbmUgc291cmNlIGFuZCBvbmx5IG9uZVxuICogZGVzdGluYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFJlc291cmNlTW92ZW1lbnQgPSBbUmVzb3VyY2VMb2NhdGlvbltdLCBSZXNvdXJjZUxvY2F0aW9uW11dO1xuXG5leHBvcnQgY2xhc3MgQW1iaWd1aXR5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBtb3ZlbWVudHM6IFJlc291cmNlTW92ZW1lbnRbXSkge1xuICAgIHN1cGVyKCdBbWJpZ3VvdXMgcmVzb3VyY2UgbWFwcGluZ3MnKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXRocygpOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlbWVudHMubWFwKChbYSwgYl0pID0+IFtjb252ZXJ0KGEpLCBjb252ZXJ0KGIpXSk7XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0KGxvY2F0aW9uczogUmVzb3VyY2VMb2NhdGlvbltdKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIGxvY2F0aW9ucy5tYXAoKGwpID0+IGwudG9QYXRoKCkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBncm91cEJ5S2V5PEE+KGVudHJpZXM6IFtzdHJpbmcsIEFdW10pOiBSZWNvcmQ8c3RyaW5nLCBBW10+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBW10+ID0ge307XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25dIG9mIGVudHJpZXMpIHtcbiAgICBpZiAoaGFzaCBpbiByZXN1bHQpIHtcbiAgICAgIHJlc3VsdFtoYXNoXS5wdXNoKGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9uXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VNb3ZlbWVudHMoYmVmb3JlOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGFmdGVyOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBSZXNvdXJjZU1vdmVtZW50W10ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhcbiAgICByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKFxuICAgICAgemlwKGdyb3VwQnlLZXkoYmVmb3JlLmZsYXRNYXAocmVzb3VyY2VEaWdlc3RzKSksIGdyb3VwQnlLZXkoYWZ0ZXIuZmxhdE1hcChyZXNvdXJjZURpZ2VzdHMpKSksXG4gICAgKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFtYmlndW91c01vdmVtZW50cyhtb3ZlbWVudHM6IFJlc291cmNlTW92ZW1lbnRbXSkge1xuICAvLyBBIG1vdmVtZW50IGlzIGNvbnNpZGVyZWQgYW1iaWd1b3VzIGlmIHRoZXNlIHR3byBjb25kaXRpb25zIGFyZSBtZXQ6XG4gIC8vICAxLiBCb3RoIHNpZGVzIGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgKG90aGVyd2lzZSwgaXQncyBqdXN0IGFkZGl0aW9uIG9yIGRlbGV0aW9uKVxuICAvLyAgMi4gQXQgbGVhc3Qgb25lIHNpZGUgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudFxuICByZXR1cm4gbW92ZW1lbnRzXG4gICAgLmZpbHRlcigoW3ByZSwgcG9zdF0pID0+IHByZS5sZW5ndGggPiAwICYmIHBvc3QubGVuZ3RoID4gMClcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA+IDEgfHwgcG9zdC5sZW5ndGggPiAxKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGxpc3Qgb2YgdW5hbWJpZ3VvdXMgcmVzb3VyY2UgbW92ZW1lbnRzIGludG8gYSBsaXN0IG9mIHJlc291cmNlIG1hcHBpbmdzLlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlTWFwcGluZ3MoXG4gIG1vdmVtZW50czogUmVzb3VyY2VNb3ZlbWVudFtdLFxuICBzdGFja3M/OiBDbG91ZEZvcm1hdGlvblN0YWNrW10sXG4pOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gIGNvbnN0IHN0YWNrc1ByZWRpY2F0ZSA9XG4gICAgc3RhY2tzID09IG51bGxcbiAgICAgID8gKCkgPT4gdHJ1ZVxuICAgICAgOiAobTogUmVzb3VyY2VNYXBwaW5nKSA9PiB7XG4gICAgICAgIC8vIEFueSBtb3ZlbWVudCB0aGF0IGludm9sdmVzIG9uZSBvZiB0aGUgc2VsZWN0ZWQgc3RhY2tzIChlaXRoZXIgbW92aW5nIGZyb20gb3IgdG8pXG4gICAgICAgIC8vIGlzIGNvbnNpZGVyZWQgYSBjYW5kaWRhdGUgZm9yIHJlZmFjdG9yaW5nLlxuICAgICAgICBjb25zdCBzdGFja05hbWVzID0gW20uc291cmNlLnN0YWNrLnN0YWNrTmFtZSwgbS5kZXN0aW5hdGlvbi5zdGFjay5zdGFja05hbWVdO1xuICAgICAgICByZXR1cm4gc3RhY2tzLnNvbWUoKHN0YWNrKSA9PiBzdGFja05hbWVzLmluY2x1ZGVzKHN0YWNrLnN0YWNrTmFtZSkpO1xuICAgICAgfTtcblxuICByZXR1cm4gbW92ZW1lbnRzXG4gICAgLmZpbHRlcigoW3ByZSwgcG9zdF0pID0+IHByZS5sZW5ndGggPT09IDEgJiYgcG9zdC5sZW5ndGggPT09IDEgJiYgIXByZVswXS5lcXVhbFRvKHBvc3RbMF0pKVxuICAgIC5tYXAoKFtwcmUsIHBvc3RdKSA9PiBuZXcgUmVzb3VyY2VNYXBwaW5nKHByZVswXSwgcG9zdFswXSkpXG4gICAgLmZpbHRlcihzdGFja3NQcmVkaWNhdGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKG06IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+KTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlbWVudD4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+ID0ge307XG4gIGZvciAoY29uc3QgW2hhc2gsIFtiZWZvcmUsIGFmdGVyXV0gb2YgT2JqZWN0LmVudHJpZXMobSkpIHtcbiAgICBjb25zdCBjb21tb24gPSBiZWZvcmUuZmlsdGVyKChiKSA9PiBhZnRlci5zb21lKChhKSA9PiBhLmVxdWFsVG8oYikpKTtcbiAgICByZXN1bHRbaGFzaF0gPSBbXG4gICAgICBiZWZvcmUuZmlsdGVyKChiKSA9PiAhY29tbW9uLnNvbWUoKGMpID0+IGIuZXF1YWxUbyhjKSkpLFxuICAgICAgYWZ0ZXIuZmlsdGVyKChhKSA9PiAhY29tbW9uLnNvbWUoKGMpID0+IGEuZXF1YWxUbyhjKSkpLFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZvciBlYWNoIGhhc2gsIGlkZW50aWZ5aW5nIGEgc2luZ2xlIHJlc291cmNlLCB6aXAgdGhlIHR3byBsaXN0cyBvZiBsb2NhdGlvbnMsXG4gKiBwcm9kdWNpbmcgYSByZXNvdXJjZSBtb3ZlbWVudFxuICovXG5mdW5jdGlvbiB6aXAoXG4gIG0xOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+LFxuICBtMjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZW1lbnQ+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmVtZW50PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW2hhc2gsIGxvY2F0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMobTEpKSB7XG4gICAgaWYgKGhhc2ggaW4gbTIpIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtsb2NhdGlvbnMsIG0yW2hhc2hdXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9ucywgW11dO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2hhc2gsIGxvY2F0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMobTIpKSB7XG4gICAgaWYgKCEoaGFzaCBpbiBtMSkpIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtbXSwgbG9jYXRpb25zXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIGEgbGlzdCBvZiBwYWlycyBbZGlnZXN0LCBsb2NhdGlvbl0gZm9yIGVhY2ggcmVzb3VyY2UgaW4gdGhlIHN0YWNrLlxuICovXG5mdW5jdGlvbiByZXNvdXJjZURpZ2VzdHMoc3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2spOiBbc3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uXVtdIHtcbiAgY29uc3QgZGlnZXN0cyA9IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMoc3RhY2sudGVtcGxhdGUpO1xuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkaWdlc3RzKS5tYXAoKFtsb2dpY2FsSWQsIGRpZ2VzdF0pID0+IHtcbiAgICBjb25zdCBsb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbiA9IG5ldyBSZXNvdXJjZUxvY2F0aW9uKHN0YWNrLCBsb2dpY2FsSWQpO1xuICAgIHJldHVybiBbZGlnZXN0LCBsb2NhdGlvbl07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHRoZSBkZXBsb3llZCBzdGF0ZSB0byB0aGUgY2xvdWQgYXNzZW1ibHkgc3RhdGUsIGFuZCBmaW5kcyBhbGwgcmVzb3VyY2VzXG4gKiB0aGF0IHdlcmUgbW92ZWQgZnJvbSBvbmUgbG9jYXRpb24gKHN0YWNrICsgbG9naWNhbCBJRCkgdG8gYW5vdGhlci4gVGhlIGNvbXBhcmlzb25cbiAqIGlzIGRvbmUgcGVyIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFJlc291cmNlTW92ZW1lbnRzKFxuICBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBleGNsdWRlOiBFeGNsdWRlTGlzdCA9IG5ldyBOZXZlckV4Y2x1ZGUoKSxcbik6IFByb21pc2U8UmVzb3VyY2VNb3ZlbWVudFtdPiB7XG4gIGNvbnN0IHN0YWNrR3JvdXBzOiBNYXA8c3RyaW5nLCBbQ2xvdWRGb3JtYXRpb25TdGFja1tdLCBDbG91ZEZvcm1hdGlvblN0YWNrW11dPiA9IG5ldyBNYXAoKTtcblxuICAvLyBHcm91cCBzdGFja3MgYnkgZW52aXJvbm1lbnRcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHN0YWNrLmVudmlyb25tZW50O1xuICAgIGNvbnN0IGtleSA9IGhhc2hPYmplY3QoZW52aXJvbm1lbnQpO1xuICAgIGlmIChzdGFja0dyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgc3RhY2tHcm91cHMuZ2V0KGtleSkhWzFdLnB1c2goc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgZmlyc3QgdGltZSB3ZSBzZWUgYW4gZW52aXJvbm1lbnQsIHdlIG5lZWQgdG8gZmV0Y2ggYWxsIHN0YWNrcyBkZXBsb3llZCB0byBpdC5cbiAgICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCk7XG4gICAgICBzdGFja0dyb3Vwcy5zZXQoa2V5LCBbYmVmb3JlLCBbc3RhY2tdXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZXNvdXJjZU1vdmVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBbXywgW2JlZm9yZSwgYWZ0ZXJdXSBvZiBzdGFja0dyb3Vwcykge1xuICAgIHJlc3VsdC5wdXNoKC4uLnJlc291cmNlTW92ZW1lbnRzKGJlZm9yZSwgYWZ0ZXIpKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuZmlsdGVyKG1vdiA9PiB7XG4gICAgY29uc3QgYWZ0ZXIgPSBtb3ZbMV07XG4gICAgcmV0dXJuIGFmdGVyLmV2ZXJ5KGwgPT4gIWV4Y2x1ZGUuaXNFeGNsdWRlZChsKSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZXBsb3llZFN0YWNrcyhcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2tbXT4ge1xuICBjb25zdCBjZm4gPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIE1vZGUuRm9yUmVhZGluZykpLnNkay5jbG91ZEZvcm1hdGlvbigpO1xuXG4gIGNvbnN0IHN1bW1hcmllcyA9IGF3YWl0IGNmbi5wYWdpbmF0ZWRMaXN0U3RhY2tzKHtcbiAgICBTdGFja1N0YXR1c0ZpbHRlcjogW1xuICAgICAgJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAnVVBEQVRFX0NPTVBMRVRFJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgICAgJ0lNUE9SVF9DT01QTEVURScsXG4gICAgICAnUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgIF0sXG4gIH0pO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGFzeW5jIChzdW1tYXJ5OiBTdGFja1N1bW1hcnkpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoeyBTdGFja05hbWU6IHN1bW1hcnkuU3RhY2tOYW1lISB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRlc2VyaWFsaXplU3RydWN0dXJlKHRlbXBsYXRlQ29tbWFuZE91dHB1dC5UZW1wbGF0ZUJvZHkgPz8gJ3t9Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgc3RhY2tOYW1lOiBzdW1tYXJ5LlN0YWNrTmFtZSEsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICB9O1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9wcm9taXNlYWxsLW5vLXVuYm91bmRlZC1wYXJhbGxlbGlzbVxuICByZXR1cm4gUHJvbWlzZS5hbGwoc3VtbWFyaWVzLm1hcChub3JtYWxpemUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFR5cGVkTWFwcGluZ3MobWFwcGluZ3M6IFR5cGVkTWFwcGluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG4gIGZtdFR5cGVkTWFwcGluZ3Moc3RyZWFtLCBtYXBwaW5ncyk7XG4gIHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFtYmlndW91c01hcHBpbmdzKHBhdGhzOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmluZ1dyaXRlU3RyZWFtKCk7XG4gIGZtdEFtYmlndW91c01hcHBpbmdzKHN0cmVhbSwgcGF0aHMpO1xuICByZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated
|
|
3
|
+
*/
|
|
4
|
+
export declare enum RequireApproval {
|
|
5
|
+
/**
|
|
6
|
+
* Never require any security approvals
|
|
7
|
+
*/
|
|
8
|
+
NEVER = "never",
|
|
9
|
+
/**
|
|
10
|
+
* Any security changes require an approval
|
|
11
|
+
*/
|
|
12
|
+
ANY_CHANGE = "any-change",
|
|
13
|
+
/**
|
|
14
|
+
* Require approval only for changes that are access broadening
|
|
15
|
+
*/
|
|
16
|
+
BROADENING = "broadening"
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequireApproval = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
7
|
+
var RequireApproval;
|
|
8
|
+
(function (RequireApproval) {
|
|
9
|
+
/**
|
|
10
|
+
* Never require any security approvals
|
|
11
|
+
*/
|
|
12
|
+
RequireApproval["NEVER"] = "never";
|
|
13
|
+
/**
|
|
14
|
+
* Any security changes require an approval
|
|
15
|
+
*/
|
|
16
|
+
RequireApproval["ANY_CHANGE"] = "any-change";
|
|
17
|
+
/**
|
|
18
|
+
* Require approval only for changes that are access broadening
|
|
19
|
+
*/
|
|
20
|
+
RequireApproval["BROADENING"] = "broadening";
|
|
21
|
+
})(RequireApproval || (exports.RequireApproval = RequireApproval = {}));
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1hcHByb3ZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlcXVpcmUtYXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxJQUFZLGVBYVg7QUFiRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCxrQ0FBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCw0Q0FBeUIsQ0FBQTtJQUN6Qjs7T0FFRztJQUNILDRDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFiVyxlQUFlLCtCQUFmLGVBQWUsUUFhMUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBlbnVtIFJlcXVpcmVBcHByb3ZhbCB7XG4gIC8qKlxuICAgKiBOZXZlciByZXF1aXJlIGFueSBzZWN1cml0eSBhcHByb3ZhbHNcbiAgICovXG4gIE5FVkVSID0gJ25ldmVyJyxcbiAgLyoqXG4gICAqIEFueSBzZWN1cml0eSBjaGFuZ2VzIHJlcXVpcmUgYW4gYXBwcm92YWxcbiAgICovXG4gIEFOWV9DSEFOR0UgPSAnYW55LWNoYW5nZScsXG4gIC8qKlxuICAgKiBSZXF1aXJlIGFwcHJvdmFsIG9ubHkgZm9yIGNoYW5nZXMgdGhhdCBhcmUgYWNjZXNzIGJyb2FkZW5pbmdcbiAgICovXG4gIEJST0FERU5JTkcgPSAnYnJvYWRlbmluZycsXG59XG4iXX0=
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { ResourceDifference } from '@aws-cdk/cloudformation-diff';
|
|
2
|
+
import type * as cxapi from '@aws-cdk/cx-api';
|
|
3
|
+
import type { ResourceIdentifierSummary, ResourceToImport } from '@aws-sdk/client-cloudformation';
|
|
4
|
+
import type { DeploymentMethod, Deployments } from '../deployments';
|
|
5
|
+
import { type IoHelper } from '../io/private';
|
|
6
|
+
import type { Tag } from '../tags';
|
|
7
|
+
export type ResourcesToImport = ResourceToImport[];
|
|
8
|
+
export type ResourceIdentifierSummaries = ResourceIdentifierSummary[];
|
|
9
|
+
export interface ResourceImporterProps {
|
|
10
|
+
deployments: Deployments;
|
|
11
|
+
ioHelper: IoHelper;
|
|
12
|
+
}
|
|
13
|
+
export interface ImportDeploymentOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Role to pass to CloudFormation for deployment
|
|
16
|
+
*
|
|
17
|
+
* @default - Default stack role
|
|
18
|
+
*/
|
|
19
|
+
readonly roleArn?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Deployment method
|
|
22
|
+
*
|
|
23
|
+
* @default - Change set with default options
|
|
24
|
+
*/
|
|
25
|
+
readonly deploymentMethod?: DeploymentMethod;
|
|
26
|
+
/**
|
|
27
|
+
* Stack tags (pass through to CloudFormation)
|
|
28
|
+
*
|
|
29
|
+
* @default - No tags
|
|
30
|
+
*/
|
|
31
|
+
readonly tags?: Tag[];
|
|
32
|
+
/**
|
|
33
|
+
* Use previous values for unspecified parameters
|
|
34
|
+
*
|
|
35
|
+
* If not set, all parameters must be specified for every deployment.
|
|
36
|
+
*
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
readonly usePreviousParameters?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Rollback failed deployments
|
|
42
|
+
*
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
readonly rollback?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Set of parameters that uniquely identify a physical resource of a given type
|
|
49
|
+
* for the import operation, example:
|
|
50
|
+
*
|
|
51
|
+
* ```
|
|
52
|
+
* {
|
|
53
|
+
* "AWS::S3::Bucket": [["BucketName"]],
|
|
54
|
+
* "AWS::DynamoDB::GlobalTable": [["TableName"], ["TableArn"], ["TableStreamArn"]],
|
|
55
|
+
* "AWS::Route53::KeySigningKey": [["HostedZoneId", "Name"]],
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export type ResourceIdentifiers = {
|
|
60
|
+
[resourceType: string]: string[][];
|
|
61
|
+
};
|
|
62
|
+
type ResourceIdentifierProperties = Record<string, string>;
|
|
63
|
+
/**
|
|
64
|
+
* Mapping of CDK resources (L1 constructs) to physical resources to be imported
|
|
65
|
+
* in their place, example:
|
|
66
|
+
*
|
|
67
|
+
* ```
|
|
68
|
+
* {
|
|
69
|
+
* "MyStack/MyS3Bucket/Resource": {
|
|
70
|
+
* "BucketName": "my-manually-created-s3-bucket"
|
|
71
|
+
* },
|
|
72
|
+
* "MyStack/MyVpc/Resource": {
|
|
73
|
+
* "VpcId": "vpc-123456789"
|
|
74
|
+
* }
|
|
75
|
+
* }
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
type ResourceMap = {
|
|
79
|
+
[logicalResource: string]: ResourceIdentifierProperties;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Resource importing utility class
|
|
83
|
+
*
|
|
84
|
+
* - Determines the resources added to a template (compared to the deployed version)
|
|
85
|
+
* - Look up the identification information
|
|
86
|
+
* - Load them from a file, or
|
|
87
|
+
* - Ask the user, based on information supplied to us by CloudFormation's GetTemplateSummary
|
|
88
|
+
* - Translate the input to a structure expected by CloudFormation, update the template to add the
|
|
89
|
+
* importable resources, then run an IMPORT changeset.
|
|
90
|
+
*/
|
|
91
|
+
export declare class ResourceImporter {
|
|
92
|
+
private _currentTemplate;
|
|
93
|
+
private readonly stack;
|
|
94
|
+
private readonly cfn;
|
|
95
|
+
private readonly ioHelper;
|
|
96
|
+
constructor(stack: cxapi.CloudFormationStackArtifact, props: ResourceImporterProps);
|
|
97
|
+
/**
|
|
98
|
+
* Ask the user for resources to import
|
|
99
|
+
*/
|
|
100
|
+
askForResourceIdentifiers(available: ImportableResource[]): Promise<ImportMap>;
|
|
101
|
+
/**
|
|
102
|
+
* Load the resources to import from a file
|
|
103
|
+
*/
|
|
104
|
+
loadResourceIdentifiers(available: ImportableResource[], filename: string): Promise<ImportMap>;
|
|
105
|
+
/**
|
|
106
|
+
* Based on the provided resource mapping, prepare CFN structures for import (template,
|
|
107
|
+
* ResourcesToImport structure) and perform the import operation (CloudFormation deployment)
|
|
108
|
+
*
|
|
109
|
+
* @param importMap Mapping from CDK construct tree path to physical resource import identifiers
|
|
110
|
+
* @param options Options to pass to CloudFormation deploy operation
|
|
111
|
+
*/
|
|
112
|
+
importResourcesFromMap(importMap: ImportMap, options?: ImportDeploymentOptions): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Based on the app and resources file generated by cdk migrate. Removes all items from the template that
|
|
115
|
+
* cannot be included in an import change-set for new stacks and performs the import operation,
|
|
116
|
+
* creating the new stack.
|
|
117
|
+
*
|
|
118
|
+
* @param resourcesToImport The mapping created by cdk migrate
|
|
119
|
+
* @param options Options to pass to CloudFormation deploy operation
|
|
120
|
+
*/
|
|
121
|
+
importResourcesFromMigrate(resourcesToImport: ResourcesToImport, options?: ImportDeploymentOptions): Promise<void>;
|
|
122
|
+
private importResources;
|
|
123
|
+
/**
|
|
124
|
+
* Perform a diff between the currently running and the new template, ensure that it is valid
|
|
125
|
+
* for importing and return a list of resources that are being added in the new version
|
|
126
|
+
*
|
|
127
|
+
* @return mapping logicalResourceId -> resourceDifference
|
|
128
|
+
*/
|
|
129
|
+
discoverImportableResources(allowNonAdditions?: boolean): Promise<DiscoverImportableResourcesResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Resolves the environment of a stack.
|
|
132
|
+
*/
|
|
133
|
+
resolveEnvironment(): Promise<cxapi.Environment>;
|
|
134
|
+
/**
|
|
135
|
+
* Get currently deployed template of the given stack (SINGLETON)
|
|
136
|
+
*
|
|
137
|
+
* @returns Currently deployed CloudFormation template
|
|
138
|
+
*/
|
|
139
|
+
private currentTemplate;
|
|
140
|
+
/**
|
|
141
|
+
* Return the current template, with the given resources added to it
|
|
142
|
+
*/
|
|
143
|
+
private currentTemplateWithAdditions;
|
|
144
|
+
/**
|
|
145
|
+
* Get a list of import identifiers for all resource types used in the given
|
|
146
|
+
* template that do support the import operation (SINGLETON)
|
|
147
|
+
*
|
|
148
|
+
* @returns a mapping from a resource type to a list of property names that together identify the resource for import
|
|
149
|
+
*/
|
|
150
|
+
private resourceIdentifiers;
|
|
151
|
+
/**
|
|
152
|
+
* Ask for the importable identifier for the given resource
|
|
153
|
+
*
|
|
154
|
+
* There may be more than one identifier under which a resource can be imported. The `import`
|
|
155
|
+
* operation needs exactly one of them.
|
|
156
|
+
*
|
|
157
|
+
* - If we can get one from the template, we will use one.
|
|
158
|
+
* - Otherwise, we will ask the user for one of them.
|
|
159
|
+
*/
|
|
160
|
+
private askForResourceIdentifier;
|
|
161
|
+
/**
|
|
162
|
+
* Convert the internal "resource mapping" structure to CloudFormation accepted "ResourcesToImport" structure
|
|
163
|
+
*/
|
|
164
|
+
private makeResourcesToImport;
|
|
165
|
+
/**
|
|
166
|
+
* Convert CloudFormation logical resource ID to CDK construct tree path
|
|
167
|
+
*
|
|
168
|
+
* @param logicalId CloudFormation logical ID of the resource (the key in the template's Resources section)
|
|
169
|
+
* @returns Forward-slash separated path of the resource in CDK construct tree, e.g. MyStack/MyBucket/Resource
|
|
170
|
+
*/
|
|
171
|
+
private describeResource;
|
|
172
|
+
/**
|
|
173
|
+
* Removes CDKMetadata and Outputs in the template so that only resources for importing are left.
|
|
174
|
+
* @returns template with import resources only
|
|
175
|
+
*/
|
|
176
|
+
private removeNonImportResources;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Information about a resource in the template that is importable
|
|
180
|
+
*/
|
|
181
|
+
export interface ImportableResource {
|
|
182
|
+
/**
|
|
183
|
+
* The logical ID of the resource
|
|
184
|
+
*/
|
|
185
|
+
readonly logicalId: string;
|
|
186
|
+
/**
|
|
187
|
+
* The resource definition in the new template
|
|
188
|
+
*/
|
|
189
|
+
readonly resourceDefinition: any;
|
|
190
|
+
/**
|
|
191
|
+
* The diff as reported by `cloudformation-diff`.
|
|
192
|
+
*/
|
|
193
|
+
readonly resourceDiff: ResourceDifference;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The information necessary to execute an import operation
|
|
197
|
+
*/
|
|
198
|
+
export interface ImportMap {
|
|
199
|
+
/**
|
|
200
|
+
* Mapping logical IDs to physical names
|
|
201
|
+
*/
|
|
202
|
+
readonly resourceMap: ResourceMap;
|
|
203
|
+
/**
|
|
204
|
+
* The selection of resources we are actually importing
|
|
205
|
+
*
|
|
206
|
+
* For each of the resources in this list, there is a corresponding entry in
|
|
207
|
+
* the `resourceMap` map.
|
|
208
|
+
*/
|
|
209
|
+
readonly importResources: ImportableResource[];
|
|
210
|
+
}
|
|
211
|
+
export interface DiscoverImportableResourcesResult {
|
|
212
|
+
readonly additions: ImportableResource[];
|
|
213
|
+
readonly hasNonAdditions: boolean;
|
|
214
|
+
}
|
|
215
|
+
export declare function removeNonImportResources(stack: cxapi.CloudFormationStackArtifact): any;
|
|
216
|
+
export {};
|