diff --git a/.changeset/empty-pens-talk.md b/.changeset/empty-pens-talk.md new file mode 100644 index 000000000000..98133ddd1f3c --- /dev/null +++ b/.changeset/empty-pens-talk.md @@ -0,0 +1,7 @@ +--- +'astro': patch +'@astrojs/partytown': patch +'@astrojs/vercel': patch +--- + +Updated integrations' `astro:build:done` hook: now it matches the client dist when using SSR diff --git a/packages/astro/src/core/build/index.ts b/packages/astro/src/core/build/index.ts index ae6d9ff3eb22..98c8f1e8db23 100644 --- a/packages/astro/src/core/build/index.ts +++ b/packages/astro/src/core/build/index.ts @@ -174,6 +174,7 @@ class AstroBuilder { await viteServer.close(); await runHookBuildDone({ config: this.config, + buildConfig, pages: pageNames, routes: Object.values(allPages).map((pd) => pd.route), }); diff --git a/packages/astro/src/integrations/index.ts b/packages/astro/src/integrations/index.ts index 9e96b1a5a03b..452081e48578 100644 --- a/packages/astro/src/integrations/index.ts +++ b/packages/astro/src/integrations/index.ts @@ -4,6 +4,7 @@ import { AstroConfig, AstroRenderer, BuildConfig, RouteData } from '../@types/as import { mergeConfig } from '../core/config.js'; import ssgAdapter from '../adapter-ssg/index.js'; import type { ViteConfigWithSSR } from '../core/create-vite.js'; +import { isBuildingToSSR } from '../core/util.js'; export async function runHookConfigSetup({ config: _config, @@ -136,18 +137,22 @@ export async function runHookBuildSetup({ export async function runHookBuildDone({ config, + buildConfig, pages, routes, }: { config: AstroConfig; + buildConfig: BuildConfig; pages: string[]; routes: RouteData[]; }) { + const dir = isBuildingToSSR(config) ? buildConfig.client : config.outDir; + for (const integration of config.integrations) { if (integration.hooks['astro:build:done']) { await integration.hooks['astro:build:done']({ pages: pages.map((p) => ({ pathname: p })), - dir: config.outDir, + dir, routes, }); } diff --git a/packages/integrations/partytown/src/index.ts b/packages/integrations/partytown/src/index.ts index ebd133e3341c..7f235b776f81 100644 --- a/packages/integrations/partytown/src/index.ts +++ b/packages/integrations/partytown/src/index.ts @@ -32,8 +32,8 @@ export default function createPlugin(): AstroIntegration { }) ); }, - 'astro:build:done': async () => { - await copyLibFiles(fileURLToPath(new URL('~partytown', config.outDir)), { + 'astro:build:done': async ({ dir }) => { + await copyLibFiles(fileURLToPath(new URL('~partytown', dir)), { debugDir: false, }); }, diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index 59561a852bc0..b780f6d378f2 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -35,7 +35,7 @@ export default function vercel(): AstroIntegration { buildConfig.client = new URL('./static/', _config.outDir); buildConfig.server = new URL('./server/tmp/', _config.outDir); }, - 'astro:build:done': async ({ dir, routes }) => { + 'astro:build:done': async ({ routes }) => { /* Why do we need two folders? Why don't we just generate all inside `server/pages/`? When the app builds, it throws some metadata inside a `chunks/` folder. @@ -50,8 +50,8 @@ export default function vercel(): AstroIntegration { need to bundle as much as possible in one file. Hence, the following code */ - const tmpDir = new URL('./server/tmp/', dir); - const bundleDir = new URL('./server/pages/', dir); + const tmpDir = new URL('./server/tmp/', _config.outDir); + const bundleDir = new URL('./server/pages/', _config.outDir); await fs.mkdir(bundleDir, { recursive: true }); @@ -69,7 +69,7 @@ export default function vercel(): AstroIntegration { // Routes Manifest // https://vercel.com/docs/file-system-api#configuration/routes - await writeJson(new URL(`./routes-manifest.json`, dir), { + await writeJson(new URL(`./routes-manifest.json`, _config.outDir), { version: 3, basePath: '/', pages404: false,