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

Commit d9dd60f

Browse files
author
olinde
committed
feat: make azure adapter initialize lazyily
1 parent e7f5c2e commit d9dd60f

6 files changed

Lines changed: 40 additions & 27 deletions

File tree

src/adapters/azure/handleDelete.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import type { HandleDelete } from '../../types'
55

66
interface Args {
77
collection: CollectionConfig
8-
containerClient: ContainerClient
8+
getStorageClient: () => ContainerClient
99
}
1010

11-
export const getHandleDelete = ({ containerClient }: Args): HandleDelete => {
11+
export const getHandleDelete = ({ getStorageClient }: Args): HandleDelete => {
1212
return async ({ filename, doc: { prefix = '' } }) => {
13-
const blockBlobClient = containerClient.getBlockBlobClient(path.posix.join(prefix, filename))
13+
const blockBlobClient = getStorageClient().getBlockBlobClient(path.posix.join(prefix, filename))
1414
await blockBlobClient.deleteIfExists()
1515
}
1616
}

src/adapters/azure/handleUpload.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,13 @@ import type { HandleUpload } from '../../types'
55

66
interface Args {
77
collection: CollectionConfig
8-
containerClient: ContainerClient
9-
allowContainerCreate: boolean
8+
getStorageClient: () => ContainerClient
109
prefix?: string
1110
}
1211

13-
export const getHandleUpload = ({
14-
allowContainerCreate,
15-
containerClient,
16-
prefix = '',
17-
}: Args): HandleUpload => {
18-
if (allowContainerCreate) {
19-
containerClient.createIfNotExists({ access: 'blob' })
20-
}
21-
12+
export const getHandleUpload = ({ getStorageClient, prefix = '' }: Args): HandleUpload => {
2213
return async ({ data, file }) => {
23-
const blockBlobClient = containerClient.getBlockBlobClient(
14+
const blockBlobClient = getStorageClient().getBlockBlobClient(
2415
path.posix.join(prefix, file.filename),
2516
)
2617

src/adapters/azure/index.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BlobServiceClient } from '@azure/storage-blob'
1+
import { BlobServiceClient, ContainerClient } from '@azure/storage-blob'
22
import type { Adapter, GeneratedAdapter } from '../../types'
33
import { getHandler } from './staticHandler'
44
import { getGenerateURL } from './generateURL'
@@ -13,22 +13,35 @@ export interface Args {
1313
allowContainerCreate: boolean
1414
}
1515

16-
export const azureBlobStorageAdapter =
17-
({ connectionString, containerName, baseURL, allowContainerCreate }: Args): Adapter =>
18-
({ collection, prefix }): GeneratedAdapter => {
16+
export const azureBlobStorageAdapter = ({
17+
connectionString,
18+
allowContainerCreate,
19+
containerName,
20+
baseURL,
21+
}: Args): Adapter => {
22+
let storageClient: ContainerClient | null = null
23+
const getStorageClient = () => {
24+
if (storageClient) return storageClient
1925
const blobServiceClient = BlobServiceClient.fromConnectionString(connectionString)
20-
const containerClient = blobServiceClient.getContainerClient(containerName)
26+
return (storageClient = blobServiceClient.getContainerClient(containerName))
27+
}
28+
29+
const createContainerIfNotExists = () => {
30+
getStorageClient().createIfNotExists({ access: 'blob' })
31+
}
2132

33+
return ({ collection, prefix }): GeneratedAdapter => {
2234
return {
2335
handleUpload: getHandleUpload({
2436
collection,
25-
containerClient,
26-
allowContainerCreate,
37+
getStorageClient,
2738
prefix,
2839
}),
29-
handleDelete: getHandleDelete({ collection, containerClient }),
40+
handleDelete: getHandleDelete({ collection, getStorageClient }),
3041
generateURL: getGenerateURL({ containerName, baseURL }),
31-
staticHandler: getHandler({ containerClient, collection }),
42+
staticHandler: getHandler({ getStorageClient, collection }),
3243
webpack: extendWebpackConfig,
44+
...(allowContainerCreate && { onInit: createContainerIfNotExists }),
3345
}
3446
}
47+
}

src/adapters/azure/staticHandler.ts

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

77
interface Args {
8-
containerClient: ContainerClient
8+
getStorageClient: () => ContainerClient
99
collection: CollectionConfig
1010
}
1111

12-
export const getHandler = ({ containerClient, collection }: Args): StaticHandler => {
12+
export const getHandler = ({ getStorageClient, collection }: Args): StaticHandler => {
1313
return async (req, res, next) => {
1414
try {
1515
const prefix = await getFilePrefix({ req, collection })
16-
const blockBlobClient = containerClient.getBlockBlobClient(
16+
const blockBlobClient = getStorageClient().getBlockBlobClient(
1717
path.posix.join(prefix, req.params.filename),
1818
)
1919

src/plugin.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export const cloudStorage =
2121

2222
const webpack = extendWebpackConfig({ options: pluginOptions, config })
2323

24+
const initFunctions: (() => void)[] = []
25+
2426
return {
2527
...config,
2628
admin: {
@@ -36,6 +38,8 @@ export const cloudStorage =
3638
prefix: options.prefix,
3739
})
3840

41+
if (adapter.onInit) initFunctions.push(adapter.onInit)
42+
3943
const fields = getFields({
4044
collection: existingCollection,
4145
disablePayloadAccessControl: options.disablePayloadAccessControl,
@@ -82,5 +86,9 @@ export const cloudStorage =
8286

8387
return existingCollection
8488
}),
89+
onInit: payload => {
90+
initFunctions.forEach(fn => fn())
91+
if (config.onInit) config.onInit(payload)
92+
},
8593
}
8694
}

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export interface GeneratedAdapter {
4646
generateURL: GenerateURL
4747
staticHandler: StaticHandler
4848
webpack?: (config: WebpackConfig) => WebpackConfig
49+
onInit?: () => void
4950
}
5051

5152
export type Adapter = (args: { collection: CollectionConfig; prefix?: string }) => GeneratedAdapter

0 commit comments

Comments
 (0)