UNPKG

@azure-utils/storybooks

Version:

Utils to upload and manage Storybooks via Azure Functions and storage.

1 lines 5.39 kB
{"version":3,"file":"azure-storage-blob-Dj53y4ng.mjs","names":["id: string","context: InvocationContext","containerClient: ContainerClient","dirpath: string","blobOptions?: (blobName: string) => string","prefix: string","blobClientsToDelete: BlobClient[]"],"sources":["../src/utils/azure-storage-blob.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { InvocationContext } from \"@azure/functions\";\nimport type { ContainerClient, BlobClient } from \"@azure/storage-blob\";\nimport { getMimeType } from \"./mime-utils\";\nimport { parseErrorMessage } from \"./error-utils\";\nimport { DEFAULT_SERVICE_NAME } from \"./constants\";\n\nexport function generateAzureStorageContainerName(id: string) {\n return `${DEFAULT_SERVICE_NAME}-${id.replace(/[^\\w\\-]+/g, \"-\")}`.slice(0, 60);\n}\n\nexport async function uploadDirToAzureBlobStorage(\n context: InvocationContext,\n containerClient: ContainerClient,\n dirpath: string,\n blobOptions?: (blobName: string) => string\n) {\n const files = fs\n .readdirSync(dirpath, {\n recursive: true,\n withFileTypes: true,\n })\n .filter((file) => file.isFile() && !file.name.startsWith(\".\"))\n .map((file) => path.join(file.parentPath, file.name));\n\n context.info(`Found ${files.length} files in dir to upload: ${dirpath}.`);\n\n const uploadErrors = new Map<string, string>();\n\n for (const filepath of files) {\n if (!fs.existsSync(filepath)) {\n context.warn(`File ${filepath} does not exist, skipping.`);\n continue;\n }\n\n const blobName = filepath.replace(`${dirpath}/`, \"\");\n\n try {\n const updatedBlobName = blobOptions?.(blobName) || blobName;\n context.debug(`Uploading '${filepath}' to '${blobName}'...`);\n\n const response = await containerClient\n .getBlockBlobClient(updatedBlobName)\n .uploadFile(filepath, {\n blobHTTPHeaders: {\n blobContentType:\n getMimeType(filepath) || \"application/octet-stream\",\n },\n });\n\n if (response.errorCode) {\n throw response.errorCode;\n }\n } catch (error) {\n const { errorMessage } = parseErrorMessage(error);\n context.error(\n `Failed to upload blob '${blobName}'. Error: ${errorMessage}`\n );\n uploadErrors.set(blobName, errorMessage);\n }\n }\n\n if (uploadErrors.size > 0) {\n context.error(\n `Failed to upload ${uploadErrors.size} files to container: ${containerClient.containerName}.`\n );\n } else {\n context.info(\n `All files uploaded successfully to container: ${containerClient.containerName}.`\n );\n }\n\n return;\n}\n\nexport async function deleteBlobsFromAzureStorageContainerOrThrow(\n context: InvocationContext,\n containerClient: ContainerClient,\n prefix: string\n) {\n const blobClientsToDelete: BlobClient[] = [];\n for await (const blob of containerClient.listBlobsFlat({ prefix })) {\n blobClientsToDelete.push(containerClient.getBlobClient(blob.name));\n }\n\n if (blobClientsToDelete.length === 0) {\n context.log(`No blobs found with the prefix '${prefix}'.`);\n return;\n }\n\n const response = await containerClient\n .getBlobBatchClient()\n .deleteBlobs(blobClientsToDelete);\n\n if (response.errorCode) {\n context.error(\n `Failed to delete blobs with prefix '${prefix}'. Error: ${response.errorCode}`\n );\n throw new Error(`Failed to delete blobs: ${response.errorCode}`);\n }\n\n context.info(\n `Successfully deleted ${blobClientsToDelete.length} blobs with prefix '${prefix}'.`\n );\n return response;\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,kCAAkCA,IAAY;AAC5D,QAAO,GAAG,qBAAqB,CAAC,EAAE,GAAG,QAAQ,aAAa,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG;AAC9E;AAED,eAAsB,4BACpBC,SACAC,iBACAC,SACAC,aACA;CACA,MAAM,QAAQ,GACX,YAAY,SAAS;EACpB,WAAW;EACX,eAAe;CAChB,EAAC,CACD,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,CAC7D,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,YAAY,KAAK,KAAK,CAAC;CAEvD,QAAQ,KAAK,CAAC,MAAM,EAAE,MAAM,OAAO,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC;CAEzE,MAAM,+BAAe,IAAI;AAEzB,MAAK,MAAM,YAAY,OAAO;AAC5B,MAAI,CAAC,GAAG,WAAW,SAAS,EAAE;GAC5B,QAAQ,KAAK,CAAC,KAAK,EAAE,SAAS,0BAA0B,CAAC,CAAC;AAC1D;EACD;EAED,MAAM,WAAW,SAAS,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG;AAEpD,MAAI;GACF,MAAM,kBAAkB,cAAc,SAAS,IAAI;GACnD,QAAQ,MAAM,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC;GAE5D,MAAM,WAAW,MAAM,gBACpB,mBAAmB,gBAAgB,CACnC,WAAW,UAAU,EACpB,iBAAiB,EACf,iBACE,YAAY,SAAS,IAAI,2BAC5B,EACF,EAAC;AAEJ,OAAI,SAAS,UACX,OAAM,SAAS;EAElB,SAAQ,OAAO;GACd,MAAM,EAAE,cAAc,GAAG,kBAAkB,MAAM;GACjD,QAAQ,MACN,CAAC,uBAAuB,EAAE,SAAS,UAAU,EAAE,cAAc,CAC9D;GACD,aAAa,IAAI,UAAU,aAAa;EACzC;CACF;AAED,KAAI,aAAa,OAAO,GACtB,QAAQ,MACN,CAAC,iBAAiB,EAAE,aAAa,KAAK,qBAAqB,EAAE,gBAAgB,cAAc,CAAC,CAAC,CAC9F;MAED,QAAQ,KACN,CAAC,8CAA8C,EAAE,gBAAgB,cAAc,CAAC,CAAC,CAClF;AAGH;AACD;AAED,eAAsB,4CACpBH,SACAC,iBACAG,QACA;CACA,MAAMC,sBAAoC,CAAE;AAC5C,YAAW,MAAM,QAAQ,gBAAgB,cAAc,EAAE,OAAQ,EAAC,EAChE,oBAAoB,KAAK,gBAAgB,cAAc,KAAK,KAAK,CAAC;AAGpE,KAAI,oBAAoB,WAAW,GAAG;EACpC,QAAQ,IAAI,CAAC,gCAAgC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1D;CACD;CAED,MAAM,WAAW,MAAM,gBACpB,oBAAoB,CACpB,YAAY,oBAAoB;AAEnC,KAAI,SAAS,WAAW;EACtB,QAAQ,MACN,CAAC,oCAAoC,EAAE,OAAO,UAAU,EAAE,SAAS,WAAW,CAC/E;AACD,QAAM,IAAI,MAAM,CAAC,wBAAwB,EAAE,SAAS,WAAW;CAChE;CAED,QAAQ,KACN,CAAC,qBAAqB,EAAE,oBAAoB,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC,CACpF;AACD,QAAO;AACR"}