Skip to content
This repository was archived by the owner on Jan 16, 2024. It is now read-only.

Commit 2790bab

Browse files
author
olinde
committed
feat: make s3 adapter initialize lazily
1 parent 29b4bcd commit 2790bab

4 files changed

Lines changed: 22 additions & 13 deletions

File tree

src/adapters/s3/handleDelete.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import type * as AWS from '@aws-sdk/client-s3'
33
import type { HandleDelete } from '../../types'
44

55
interface Args {
6-
s3: AWS.S3
6+
getStorageClient: () => AWS.S3
77
bucket: string
88
}
99

10-
export const getHandleDelete = ({ s3, bucket }: Args): HandleDelete => {
10+
export const getHandleDelete = ({ getStorageClient, bucket }: Args): HandleDelete => {
1111
return async ({ filename, doc: { prefix = '' } }) => {
12-
await s3.deleteObject({
12+
await getStorageClient().deleteObject({
1313
Bucket: bucket,
1414
Key: path.posix.join(prefix, filename),
1515
})

src/adapters/s3/handleUpload.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,17 @@ interface Args {
88
bucket: string
99
acl?: 'private' | 'public-read'
1010
prefix?: string
11-
s3: AWS.S3
11+
getStorageClient: () => AWS.S3
1212
}
1313

14-
export const getHandleUpload = ({ s3, bucket, acl, prefix = '' }: Args): HandleUpload => {
14+
export const getHandleUpload = ({
15+
getStorageClient,
16+
bucket,
17+
acl,
18+
prefix = '',
19+
}: Args): HandleUpload => {
1520
return async ({ data, file }) => {
16-
await s3.putObject({
21+
await getStorageClient().putObject({
1722
Bucket: bucket,
1823
Key: path.posix.join(prefix, file.filename),
1924
Body: file.buffer,

src/adapters/s3/index.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,23 @@ export interface Args {
1515
export const s3Adapter =
1616
({ config, bucket, acl }: Args): Adapter =>
1717
({ collection, prefix }): GeneratedAdapter => {
18-
const s3 = new AWS.S3(config)
18+
let storageClient: AWS.S3 | null = null
19+
const getStorageClient = () => {
20+
if (storageClient) return storageClient
21+
return (storageClient = new AWS.S3(config))
22+
}
1923

2024
return {
2125
handleUpload: getHandleUpload({
2226
collection,
23-
s3,
27+
getStorageClient,
2428
bucket,
2529
acl,
2630
prefix,
2731
}),
28-
handleDelete: getHandleDelete({ s3, bucket }),
32+
handleDelete: getHandleDelete({ getStorageClient, bucket }),
2933
generateURL: getGenerateURL({ bucket, config }),
30-
staticHandler: getHandler({ bucket, s3, collection }),
34+
staticHandler: getHandler({ bucket, getStorageClient, collection }),
3135
webpack: extendWebpackConfig,
3236
}
3337
}

src/adapters/s3/staticHandler.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import type { StaticHandler } from '../../types'
66
import { getFilePrefix } from '../../utilities/getFilePrefix'
77

88
interface Args {
9-
s3: AWS.S3
9+
getStorageClient: () => AWS.S3
1010
bucket: string
1111
collection: CollectionConfig
1212
}
1313

14-
export const getHandler = ({ s3, bucket, collection }: Args): StaticHandler => {
14+
export const getHandler = ({ getStorageClient, bucket, collection }: Args): StaticHandler => {
1515
return async (req, res, next) => {
1616
try {
1717
const prefix = await getFilePrefix({ req, collection })
1818

19-
const object = await s3.getObject({
19+
const object = await getStorageClient().getObject({
2020
Bucket: bucket,
2121
Key: path.posix.join(prefix, req.params.filename),
2222
})

0 commit comments

Comments
 (0)