UNPKG

@azure-utils/storybooks

Version:

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

48 lines (46 loc) 2.24 kB
import { getStore, responseError } from "./store-BL4RNiEp.mjs"; import { generateAzureStorageContainerName, uploadDirToAzureBlobStorage } from "./azure-storage-blob-Dj53y4ng.mjs"; import { BlobServiceClient } from "@azure/storage-blob"; import fs from "node:fs"; import path from "node:path"; import { Readable } from "node:stream"; import os from "node:os"; import decompress from "decompress"; import { once } from "node:events"; //#region src/utils/upload-utils.ts async function uploadZipWithDecompressed(projectId, buildSHA, zipFile) { const { context, connectionString, request } = getStore(); const tmpDir = os.tmpdir(); const dirpath = fs.mkdtempSync(path.join(tmpDir, "storybook-")); const zipFilePath = path.join(dirpath, `${projectId}-${buildSHA}-storybook.zip`); try { if (zipFile) await writeStreamToFile(Readable.fromWeb(zipFile.stream()), zipFilePath); else await writeStreamToFile(Readable.fromWeb(request.body), zipFilePath); await decompress(zipFilePath, dirpath); const containerClient = BlobServiceClient.fromConnectionString(connectionString).getContainerClient(generateAzureStorageContainerName(projectId)); const blobName = `${buildSHA}/storybook.zip`; context.debug(`Uploading stream to blob: ${blobName} (container: ${containerClient.containerName})`); const uploadResponse = await containerClient.getBlockBlobClient(blobName).uploadFile(zipFilePath, { blobHTTPHeaders: { blobContentType: "application/zip", blobContentEncoding: "utf8", blobCacheControl: "public, max-age=31536000" } }); if (uploadResponse.errorCode) return responseError("Failed to upload Storybook.", context, uploadResponse._response.status); await uploadDirToAzureBlobStorage(context, containerClient, dirpath, (blobName$1) => path.join(buildSHA, blobName$1)); return; } finally { fs.rmSync(dirpath, { recursive: true, force: true }); } } async function writeStreamToFile(readable, filePath) { const writable = fs.createWriteStream(filePath); for await (const chunk of readable) if (!writable.write(chunk)) await once(writable, "drain"); writable.end(); await once(writable, "finish"); } //#endregion export { uploadZipWithDecompressed }; //# sourceMappingURL=upload-utils-DHJHMiPY.mjs.map