From e6cc704845e6df20221727daa072b96f30382807 Mon Sep 17 00:00:00 2001 From: hrmny Date: Fri, 11 Aug 2023 19:43:07 +0200 Subject: [PATCH] enable `ImageResponse` --- .../web/spec-extension/image-response.ts | 82 +++++++++---------- 1 file changed, 38 insertions(+), 44 deletions(-) diff --git a/packages/next/src/server/web/spec-extension/image-response.ts b/packages/next/src/server/web/spec-extension/image-response.ts index bccd7401a2556..d4d7c22a10846 100644 --- a/packages/next/src/server/web/spec-extension/image-response.ts +++ b/packages/next/src/server/web/spec-extension/image-response.ts @@ -5,54 +5,48 @@ export class ImageResponse { typeof import('next/dist/compiled/@vercel/og').ImageResponse > ) { - // @ts-expect-error - process.turbopack is a custom property - if (process.turbopack) { - // TODO(sokra) enable this again when turbopack supports wasm - throw new Error("Turbopack doesn't support ImageResponse currently") - } else { - const readable = new ReadableStream({ - async start(controller) { - const OGImageResponse: typeof import('next/dist/compiled/@vercel/og').ImageResponse = - // So far we have to manually determine which build to use, - // as the auto resolving is not working - ( - await import( - process.env.NEXT_RUNTIME === 'edge' - ? 'next/dist/compiled/@vercel/og/index.edge.js' - : 'next/dist/compiled/@vercel/og/index.node.js' - ) - ).ImageResponse - const imageResponse = new OGImageResponse(...args) as Response + const readable = new ReadableStream({ + async start(controller) { + const OGImageResponse: typeof import('next/dist/compiled/@vercel/og').ImageResponse = + // So far we have to manually determine which build to use, + // as the auto resolving is not working + ( + await import( + process.env.NEXT_RUNTIME === 'edge' + ? 'next/dist/compiled/@vercel/og/index.edge.js' + : 'next/dist/compiled/@vercel/og/index.node.js' + ) + ).ImageResponse + const imageResponse = new OGImageResponse(...args) as Response - if (!imageResponse.body) { - return controller.close() - } + if (!imageResponse.body) { + return controller.close() + } - const reader = imageResponse.body!.getReader() - while (true) { - const { done, value } = await reader.read() - if (done) { - return controller.close() - } - controller.enqueue(value) + const reader = imageResponse.body!.getReader() + while (true) { + const { done, value } = await reader.read() + if (done) { + return controller.close() } - }, - }) + controller.enqueue(value) + } + }, + }) - const options = args[1] || {} + const options = args[1] || {} - return new Response(readable, { - headers: { - 'content-type': 'image/png', - 'cache-control': - process.env.NODE_ENV === 'development' - ? 'no-cache, no-store' - : 'public, immutable, no-transform, max-age=31536000', - ...options.headers, - }, - status: options.status, - statusText: options.statusText, - }) - } + return new Response(readable, { + headers: { + 'content-type': 'image/png', + 'cache-control': + process.env.NODE_ENV === 'development' + ? 'no-cache, no-store' + : 'public, immutable, no-transform, max-age=31536000', + ...options.headers, + }, + status: options.status, + statusText: options.statusText, + }) } }