turborepo-remote-cache
Version:
Turborepo remote cache server
45 lines • 4.32 kB
JavaScript
import { PassThrough, Writable } from 'node:stream';
import { BlobServiceClient } from '@azure/storage-blob';
export function createAzureBlobStorage({ containerName, connectionString, }) {
const blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);
const containerClient = blobServiceClient.getContainerClient(containerName);
return {
exists: (artifactPath, cb) => {
const blobClient = containerClient.getBlobClient(artifactPath);
blobClient.exists().then((exists) => {
cb(null, exists);
}, cb);
},
createReadStream(artifactPath) {
const blobClient = containerClient.getBlobClient(artifactPath);
const stream = new PassThrough();
blobClient
.download()
.then((response) => {
if (!response.readableStreamBody) {
throw new Error(`Artifact ${artifactPath} download returned no readable body.`);
}
response.readableStreamBody
.on('error', (err) => stream.destroy(err))
.pipe(stream);
})
.catch((err) => stream.destroy(err));
return stream;
},
createWriteStream(artifactPath) {
const blockBlobClient = containerClient.getBlockBlobClient(artifactPath);
const passThrough = new PassThrough();
const uploadPromise = blockBlobClient.uploadStream(passThrough);
return new Writable({
write(chunk, encoding, callback) {
passThrough.write(chunk, encoding, callback);
},
final(callback) {
passThrough.end();
uploadPromise.then(() => callback()).catch(callback);
},
});
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp1cmUtYmxvYi1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3N0b3JhZ2UvYXp1cmUtYmxvYi1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBUXZELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUNyQyxhQUFhLEVBQ2IsZ0JBQWdCLEdBQ1E7SUFDeEIsTUFBTSxpQkFBaUIsR0FDckIsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUMxRCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUUzRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzNCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUQsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNsQyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ2xCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNSLENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxZQUFZO1lBQzNCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtZQUNoQyxVQUFVO2lCQUNQLFFBQVEsRUFBRTtpQkFDVixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksWUFBWSxzQ0FBc0MsQ0FDL0QsQ0FBQTtnQkFDSCxDQUFDO2dCQUdELFFBQVEsQ0FBQyxrQkFBa0I7cUJBQ3hCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNqQixDQUFDLENBQUM7aUJBS0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDdEMsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDO1FBQ0QsaUJBQWlCLENBQUMsWUFBWTtZQUM1QixNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDeEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtZQUNyQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQy9ELE9BQU8sSUFBSSxRQUFRLENBQUM7Z0JBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVE7b0JBQzdCLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFDOUMsQ0FBQztnQkFDRCxLQUFLLENBQUMsUUFBUTtvQkFDWixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7b0JBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3RELENBQUM7YUFDRixDQUFDLENBQUE7UUFDSixDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUMifQ==