packages/deploy-aws/src/aws_sdk_handler/handle_s3.ts
import { config, S3 } from 'aws-sdk'
export async function emptyBucket(s3Handler: S3Handler, bucketName: string) {
s3Handler.deleteObjects(bucketName, await s3Handler.listObjects(bucketName))
}
export class S3Handler {
private s3: S3
constructor() {
const { credentials, region } = config
this.s3 = new S3({ credentials, region })
}
async listObjects(bucketName: string) {
const list: string[] = []
const params: any = { Bucket: bucketName }
let truncated = true
while (truncated) {
const response = await this.s3.listObjectsV2(params).promise()
params.ContinuationToken = response.NextContinuationToken
truncated = !!response.IsTruncated
const contents = response && response.Contents || []
contents.forEach(item => item && item.Key && list.push(item.Key))
}
return list
}
async deleteObject(bucketName: string, key: string) {
return this.s3.deleteObject({ Bucket: bucketName, Key: key }).promise()
}
async deleteObjects(bucketName: string, keys: string[]) {
return Promise.all(keys.map(key => this.deleteObject(bucketName, key)))
}
}