33 * SPDX-License-Identifier: Apache-2.0
44 */
55
6- import { ECR } from 'aws-sdk'
6+ import {
7+ ECRClient ,
8+ DescribeImagesCommand ,
9+ DescribeRepositoriesCommand ,
10+ CreateRepositoryCommand ,
11+ DeleteRepositoryCommand ,
12+ BatchDeleteImageCommand ,
13+ } from '@aws-sdk/client-ecr'
14+ import type { DescribeImagesRequest , DescribeRepositoriesRequest , Repository } from '@aws-sdk/client-ecr'
715import globals from '../extensionGlobals'
816import { AsyncCollection } from '../utilities/asyncCollection'
917import { pageableToCollection } from '../utilities/collectionUtils'
1018import { assertHasProps , ClassToInterfaceType , isNonNullable , RequiredProps } from '../utilities/tsUtils'
1119
12- export type EcrRepository = RequiredProps < ECR . Repository , 'repositoryName' | 'repositoryUri' | 'repositoryArn' >
20+ export type EcrRepository = RequiredProps < Repository , 'repositoryName' | 'repositoryUri' | 'repositoryArn' >
1321
1422export type EcrClient = ClassToInterfaceType < DefaultEcrClient >
1523export class DefaultEcrClient {
1624 public constructor ( public readonly regionCode : string ) { }
1725
1826 public async * describeTags ( repositoryName : string ) : AsyncIterableIterator < string > {
19- const sdkClient = await this . createSdkClient ( )
20- const request : ECR . DescribeImagesRequest = { repositoryName : repositoryName }
27+ const sdkClient = this . createSdkClient ( )
28+ const request : DescribeImagesRequest = { repositoryName : repositoryName }
2129 do {
22- const response = await sdkClient . describeImages ( request ) . promise ( )
30+ const response = await sdkClient . send ( new DescribeImagesCommand ( request ) )
2331 if ( response . imageDetails ) {
2432 for ( const item of response . imageDetails ) {
2533 if ( item . imageTags !== undefined ) {
@@ -34,13 +42,13 @@ export class DefaultEcrClient {
3442 }
3543
3644 public async * describeRepositories ( ) : AsyncIterableIterator < EcrRepository > {
37- const sdkClient = await this . createSdkClient ( )
38- const request : ECR . DescribeRepositoriesRequest = { }
45+ const sdkClient = this . createSdkClient ( )
46+ const request : DescribeRepositoriesRequest = { }
3947 do {
40- const response = await sdkClient . describeRepositories ( request ) . promise ( )
48+ const response = await sdkClient . send ( new DescribeRepositoriesCommand ( request ) )
4149 if ( response . repositories ) {
4250 yield * response . repositories
43- . map ( ( repo ) => {
51+ . map ( ( repo : Repository ) => {
4452 // If any of these are not present, the repo returned is not valid. repositoryUri/Arn
4553 // are both based on name, and it's not possible to not have a name
4654 if ( ! repo . repositoryArn || ! repo . repositoryName || ! repo . repositoryUri ) {
@@ -53,36 +61,43 @@ export class DefaultEcrClient {
5361 }
5462 }
5563 } )
56- . filter ( ( item ) => item !== undefined ) as EcrRepository [ ]
64+ . filter ( ( item : EcrRepository | undefined ) => item !== undefined ) as EcrRepository [ ]
5765 }
5866 request . nextToken = response . nextToken
5967 } while ( request . nextToken )
6068 }
6169
6270 public listAllRepositories ( ) : AsyncCollection < EcrRepository [ ] > {
63- const requester = async ( req : ECR . DescribeRepositoriesRequest ) =>
64- ( await this . createSdkClient ( ) ) . describeRepositories ( req ) . promise ( )
71+ const requester = async ( req : DescribeRepositoriesRequest ) =>
72+ this . createSdkClient ( ) . send ( new DescribeRepositoriesCommand ( req ) )
6573 const collection = pageableToCollection ( requester , { } , 'nextToken' , 'repositories' )
6674
67- return collection . filter ( isNonNullable ) . map ( ( list ) => list . map ( ( repo ) => ( assertHasProps ( repo ) , repo ) ) )
75+ return collection
76+ . filter ( isNonNullable )
77+ . map ( ( list : Repository [ ] ) => list . map ( ( repo : Repository ) => ( assertHasProps ( repo ) , repo ) ) )
6878 }
6979
7080 public async createRepository ( repositoryName : string ) {
71- const sdkClient = await this . createSdkClient ( )
72- return sdkClient . createRepository ( { repositoryName : repositoryName } ) . promise ( )
81+ const sdkClient = this . createSdkClient ( )
82+ return sdkClient . send ( new CreateRepositoryCommand ( { repositoryName : repositoryName } ) )
7383 }
7484
7585 public async deleteRepository ( repositoryName : string ) : Promise < void > {
76- const sdkClient = await this . createSdkClient ( )
77- await sdkClient . deleteRepository ( { repositoryName : repositoryName } ) . promise ( )
86+ const sdkClient = this . createSdkClient ( )
87+ await sdkClient . send ( new DeleteRepositoryCommand ( { repositoryName : repositoryName } ) )
7888 }
7989
8090 public async deleteTag ( repositoryName : string , tag : string ) : Promise < void > {
81- const sdkClient = await this . createSdkClient ( )
82- await sdkClient . batchDeleteImage ( { repositoryName : repositoryName , imageIds : [ { imageTag : tag } ] } ) . promise ( )
91+ const sdkClient = this . createSdkClient ( )
92+ await sdkClient . send (
93+ new BatchDeleteImageCommand ( { repositoryName : repositoryName , imageIds : [ { imageTag : tag } ] } )
94+ )
8395 }
8496
85- protected async createSdkClient ( ) : Promise < ECR > {
86- return await globals . sdkClientBuilder . createAwsService ( ECR , undefined , this . regionCode )
97+ protected createSdkClient ( ) : ECRClient {
98+ return globals . sdkClientBuilderV3 . createAwsService ( {
99+ serviceClient : ECRClient ,
100+ clientOptions : { region : this . regionCode } ,
101+ } )
87102 }
88103}
0 commit comments