seagull-js/seagull

View on GitHub
packages/deploy-aws/src/aws_sdk_handler/handle_s3.ts

Summary

Maintainability
A
50 mins
Test Coverage
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)))
    }
}