diff options
author | 2025-01-20 10:02:22 +0000 | |
---|---|---|
committer | 2025-01-20 10:02:22 +0000 | |
commit | 2ca5b4b487abb5c5b3cc64922894c36e207c38ab (patch) | |
tree | ef333d0aacafc7422ae8c54a5c7c2eee97f45b68 | |
parent | 0201787ead8cc640ae9a47930be6cfcec3b1f364 (diff) | |
download | astro-2ca5b4b487abb5c5b3cc64922894c36e207c38ab.tar.gz astro-2ca5b4b487abb5c5b3cc64922894c36e207c38ab.tar.zst astro-2ca5b4b487abb5c5b3cc64922894c36e207c38ab.zip |
fix(vercel): copy static assets after all integrations (#508)
* fix(vercel): copy static assets after all integrations
* Format
* Fix logic
* Format
6 files changed, 76 insertions, 6 deletions
diff --git a/packages/integrations/vercel/src/index.ts b/packages/integrations/vercel/src/index.ts index 2360de5e1..af2ede2f2 100644 --- a/packages/integrations/vercel/src/index.ts +++ b/packages/integrations/vercel/src/index.ts @@ -215,6 +215,20 @@ export default function vercelAdapter({ format: 'directory', redirects: false, }, + integrations: [ + { + 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, + }); + } + }, + }, + }, + ], vite: { ssr: { external: ['@vercel/nft'], @@ -308,13 +322,13 @@ export default function vercelAdapter({ if (existsSync(staticDir)) { emptyDir(staticDir); } - mkdirSync(new URL('./.vercel/output/static/', _config.root), { recursive: true }); + mkdirSync(new URL('./.vercel/output/static/', _config.root), { + recursive: true, + }); - if (_buildOutput === 'static' && staticDir) { - cpSync(_config.outDir, new URL('./.vercel/output/static/', _config.root), { - recursive: true, - }); - } else { + mkdirSync(new URL('./.vercel/output/server/', _config.root)); + + if (_buildOutput !== 'static') { cpSync(_config.build.client, new URL('./.vercel/output/static/', _config.root), { recursive: true, }); diff --git a/packages/integrations/vercel/test/fixtures/integration-assets/astro.config.mjs b/packages/integrations/vercel/test/fixtures/integration-assets/astro.config.mjs new file mode 100644 index 000000000..e49ca112f --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/integration-assets/astro.config.mjs @@ -0,0 +1,10 @@ +import vercel from '@astrojs/vercel'; +import { defineConfig } from 'astro/config'; + +import sitemap from '@astrojs/sitemap'; + +export default defineConfig({ + site: 'https://example.com', + adapter: vercel({}), + integrations: [sitemap()] +});
\ No newline at end of file diff --git a/packages/integrations/vercel/test/fixtures/integration-assets/package.json b/packages/integrations/vercel/test/fixtures/integration-assets/package.json new file mode 100644 index 000000000..3b2ff2e90 --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/integration-assets/package.json @@ -0,0 +1,10 @@ +{ + "name": "@test/astro-vercel-integration-assets", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/sitemap": "^3.2.1", + "@astrojs/vercel": "workspace:*", + "astro": "^5.1.6" + } +}
\ No newline at end of file diff --git a/packages/integrations/vercel/test/fixtures/integration-assets/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/integration-assets/src/pages/one.astro new file mode 100644 index 000000000..0c7fb90a7 --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/integration-assets/src/pages/one.astro @@ -0,0 +1,8 @@ +<html> + <head> + <title>One</title> + </head> + <body> + <h1>One</h1> + </body> +</html> diff --git a/packages/integrations/vercel/test/fixtures/integration-assets/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/integration-assets/src/pages/two.astro new file mode 100644 index 000000000..e7ba9910e --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/integration-assets/src/pages/two.astro @@ -0,0 +1,8 @@ +<html> + <head> + <title>Two</title> + </head> + <body> + <h1>Two</h1> + </body> +</html> diff --git a/packages/integrations/vercel/test/integration-assets.test.js b/packages/integrations/vercel/test/integration-assets.test.js new file mode 100644 index 000000000..76489974c --- /dev/null +++ b/packages/integrations/vercel/test/integration-assets.test.js @@ -0,0 +1,20 @@ +import assert from 'node:assert/strict'; +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({ + root: './fixtures/integration-assets/', + }); + await fixture.build(); + }); + + it('moves static assets generated by integrations to the correct location', async () => { + const sitemap = await fixture.readFile('../.vercel/output/static/sitemap-index.xml'); + assert(sitemap.includes('<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">')); + }); +}); |