UNPKG

@versatiles/google-cloud

Version:
33 lines (32 loc) 1.16 kB
import { Versatiles } from './versatiles.js'; const containerCache = new Map(); export async function getVersatiles(file, url) { const metadata = await file.getMetadata(); let container = containerCache.get(file.name); if (container != null) { if (container.etag !== metadata.etag) container = undefined; } if (container == null) { const reader = buildReader(file); container = await Versatiles.fromReader(reader, url, metadata.etag); containerCache.set(file.name, container); } return container; } function buildReader(file) { return async (position, length) => { // Read data from the file stream return new Promise((resolve, reject) => { const buffers = Array(); file.createReadStream({ start: position, end: position + length - 1 }) .on('data', (chunk) => buffers.push(chunk)) .on('end', () => { resolve(Buffer.concat(buffers)); }) .on('error', (err) => { reject(`error accessing bucket stream - ${String(err)}`); }); }); }; }