82 lines
2.1 KiB
JavaScript
82 lines
2.1 KiB
JavaScript
import {
|
|
SharedKeyCredential,
|
|
BlockBlobURL,
|
|
BlobURL,
|
|
ContainerURL,
|
|
ServiceURL,
|
|
StorageURL,
|
|
Aborter,
|
|
} from "@azure/storage-blob"
|
|
|
|
export const createFile = ({ containerUrl }) => async (key, content) => {
|
|
const blobURL = BlobURL.fromContainerURL(containerUrl, key)
|
|
const blockBlobURL = BlockBlobURL.fromBlobURL(blobURL)
|
|
await blockBlobURL.upload(Aborter.none, content, content.length)
|
|
}
|
|
|
|
export const updateFile = opts => async (path, content) =>
|
|
createFile(opts)(path, content)
|
|
|
|
export const loadFile = ({ containerUrl }) => async (key, content) => {
|
|
const blobURL = BlobURL.fromContainerURL(containerUrl, key)
|
|
|
|
const downloadBlockBlobResponse = await blobURL.download(Aborter.none, 0)
|
|
|
|
return downloadBlockBlobResponse.readableStreamBody
|
|
.read(content.length)
|
|
.toString()
|
|
}
|
|
|
|
export const exists = ({ containerUrl }) => async key => {
|
|
const blobURL = BlobURL.fromContainerURL(containerUrl, key)
|
|
const getPropsResponse = await blobURL.getProperties()
|
|
return getPropsResponse._response.StatusCode === 200
|
|
}
|
|
|
|
export const deleteFile = ({ containerURL }) => async key => {
|
|
const blobURL = BlobURL.fromContainerURL(containerURL, key)
|
|
await blobURL.delete(Aborter.none)
|
|
}
|
|
|
|
export const createContainer = ({ containerUrl }) => async () =>
|
|
await containerUrl.create(Aborter.none)
|
|
|
|
export const deleteContainer = ({ containerUrl }) => async () =>
|
|
await containerUrl.delete(Aborter.none)
|
|
|
|
const initialise = opts => {
|
|
const sharedKeyCredential = new SharedKeyCredential(
|
|
opts.account,
|
|
opts.accountKey
|
|
)
|
|
|
|
const pipeline = StorageURL.newPipeline(sharedKeyCredential)
|
|
|
|
const serviceURL = new ServiceURL(
|
|
`https://${opts.account}.blob.core.windows.net`,
|
|
pipeline
|
|
)
|
|
|
|
const containerURL = ContainerURL.fromServiceURL(
|
|
serviceURL,
|
|
opts.containerName
|
|
)
|
|
|
|
return {
|
|
containerURL,
|
|
}
|
|
}
|
|
|
|
export default opts => {
|
|
const access = initialise(opts)
|
|
return {
|
|
createFile: createFile(access),
|
|
updateFile: updateFile(access),
|
|
loadFile: loadFile(access),
|
|
exists: exists(access),
|
|
|
|
datastoreType: "azure-blob-storage",
|
|
datastoreDescription: "",
|
|
}
|
|
}
|