'
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/.dev.vars b/packages/integrations/cloudflare/test/fixtures/astro-env/.dev.vars
new file mode 100644
index 000000000000..3cf69c1f5fdb
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/.dev.vars
@@ -0,0 +1 @@
+API_SECRET=123456789
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts b/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts
new file mode 100644
index 000000000000..b7d556b3bda5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/astro.config.ts
@@ -0,0 +1,14 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig, envField } from 'astro/config';
+
+export default defineConfig({
+ env: {
+ schema: {
+ API_URL: envField.string({ context: 'client', access: 'public', optional: true }),
+ PORT: envField.number({ context: 'server', access: 'public', default: 4321 }),
+ API_SECRET: envField.string({ context: 'server', access: 'secret' }),
+ },
+ },
+ adapter: cloudflare(),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/package.json b/packages/integrations/cloudflare/test/fixtures/astro-env/package.json
new file mode 100644
index 000000000000..f91b3fe6e7e5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@test/astro-cloudflare-astro-env",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ },
+ "devDependencies": {
+ "wrangler": "^3.101.0"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/astro-env/src/env.d.ts
new file mode 100644
index 000000000000..60f5ec0d0784
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/src/env.d.ts
@@ -0,0 +1,13 @@
+///
+///
+///
+
+type Runtime = import('@astrojs/cloudflare').Runtime;
+
+declare namespace App {
+ interface Locals extends Runtime {
+ otherLocals: {
+ test: string;
+ };
+ }
+}
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/astro-env/src/pages/index.astro
new file mode 100644
index 000000000000..7e50474edd94
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/src/pages/index.astro
@@ -0,0 +1,27 @@
+---
+import { API_URL } from "astro:env/client"
+import { PORT, API_SECRET } from "astro:env/server"
+
+const runtime = Astro.locals.runtime;
+---
+
+
+ Astro Env
+
+
+ Astro Env
+ {JSON.stringify(runtime.env, null, 2)}
+
+ API_URL
+ {API_URL}
+
+
+ PORT
+ {PORT}
+
+
+ API_SECRET
+ {API_SECRET}
+
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/tsconfig.json b/packages/integrations/cloudflare/test/fixtures/astro-env/tsconfig.json
new file mode 100644
index 000000000000..c02b48a37e86
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "astro/tsconfigs/strict"
+}
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/astro-env/wrangler.toml b/packages/integrations/cloudflare/test/fixtures/astro-env/wrangler.toml
new file mode 100644
index 000000000000..121ab5993ac1
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/astro-env/wrangler.toml
@@ -0,0 +1,5 @@
+name = "astro-env"
+
+[vars]
+API_URL = "https://google.de"
+PORT = 4322
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs
new file mode 100644
index 000000000000..7c98bbb98803
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/astro.config.mjs
@@ -0,0 +1,9 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ adapter: cloudflare({
+ imageService: 'compile',
+ }),
+ output: 'static',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json b/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json
new file mode 100644
index 000000000000..4dd1c0bb70ad
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-compile-image-service",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md
new file mode 100644
index 000000000000..01654f3eacb6
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/index.md
@@ -0,0 +1,5 @@
+---
+image: './placeholder.jpg'
+---
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpg b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpg
new file mode 100644
index 000000000000..f4fc88e293c2
Binary files /dev/null and b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/blog/post/placeholder.jpg differ
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts
new file mode 100644
index 000000000000..ce06042f6ae3
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/content/config.ts
@@ -0,0 +1,23 @@
+import type { ImageMetadata } from 'astro';
+import { defineCollection, z } from 'astro:content';
+
+const blog = defineCollection({
+ schema: ({ image }) =>
+ z.object({
+ image: z
+ .string()
+ .regex(/^https:.*/)
+ .transform(
+ (url) =>
+ ({
+ src: url,
+ width: 1200,
+ height: 630,
+ format: 'jpeg',
+ }) satisfies ImageMetadata
+ )
+ .or(image()),
+ }),
+});
+
+export const collections = { blog };
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts
new file mode 100644
index 000000000000..9bc5cb41c24e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro
new file mode 100644
index 000000000000..f5f8ed847951
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/compile-image-service/src/pages/blog/[...slug].astro
@@ -0,0 +1,34 @@
+---
+import { Image } from "astro:assets";
+import { getEntry, type CollectionEntry } from "astro:content";
+
+export const prerender = false;
+
+type Props = CollectionEntry<"blog">;
+
+const post = await getEntry("blog", Astro.params.slug!);
+if (!post) return Astro.rewrite("/404");
+
+const { Content } = await post.render();
+
+---
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/external-image-service/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/external-image-service/astro.config.mjs
new file mode 100644
index 000000000000..f8c5f63a7761
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/external-image-service/astro.config.mjs
@@ -0,0 +1,9 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ adapter: cloudflare({
+ imageService: 'cloudflare',
+ }),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json b/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json
new file mode 100644
index 000000000000..2b9646ed952a
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/external-image-service/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-external-image-service",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/external-image-service/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/external-image-service/src/env.d.ts
new file mode 100644
index 000000000000..9bc5cb41c24e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/external-image-service/src/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs
new file mode 100644
index 000000000000..38365a374fbb
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/astro.config.mjs
@@ -0,0 +1,7 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ adapter: cloudflare({}),
+ output: 'static'
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/package.json b/packages/integrations/cloudflare/test/fixtures/module-loader/package.json
new file mode 100644
index 000000000000..4abd8513c3c6
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-wasm",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/env.d.ts
new file mode 100644
index 000000000000..9bc5cb41c24e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/add/[a]/[b].ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/add/[a]/[b].ts
new file mode 100644
index 000000000000..0f09faa0a410
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/add/[a]/[b].ts
@@ -0,0 +1,20 @@
+import { type APIContext } from 'astro';
+// @ts-ignore
+import mod from '../../../util/add.wasm?module';
+
+const addModule: any = new WebAssembly.Instance(mod);
+
+export const prerender = false;
+
+export async function GET(
+ context: APIContext
+): Promise {
+ const a = Number.parseInt(context.params.a!);
+ const b = Number.parseInt(context.params.b!);
+ return new Response(JSON.stringify({ answer: addModule.exports.add(a, b) }), {
+ status: 200,
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/bin.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/bin.ts
new file mode 100644
index 000000000000..a4e097782cbe
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/bin.ts
@@ -0,0 +1,16 @@
+import { type APIContext } from 'astro';
+
+import data from '../util/file.bin';
+
+export const prerender = false;
+
+export async function GET(
+ context: APIContext
+): Promise {
+ return new Response(data, {
+ status: 200,
+ headers: {
+ 'Content-Type': 'binary/octet-stream',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/compound.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/compound.ts
new file mode 100644
index 000000000000..9dde1838060b
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/compound.ts
@@ -0,0 +1,17 @@
+
+import { type APIContext } from 'astro';
+
+import text from '../util/file.1.md.txt';
+
+export const prerender = false;
+
+export async function GET(
+ context: APIContext
+): Promise {
+ return new Response(text, {
+ status: 200,
+ headers: {
+ 'Content-Type': 'text/plain; charset=utf-8',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/hybrid.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/hybrid.ts
new file mode 100644
index 000000000000..14d3d0fbe82f
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/hybrid.ts
@@ -0,0 +1,16 @@
+import { type APIContext } from 'astro';
+// @ts-ignore
+import mod from '../util/add.wasm';
+
+const addModule: any = new WebAssembly.Instance(mod);
+
+export async function GET(
+ context: APIContext
+): Promise {
+ return new Response(JSON.stringify({ answer: addModule.exports.add(20, 1) }), {
+ status: 200,
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/hybridshared.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/hybridshared.ts
new file mode 100644
index 000000000000..ea04408f7f68
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/hybridshared.ts
@@ -0,0 +1,16 @@
+import { type APIContext } from 'astro';
+
+import {add} from '../util/add';
+
+export const prerender = true
+
+export async function GET(
+ context: APIContext
+): Promise {
+ return new Response(JSON.stringify({ answer: add(20, 1) }), {
+ status: 200,
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/shared/[a]/[b].ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/shared/[a]/[b].ts
new file mode 100644
index 000000000000..9a8283d85c32
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/shared/[a]/[b].ts
@@ -0,0 +1,18 @@
+import { type APIContext } from 'astro';
+import { add } from '../../../util/add';
+
+
+export const prerender = false;
+
+export async function GET(
+ context: APIContext
+): Promise {
+ const a = Number.parseInt(context.params.a ?? "0");
+ const b = Number.parseInt(context.params.b ?? "0");
+ return new Response(JSON.stringify({ answer: add(a, b) }), {
+ status: 200,
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/text.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/text.ts
new file mode 100644
index 000000000000..7306a5b067a7
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/pages/text.ts
@@ -0,0 +1,16 @@
+import { type APIContext } from 'astro';
+
+import text from '../util/file.txt';
+
+export const prerender = false;
+
+export async function GET(
+ context: APIContext
+): Promise {
+ return new Response(text, {
+ status: 200,
+ headers: {
+ 'Content-Type': 'text/plain; charset=utf-8',
+ },
+ });
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/add.ts b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/add.ts
new file mode 100644
index 000000000000..ccdb7310366f
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/add.ts
@@ -0,0 +1,8 @@
+import mod from './add.wasm';
+
+
+const addModule: any = new WebAssembly.Instance(mod);
+
+export function add(a, b) {
+ return addModule.exports.add(a, b);
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/add.wasm b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/add.wasm
new file mode 100644
index 000000000000..357f72da7a0d
Binary files /dev/null and b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/add.wasm differ
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.1.md.txt b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.1.md.txt
new file mode 100644
index 000000000000..e965047ad7c5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.1.md.txt
@@ -0,0 +1 @@
+Hello
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.bin b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.bin
new file mode 100644
index 000000000000..b0ecc2680f78
Binary files /dev/null and b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.bin differ
diff --git a/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.txt b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.txt
new file mode 100644
index 000000000000..e965047ad7c5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/module-loader/src/util/file.txt
@@ -0,0 +1 @@
+Hello
diff --git a/packages/integrations/cloudflare/test/fixtures/no-output/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/no-output/astro.config.mjs
new file mode 100644
index 000000000000..f445bcd48cb2
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/no-output/astro.config.mjs
@@ -0,0 +1,6 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ adapter: cloudflare()
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/no-output/package.json b/packages/integrations/cloudflare/test/fixtures/no-output/package.json
new file mode 100644
index 000000000000..569c30890043
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/no-output/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-no-output",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs
new file mode 100644
index 000000000000..3aaa37d9aea7
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/astro.config.mjs
@@ -0,0 +1,8 @@
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ output: 'static',
+ redirects: {
+ '/a/redirect': '/',
+ },
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/package.json b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json
new file mode 100644
index 000000000000..4ff746f02bde
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-routes-json",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/public/_redirects b/packages/integrations/cloudflare/test/fixtures/routes-json/public/_redirects
new file mode 100644
index 000000000000..14e38c465f84
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/public/_redirects
@@ -0,0 +1 @@
+/redirectme / 302
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/public/public.txt b/packages/integrations/cloudflare/test/fixtures/routes-json/public/public.txt
new file mode 100644
index 000000000000..9766475a4185
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/public/public.txt
@@ -0,0 +1 @@
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/env.d.ts
new file mode 100644
index 000000000000..2da76ba243c5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/env.d.ts
@@ -0,0 +1,2 @@
+///
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic1.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic1.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic1.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic2.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic2.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic2.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic3.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic3.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/dynamic3.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/index.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/dynamicOnly/pages/index.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/env.d.ts
new file mode 100644
index 000000000000..4e6b85c4ac1e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/pages/[id].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/pages/[id].astro
new file mode 100644
index 000000000000..1931fc8a6e5a
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/pages/[id].astro
@@ -0,0 +1,16 @@
+---
+import type { GetStaticPaths } from "astro";
+
+export const getStaticPaths = (() => {
+
+ return Array.from({length:100}).map((_, i) => ({
+ params: {
+ id: i.toString()
+ }
+ }));
+}) satisfies GetStaticPaths;
+
+const { id } = Astro.params;
+---
+
+id={id}
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/pages/dynamic.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/pages/dynamic.astro
new file mode 100644
index 000000000000..13502d70c372
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStatic/pages/dynamic.astro
@@ -0,0 +1,5 @@
+---
+export const prerender = false;
+---
+
+dynamic
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/env.d.ts
new file mode 100644
index 000000000000..4e6b85c4ac1e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/404.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/404.astro
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/[id].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/[id].astro
new file mode 100644
index 000000000000..1931fc8a6e5a
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/[id].astro
@@ -0,0 +1,16 @@
+---
+import type { GetStaticPaths } from "astro";
+
+export const getStaticPaths = (() => {
+
+ return Array.from({length:100}).map((_, i) => ({
+ params: {
+ id: i.toString()
+ }
+ }));
+}) satisfies GetStaticPaths;
+
+const { id } = Astro.params;
+---
+
+id={id}
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/dynamic.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/dynamic.astro
new file mode 100644
index 000000000000..13502d70c372
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/manyStaticWith404/pages/dynamic.astro
@@ -0,0 +1,5 @@
+---
+export const prerender = false;
+---
+
+dynamic
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/env.d.ts
new file mode 100644
index 000000000000..1fc1db4594de
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/env.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/404.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/404.astro
new file mode 100644
index 000000000000..42af67a78f67
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/404.astro
@@ -0,0 +1,3 @@
+---
+export const prerender = true;
+---
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[...rest].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[...rest].astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[...rest].astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[id].astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[id].astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/[id].astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/endpoint.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/endpoint.ts
new file mode 100644
index 000000000000..d43d0cd2a55d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/endpoint.ts
@@ -0,0 +1 @@
+export const prerender = false;
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/index.astro
new file mode 100644
index 000000000000..9766475a4185
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/a/index.astro
@@ -0,0 +1 @@
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/b/index.html b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/b/index.html
new file mode 100644
index 000000000000..9766475a4185
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/mixed/pages/b/index.html
@@ -0,0 +1 @@
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts
new file mode 100644
index 000000000000..2da76ba243c5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/env.d.ts
@@ -0,0 +1,2 @@
+///
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro
new file mode 100644
index 000000000000..42af67a78f67
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/404.astro
@@ -0,0 +1,3 @@
+---
+export const prerender = true;
+---
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic1.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic2.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/dynamicPages/dynamic3.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/index.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/dynamic.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro
new file mode 100644
index 000000000000..d5683c216b8d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/static.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro
new file mode 100644
index 000000000000..9a2306b864fa
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/dynamic.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=false;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro
new file mode 100644
index 000000000000..d5683c216b8d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/mixedPages/subfolder/static.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro
new file mode 100644
index 000000000000..d5683c216b8d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static1.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro
new file mode 100644
index 000000000000..d5683c216b8d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static2.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro
new file mode 100644
index 000000000000..d5683c216b8d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/reduceComplexity/pages/staticPages/static3.astro
@@ -0,0 +1,5 @@
+---
+export const prerender=true;
+---
+
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/env.d.ts b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/env.d.ts
new file mode 100644
index 000000000000..2da76ba243c5
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/env.d.ts
@@ -0,0 +1,2 @@
+///
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/404.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/404.astro
new file mode 100644
index 000000000000..42af67a78f67
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/404.astro
@@ -0,0 +1,3 @@
+---
+export const prerender = true;
+---
diff --git a/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/index.astro
new file mode 100644
index 000000000000..9766475a4185
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/routes-json/src/staticOnly/pages/index.astro
@@ -0,0 +1 @@
+ok
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/with-solid-js/astro.config.mjs
new file mode 100644
index 000000000000..b4358ad9925c
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/astro.config.mjs
@@ -0,0 +1,9 @@
+import cloudflare from '@astrojs/cloudflare';
+import solidJs from "@astrojs/solid-js";
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ integrations: [solidJs()],
+ adapter: cloudflare(),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
new file mode 100644
index 000000000000..9db1436ca6b3
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "@test/astro-cloudflare-with-solid-js",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "@astrojs/solid-js": "^5.0.2",
+ "astro": "workspace:*",
+ "solid-js": "^1.9.4"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/components/Component.tsx b/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/components/Component.tsx
new file mode 100644
index 000000000000..d223d4f1ca47
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/components/Component.tsx
@@ -0,0 +1 @@
+export const Component = () => Solid Content
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/env.d.ts
new file mode 100644
index 000000000000..9bc5cb41c24e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/pages/index.astro
new file mode 100644
index 000000000000..f185a95d35e1
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-solid-js/src/pages/index.astro
@@ -0,0 +1,13 @@
+---
+import {Component} from "../components/Component";
+---
+
+
+
+ Testing
+
+
+Testing
+
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/with-svelte/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/with-svelte/astro.config.mjs
new file mode 100644
index 000000000000..a98a7eade957
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-svelte/astro.config.mjs
@@ -0,0 +1,9 @@
+import cloudflare from '@astrojs/cloudflare';
+import svelte from "@astrojs/svelte";
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ integrations: [svelte()],
+ adapter: cloudflare(),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/with-svelte/package.json b/packages/integrations/cloudflare/test/fixtures/with-svelte/package.json
new file mode 100644
index 000000000000..10c6b65186a6
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-svelte/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "@test/astro-cloudflare-with-svelte",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "@astrojs/svelte": "^7.0.3",
+ "astro": "workspace:*",
+ "svelte": "^5.17.4"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/with-svelte/src/components/Component.svelte b/packages/integrations/cloudflare/test/fixtures/with-svelte/src/components/Component.svelte
new file mode 100644
index 000000000000..a8a85aeb417a
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-svelte/src/components/Component.svelte
@@ -0,0 +1 @@
+Svelte Content
diff --git a/packages/integrations/cloudflare/test/fixtures/with-svelte/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/with-svelte/src/pages/index.astro
new file mode 100644
index 000000000000..dc3e227d34ba
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-svelte/src/pages/index.astro
@@ -0,0 +1,13 @@
+---
+import Component from '../components/Component.svelte';
+---
+
+
+
+ Testing
+
+
+Testing
+
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/with-vue/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/with-vue/astro.config.mjs
new file mode 100644
index 000000000000..4a4fbd8a4bc3
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-vue/astro.config.mjs
@@ -0,0 +1,9 @@
+import cloudflare from '@astrojs/cloudflare';
+import vue from "@astrojs/vue";
+import { defineConfig } from 'astro/config';
+
+export default defineConfig({
+ integrations: [vue()],
+ adapter: cloudflare(),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/with-vue/package.json b/packages/integrations/cloudflare/test/fixtures/with-vue/package.json
new file mode 100644
index 000000000000..1192fe7810fb
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-vue/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "@test/astro-cloudflare-with-vue",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "@astrojs/vue": "^5.0.4",
+ "astro": "workspace:*",
+ "vue": "^3.5.13"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/with-vue/src/components/Component.vue b/packages/integrations/cloudflare/test/fixtures/with-vue/src/components/Component.vue
new file mode 100644
index 000000000000..70630a9a466c
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-vue/src/components/Component.vue
@@ -0,0 +1,3 @@
+
+ Vue Content
+
diff --git a/packages/integrations/cloudflare/test/fixtures/with-vue/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/with-vue/src/pages/index.astro
new file mode 100644
index 000000000000..fc04d52acd01
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/with-vue/src/pages/index.astro
@@ -0,0 +1,13 @@
+---
+import Component from '../components/Component.vue';
+---
+
+
+
+ Testing
+
+
+Testing
+
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/.dev.vars b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/.dev.vars
new file mode 100644
index 000000000000..9296c384b23f
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/.dev.vars
@@ -0,0 +1 @@
+DATABASE_URL="postgresql://lorem"
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/astro.config.mjs
new file mode 100644
index 000000000000..23896421728c
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/astro.config.mjs
@@ -0,0 +1,8 @@
+import cloudflare from '@astrojs/cloudflare';
+import { defineConfig } from 'astro/config';
+
+
+export default defineConfig({
+ adapter: cloudflare(),
+ output: 'server',
+});
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json
new file mode 100644
index 000000000000..25ab99120020
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-cloudflare-wrangler-preview-platform",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "@astrojs/cloudflare": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/src/env.d.ts b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/src/env.d.ts
new file mode 100644
index 000000000000..9bc5cb41c24e
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/src/env.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/src/pages/index.astro
new file mode 100644
index 000000000000..8a3b20925173
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/src/pages/index.astro
@@ -0,0 +1,15 @@
+---
+const runtime = Astro.locals.runtime;
+---
+
+
+ Testing
+
+
+ Testing
+ {!!runtime}
+ {!!runtime.env?.COOL}
+ {!!runtime.cf?.colo}
+ {!!runtime.caches}
+
+
diff --git a/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/wrangler.toml b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/wrangler.toml
new file mode 100644
index 000000000000..ba0fa64c4b09
--- /dev/null
+++ b/packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform/wrangler.toml
@@ -0,0 +1,4 @@
+name = "test"
+
+[vars]
+COOL = "ME"
diff --git a/packages/integrations/cloudflare/test/module-loader.test.js b/packages/integrations/cloudflare/test/module-loader.test.js
new file mode 100644
index 000000000000..a455ccdec820
--- /dev/null
+++ b/packages/integrations/cloudflare/test/module-loader.test.js
@@ -0,0 +1,72 @@
+import * as assert from 'node:assert/strict';
+import { after, before, describe, it } from 'node:test';
+import { fileURLToPath } from 'node:url';
+import zlib from 'node:zlib';
+import { astroCli, wranglerCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/module-loader/', import.meta.url);
+
+describe('CloudflareModuleLoading', () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on('data', (data) => {
+ // console.log('[stdout]', data.toString());
+ if (data.toString().includes('http://127.0.0.1:8788')) resolve();
+ });
+ wrangler.stderr.on('data', (_data) => {
+ // console.log('[stderr]', data.toString());
+ });
+ });
+ });
+
+ after((_done) => {
+ wrangler.kill();
+ });
+
+ it('can render server side', async () => {
+ const res = await fetch('http://127.0.0.1:8788/add/40/2');
+ assert.equal(res.status, 200);
+ const json = await res.json();
+ assert.deepEqual(json, { answer: 42 });
+ });
+ it('can render static', async () => {
+ const res = await fetch('http://127.0.0.1:8788/hybrid');
+ assert.equal(res.status, 200);
+ const json = await res.json();
+ assert.deepEqual(json, { answer: 21 });
+ });
+ it('can render shared', async () => {
+ const res = await fetch('http://127.0.0.1:8788/shared/40/2');
+ assert.equal(res.status, 200);
+ const json = await res.json();
+ assert.deepEqual(json, { answer: 42 });
+ });
+ it('can render static shared', async () => {
+ const res = await fetch('http://127.0.0.1:8788/hybridshared');
+ assert.equal(res.status, 200);
+ const json = await res.json();
+ assert.deepEqual(json, { answer: 21 });
+ });
+ it('can render txt', async () => {
+ const res = await fetch('http://127.0.0.1:8788/text');
+ assert.equal(res.status, 200);
+ const text = await res.text();
+ assert.equal(text, 'Hello\n');
+ });
+ it('can render binary', async () => {
+ const res = await fetch('http://127.0.0.1:8788/bin');
+ assert.equal(res.status, 200);
+ const text = zlib.gunzipSync(await res.arrayBuffer()).toString('utf-8');
+ assert.equal(text, 'Hello\n');
+ });
+ it('can render compound paths', async () => {
+ const res = await fetch('http://127.0.0.1:8788/compound');
+ assert.equal(res.status, 200);
+ const text = await res.text();
+ assert.equal(text, 'Hello\n');
+ });
+});
diff --git a/packages/integrations/cloudflare/test/routes-json.test.js b/packages/integrations/cloudflare/test/routes-json.test.js
new file mode 100644
index 000000000000..27839599d057
--- /dev/null
+++ b/packages/integrations/cloudflare/test/routes-json.test.js
@@ -0,0 +1,347 @@
+import * as assert from 'node:assert/strict';
+import { before, describe, it } from 'node:test';
+import { loadFixture } from './_test-utils.js';
+import cloudflare from '../dist/index.js';
+
+/** @type {import('./test-utils.js').Fixture} */
+describe('_routes.json generation', () => {
+ describe('of on-demand and prerenderd', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/mixed',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it('creates `include` for on-demand and `exclude` for prerenderd', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/_server-islands/*', '/_image', '/a/*'],
+ exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a', '/a/redirect', '/404', '/b'],
+ });
+ });
+ });
+
+ describe('of only on-demand', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/dynamicOnly',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it('creates a wildcard `include` and `exclude` only for static assets and redirects', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/*'],
+ exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a/*'],
+ });
+ });
+ });
+
+ describe('of only prerenderd', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/staticOnly',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it(
+ 'create only one `include` and `exclude` that are supposed to match nothing',
+ { todo: 'Review test, because the expectation is to have empty include and exclude.' },
+ async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/_server-islands/*'],
+ exclude: ['/', '/_astro/*', '/redirectme', '/public.txt', '/a/*', '/404'],
+ });
+ },
+ );
+ });
+
+ describe('with additional `include` entries', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/mixed',
+ adapter: cloudflare({
+ routes: {
+ extend: {
+ include: [{ pattern: '/another' }],
+ },
+ },
+ }),
+ });
+ await fixture.build();
+ });
+
+ it('creates `include` for functions and `exclude` for static files where needed', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/_server-islands/*', '/_image', '/a/*', '/another'],
+ exclude: ['/_astro/*', '/redirectme', '/public.txt', '/a', '/a/redirect', '/404', '/b'],
+ });
+ });
+ });
+
+ describe('with additional `exclude` entries', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/mixed',
+ adapter: cloudflare({
+ routes: {
+ extend: {
+ exclude: [{ pattern: '/another' }, { pattern: '/a/index.html' }],
+ },
+ },
+ }),
+ });
+ await fixture.build();
+ });
+
+ it('creates `include` for functions and `exclude` for static files where needed', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/_server-islands/*', '/_image', '/a/*'],
+ exclude: [
+ '/_astro/*',
+ '/redirectme',
+ '/public.txt',
+ '/a',
+ '/a/redirect',
+ '/404',
+ '/b',
+ '/another',
+ '/a/index.html',
+ ],
+ });
+ });
+ });
+
+ describe('with nested on demand and prerendered routes', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/reduceComplexity',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it('reduces the amount of include and exclude entries by applying wildcards wherever possible', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: [
+ '/',
+ '/_server-islands/*',
+ '/_image',
+ '/dynamicPages/*',
+ '/mixedPages/dynamic',
+ '/mixedPages/subfolder/dynamic',
+ ],
+ exclude: [
+ '/_astro/*',
+ '/redirectme',
+ '/public.txt',
+ '/a/*',
+ '/404',
+ '/mixedPages/static',
+ '/mixedPages/subfolder/static',
+ '/staticPages/*',
+ ],
+ });
+ });
+ });
+
+ describe('with many static files', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/manyStatic',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it('creates a wildcard `include` and `exclude` for as many static assets and redirects as possible, truncating after 100 rules', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/*'],
+ exclude: [
+ '/_astro/*',
+ '/redirectme',
+ '/public.txt',
+ '/a/*',
+ ...Array.from({ length: 95 }, (_, i) => `/${i}`),
+ ],
+ });
+ });
+ });
+
+ describe('with many static files when a static 404 is present', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/routes-json/', import.meta.url).toString(),
+ srcDir: './src/manyStaticWith404',
+ adapter: cloudflare({}),
+ });
+ await fixture.build();
+ });
+
+ it('creates `include` for on-demand and `exclude` that are supposed to match nothing', async () => {
+ const _routesJson = await fixture.readFile('/_routes.json');
+ const routes = JSON.parse(_routesJson);
+
+ assert.deepEqual(routes, {
+ version: 1,
+ include: ['/*'],
+ exclude: [
+ '/_astro/*',
+ '/redirectme',
+ '/public.txt',
+ '/a/*',
+ '/404',
+ '/0',
+ '/1',
+ '/2',
+ '/3',
+ '/4',
+ '/5',
+ '/6',
+ '/7',
+ '/8',
+ '/9',
+ '/10',
+ '/11',
+ '/12',
+ '/13',
+ '/14',
+ '/15',
+ '/16',
+ '/17',
+ '/18',
+ '/19',
+ '/20',
+ '/21',
+ '/22',
+ '/23',
+ '/24',
+ '/25',
+ '/26',
+ '/27',
+ '/28',
+ '/29',
+ '/30',
+ '/31',
+ '/32',
+ '/33',
+ '/34',
+ '/35',
+ '/36',
+ '/37',
+ '/38',
+ '/39',
+ '/40',
+ '/41',
+ '/42',
+ '/43',
+ '/44',
+ '/45',
+ '/46',
+ '/47',
+ '/48',
+ '/49',
+ '/50',
+ '/51',
+ '/52',
+ '/53',
+ '/54',
+ '/55',
+ '/56',
+ '/57',
+ '/58',
+ '/59',
+ '/60',
+ '/61',
+ '/62',
+ '/63',
+ '/64',
+ '/65',
+ '/66',
+ '/67',
+ '/68',
+ '/69',
+ '/70',
+ '/71',
+ '/72',
+ '/73',
+ '/74',
+ '/75',
+ '/76',
+ '/77',
+ '/78',
+ '/79',
+ '/80',
+ '/81',
+ '/82',
+ '/83',
+ '/84',
+ '/85',
+ '/86',
+ '/87',
+ '/88',
+ '/89',
+ '/90',
+ '/91',
+ '/92',
+ '/93',
+ ],
+ });
+ });
+ });
+});
diff --git a/packages/integrations/cloudflare/test/with-solid-js.test.js b/packages/integrations/cloudflare/test/with-solid-js.test.js
new file mode 100644
index 000000000000..46527442269b
--- /dev/null
+++ b/packages/integrations/cloudflare/test/with-solid-js.test.js
@@ -0,0 +1,37 @@
+import * as assert from 'node:assert/strict';
+import { after, before, describe, it } from 'node:test';
+import { fileURLToPath } from 'node:url';
+import * as cheerio from 'cheerio';
+import { astroCli, wranglerCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/with-solid-js/', import.meta.url);
+
+describe('SolidJS', () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on('data', (data) => {
+ // console.log('[stdout]', data.toString());
+ if (data.toString().includes('http://127.0.0.1:8788')) resolve();
+ });
+ wrangler.stderr.on('data', (_data) => {
+ // console.log('[stderr]', data.toString());
+ });
+ });
+ });
+
+ after((_done) => {
+ wrangler.kill();
+ });
+
+ it('renders the solid component', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ assert.equal(res.status, 200);
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('.solid').text(), 'Solid Content');
+ });
+});
diff --git a/packages/integrations/cloudflare/test/with-svelte.test.js b/packages/integrations/cloudflare/test/with-svelte.test.js
new file mode 100644
index 000000000000..4f1e72a7df3f
--- /dev/null
+++ b/packages/integrations/cloudflare/test/with-svelte.test.js
@@ -0,0 +1,37 @@
+import * as assert from 'node:assert/strict';
+import { after, before, describe, it } from 'node:test';
+import { fileURLToPath } from 'node:url';
+import * as cheerio from 'cheerio';
+import { astroCli, wranglerCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/with-svelte/', import.meta.url);
+
+describe('Svelte', () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on('data', (data) => {
+ // console.log('[stdout]', data.toString());
+ if (data.toString().includes('http://127.0.0.1:8788')) resolve();
+ });
+ wrangler.stderr.on('data', (_data) => {
+ // console.log('[stderr]', data.toString());
+ });
+ });
+ });
+
+ after((_done) => {
+ wrangler.kill();
+ });
+
+ it('renders the svelte component', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ assert.equal(res.status, 200);
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('.svelte').text(), 'Svelte Content');
+ });
+});
diff --git a/packages/integrations/cloudflare/test/with-vue.test.js b/packages/integrations/cloudflare/test/with-vue.test.js
new file mode 100644
index 000000000000..8e7befae65d0
--- /dev/null
+++ b/packages/integrations/cloudflare/test/with-vue.test.js
@@ -0,0 +1,37 @@
+import * as assert from 'node:assert/strict';
+import { after, before, describe, it } from 'node:test';
+import { fileURLToPath } from 'node:url';
+import * as cheerio from 'cheerio';
+import { astroCli, wranglerCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/with-vue/', import.meta.url);
+
+describe('Vue', () => {
+ let wrangler;
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on('data', (data) => {
+ // console.log('[stdout]', data.toString());
+ if (data.toString().includes('http://127.0.0.1:8788')) resolve();
+ });
+ wrangler.stderr.on('data', (_data) => {
+ // console.log('[stderr]', data.toString());
+ });
+ });
+ });
+
+ after((_done) => {
+ wrangler.kill();
+ });
+
+ it('renders the vue component', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ assert.equal(res.status, 200);
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('.vue').text(), 'Vue Content');
+ });
+});
diff --git a/packages/integrations/cloudflare/test/wrangler-preview-platform.test.js b/packages/integrations/cloudflare/test/wrangler-preview-platform.test.js
new file mode 100644
index 000000000000..bf1fb5c4724d
--- /dev/null
+++ b/packages/integrations/cloudflare/test/wrangler-preview-platform.test.js
@@ -0,0 +1,58 @@
+import * as assert from 'node:assert/strict';
+import { after, before, describe, it } from 'node:test';
+import { fileURLToPath } from 'node:url';
+import * as cheerio from 'cheerio';
+import { astroCli, wranglerCli } from './_test-utils.js';
+
+const root = new URL('./fixtures/wrangler-preview-platform/', import.meta.url);
+
+describe('WranglerPreviewPlatform', () => {
+ let wrangler;
+
+ before(async () => {
+ await astroCli(fileURLToPath(root), 'build');
+
+ wrangler = wranglerCli(fileURLToPath(root));
+ await new Promise((resolve) => {
+ wrangler.stdout.on('data', (data) => {
+ // console.log('[stdout]', data.toString());
+ if (data.toString().includes('http://127.0.0.1:8788')) resolve();
+ });
+ wrangler.stderr.on('data', (_data) => {
+ // console.log('[stderr]', data.toString());
+ });
+ });
+ });
+
+ after((_done) => {
+ wrangler.kill();
+ });
+
+ it('exists', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('#hasRuntime').text().includes('true'), true);
+ });
+
+ it('has environment variables', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('#hasENV').text().includes('true'), true);
+ });
+
+ it('has Cloudflare request object', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('#hasCF').text().includes('true'), true);
+ });
+
+ it('has Cloudflare cache', async () => {
+ const res = await fetch('http://127.0.0.1:8788/');
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ assert.equal($('#hasCACHES').text().includes('true'), true);
+ });
+});
diff --git a/packages/integrations/cloudflare/tsconfig.json b/packages/integrations/cloudflare/tsconfig.json
new file mode 100644
index 000000000000..1504b4b6dfa4
--- /dev/null
+++ b/packages/integrations/cloudflare/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "outDir": "./dist"
+ }
+}
diff --git a/packages/integrations/node/src/log-listening-on.ts b/packages/integrations/node/src/log-listening-on.ts
index f78b5b7f19c8..b7a9f0bf9127 100644
--- a/packages/integrations/node/src/log-listening-on.ts
+++ b/packages/integrations/node/src/log-listening-on.ts
@@ -31,11 +31,9 @@ function getResolvedHostForHttpServer(host: string | boolean | undefined) {
if (host === false) {
// Use a secure default
return 'localhost';
- // biome-ignore lint/style/noUselessElse:
} else if (host === true) {
// If passed --host in the CLI without arguments
return undefined; // undefined typically means 0.0.0.0 or :: (listen on all IPs)
- // biome-ignore lint/style/noUselessElse:
} else {
return host;
}
@@ -48,7 +46,6 @@ interface NetworkAddressOpt {
// this code from vite https://github.com/vitejs/vite/blob/d09bbd093a4b893e78f0bbff5b17c7cf7821f403/packages/vite/src/node/utils.ts#L892-L914
export function getNetworkAddress(
- // biome-ignore lint/style/useDefaultParameterLast:
protocol: 'http' | 'https' = 'http',
hostname: string | undefined,
port: number,
@@ -58,12 +55,10 @@ export function getNetworkAddress(
local: [],
network: [],
};
- // biome-ignore lint/complexity/noForEach:
Object.values(os.networkInterfaces())
.flatMap((nInterface) => nInterface ?? [])
.filter(
(detail) =>
- // biome-ignore lint/complexity/useOptionalChain:
detail &&
detail.address &&
(detail.family === 'IPv4' ||
diff --git a/packages/integrations/vercel/CHANGELOG.md b/packages/integrations/vercel/CHANGELOG.md
index f60e0ff75a68..93d9830280b6 100644
--- a/packages/integrations/vercel/CHANGELOG.md
+++ b/packages/integrations/vercel/CHANGELOG.md
@@ -1424,7 +1424,7 @@
{ darkMode: true },
{
expires: '1 month',
- }
+ },
);
const prefs = Astro.cookies.get('prefs').json();
diff --git a/packages/integrations/vercel/package.json b/packages/integrations/vercel/package.json
index c7206fdb3524..f64350839713 100644
--- a/packages/integrations/vercel/package.json
+++ b/packages/integrations/vercel/package.json
@@ -10,7 +10,10 @@
"url": "https://github.com/withastro/adapters.git",
"directory": "packages/vercel"
},
- "keywords": ["withastro", "astro-adapter"],
+ "keywords": [
+ "withastro",
+ "astro-adapter"
+ ],
"bugs": "https://github.com/withastro/adapters/issues",
"homepage": "https://docs.astro.build/en/guides/integrations-guide/vercel/",
"exports": {
@@ -25,11 +28,18 @@
},
"typesVersions": {
"*": {
- "serverless": ["dist/serverless/adapter.d.ts"],
- "static": ["dist/static/adapter.d.ts"]
+ "serverless": [
+ "dist/serverless/adapter.d.ts"
+ ],
+ "static": [
+ "dist/static/adapter.d.ts"
+ ]
}
},
- "files": ["dist", "types.d.ts"],
+ "files": [
+ "dist",
+ "types.d.ts"
+ ],
"scripts": {
"build": "astro-scripts build \"src/**/*.ts\" && tsc",
"test": "astro-scripts test --timeout 50000 \"test/**/!(hosted).test.js\"",
diff --git a/packages/integrations/vercel/src/image/shared.ts b/packages/integrations/vercel/src/image/shared.ts
index e21b79e6a7b9..eb9681243d16 100644
--- a/packages/integrations/vercel/src/image/shared.ts
+++ b/packages/integrations/vercel/src/image/shared.ts
@@ -68,7 +68,7 @@ export function getAstroImageConfig(
imagesConfig: VercelImageConfig | undefined,
command: string,
devImageService: DevImageService,
- astroImageConfig: AstroConfig['image']
+ astroImageConfig: AstroConfig['image'],
) {
let devService = '@astrojs/vercel/dev-image-service';
@@ -102,7 +102,7 @@ export function getAstroImageConfig(
export function sharedValidateOptions(
options: ImageTransform,
serviceConfig: Record,
- mode: 'development' | 'production'
+ mode: 'development' | 'production',
) {
const vercelImageOptions = serviceConfig as VercelImageConfig;
diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts
index db61b0d3c824..4aeb3e568d20 100644
--- a/packages/integrations/vercel/src/index.ts
+++ b/packages/integrations/vercel/src/index.ts
@@ -205,7 +205,7 @@ export default function vercelAdapter({
'head-inline',
await getInjectableWebAnalyticsContent({
mode: command === 'dev' ? 'development' : 'production',
- })
+ }),
);
}
@@ -240,7 +240,7 @@ export default function vercelAdapter({
imagesConfig,
command,
devImageService,
- config.image
+ config.image,
),
});
},
@@ -253,10 +253,10 @@ export default function vercelAdapter({
if (_buildOutput === 'server') {
if (maxDuration && maxDuration > 900) {
logger.warn(
- `maxDuration is set to ${maxDuration} seconds, which is longer than the maximum allowed duration of 900 seconds.`
+ `maxDuration is set to ${maxDuration} seconds, which is longer than the maximum allowed duration of 900 seconds.`,
);
logger.warn(
- `Please make sure that your plan allows for this duration. See https://vercel.com/docs/functions/serverless-functions/runtimes#maxduration for more information.`
+ `Please make sure that your plan allows for this duration. See https://vercel.com/docs/functions/serverless-functions/runtimes#maxduration for more information.`,
);
}
const vercelConfigPath = new URL('vercel.json', config.root);
@@ -276,7 +276,7 @@ export default function vercelAdapter({
Your "vercel.json" \`trailingSlash\` configuration (set to \`${vercelConfig.trailingSlash}\`) will conflict with your Astro \`trailingSlash\` configuration (set to \`${JSON.stringify(config.trailingSlash)}\`).
This would cause infinite redirects or duplicate content issues.
Please remove the \`trailingSlash\` configuration from your \`vercel.json\` file or Astro config.
-`
+`,
);
}
} catch (_err) {
@@ -289,7 +289,7 @@ export default function vercelAdapter({
edgeMiddleware,
middlewareSecret,
skewProtection,
- })
+ }),
);
} else {
setAdapter(
@@ -298,7 +298,7 @@ export default function vercelAdapter({
middlewareSecret: '',
skewProtection,
buildOutput: _buildOutput,
- })
+ }),
);
}
_config = config;
@@ -319,7 +319,7 @@ export default function vercelAdapter({
patternRegex: routeData.pattern,
},
url,
- ])
+ ]),
);
_middlewareEntryPoint = middlewareEntryPoint;
},
@@ -376,7 +376,7 @@ export default function vercelAdapter({
includeFiles,
logger,
outDir,
- maxDuration
+ maxDuration,
);
// Multiple entrypoint support
@@ -435,7 +435,7 @@ export default function vercelAdapter({
await builder.buildMiddlewareFolder(
_middlewareEntryPoint,
MIDDLEWARE_PATH,
- middlewareSecret
+ middlewareSecret,
);
}
}
@@ -492,7 +492,7 @@ export default function vercelAdapter({
if (error) {
throw new AstroError(
`Error generating redirects: ${error.message}`,
- error.link ? `${error.action ?? 'More info'}: ${error.link}` : undefined
+ error.link ? `${error.action ?? 'More info'}: ${error.link}` : undefined,
);
}
@@ -521,7 +521,7 @@ export default function vercelAdapter({
`Error generating routes: ${normalized.error.message}`,
normalized.error.link
? `${normalized.error.action ?? 'More info'}: ${normalized.error.link}`
- : undefined
+ : undefined,
);
}
@@ -567,7 +567,7 @@ class VercelBuilder {
readonly logger: AstroIntegrationLogger,
readonly outDir: URL,
readonly maxDuration?: number,
- readonly runtime = getRuntime(process, logger)
+ readonly runtime = getRuntime(process, logger),
) {}
async buildServerlessFolder(entry: URL, functionName: string, root: URL) {
@@ -587,7 +587,7 @@ class VercelBuilder {
logger,
root,
},
- NTF_CACHE
+ NTF_CACHE,
);
// Enable ESM
@@ -609,7 +609,7 @@ class VercelBuilder {
await this.buildServerlessFolder(entry, functionName, root);
const prerenderConfig = new URL(
`./functions/${functionName}.prerender-config.json`,
- this.outDir
+ this.outDir,
);
// https://vercel.com/docs/build-output-api/v3/primitives#prerender-configuration-file
await writeJson(prerenderConfig, {
@@ -629,7 +629,7 @@ class VercelBuilder {
new URL(VERCEL_EDGE_MIDDLEWARE_FILE, this.config.srcDir),
new URL('./middleware.mjs', functionFolder),
middlewareSecret,
- this.logger
+ this.logger,
);
await writeJson(new URL(`./.vc-config.json`, functionFolder), {
@@ -648,7 +648,7 @@ function getRuntime(process: NodeJS.Process, logger: AstroIntegrationLogger): Ru
`\n` +
`\tThe local Node.js version (${major}) is not supported by Vercel Serverless Functions.\n` +
`\tYour project will use Node.js 18 as the runtime instead.\n` +
- `\tConsider switching your local version to 18.\n`
+ `\tConsider switching your local version to 18.\n`,
);
return 'nodejs18.x';
}
@@ -658,26 +658,26 @@ function getRuntime(process: NodeJS.Process, logger: AstroIntegrationLogger): Ru
if (support.status === 'retiring') {
if (support.warnDate && new Date() >= support.warnDate) {
logger.warn(
- `Your project is being built for Node.js ${major} as the runtime, which is retiring by ${support.removal}.`
+ `Your project is being built for Node.js ${major} as the runtime, which is retiring by ${support.removal}.`,
);
}
return `nodejs${major}.x`;
}
if (support.status === 'beta') {
logger.warn(
- `Your project is being built for Node.js ${major} as the runtime, which is currently in beta for Vercel Serverless Functions.`
+ `Your project is being built for Node.js ${major} as the runtime, which is currently in beta for Vercel Serverless Functions.`,
);
return `nodejs${major}.x`;
}
if (support.status === 'deprecated') {
const removeDate = new Intl.DateTimeFormat(undefined, { dateStyle: 'long' }).format(
- support.removal
+ support.removal,
);
logger.warn(
`\n` +
`\tYour project is being built for Node.js ${major} as the runtime.\n` +
`\tThis version is deprecated by Vercel Serverless Functions, and scheduled to be disabled on ${removeDate}.\n` +
- `\tConsider upgrading your local version to 18.\n`
+ `\tConsider upgrading your local version to 18.\n`,
);
return `nodejs${major}.x`;
}
diff --git a/packages/integrations/vercel/src/lib/nft.ts b/packages/integrations/vercel/src/lib/nft.ts
index d72979e890bc..4381943bb7a5 100644
--- a/packages/integrations/vercel/src/lib/nft.ts
+++ b/packages/integrations/vercel/src/lib/nft.ts
@@ -22,7 +22,7 @@ export async function copyDependenciesToFunction(
root: URL;
},
// we want to pass the caching by reference, and not by value
- cache: object
+ cache: object,
): Promise<{ handler: string }> {
const entryPath = fileURLToPath(entry);
logger.info(`Bundling function ${relativePath(fileURLToPath(outDir), entryPath)}`);
@@ -52,11 +52,11 @@ export async function copyDependenciesToFunction(
if (entryPath === file) {
logger.debug(
- `[@astrojs/vercel] The module "${module}" couldn't be resolved. This may not be a problem, but it's worth checking.`
+ `[@astrojs/vercel] The module "${module}" couldn't be resolved. This may not be a problem, but it's worth checking.`,
);
} else {
logger.debug(
- `[@astrojs/vercel] The module "${module}" inside the file "${file}" couldn't be resolved. This may not be a problem, but it's worth checking.`
+ `[@astrojs/vercel] The module "${module}" inside the file "${file}" couldn't be resolved. This may not be a problem, but it's worth checking.`,
);
}
}
@@ -73,7 +73,7 @@ export async function copyDependenciesToFunction(
const commonAncestor = await copyFilesToFolder(
[...result.fileList].map((file) => new URL(file, base)).concat(includeFiles),
outDir,
- excludeFiles
+ excludeFiles,
);
return {
diff --git a/packages/integrations/vercel/src/lib/searchRoot.ts b/packages/integrations/vercel/src/lib/searchRoot.ts
index 832f6e498b67..e630c8b43ee4 100644
--- a/packages/integrations/vercel/src/lib/searchRoot.ts
+++ b/packages/integrations/vercel/src/lib/searchRoot.ts
@@ -88,7 +88,7 @@ export function searchForPackageRoot(current: string, root = current): string {
*/
export function searchForWorkspaceRoot(
current: string,
- root = searchForPackageRoot(current)
+ root = searchForPackageRoot(current),
): string {
if (hasRootFile(current)) return current;
if (hasWorkspacePackageJSON(current)) return current;
diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts
index 86464f89beb5..1c12f611a9b6 100644
--- a/packages/integrations/vercel/src/serverless/adapter.ts
+++ b/packages/integrations/vercel/src/serverless/adapter.ts
@@ -4,7 +4,7 @@ import vercelIntegration from '../index.js';
export default function serverless(config: VercelServerlessConfig): AstroIntegration {
console.warn(
- 'The "@astrojs/vercel/serverless" import is deprecated and will be removed in a future release. Please import from "@astrojs/vercel" instead.'
+ 'The "@astrojs/vercel/serverless" import is deprecated and will be removed in a future release. Please import from "@astrojs/vercel" instead.',
);
return vercelIntegration(config);
}
diff --git a/packages/integrations/vercel/src/serverless/entrypoint.ts b/packages/integrations/vercel/src/serverless/entrypoint.ts
index f1f1f256cf25..5b64fa506527 100644
--- a/packages/integrations/vercel/src/serverless/entrypoint.ts
+++ b/packages/integrations/vercel/src/serverless/entrypoint.ts
@@ -15,7 +15,7 @@ setGetEnv((key) => process.env[key]);
export const createExports = (
manifest: SSRManifest,
- { middlewareSecret, skewProtection }: { middlewareSecret: string; skewProtection: boolean }
+ { middlewareSecret, skewProtection }: { middlewareSecret: string; skewProtection: boolean },
) => {
const app = new NodeApp(manifest);
const handler = async (req: IncomingMessage, res: ServerResponse) => {
diff --git a/packages/integrations/vercel/src/serverless/middleware.ts b/packages/integrations/vercel/src/serverless/middleware.ts
index 3980186f5ba3..b1927ca3bc85 100644
--- a/packages/integrations/vercel/src/serverless/middleware.ts
+++ b/packages/integrations/vercel/src/serverless/middleware.ts
@@ -30,13 +30,13 @@ export async function generateEdgeMiddleware(
vercelEdgeMiddlewareHandlerPath: URL,
outPath: URL,
middlewareSecret: string,
- logger: AstroIntegrationLogger
+ logger: AstroIntegrationLogger,
): Promise {
const code = edgeMiddlewareTemplate(
astroMiddlewareEntryPointPath,
vercelEdgeMiddlewareHandlerPath,
middlewareSecret,
- logger
+ logger,
);
// https://vercel.com/docs/concepts/functions/edge-middleware#create-edge-middleware
const bundledFilePath = fileURLToPath(outPath);
@@ -77,17 +77,17 @@ function edgeMiddlewareTemplate(
astroMiddlewareEntryPointPath: URL,
vercelEdgeMiddlewareHandlerPath: URL,
middlewareSecret: string,
- logger: AstroIntegrationLogger
+ logger: AstroIntegrationLogger,
) {
const middlewarePath = JSON.stringify(
- fileURLToPath(astroMiddlewareEntryPointPath).replace(/\\/g, '/')
+ fileURLToPath(astroMiddlewareEntryPointPath).replace(/\\/g, '/'),
);
const filePathEdgeMiddleware = fileURLToPath(vercelEdgeMiddlewareHandlerPath);
let handlerTemplateImport = '';
let handlerTemplateCall = '{}';
if (existsSync(filePathEdgeMiddleware + '.js') || existsSync(filePathEdgeMiddleware + '.ts')) {
logger.warn(
- 'Usage of `vercel-edge-middleware.js` is deprecated. You can now use the `waitUntil(promise)` function directly as `ctx.locals.waitUntil(promise)`.'
+ 'Usage of `vercel-edge-middleware.js` is deprecated. You can now use the `waitUntil(promise)` function directly as `ctx.locals.waitUntil(promise)`.',
);
const stringified = JSON.stringify(filePathEdgeMiddleware.replace(/\\/g, '/'));
handlerTemplateImport = `import handler from ${stringified}`;
diff --git a/packages/integrations/vercel/src/static/adapter.ts b/packages/integrations/vercel/src/static/adapter.ts
index 348994902c36..d140f354d06c 100644
--- a/packages/integrations/vercel/src/static/adapter.ts
+++ b/packages/integrations/vercel/src/static/adapter.ts
@@ -4,7 +4,7 @@ import vercelIntegration from '../index.js';
export default function staticAdapter(config: VercelServerlessConfig): AstroIntegration {
console.warn(
- 'The "@astrojs/vercel/static" import is deprecated and will be removed in a future release. Please import from "@astrojs/vercel" instead.'
+ 'The "@astrojs/vercel/static" import is deprecated and will be removed in a future release. Please import from "@astrojs/vercel" instead.',
);
return vercelIntegration(config);
}
diff --git a/packages/integrations/vercel/test/edge-middleware.test.js b/packages/integrations/vercel/test/edge-middleware.test.js
index 50c282a3773e..6a4ac525f589 100644
--- a/packages/integrations/vercel/test/edge-middleware.test.js
+++ b/packages/integrations/vercel/test/edge-middleware.test.js
@@ -14,7 +14,7 @@ describe('Vercel edge middleware', () => {
it('an edge function is created', async () => {
const contents = await build.readFile(
- '../.vercel/output/functions/_middleware.func/.vc-config.json'
+ '../.vercel/output/functions/_middleware.func/.vc-config.json',
);
const contentsJSON = JSON.parse(contents);
assert.equal(contentsJSON.runtime, 'edge');
@@ -26,14 +26,14 @@ describe('Vercel edge middleware', () => {
const { routes } = JSON.parse(contents);
assert.equal(
routes.some((route) => route.dest === '_middleware'),
- true
+ true,
);
});
it('edge sets Set-Cookie headers', async () => {
const entry = new URL(
'../.vercel/output/functions/_middleware.func/middleware.mjs',
- build.config.outDir
+ build.config.outDir,
);
const module = await import(entry);
const request = new Request('http://example.com/foo');
@@ -50,7 +50,7 @@ describe('Vercel edge middleware', () => {
await fixture.build();
const contents = await fixture.readFile(
// this is abysmal...
- '../.vercel/output/functions/render.func/www/withastro/astro/packages/vercel/test/fixtures/middleware-with-edge-file/dist/middleware.mjs'
+ '../.vercel/output/functions/render.func/www/withastro/astro/packages/vercel/test/fixtures/middleware-with-edge-file/dist/middleware.mjs',
);
// assert.equal(contents.includes('title:')).to.be.true;
// chaiJestSnapshot.setTestName('Middleware with handler file');
@@ -65,7 +65,7 @@ describe('Vercel edge middleware', () => {
await fixture.build();
const contents = await fixture.readFile(
// this is abysmal...
- '../.vercel/output/functions/render.func/www/withastro/astro/packages/vercel/test/fixtures/middleware-without-edge-file/dist/middleware.mjs'
+ '../.vercel/output/functions/render.func/www/withastro/astro/packages/vercel/test/fixtures/middleware-without-edge-file/dist/middleware.mjs',
);
// assert.equal(contents.includes('title:')).to.be.false;
// chaiJestSnapshot.setTestName('Middleware without handler file');
diff --git a/packages/integrations/vercel/test/hosted/hosted.test.js b/packages/integrations/vercel/test/hosted/hosted.test.js
index d7c2ece2065c..b5f6b876e827 100644
--- a/packages/integrations/vercel/test/hosted/hosted.test.js
+++ b/packages/integrations/vercel/test/hosted/hosted.test.js
@@ -7,7 +7,7 @@ describe('Hosted Vercel Tests', () => {
it('Image endpoint works', async () => {
const image = await fetch(
// biome-ignore lint/style/useTemplate:
- VERCEL_TEST_URL + '/_image?href=%2F_astro%2Fpenguin.e9c64733.png&w=300&f=webp'
+ VERCEL_TEST_URL + '/_image?href=%2F_astro%2Fpenguin.e9c64733.png&w=300&f=webp',
);
assert.equal(image.status, 200);
diff --git a/packages/integrations/vercel/test/isr.test.js b/packages/integrations/vercel/test/isr.test.js
index 10da611926c6..1e5b329ef6dd 100644
--- a/packages/integrations/vercel/test/isr.test.js
+++ b/packages/integrations/vercel/test/isr.test.js
@@ -15,7 +15,7 @@ describe('ISR', () => {
it('generates expected prerender config', async () => {
const vcConfig = JSON.parse(
- await fixture.readFile('../.vercel/output/functions/_isr.prerender-config.json')
+ await fixture.readFile('../.vercel/output/functions/_isr.prerender-config.json'),
);
assert.deepEqual(vcConfig, {
expiration: 120,
diff --git a/packages/integrations/vercel/test/max-duration.test.js b/packages/integrations/vercel/test/max-duration.test.js
index 2a7698663f98..d5e26fc1a999 100644
--- a/packages/integrations/vercel/test/max-duration.test.js
+++ b/packages/integrations/vercel/test/max-duration.test.js
@@ -15,7 +15,7 @@ describe('maxDuration', () => {
it('makes it to vercel function configuration', async () => {
const vcConfig = JSON.parse(
- await fixture.readFile('../.vercel/output/functions/_render.func/.vc-config.json')
+ await fixture.readFile('../.vercel/output/functions/_render.func/.vc-config.json'),
);
assert.equal(vcConfig.maxDuration, 60);
});
diff --git a/packages/integrations/vercel/test/prerendered-error-pages.test.js b/packages/integrations/vercel/test/prerendered-error-pages.test.js
index a20233932592..79a1f4aafe0f 100644
--- a/packages/integrations/vercel/test/prerendered-error-pages.test.js
+++ b/packages/integrations/vercel/test/prerendered-error-pages.test.js
@@ -21,7 +21,7 @@ describe('prerendered error pages routing', () => {
src: '^/.*$',
dest: '/404.html',
status: 404,
- }
+ },
);
});
});
diff --git a/packages/integrations/vercel/test/serverless-prerender.test.js b/packages/integrations/vercel/test/serverless-prerender.test.js
index 2752123ab31c..662e74ac39fd 100644
--- a/packages/integrations/vercel/test/serverless-prerender.test.js
+++ b/packages/integrations/vercel/test/serverless-prerender.test.js
@@ -20,7 +20,7 @@ describe('Serverless prerender', () => {
it('outDir is tree-shaken if not needed', async () => {
const [file] = await fixture.glob(
- '../.vercel/output/functions/_render.func/packages/vercel/test/fixtures/serverless-prerender/.vercel/output/_functions/pages/_image.astro.mjs'
+ '../.vercel/output/functions/_render.func/packages/vercel/test/fixtures/serverless-prerender/.vercel/output/_functions/pages/_image.astro.mjs',
);
try {
await fixture.readFile(file);
@@ -34,8 +34,8 @@ describe('Serverless prerender', () => {
it.skip('includeFiles work', async () => {
assert.ok(
await fixture.readFile(
- '../.vercel/output/functions/render.func/packages/vercel/test/fixtures/serverless-prerender/dist/middleware.mjs'
- )
+ '../.vercel/output/functions/render.func/packages/vercel/test/fixtures/serverless-prerender/dist/middleware.mjs',
+ ),
);
});
});
diff --git a/packages/integrations/vercel/test/streaming.test.js b/packages/integrations/vercel/test/streaming.test.js
index a0172a7e6abb..1e4b0f111e05 100644
--- a/packages/integrations/vercel/test/streaming.test.js
+++ b/packages/integrations/vercel/test/streaming.test.js
@@ -15,7 +15,7 @@ describe('streaming', () => {
it('makes it to vercel function configuration', async () => {
const vcConfig = JSON.parse(
- await fixture.readFile('../.vercel/output/functions/_render.func/.vc-config.json')
+ await fixture.readFile('../.vercel/output/functions/_render.func/.vc-config.json'),
);
assert.equal(vcConfig.supportsResponseStreaming, true);
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index eeefb4b7df20..96eb798f9a84 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4292,7 +4292,7 @@ importers:
version: 1.0.2
drizzle-orm:
specifier: ^0.31.2
- version: 0.31.4(@libsql/client@0.14.0)(@types/react@18.3.18)(react@19.0.0)
+ version: 0.31.4(@cloudflare/workers-types@4.20250204.0)(@libsql/client@0.14.0)(@types/react@18.3.18)(react@19.0.0)
github-slugger:
specifier: ^2.0.0
version: 2.0.0
@@ -4544,7 +4544,185 @@ importers:
specifier: workspace:*
version: link:../../../../../astro
- packages/integrations/cloudflare: {}
+ packages/integrations/cloudflare:
+ dependencies:
+ '@astrojs/internal-helpers':
+ specifier: 0.4.2
+ version: 0.4.2
+ '@astrojs/underscore-redirects':
+ specifier: ^0.6.0
+ version: link:../../underscore-redirects
+ '@cloudflare/workers-types':
+ specifier: ^4.20250109.0
+ version: 4.20250204.0
+ esbuild:
+ specifier: ^0.24.0
+ version: 0.24.2
+ estree-walker:
+ specifier: ^3.0.3
+ version: 3.0.3
+ magic-string:
+ specifier: ^0.30.17
+ version: 0.30.17
+ miniflare:
+ specifier: ^3.20241230.1
+ version: 3.20250129.0
+ tiny-glob:
+ specifier: ^0.2.9
+ version: 0.2.9
+ vite:
+ specifier: ^6.0.7
+ version: 6.0.11(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.83.4)(yaml@2.5.1)
+ wrangler:
+ specifier: ^3.101.0
+ version: 3.107.3(@cloudflare/workers-types@4.20250204.0)
+ devDependencies:
+ astro:
+ specifier: workspace:*
+ version: link:../../astro
+ astro-scripts:
+ specifier: workspace:*
+ version: link:../../../scripts
+ cheerio:
+ specifier: 1.0.0
+ version: 1.0.0
+ execa:
+ specifier: ^8.0.1
+ version: 8.0.1
+ fast-glob:
+ specifier: ^3.3.3
+ version: 3.3.3
+ rollup:
+ specifier: ^4.30.1
+ version: 4.34.2
+ strip-ansi:
+ specifier: ^7.1.0
+ version: 7.1.0
+
+ packages/integrations/cloudflare/test/fixtures/astro-dev-platform:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+ devDependencies:
+ wrangler:
+ specifier: ^3.101.0
+ version: 3.107.3(@cloudflare/workers-types@4.20250204.0)
+
+ packages/integrations/cloudflare/test/fixtures/astro-env:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+ devDependencies:
+ wrangler:
+ specifier: ^3.101.0
+ version: 3.107.3(@cloudflare/workers-types@4.20250204.0)
+
+ packages/integrations/cloudflare/test/fixtures/compile-image-service:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
+ packages/integrations/cloudflare/test/fixtures/external-image-service:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
+ packages/integrations/cloudflare/test/fixtures/module-loader:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
+ packages/integrations/cloudflare/test/fixtures/no-output:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
+ packages/integrations/cloudflare/test/fixtures/routes-json:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
+ packages/integrations/cloudflare/test/fixtures/with-solid-js:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ '@astrojs/solid-js':
+ specifier: ^5.0.2
+ version: link:../../../../solid
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+ solid-js:
+ specifier: ^1.9.4
+ version: 1.9.4
+
+ packages/integrations/cloudflare/test/fixtures/with-svelte:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ '@astrojs/svelte':
+ specifier: ^7.0.3
+ version: link:../../../../svelte
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+ svelte:
+ specifier: ^5.17.4
+ version: 5.19.7
+
+ packages/integrations/cloudflare/test/fixtures/with-vue:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ '@astrojs/vue':
+ specifier: ^5.0.4
+ version: link:../../../../vue
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+ vue:
+ specifier: ^3.5.13
+ version: 3.5.13(typescript@5.7.3)
+
+ packages/integrations/cloudflare/test/fixtures/wrangler-preview-platform:
+ dependencies:
+ '@astrojs/cloudflare':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
packages/integrations/markdoc:
dependencies:
@@ -6121,6 +6299,9 @@ packages:
'@astrojs/compiler@2.10.3':
resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==}
+ '@astrojs/internal-helpers@0.4.2':
+ resolution: {integrity: sha512-EdDWkC3JJVcpGpqJAU/5hSk2LKXyG3mNGkzGoAuyK+xoPHbaVdSuIWoN1QTnmK3N/gGfaaAfM8gO2KDCAW7S3w==}
+
'@astrojs/language-server@2.15.0':
resolution: {integrity: sha512-wJHSjGApm5X8Rg1GvkevoatZBfvaFizY4kCPvuSYgs3jGCobuY3KstJGKC1yNLsRJlDweHruP+J54iKn9vEKoA==}
hasBin: true
@@ -6435,6 +6616,43 @@ packages:
bundledDependencies:
- is-unicode-supported
+ '@cloudflare/kv-asset-handler@0.3.4':
+ resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
+ engines: {node: '>=16.13'}
+
+ '@cloudflare/workerd-darwin-64@1.20250129.0':
+ resolution: {integrity: sha512-M+xETVnl+xy2dfDDWmp0XXr2rttl70a6bljQygl0EmYmNswFTcYbQWCaBuNBo9kabU59rLKr4a/b3QZ07NoL/g==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@cloudflare/workerd-darwin-arm64@1.20250129.0':
+ resolution: {integrity: sha512-c4PQUyIMp+bCMxZkAMBzXgTHjRZxeYCujDbb3staestqgRbenzcfauXsMd6np35ng+EE1uBgHNPV4+7fC0ZBfg==}
+ engines: {node: '>=16'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@cloudflare/workerd-linux-64@1.20250129.0':
+ resolution: {integrity: sha512-xJx8LwWFxsm5U3DETJwRuOmT5RWBqm4FmA4itYXvcEICca9pWJDB641kT4PnpypwDNmYOebhU7A+JUrCRucG0w==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [linux]
+
+ '@cloudflare/workerd-linux-arm64@1.20250129.0':
+ resolution: {integrity: sha512-dR//npbaX5p323huBVNIy5gaWubQx6CC3aiXeK0yX4aD5ar8AjxQFb2U/Sgjeo65Rkt53hJWqC7IwRpK/eOxrA==}
+ engines: {node: '>=16'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@cloudflare/workerd-windows-64@1.20250129.0':
+ resolution: {integrity: sha512-OeO+1nPj/ocAE3adFar/tRFGRkbCrBnrOYXq0FUBSpyNHpDdA9/U3PAw5CN4zvjfTnqXZfTxTFeqoruqzRzbtg==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [win32]
+
+ '@cloudflare/workers-types@4.20250204.0':
+ resolution: {integrity: sha512-mWoQbYaP+nYztx9I7q9sgaiNlT54Cypszz0RfzMxYnT5W3NXDuwGcjGB+5B5H5VB8tEC2dYnBRpa70lX94ueaQ==}
+
'@codspeed/core@4.0.0':
resolution: {integrity: sha512-B3zwdwLG8rcV0ORfYKX1wDP6ZCWf9C6ySidSf61q2vm9v5Lj2cWwRvj7vX+w/UyFHWKjp/zSyWTEed/r3Fv4Tg==}
@@ -6448,6 +6666,10 @@ packages:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
'@csstools/cascade-layer-name-parser@2.0.4':
resolution: {integrity: sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==}
engines: {node: '>=18'}
@@ -6727,102 +6949,208 @@ packages:
'@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@esbuild-plugins/node-globals-polyfill@0.2.3':
+ resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==}
+ peerDependencies:
+ esbuild: '*'
+
+ '@esbuild-plugins/node-modules-polyfill@0.2.2':
+ resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==}
+ peerDependencies:
+ esbuild: '*'
+
'@esbuild/aix-ppc64@0.24.2':
resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
+ '@esbuild/android-arm64@0.17.19':
+ resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm64@0.24.2':
resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm@0.17.19':
+ resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-arm@0.24.2':
resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
+ '@esbuild/android-x64@0.17.19':
+ resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/android-x64@0.24.2':
resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
+ '@esbuild/darwin-arm64@0.17.19':
+ resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-arm64@0.24.2':
resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-x64@0.17.19':
+ resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.24.2':
resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
+ '@esbuild/freebsd-arm64@0.17.19':
+ resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-arm64@0.24.2':
resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.17.19':
+ resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.24.2':
resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
+ '@esbuild/linux-arm64@0.17.19':
+ resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm64@0.24.2':
resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm@0.17.19':
+ resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-arm@0.24.2':
resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
+ '@esbuild/linux-ia32@0.17.19':
+ resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-ia32@0.24.2':
resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-loong64@0.17.19':
+ resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-loong64@0.24.2':
resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-mips64el@0.17.19':
+ resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.24.2':
resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-ppc64@0.17.19':
+ resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.24.2':
resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-riscv64@0.17.19':
+ resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.24.2':
resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-s390x@0.17.19':
+ resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-s390x@0.24.2':
resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-x64@0.17.19':
+ resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/linux-x64@0.24.2':
resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
engines: {node: '>=18'}
@@ -6835,6 +7163,12 @@ packages:
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.17.19':
+ resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.24.2':
resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
engines: {node: '>=18'}
@@ -6847,30 +7181,60 @@ packages:
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.17.19':
+ resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.24.2':
resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
+ '@esbuild/sunos-x64@0.17.19':
+ resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/sunos-x64@0.24.2':
resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
+ '@esbuild/win32-arm64@0.17.19':
+ resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-arm64@0.24.2':
resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-ia32@0.17.19':
+ resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-ia32@0.24.2':
resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-x64@0.17.19':
+ resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
'@esbuild/win32-x64@0.24.2':
resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
engines: {node: '>=18'}
@@ -6911,6 +7275,10 @@ packages:
resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@fastify/busboy@2.1.1':
+ resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
+ engines: {node: '>=14'}
+
'@fontsource/monofett@5.1.1':
resolution: {integrity: sha512-W4MZDfKwpNuEJJewGzTMn1Z1prwF7dpw6YOfIx7RwSdeiEfMevNdUp1457+NR2bUQdloQs8F7RqLnFrxL7+lbg==}
@@ -7181,6 +7549,9 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@jsdevtools/rehype-toc@3.0.2':
resolution: {integrity: sha512-n5JEf16Wr4mdkRMZ8wMP/wN9/sHmTjRPbouXjJH371mZ2LEGDl72t8tEsMRNFerQN/QJtivOxqK1frdGa4QK5Q==}
engines: {node: '>=10'}
@@ -8114,6 +8485,10 @@ packages:
peerDependencies:
acorn: '>=8.9.0'
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
@@ -8193,6 +8568,9 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
+ as-table@1.0.55:
+ resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
+
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
@@ -8291,6 +8669,9 @@ packages:
birpc@0.2.19:
resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
+ blake3-wasm@2.1.5:
+ resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
+
body-parser@1.20.3:
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -8500,6 +8881,9 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
consola@3.2.3:
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -8604,6 +8988,9 @@ packages:
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ data-uri-to-buffer@2.0.2:
+ resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
+
data-uri-to-buffer@4.0.1:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
@@ -8939,6 +9326,11 @@ packages:
peerDependencies:
esbuild: '>= 0.14.0'
+ esbuild@0.17.19:
+ resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
esbuild@0.24.2:
resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
engines: {node: '>=18'}
@@ -9036,6 +9428,9 @@ packages:
estree-util-visit@2.0.0:
resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+ estree-walker@0.6.1:
+ resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
+
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
@@ -9061,6 +9456,10 @@ packages:
resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==}
engines: {node: ^18.19.0 || >=20.5.0}
+ exit-hook@2.2.1:
+ resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
+ engines: {node: '>=6'}
+
expect-type@1.1.0:
resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
engines: {node: '>=12.0.0'}
@@ -9251,6 +9650,9 @@ packages:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
+ get-source@2.0.12:
+ resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==}
+
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
@@ -9270,6 +9672,9 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
@@ -9286,6 +9691,9 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
+ globalyzer@0.1.0:
+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
+
globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
@@ -9294,6 +9702,9 @@ packages:
resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==}
engines: {node: '>=18'}
+ globrex@0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -9846,6 +10257,9 @@ packages:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
+ magic-string@0.25.9:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
@@ -10110,6 +10524,11 @@ packages:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
+ miniflare@3.20250129.0:
+ resolution: {integrity: sha512-qYlGEjMl/2kJdgNaztj4hpA64d6Dl79Lx/NL61p/v5XZRiWanBOTgkQqdPxCKZOj6KQnioqhC7lfd6jDXKSs2A==}
+ engines: {node: '>=16.13'}
+ hasBin: true
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -10156,6 +10575,9 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ mlly@1.7.4:
+ resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -10173,6 +10595,10 @@ packages:
muggle-string@0.4.1:
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+ mustache@4.2.0:
+ resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
+ hasBin: true
+
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
@@ -10518,6 +10944,9 @@ packages:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
playwright-core@1.50.1:
resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==}
engines: {node: '>=18'}
@@ -10776,6 +11205,9 @@ packages:
resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==}
engines: {node: '>=18'}
+ printable-characters@1.0.42:
+ resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
+
prismjs@1.29.0:
resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
engines: {node: '>=6'}
@@ -11039,6 +11471,16 @@ packages:
resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==}
hasBin: true
+ rollup-plugin-inject@3.0.2:
+ resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
+ deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
+
+ rollup-plugin-node-polyfills@0.2.1:
+ resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==}
+
+ rollup-pluginutils@2.8.2:
+ resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
+
rollup@4.34.2:
resolution: {integrity: sha512-sBDUoxZEaqLu9QeNalL8v3jw6WjPku4wfZGyTU7l7m1oC+rpRihXc/n/H+4148ZkGz5Xli8CHMns//fFGKvpIQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -11239,10 +11681,18 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
source-map@0.7.4:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
engines: {node: '>= 8'}
+ sourcemap-codec@1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ deprecated: Please use @jridgewell/sourcemap-codec instead
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
@@ -11267,6 +11717,9 @@ packages:
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+ stacktracey@2.1.8:
+ resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
+
statuses@2.0.1:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
@@ -11274,6 +11727,10 @@ packages:
std-env@3.8.0:
resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+ stoppable@1.1.0:
+ resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
+ engines: {node: '>=4', npm: '>=6'}
+
stream-replace-string@2.0.0:
resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==}
@@ -11416,6 +11873,9 @@ packages:
resolution: {integrity: sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA==}
engines: {node: '>=8'}
+ tiny-glob@0.2.9:
+ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
+
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
@@ -11587,6 +12047,10 @@ packages:
undici-types@6.20.0:
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+ undici@5.28.5:
+ resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==}
+ engines: {node: '>=14.0'}
+
undici@6.21.0:
resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==}
engines: {node: '>=18.17'}
@@ -11598,6 +12062,9 @@ packages:
unenv@1.10.0:
resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==}
+ unenv@2.0.0-rc.1:
+ resolution: {integrity: sha512-PU5fb40H8X149s117aB4ytbORcCvlASdtF97tfls4BPIyj4PeVxvpSuy1jAptqYHqB0vb2w2sHvzM0XWcp2OKg==}
+
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
@@ -12093,6 +12560,21 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ workerd@1.20250129.0:
+ resolution: {integrity: sha512-Rprz8rxKTF4l6q/nYYI07lBetJnR19mGipx+u/a27GZOPKMG5SLIzA2NciZlJaB2Qd5YY+4p/eHOeKqo5keVWA==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ wrangler@3.107.3:
+ resolution: {integrity: sha512-N9ZMDHZ+DI5/B0yclr3bG57U/Zw7wSzGdpO2l7j6+3q8yUf+4Fk0Rvneo2t8rjLewKlvqgt9D9siFuo8MXJ55Q==}
+ engines: {node: '>=16.17.0'}
+ hasBin: true
+ peerDependencies:
+ '@cloudflare/workers-types': ^4.20250129.0
+ peerDependenciesMeta:
+ '@cloudflare/workers-types':
+ optional: true
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -12120,6 +12602,18 @@ packages:
utf-8-validate:
optional: true
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
xml-name-validator@5.0.0:
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
engines: {node: '>=18'}
@@ -12193,6 +12687,9 @@ packages:
resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==}
engines: {node: '>=18'}
+ youch@3.3.4:
+ resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==}
+
zimmerframe@1.1.2:
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
@@ -12290,6 +12787,8 @@ snapshots:
'@astrojs/compiler@2.10.3': {}
+ '@astrojs/internal-helpers@0.4.2': {}
+
'@astrojs/language-server@2.15.0(prettier-plugin-astro@0.14.1)(prettier@3.4.2)(typescript@5.7.3)':
dependencies:
'@astrojs/compiler': 2.10.3
@@ -12760,6 +13259,27 @@ snapshots:
picocolors: 1.1.1
sisteransi: 1.0.5
+ '@cloudflare/kv-asset-handler@0.3.4':
+ dependencies:
+ mime: 3.0.0
+
+ '@cloudflare/workerd-darwin-64@1.20250129.0':
+ optional: true
+
+ '@cloudflare/workerd-darwin-arm64@1.20250129.0':
+ optional: true
+
+ '@cloudflare/workerd-linux-64@1.20250129.0':
+ optional: true
+
+ '@cloudflare/workerd-linux-arm64@1.20250129.0':
+ optional: true
+
+ '@cloudflare/workerd-windows-64@1.20250129.0':
+ optional: true
+
+ '@cloudflare/workers-types@4.20250204.0': {}
+
'@codspeed/core@4.0.0':
dependencies:
axios: 1.7.7
@@ -12780,6 +13300,10 @@ snapshots:
'@colors/colors@1.5.0':
optional: true
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
'@csstools/cascade-layer-name-parser@2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
@@ -13065,78 +13589,154 @@ snapshots:
tslib: 2.6.2
optional: true
+ '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)':
+ dependencies:
+ esbuild: 0.17.19
+
+ '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)':
+ dependencies:
+ esbuild: 0.17.19
+ escape-string-regexp: 4.0.0
+ rollup-plugin-node-polyfills: 0.2.1
+
'@esbuild/aix-ppc64@0.24.2':
optional: true
+ '@esbuild/android-arm64@0.17.19':
+ optional: true
+
'@esbuild/android-arm64@0.24.2':
optional: true
+ '@esbuild/android-arm@0.17.19':
+ optional: true
+
'@esbuild/android-arm@0.24.2':
optional: true
+ '@esbuild/android-x64@0.17.19':
+ optional: true
+
'@esbuild/android-x64@0.24.2':
optional: true
+ '@esbuild/darwin-arm64@0.17.19':
+ optional: true
+
'@esbuild/darwin-arm64@0.24.2':
optional: true
+ '@esbuild/darwin-x64@0.17.19':
+ optional: true
+
'@esbuild/darwin-x64@0.24.2':
optional: true
+ '@esbuild/freebsd-arm64@0.17.19':
+ optional: true
+
'@esbuild/freebsd-arm64@0.24.2':
optional: true
+ '@esbuild/freebsd-x64@0.17.19':
+ optional: true
+
'@esbuild/freebsd-x64@0.24.2':
optional: true
+ '@esbuild/linux-arm64@0.17.19':
+ optional: true
+
'@esbuild/linux-arm64@0.24.2':
optional: true
+ '@esbuild/linux-arm@0.17.19':
+ optional: true
+
'@esbuild/linux-arm@0.24.2':
optional: true
+ '@esbuild/linux-ia32@0.17.19':
+ optional: true
+
'@esbuild/linux-ia32@0.24.2':
optional: true
+ '@esbuild/linux-loong64@0.17.19':
+ optional: true
+
'@esbuild/linux-loong64@0.24.2':
optional: true
+ '@esbuild/linux-mips64el@0.17.19':
+ optional: true
+
'@esbuild/linux-mips64el@0.24.2':
optional: true
+ '@esbuild/linux-ppc64@0.17.19':
+ optional: true
+
'@esbuild/linux-ppc64@0.24.2':
optional: true
+ '@esbuild/linux-riscv64@0.17.19':
+ optional: true
+
'@esbuild/linux-riscv64@0.24.2':
optional: true
+ '@esbuild/linux-s390x@0.17.19':
+ optional: true
+
'@esbuild/linux-s390x@0.24.2':
optional: true
+ '@esbuild/linux-x64@0.17.19':
+ optional: true
+
'@esbuild/linux-x64@0.24.2':
optional: true
'@esbuild/netbsd-arm64@0.24.2':
optional: true
+ '@esbuild/netbsd-x64@0.17.19':
+ optional: true
+
'@esbuild/netbsd-x64@0.24.2':
optional: true
'@esbuild/openbsd-arm64@0.24.2':
optional: true
+ '@esbuild/openbsd-x64@0.17.19':
+ optional: true
+
'@esbuild/openbsd-x64@0.24.2':
optional: true
+ '@esbuild/sunos-x64@0.17.19':
+ optional: true
+
'@esbuild/sunos-x64@0.24.2':
optional: true
+ '@esbuild/win32-arm64@0.17.19':
+ optional: true
+
'@esbuild/win32-arm64@0.24.2':
optional: true
+ '@esbuild/win32-ia32@0.17.19':
+ optional: true
+
'@esbuild/win32-ia32@0.24.2':
optional: true
+ '@esbuild/win32-x64@0.17.19':
+ optional: true
+
'@esbuild/win32-x64@0.24.2':
optional: true
@@ -13182,6 +13782,8 @@ snapshots:
'@eslint/core': 0.10.0
levn: 0.4.1
+ '@fastify/busboy@2.1.1': {}
+
'@fontsource/monofett@5.1.1': {}
'@fontsource/montserrat@5.1.1': {}
@@ -13379,6 +13981,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
'@jsdevtools/rehype-toc@3.0.2': {}
'@libsql/client@0.14.0':
@@ -14418,6 +15025,10 @@ snapshots:
dependencies:
acorn: 8.14.0
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.14.0
+
acorn@8.14.0: {}
agent-base@7.1.1:
@@ -14489,6 +15100,10 @@ snapshots:
array-union@2.1.0: {}
+ as-table@1.0.55:
+ dependencies:
+ printable-characters: 1.0.42
+
assertion-error@2.0.1: {}
astring@1.9.0: {}
@@ -14613,6 +15228,8 @@ snapshots:
birpc@0.2.19: {}
+ blake3-wasm@2.1.5: {}
+
body-parser@1.20.3:
dependencies:
bytes: 3.1.2
@@ -14834,6 +15451,8 @@ snapshots:
concat-map@0.0.1: {}
+ confbox@0.1.8: {}
+
consola@3.2.3: {}
content-disposition@0.5.4:
@@ -14924,6 +15543,8 @@ snapshots:
csstype@3.1.3: {}
+ data-uri-to-buffer@2.0.2: {}
+
data-uri-to-buffer@4.0.1: {}
data-urls@5.0.0:
@@ -15032,8 +15653,9 @@ snapshots:
dotenv@8.6.0: {}
- drizzle-orm@0.31.4(@libsql/client@0.14.0)(@types/react@18.3.18)(react@19.0.0):
+ drizzle-orm@0.31.4(@cloudflare/workers-types@4.20250204.0)(@libsql/client@0.14.0)(@types/react@18.3.18)(react@19.0.0):
optionalDependencies:
+ '@cloudflare/workers-types': 4.20250204.0
'@libsql/client': 0.14.0
'@types/react': 18.3.18
react: 19.0.0
@@ -15124,6 +15746,31 @@ snapshots:
fs-extra: 10.1.0
globby: 11.1.0
+ esbuild@0.17.19:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.17.19
+ '@esbuild/android-arm64': 0.17.19
+ '@esbuild/android-x64': 0.17.19
+ '@esbuild/darwin-arm64': 0.17.19
+ '@esbuild/darwin-x64': 0.17.19
+ '@esbuild/freebsd-arm64': 0.17.19
+ '@esbuild/freebsd-x64': 0.17.19
+ '@esbuild/linux-arm': 0.17.19
+ '@esbuild/linux-arm64': 0.17.19
+ '@esbuild/linux-ia32': 0.17.19
+ '@esbuild/linux-loong64': 0.17.19
+ '@esbuild/linux-mips64el': 0.17.19
+ '@esbuild/linux-ppc64': 0.17.19
+ '@esbuild/linux-riscv64': 0.17.19
+ '@esbuild/linux-s390x': 0.17.19
+ '@esbuild/linux-x64': 0.17.19
+ '@esbuild/netbsd-x64': 0.17.19
+ '@esbuild/openbsd-x64': 0.17.19
+ '@esbuild/sunos-x64': 0.17.19
+ '@esbuild/win32-arm64': 0.17.19
+ '@esbuild/win32-ia32': 0.17.19
+ '@esbuild/win32-x64': 0.17.19
+
esbuild@0.24.2:
optionalDependencies:
'@esbuild/aix-ppc64': 0.24.2
@@ -15276,6 +15923,8 @@ snapshots:
'@types/estree-jsx': 1.0.5
'@types/unist': 3.0.3
+ estree-walker@0.6.1: {}
+
estree-walker@2.0.2: {}
estree-walker@3.0.3:
@@ -15315,6 +15964,8 @@ snapshots:
strip-final-newline: 4.0.0
yoctocolors: 2.1.1
+ exit-hook@2.2.1: {}
+
expect-type@1.1.0: {}
express@4.21.2:
@@ -15538,6 +16189,11 @@ snapshots:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
+ get-source@2.0.12:
+ dependencies:
+ data-uri-to-buffer: 2.0.2
+ source-map: 0.6.1
+
get-stream@8.0.1: {}
get-stream@9.0.1:
@@ -15555,6 +16211,8 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob-to-regexp@0.4.1: {}
+
glob@10.4.5:
dependencies:
foreground-child: 3.3.0
@@ -15577,6 +16235,8 @@ snapshots:
globals@14.0.0: {}
+ globalyzer@0.1.0: {}
+
globby@11.1.0:
dependencies:
array-union: 2.1.0
@@ -15595,6 +16255,8 @@ snapshots:
slash: 5.1.0
unicorn-magic: 0.1.0
+ globrex@0.1.2: {}
+
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
@@ -16240,6 +16902,10 @@ snapshots:
lz-string@1.5.0: {}
+ magic-string@0.25.9:
+ dependencies:
+ sourcemap-codec: 1.4.8
+
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -16781,6 +17447,23 @@ snapshots:
mimic-fn@4.0.0: {}
+ miniflare@3.20250129.0:
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ acorn: 8.14.0
+ acorn-walk: 8.3.4
+ exit-hook: 2.2.1
+ glob-to-regexp: 0.4.1
+ stoppable: 1.1.0
+ undici: 5.28.5
+ workerd: 1.20250129.0
+ ws: 8.18.0
+ youch: 3.3.4
+ zod: 3.24.1
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
@@ -16817,6 +17500,13 @@ snapshots:
mkdirp@3.0.1: {}
+ mlly@1.7.4:
+ dependencies:
+ acorn: 8.14.0
+ pathe: 2.0.2
+ pkg-types: 1.3.1
+ ufo: 1.5.4
+
mri@1.2.0: {}
mrmime@2.0.0: {}
@@ -16827,6 +17517,8 @@ snapshots:
muggle-string@0.4.1: {}
+ mustache@4.2.0: {}
+
mz@2.7.0:
dependencies:
any-promise: 1.3.0
@@ -17132,6 +17824,12 @@ snapshots:
dependencies:
find-up: 4.1.0
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.7.4
+ pathe: 2.0.2
+
playwright-core@1.50.1: {}
playwright@1.50.1:
@@ -17431,6 +18129,8 @@ snapshots:
dependencies:
parse-ms: 4.0.0
+ printable-characters@1.0.42: {}
+
prismjs@1.29.0: {}
progress@2.0.3: {}
@@ -17796,6 +18496,20 @@ snapshots:
dependencies:
glob: 10.4.5
+ rollup-plugin-inject@3.0.2:
+ dependencies:
+ estree-walker: 0.6.1
+ magic-string: 0.25.9
+ rollup-pluginutils: 2.8.2
+
+ rollup-plugin-node-polyfills@0.2.1:
+ dependencies:
+ rollup-plugin-inject: 3.0.2
+
+ rollup-pluginutils@2.8.2:
+ dependencies:
+ estree-walker: 0.6.1
+
rollup@4.34.2:
dependencies:
'@types/estree': 1.0.6
@@ -18108,8 +18822,12 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map@0.6.1: {}
+
source-map@0.7.4: {}
+ sourcemap-codec@1.4.8: {}
+
space-separated-tokens@2.0.2: {}
spawndamnit@3.0.1:
@@ -18131,10 +18849,17 @@ snapshots:
stackback@0.0.2: {}
+ stacktracey@2.1.8:
+ dependencies:
+ as-table: 1.0.55
+ get-source: 2.0.12
+
statuses@2.0.1: {}
std-env@3.8.0: {}
+ stoppable@1.1.0: {}
+
stream-replace-string@2.0.0: {}
string-width@4.2.3:
@@ -18325,6 +19050,11 @@ snapshots:
timestring@6.0.0: {}
+ tiny-glob@0.2.9:
+ dependencies:
+ globalyzer: 0.1.0
+ globrex: 0.1.2
+
tinybench@2.9.0: {}
tinyexec@0.3.2: {}
@@ -18458,6 +19188,10 @@ snapshots:
undici-types@6.20.0: {}
+ undici@5.28.5:
+ dependencies:
+ '@fastify/busboy': 2.1.1
+
undici@6.21.0: {}
undici@7.3.0: {}
@@ -18470,6 +19204,14 @@ snapshots:
node-fetch-native: 1.6.4
pathe: 1.1.2
+ unenv@2.0.0-rc.1:
+ dependencies:
+ defu: 6.1.4
+ mlly: 1.7.4
+ ohash: 1.1.4
+ pathe: 1.1.2
+ ufo: 1.5.4
+
unicorn-magic@0.1.0: {}
unicorn-magic@0.3.0: {}
@@ -18959,6 +19701,32 @@ snapshots:
word-wrap@1.2.5: {}
+ workerd@1.20250129.0:
+ optionalDependencies:
+ '@cloudflare/workerd-darwin-64': 1.20250129.0
+ '@cloudflare/workerd-darwin-arm64': 1.20250129.0
+ '@cloudflare/workerd-linux-64': 1.20250129.0
+ '@cloudflare/workerd-linux-arm64': 1.20250129.0
+ '@cloudflare/workerd-windows-64': 1.20250129.0
+
+ wrangler@3.107.3(@cloudflare/workers-types@4.20250204.0):
+ dependencies:
+ '@cloudflare/kv-asset-handler': 0.3.4
+ '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
+ '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
+ blake3-wasm: 2.1.5
+ esbuild: 0.17.19
+ miniflare: 3.20250129.0
+ path-to-regexp: 6.3.0
+ unenv: 2.0.0-rc.1
+ workerd: 1.20250129.0
+ optionalDependencies:
+ '@cloudflare/workers-types': 4.20250204.0
+ fsevents: 2.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -18981,6 +19749,8 @@ snapshots:
ws@8.16.0: {}
+ ws@8.18.0: {}
+
xml-name-validator@5.0.0: {}
xml2js@0.6.2:
@@ -19045,6 +19815,12 @@ snapshots:
yoctocolors@2.1.1: {}
+ youch@3.3.4:
+ dependencies:
+ cookie: 0.7.2
+ mustache: 4.2.0
+ stacktracey: 2.1.8
+
zimmerframe@1.1.2: {}
zod-to-json-schema@3.24.1(zod@3.24.1):