Skip to content

Commit fcf3283

Browse files
committed
refactor: migrate listAllStacks
1 parent e93c2aa commit fcf3283

File tree

4 files changed

+28
-31
lines changed

4 files changed

+28
-31
lines changed

packages/core/src/shared/clients/cloudFormation.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { CloudFormation } from 'aws-sdk'
77
import * as CloudFormationV3 from '@aws-sdk/client-cloudformation'
88
import globals from '../extensionGlobals'
99
import { AsyncCollection } from '../utilities/asyncCollection'
10-
import { pageableToCollection } from '../utilities/collectionUtils'
1110
import { hasProps, isNonNullable, RequiredProps } from '../utilities/tsUtils'
1211
import { ClientWrapper } from './clientWrapper'
1312

@@ -55,22 +54,14 @@ export class CloudFormationClient extends ClientWrapper<CloudFormationV3.CloudFo
5554

5655
request.NextToken = response.NextToken
5756
} while (request.NextToken)
58-
59-
function isStackSummary(s: CloudFormationV3.StackSummary | undefined): s is StackSummary {
60-
return (
61-
isNonNullable(s) &&
62-
hasProps(s, 'StackName', 'CreationTime', 'StackStatus', 'DriftInformation') &&
63-
hasProps(s.DriftInformation, 'StackDriftStatus')
64-
)
65-
}
6657
}
6758

68-
public listAllStacks(request: CloudFormation.ListStacksInput = {}): AsyncCollection<CloudFormation.StackSummary[]> {
69-
const client = this.createSdkClient()
70-
const requester = async (req: CloudFormation.ListStacksInput) => (await client).listStacks(req).promise()
71-
const collection = pageableToCollection(requester, request, 'NextToken', 'StackSummaries')
72-
73-
return collection.filter(isNonNullable)
59+
public listAllStacks(request: CloudFormationV3.ListStacksInput = {}): AsyncCollection<StackSummary[]> {
60+
return this.makePaginatedRequest(
61+
CloudFormationV3.paginateListStacks,
62+
request,
63+
(page) => page.StackSummaries
64+
).map((s) => s.filter(isStackSummary))
7465
}
7566

7667
public async *listTypes(): AsyncIterableIterator<CloudFormation.TypeSummary> {
@@ -107,3 +98,11 @@ export class CloudFormationClient extends ClientWrapper<CloudFormationV3.CloudFo
10798
return await globals.sdkClientBuilder.createAwsService(CloudFormation, undefined, this.regionCode)
10899
}
109100
}
101+
102+
function isStackSummary(s: CloudFormationV3.StackSummary | undefined): s is StackSummary {
103+
return (
104+
isNonNullable(s) &&
105+
hasProps(s, 'StackName', 'CreationTime', 'StackStatus', 'DriftInformation') &&
106+
hasProps(s.DriftInformation, 'StackDriftStatus')
107+
)
108+
}

packages/core/src/test/shared/sam/deploy.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55
import * as vscode from 'vscode'
6-
import { CloudFormation, S3 } from 'aws-sdk'
6+
import { S3 } from 'aws-sdk'
77
import { AppNode } from '../../../awsService/appBuilder/explorer/nodes/appNode'
88
import { assertTelemetry, getWorkspaceFolder, TestFolder } from '../../testUtil'
99
import { DeployParams, DeployWizard, getDeployWizard, runDeploy } from '../../../shared/sam/deploy'
@@ -1297,22 +1297,22 @@ const s3BucketListSummary: Array<
12971297
{ Name: 'stack-3-bucket', region: 'us-west-2' },
12981298
]
12991299

1300-
const stackSummaries: CloudFormation.StackSummary[][] = [
1300+
const stackSummaries: CloudFormationClientModule.StackSummary[][] = [
13011301
[
13021302
{
13031303
StackName: 'stack1',
13041304
StackStatus: 'CREATE_COMPLETE',
13051305
CreationTime: new Date(),
1306-
} as CloudFormation.StackSummary,
1306+
} as CloudFormationClientModule.StackSummary,
13071307
{
13081308
StackName: 'stack2',
13091309
StackStatus: 'CREATE_COMPLETE',
13101310
CreationTime: new Date(),
1311-
} as CloudFormation.StackSummary,
1311+
} as CloudFormationClientModule.StackSummary,
13121312
{
13131313
StackName: 'stack3',
13141314
StackStatus: 'CREATE_COMPLETE',
13151315
CreationTime: new Date(),
1316-
} as CloudFormation.StackSummary,
1316+
} as CloudFormationClientModule.StackSummary,
13171317
],
13181318
]

packages/core/src/test/shared/sam/sync.test.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import { S3Client } from '../../../shared/clients/s3'
4545
import { RequiredProps } from '../../../shared/utilities/tsUtils'
4646
import S3 from 'aws-sdk/clients/s3'
4747
import { CloudFormationClient } from '../../../shared/clients/cloudFormation'
48-
import CloudFormation from 'aws-sdk/clients/cloudformation'
4948
import { intoCollection } from '../../../shared/utilities/collectionUtils'
5049
import { SamConfig, Environment, parseConfig } from '../../../shared/sam/config'
5150
import { RegionProvider } from '../../../shared/regions/regionProvider'
@@ -2184,22 +2183,22 @@ const s3BucketListSummary: Array<
21842183
{ Name: 'stack-3-bucket', region: 'us-west-2' },
21852184
]
21862185

2187-
const stackSummaries: CloudFormation.StackSummary[][] = [
2186+
const stackSummaries: CloudFormationClientModule.StackSummary[][] = [
21882187
[
21892188
{
21902189
StackName: 'stack1',
21912190
StackStatus: 'CREATE_COMPLETE',
21922191
CreationTime: new Date(),
2193-
} as CloudFormation.StackSummary,
2192+
} as CloudFormationClientModule.StackSummary,
21942193
{
21952194
StackName: 'stack2',
21962195
StackStatus: 'CREATE_COMPLETE',
21972196
CreationTime: new Date(),
2198-
} as CloudFormation.StackSummary,
2197+
} as CloudFormationClientModule.StackSummary,
21992198
{
22002199
StackName: 'stack3',
22012200
StackStatus: 'CREATE_COMPLETE',
22022201
CreationTime: new Date(),
2203-
} as CloudFormation.StackSummary,
2202+
} as CloudFormationClientModule.StackSummary,
22042203
],
22052204
]

packages/core/src/test/shared/ui/sam/stackPrompter.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
*/
55

66
import assert from 'assert'
7-
import CloudFormation from 'aws-sdk/clients/cloudformation'
87
import sinon from 'sinon'
98
import * as vscode from 'vscode'
109
import * as AwsConsoleModule from '../../../../shared/awsConsole'
1110
import * as SamUtilsModule from '../../../../shared/sam/utils'
1211
import * as ButtonsModule from '../../../../shared/ui/buttons'
13-
import { CloudFormationClient } from '../../../../shared/clients/cloudFormation'
12+
import { CloudFormationClient, StackSummary } from '../../../../shared/clients/cloudFormation'
1413
import { samSyncUrl } from '../../../../shared/constants'
1514
import { createStackPrompter } from '../../../../shared/ui/sam/stackPrompter'
1615
import { intoCollection } from '../../../../shared/utilities/collectionUtils'
@@ -31,23 +30,23 @@ describe('createStackPrompter', () => {
3130

3231
it('should create a prompter with existing stacks', async () => {
3332
// Arrange
34-
const stackSummaries: CloudFormation.StackSummary[][] = [
33+
const stackSummaries: StackSummary[][] = [
3534
[
3635
{
3736
StackName: 'stack1',
3837
StackStatus: 'CREATE_COMPLETE',
3938
CreationTime: new Date(),
40-
} as CloudFormation.StackSummary,
39+
} as StackSummary,
4140
{
4241
StackName: 'stack2',
4342
StackStatus: 'CREATE_COMPLETE',
4443
CreationTime: new Date(),
45-
} as CloudFormation.StackSummary,
44+
} as StackSummary,
4645
{
4746
StackName: 'stack3',
4847
StackStatus: 'CREATE_COMPLETE',
4948
CreationTime: new Date(),
50-
} as CloudFormation.StackSummary,
49+
} as StackSummary,
5150
],
5251
]
5352
const expectedItems = [

0 commit comments

Comments
 (0)