@azure-utils/storybooks
Version:
Utils to upload and manage Storybooks via Azure Functions and storage.
74 lines (72 loc) • 3.42 kB
JavaScript
const require_chunk = require('./chunk-DWy1uDak.cjs');
const require_constants = require('./constants-94H7Co6A.cjs');
const require_mime_utils = require('./mime-utils-t6SSMbeF.cjs');
const require_error_utils = require('./error-utils-DFTvM-wv.cjs');
const node_fs = require_chunk.__toESM(require("node:fs"));
const node_path = require_chunk.__toESM(require("node:path"));
//#region src/utils/azure-storage-blob.ts
function generateAzureStorageContainerName(id) {
return `${require_constants.DEFAULT_SERVICE_NAME}-${id.replace(/[^\w\-]+/g, "-")}`.slice(0, 60);
}
async function uploadDirToAzureBlobStorage(context, containerClient, dirpath, blobOptions) {
const files = node_fs.default.readdirSync(dirpath, {
recursive: true,
withFileTypes: true
}).filter((file) => file.isFile() && !file.name.startsWith(".")).map((file) => node_path.default.join(file.parentPath, file.name));
context.info(`Found ${files.length} files in dir to upload: ${dirpath}.`);
const uploadErrors = /* @__PURE__ */ new Map();
for (const filepath of files) {
if (!node_fs.default.existsSync(filepath)) {
context.warn(`File ${filepath} does not exist, skipping.`);
continue;
}
const blobName = filepath.replace(`${dirpath}/`, "");
try {
const updatedBlobName = blobOptions?.(blobName) || blobName;
context.debug(`Uploading '${filepath}' to '${blobName}'...`);
const response = await containerClient.getBlockBlobClient(updatedBlobName).uploadFile(filepath, { blobHTTPHeaders: { blobContentType: require_mime_utils.getMimeType(filepath) || "application/octet-stream" } });
if (response.errorCode) throw response.errorCode;
} catch (error) {
const { errorMessage } = require_error_utils.parseErrorMessage(error);
context.error(`Failed to upload blob '${blobName}'. Error: ${errorMessage}`);
uploadErrors.set(blobName, errorMessage);
}
}
if (uploadErrors.size > 0) context.error(`Failed to upload ${uploadErrors.size} files to container: ${containerClient.containerName}.`);
else context.info(`All files uploaded successfully to container: ${containerClient.containerName}.`);
return;
}
async function deleteBlobsFromAzureStorageContainerOrThrow(context, containerClient, prefix) {
const blobClientsToDelete = [];
for await (const blob of containerClient.listBlobsFlat({ prefix })) blobClientsToDelete.push(containerClient.getBlobClient(blob.name));
if (blobClientsToDelete.length === 0) {
context.log(`No blobs found with the prefix '${prefix}'.`);
return;
}
const response = await containerClient.getBlobBatchClient().deleteBlobs(blobClientsToDelete);
if (response.errorCode) {
context.error(`Failed to delete blobs with prefix '${prefix}'. Error: ${response.errorCode}`);
throw new Error(`Failed to delete blobs: ${response.errorCode}`);
}
context.info(`Successfully deleted ${blobClientsToDelete.length} blobs with prefix '${prefix}'.`);
return response;
}
//#endregion
Object.defineProperty(exports, 'deleteBlobsFromAzureStorageContainerOrThrow', {
enumerable: true,
get: function () {
return deleteBlobsFromAzureStorageContainerOrThrow;
}
});
Object.defineProperty(exports, 'generateAzureStorageContainerName', {
enumerable: true,
get: function () {
return generateAzureStorageContainerName;
}
});
Object.defineProperty(exports, 'uploadDirToAzureBlobStorage', {
enumerable: true,
get: function () {
return uploadDirToAzureBlobStorage;
}
});