summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Matt Kane <m@mk.gg> 2025-01-20 10:02:22 +0000
committerGravatar GitHub <noreply@github.com> 2025-01-20 10:02:22 +0000
commit2ca5b4b487abb5c5b3cc64922894c36e207c38ab (patch)
treeef333d0aacafc7422ae8c54a5c7c2eee97f45b68
parent0201787ead8cc640ae9a47930be6cfcec3b1f364 (diff)
downloadastro-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
-rw-r--r--packages/integrations/vercel/src/index.ts26
-rw-r--r--packages/integrations/vercel/test/fixtures/integration-assets/astro.config.mjs10
-rw-r--r--packages/integrations/vercel/test/fixtures/integration-assets/package.json10
-rw-r--r--packages/integrations/vercel/test/fixtures/integration-assets/src/pages/one.astro8
-rw-r--r--packages/integrations/vercel/test/fixtures/integration-assets/src/pages/two.astro8
-rw-r--r--packages/integrations/vercel/test/integration-assets.test.js20
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">'));
+ });
+});