empty(bucketName) {
        const param = {
            Bucket: bucketName,
        };

        return this.s3
            .listObjectVersions(param).promise()
            .then(data =>
                Promise.all(
                    data.Versions
                        .filter(object => !object.Key.endsWith('/'))
                        // remove all objects
                        .map(object =>
                            this.s3.deleteObject({
                                Bucket: bucketName,
                                Key: object.Key,
                                VersionId: object.VersionId,
                            }).promise()
                              .then(() => object)
                        )
                        .concat(data.Versions
                            .filter(object => object.Key.endsWith('/'))
                            // remove all directories
                            .map(object =>
                                this.s3.deleteObject({
                                    Bucket: bucketName,
                                    Key: object.Key,
                                    VersionId: object.VersionId,
                                }).promise()
                                .then(() => object)
                            )
                        )
                        .concat(data.DeleteMarkers
                            .map(object =>
                                 this.s3.deleteObject({
                                     Bucket: bucketName,
                                     Key: object.Key,
                                     VersionId: object.VersionId,
                                 }).promise()
                                 .then(() => object)))
                )
            );
    }
Recursively delete all versions of all objects within the bucket
@param bucketName
@returns {Promise.<T>}