const maxCanvasDimension = 16_384; const maxCanvasPixels = 64 * 1024 * 1024; const maxProcessingPixels = 24 * 1024 * 1024; export function assertCanvasRasterSize(width: number, height: number, label = "Image") { assertRasterSize(width, height, maxCanvasPixels, label); } export function assertProcessingRasterSize(width: number, height: number, label = "Image") { assertRasterSize(width, height, maxProcessingPixels, label); } function assertRasterSize(width: number, height: number, maxPixels: number, label: string) { const w = Math.round(width); const h = Math.round(height); if (!Number.isSafeInteger(w) || !Number.isSafeInteger(h) || w <= 0 || h <= 0) throw new Error(`${label} dimensions are invalid.`); if (w > maxCanvasDimension || h > maxCanvasDimension || w * h > maxPixels) { throw new Error(`${label} is too large (${w} x ${h}). Maximum processing size is ${maxCanvasDimension} px per side and ${Math.floor(maxPixels / 1_000_000)} megapixels.`); } }