diff --git a/.changeset/fifty-guests-remember.md b/.changeset/fifty-guests-remember.md new file mode 100644 index 0000000000..8adcf8afd6 --- /dev/null +++ b/.changeset/fifty-guests-remember.md @@ -0,0 +1,5 @@ +--- +'@astrojs/vercel': patch +--- + +Correctly handle analytics id where present diff --git a/packages/integrations/vercel/src/edge/adapter.ts b/packages/integrations/vercel/src/edge/adapter.ts index 3570f5b61d..308d57d2a8 100644 --- a/packages/integrations/vercel/src/edge/adapter.ts +++ b/packages/integrations/vercel/src/edge/adapter.ts @@ -18,6 +18,7 @@ import { writeJson, } from '../lib/fs.js'; import { getRedirects } from '../lib/redirects.js'; +import { exposeEnv } from '../lib/env.js'; const PACKAGE_NAME = '@astrojs/vercel/edge'; @@ -55,6 +56,7 @@ export default function vercelEdge({ injectScript('page', 'import "@astrojs/vercel/analytics"'); } const outDir = getVercelOutput(config.root); + const viteDefine = exposeEnv(['VERCEL_ANALYTICS_ID']); updateConfig({ outDir, build: { @@ -62,6 +64,9 @@ export default function vercelEdge({ client: new URL('./static/', outDir), server: new URL('./dist/', config.root), }, + vite: { + define: viteDefine, + }, ...getImageConfig(imageService, imagesConfig, command), }); }, diff --git a/packages/integrations/vercel/src/lib/env.ts b/packages/integrations/vercel/src/lib/env.ts new file mode 100644 index 0000000000..01d8c76a5d --- /dev/null +++ b/packages/integrations/vercel/src/lib/env.ts @@ -0,0 +1,15 @@ +/** + * While Vercel adds the `PUBLIC_` prefix for their `VERCEL_` env vars by default, some env vars + * like `VERCEL_ANALYTICS_ID` aren't, so handle them here so that it works correctly in runtime. + */ +export function exposeEnv(envs: string[]): Record { + const mapped: Record = {}; + + envs + .filter((env) => process.env[env]) + .forEach((env) => { + mapped[`import.meta.env.PUBLIC_${env}`] = JSON.stringify(process.env[env]); + }); + + return mapped; +} diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts index 47d1645199..f1a71bdbd4 100644 --- a/packages/integrations/vercel/src/serverless/adapter.ts +++ b/packages/integrations/vercel/src/serverless/adapter.ts @@ -11,6 +11,7 @@ import { import { getVercelOutput, removeDir, writeJson } from '../lib/fs.js'; import { copyDependenciesToFunction } from '../lib/nft.js'; import { getRedirects } from '../lib/redirects.js'; +import { exposeEnv } from '../lib/env.js'; const PACKAGE_NAME = '@astrojs/vercel/serverless'; @@ -50,6 +51,7 @@ export default function vercelServerless({ injectScript('page', 'import "@astrojs/vercel/analytics"'); } const outDir = getVercelOutput(config.root); + const viteDefine = exposeEnv(['VERCEL_ANALYTICS_ID']); updateConfig({ outDir, build: { @@ -57,6 +59,9 @@ export default function vercelServerless({ client: new URL('./static/', outDir), server: new URL('./dist/', config.root), }, + vite: { + define: viteDefine, + }, ...getImageConfig(imageService, imagesConfig, command), }); }, diff --git a/packages/integrations/vercel/src/static/adapter.ts b/packages/integrations/vercel/src/static/adapter.ts index 2aa4891333..cd422787fb 100644 --- a/packages/integrations/vercel/src/static/adapter.ts +++ b/packages/integrations/vercel/src/static/adapter.ts @@ -8,6 +8,7 @@ import { } from '../image/shared.js'; import { emptyDir, getVercelOutput, writeJson } from '../lib/fs.js'; import { getRedirects } from '../lib/redirects.js'; +import { exposeEnv } from '../lib/env.js'; const PACKAGE_NAME = '@astrojs/vercel/static'; @@ -36,11 +37,15 @@ export default function vercelStatic({ injectScript('page', 'import "@astrojs/vercel/analytics"'); } const outDir = new URL('./static/', getVercelOutput(config.root)); + const viteDefine = exposeEnv(['VERCEL_ANALYTICS_ID']); updateConfig({ outDir, build: { format: 'directory', }, + vite: { + define: viteDefine, + }, ...getImageConfig(imageService, imagesConfig, command), }); },