aws-cdk 2.1007.0 → 2.1008.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/THIRD_PARTY_LICENSES +52 -34
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth.d.ts +1 -0
  5. package/lib/api/{logs/index.js → aws-auth.js} +2 -3
  6. package/lib/api/bootstrap.d.ts +1 -0
  7. package/lib/api/bootstrap.js +18 -0
  8. package/lib/api/cloud-assembly.d.ts +1 -0
  9. package/lib/api/cloud-assembly.js +18 -0
  10. package/lib/api/cloudformation.d.ts +1 -0
  11. package/lib/api/cloudformation.js +18 -0
  12. package/lib/api/context.d.ts +1 -40
  13. package/lib/api/context.js +16 -80
  14. package/lib/api/deployments.d.ts +1 -0
  15. package/lib/api/deployments.js +18 -0
  16. package/lib/api/environment.d.ts +1 -0
  17. package/lib/api/environment.js +18 -0
  18. package/lib/api/garbage-collection.d.ts +1 -0
  19. package/lib/api/garbage-collection.js +18 -0
  20. package/lib/api/hotswap.d.ts +1 -0
  21. package/lib/api/hotswap.js +18 -0
  22. package/lib/api/index.d.ts +5 -1
  23. package/lib/api/index.js +6 -2
  24. package/lib/api/logs-monitor.d.ts +1 -0
  25. package/lib/api/logs-monitor.js +18 -0
  26. package/lib/api/notices.d.ts +1 -0
  27. package/lib/api/notices.js +18 -0
  28. package/lib/api/plugin.d.ts +1 -0
  29. package/lib/api/{garbage-collection/index.js → plugin.js} +2 -2
  30. package/lib/api/resource-import.d.ts +1 -0
  31. package/lib/api/resource-import.js +18 -0
  32. package/lib/api/rwlock.d.ts +1 -0
  33. package/lib/api/{resource-import/index.js → rwlock.js} +2 -3
  34. package/lib/api/settings.d.ts +1 -26
  35. package/lib/api/settings.js +16 -103
  36. package/lib/api/stack-events.d.ts +1 -0
  37. package/lib/api/stack-events.js +18 -0
  38. package/lib/api/tags.d.ts +1 -9
  39. package/lib/api/tags.js +16 -8
  40. package/lib/api/toolkit-info.d.ts +1 -52
  41. package/lib/api/toolkit-info.js +16 -152
  42. package/lib/api/tree.d.ts +1 -31
  43. package/lib/api/tree.js +16 -35
  44. package/lib/api/work-graph.d.ts +1 -0
  45. package/lib/api/work-graph.js +18 -0
  46. package/lib/api-private.d.ts +3 -0
  47. package/lib/api-private.js +22 -0
  48. package/lib/cli/cdk-toolkit.d.ts +17 -5
  49. package/lib/cli/cdk-toolkit.js +96 -44
  50. package/lib/cli/cli.d.ts +1 -1
  51. package/lib/cli/cli.js +30 -19
  52. package/lib/cli/io-host/cli-io-host.js +2 -2
  53. package/lib/cli/pretty-print-error.js +3 -1
  54. package/lib/cli/util/npm.d.ts +4 -1
  55. package/lib/cli/util/npm.js +25 -13
  56. package/lib/cli/version.d.ts +1 -1
  57. package/lib/cli/version.js +21 -25
  58. package/lib/commands/context.js +3 -2
  59. package/lib/commands/init/init-hooks.js +28 -6
  60. package/lib/commands/init/init.js +3 -2
  61. package/lib/commands/list-stacks.js +4 -4
  62. package/lib/context-providers/ami.d.ts +1 -13
  63. package/lib/context-providers/ami.js +16 -48
  64. package/lib/context-providers/availability-zones.d.ts +1 -13
  65. package/lib/context-providers/availability-zones.js +16 -25
  66. package/lib/context-providers/cc-api-provider.d.ts +1 -30
  67. package/lib/context-providers/cc-api-provider.js +16 -142
  68. package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -13
  69. package/lib/context-providers/endpoint-service-availability-zones.js +16 -31
  70. package/lib/context-providers/hosted-zones.d.ts +1 -12
  71. package/lib/context-providers/hosted-zones.js +16 -65
  72. package/lib/context-providers/index.d.ts +1 -44
  73. package/lib/context-providers/index.js +15 -126
  74. package/lib/context-providers/keys.d.ts +1 -13
  75. package/lib/context-providers/keys.js +16 -50
  76. package/lib/context-providers/load-balancers.d.ts +1 -20
  77. package/lib/context-providers/load-balancers.js +16 -154
  78. package/lib/context-providers/security-groups.d.ts +1 -9
  79. package/lib/context-providers/security-groups.js +16 -66
  80. package/lib/context-providers/ssm-parameters.d.ts +1 -25
  81. package/lib/context-providers/ssm-parameters.js +16 -57
  82. package/lib/context-providers/vpcs.d.ts +1 -13
  83. package/lib/context-providers/vpcs.js +16 -285
  84. package/lib/cxapp/cloud-assembly.d.ts +79 -0
  85. package/lib/cxapp/cloud-assembly.js +108 -0
  86. package/lib/{api/cxapp → cxapp}/cloud-executable.d.ts +6 -4
  87. package/lib/cxapp/cloud-executable.js +98 -0
  88. package/lib/{api/cxapp → cxapp}/environments.d.ts +1 -2
  89. package/lib/{api/cxapp → cxapp}/environments.js +2 -2
  90. package/lib/cxapp/exec.d.ts +14 -0
  91. package/lib/cxapp/exec.js +157 -0
  92. package/lib/cxapp/index.d.ts +4 -0
  93. package/lib/{api/bootstrap → cxapp}/index.js +5 -3
  94. package/lib/index.js +135349 -124905
  95. package/lib/init-templates/.init-version.json +1 -1
  96. package/lib/init-templates/.recommended-feature-flags.json +3 -2
  97. package/lib/legacy-aws-auth.d.ts +74 -0
  98. package/lib/legacy-aws-auth.js +40 -0
  99. package/lib/legacy-exports-source.d.ts +13 -18
  100. package/lib/legacy-exports-source.js +42 -49
  101. package/lib/legacy-exports.d.ts +3 -6
  102. package/lib/legacy-exports.js +5 -5
  103. package/lib/legacy-types.d.ts +31 -0
  104. package/lib/legacy-types.js +3 -0
  105. package/package.json +12 -11
  106. package/lib/api/aws-auth/account-cache.d.ts +0 -36
  107. package/lib/api/aws-auth/account-cache.js +0 -99
  108. package/lib/api/aws-auth/awscli-compatible.d.ts +0 -42
  109. package/lib/api/aws-auth/awscli-compatible.js +0 -263
  110. package/lib/api/aws-auth/cached.d.ts +0 -11
  111. package/lib/api/aws-auth/cached.js +0 -26
  112. package/lib/api/aws-auth/credential-plugins.d.ts +0 -36
  113. package/lib/api/aws-auth/credential-plugins.js +0 -152
  114. package/lib/api/aws-auth/index.d.ts +0 -3
  115. package/lib/api/aws-auth/index.js +0 -20
  116. package/lib/api/aws-auth/provider-caching.d.ts +0 -13
  117. package/lib/api/aws-auth/provider-caching.js +0 -24
  118. package/lib/api/aws-auth/sdk-logger.d.ts +0 -69
  119. package/lib/api/aws-auth/sdk-logger.js +0 -124
  120. package/lib/api/aws-auth/sdk-provider.d.ts +0 -207
  121. package/lib/api/aws-auth/sdk-provider.js +0 -357
  122. package/lib/api/aws-auth/sdk.d.ts +0 -229
  123. package/lib/api/aws-auth/sdk.js +0 -373
  124. package/lib/api/aws-auth/tracing.d.ts +0 -11
  125. package/lib/api/aws-auth/tracing.js +0 -60
  126. package/lib/api/aws-auth/user-agent.d.ts +0 -7
  127. package/lib/api/aws-auth/user-agent.js +0 -20
  128. package/lib/api/aws-auth/util.d.ts +0 -6
  129. package/lib/api/aws-auth/util.js +0 -23
  130. package/lib/api/bootstrap/bootstrap-environment.d.ts +0 -35
  131. package/lib/api/bootstrap/bootstrap-environment.js +0 -321
  132. package/lib/api/bootstrap/bootstrap-props.d.ts +0 -130
  133. package/lib/api/bootstrap/bootstrap-props.js +0 -14
  134. package/lib/api/bootstrap/deploy-bootstrap.d.ts +0 -39
  135. package/lib/api/bootstrap/deploy-bootstrap.js +0 -141
  136. package/lib/api/bootstrap/index.d.ts +0 -2
  137. package/lib/api/bootstrap/legacy-template.d.ts +0 -2
  138. package/lib/api/bootstrap/legacy-template.js +0 -82
  139. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +0 -85
  140. package/lib/api/cloudformation/evaluate-cloudformation-template.js +0 -440
  141. package/lib/api/cloudformation/index.d.ts +0 -4
  142. package/lib/api/cloudformation/index.js +0 -21
  143. package/lib/api/cloudformation/nested-stack-helpers.d.ts +0 -19
  144. package/lib/api/cloudformation/nested-stack-helpers.js +0 -86
  145. package/lib/api/cloudformation/stack-helpers.d.ts +0 -88
  146. package/lib/api/cloudformation/stack-helpers.js +0 -158
  147. package/lib/api/cloudformation/template-body-parameter.d.ts +0 -22
  148. package/lib/api/cloudformation/template-body-parameter.js +0 -104
  149. package/lib/api/cxapp/cloud-assembly.d.ts +0 -137
  150. package/lib/api/cxapp/cloud-assembly.js +0 -305
  151. package/lib/api/cxapp/cloud-executable.js +0 -89
  152. package/lib/api/cxapp/exec.d.ts +0 -57
  153. package/lib/api/cxapp/exec.js +0 -279
  154. package/lib/api/deployments/asset-manifest-builder.d.ts +0 -8
  155. package/lib/api/deployments/asset-manifest-builder.js +0 -35
  156. package/lib/api/deployments/asset-publishing.d.ts +0 -60
  157. package/lib/api/deployments/asset-publishing.js +0 -141
  158. package/lib/api/deployments/assets.d.ts +0 -11
  159. package/lib/api/deployments/assets.js +0 -109
  160. package/lib/api/deployments/cfn-api.d.ts +0 -138
  161. package/lib/api/deployments/cfn-api.js +0 -438
  162. package/lib/api/deployments/checks.d.ts +0 -9
  163. package/lib/api/deployments/checks.js +0 -72
  164. package/lib/api/deployments/deploy-stack.d.ts +0 -155
  165. package/lib/api/deployments/deploy-stack.js +0 -478
  166. package/lib/api/deployments/deployment-method.d.ts +0 -24
  167. package/lib/api/deployments/deployment-method.js +0 -3
  168. package/lib/api/deployments/deployment-result.d.ts +0 -21
  169. package/lib/api/deployments/deployment-result.js +0 -10
  170. package/lib/api/deployments/deployments.d.ts +0 -296
  171. package/lib/api/deployments/deployments.js +0 -331
  172. package/lib/api/deployments/hotswap-deployments.d.ts +0 -17
  173. package/lib/api/deployments/hotswap-deployments.js +0 -441
  174. package/lib/api/deployments/index.d.ts +0 -5
  175. package/lib/api/deployments/index.js +0 -22
  176. package/lib/api/environment/environment-access.d.ts +0 -140
  177. package/lib/api/environment/environment-access.js +0 -202
  178. package/lib/api/environment/environment-resources.d.ts +0 -75
  179. package/lib/api/environment/environment-resources.js +0 -207
  180. package/lib/api/environment/index.d.ts +0 -3
  181. package/lib/api/environment/index.js +0 -20
  182. package/lib/api/environment/placeholders.d.ts +0 -10
  183. package/lib/api/environment/placeholders.js +0 -23
  184. package/lib/api/garbage-collection/garbage-collector.d.ts +0 -158
  185. package/lib/api/garbage-collection/garbage-collector.js +0 -599
  186. package/lib/api/garbage-collection/index.d.ts +0 -1
  187. package/lib/api/garbage-collection/progress-printer.d.ts +0 -23
  188. package/lib/api/garbage-collection/progress-printer.js +0 -70
  189. package/lib/api/garbage-collection/stack-refresh.d.ts +0 -49
  190. package/lib/api/garbage-collection/stack-refresh.js +0 -151
  191. package/lib/api/hotswap/appsync-mapping-templates.d.ts +0 -4
  192. package/lib/api/hotswap/appsync-mapping-templates.js +0 -162
  193. package/lib/api/hotswap/code-build-projects.d.ts +0 -4
  194. package/lib/api/hotswap/code-build-projects.js +0 -62
  195. package/lib/api/hotswap/common.d.ts +0 -89
  196. package/lib/api/hotswap/common.js +0 -128
  197. package/lib/api/hotswap/ecs-services.d.ts +0 -4
  198. package/lib/api/hotswap/ecs-services.js +0 -159
  199. package/lib/api/hotswap/lambda-functions.d.ts +0 -4
  200. package/lib/api/hotswap/lambda-functions.js +0 -297
  201. package/lib/api/hotswap/s3-bucket-deployments.d.ts +0 -5
  202. package/lib/api/hotswap/s3-bucket-deployments.js +0 -117
  203. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +0 -4
  204. package/lib/api/hotswap/stepfunctions-state-machines.js +0 -48
  205. package/lib/api/logs/find-cloudwatch-logs.d.ts +0 -25
  206. package/lib/api/logs/find-cloudwatch-logs.js +0 -95
  207. package/lib/api/logs/index.d.ts +0 -2
  208. package/lib/api/logs/logs-monitor.d.ts +0 -76
  209. package/lib/api/logs/logs-monitor.js +0 -187
  210. package/lib/api/plugin/context-provider-plugin.d.ts +0 -6
  211. package/lib/api/plugin/context-provider-plugin.js +0 -7
  212. package/lib/api/plugin/index.d.ts +0 -3
  213. package/lib/api/plugin/index.js +0 -20
  214. package/lib/api/plugin/mode.d.ts +0 -4
  215. package/lib/api/plugin/mode.js +0 -9
  216. package/lib/api/plugin/plugin.d.ts +0 -63
  217. package/lib/api/plugin/plugin.js +0 -102
  218. package/lib/api/resource-import/importer.d.ts +0 -215
  219. package/lib/api/resource-import/importer.js +0 -322
  220. package/lib/api/resource-import/index.d.ts +0 -2
  221. package/lib/api/resource-import/migrator.d.ts +0 -26
  222. package/lib/api/resource-import/migrator.js +0 -71
  223. package/lib/api/stack-events/index.d.ts +0 -3
  224. package/lib/api/stack-events/index.js +0 -20
  225. package/lib/api/stack-events/stack-activity-monitor.d.ts +0 -100
  226. package/lib/api/stack-events/stack-activity-monitor.js +0 -142
  227. package/lib/api/stack-events/stack-event-poller.d.ts +0 -69
  228. package/lib/api/stack-events/stack-event-poller.js +0 -128
  229. package/lib/api/stack-events/stack-progress-monitor.d.ts +0 -48
  230. package/lib/api/stack-events/stack-progress-monitor.js +0 -94
  231. package/lib/api/stack-events/stack-status.d.ts +0 -42
  232. package/lib/api/stack-events/stack-status.js +0 -88
  233. package/lib/api/util/rwlock.d.ts +0 -65
  234. package/lib/api/util/rwlock.js +0 -179
  235. package/lib/api/work-graph/index.d.ts +0 -3
  236. package/lib/api/work-graph/index.js +0 -20
  237. package/lib/api/work-graph/work-graph-builder.d.ts +0 -34
  238. package/lib/api/work-graph/work-graph-builder.js +0 -168
  239. package/lib/api/work-graph/work-graph-types.d.ts +0 -50
  240. package/lib/api/work-graph/work-graph-types.js +0 -13
  241. package/lib/api/work-graph/work-graph.d.ts +0 -72
  242. package/lib/api/work-graph/work-graph.js +0 -346
  243. package/lib/cli/activity-printer/base.d.ts +0 -50
  244. package/lib/cli/activity-printer/base.js +0 -114
  245. package/lib/cli/activity-printer/current.d.ts +0 -26
  246. package/lib/cli/activity-printer/current.js +0 -118
  247. package/lib/cli/activity-printer/display.d.ts +0 -13
  248. package/lib/cli/activity-printer/display.js +0 -80
  249. package/lib/cli/activity-printer/history.d.ts +0 -32
  250. package/lib/cli/activity-printer/history.js +0 -108
  251. package/lib/cli/activity-printer/index.d.ts +0 -3
  252. package/lib/cli/activity-printer/index.js +0 -20
  253. package/lib/notices.d.ts +0 -203
  254. package/lib/notices.js +0 -411
@@ -1,89 +0,0 @@
1
- import type { PropertyDifference } from '@aws-cdk/cloudformation-diff';
2
- import type { HotswappableChange, NonHotswappableChange, ResourceChange } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/payloads/hotswap';
3
- import { NonHotswappableReason } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/payloads/hotswap';
4
- import type { SDK } from '../aws-auth';
5
- export declare const ICON = "\u2728";
6
- export interface HotswapOperation {
7
- /**
8
- * Marks the operation as hotswappable
9
- */
10
- readonly hotswappable: true;
11
- /**
12
- * The name of the service being hotswapped.
13
- * Used to set a custom User-Agent for SDK calls.
14
- */
15
- readonly service: string;
16
- /**
17
- * Description of the change that is applied as part of the operation
18
- */
19
- readonly change: HotswappableChange;
20
- /**
21
- * Applies the hotswap operation
22
- */
23
- readonly apply: (sdk: SDK) => Promise<void>;
24
- }
25
- export interface RejectedChange {
26
- /**
27
- * Marks the change as not hotswappable
28
- */
29
- readonly hotswappable: false;
30
- /**
31
- * The change that got rejected
32
- */
33
- readonly change: NonHotswappableChange;
34
- /**
35
- * Whether or not to show this change when listing non-hotswappable changes in HOTSWAP_ONLY mode. Does not affect
36
- * listing in FALL_BACK mode.
37
- *
38
- * @default true
39
- */
40
- readonly hotswapOnlyVisible?: boolean;
41
- }
42
- export type HotswapChange = HotswapOperation | RejectedChange;
43
- export declare enum HotswapMode {
44
- /**
45
- * Will fall back to CloudFormation when a non-hotswappable change is detected
46
- */
47
- FALL_BACK = "fall-back",
48
- /**
49
- * Will not fall back to CloudFormation when a non-hotswappable change is detected
50
- */
51
- HOTSWAP_ONLY = "hotswap-only",
52
- /**
53
- * Will not attempt to hotswap anything and instead go straight to CloudFormation
54
- */
55
- FULL_DEPLOYMENT = "full-deployment"
56
- }
57
- /**
58
- * Represents configuration property overrides for hotswap deployments
59
- */
60
- export declare class HotswapPropertyOverrides {
61
- ecsHotswapProperties?: EcsHotswapProperties;
62
- constructor(ecsHotswapProperties?: EcsHotswapProperties);
63
- }
64
- /**
65
- * Represents configuration properties for ECS hotswap deployments
66
- */
67
- export declare class EcsHotswapProperties {
68
- readonly minimumHealthyPercent?: number;
69
- readonly maximumHealthyPercent?: number;
70
- constructor(minimumHealthyPercent?: number, maximumHealthyPercent?: number);
71
- /**
72
- * Check if any hotswap properties are defined
73
- * @returns true if all properties are undefined, false otherwise
74
- */
75
- isEmpty(): boolean;
76
- }
77
- type PropDiffs = Record<string, PropertyDifference<any>>;
78
- declare class ClassifiedChanges {
79
- readonly change: ResourceChange;
80
- readonly hotswappableProps: PropDiffs;
81
- readonly nonHotswappableProps: PropDiffs;
82
- constructor(change: ResourceChange, hotswappableProps: PropDiffs, nonHotswappableProps: PropDiffs);
83
- reportNonHotswappablePropertyChanges(ret: HotswapChange[]): void;
84
- get namesOfHotswappableProps(): string[];
85
- }
86
- export declare function classifyChanges(xs: ResourceChange, hotswappablePropNames: string[]): ClassifiedChanges;
87
- export declare function nonHotswappableChange(change: ResourceChange, reason: NonHotswappableReason, description: string, nonHotswappableProps?: PropDiffs, hotswapOnlyVisible?: boolean): RejectedChange;
88
- export declare function nonHotswappableResource(change: ResourceChange): RejectedChange;
89
- export {};
@@ -1,128 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcsHotswapProperties = exports.HotswapPropertyOverrides = exports.HotswapMode = exports.ICON = void 0;
4
- exports.classifyChanges = classifyChanges;
5
- exports.nonHotswappableChange = nonHotswappableChange;
6
- exports.nonHotswappableResource = nonHotswappableResource;
7
- const api_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api");
8
- const hotswap_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/payloads/hotswap");
9
- exports.ICON = '✨';
10
- var HotswapMode;
11
- (function (HotswapMode) {
12
- /**
13
- * Will fall back to CloudFormation when a non-hotswappable change is detected
14
- */
15
- HotswapMode["FALL_BACK"] = "fall-back";
16
- /**
17
- * Will not fall back to CloudFormation when a non-hotswappable change is detected
18
- */
19
- HotswapMode["HOTSWAP_ONLY"] = "hotswap-only";
20
- /**
21
- * Will not attempt to hotswap anything and instead go straight to CloudFormation
22
- */
23
- HotswapMode["FULL_DEPLOYMENT"] = "full-deployment";
24
- })(HotswapMode || (exports.HotswapMode = HotswapMode = {}));
25
- /**
26
- * Represents configuration property overrides for hotswap deployments
27
- */
28
- class HotswapPropertyOverrides {
29
- constructor(ecsHotswapProperties) {
30
- this.ecsHotswapProperties = ecsHotswapProperties;
31
- }
32
- }
33
- exports.HotswapPropertyOverrides = HotswapPropertyOverrides;
34
- /**
35
- * Represents configuration properties for ECS hotswap deployments
36
- */
37
- class EcsHotswapProperties {
38
- constructor(minimumHealthyPercent, maximumHealthyPercent) {
39
- if (minimumHealthyPercent !== undefined && minimumHealthyPercent < 0) {
40
- throw new api_1.ToolkitError('hotswap-ecs-minimum-healthy-percent can\'t be a negative number');
41
- }
42
- if (maximumHealthyPercent !== undefined && maximumHealthyPercent < 0) {
43
- throw new api_1.ToolkitError('hotswap-ecs-maximum-healthy-percent can\'t be a negative number');
44
- }
45
- // In order to preserve the current behaviour, when minimumHealthyPercent is not defined, it will be set to the currently default value of 0
46
- if (minimumHealthyPercent == undefined) {
47
- this.minimumHealthyPercent = 0;
48
- }
49
- else {
50
- this.minimumHealthyPercent = minimumHealthyPercent;
51
- }
52
- this.maximumHealthyPercent = maximumHealthyPercent;
53
- }
54
- /**
55
- * Check if any hotswap properties are defined
56
- * @returns true if all properties are undefined, false otherwise
57
- */
58
- isEmpty() {
59
- return this.minimumHealthyPercent === 0 && this.maximumHealthyPercent === undefined;
60
- }
61
- }
62
- exports.EcsHotswapProperties = EcsHotswapProperties;
63
- class ClassifiedChanges {
64
- constructor(change, hotswappableProps, nonHotswappableProps) {
65
- this.change = change;
66
- this.hotswappableProps = hotswappableProps;
67
- this.nonHotswappableProps = nonHotswappableProps;
68
- }
69
- reportNonHotswappablePropertyChanges(ret) {
70
- const nonHotswappablePropNames = Object.keys(this.nonHotswappableProps);
71
- if (nonHotswappablePropNames.length > 0) {
72
- const tagOnlyChange = nonHotswappablePropNames.length === 1 && nonHotswappablePropNames[0] === 'Tags';
73
- const reason = tagOnlyChange ? hotswap_1.NonHotswappableReason.TAGS : hotswap_1.NonHotswappableReason.PROPERTIES;
74
- const description = tagOnlyChange ? 'Tags are not hotswappable' : `resource properties '${nonHotswappablePropNames}' are not hotswappable on this resource type`;
75
- ret.push(nonHotswappableChange(this.change, reason, description, this.nonHotswappableProps));
76
- }
77
- }
78
- get namesOfHotswappableProps() {
79
- return Object.keys(this.hotswappableProps);
80
- }
81
- }
82
- function classifyChanges(xs, hotswappablePropNames) {
83
- const hotswappableProps = {};
84
- const nonHotswappableProps = {};
85
- for (const [name, propDiff] of Object.entries(xs.propertyUpdates)) {
86
- if (hotswappablePropNames.includes(name)) {
87
- hotswappableProps[name] = propDiff;
88
- }
89
- else {
90
- nonHotswappableProps[name] = propDiff;
91
- }
92
- }
93
- return new ClassifiedChanges(xs, hotswappableProps, nonHotswappableProps);
94
- }
95
- function nonHotswappableChange(change, reason, description, nonHotswappableProps, hotswapOnlyVisible = true) {
96
- return {
97
- hotswappable: false,
98
- hotswapOnlyVisible,
99
- change: {
100
- reason,
101
- description,
102
- subject: {
103
- type: 'Resource',
104
- logicalId: change.logicalId,
105
- resourceType: change.newValue.Type,
106
- rejectedProperties: Object.keys(nonHotswappableProps ?? change.propertyUpdates),
107
- metadata: change.metadata,
108
- },
109
- },
110
- };
111
- }
112
- function nonHotswappableResource(change) {
113
- return {
114
- hotswappable: false,
115
- change: {
116
- reason: hotswap_1.NonHotswappableReason.RESOURCE_UNSUPPORTED,
117
- description: 'This resource type is not supported for hotswap deployments',
118
- subject: {
119
- type: 'Resource',
120
- logicalId: change.logicalId,
121
- resourceType: change.newValue.Type,
122
- rejectedProperties: Object.keys(change.propertyUpdates),
123
- metadata: change.metadata,
124
- },
125
- },
126
- };
127
- }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWlKQSwwQ0FhQztBQUVELHNEQXNCQztBQUVELDBEQWVDO0FBdE1ELDBFQUFnRjtBQUVoRixrR0FBNkc7QUFHaEcsUUFBQSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBNkN4QixJQUFZLFdBZVg7QUFmRCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOztPQUVHO0lBQ0gsa0RBQW1DLENBQUE7QUFDckMsQ0FBQyxFQWZXLFdBQVcsMkJBQVgsV0FBVyxRQWV0QjtBQUVEOztHQUVHO0FBQ0gsTUFBYSx3QkFBd0I7SUFJbkMsWUFBb0Isb0JBQTJDO1FBQzdELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFQRCw0REFPQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxvQkFBb0I7SUFNL0IsWUFBb0IscUJBQThCLEVBQUUscUJBQThCO1FBQ2hGLElBQUkscUJBQXFCLEtBQUssU0FBUyxJQUFJLHFCQUFxQixHQUFHLENBQUMsRUFBRyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxrQkFBWSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELElBQUkscUJBQXFCLEtBQUssU0FBUyxJQUFJLHFCQUFxQixHQUFHLENBQUMsRUFBRyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxrQkFBWSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELDRJQUE0STtRQUM1SSxJQUFJLHFCQUFxQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFD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QUUsTUFBTSxDQUFDLFFBQVE7YUFDMUI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsTUFBc0I7SUFDNUQsT0FBTztRQUNMLFlBQVksRUFBRSxLQUFLO1FBQ25CLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSwrQkFBcUIsQ0FBQyxvQkFBb0I7WUFDbEQsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDbEMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDMUI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eURpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaSc7XG5pbXBvcnQgdHlwZSB7IEhvdHN3YXBwYWJsZUNoYW5nZSwgTm9uSG90c3dhcHBhYmxlQ2hhbmdlLCBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uLy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaS9pby9wYXlsb2Fkcy9ob3Rzd2FwJztcbmltcG9ydCB7IE5vbkhvdHN3YXBwYWJsZVJlYXNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaS9pby9wYXlsb2Fkcy9ob3Rzd2FwJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuXG5leHBvcnQgY29uc3QgSUNPTiA9ICfinKgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBPcGVyYXRpb24ge1xuICAvKipcbiAgICogTWFya3MgdGhlIG9wZXJhdGlvbiBhcyBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZTogdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYmVpbmcgaG90c3dhcHBlZC5cbiAgICogVXNlZCB0byBzZXQgYSBjdXN0b20gVXNlci1BZ2VudCBmb3IgU0RLIGNhbGxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgY2hhbmdlIHRoYXQgaXMgYXBwbGllZCBhcyBwYXJ0IG9mIHRoZSBvcGVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlO1xuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBob3Rzd2FwIG9wZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXBwbHk6IChzZGs6IFNESykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWplY3RlZENoYW5nZSB7XG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY2hhbmdlIGFzIG5vdCBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZTogZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIHRoYXQgZ290IHJlamVjdGVkXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2U6IE5vbkhvdHN3YXBwYWJsZUNoYW5nZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhpcyBjaGFuZ2Ugd2hlbiBsaXN0aW5nIG5vbi1ob3Rzd2FwcGFibGUgY2hhbmdlcyBpbiBIT1RTV0FQX09OTFkgbW9kZS4gRG9lcyBub3QgYWZmZWN0XG4gICAqIGxpc3RpbmcgaW4gRkFMTF9CQUNLIG1vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBPbmx5VmlzaWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEhvdHN3YXBDaGFuZ2UgPSBIb3Rzd2FwT3BlcmF0aW9uIHwgUmVqZWN0ZWRDaGFuZ2U7XG5cbmV4cG9ydCBlbnVtIEhvdHN3YXBNb2RlIHtcbiAgLyoqXG4gICAqIFdpbGwgZmFsbCBiYWNrIHRvIENsb3VkRm9ybWF0aW9uIHdoZW4gYSBub24taG90c3dhcHBhYmxlIGNoYW5nZSBpcyBkZXRlY3RlZFxuICAgKi9cbiAgRkFMTF9CQUNLID0gJ2ZhbGwtYmFjaycsXG5cbiAgLyoqXG4gICAqIFdpbGwgbm90IGZhbGwgYmFjayB0byBDbG91ZEZvcm1hdGlvbiB3aGVuIGEgbm9uLWhvdHN3YXBwYWJsZSBjaGFuZ2UgaXMgZGV0ZWN0ZWRcbiAgICovXG4gIEhPVFNXQVBfT05MWSA9ICdob3Rzd2FwLW9ubHknLFxuXG4gIC8qKlxuICAgKiBXaWxsIG5vdCBhdHRlbXB0IHRvIGhvdHN3YXAgYW55dGhpbmcgYW5kIGluc3RlYWQgZ28gc3RyYWlnaHQgdG8gQ2xvdWRGb3JtYXRpb25cbiAgICovXG4gIEZVTExfREVQTE9ZTUVOVCA9ICdmdWxsLWRlcGxveW1lbnQnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBvdmVycmlkZXMgZm9yIGhvdHN3YXAgZGVwbG95bWVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyB7XG4gIC8vIEVhY2ggc3VwcG9ydGVkIHJlc291cmNlIHR5cGUgd2lsbCBoYXZlIGl0cyBvd24gcHJvcGVydGllcy4gQ3VycmVudGx5IHRoaXMgaXMgRUNTXG4gIGVjc0hvdHN3YXBQcm9wZXJ0aWVzPzogRWNzSG90c3dhcFByb3BlcnRpZXM7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yIChlY3NIb3Rzd2FwUHJvcGVydGllcz86IEVjc0hvdHN3YXBQcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5lY3NIb3Rzd2FwUHJvcGVydGllcyA9IGVjc0hvdHN3YXBQcm9wZXJ0aWVzO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIEVDUyBob3Rzd2FwIGRlcGxveW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBFY3NIb3Rzd2FwUHJvcGVydGllcyB7XG4gIC8vIFRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIFJVTk5JTkcgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkQ291bnRcbiAgcmVhZG9ubHkgbWluaW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyO1xuICAvLyBUaGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBSVU5OSU5HIG9yIFBFTkRJTkcgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkQ291bnRcbiAgcmVhZG9ubHkgbWF4aW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvciAobWluaW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyLCBtYXhpbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXIpIHtcbiAgICBpZiAobWluaW11bUhlYWx0aHlQZXJjZW50ICE9PSB1bmRlZmluZWQgJiYgbWluaW11bUhlYWx0aHlQZXJjZW50IDwgMCApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ2hvdHN3YXAtZWNzLW1pbmltdW0taGVhbHRoeS1wZXJjZW50IGNhblxcJ3QgYmUgYSBuZWdhdGl2ZSBudW1iZXInKTtcbiAgICB9XG4gICAgaWYgKG1heGltdW1IZWFsdGh5UGVyY2VudCAhPT0gdW5kZWZpbmVkICYmIG1heGltdW1IZWFsdGh5UGVyY2VudCA8IDAgKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdob3Rzd2FwLWVjcy1tYXhpbXVtLWhlYWx0aHktcGVyY2VudCBjYW5cXCd0IGJlIGEgbmVnYXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIC8vIEluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IGJlaGF2aW91ciwgd2hlbiBtaW5pbXVtSGVhbHRoeVBlcmNlbnQgaXMgbm90IGRlZmluZWQsIGl0IHdpbGwgYmUgc2V0IHRvIHRoZSBjdXJyZW50bHkgZGVmYXVsdCB2YWx1ZSBvZiAwXG4gICAgaWYgKG1pbmltdW1IZWFsdGh5UGVyY2VudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWluaW11bUhlYWx0aHlQZXJjZW50ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5taW5pbXVtSGVhbHRoeVBlcmNlbnQgPSBtaW5pbXVtSGVhbHRoeVBlcmNlbnQ7XG4gICAgfVxuICAgIHRoaXMubWF4aW11bUhlYWx0aHlQZXJjZW50ID0gbWF4aW11bUhlYWx0aHlQZXJjZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFueSBob3Rzd2FwIHByb3BlcnRpZXMgYXJlIGRlZmluZWRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhbGwgcHJvcGVydGllcyBhcmUgdW5kZWZpbmVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1pbmltdW1IZWFsdGh5UGVyY2VudCA9PT0gMCAmJiB0aGlzLm1heGltdW1IZWFsdGh5UGVyY2VudCA9PT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgUHJvcERpZmZzID0gUmVjb3JkPHN0cmluZywgUHJvcGVydHlEaWZmZXJlbmNlPGFueT4+O1xuXG5jbGFzcyBDbGFzc2lmaWVkQ2hhbmdlcyB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaG90c3dhcHBhYmxlUHJvcHM6IFByb3BEaWZmcyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgbm9uSG90c3dhcHBhYmxlUHJvcHM6IFByb3BEaWZmcyxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0Tm9uSG90c3dhcHBhYmxlUHJvcGVydHlDaGFuZ2VzKHJldDogSG90c3dhcENoYW5nZVtdKTogdm9pZCB7XG4gICAgY29uc3Qgbm9uSG90c3dhcHBhYmxlUHJvcE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5ub25Ib3Rzd2FwcGFibGVQcm9wcyk7XG4gICAgaWYgKG5vbkhvdHN3YXBwYWJsZVByb3BOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YWdPbmx5Q2hhbmdlID0gbm9uSG90c3dhcHBhYmxlUHJvcE5hbWVzLmxlbmd0aCA9PT0gMSAmJiBub25Ib3Rzd2FwcGFibGVQcm9wTmFtZXNbMF0gPT09ICdUYWdzJztcbiAgICAgIGNvbnN0IHJlYXNvbiA9IHRhZ09ubHlDaGFuZ2UgPyBOb25Ib3Rzd2FwcGFibGVSZWFzb24uVEFHUyA6IE5vbkhvdHN3YXBwYWJsZVJlYXNvbi5QUk9QRVJUSUVTO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0YWdPbmx5Q2hhbmdlID8gJ1RhZ3MgYXJlIG5vdCBob3Rzd2FwcGFibGUnIDogYHJlc291cmNlIHByb3BlcnRpZXMgJyR7bm9uSG90c3dhcHBhYmxlUHJvcE5hbWVzfScgYXJlIG5vdCBob3Rzd2FwcGFibGUgb24gdGhpcyByZXNvdXJjZSB0eXBlYDtcblxuICAgICAgcmV0LnB1c2gobm9uSG90c3dhcHBhYmxlQ2hhbmdlKFxuICAgICAgICB0aGlzLmNoYW5nZSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdGhpcy5ub25Ib3Rzd2FwcGFibGVQcm9wcyxcbiAgICAgICkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZXNPZkhvdHN3YXBwYWJsZVByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5ob3Rzd2FwcGFibGVQcm9wcyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5Q2hhbmdlcyh4czogUmVzb3VyY2VDaGFuZ2UsIGhvdHN3YXBwYWJsZVByb3BOYW1lczogc3RyaW5nW10pOiBDbGFzc2lmaWVkQ2hhbmdlcyB7XG4gIGNvbnN0IGhvdHN3YXBwYWJsZVByb3BzOiBQcm9wRGlmZnMgPSB7fTtcbiAgY29uc3Qgbm9uSG90c3dhcHBhYmxlUHJvcHM6IFByb3BEaWZmcyA9IHt9O1xuXG4gIGZvciAoY29uc3QgW25hbWUsIHByb3BEaWZmXSBvZiBPYmplY3QuZW50cmllcyh4cy5wcm9wZXJ0eVVwZGF0ZXMpKSB7XG4gICAgaWYgKGhvdHN3YXBwYWJsZVByb3BOYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgaG90c3dhcHBhYmxlUHJvcHNbbmFtZV0gPSBwcm9wRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9uSG90c3dhcHBhYmxlUHJvcHNbbmFtZV0gPSBwcm9wRGlmZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IENsYXNzaWZpZWRDaGFuZ2VzKHhzLCBob3Rzd2FwcGFibGVQcm9wcywgbm9uSG90c3dhcHBhYmxlUHJvcHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uSG90c3dhcHBhYmxlQ2hhbmdlKFxuICBjaGFuZ2U6IFJlc291cmNlQ2hhbmdlLFxuICByZWFzb246IE5vbkhvdHN3YXBwYWJsZVJlYXNvbixcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgbm9uSG90c3dhcHBhYmxlUHJvcHM/OiBQcm9wRGlmZnMsXG4gIGhvdHN3YXBPbmx5VmlzaWJsZTogYm9vbGVhbiA9IHRydWUsXG4pOiBSZWplY3RlZENoYW5nZSB7XG4gIHJldHVybiB7XG4gICAgaG90c3dhcHBhYmxlOiBmYWxzZSxcbiAgICBob3Rzd2FwT25seVZpc2libGUsXG4gICAgY2hhbmdlOiB7XG4gICAgICByZWFzb24sXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHN1YmplY3Q6IHtcbiAgICAgICAgdHlwZTogJ1Jlc291cmNlJyxcbiAgICAgICAgbG9naWNhbElkOiBjaGFuZ2UubG9naWNhbElkLFxuICAgICAgICByZXNvdXJjZVR5cGU6IGNoYW5nZS5uZXdWYWx1ZS5UeXBlLFxuICAgICAgICByZWplY3RlZFByb3BlcnRpZXM6IE9iamVjdC5rZXlzKG5vbkhvdHN3YXBwYWJsZVByb3BzID8/IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpLFxuICAgICAgICBtZXRhZGF0YTogY2hhbmdlLm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uSG90c3dhcHBhYmxlUmVzb3VyY2UoY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSk6IFJlamVjdGVkQ2hhbmdlIHtcbiAgcmV0dXJuIHtcbiAgICBob3Rzd2FwcGFibGU6IGZhbHNlLFxuICAgIGNoYW5nZToge1xuICAgICAgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb24uUkVTT1VSQ0VfVU5TVVBQT1JURUQsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgcmVzb3VyY2UgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBob3Rzd2FwIGRlcGxveW1lbnRzJyxcbiAgICAgIHN1YmplY3Q6IHtcbiAgICAgICAgdHlwZTogJ1Jlc291cmNlJyxcbiAgICAgICAgbG9naWNhbElkOiBjaGFuZ2UubG9naWNhbElkLFxuICAgICAgICByZXNvdXJjZVR5cGU6IGNoYW5nZS5uZXdWYWx1ZS5UeXBlLFxuICAgICAgICByZWplY3RlZFByb3BlcnRpZXM6IE9iamVjdC5rZXlzKGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpLFxuICAgICAgICBtZXRhZGF0YTogY2hhbmdlLm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuIl19
@@ -1,4 +0,0 @@
1
- import type { HotswapPropertyOverrides, HotswapChange } from './common';
2
- import { type ResourceChange } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/payloads/hotswap';
3
- import type { EvaluateCloudFormationTemplate } from '../cloudformation';
4
- export declare function isHotswappableEcsServiceChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate, hotswapPropertyOverrides: HotswapPropertyOverrides): Promise<HotswapChange[]>;
@@ -1,159 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isHotswappableEcsServiceChange = isHotswappableEcsServiceChange;
4
- const common_1 = require("./common");
5
- const hotswap_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/payloads/hotswap");
6
- const util_1 = require("../../util");
7
- const ECS_SERVICE_RESOURCE_TYPE = 'AWS::ECS::Service';
8
- async function isHotswappableEcsServiceChange(logicalId, change, evaluateCfnTemplate, hotswapPropertyOverrides) {
9
- // the only resource change we can evaluate here is an ECS TaskDefinition
10
- if (change.newValue.Type !== 'AWS::ECS::TaskDefinition') {
11
- return [];
12
- }
13
- const ret = [];
14
- // We only allow a change in the ContainerDefinitions of the TaskDefinition for now -
15
- // it contains the image and environment variables, so seems like a safe bet for now.
16
- // We might revisit this decision in the future though!
17
- const classifiedChanges = (0, common_1.classifyChanges)(change, ['ContainerDefinitions']);
18
- classifiedChanges.reportNonHotswappablePropertyChanges(ret);
19
- // find all ECS Services that reference the TaskDefinition that changed
20
- const resourcesReferencingTaskDef = evaluateCfnTemplate.findReferencesTo(logicalId);
21
- const ecsServiceResourcesReferencingTaskDef = resourcesReferencingTaskDef.filter((r) => r.Type === ECS_SERVICE_RESOURCE_TYPE);
22
- const ecsServicesReferencingTaskDef = new Array();
23
- for (const ecsServiceResource of ecsServiceResourcesReferencingTaskDef) {
24
- const serviceArn = await evaluateCfnTemplate.findPhysicalNameFor(ecsServiceResource.LogicalId);
25
- if (serviceArn) {
26
- ecsServicesReferencingTaskDef.push({
27
- logicalId: ecsServiceResource.LogicalId,
28
- serviceArn,
29
- });
30
- }
31
- }
32
- if (ecsServicesReferencingTaskDef.length === 0) {
33
- /**
34
- * ECS Services can have a task definition that doesn't refer to the task definition being updated.
35
- * We have to log this as a non-hotswappable change to the task definition, but when we do,
36
- * we wind up hotswapping the task definition and logging it as a non-hotswappable change.
37
- *
38
- * This logic prevents us from logging that change as non-hotswappable when we hotswap it.
39
- */
40
- ret.push((0, common_1.nonHotswappableChange)(change, hotswap_1.NonHotswappableReason.DEPENDENCY_UNSUPPORTED, 'No ECS services reference the changed task definition', undefined, false));
41
- }
42
- if (resourcesReferencingTaskDef.length > ecsServicesReferencingTaskDef.length) {
43
- // if something besides an ECS Service is referencing the TaskDefinition,
44
- // hotswap is not possible in FALL_BACK mode
45
- const nonEcsServiceTaskDefRefs = resourcesReferencingTaskDef.filter((r) => r.Type !== ECS_SERVICE_RESOURCE_TYPE);
46
- for (const taskRef of nonEcsServiceTaskDefRefs) {
47
- ret.push((0, common_1.nonHotswappableChange)(change, hotswap_1.NonHotswappableReason.DEPENDENCY_UNSUPPORTED, `A resource '${taskRef.LogicalId}' with Type '${taskRef.Type}' that is not an ECS Service was found referencing the changed TaskDefinition '${logicalId}'`));
48
- }
49
- }
50
- const namesOfHotswappableChanges = Object.keys(classifiedChanges.hotswappableProps);
51
- if (namesOfHotswappableChanges.length > 0) {
52
- const taskDefinitionResource = await prepareTaskDefinitionChange(evaluateCfnTemplate, logicalId, change);
53
- ret.push({
54
- change: {
55
- cause: change,
56
- resources: [
57
- {
58
- logicalId,
59
- resourceType: change.newValue.Type,
60
- physicalName: await taskDefinitionResource.Family,
61
- metadata: evaluateCfnTemplate.metadataFor(logicalId),
62
- },
63
- ...ecsServicesReferencingTaskDef.map((ecsService) => ({
64
- resourceType: ECS_SERVICE_RESOURCE_TYPE,
65
- physicalName: ecsService.serviceArn.split('/')[2],
66
- logicalId: ecsService.logicalId,
67
- metadata: evaluateCfnTemplate.metadataFor(ecsService.logicalId),
68
- })),
69
- ],
70
- },
71
- hotswappable: true,
72
- service: 'ecs-service',
73
- apply: async (sdk) => {
74
- // Step 1 - update the changed TaskDefinition, creating a new TaskDefinition Revision
75
- // we need to lowercase the evaluated TaskDef from CloudFormation,
76
- // as the AWS SDK uses lowercase property names for these
77
- // The SDK requires more properties here than its worth doing explicit typing for
78
- // instead, just use all the old values in the diff to fill them in implicitly
79
- const lowercasedTaskDef = (0, util_1.transformObjectKeys)(taskDefinitionResource, util_1.lowerCaseFirstCharacter, {
80
- // All the properties that take arbitrary string as keys i.e. { "string" : "string" }
81
- // https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html#API_RegisterTaskDefinition_RequestSyntax
82
- ContainerDefinitions: {
83
- DockerLabels: true,
84
- FirelensConfiguration: {
85
- Options: true,
86
- },
87
- LogConfiguration: {
88
- Options: true,
89
- },
90
- },
91
- Volumes: {
92
- DockerVolumeConfiguration: {
93
- DriverOpts: true,
94
- Labels: true,
95
- },
96
- },
97
- });
98
- const registerTaskDefResponse = await sdk.ecs().registerTaskDefinition(lowercasedTaskDef);
99
- const taskDefRevArn = registerTaskDefResponse.taskDefinition?.taskDefinitionArn;
100
- let ecsHotswapProperties = hotswapPropertyOverrides.ecsHotswapProperties;
101
- let minimumHealthyPercent = ecsHotswapProperties?.minimumHealthyPercent;
102
- let maximumHealthyPercent = ecsHotswapProperties?.maximumHealthyPercent;
103
- // Step 2 - update the services using that TaskDefinition to point to the new TaskDefinition Revision
104
- // Forcing New Deployment and setting Minimum Healthy Percent to 0.
105
- // As CDK HotSwap is development only, this seems the most efficient way to ensure all tasks are replaced immediately, regardless of original amount
106
- // eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
107
- await Promise.all(ecsServicesReferencingTaskDef.map(async (service) => {
108
- const cluster = service.serviceArn.split('/')[1];
109
- const update = await sdk.ecs().updateService({
110
- service: service.serviceArn,
111
- taskDefinition: taskDefRevArn,
112
- cluster,
113
- forceNewDeployment: true,
114
- deploymentConfiguration: {
115
- minimumHealthyPercent: minimumHealthyPercent !== undefined ? minimumHealthyPercent : 0,
116
- maximumPercent: maximumHealthyPercent !== undefined ? maximumHealthyPercent : undefined,
117
- },
118
- });
119
- await sdk.ecs().waitUntilServicesStable({
120
- cluster: update.service?.clusterArn,
121
- services: [service.serviceArn],
122
- });
123
- }));
124
- },
125
- });
126
- }
127
- return ret;
128
- }
129
- async function prepareTaskDefinitionChange(evaluateCfnTemplate, logicalId, change) {
130
- const taskDefinitionResource = {
131
- ...change.oldValue.Properties,
132
- ContainerDefinitions: change.newValue.Properties?.ContainerDefinitions,
133
- };
134
- // first, let's get the name of the family
135
- const familyNameOrArn = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, taskDefinitionResource?.Family);
136
- if (!familyNameOrArn) {
137
- // if the Family property has not been provided, and we can't find it in the current Stack,
138
- // this means hotswapping is not possible
139
- return;
140
- }
141
- // the physical name of the Task Definition in CloudFormation includes its current revision number at the end,
142
- // remove it if needed
143
- const familyNameOrArnParts = familyNameOrArn.split(':');
144
- const family = familyNameOrArnParts.length > 1
145
- ? // familyNameOrArn is actually an ARN, of the format 'arn:aws:ecs:region:account:task-definition/<family-name>:<revision-nr>'
146
- // so, take the 6th element, at index 5, and split it on '/'
147
- familyNameOrArnParts[5].split('/')[1]
148
- : // otherwise, familyNameOrArn is just the simple name evaluated from the CloudFormation template
149
- familyNameOrArn;
150
- // then, let's evaluate the body of the remainder of the TaskDef (without the Family property)
151
- return {
152
- ...(await evaluateCfnTemplate.evaluateCfnExpression({
153
- ...(taskDefinitionResource ?? {}),
154
- Family: undefined,
155
- })),
156
- Family: family,
157
- };
158
- }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWNzLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZUEsd0VBb0pDO0FBL0pELHFDQUdrQjtBQUNsQixrR0FBa0k7QUFDbEkscUNBQTBFO0FBSTFFLE1BQU0seUJBQXlCLEdBQUcsbUJBQW1CLENBQUM7QUFFL0MsS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxTQUFpQixFQUNqQixNQUFzQixFQUN0QixtQkFBbUQsRUFDbkQsd0JBQWtEO0lBRWxELHlFQUF5RTtJQUN6RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLDBCQUEwQixFQUFFLENBQUM7UUFDeEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUVoQyxxRkFBcUY7SUFDckYscUZBQXFGO0lBQ3JGLHVEQUF1RDtJQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUEsd0JBQWUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDNUUsaUJBQWlCLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFNUQsdUVBQXVFO0lBQ3ZFLE1BQU0sMkJBQTJCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsTUFBTSxxQ0FBcUMsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQzlFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUM1QyxDQUFDO0lBQ0YsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEtBQUssRUFBYyxDQUFDO0lBQzlELEtBQUssTUFBTSxrQkFBa0IsSUFBSSxxQ0FBcUMsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsU0FBUyxD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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsZ0dBQWdHO1lBQ2xHLGVBQWUsQ0FBQztJQUNwQiw4RkFBOEY7SUFDOUYsT0FBTztRQUNMLEdBQUcsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1lBQ2xELEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLENBQUM7WUFDakMsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSG90c3dhcFByb3BlcnR5T3ZlcnJpZGVzLFxuICBIb3Rzd2FwQ2hhbmdlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge1xuICBjbGFzc2lmeUNoYW5nZXMsXG4gIG5vbkhvdHN3YXBwYWJsZUNoYW5nZSxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgTm9uSG90c3dhcHBhYmxlUmVhc29uLCB0eXBlIFJlc291cmNlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpL2lvL3BheWxvYWRzL2hvdHN3YXAnO1xuaW1wb3J0IHsgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIsIHRyYW5zZm9ybU9iamVjdEtleXMgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5cbmNvbnN0IEVDU19TRVJWSUNFX1JFU09VUkNFX1RZUEUgPSAnQVdTOjpFQ1M6OlNlcnZpY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVFY3NTZXJ2aWNlQ2hhbmdlKFxuICBsb2dpY2FsSWQ6IHN0cmluZyxcbiAgY2hhbmdlOiBSZXNvdXJjZUNoYW5nZSxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuICBob3Rzd2FwUHJvcGVydHlPdmVycmlkZXM6IEhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcyxcbik6IFByb21pc2U8SG90c3dhcENoYW5nZVtdPiB7XG4gIC8vIHRoZSBvbmx5IHJlc291cmNlIGNoYW5nZSB3ZSBjYW4gZXZhbHVhdGUgaGVyZSBpcyBhbiBFQ1MgVGFza0RlZmluaXRpb25cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlICE9PSAnQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHJldDogSG90c3dhcENoYW5nZVtdID0gW107XG5cbiAgLy8gV2Ugb25seSBhbGxvdyBhIGNoYW5nZSBpbiB0aGUgQ29udGFpbmVyRGVmaW5pdGlvbnMgb2YgdGhlIFRhc2tEZWZpbml0aW9uIGZvciBub3cgLVxuICAvLyBpdCBjb250YWlucyB0aGUgaW1hZ2UgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcywgc28gc2VlbXMgbGlrZSBhIHNhZmUgYmV0IGZvciBub3cuXG4gIC8vIFdlIG1pZ2h0IHJldmlzaXQgdGhpcyBkZWNpc2lvbiBpbiB0aGUgZnV0dXJlIHRob3VnaCFcbiAgY29uc3QgY2xhc3NpZmllZENoYW5nZXMgPSBjbGFzc2lmeUNoYW5nZXMoY2hhbmdlLCBbJ0NvbnRhaW5lckRlZmluaXRpb25zJ10pO1xuICBjbGFzc2lmaWVkQ2hhbmdlcy5yZXBvcnROb25Ib3Rzd2FwcGFibGVQcm9wZXJ0eUNoYW5nZXMocmV0KTtcblxuICAvLyBmaW5kIGFsbCBFQ1MgU2VydmljZXMgdGhhdCByZWZlcmVuY2UgdGhlIFRhc2tEZWZpbml0aW9uIHRoYXQgY2hhbmdlZFxuICBjb25zdCByZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYgPSBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8obG9naWNhbElkKTtcbiAgY29uc3QgZWNzU2VydmljZVJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZiA9IHJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZi5maWx0ZXIoXG4gICAgKHIpID0+IHIuVHlwZSA9PT0gRUNTX1NFUlZJQ0VfUkVTT1VSQ0VfVFlQRSxcbiAgKTtcbiAgY29uc3QgZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYgPSBuZXcgQXJyYXk8RWNzU2VydmljZT4oKTtcbiAgZm9yIChjb25zdCBlY3NTZXJ2aWNlUmVzb3VyY2Ugb2YgZWNzU2VydmljZVJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZikge1xuICAgIGNvbnN0IHNlcnZpY2VBcm4gPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRQaHlzaWNhbE5hbWVGb3IoZWNzU2VydmljZVJlc291cmNlLkxvZ2ljYWxJZCk7XG4gICAgaWYgKHNlcnZpY2VBcm4pIHtcbiAgICAgIGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLnB1c2goe1xuICAgICAgICBsb2dpY2FsSWQ6IGVjc1NlcnZpY2VSZXNvdXJjZS5Mb2dpY2FsSWQsXG4gICAgICAgIHNlcnZpY2VBcm4sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmxlbmd0aCA9PT0gMCkge1xuICAgIC8qKlxuICAgICAqIEVDUyBTZXJ2aWNlcyBjYW4gaGF2ZSBhIHRhc2sgZGVmaW5pdGlvbiB0aGF0IGRvZXNuJ3QgcmVmZXIgdG8gdGhlIHRhc2sgZGVmaW5pdGlvbiBiZWluZyB1cGRhdGVkLlxuICAgICAqIFdlIGhhdmUgdG8gbG9nIHRoaXMgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZSB0byB0aGUgdGFzayBkZWZpbml0aW9uLCBidXQgd2hlbiB3ZSBkbyxcbiAgICAgKiB3ZSB3aW5kIHVwIGhvdHN3YXBwaW5nIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIGxvZ2dpbmcgaXQgYXMgYSBub24taG90c3dhcHBhYmxlIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbG9naWMgcHJldmVudHMgdXMgZnJvbSBsb2dnaW5nIHRoYXQgY2hhbmdlIGFzIG5vbi1ob3Rzd2FwcGFibGUgd2hlbiB3ZSBob3Rzd2FwIGl0LlxuICAgICAqL1xuICAgIHJldC5wdXNoKG5vbkhvdHN3YXBwYWJsZUNoYW5nZShcbiAgICAgIGNoYW5nZSxcbiAgICAgIE5vbkhvdHN3YXBwYWJsZVJlYXNvbi5ERVBFTkRFTkNZX1VOU1VQUE9SVEVELFxuICAgICAgJ05vIEVDUyBzZXJ2aWNlcyByZWZlcmVuY2UgdGhlIGNoYW5nZWQgdGFzayBkZWZpbml0aW9uJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGZhbHNlLFxuICAgICkpO1xuICB9XG4gIGlmIChyZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYubGVuZ3RoID4gZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubGVuZ3RoKSB7XG4gICAgLy8gaWYgc29tZXRoaW5nIGJlc2lkZXMgYW4gRUNTIFNlcnZpY2UgaXMgcmVmZXJlbmNpbmcgdGhlIFRhc2tEZWZpbml0aW9uLFxuICAgIC8vIGhvdHN3YXAgaXMgbm90IHBvc3NpYmxlIGluIEZBTExfQkFDSyBtb2RlXG4gICAgY29uc3Qgbm9uRWNzU2VydmljZVRhc2tEZWZSZWZzID0gcmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmZpbHRlcigocikgPT4gci5UeXBlICE9PSBFQ1NfU0VSVklDRV9SRVNPVVJDRV9UWVBFKTtcbiAgICBmb3IgKGNvbnN0IHRhc2tSZWYgb2Ygbm9uRWNzU2VydmljZVRhc2tEZWZSZWZzKSB7XG4gICAgICByZXQucHVzaChub25Ib3Rzd2FwcGFibGVDaGFuZ2UoXG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgTm9uSG90c3dhcHBhYmxlUmVhc29uLkRFUEVOREVOQ1lfVU5TVVBQT1JURUQsXG4gICAgICAgIGBBIHJlc291cmNlICcke3Rhc2tSZWYuTG9naWNhbElkfScgd2l0aCBUeXBlICcke3Rhc2tSZWYuVHlwZX0nIHRoYXQgaXMgbm90IGFuIEVDUyBTZXJ2aWNlIHdhcyBmb3VuZCByZWZlcmVuY2luZyB0aGUgY2hhbmdlZCBUYXNrRGVmaW5pdGlvbiAnJHtsb2dpY2FsSWR9J2AsXG4gICAgICApKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuYW1lc09mSG90c3dhcHBhYmxlQ2hhbmdlcyA9IE9iamVjdC5rZXlzKGNsYXNzaWZpZWRDaGFuZ2VzLmhvdHN3YXBwYWJsZVByb3BzKTtcbiAgaWYgKG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB0YXNrRGVmaW5pdGlvblJlc291cmNlID0gYXdhaXQgcHJlcGFyZVRhc2tEZWZpbml0aW9uQ2hhbmdlKGV2YWx1YXRlQ2ZuVGVtcGxhdGUsIGxvZ2ljYWxJZCwgY2hhbmdlKTtcbiAgICByZXQucHVzaCh7XG4gICAgICBjaGFuZ2U6IHtcbiAgICAgICAgY2F1c2U6IGNoYW5nZSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgICAgIHBoeXNpY2FsTmFtZTogYXdhaXQgdGFza0RlZmluaXRpb25SZXNvdXJjZS5GYW1pbHksXG4gICAgICAgICAgICBtZXRhZGF0YTogZXZhbHVhdGVDZm5UZW1wbGF0ZS5tZXRhZGF0YUZvcihsb2dpY2FsSWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubWFwKChlY3NTZXJ2aWNlKSA9PiAoe1xuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBFQ1NfU0VSVklDRV9SRVNPVVJDRV9UWVBFLFxuICAgICAgICAgICAgcGh5c2ljYWxOYW1lOiBlY3NTZXJ2aWNlLnNlcnZpY2VBcm4uc3BsaXQoJy8nKVsyXSxcbiAgICAgICAgICAgIGxvZ2ljYWxJZDogZWNzU2VydmljZS5sb2dpY2FsSWQsXG4gICAgICAgICAgICBtZXRhZGF0YTogZXZhbHVhdGVDZm5UZW1wbGF0ZS5tZXRhZGF0YUZvcihlY3NTZXJ2aWNlLmxvZ2ljYWxJZCksXG4gICAgICAgICAgfSkpLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGhvdHN3YXBwYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZpY2U6ICdlY3Mtc2VydmljZScsXG4gICAgICBhcHBseTogYXN5bmMgKHNkazogU0RLKSA9PiB7XG4gICAgICAgIC8vIFN0ZXAgMSAtIHVwZGF0ZSB0aGUgY2hhbmdlZCBUYXNrRGVmaW5pdGlvbiwgY3JlYXRpbmcgYSBuZXcgVGFza0RlZmluaXRpb24gUmV2aXNpb25cbiAgICAgICAgLy8gd2UgbmVlZCB0byBsb3dlcmNhc2UgdGhlIGV2YWx1YXRlZCBUYXNrRGVmIGZyb20gQ2xvdWRGb3JtYXRpb24sXG4gICAgICAgIC8vIGFzIHRoZSBBV1MgU0RLIHVzZXMgbG93ZXJjYXNlIHByb3BlcnR5IG5hbWVzIGZvciB0aGVzZVxuXG4gICAgICAgIC8vIFRoZSBTREsgcmVxdWlyZXMgbW9yZSBwcm9wZXJ0aWVzIGhlcmUgdGhhbiBpdHMgd29ydGggZG9pbmcgZXhwbGljaXQgdHlwaW5nIGZvclxuICAgICAgICAvLyBpbnN0ZWFkLCBqdXN0IHVzZSBhbGwgdGhlIG9sZCB2YWx1ZXMgaW4gdGhlIGRpZmYgdG8gZmlsbCB0aGVtIGluIGltcGxpY2l0bHlcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlZFRhc2tEZWYgPSB0cmFuc2Zvcm1PYmplY3RLZXlzKHRhc2tEZWZpbml0aW9uUmVzb3VyY2UsIGxvd2VyQ2FzZUZpcnN0Q2hhcmFjdGVyLCB7XG4gICAgICAgICAgLy8gQWxsIHRoZSBwcm9wZXJ0aWVzIHRoYXQgdGFrZSBhcmJpdHJhcnkgc3RyaW5nIGFzIGtleXMgaS5lLiB7IFwic3RyaW5nXCIgOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVyVGFza0RlZmluaXRpb24uaHRtbCNBUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbl9SZXF1ZXN0U3ludGF4XG4gICAgICAgICAgQ29udGFpbmVyRGVmaW5pdGlvbnM6IHtcbiAgICAgICAgICAgIERvY2tlckxhYmVsczogdHJ1ZSxcbiAgICAgICAgICAgIEZpcmVsZW5zQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICBPcHRpb25zOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIExvZ0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgT3B0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBWb2x1bWVzOiB7XG4gICAgICAgICAgICBEb2NrZXJWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgIERyaXZlck9wdHM6IHRydWUsXG4gICAgICAgICAgICAgIExhYmVsczogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyVGFza0RlZlJlc3BvbnNlID0gYXdhaXQgc2RrLmVjcygpLnJlZ2lzdGVyVGFza0RlZmluaXRpb24obG93ZXJjYXNlZFRhc2tEZWYpO1xuICAgICAgICBjb25zdCB0YXNrRGVmUmV2QXJuID0gcmVnaXN0ZXJUYXNrRGVmUmVzcG9uc2UudGFza0RlZmluaXRpb24/LnRhc2tEZWZpbml0aW9uQXJuO1xuXG4gICAgICAgIGxldCBlY3NIb3Rzd2FwUHJvcGVydGllcyA9IGhvdHN3YXBQcm9wZXJ0eU92ZXJyaWRlcy5lY3NIb3Rzd2FwUHJvcGVydGllcztcbiAgICAgICAgbGV0IG1pbmltdW1IZWFsdGh5UGVyY2VudCA9IGVjc0hvdHN3YXBQcm9wZXJ0aWVzPy5taW5pbXVtSGVhbHRoeVBlcmNlbnQ7XG4gICAgICAgIGxldCBtYXhpbXVtSGVhbHRoeVBlcmNlbnQgPSBlY3NIb3Rzd2FwUHJvcGVydGllcz8ubWF4aW11bUhlYWx0aHlQZXJjZW50O1xuXG4gICAgICAgIC8vIFN0ZXAgMiAtIHVwZGF0ZSB0aGUgc2VydmljZXMgdXNpbmcgdGhhdCBUYXNrRGVmaW5pdGlvbiB0byBwb2ludCB0byB0aGUgbmV3IFRhc2tEZWZpbml0aW9uIFJldmlzaW9uXG4gICAgICAgIC8vIEZvcmNpbmcgTmV3IERlcGxveW1lbnQgYW5kIHNldHRpbmcgTWluaW11bSBIZWFsdGh5IFBlcmNlbnQgdG8gMC5cbiAgICAgICAgLy8gQXMgQ0RLIEhvdFN3YXAgaXMgZGV2ZWxvcG1lbnQgb25seSwgdGhpcyBzZWVtcyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGVuc3VyZSBhbGwgdGFza3MgYXJlIHJlcGxhY2VkIGltbWVkaWF0ZWx5LCByZWdhcmRsZXNzIG9mIG9yaWdpbmFsIGFtb3VudFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubWFwKGFzeW5jIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbHVzdGVyID0gc2VydmljZS5zZXJ2aWNlQXJuLnNwbGl0KCcvJylbMV07XG4gICAgICAgICAgICBjb25zdCB1cGRhdGUgPSBhd2FpdCBzZGsuZWNzKCkudXBkYXRlU2VydmljZSh7XG4gICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2Uuc2VydmljZUFybixcbiAgICAgICAgICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZSZXZBcm4sXG4gICAgICAgICAgICAgIGNsdXN0ZXIsXG4gICAgICAgICAgICAgIGZvcmNlTmV3RGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVwbG95bWVudENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICBtaW5pbXVtSGVhbHRoeVBlcmNlbnQ6IG1pbmltdW1IZWFsdGh5UGVyY2VudCAhPT0gdW5kZWZpbmVkID8gbWluaW11bUhlYWx0aHlQZXJjZW50IDogMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtUGVyY2VudDogbWF4aW11bUhlYWx0aHlQZXJjZW50ICE9PSB1bmRlZmluZWQgPyBtYXhpbXVtSGVhbHRoeVBlcmNlbnQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgc2RrLmVjcygpLndhaXRVbnRpbFNlcnZpY2VzU3RhYmxlKHtcbiAgICAgICAgICAgICAgY2x1c3RlcjogdXBkYXRlLnNlcnZpY2U/LmNsdXN0ZXJBcm4sXG4gICAgICAgICAgICAgIHNlcnZpY2VzOiBbc2VydmljZS5zZXJ2aWNlQXJuXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmludGVyZmFjZSBFY3NTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2VBcm46IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVRhc2tEZWZpbml0aW9uQ2hhbmdlKFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4gIGxvZ2ljYWxJZDogc3RyaW5nLFxuICBjaGFuZ2U6IFJlc291cmNlQ2hhbmdlLFxuKSB7XG4gIGNvbnN0IHRhc2tEZWZpbml0aW9uUmVzb3VyY2U6IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge1xuICAgIC4uLmNoYW5nZS5vbGRWYWx1ZS5Qcm9wZXJ0aWVzLFxuICAgIENvbnRhaW5lckRlZmluaXRpb25zOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uQ29udGFpbmVyRGVmaW5pdGlvbnMsXG4gIH07XG4gIC8vIGZpcnN0LCBsZXQncyBnZXQgdGhlIG5hbWUgb2YgdGhlIGZhbWlseVxuICBjb25zdCBmYW1pbHlOYW1lT3JBcm4gPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lKFxuICAgIGxvZ2ljYWxJZCxcbiAgICB0YXNrRGVmaW5pdGlvblJlc291cmNlPy5GYW1pbHksXG4gICk7XG4gIGlmICghZmFtaWx5TmFtZU9yQXJuKSB7XG4gICAgLy8gaWYgdGhlIEZhbWlseSBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gcHJvdmlkZWQsIGFuZCB3ZSBjYW4ndCBmaW5kIGl0IGluIHRoZSBjdXJyZW50IFN0YWNrLFxuICAgIC8vIHRoaXMgbWVhbnMgaG90c3dhcHBpbmcgaXMgbm90IHBvc3NpYmxlXG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIHRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSBUYXNrIERlZmluaXRpb24gaW4gQ2xvdWRGb3JtYXRpb24gaW5jbHVkZXMgaXRzIGN1cnJlbnQgcmV2aXNpb24gbnVtYmVyIGF0IHRoZSBlbmQsXG4gIC8vIHJlbW92ZSBpdCBpZiBuZWVkZWRcbiAgY29uc3QgZmFtaWx5TmFtZU9yQXJuUGFydHMgPSBmYW1pbHlOYW1lT3JBcm4uc3BsaXQoJzonKTtcbiAgY29uc3QgZmFtaWx5ID1cbiAgICBmYW1pbHlOYW1lT3JBcm5QYXJ0cy5sZW5ndGggPiAxXG4gICAgICA/IC8vIGZhbWlseU5hbWVPckFybiBpcyBhY3R1YWxseSBhbiBBUk4sIG9mIHRoZSBmb3JtYXQgJ2Fybjphd3M6ZWNzOnJlZ2lvbjphY2NvdW50OnRhc2stZGVmaW5pdGlvbi88ZmFtaWx5LW5hbWU+OjxyZXZpc2lvbi1ucj4nXG4gICAgLy8gc28sIHRha2UgdGhlIDZ0aCBlbGVtZW50LCBhdCBpbmRleCA1LCBhbmQgc3BsaXQgaXQgb24gJy8nXG4gICAgICBmYW1pbHlOYW1lT3JBcm5QYXJ0c1s1XS5zcGxpdCgnLycpWzFdXG4gICAgICA6IC8vIG90aGVyd2lzZSwgZmFtaWx5TmFtZU9yQXJuIGlzIGp1c3QgdGhlIHNpbXBsZSBuYW1lIGV2YWx1YXRlZCBmcm9tIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgICAgZmFtaWx5TmFtZU9yQXJuO1xuICAvLyB0aGVuLCBsZXQncyBldmFsdWF0ZSB0aGUgYm9keSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBUYXNrRGVmICh3aXRob3V0IHRoZSBGYW1pbHkgcHJvcGVydHkpXG4gIHJldHVybiB7XG4gICAgLi4uKGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAgIC4uLih0YXNrRGVmaW5pdGlvblJlc291cmNlID8/IHt9KSxcbiAgICAgIEZhbWlseTogdW5kZWZpbmVkLFxuICAgIH0pKSxcbiAgICBGYW1pbHk6IGZhbWlseSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- import type { HotswapChange } from './common';
2
- import type { ResourceChange } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/payloads/hotswap';
3
- import { type EvaluateCloudFormationTemplate } from '../cloudformation';
4
- export declare function isHotswappableLambdaFunctionChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;