{"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"}