diff --git a/.changeset/tasty-beans-give.md b/.changeset/tasty-beans-give.md new file mode 100644 index 0000000000..35431bd39f --- /dev/null +++ b/.changeset/tasty-beans-give.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Allow our Response wrapper to be cloneable diff --git a/packages/astro/src/runtime/server/response.ts b/packages/astro/src/runtime/server/response.ts index a39ceaa439..c64cdc1626 100644 --- a/packages/astro/src/runtime/server/response.ts +++ b/packages/astro/src/runtime/server/response.ts @@ -52,6 +52,14 @@ function createResponseClass() { } return super.arrayBuffer(); } + + clone() { + return new StreamingCompatibleResponse!(this.#body, { + status: this.status, + statusText: this.statusText, + headers: this.headers + }); + } }; return StreamingCompatibleResponse; diff --git a/packages/astro/test/fixtures/middleware-dev/src/middleware.js b/packages/astro/test/fixtures/middleware-dev/src/middleware.js index 2cc7cf2ca5..2f9fc08b91 100644 --- a/packages/astro/test/fixtures/middleware-dev/src/middleware.js +++ b/packages/astro/test/fixtures/middleware-dev/src/middleware.js @@ -18,6 +18,12 @@ const first = defineMiddleware(async (context, next) => { return new Response(JSON.stringify(object), { headers: response.headers, }); + } else if(context.url.pathname === '/clone') { + const response = await next(); + const newResponse = response.clone(); + const /** @type {string} */ html = await newResponse.text(); + const newhtml = html.replace('