UNPKG

astro

Version:

Astro is a modern site builder with web best practices, performance, and DX front-of-mind.

42 lines (41 loc) 1.25 kB
import { AstroError, AstroErrorData } from "../../core/errors/index.js"; import { imageMetadata } from "./metadata.js"; async function inferRemoteSize(url) { const response = await fetch(url); if (!response.body || !response.ok) { throw new AstroError({ ...AstroErrorData.FailedToFetchRemoteImageDimensions, message: AstroErrorData.FailedToFetchRemoteImageDimensions.message(url) }); } const reader = response.body.getReader(); let done, value; let accumulatedChunks = new Uint8Array(); while (!done) { const readResult = await reader.read(); done = readResult.done; if (done) break; if (readResult.value) { value = readResult.value; let tmp = new Uint8Array(accumulatedChunks.length + value.length); tmp.set(accumulatedChunks, 0); tmp.set(value, accumulatedChunks.length); accumulatedChunks = tmp; try { const dimensions = await imageMetadata(accumulatedChunks, url); if (dimensions) { await reader.cancel(); return dimensions; } } catch { } } } throw new AstroError({ ...AstroErrorData.NoImageMetadata, message: AstroErrorData.NoImageMetadata.message(url) }); } export { inferRemoteSize };