summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adriaan van der Bergh <avanderbergh@gmail.com> 2024-12-02 15:35:11 +0100
committerGravatar GitHub <noreply@github.com> 2024-12-02 22:35:11 +0800
commit15f000c3e7bc5308c39107095e5af4258c2373a5 (patch)
treed3dfd248671795507c012656e0eb83e1129e6e29
parent74ee2e45ecc9edbe285eadee6d0b94fc47d0d125 (diff)
downloadastro-15f000c3e7bc5308c39107095e5af4258c2373a5.tar.gz
astro-15f000c3e7bc5308c39107095e5af4258c2373a5.tar.zst
astro-15f000c3e7bc5308c39107095e5af4258c2373a5.zip
fix: remove value and writable properties from headers descriptor (#12552)
-rw-r--r--.changeset/tame-hats-fold.md5
-rw-r--r--packages/astro/src/core/request.ts13
2 files changed, 15 insertions, 3 deletions
diff --git a/.changeset/tame-hats-fold.md b/.changeset/tame-hats-fold.md
new file mode 100644
index 000000000..e369aa8d4
--- /dev/null
+++ b/.changeset/tame-hats-fold.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fixed an issue where modifying the `Request.headers` prototype during prerendering caused a build error. Removed conflicting value and writable properties from the `headers` descriptor to prevent `Invalid property descriptor` errors.
diff --git a/packages/astro/src/core/request.ts b/packages/astro/src/core/request.ts
index 3ace80ba8..624bee879 100644
--- a/packages/astro/src/core/request.ts
+++ b/packages/astro/src/core/request.ts
@@ -70,9 +70,13 @@ export function createRequest({
});
if (isPrerendered) {
- // Warn when accessing headers in prerendered pages
- const _headers = request.headers;
- const headersDesc = Object.getOwnPropertyDescriptor(request, 'headers') || {};
+ // Warn when accessing headers in SSG mode
+ let _headers = request.headers;
+
+ // We need to remove descriptor's value and writable properties because we're adding getters and setters.
+ const { value, writable, ...headersDesc } =
+ Object.getOwnPropertyDescriptor(request, 'headers') || {};
+
Object.defineProperty(request, 'headers', {
...headersDesc,
get() {
@@ -82,6 +86,9 @@ export function createRequest({
);
return _headers;
},
+ set(newHeaders: Headers) {
+ _headers = newHeaders;
+ },
});
} else if (clientAddress) {
// clientAddress is stored to be read by RenderContext, only if the request is for a page that will be on-demand rendered