From ef430a4238c26dfd4b354397c50fb1fac69eea1c Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 23 Jan 2025 11:13:45 +0000 Subject: [PATCH] fix(vercel): handle integration static assets in non-static sites (#516) * fix: arrange assets for server output too * Changeset * Format --- packages/integrations/vercel/src/index.ts | 14 ++++++-------- .../vercel/test/integration-assets.test.js | 16 ++++++++++------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index af2ede2f22..6b46512ecd 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -220,11 +220,12 @@ export default function vercelAdapter({ name: 'astro:copy-vercel-output', hooks: { 'astro:build:done': async () => { - if (_buildOutput === 'static') { - cpSync(_config.outDir, new URL('./.vercel/output/static/', _config.root), { - recursive: true, - }); - } + logger.info('Copying static files to .vercel/output/static'); + const staticDir = + _buildOutput === 'static' ? _config.outDir : _config.build.client; + cpSync(staticDir, new URL('./.vercel/output/static/', _config.root), { + recursive: true, + }); }, }, }, @@ -329,9 +330,6 @@ export default function vercelAdapter({ mkdirSync(new URL('./.vercel/output/server/', _config.root)); if (_buildOutput !== 'static') { - cpSync(_config.build.client, new URL('./.vercel/output/static/', _config.root), { - recursive: true, - }); cpSync(_config.build.server, new URL('./.vercel/output/_functions/', _config.root), { recursive: true, }); diff --git a/packages/integrations/vercel/test/integration-assets.test.js b/packages/integrations/vercel/test/integration-assets.test.js index 76489974ca..6bf8edc4e7 100644 --- a/packages/integrations/vercel/test/integration-assets.test.js +++ b/packages/integrations/vercel/test/integration-assets.test.js @@ -3,17 +3,21 @@ import { before, describe, it } from 'node:test'; import { loadFixture } from './test-utils.js'; describe('Assets generated by integrations', () => { - /** @type {import('./test-utils.js').Fixture} */ - let fixture; - - before(async () => { - fixture = await loadFixture({ + it('moves static assets generated by integrations to the correct location: static output', async () => { + const fixture = await loadFixture({ root: './fixtures/integration-assets/', }); await fixture.build(); + const sitemap = await fixture.readFile('../.vercel/output/static/sitemap-index.xml'); + assert(sitemap.includes('')); }); - it('moves static assets generated by integrations to the correct location', async () => { + it('moves static assets generated by integrations to the correct location: server output', async () => { + const fixture = await loadFixture({ + root: './fixtures/integration-assets/', + output: 'server', + }); + await fixture.build(); const sitemap = await fixture.readFile('../.vercel/output/static/sitemap-index.xml'); assert(sitemap.includes('')); });