aboutsummaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/test/functions/fixtures
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/netlify/test/functions/fixtures')
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/.gitignore1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts2
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs11
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/package.json8
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro7
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro6
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js12
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs8
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/package.json9
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro7
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro27
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts2
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs19
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/package.json9
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpgbin0 -> 149509 bytes
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts8
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro9
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro12
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro13
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts2
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs11
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/package.json8
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts1
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro5
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro9
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro3
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro27
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs8
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/package.json15
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts36
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts49
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts13
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro24
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts6
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro13
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts6
-rw-r--r--packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts10
46 files changed, 425 insertions, 0 deletions
diff --git a/packages/integrations/netlify/test/functions/fixtures/.gitignore b/packages/integrations/netlify/test/functions/fixtures/.gitignore
new file mode 100644
index 000000000..916f60644
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/.gitignore
@@ -0,0 +1 @@
+**/netlify
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts b/packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts
new file mode 100644
index 000000000..03d7cc43f
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts
@@ -0,0 +1,2 @@
+/// <reference types="astro/client" />
+/// <reference path="content.d.ts" /> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs
new file mode 100644
index 000000000..033024c1a
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs
@@ -0,0 +1,11 @@
+import netlify from '@astrojs/netlify';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ output: 'server',
+ adapter: netlify(),
+ site: `http://example.com`,
+ security: {
+ checkOrigin: false
+ }
+}); \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/package.json b/packages/integrations/netlify/test/functions/fixtures/cookies/package.json
new file mode 100644
index 000000000..14257a558
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@test/netlify-cookies",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/netlify": "workspace:"
+ }
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts b/packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts
new file mode 100644
index 000000000..9bc5cb41c
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference path="../.astro/types.d.ts" /> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro
new file mode 100644
index 000000000..9049fa0fb
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro
@@ -0,0 +1,7 @@
+---
+export const prerender = false
+const header = Astro.request.headers.get("x-test")
+---
+
+<p>This is my custom 404 page</p>
+<p>x-test: {header}</p> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro
new file mode 100644
index 000000000..53e029f04
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro
@@ -0,0 +1,6 @@
+<html>
+<head><title>Testing</title></head>
+<body>
+ <h1>Testing</h1>
+</body>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js
new file mode 100644
index 000000000..3f1fe17b5
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js
@@ -0,0 +1,12 @@
+
+export function POST() {
+ const headers = new Headers();
+ headers.append('Set-Cookie', `foo=foo; HttpOnly`);
+ headers.append('Set-Cookie', `bar=bar; HttpOnly`);
+ headers.append('Location', '/');
+
+ return new Response('', {
+ status: 301,
+ headers,
+ });
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs
new file mode 100644
index 000000000..26c74eda2
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs
@@ -0,0 +1,8 @@
+import netlify from '@astrojs/netlify';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ output: 'server',
+ adapter: netlify(),
+ site: "http://example.com",
+}); \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv b/packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv
new file mode 100644
index 000000000..3fde4e202
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv
@@ -0,0 +1 @@
+1,2,3 \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json b/packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json
@@ -0,0 +1 @@
+{}
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json
new file mode 100644
index 000000000..9e26dfeeb
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt
new file mode 100644
index 000000000..b6fc4c620
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt
@@ -0,0 +1 @@
+hello \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv
new file mode 100644
index 000000000..3fde4e202
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv
@@ -0,0 +1 @@
+1,2,3 \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv
new file mode 100644
index 000000000..3fde4e202
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv
@@ -0,0 +1 @@
+1,2,3 \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt
new file mode 100644
index 000000000..b6fc4c620
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt
@@ -0,0 +1 @@
+hello \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/package.json b/packages/integrations/netlify/test/functions/fixtures/includes/package.json
new file mode 100644
index 000000000..ea227a200
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/netlify-includes",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/netlify": "workspace:",
+ "cowsay": "1.6.0"
+ }
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro
new file mode 100644
index 000000000..9049fa0fb
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro
@@ -0,0 +1,7 @@
+---
+export const prerender = false
+const header = Astro.request.headers.get("x-test")
+---
+
+<p>This is my custom 404 page</p>
+<p>x-test: {header}</p> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro
new file mode 100644
index 000000000..0fd8b479f
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro
@@ -0,0 +1,27 @@
+---
+import { promises as fs } from 'fs';
+import { fileURLToPath } from 'url';
+import { dirname, join } from 'path';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+const loadFile = Astro.url.searchParams.get('file');
+
+const file = await fs.readFile(join(__dirname, `../../../files/${loadFile}`), 'utf-8');
+
+async function moo() {
+ const cow = await import('cowsay');
+ return cow.say({ text: 'Moo!' });
+}
+
+if (Astro.url.searchParams.get('moo')) {
+ await moo();
+}
+---
+<html>
+<head><title>Testing</title></head>
+<body>
+ {loadFile && <h1>{file}</h1>}
+</body>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts b/packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts
new file mode 100644
index 000000000..03d7cc43f
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts
@@ -0,0 +1,2 @@
+/// <reference types="astro/client" />
+/// <reference path="content.d.ts" /> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs
new file mode 100644
index 000000000..0da6bf580
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs
@@ -0,0 +1,19 @@
+import netlify from '@astrojs/netlify';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ output: 'server',
+ adapter: netlify({
+ edgeMiddleware: process.env.EDGE_MIDDLEWARE === 'true',
+ imageCDN: process.env.DISABLE_IMAGE_CDN ? false : undefined,
+ }),
+ image: {
+ remotePatterns: [{
+ protocol: 'https',
+ hostname: '*.example.org',
+ pathname: '/images/*',
+ }],
+ domains: ['example.net', 'secret.example.edu'],
+ },
+ site: `http://example.com`,
+}); \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/package.json b/packages/integrations/netlify/test/functions/fixtures/middleware/package.json
new file mode 100644
index 000000000..ddc811223
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/netlify-middleware-without-handler-file",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/netlify": "workspace:",
+ "sharp": "^0.33.5"
+ }
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpg b/packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpg
new file mode 100644
index 000000000..d3326bcc7
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpg
Binary files differ
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts b/packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts
new file mode 100644
index 000000000..9bc5cb41c
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference path="../.astro/types.d.ts" /> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts b/packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts
new file mode 100644
index 000000000..9790b8755
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts
@@ -0,0 +1,8 @@
+import https from 'node:https';
+
+export const onRequest = (context, next) => {
+ context.locals.title = 'Middleware';
+ context.locals.nodePrefixedImportExists = !!https;
+
+ return next();
+};
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro
new file mode 100644
index 000000000..b3da724c3
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro
@@ -0,0 +1,9 @@
+---
+import { Image } from 'astro:assets';
+import astronautImageĀ from "../astronaut.jpg"
+
+export const prerender = true;
+---
+
+<Image src={astronautImage} alt="an astronaut floating in space" />
+
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro
new file mode 100644
index 000000000..d97f70698
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro
@@ -0,0 +1,12 @@
+---
+const title = Astro.locals.title;
+---
+
+<html>
+<head>
+ <title>{title}</title>
+</head>
+<body>
+<h1>{title}</h1>
+</body>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro
new file mode 100644
index 000000000..f0314c053
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro
@@ -0,0 +1,13 @@
+---
+export const prerender = true;
+const title = Astro.locals.title;
+---
+
+<html>
+<head>
+ <title>{title}</title>
+</head>
+<body>
+<h1>{title}</h1>
+</body>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts b/packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts
new file mode 100644
index 000000000..03d7cc43f
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts
@@ -0,0 +1,2 @@
+/// <reference types="astro/client" />
+/// <reference path="content.d.ts" /> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs
new file mode 100644
index 000000000..55613bd91
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs
@@ -0,0 +1,11 @@
+import netlify from '@astrojs/netlify';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ output: 'static',
+ adapter: netlify(),
+ site: `http://example.com`,
+ redirects: {
+ '/other': '/',
+ },
+});
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/package.json b/packages/integrations/netlify/test/functions/fixtures/redirects/package.json
new file mode 100644
index 000000000..9970a81de
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@test/netlify-redirects",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/netlify": "workspace:"
+ }
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts b/packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts
new file mode 100644
index 000000000..9bc5cb41c
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference path="../.astro/types.d.ts" /> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro
new file mode 100644
index 000000000..b9e3eda13
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro
@@ -0,0 +1,5 @@
+---
+export const prerender = true
+---
+
+<p>This is my static 404 page</p> \ No newline at end of file
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro
new file mode 100644
index 000000000..41f740c4c
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro
@@ -0,0 +1,9 @@
+---
+export const prerender = false;
+---
+<html>
+<head><title>Testing</title></head>
+<body>
+ <h1>Testing</h1>
+</body>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro
new file mode 100644
index 000000000..f48d767ee
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro
@@ -0,0 +1,3 @@
+---
+return Astro.redirect('/');
+---
diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro
new file mode 100644
index 000000000..996cd989e
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro
@@ -0,0 +1,27 @@
+---
+export const prerender = false;
+
+export const getStaticPaths = (async () => {
+ const posts = [
+ { slug: 'one', data: {draft: false, title: 'One'} },
+ { slug: 'two', data: {draft: false, title: 'Two'} }
+ ];
+ return posts.map((post) => {
+ return {
+ params: { slug: post.slug },
+ props: { draft: post.data.draft, title: post.data.title },
+ };
+ });
+})
+
+const { slug } = Astro.params;
+const { title } = Astro.props;
+---
+<html>
+ <head>
+ <title>{ title }</title>
+ </head>
+ <body>
+ <h1>{ title }</h1>
+ </body>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs
new file mode 100644
index 000000000..f7ac423c9
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs
@@ -0,0 +1,8 @@
+import netlify from '@astrojs/netlify';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ output: 'server',
+ adapter: netlify(),
+ site: `http://example.com`
+});
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/package.json b/packages/integrations/netlify/test/functions/fixtures/sessions/package.json
new file mode 100644
index 000000000..ed3de61f7
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@test/netlify-session",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/netlify": "workspace:*"
+ },
+ "devDependencies": {
+ "astro": "workspace:*"
+ },
+ "scripts": {
+ "build": "astro build",
+ "start": "astro dev"
+ }
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts
new file mode 100644
index 000000000..856f68ba8
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts
@@ -0,0 +1,36 @@
+import { defineAction } from 'astro:actions';
+import { z } from 'astro:schema';
+
+export const server = {
+ addToCart: defineAction({
+ accept: 'form',
+ input: z.object({ productId: z.string() }),
+ handler: async (input, context) => {
+ const cart: Array<string> = (await context.session.get('cart')) || [];
+ cart.push(input.productId);
+ await context.session.set('cart', cart);
+ return { cart, message: 'Product added to cart at ' + new Date().toTimeString() };
+ },
+ }),
+ getCart: defineAction({
+ handler: async (input, context) => {
+ return await context.session.get('cart');
+ },
+ }),
+ clearCart: defineAction({
+ accept: 'json',
+ handler: async (input, context) => {
+ await context.session.set('cart', []);
+ return { cart: [], message: 'Cart cleared at ' + new Date().toTimeString() };
+ },
+ }),
+ addUrl: defineAction({
+ input: z.object({ favoriteUrl: z.string().url() }),
+ handler: async (input, context) => {
+ const previousFavoriteUrl = await context.session.get<URL>('favoriteUrl');
+ const url = new URL(input.favoriteUrl);
+ context.session.set('favoriteUrl', url);
+ return { message: 'Favorite URL set to ' + url.href + ' from ' + (previousFavoriteUrl?.href ?? "nothing") };
+ }
+ })
+}
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts
new file mode 100644
index 000000000..7f56f11f3
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts
@@ -0,0 +1,49 @@
+import { defineMiddleware } from 'astro:middleware';
+import { getActionContext } from 'astro:actions';
+
+const ACTION_SESSION_KEY = 'actionResult'
+
+export const onRequest = defineMiddleware(async (context, next) => {
+ // Skip requests for prerendered pages
+ if (context.isPrerendered) return next();
+
+ const { action, setActionResult, serializeActionResult } =
+ getActionContext(context);
+
+ console.log(action?.name)
+
+ const actionPayload = await context.session.get(ACTION_SESSION_KEY);
+
+ if (actionPayload) {
+ setActionResult(actionPayload.actionName, actionPayload.actionResult);
+ context.session.delete(ACTION_SESSION_KEY);
+ return next();
+ }
+
+ // If an action was called from an HTML form action,
+ // call the action handler and redirect to the destination page
+ if (action?.calledFrom === "form") {
+ const actionResult = await action.handler();
+
+ context.session.set(ACTION_SESSION_KEY, {
+ actionName: action.name,
+ actionResult: serializeActionResult(actionResult),
+ });
+
+
+ // Redirect back to the previous page on error
+ if (actionResult.error) {
+ const referer = context.request.headers.get("Referer");
+ if (!referer) {
+ throw new Error(
+ "Internal: Referer unexpectedly missing from Action POST request.",
+ );
+ }
+ return context.redirect(referer);
+ }
+ // Redirect to the destination page on success
+ return context.redirect(context.originPathname);
+ }
+
+ return next();
+});
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts
new file mode 100644
index 000000000..21793c78a
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts
@@ -0,0 +1,13 @@
+import type { APIRoute } from 'astro';
+
+export const GET: APIRoute = async (context) => {
+ const url = new URL(context.url, 'http://localhost');
+ let value = url.searchParams.get('set');
+ if (value) {
+ context.session.set('value', value);
+ } else {
+ value = await context.session.get('value');
+ }
+ const cart = await context.session.get('cart');
+ return Response.json({ value, cart });
+};
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro
new file mode 100644
index 000000000..e69a9e5e1
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro
@@ -0,0 +1,24 @@
+---
+import { actions } from "astro:actions";
+
+const result = Astro.getActionResult(actions.addToCart);
+
+const cart = result?.data?.cart ?? await Astro.session.get('cart');
+const message = result?.data?.message ?? 'Add something to your cart!';
+---
+<p>Cart: <span id="cart">{JSON.stringify(cart)}</span></p>
+<p id="message">{message}</p>
+<form action={actions.addToCart} method="POST">
+ <input type="text" name="productId" value="shoe" />
+ <button type="submit">Add to Cart</button>
+</form>
+<input type="button" value="Clear Cart" id="clearCart" />
+<script>
+ import { actions } from "astro:actions";
+ async function clearCart() {
+ const result = await actions.clearCart({});
+ document.getElementById('cart').textContent = JSON.stringify(result.data.cart);
+ document.getElementById('message').textContent = result.data.message;
+ }
+ document.getElementById('clearCart').addEventListener('click', clearCart);
+</script>
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts
new file mode 100644
index 000000000..e83f6e4b6
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts
@@ -0,0 +1,6 @@
+import type { APIRoute } from 'astro';
+
+export const GET: APIRoute = async (context) => {
+ await context.session.destroy();
+ return Response.json({});
+};
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro
new file mode 100644
index 000000000..30d6a1618
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro
@@ -0,0 +1,13 @@
+---
+const value = await Astro.session.get('value');
+---
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+ <title>Hi</title>
+</head>
+
+<h1>Hi</h1>
+<p>{value}</p>
+<a href="/cart" style="font-size: 36px">šŸ›’</a>
+</html>
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts
new file mode 100644
index 000000000..6f2240588
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts
@@ -0,0 +1,6 @@
+import type { APIRoute } from 'astro';
+
+export const GET: APIRoute = async (context) => {
+ await context.session.regenerate();
+ return Response.json({});
+};
diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts
new file mode 100644
index 000000000..71b058e75
--- /dev/null
+++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts
@@ -0,0 +1,10 @@
+import type { APIRoute } from 'astro';
+
+export const GET: APIRoute = async (context) => {
+ const previousObject = await context.session.get("key") ?? { value: "none" };
+ const previousValue = previousObject.value;
+ const sessionData = { value: "expected" };
+ context.session.set("key", sessionData);
+ sessionData.value = "unexpected";
+ return Response.json({previousValue});
+};