diff --git a/.changeset/gentle-clouds-crash.md b/.changeset/gentle-clouds-crash.md new file mode 100644 index 000000000000..e60e6dcfe05f --- /dev/null +++ b/.changeset/gentle-clouds-crash.md @@ -0,0 +1,5 @@ +--- +'@astrojs/image': minor +--- + +gif formats are not supported diff --git a/packages/integrations/image/src/build/ssg.ts b/packages/integrations/image/src/build/ssg.ts index e7cde2185e44..ae7d0f383a7e 100644 --- a/packages/integrations/image/src/build/ssg.ts +++ b/packages/integrations/image/src/build/ssg.ts @@ -190,7 +190,13 @@ export async function ssgBuild({ // a valid cache file wasn't found, transform the image and cache it if (!data) { - const transformed = await loader.transform(inputBuffer, transform); + let transformed; + if (transform.src.includes('.gif')) { + const gifLoader = await (await import('../loaders/sharp.js')).default; + transformed = await gifLoader.transform(inputBuffer, transform); + } else { + transformed = await loader.transform(inputBuffer, transform); + } data = transformed.data; // cache the image, if available diff --git a/packages/integrations/image/src/endpoint.ts b/packages/integrations/image/src/endpoint.ts index fc3e82c6744d..ef633b93ba20 100644 --- a/packages/integrations/image/src/endpoint.ts +++ b/packages/integrations/image/src/endpoint.ts @@ -36,15 +36,20 @@ export const get: APIRoute = async ({ request }) => { if (!inputBuffer) { return new Response('Not Found', { status: 404 }); } + let transformed; + if (transform.src.includes('.gif')) { + const gifLoader = await (await import('./loaders/sharp.js')).default; + transformed = await gifLoader.transform(inputBuffer, transform); + } else { + transformed = await loader.transform(inputBuffer, transform); + } - const { data, format } = await loader.transform(inputBuffer, transform); - - return new Response(data, { + return new Response(transformed.data, { status: 200, headers: { - 'Content-Type': mime.getType(format) || '', + 'Content-Type': mime.getType(transformed.format) || '', 'Cache-Control': 'public, max-age=31536000', - ETag: etag(data.toString()), + ETag: etag(transformed.data.toString()), Date: new Date().toUTCString(), }, });