summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/tasty-beans-give.md5
-rw-r--r--packages/astro/src/runtime/server/response.ts8
-rw-r--r--packages/astro/test/fixtures/middleware-dev/src/middleware.js6
-rw-r--r--packages/astro/test/fixtures/middleware-dev/src/pages/clone.astro12
-rw-r--r--packages/astro/test/middleware.test.js6
5 files changed, 37 insertions, 0 deletions
diff --git a/.changeset/tasty-beans-give.md b/.changeset/tasty-beans-give.md
new file mode 100644
index 000000000..35431bd39
--- /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 a39ceaa43..c64cdc162 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 2cc7cf2ca..2f9fc08b9 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('<h1>testing</h1>', '<h1>it works</h1>');
+ return new Response(newhtml, { status: 200, headers: response.headers });
} else {
if(context.url.pathname === '/') {
context.cookies.set('foo', 'bar');
diff --git a/packages/astro/test/fixtures/middleware-dev/src/pages/clone.astro b/packages/astro/test/fixtures/middleware-dev/src/pages/clone.astro
new file mode 100644
index 000000000..28abcb902
--- /dev/null
+++ b/packages/astro/test/fixtures/middleware-dev/src/pages/clone.astro
@@ -0,0 +1,12 @@
+---
+
+---
+
+<html>
+<head>
+ <title>Testing</title>
+</head>
+<body>
+ <h1>testing</h1>
+</body>
+</html>
diff --git a/packages/astro/test/middleware.test.js b/packages/astro/test/middleware.test.js
index 9e2213146..1ed857d5b 100644
--- a/packages/astro/test/middleware.test.js
+++ b/packages/astro/test/middleware.test.js
@@ -73,6 +73,12 @@ describe('Middleware in DEV mode', () => {
let res = await fixture.fetch('/');
expect(res.headers.get('set-cookie')).to.equal('foo=bar');
});
+
+ it('should be able to clone the response', async () => {
+ let res = await fixture.fetch('/clone');
+ let html = await res.text();
+ expect(html).to.contain('<h1>it works</h1>');
+ });
});
describe('Middleware in PROD mode, SSG', () => {