@aws-cdk/toolkit-lib 1.21.2 → 1.22.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.
- package/.yarnrc.yml +3 -0
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/deploy/private/deployment-method.d.ts +39 -0
- package/lib/actions/deploy/private/deployment-method.js +36 -0
- package/lib/actions/deploy/private/index.d.ts +1 -0
- package/lib/actions/deploy/private/index.js +2 -1
- package/lib/api/aws-auth/awscli-compatible.js +12 -1
- package/lib/api/aws-auth/ec2-detection.d.ts +2 -0
- package/lib/api/aws-auth/ec2-detection.js +77 -0
- package/lib/api/aws-auth/sdk.d.ts +5 -3
- package/lib/api/aws-auth/sdk.js +7 -5
- package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +33 -0
- package/lib/api/cloudformation/evaluate-cloudformation-template.js +155 -20
- package/lib/api/deployments/deploy-stack.d.ts +2 -1
- package/lib/api/deployments/deploy-stack.js +75 -6
- package/lib/api/deployments/deployment-result.d.ts +6 -0
- package/lib/api/deployments/deployment-result.js +1 -1
- package/lib/api/deployments/deployments.d.ts +32 -3
- package/lib/api/deployments/deployments.js +47 -1
- package/lib/api/hotswap/cloud-control-resource.d.ts +5 -0
- package/lib/api/hotswap/cloud-control-resource.js +98 -0
- package/lib/api/hotswap/hotswap-deployments.js +31 -13
- package/lib/api/hotswap/lambda-functions.js +9 -12
- package/lib/index_bg.wasm +0 -0
- package/lib/toolkit/toolkit.js +57 -32
- package/package.json +40 -37
- package/lib/api/hotswap/bedrock-agentcore-runtimes.d.ts +0 -5
- package/lib/api/hotswap/bedrock-agentcore-runtimes.js +0 -145
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +0 -5
- package/lib/api/hotswap/stepfunctions-state-machines.js +0 -48
package/package.json
CHANGED
|
@@ -7,27 +7,27 @@
|
|
|
7
7
|
"directory": "packages/@aws-cdk/toolkit-lib"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "
|
|
11
|
-
"bump": "
|
|
12
|
-
"check-for-updates": "
|
|
13
|
-
"check-licenses": "
|
|
14
|
-
"compile": "
|
|
15
|
-
"default": "
|
|
16
|
-
"docs": "
|
|
17
|
-
"eslint": "
|
|
18
|
-
"gather-versions": "
|
|
19
|
-
"gen-fixture": "
|
|
20
|
-
"nx": "
|
|
21
|
-
"package": "
|
|
22
|
-
"post-compile": "
|
|
23
|
-
"pre-compile": "
|
|
24
|
-
"publish-local": "
|
|
25
|
-
"registry": "
|
|
26
|
-
"test": "
|
|
27
|
-
"test:watch": "
|
|
28
|
-
"unbump": "
|
|
29
|
-
"watch": "
|
|
30
|
-
"projen": "
|
|
10
|
+
"build": "projen build",
|
|
11
|
+
"bump": "projen bump",
|
|
12
|
+
"check-for-updates": "projen check-for-updates",
|
|
13
|
+
"check-licenses": "projen check-licenses",
|
|
14
|
+
"compile": "projen compile",
|
|
15
|
+
"default": "projen default",
|
|
16
|
+
"docs": "projen docs",
|
|
17
|
+
"eslint": "projen eslint",
|
|
18
|
+
"gather-versions": "projen gather-versions",
|
|
19
|
+
"gen-fixture": "projen gen-fixture",
|
|
20
|
+
"nx": "projen nx",
|
|
21
|
+
"package": "projen package",
|
|
22
|
+
"post-compile": "projen post-compile",
|
|
23
|
+
"pre-compile": "projen pre-compile",
|
|
24
|
+
"publish-local": "projen publish-local",
|
|
25
|
+
"registry": "projen registry",
|
|
26
|
+
"test": "projen test",
|
|
27
|
+
"test:watch": "projen test:watch",
|
|
28
|
+
"unbump": "projen unbump",
|
|
29
|
+
"watch": "projen watch",
|
|
30
|
+
"projen": "projen"
|
|
31
31
|
},
|
|
32
32
|
"author": {
|
|
33
33
|
"name": "Amazon Web Services",
|
|
@@ -35,19 +35,19 @@
|
|
|
35
35
|
"organization": true
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@aws-cdk/aws-service-spec": "^0.1.
|
|
39
|
-
"@aws-cdk/cli-plugin-contract": "2.182.
|
|
40
|
-
"@cdklabs/eslint-plugin": "^
|
|
38
|
+
"@aws-cdk/aws-service-spec": "^0.1.171",
|
|
39
|
+
"@aws-cdk/cli-plugin-contract": "2.182.2",
|
|
40
|
+
"@cdklabs/eslint-plugin": "^2.0.0",
|
|
41
41
|
"@jest/environment": "^29.7.0",
|
|
42
42
|
"@jest/globals": "^29.7.0",
|
|
43
43
|
"@jest/types": "^29.6.3",
|
|
44
|
-
"@microsoft/api-extractor": "^7.58.
|
|
44
|
+
"@microsoft/api-extractor": "^7.58.2",
|
|
45
45
|
"@smithy/util-stream": "^4.5.22",
|
|
46
46
|
"@stylistic/eslint-plugin": "^3",
|
|
47
|
-
"@types/fs-extra": "^11
|
|
47
|
+
"@types/fs-extra": "^11",
|
|
48
48
|
"@types/jest": "^29.5.14",
|
|
49
49
|
"@types/jest-when": "^3.5.5",
|
|
50
|
-
"@types/node": "^
|
|
50
|
+
"@types/node": "^20",
|
|
51
51
|
"@types/picomatch": "^4",
|
|
52
52
|
"@types/split2": "^4.2.3",
|
|
53
53
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
@@ -59,11 +59,11 @@
|
|
|
59
59
|
"constructs": "^10.0.0",
|
|
60
60
|
"eslint": "^9",
|
|
61
61
|
"eslint-config-prettier": "^10.1.8",
|
|
62
|
-
"eslint-import-resolver-typescript": "^
|
|
62
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
63
63
|
"eslint-plugin-import": "^2.32.0",
|
|
64
|
-
"eslint-plugin-jest": "^29.15.
|
|
64
|
+
"eslint-plugin-jest": "^29.15.2",
|
|
65
65
|
"eslint-plugin-jsdoc": "^62.9.0",
|
|
66
|
-
"eslint-plugin-prettier": "^
|
|
66
|
+
"eslint-plugin-prettier": "^4.2.5",
|
|
67
67
|
"fast-check": "^4.6.0",
|
|
68
68
|
"jest": "^29.7.0",
|
|
69
69
|
"jest-environment-node": "^29.7.0",
|
|
@@ -71,7 +71,9 @@
|
|
|
71
71
|
"jest-when": "^3.7.0",
|
|
72
72
|
"license-checker": "^25.0.1",
|
|
73
73
|
"nock": "13",
|
|
74
|
+
"nx": "^22.6.4",
|
|
74
75
|
"prettier": "^2.8",
|
|
76
|
+
"projen": "^0.99.48",
|
|
75
77
|
"ts-jest": "^29.4.9",
|
|
76
78
|
"tsx": "^4.21.0",
|
|
77
79
|
"typescript": "5.9"
|
|
@@ -81,8 +83,8 @@
|
|
|
81
83
|
},
|
|
82
84
|
"dependencies": {
|
|
83
85
|
"@aws-cdk/cdk-assets-lib": "^1",
|
|
84
|
-
"@aws-cdk/cloud-assembly-api": "2.2.
|
|
85
|
-
"@aws-cdk/cloud-assembly-schema": ">=53.
|
|
86
|
+
"@aws-cdk/cloud-assembly-api": "2.2.2",
|
|
87
|
+
"@aws-cdk/cloud-assembly-schema": ">=53.16.0",
|
|
86
88
|
"@aws-cdk/cloudformation-diff": "^2",
|
|
87
89
|
"@aws-cdk/cx-api": "^2",
|
|
88
90
|
"@aws-sdk/client-appsync": "^3",
|
|
@@ -113,12 +115,12 @@
|
|
|
113
115
|
"@smithy/util-retry": "^4",
|
|
114
116
|
"@smithy/util-waiter": "^4",
|
|
115
117
|
"archiver": "^7.0.1",
|
|
116
|
-
"cdk-from-cfn": "^0.
|
|
118
|
+
"cdk-from-cfn": "^0.295.0",
|
|
117
119
|
"chalk": "^4",
|
|
118
120
|
"chokidar": "^4",
|
|
119
121
|
"fast-deep-equal": "^3.1.3",
|
|
120
122
|
"fast-glob": "^3.3.3",
|
|
121
|
-
"fs-extra": "^
|
|
123
|
+
"fs-extra": "^11",
|
|
122
124
|
"p-limit": "^3",
|
|
123
125
|
"picomatch": "^4",
|
|
124
126
|
"semver": "^7.7.4",
|
|
@@ -137,7 +139,7 @@
|
|
|
137
139
|
"devEngines": {
|
|
138
140
|
"packageManager": {
|
|
139
141
|
"name": "yarn",
|
|
140
|
-
"version": "
|
|
142
|
+
"version": ">=4",
|
|
141
143
|
"onFail": "ignore"
|
|
142
144
|
}
|
|
143
145
|
},
|
|
@@ -147,7 +149,8 @@
|
|
|
147
149
|
"publishConfig": {
|
|
148
150
|
"access": "public"
|
|
149
151
|
},
|
|
150
|
-
"version": "1.
|
|
152
|
+
"version": "1.22.0",
|
|
153
|
+
"packageManager": "yarn@4.13.0",
|
|
151
154
|
"types": "lib/index.d.ts",
|
|
152
155
|
"exports": {
|
|
153
156
|
".": {
|
|
@@ -156,5 +159,5 @@
|
|
|
156
159
|
},
|
|
157
160
|
"./package.json": "./package.json"
|
|
158
161
|
},
|
|
159
|
-
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"
|
|
162
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"yarn projen\"."
|
|
160
163
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { HotswapChange } from './common';
|
|
2
|
-
import type { ResourceChange } from '../../payloads/hotswap';
|
|
3
|
-
import type { EvaluateCloudFormationTemplate } from '../cloudformation';
|
|
4
|
-
export declare function isHotswappableBedrockAgentCoreRuntimeChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;
|
|
5
|
-
//# sourceMappingURL=bedrock-agentcore-runtimes.d.ts.map
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isHotswappableBedrockAgentCoreRuntimeChange = isHotswappableBedrockAgentCoreRuntimeChange;
|
|
4
|
-
const common_1 = require("./common");
|
|
5
|
-
const toolkit_error_1 = require("../../toolkit/toolkit-error");
|
|
6
|
-
async function isHotswappableBedrockAgentCoreRuntimeChange(logicalId, change, evaluateCfnTemplate) {
|
|
7
|
-
if (change.newValue.Type !== 'AWS::BedrockAgentCore::Runtime') {
|
|
8
|
-
return [];
|
|
9
|
-
}
|
|
10
|
-
const ret = [];
|
|
11
|
-
const classifiedChanges = (0, common_1.classifyChanges)(change, [
|
|
12
|
-
'AgentRuntimeArtifact',
|
|
13
|
-
'EnvironmentVariables',
|
|
14
|
-
'Description',
|
|
15
|
-
]);
|
|
16
|
-
classifiedChanges.reportNonHotswappablePropertyChanges(ret);
|
|
17
|
-
const namesOfHotswappableChanges = Object.keys(classifiedChanges.hotswappableProps);
|
|
18
|
-
if (namesOfHotswappableChanges.length === 0) {
|
|
19
|
-
return ret;
|
|
20
|
-
}
|
|
21
|
-
const agentRuntimeId = await evaluateCfnTemplate.findPhysicalNameFor(logicalId);
|
|
22
|
-
if (!agentRuntimeId) {
|
|
23
|
-
return ret;
|
|
24
|
-
}
|
|
25
|
-
const runtimeChange = await evaluateBedrockAgentCoreRuntimeProps(classifiedChanges.hotswappableProps, evaluateCfnTemplate);
|
|
26
|
-
ret.push({
|
|
27
|
-
change: {
|
|
28
|
-
cause: change,
|
|
29
|
-
resources: [{
|
|
30
|
-
logicalId,
|
|
31
|
-
resourceType: change.newValue.Type,
|
|
32
|
-
physicalName: agentRuntimeId,
|
|
33
|
-
metadata: evaluateCfnTemplate.metadataFor(logicalId),
|
|
34
|
-
}],
|
|
35
|
-
},
|
|
36
|
-
hotswappable: true,
|
|
37
|
-
service: 'bedrock-agentcore',
|
|
38
|
-
apply: async (sdk) => {
|
|
39
|
-
const bedrockAgentCore = sdk.bedrockAgentCoreControl();
|
|
40
|
-
const currentRuntime = await bedrockAgentCore.getAgentRuntime({
|
|
41
|
-
agentRuntimeId,
|
|
42
|
-
});
|
|
43
|
-
// While UpdateAgentRuntimeRequest type allows undefined,
|
|
44
|
-
// the API will fail at runtime if these required properties are not provided.
|
|
45
|
-
if (!currentRuntime.agentRuntimeArtifact) {
|
|
46
|
-
throw new toolkit_error_1.ToolkitError('RuntimeMissingArtifact', 'Current runtime does not have an artifact');
|
|
47
|
-
}
|
|
48
|
-
if (!currentRuntime.roleArn) {
|
|
49
|
-
throw new toolkit_error_1.ToolkitError('RuntimeMissingRoleArn', 'Current runtime does not have a roleArn');
|
|
50
|
-
}
|
|
51
|
-
if (!currentRuntime.networkConfiguration) {
|
|
52
|
-
throw new toolkit_error_1.ToolkitError('RuntimeMissingNetworkConfig', 'Current runtime does not have a networkConfiguration');
|
|
53
|
-
}
|
|
54
|
-
// All properties must be explicitly specified, otherwise they will be reset to
|
|
55
|
-
// default values. We pass all properties from the current runtime and override
|
|
56
|
-
// only the ones that have changed.
|
|
57
|
-
await bedrockAgentCore.updateAgentRuntime({
|
|
58
|
-
agentRuntimeId,
|
|
59
|
-
agentRuntimeArtifact: runtimeChange.artifact
|
|
60
|
-
? toSdkAgentRuntimeArtifact(runtimeChange.artifact)
|
|
61
|
-
: currentRuntime.agentRuntimeArtifact,
|
|
62
|
-
roleArn: currentRuntime.roleArn,
|
|
63
|
-
networkConfiguration: currentRuntime.networkConfiguration,
|
|
64
|
-
description: runtimeChange.description ?? currentRuntime.description,
|
|
65
|
-
authorizerConfiguration: currentRuntime.authorizerConfiguration,
|
|
66
|
-
requestHeaderConfiguration: currentRuntime.requestHeaderConfiguration,
|
|
67
|
-
protocolConfiguration: currentRuntime.protocolConfiguration,
|
|
68
|
-
lifecycleConfiguration: currentRuntime.lifecycleConfiguration,
|
|
69
|
-
environmentVariables: runtimeChange.environmentVariables ?? currentRuntime.environmentVariables,
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
});
|
|
73
|
-
return ret;
|
|
74
|
-
}
|
|
75
|
-
async function evaluateBedrockAgentCoreRuntimeProps(hotswappablePropChanges, evaluateCfnTemplate) {
|
|
76
|
-
const runtimeChange = {};
|
|
77
|
-
for (const updatedPropName in hotswappablePropChanges) {
|
|
78
|
-
const updatedProp = hotswappablePropChanges[updatedPropName];
|
|
79
|
-
switch (updatedPropName) {
|
|
80
|
-
case 'AgentRuntimeArtifact':
|
|
81
|
-
runtimeChange.artifact = await evaluateAgentRuntimeArtifact(updatedProp.newValue, evaluateCfnTemplate);
|
|
82
|
-
break;
|
|
83
|
-
case 'Description':
|
|
84
|
-
runtimeChange.description = await evaluateCfnTemplate.evaluateCfnExpression(updatedProp.newValue);
|
|
85
|
-
break;
|
|
86
|
-
case 'EnvironmentVariables':
|
|
87
|
-
runtimeChange.environmentVariables = await evaluateCfnTemplate.evaluateCfnExpression(updatedProp.newValue);
|
|
88
|
-
break;
|
|
89
|
-
default:
|
|
90
|
-
// never reached
|
|
91
|
-
throw new toolkit_error_1.ToolkitError('UnexpectedHotswapProperty', 'Unexpected hotswappable property for BedrockAgentCore Runtime. Please report this at github.com/aws/aws-cdk/issues/new/choose');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return runtimeChange;
|
|
95
|
-
}
|
|
96
|
-
async function evaluateAgentRuntimeArtifact(artifactValue, evaluateCfnTemplate) {
|
|
97
|
-
if (artifactValue.CodeConfiguration) {
|
|
98
|
-
const codeConfig = artifactValue.CodeConfiguration;
|
|
99
|
-
const code = codeConfig.Code;
|
|
100
|
-
const s3Location = code.S3 ? {
|
|
101
|
-
bucket: await evaluateCfnTemplate.evaluateCfnExpression(code.S3.Bucket),
|
|
102
|
-
prefix: await evaluateCfnTemplate.evaluateCfnExpression(code.S3.Prefix),
|
|
103
|
-
versionId: code.S3.VersionId
|
|
104
|
-
? await evaluateCfnTemplate.evaluateCfnExpression(code.S3.VersionId)
|
|
105
|
-
: undefined,
|
|
106
|
-
} : undefined;
|
|
107
|
-
return {
|
|
108
|
-
codeConfiguration: {
|
|
109
|
-
code: s3Location ? { s3: s3Location } : {},
|
|
110
|
-
runtime: await evaluateCfnTemplate.evaluateCfnExpression(codeConfig.Runtime),
|
|
111
|
-
entryPoint: await evaluateCfnTemplate.evaluateCfnExpression(codeConfig.EntryPoint),
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
if (artifactValue.ContainerConfiguration) {
|
|
116
|
-
return {
|
|
117
|
-
containerConfiguration: {
|
|
118
|
-
containerUri: await evaluateCfnTemplate.evaluateCfnExpression(artifactValue.ContainerConfiguration.ContainerUri),
|
|
119
|
-
},
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
return undefined;
|
|
123
|
-
}
|
|
124
|
-
function toSdkAgentRuntimeArtifact(artifact) {
|
|
125
|
-
if (artifact.codeConfiguration) {
|
|
126
|
-
const code = artifact.codeConfiguration.code.s3
|
|
127
|
-
? { s3: artifact.codeConfiguration.code.s3 }
|
|
128
|
-
: undefined;
|
|
129
|
-
return {
|
|
130
|
-
codeConfiguration: {
|
|
131
|
-
code,
|
|
132
|
-
runtime: artifact.codeConfiguration.runtime,
|
|
133
|
-
entryPoint: artifact.codeConfiguration.entryPoint,
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
if (artifact.containerConfiguration) {
|
|
138
|
-
return {
|
|
139
|
-
containerConfiguration: artifact.containerConfiguration,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
// never reached
|
|
143
|
-
throw new toolkit_error_1.ToolkitError('RuntimeArtifactMissingConfig', 'AgentRuntimeArtifact must have either codeConfiguration or containerConfiguration');
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1hZ2VudGNvcmUtcnVudGltZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJiZWRyb2NrLWFnZW50Y29yZS1ydW50aW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLGtHQW9GQztBQTFGRCxxQ0FBMkM7QUFFM0MsK0RBQTJEO0FBSXBELEtBQUssVUFBVSwyQ0FBMkMsQ0FDL0QsU0FBaUIsRUFDakIsTUFBc0IsRUFDdEIsbUJBQW1EO0lBRW5ELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLEVBQUUsQ0FBQztRQUM5RCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0saUJBQWlCLEdBQUcsSUFBQSx3QkFBZSxFQUFDLE1BQU0sRUFBRTtRQUNoRCxzQkFBc0I7UUFDdEIsc0JBQXNCO1FBQ3RCLGFBQWE7S0FDZCxDQUFDLENBQUM7SUFDSCxpQkFBaUIsQ0FBQyxvQ0FBb0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU1RCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRixJQUFJLDBCQUEwQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLG9DQUFvQyxDQUM5RCxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFDbkMsbUJBQW1CLENBQ3BCLENBQUM7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsTUFBTSxFQUFFO1lB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dHlEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7XG4gIEFnZW50UnVudGltZUFydGlmYWN0IGFzIFNka0FnZW50UnVudGltZUFydGlmYWN0LFxuICBBZ2VudE1hbmFnZWRSdW50aW1lVHlwZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wnO1xuaW1wb3J0IHR5cGUgeyBIb3Rzd2FwQ2hhbmdlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgY2xhc3NpZnlDaGFuZ2VzIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUNoYW5nZSB9IGZyb20gJy4uLy4uL3BheWxvYWRzL2hvdHN3YXAnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2Nsb3VkZm9ybWF0aW9uJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVDaGFuZ2UoXG4gIGxvZ2ljYWxJZDogc3RyaW5nLFxuICBjaGFuZ2U6IFJlc291cmNlQ2hhbmdlLFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPEhvdHN3YXBDaGFuZ2VbXT4ge1xuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWUnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcmV0OiBIb3Rzd2FwQ2hhbmdlW10gPSBbXTtcbiAgY29uc3QgY2xhc3NpZmllZENoYW5nZXMgPSBjbGFzc2lmeUNoYW5nZXMoY2hhbmdlLCBbXG4gICAgJ0FnZW50UnVudGltZUFydGlmYWN0JyxcbiAgICAnRW52aXJvbm1lbnRWYXJpYWJsZXMnLFxuICAgICdEZXNjcmlwdGlvbicsXG4gIF0pO1xuICBjbGFzc2lmaWVkQ2hhbmdlcy5yZXBvcnROb25Ib3Rzd2FwcGFibGVQcm9wZXJ0eUNoYW5nZXMocmV0KTtcblxuICBjb25zdCBuYW1lc09mSG90c3dhcHBhYmxlQ2hhbmdlcyA9IE9iamVjdC5rZXlzKGNsYXNzaWZpZWRDaGFuZ2VzLmhvdHN3YXBwYWJsZVByb3BzKTtcbiAgaWYgKG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBjb25zdCBhZ2VudFJ1bnRpbWVJZCA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFBoeXNpY2FsTmFtZUZvcihsb2dpY2FsSWQpO1xuICBpZiAoIWFnZW50UnVudGltZUlkKSB7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGNvbnN0IHJ1bnRpbWVDaGFuZ2UgPSBhd2FpdCBldmFsdWF0ZUJlZHJvY2tBZ2VudENvcmVSdW50aW1lUHJvcHMoXG4gICAgY2xhc3NpZmllZENoYW5nZXMuaG90c3dhcHBhYmxlUHJvcHMsXG4gICAgZXZhbHVhdGVDZm5UZW1wbGF0ZSxcbiAgKTtcblxuICByZXQucHVzaCh7XG4gICAgY2hhbmdlOiB7XG4gICAgICBjYXVzZTogY2hhbmdlLFxuICAgICAgcmVzb3VyY2VzOiBbe1xuICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgIHJlc291cmNlVHlwZTogY2hhbmdlLm5ld1ZhbHVlLlR5cGUsXG4gICAgICAgIHBoeXNpY2FsTmFtZTogYWdlbnRSdW50aW1lSWQsXG4gICAgICAgIG1ldGFkYXRhOiBldmFsdWF0ZUNmblRlbXBsYXRlLm1ldGFkYXRhRm9yKGxvZ2ljYWxJZCksXG4gICAgICB9XSxcbiAgICB9LFxuICAgIGhvdHN3YXBwYWJsZTogdHJ1ZSxcbiAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgIGFwcGx5OiBhc3luYyAoc2RrOiBTREspID0+IHtcbiAgICAgIGNvbnN0IGJlZHJvY2tBZ2VudENvcmUgPSBzZGsuYmVkcm9ja0FnZW50Q29yZUNvbnRyb2woKTtcblxuICAgICAgY29uc3QgY3VycmVudFJ1bnRpbWUgPSBhd2FpdCBiZWRyb2NrQWdlbnRDb3JlLmdldEFnZW50UnVudGltZSh7XG4gICAgICAgIGFnZW50UnVudGltZUlkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdoaWxlIFVwZGF0ZUFnZW50UnVudGltZVJlcXVlc3QgdHlwZSBhbGxvd3MgdW5kZWZpbmVkLFxuICAgICAgLy8gdGhlIEFQSSB3aWxsIGZhaWwgYXQgcnVudGltZSBpZiB0aGVzZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGFyZSBub3QgcHJvdmlkZWQuXG4gICAgICBpZiAoIWN1cnJlbnRSdW50aW1lLmFnZW50UnVudGltZUFydGlmYWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1J1bnRpbWVNaXNzaW5nQXJ0aWZhY3QnLCAnQ3VycmVudCBydW50aW1lIGRvZXMgbm90IGhhdmUgYW4gYXJ0aWZhY3QnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY3VycmVudFJ1bnRpbWUucm9sZUFybikge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdSdW50aW1lTWlzc2luZ1JvbGVBcm4nLCAnQ3VycmVudCBydW50aW1lIGRvZXMgbm90IGhhdmUgYSByb2xlQXJuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWN1cnJlbnRSdW50aW1lLm5ldHdvcmtDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1J1bnRpbWVNaXNzaW5nTmV0d29ya0NvbmZpZycsICdDdXJyZW50IHJ1bnRpbWUgZG9lcyBub3QgaGF2ZSBhIG5ldHdvcmtDb25maWd1cmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFsbCBwcm9wZXJ0aWVzIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgcmVzZXQgdG9cbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVzLiBXZSBwYXNzIGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIGN1cnJlbnQgcnVudGltZSBhbmQgb3ZlcnJpZGVcbiAgICAgIC8vIG9ubHkgdGhlIG9uZXMgdGhhdCBoYXZlIGNoYW5nZWQuXG4gICAgICBhd2FpdCBiZWRyb2NrQWdlbnRDb3JlLnVwZGF0ZUFnZW50UnVudGltZSh7XG4gICAgICAgIGFnZW50UnVudGltZUlkLFxuICAgICAgICBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogcnVudGltZUNoYW5nZS5hcnRpZmFjdFxuICAgICAgICAgID8gdG9TZGtBZ2VudFJ1bnRpbWVBcnRpZmFjdChydW50aW1lQ2hhbmdlLmFydGlmYWN0KVxuICAgICAgICAgIDogY3VycmVudFJ1bnRpbWUuYWdlbnRSdW50aW1lQXJ0aWZhY3QsXG4gICAgICAgIHJvbGVBcm46IGN1cnJlbnRSdW50aW1lLnJvbGVBcm4sXG4gICAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiBjdXJyZW50UnVudGltZS5uZXR3b3JrQ29uZmlndXJhdGlvbixcbiAgICAgICAgZGVzY3JpcHRpb246IHJ1bnRpbWVDaGFuZ2UuZGVzY3JpcHRpb24gPz8gY3VycmVudFJ1bnRpbWUuZGVzY3JpcHRpb24sXG4gICAgICAgIGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiBjdXJyZW50UnVudGltZS5hdXRob3JpemVyQ29uZmlndXJhdGlvbixcbiAgICAgICAgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb246IGN1cnJlbnRSdW50aW1lLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLFxuICAgICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IGN1cnJlbnRSdW50aW1lLnByb3RvY29sQ29uZmlndXJhdGlvbixcbiAgICAgICAgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbjogY3VycmVudFJ1bnRpbWUubGlmZWN5Y2xlQ29uZmlndXJhdGlvbixcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHJ1bnRpbWVDaGFuZ2UuZW52aXJvbm1lbnRWYXJpYWJsZXMgPz8gY3VycmVudFJ1bnRpbWUuZW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBldmFsdWF0ZUJlZHJvY2tBZ2VudENvcmVSdW50aW1lUHJvcHMoXG4gIGhvdHN3YXBwYWJsZVByb3BDaGFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eURpZmZlcmVuY2U8dW5rbm93bj4+LFxuICBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPEJlZHJvY2tBZ2VudENvcmVSdW50aW1lQ2hhbmdlPiB7XG4gIGNvbnN0IHJ1bnRpbWVDaGFuZ2U6IEJlZHJvY2tBZ2VudENvcmVSdW50aW1lQ2hhbmdlID0ge307XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gaG90c3dhcHBhYmxlUHJvcENoYW5nZXMpIHtcbiAgICBjb25zdCB1cGRhdGVkUHJvcCA9IGhvdHN3YXBwYWJsZVByb3BDaGFuZ2VzW3VwZGF0ZWRQcm9wTmFtZV07XG5cbiAgICBzd2l0Y2ggKHVwZGF0ZWRQcm9wTmFtZSkge1xuICAgICAgY2FzZSAnQWdlbnRSdW50aW1lQXJ0aWZhY3QnOlxuICAgICAgICBydW50aW1lQ2hhbmdlLmFydGlmYWN0ID0gYXdhaXQgZXZhbHVhdGVBZ2VudFJ1bnRpbWVBcnRpZmFjdChcbiAgICAgICAgICB1cGRhdGVkUHJvcC5uZXdWYWx1ZSBhcyBDZm5BZ2VudFJ1bnRpbWVBcnRpZmFjdCxcbiAgICAgICAgICBldmFsdWF0ZUNmblRlbXBsYXRlLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRGVzY3JpcHRpb24nOlxuICAgICAgICBydW50aW1lQ2hhbmdlLmRlc2NyaXB0aW9uID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW52aXJvbm1lbnRWYXJpYWJsZXMnOlxuICAgICAgICBydW50aW1lQ2hhbmdlLmVudmlyb25tZW50VmFyaWFibGVzID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICdVbmV4cGVjdGVkSG90c3dhcFByb3BlcnR5JyxcbiAgICAgICAgICAnVW5leHBlY3RlZCBob3Rzd2FwcGFibGUgcHJvcGVydHkgZm9yIEJlZHJvY2tBZ2VudENvcmUgUnVudGltZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGF0IGdpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydW50aW1lQ2hhbmdlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBldmFsdWF0ZUFnZW50UnVudGltZUFydGlmYWN0KFxuICBhcnRpZmFjdFZhbHVlOiBDZm5BZ2VudFJ1bnRpbWVBcnRpZmFjdCxcbiAgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxBZ2VudFJ1bnRpbWVBcnRpZmFjdCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoYXJ0aWZhY3RWYWx1ZS5Db2RlQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGNvZGVDb25maWcgPSBhcnRpZmFjdFZhbHVlLkNvZGVDb25maWd1cmF0aW9uO1xuICAgIGNvbnN0IGNvZGUgPSBjb2RlQ29uZmlnLkNvZGU7XG5cbiAgICBjb25zdCBzM0xvY2F0aW9uID0gY29kZS5TMyA/IHtcbiAgICAgIGJ1Y2tldDogYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oY29kZS5TMy5CdWNrZXQpLFxuICAgICAgcHJlZml4OiBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihjb2RlLlMzLlByZWZpeCksXG4gICAgICB2ZXJzaW9uSWQ6IGNvZGUuUzMuVmVyc2lvbklkXG4gICAgICAgID8gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oY29kZS5TMy5WZXJzaW9uSWQpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgY29kZTogczNMb2NhdGlvbiA/IHsgczM6IHMzTG9jYXRpb24gfSA6IHt9LFxuICAgICAgICBydW50aW1lOiBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihjb2RlQ29uZmlnLlJ1bnRpbWUpLFxuICAgICAgICBlbnRyeVBvaW50OiBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihjb2RlQ29uZmlnLkVudHJ5UG9pbnQpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGFydGlmYWN0VmFsdWUuQ29udGFpbmVyQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluZXJDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGNvbnRhaW5lclVyaTogYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oXG4gICAgICAgICAgYXJ0aWZhY3RWYWx1ZS5Db250YWluZXJDb25maWd1cmF0aW9uLkNvbnRhaW5lclVyaSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHRvU2RrQWdlbnRSdW50aW1lQXJ0aWZhY3QoYXJ0aWZhY3Q6IEFnZW50UnVudGltZUFydGlmYWN0KTogU2RrQWdlbnRSdW50aW1lQXJ0aWZhY3Qge1xuICBpZiAoYXJ0aWZhY3QuY29kZUNvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBjb2RlID0gYXJ0aWZhY3QuY29kZUNvbmZpZ3VyYXRpb24uY29kZS5zM1xuICAgICAgPyB7IHMzOiBhcnRpZmFjdC5jb2RlQ29uZmlndXJhdGlvbi5jb2RlLnMzIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGNvZGUsXG4gICAgICAgIHJ1bnRpbWU6IGFydGlmYWN0LmNvZGVDb25maWd1cmF0aW9uLnJ1bnRpbWUgYXMgQWdlbnRNYW5hZ2VkUnVudGltZVR5cGUsXG4gICAgICAgIGVudHJ5UG9pbnQ6IGFydGlmYWN0LmNvZGVDb25maWd1cmF0aW9uLmVudHJ5UG9pbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoYXJ0aWZhY3QuY29udGFpbmVyQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluZXJDb25maWd1cmF0aW9uOiBhcnRpZmFjdC5jb250YWluZXJDb25maWd1cmF0aW9uLFxuICAgIH07XG4gIH1cblxuICAvLyBuZXZlciByZWFjaGVkXG4gIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1J1bnRpbWVBcnRpZmFjdE1pc3NpbmdDb25maWcnLCAnQWdlbnRSdW50aW1lQXJ0aWZhY3QgbXVzdCBoYXZlIGVpdGhlciBjb2RlQ29uZmlndXJhdGlvbiBvciBjb250YWluZXJDb25maWd1cmF0aW9uJyk7XG59XG5cbmludGVyZmFjZSBDZm5BZ2VudFJ1bnRpbWVBcnRpZmFjdCB7XG4gIHJlYWRvbmx5IENvZGVDb25maWd1cmF0aW9uPzoge1xuICAgIHJlYWRvbmx5IENvZGU6IHtcbiAgICAgIHJlYWRvbmx5IFMzPzoge1xuICAgICAgICByZWFkb25seSBCdWNrZXQ6IHVua25vd247XG4gICAgICAgIHJlYWRvbmx5IFByZWZpeDogdW5rbm93bjtcbiAgICAgICAgcmVhZG9ubHkgVmVyc2lvbklkPzogdW5rbm93bjtcbiAgICAgIH07XG4gICAgfTtcbiAgICByZWFkb25seSBSdW50aW1lOiB1bmtub3duO1xuICAgIHJlYWRvbmx5IEVudHJ5UG9pbnQ6IHVua25vd247XG4gIH07XG4gIHJlYWRvbmx5IENvbnRhaW5lckNvbmZpZ3VyYXRpb24/OiB7XG4gICAgcmVhZG9ubHkgQ29udGFpbmVyVXJpOiB1bmtub3duO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQWdlbnRSdW50aW1lQXJ0aWZhY3Qge1xuICByZWFkb25seSBjb2RlQ29uZmlndXJhdGlvbj86IHtcbiAgICByZWFkb25seSBjb2RlOiB7XG4gICAgICByZWFkb25seSBzMz86IHtcbiAgICAgICAgcmVhZG9ubHkgYnVja2V0OiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuICAgICAgICByZWFkb25seSB2ZXJzaW9uSWQ/OiBzdHJpbmc7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmVhZG9ubHkgcnVudGltZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGVudHJ5UG9pbnQ6IHN0cmluZ1tdO1xuICB9O1xuICByZWFkb25seSBjb250YWluZXJDb25maWd1cmF0aW9uPzoge1xuICAgIHJlYWRvbmx5IGNvbnRhaW5lclVyaTogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVDaGFuZ2Uge1xuICBhcnRpZmFjdD86IEFnZW50UnVudGltZUFydGlmYWN0O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIl19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type HotswapChange } from './common';
|
|
2
|
-
import type { ResourceChange } from '../../payloads/hotswap';
|
|
3
|
-
import type { EvaluateCloudFormationTemplate } from '../cloudformation';
|
|
4
|
-
export declare function isHotswappableStateMachineChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;
|
|
5
|
-
//# sourceMappingURL=stepfunctions-state-machines.d.ts.map
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isHotswappableStateMachineChange = isHotswappableStateMachineChange;
|
|
4
|
-
const common_1 = require("./common");
|
|
5
|
-
async function isHotswappableStateMachineChange(logicalId, change, evaluateCfnTemplate) {
|
|
6
|
-
if (change.newValue.Type !== 'AWS::StepFunctions::StateMachine') {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
9
|
-
const ret = [];
|
|
10
|
-
const classifiedChanges = (0, common_1.classifyChanges)(change, ['DefinitionString']);
|
|
11
|
-
classifiedChanges.reportNonHotswappablePropertyChanges(ret);
|
|
12
|
-
const namesOfHotswappableChanges = Object.keys(classifiedChanges.hotswappableProps);
|
|
13
|
-
if (namesOfHotswappableChanges.length > 0) {
|
|
14
|
-
const stateMachineNameInCfnTemplate = change.newValue?.Properties?.StateMachineName;
|
|
15
|
-
const stateMachineArn = stateMachineNameInCfnTemplate
|
|
16
|
-
? await evaluateCfnTemplate.evaluateCfnExpression({
|
|
17
|
-
'Fn::Sub': 'arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:stateMachine:' +
|
|
18
|
-
stateMachineNameInCfnTemplate,
|
|
19
|
-
})
|
|
20
|
-
: await evaluateCfnTemplate.findPhysicalNameFor(logicalId);
|
|
21
|
-
// nothing to do
|
|
22
|
-
if (!stateMachineArn) {
|
|
23
|
-
return ret;
|
|
24
|
-
}
|
|
25
|
-
ret.push({
|
|
26
|
-
change: {
|
|
27
|
-
cause: change,
|
|
28
|
-
resources: [{
|
|
29
|
-
logicalId,
|
|
30
|
-
resourceType: change.newValue.Type,
|
|
31
|
-
physicalName: stateMachineArn?.split(':')[6],
|
|
32
|
-
metadata: evaluateCfnTemplate.metadataFor(logicalId),
|
|
33
|
-
}],
|
|
34
|
-
},
|
|
35
|
-
hotswappable: true,
|
|
36
|
-
service: 'stepfunctions-service',
|
|
37
|
-
apply: async (sdk) => {
|
|
38
|
-
// not passing the optional properties leaves them unchanged
|
|
39
|
-
await sdk.stepFunctions().updateStateMachine({
|
|
40
|
-
stateMachineArn,
|
|
41
|
-
definition: await evaluateCfnTemplate.evaluateCfnExpression(change.propertyUpdates.DefinitionString.newValue),
|
|
42
|
-
});
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
return ret;
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcGZ1bmN0aW9ucy1zdGF0ZS1tYWNoaW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0ZXBmdW5jdGlvbnMtc3RhdGUtbWFjaGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSw0RUFtREM7QUF4REQscUNBQStEO0FBS3hELEtBQUssVUFBVSxnQ0FBZ0MsQ0FDcEQsU0FBaUIsRUFDakIsTUFBc0IsRUFDdEIsbUJBQW1EO0lBRW5ELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssa0NBQWtDLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0saUJBQWlCLEdBQUcsSUFBQSx3QkFBZSxFQUFDLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUN4RSxpQkFBaUIsQ0FBQyxvQ0FBb0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU1RCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRixJQUFJLDBCQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLDZCQUE2QixHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDO1FBQ3BGLE1BQU0sZUFBZSxHQUFHLDZCQUE2QjtZQUNuRCxDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDaEQsU0FBUyxFQUNMLDZFQUE2RTtvQkFDN0UsNkJBQTZCO2FBQ2xDLENBQUM7WUFDRixDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3RCxnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLE1BQU07Z0JBQ2IsU0FBUyxFQUFFLENBQUM7d0JBQ1YsU0FBUzt3QkFDVCxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO3dCQUNsQyxZQUFZLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO3FCQUNyRCxDQUFDO2FBQ0g7WUFDRCxZQUFZLEVBQUUsSUFBSTtZQUNsQixPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBUSxFQUFFLEVBQUU7Z0JBQ3hCLDREQUE0RDtnQkFDNUQsTUFBTSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLENBQUM7b0JBQzNDLGVBQWU7b0JBQ2YsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7aUJBQzlHLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBIb3Rzd2FwQ2hhbmdlLCBjbGFzc2lmeUNoYW5nZXMgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMvaG90c3dhcCc7XG5pbXBvcnQgdHlwZSB7IFNESyB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZVN0YXRlTWFjaGluZUNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcENoYW5nZVtdPiB7XG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSAhPT0gJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCByZXQ6IEhvdHN3YXBDaGFuZ2VbXSA9IFtdO1xuICBjb25zdCBjbGFzc2lmaWVkQ2hhbmdlcyA9IGNsYXNzaWZ5Q2hhbmdlcyhjaGFuZ2UsIFsnRGVmaW5pdGlvblN0cmluZyddKTtcbiAgY2xhc3NpZmllZENoYW5nZXMucmVwb3J0Tm9uSG90c3dhcHBhYmxlUHJvcGVydHlDaGFuZ2VzKHJldCk7XG5cbiAgY29uc3QgbmFtZXNPZkhvdHN3YXBwYWJsZUNoYW5nZXMgPSBPYmplY3Qua2V5cyhjbGFzc2lmaWVkQ2hhbmdlcy5ob3Rzd2FwcGFibGVQcm9wcyk7XG4gIGlmIChuYW1lc09mSG90c3dhcHBhYmxlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lTmFtZUluQ2ZuVGVtcGxhdGUgPSBjaGFuZ2UubmV3VmFsdWU/LlByb3BlcnRpZXM/LlN0YXRlTWFjaGluZU5hbWU7XG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lQXJuID0gc3RhdGVNYWNoaW5lTmFtZUluQ2ZuVGVtcGxhdGVcbiAgICAgID8gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICAgICAnRm46OlN1Yic6XG4gICAgICAgICAgICAnYXJuOiR7QVdTOjpQYXJ0aXRpb259OnN0YXRlczoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfTpzdGF0ZU1hY2hpbmU6JyArXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVOYW1lSW5DZm5UZW1wbGF0ZSxcbiAgICAgIH0pXG4gICAgICA6IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFBoeXNpY2FsTmFtZUZvcihsb2dpY2FsSWQpO1xuXG4gICAgLy8gbm90aGluZyB0byBkb1xuICAgIGlmICghc3RhdGVNYWNoaW5lQXJuKSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldC5wdXNoKHtcbiAgICAgIGNoYW5nZToge1xuICAgICAgICBjYXVzZTogY2hhbmdlLFxuICAgICAgICByZXNvdXJjZXM6IFt7XG4gICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogY2hhbmdlLm5ld1ZhbHVlLlR5cGUsXG4gICAgICAgICAgcGh5c2ljYWxOYW1lOiBzdGF0ZU1hY2hpbmVBcm4/LnNwbGl0KCc6JylbNl0sXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfV0sXG4gICAgICB9LFxuICAgICAgaG90c3dhcHBhYmxlOiB0cnVlLFxuICAgICAgc2VydmljZTogJ3N0ZXBmdW5jdGlvbnMtc2VydmljZScsXG4gICAgICBhcHBseTogYXN5bmMgKHNkazogU0RLKSA9PiB7XG4gICAgICAgIC8vIG5vdCBwYXNzaW5nIHRoZSBvcHRpb25hbCBwcm9wZXJ0aWVzIGxlYXZlcyB0aGVtIHVuY2hhbmdlZFxuICAgICAgICBhd2FpdCBzZGsuc3RlcEZ1bmN0aW9ucygpLnVwZGF0ZVN0YXRlTWFjaGluZSh7XG4gICAgICAgICAgc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICAgIGRlZmluaXRpb246IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMuRGVmaW5pdGlvblN0cmluZy5uZXdWYWx1ZSksXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG4iXX0=
|