diff --git a/packages/script/src/module.ts b/packages/script/src/module.ts index b36eb8dd..95ff7257 100644 --- a/packages/script/src/module.ts +++ b/packages/script/src/module.ts @@ -527,6 +527,16 @@ export default defineNuxtModule({ const proxyHandlerPath = await resolvePath('./runtime/server/proxy-handler') addServerHandler({ route: `${proxyPrefix}/**`, handler: proxyHandlerPath }) + // In dev, sink Vercel Analytics insight POSTs to `/_vercel/insights/*` so + // they don't 404. Vercel's edge serves this path in production; locally + // there's no upstream, so we return 204 to keep the script happy. + if (nuxt.options.dev && config.registry?.vercelAnalytics) { + addServerHandler({ + route: '/_vercel/insights/**', + handler: await resolvePath('./runtime/server/vercel-insights-sink'), + }) + } + const composables = [ 'useScript', 'useScriptEventPage', diff --git a/packages/script/src/runtime/server/vercel-insights-sink.ts b/packages/script/src/runtime/server/vercel-insights-sink.ts new file mode 100644 index 00000000..ad276bda --- /dev/null +++ b/packages/script/src/runtime/server/vercel-insights-sink.ts @@ -0,0 +1,6 @@ +import { defineEventHandler, setResponseStatus } from 'h3' + +export default defineEventHandler((event) => { + setResponseStatus(event, 204) + return null +})