in src/tasks/S3Download/TaskOperations.ts [107:146]
private async fetchAllObjectKeys(): Promise<string[]> {
if (this.taskParameters.sourceFolder) {
console.log(
tl.loc('ListingKeysFromPrefix', this.taskParameters.sourceFolder, this.taskParameters.bucketName)
)
} else {
console.log(tl.loc('ListingKeysFromRoot', this.taskParameters.bucketName))
}
const allKeys: string[] = []
// tslint:disable-next-line:no-unnecessary-initializer
let nextToken: string | undefined = undefined
do {
const params: S3.ListObjectsV2Request = {
Bucket: this.taskParameters.bucketName,
Prefix: this.taskParameters.sourceFolder,
ContinuationToken: nextToken
}
try {
const s3Data = await this.s3Client.listObjectsV2(params).promise()
nextToken = s3Data.NextContinuationToken
if (s3Data.Contents) {
s3Data.Contents.forEach(s3object => {
// AWS IDE toolkits can cause 0 byte 'folder markers' to be in the bucket,
// filter those out
if (s3object.Key) {
if (!s3object.Key.endsWith('_$folder$')) {
allKeys.push(s3object.Key)
}
}
})
}
} catch (err) {
console.error(err)
nextToken = undefined
}
} while (nextToken)
return allKeys
}