1- import { BlobServiceClient } from '@azure/storage-blob'
1+ import { BlobServiceClient , ContainerClient } from '@azure/storage-blob'
22import type { Adapter , GeneratedAdapter } from '../../types'
33import { getHandler } from './staticHandler'
44import { 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+ }
0 commit comments