Skip to content

Commit aba5447

Browse files
committed
refactor: unify bucket types
1 parent 4cce8d8 commit aba5447

File tree

29 files changed

+137
-154
lines changed

29 files changed

+137
-154
lines changed

packages/core/src/awsService/appBuilder/explorer/nodes/deployedNode.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { defaultPartition } from '../../../../shared/regions/regionProvider'
1616
import { Lambda, APIGateway } from 'aws-sdk'
1717
import { LambdaNode } from '../../../../lambda/explorer/lambdaNodes'
1818
import { LambdaFunctionNode } from '../../../../lambda/explorer/lambdaFunctionNode'
19-
import { S3Client, DefaultBucket } from '../../../../shared/clients/s3'
19+
import { S3Client, toBucket } from '../../../../shared/clients/s3'
2020
import { S3Node } from '../../../../awsService/s3/explorer/s3Nodes'
2121
import { S3BucketNode } from '../../../../awsService/s3/explorer/s3BucketNode'
2222
import { ApiGatewayNode } from '../../../../awsService/apigateway/explorer/apiGatewayNodes'
@@ -102,11 +102,7 @@ export async function generateDeployedNode(
102102
case s3BucketType: {
103103
const s3Client = new S3Client(regionCode)
104104
const s3Node = new S3Node(s3Client)
105-
const s3Bucket = new DefaultBucket({
106-
partitionId: partitionId,
107-
region: regionCode,
108-
name: deployedResource.PhysicalResourceId,
109-
})
105+
const s3Bucket = toBucket(deployedResource.PhysicalResourceId, regionCode, partitionId)
110106
newDeployedResource = new S3BucketNode(s3Bucket, s3Node, s3Client)
111107
break
112108
}

packages/core/src/awsService/s3/commands/createFolder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ export async function createFolderCommand(node: S3BucketNode | S3FolderNode): Pr
4040
}
4141

4242
const path = node.path + folderName + DEFAULT_DELIMITER
43-
getLogger().info(`Creating folder "${path}" in bucket '${node.bucket.name}'`)
43+
getLogger().info(`Creating folder "${path}" in bucket '${node.bucket.Name}'`)
4444

4545
const { folder } = await node
46-
.createFolder({ path, bucketName: node.bucket.name })
46+
.createFolder({ path, bucketName: node.bucket.Name })
4747
.catch((e) => {
4848
const message = localize(
4949
'AWS.s3.createFolder.error.general',

packages/core/src/awsService/s3/commands/deleteBucket.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,23 @@ export async function deleteBucketCommand(node: S3BucketNode): Promise<void> {
3030
getLogger().debug('DeleteBucket called for %O', node)
3131

3232
await telemetry.s3_deleteBucket.run(async () => {
33-
const isConfirmed = await showConfirmationDialog(node.bucket.name)
33+
const isConfirmed = await showConfirmationDialog(node.bucket.Name)
3434
if (!isConfirmed) {
3535
throw new CancellationError('user')
3636
}
3737

38-
getLogger().info(`Deleting bucket: ${node.bucket.name}`)
38+
getLogger().info(`Deleting bucket: ${node.bucket.Name}`)
3939
await deleteWithProgress(node)
4040
.catch((e) => {
4141
const message = localize(
4242
'AWS.s3.deleteBucket.error.general',
4343
'Failed to delete bucket {0}',
44-
node.bucket.name
44+
node.bucket.Name
4545
)
4646
throw ToolkitError.chain(e, message)
4747
})
4848
.finally(() => refreshNode(node.parent))
49-
getLogger().info(`deleted bucket: ${node.bucket.name}`)
49+
getLogger().info(`deleted bucket: ${node.bucket.Name}`)
5050
})
5151
}
5252

@@ -65,7 +65,7 @@ async function deleteWithProgress(node: S3BucketNode): Promise<void> {
6565
return vscode.window.withProgress(
6666
{
6767
location: vscode.ProgressLocation.Notification,
68-
title: localize('AWS.s3.deleteBucket.progressTitle', 'Deleting {0}...', node.bucket.name),
68+
title: localize('AWS.s3.deleteBucket.progressTitle', 'Deleting {0}...', node.bucket.Name),
6969
},
7070
() => {
7171
return node.deleteBucket()

packages/core/src/awsService/s3/commands/downloadFileAs.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ async function downloadS3File(
5555
file: S3File,
5656
options?: FileOptions | BufferOptions
5757
): Promise<Buffer | void> {
58-
const downloadStream = await client.downloadFileStream(file.bucket.name, file.key)
58+
const downloadStream = await client.downloadFileStream(file.bucket.Name, file.key)
5959
const result = options?.saveLocation
6060
? streamToFile(downloadStream, options.saveLocation)
6161
: streamToBuffer(downloadStream, file.sizeBytes)
@@ -86,7 +86,7 @@ async function downloadS3File(
8686
export async function downloadFile(file: S3File, options: FileOptions): Promise<void>
8787
export async function downloadFile(file: S3File, options?: BufferOptions): Promise<Buffer>
8888
export async function downloadFile(file: S3File, options?: FileOptions | BufferOptions): Promise<Buffer | void> {
89-
const client = options?.client ?? new S3Client(file.bucket.region)
89+
const client = options?.client ?? new S3Client(file.bucket.BucketRegion)
9090

9191
return downloadS3File(client, file, options).catch((err) => {
9292
const message = localize('AWS.s3.downloadFile.error.general', 'Failed to download file {0}', file.name)

packages/core/src/awsService/s3/commands/presignedURL.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export async function presignedURLCommand(node: S3FileNode): Promise<void> {
1919
const validTime = await promptTime(node.file.key)
2020
const s3Client = node.s3
2121
const request: SignedUrlRequest = {
22-
bucketName: node.bucket.name,
22+
bucketName: node.bucket.Name,
2323
key: node.file.key,
2424
time: validTime * 60,
2525
}

packages/core/src/awsService/s3/commands/uploadFile.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { localize } from '../../../shared/utilities/vsCodeUtils'
1414
import { showOutputMessage } from '../../../shared/utilities/messages'
1515
import { createQuickPick, promptUser, verifySinglePickerOutput } from '../../../shared/ui/picker'
1616
import { addCodiconToString } from '../../../shared/utilities/textUtilities'
17-
import { Bucket, Folder, S3Client } from '../../../shared/clients/s3'
17+
import { S3Bucket, Folder, S3Client } from '../../../shared/clients/s3'
1818
import { createBucketCommand } from './createBucket'
1919
import { S3BucketNode } from '../explorer/s3BucketNode'
2020
import { S3FolderNode } from '../explorer/s3FolderNode'
@@ -97,7 +97,7 @@ export async function uploadFileCommand(
9797
uploadRequests.push(
9898
...filesToUpload.map((file) => {
9999
const key = node!.path + path.basename(file.fsPath)
100-
return fileToUploadRequest(node!.bucket.name, key, file)
100+
return fileToUploadRequest(node!.bucket.Name, key, file)
101101
})
102102
)
103103
if (node instanceof S3FolderNode) {
@@ -149,7 +149,7 @@ export async function uploadFileCommand(
149149
return
150150
}
151151

152-
const bucketName = bucketResponse.bucket!.name
152+
const bucketName = bucketResponse.bucket!.Name
153153
if (!bucketName) {
154154
throw Error(`bucketResponse is not a S3.Bucket`)
155155
}
@@ -289,7 +289,7 @@ async function uploadBatchOfFiles(
289289
while (!token.isCancellationRequested && requestIdx < uploadRequests.length) {
290290
const request = uploadRequests[requestIdx]
291291
const fileName = path.basename(request.key)
292-
const destinationPath = readablePath({ bucket: { name: request.bucketName }, path: request.key })
292+
const destinationPath = readablePath({ bucket: { Name: request.bucketName }, path: request.key })
293293
showOutputMessage(
294294
localize('AWS.s3.uploadFile.startUpload', 'Uploading file {0} to {1}', fileName, destinationPath),
295295
outputChannel
@@ -388,12 +388,12 @@ async function uploadWithProgress(
388388
}
389389

390390
export interface BucketQuickPickItem extends vscode.QuickPickItem {
391-
bucket: (Partial<Bucket> & { name: string }) | undefined
391+
bucket: (Partial<S3Bucket> & { Name: string }) | undefined
392392
folder?: Folder | undefined
393393
}
394394

395395
interface SavedFolder {
396-
bucket: Bucket
396+
bucket: S3Bucket
397397
folder: Folder
398398
}
399399

@@ -411,7 +411,7 @@ export async function promptUserForBucket(
411411
promptUserFunction = promptUser,
412412
createBucket = createBucketCommand
413413
): Promise<BucketQuickPickItem | 'cancel' | 'back'> {
414-
let allBuckets: Bucket[]
414+
let allBuckets: S3Bucket[]
415415
try {
416416
allBuckets = (await s3client.listBuckets()).buckets
417417
} catch (e) {
@@ -423,7 +423,7 @@ export async function promptUserForBucket(
423423
}
424424

425425
const s3Buckets = allBuckets.filter((bucket) => {
426-
return bucket && bucket.name
426+
return bucket && bucket.Name
427427
})
428428

429429
const createNewBucket: BucketQuickPickItem = {
@@ -432,7 +432,7 @@ export async function promptUserForBucket(
432432
}
433433
const bucketItems: BucketQuickPickItem[] = s3Buckets.map((bucket) => {
434434
return {
435-
label: bucket.name!,
435+
label: bucket.Name!,
436436
bucket,
437437
}
438438
})
@@ -443,7 +443,7 @@ export async function promptUserForBucket(
443443
lastFolderItem = {
444444
label: lastTouchedFolder.folder.name,
445445
description: '(last opened S3 folder)',
446-
bucket: { name: lastTouchedFolder.bucket.name },
446+
bucket: { Name: lastTouchedFolder.bucket.Name },
447447
folder: lastTouchedFolder.folder,
448448
}
449449
}
@@ -454,7 +454,7 @@ export async function promptUserForBucket(
454454
lastUploadedFolderItem = {
455455
label: lastUploadedToFolder.folder.name,
456456
description: '(last uploaded-to S3 folder)',
457-
bucket: { name: lastUploadedToFolder.bucket.name },
457+
bucket: { Name: lastUploadedToFolder.bucket.Name },
458458
folder: lastUploadedToFolder.folder,
459459
}
460460
}

packages/core/src/awsService/s3/explorer/s3BucketNode.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as vscode from 'vscode'
77
import { ChildNodePage } from '../../../awsexplorer/childNodeLoader'
8-
import { Bucket, CreateFolderRequest, CreateFolderResponse, S3Client } from '../../../shared/clients/s3'
8+
import { S3Bucket, CreateFolderRequest, CreateFolderResponse, S3Client } from '../../../shared/clients/s3'
99

1010
import { AWSResourceNode } from '../../../shared/treeview/nodes/awsResourceNode'
1111
import { AWSTreeNodeBase } from '../../../shared/treeview/nodes/awsTreeNodeBase'
@@ -30,13 +30,13 @@ export class S3BucketNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
3030
private readonly childLoader = new ChildNodeLoader(this, (token) => this.loadPage(token))
3131

3232
public constructor(
33-
public readonly bucket: Bucket,
33+
public readonly bucket: S3Bucket,
3434
public readonly parent: S3Node,
3535
public readonly s3: S3Client,
3636
protected readonly settings: ClassToInterfaceType<Settings> = Settings.instance
3737
) {
38-
super(bucket.name, vscode.TreeItemCollapsibleState.Collapsed)
39-
this.tooltip = bucket.name
38+
super(bucket.Name, vscode.TreeItemCollapsibleState.Collapsed)
39+
this.tooltip = bucket.Name
4040
this.iconPath = getIcon('aws-s3-bucket')
4141
this.contextValue = 'awsS3BucketNode'
4242
}
@@ -64,7 +64,7 @@ export class S3BucketNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
6464
private async loadPage(continuationToken: string | undefined): Promise<ChildNodePage<S3FolderNode | S3FileNode>> {
6565
getLogger().debug(`Loading page for %O using continuationToken %s`, this, continuationToken)
6666
const response = await this.s3.listFiles({
67-
bucketName: this.bucket.name,
67+
bucketName: this.bucket.Name,
6868
continuationToken,
6969
maxResults: this.getMaxItemsPerPage(),
7070
})
@@ -90,15 +90,15 @@ export class S3BucketNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
9090
* See {@link S3Client.deleteBucket}.
9191
*/
9292
public async deleteBucket(): Promise<void> {
93-
await this.s3.deleteBucket({ bucketName: this.bucket.name })
93+
await this.s3.deleteBucket({ bucketName: this.bucket.Name })
9494
}
9595

9696
public get arn(): string {
97-
return this.bucket.arn
97+
return this.bucket.Arn
9898
}
9999

100100
public get name(): string {
101-
return this.bucket.name
101+
return this.bucket.Name
102102
}
103103

104104
public get path(): string {
@@ -107,7 +107,7 @@ export class S3BucketNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
107107
}
108108

109109
public [inspect.custom](): string {
110-
return `S3BucketNode (bucket=${this.bucket.name})`
110+
return `S3BucketNode (bucket=${this.bucket.Name})`
111111
}
112112

113113
private getMaxItemsPerPage(): number | undefined {

packages/core/src/awsService/s3/explorer/s3FileNode.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import bytes from 'bytes'
7-
import { Bucket, DownloadFileRequest, File, S3Client } from '../../../shared/clients/s3'
7+
import { S3Bucket, DownloadFileRequest, File, S3Client } from '../../../shared/clients/s3'
88
import { AWSResourceNode } from '../../../shared/treeview/nodes/awsResourceNode'
99
import { AWSTreeNodeBase } from '../../../shared/treeview/nodes/awsTreeNodeBase'
1010
import { localize } from '../../../shared/utilities/vsCodeUtils'
@@ -20,7 +20,7 @@ import { formatLocalized, getRelativeDate } from '../../../shared/datetime'
2020
*/
2121
export class S3FileNode extends AWSTreeNodeBase implements AWSResourceNode {
2222
public constructor(
23-
public readonly bucket: Bucket,
23+
public readonly bucket: S3Bucket,
2424
public readonly file: File,
2525
public readonly parent: S3BucketNode | S3FolderNode,
2626
public readonly s3: S3Client,
@@ -59,7 +59,7 @@ export class S3FileNode extends AWSTreeNodeBase implements AWSResourceNode {
5959
* See {@link S3Client.deleteFile}.
6060
*/
6161
public async deleteFile(): Promise<void> {
62-
await this.s3.deleteObject({ bucketName: this.bucket.name, key: this.file.key })
62+
await this.s3.deleteObject({ bucketName: this.bucket.Name, key: this.file.key })
6363
}
6464

6565
public get arn(): string {
@@ -75,7 +75,7 @@ export class S3FileNode extends AWSTreeNodeBase implements AWSResourceNode {
7575
}
7676

7777
public [inspect.custom](): string {
78-
return `S3FileNode (bucket=${this.bucket.name}, file=${this.file.key}}`
78+
return `S3FileNode (bucket=${this.bucket.Name}, file=${this.file.key}}`
7979
}
8080
}
8181

packages/core/src/awsService/s3/explorer/s3FolderNode.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import * as vscode from 'vscode'
7-
import { Bucket, CreateFolderRequest, CreateFolderResponse, Folder, S3Client } from '../../../shared/clients/s3'
7+
import { S3Bucket, CreateFolderRequest, CreateFolderResponse, Folder, S3Client } from '../../../shared/clients/s3'
88
import { AWSResourceNode } from '../../../shared/treeview/nodes/awsResourceNode'
99
import { AWSTreeNodeBase } from '../../../shared/treeview/nodes/awsTreeNodeBase'
1010
import { LoadMoreNode } from '../../../shared/treeview/nodes/loadMoreNode'
@@ -27,7 +27,7 @@ export class S3FolderNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
2727
private readonly childLoader = new ChildNodeLoader(this, (token) => this.loadPage(token))
2828

2929
public constructor(
30-
public readonly bucket: Bucket,
30+
public readonly bucket: S3Bucket,
3131
public readonly folder: Folder,
3232
public readonly s3: S3Client,
3333
protected readonly settings: ClassToInterfaceType<Settings> = Settings.instance
@@ -61,7 +61,7 @@ export class S3FolderNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
6161
private async loadPage(continuationToken: string | undefined): Promise<ChildNodePage<S3FolderNode | S3FileNode>> {
6262
getLogger().debug(`Loading page for %O using continuationToken %s`, this, continuationToken)
6363
const response = await this.s3.listFiles({
64-
bucketName: this.bucket.name,
64+
bucketName: this.bucket.Name,
6565
folderPath: this.folder.path,
6666
continuationToken,
6767
maxResults: this.getMaxItemsPerPage(),
@@ -97,7 +97,7 @@ export class S3FolderNode extends AWSTreeNodeBase implements AWSResourceNode, Lo
9797
}
9898

9999
public [inspect.custom](): string {
100-
return `S3FolderNode (bucket=${this.bucket.name}, folder=${this.folder.path})`
100+
return `S3FolderNode (bucket=${this.bucket.Name}, folder=${this.folder.path})`
101101
}
102102

103103
private getMaxItemsPerPage(): number | undefined {

packages/core/src/awsService/s3/fileViewerManager.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export interface S3Tab {
3838
// TODO: just use this everywhere? A bucket-less S3 file doesn't make sense.
3939
// Combines the File and Bucket interface as they mostly belong together
4040
export interface S3File extends S3.File {
41-
readonly bucket: S3.Bucket
41+
readonly bucket: S3.S3Bucket
4242
}
4343

4444
export class S3FileProvider implements FileProvider {
@@ -55,7 +55,7 @@ export class S3FileProvider implements FileProvider {
5555

5656
public async refresh(): Promise<void> {
5757
const { bucket, key } = this._file
58-
const stats = await this.client.headObject({ bucketName: bucket.name, key })
58+
const stats = await this.client.headObject({ bucketName: bucket.Name, key })
5959

6060
this.updateETag(stats.ETag)
6161
this._file.sizeBytes = stats.ContentLength ?? this._file.sizeBytes
@@ -98,7 +98,7 @@ export class S3FileProvider implements FileProvider {
9898
.uploadFile({
9999
content,
100100
key: this._file.key,
101-
bucketName: this._file.bucket.name,
101+
bucketName: this._file.bucket.Name,
102102
contentType: this._file.ContentType ?? mimeType,
103103
})
104104
.then((u) => u.done())
@@ -262,7 +262,7 @@ export class S3FileViewerManager {
262262
}
263263

264264
private registerProvider(file: S3File, uri: vscode.Uri): vscode.Disposable {
265-
const provider = new S3FileProvider(this.clientFactory(file.bucket.region), file)
265+
const provider = new S3FileProvider(this.clientFactory(file.bucket.BucketRegion), file)
266266

267267
return vscode.Disposable.from(
268268
this.fs.registerProvider(uri, provider),
@@ -373,7 +373,7 @@ export class S3FileViewerManager {
373373
const scheme = mode === TabMode.Read ? this.schemes.read : this.schemes.edit
374374

375375
return vscode.Uri.parse(`${scheme}:`, true).with({
376-
path: ['', file.bucket.region, file.bucket.name, file.key].join('/'),
376+
path: ['', file.bucket.BucketRegion, file.bucket.Name, file.key].join('/'),
377377
})
378378
}
379379
}

0 commit comments

Comments
 (0)