UNPKG

astro

Version:

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

36 lines (35 loc) • 1.29 kB
import { AstroError, AstroErrorData } from "../../core/errors/index.js"; import { lookup as probe } from "../utils/vendor/image-size/lookup.js"; /** * Extracts image metadata such as dimensions, format, and orientation from the provided image data. * * @param {Uint8Array} data - The binary data of the image. * @param {string} [src] - The source path or URL of the image, used for error messages. Optional. * @return {Promise<Omit<ImageMetadata, 'src' | 'fsPath'>>} A promise that resolves with the extracted metadata, excluding `src` and `fsPath`. * @throws {AstroError} Throws an error if the image metadata cannot be extracted. */ export async function imageMetadata(data, src) { let result; try { result = probe(data); } catch { throw new AstroError({ ...AstroErrorData.NoImageMetadata, message: AstroErrorData.NoImageMetadata.message(src) }); } if (result.height == null || result.width == null || !result.type) { throw new AstroError({ ...AstroErrorData.NoImageMetadata, message: AstroErrorData.NoImageMetadata.message(src) }); } const { width, height, type, orientation } = result; const isPortrait = (orientation || 0) >= 5; return { width: isPortrait ? height : width, height: isPortrait ? width : height, format: type, orientation }; }