summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
+```