summaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/src
diff options
context:
space:
mode:
authorGravatar bluwy <bjornlu.dev@gmail.com> 2024-10-31 16:43:11 +0800
committerGravatar bluwy <bjornlu.dev@gmail.com> 2024-10-31 16:43:11 +0800
commit6184a9f9040d5e722c176a40ec652d7ebb6a03ea (patch)
treeee35fa84b11cf8f8a2ea07bf144a34e20e9b6167 /packages/integrations/netlify/src
parent26122aeb62be4887701e3c8665a5b31b0d5b80dc (diff)
parentcda61b80c1727be53640901d39bcb2214770e1ed (diff)
downloadastro-6184a9f9040d5e722c176a40ec652d7ebb6a03ea.tar.gz
astro-6184a9f9040d5e722c176a40ec652d7ebb6a03ea.tar.zst
astro-6184a9f9040d5e722c176a40ec652d7ebb6a03ea.zip
Merge branch 'main' into next
Diffstat (limited to 'packages/integrations/netlify/src')
-rw-r--r--packages/integrations/netlify/src/index.ts19
1 files changed, 19 insertions, 0 deletions
diff --git a/packages/integrations/netlify/src/index.ts b/packages/integrations/netlify/src/index.ts
index 87adc6cab..a64bfb59c 100644
--- a/packages/integrations/netlify/src/index.ts
+++ b/packages/integrations/netlify/src/index.ts
@@ -292,6 +292,25 @@ export default function netlifyIntegration(
params: {}
});
ctx.locals = { netlify: { context } }
+ // https://docs.netlify.com/edge-functions/api/#return-a-rewrite
+ ctx.rewrite = (target) => {
+ if(target instanceof Request) {
+ // We can only mutate headers, so if anything else is different, we need to fetch
+ // the target URL instead.
+ if(target.method !== request.method || target.body || target.url.origin !== request.url.origin) {
+ return fetch(target);
+ }
+ // We can't replace the headers object, so we need to delete all headers and set them again
+ request.headers.forEach((_value, key) => {
+ request.headers.delete(key);
+ });
+ target.headers.forEach((value, key) => {
+ request.headers.set(key, value);
+ });
+ return new URL(target.url);
+ }
+ return new URL(target, request.url);
+ };
const next = () => {
const { netlify, ...otherLocals } = ctx.locals;
request.headers.set("x-astro-locals", trySerializeLocals(otherLocals));