summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Emanuele Stoppa <my.burning@gmail.com> 2023-05-04 13:03:52 +0100
committerGravatar GitHub <noreply@github.com> 2023-05-04 08:03:52 -0400
commit17c074b20222b7d9491905b808ec387ca58d9b96 (patch)
tree41a9b6074c063ce68bb6808cf3214d961f68a0f0
parent4f591ce0e463c60183a9823cbb4aa3faec43fcd6 (diff)
downloadastro-17c074b20222b7d9491905b808ec387ca58d9b96.tar.gz
astro-17c074b20222b7d9491905b808ec387ca58d9b96.tar.zst
astro-17c074b20222b7d9491905b808ec387ca58d9b96.zip
chore: update middleware changeset (#6986)
-rw-r--r--.changeset/pretty-bears-deliver.md44
1 files changed, 43 insertions, 1 deletions
diff --git a/.changeset/pretty-bears-deliver.md b/.changeset/pretty-bears-deliver.md
index 2b8bfc818..7be41ec06 100644
--- a/.changeset/pretty-bears-deliver.md
+++ b/.changeset/pretty-bears-deliver.md
@@ -2,4 +2,46 @@
'astro': minor
---
-New middleware API
+Implements a new experimental middleware in Astro.
+
+The middleware is available under the following experimental flag:
+
+```js
+export default defineConfig({
+ experimental: {
+ middleware: true
+ }
+})
+```
+
+Or via CLI, using the new argument `--experimental-middleware`.
+
+Create a file called `middleware.{js,ts}` inside the `src` folder, and
+export a `onRequest` function.
+
+From `astro/middleware`, use the `defineMiddleware` utility to take advantage of type-safety, and use
+the `sequence` utility to chain multiple middleware functions.
+
+Example:
+
+```ts
+import {defineMiddleware, sequence} from "astro/middleware";
+
+const redirects = defineMiddleware((context, next) => {
+ if (context.request.url.endsWith("/old-url")) {
+ return context.redirect("/new-url")
+ }
+ return next();
+});
+
+const minify = defineMiddleware(async (context, next) => {
+ const repsonse = await next();
+ const minifiedHtml = await minifyHtml(response.text());
+ return new Response(minifiedHtml, {
+ status: 200,
+ headers: response.headers
+ });
+})
+
+export const onRequest = sequence(redirects, minify);
+```