CI runs typecheck on Node 20, but `astro sync` (which generates the virtual `astro:middleware` module's types into .astro/types.d.ts) requires Node 22+. Use the public MiddlewareHandler type from `astro` instead and add a small env.d.ts that references astro/client so `import.meta.env` is typed without needing astro sync.
Unified · Split
| @@ -10,8 +10,8 @@ · 9 unmodified lines | ||
| 10 | 10 | "preview": "astro preview", |
| 11 | 11 | "deploy": "astro build && npx wrangler deploy --config dist/server/wrangler.json", |
| 12 | 12 | "astro": "astro", |
| 13 | − "typecheck": "astro sync && tsgo --noEmit", | |
| 14 | − "typecheck:slow": "astro sync && tsc --noEmit" | |
| 13 | + "typecheck": "tsgo --noEmit", | |
| 14 | + "typecheck:slow": "tsc --noEmit" | |
| 15 | 15 | }, |
| 16 | 16 | "dependencies": { |
| 17 | 17 | "@astrojs/cloudflare": "^13.0.0", |
| @@ -0,0 +1,7 @@ | ||
| 1 | +/// <reference types="astro/client" /> | |
| 2 | + | |
| 3 | +interface ImportMetaEnv { | |
| 4 | + readonly PUBLIC_POSTHOG_KEY?: string; | |
| 5 | + readonly PUBLIC_POSTHOG_HOST?: string; | |
| 6 | + readonly PUBLIC_ANALYTICS_PATH?: string; | |
| 7 | +} | |
| @@ -1,4 +1,4 @@ | ||
| 1 | −import { defineMiddleware } from "astro:middleware"; | |
| 1 | +import type { MiddlewareHandler } from "astro"; | |
| 2 | 2 | |
| 3 | 3 | // PostHog reverse proxy — the browser SDK targets a build-randomized |
| 4 | 4 | // first-party path and we forward to PostHog's ingest + asset hosts. Keeps |
| @@ -12,7 +12,7 @@ const POSTHOG_PROXY_PATH = `/api/${(import.meta.env.PUBLIC_ANALYTICS_PATH ?? "a" · 7 unmodified lines | ||
| 12 | 12 | "", |
| 13 | 13 | )}`; |
| 14 | 14 | |
| 15 | −export const onRequest = defineMiddleware(async (context, next) => { | |
| 15 | +export const onRequest: MiddlewareHandler = async (context, next) => { | |
| 16 | 16 | const { pathname } = new URL(context.request.url); |
| 17 | 17 | if (pathname !== POSTHOG_PROXY_PATH && !pathname.startsWith(`${POSTHOG_PROXY_PATH}/`)) { |
| 18 | 18 | return next(); |
| @@ -29,4 +29,4 @@ export const onRequest = defineMiddleware(async (context, next) => { · 10 unmodified lines | ||
| 29 | 29 | const upstream = new Request(url, context.request); |
| 30 | 30 | upstream.headers.delete("cookie"); |
| 31 | 31 | return fetch(upstream); |
| 32 | −}); | |
| 32 | +}; | |