@@ -4,7 +4,7 @@ import path from "node:path";
44import sharp from "sharp" ;
55import { afterEach , describe , expect , it , vi } from "vitest" ;
66import { optimizeImageToPng } from "../media/image-ops.js" ;
7- import { loadWebMedia , optimizeImageToJpeg } from "./media.js" ;
7+ import { loadWebMedia , loadWebMediaRaw , optimizeImageToJpeg } from "./media.js" ;
88
99const tmpFiles : string [ ] = [ ] ;
1010
@@ -106,6 +106,22 @@ describe("web media loading", () => {
106106 fetchMock . mockRestore ( ) ;
107107 } ) ;
108108
109+ it ( "respects maxBytes for raw URL fetches" , async ( ) => {
110+ const fetchMock = vi . spyOn ( globalThis , "fetch" ) . mockResolvedValueOnce ( {
111+ ok : true ,
112+ body : true ,
113+ arrayBuffer : async ( ) => Buffer . alloc ( 2048 ) . buffer ,
114+ headers : { get : ( ) => "image/png" } ,
115+ status : 200 ,
116+ } as Response ) ;
117+
118+ await expect ( loadWebMediaRaw ( "https://example.com/too-big.png" , 1024 ) ) . rejects . toThrow (
119+ / e x c e e d s m a x B y t e s 1 0 2 4 / i,
120+ ) ;
121+
122+ fetchMock . mockRestore ( ) ;
123+ } ) ;
124+
109125 it ( "uses content-disposition filename when available" , async ( ) => {
110126 const fetchMock = vi . spyOn ( globalThis , "fetch" ) . mockResolvedValueOnce ( {
111127 ok : true ,
0 commit comments