aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ming-jun Lu <40516784+mingjunlu@users.noreply.github.com> 2024-02-26 21:28:49 +0800
committerGravatar GitHub <noreply@github.com> 2024-02-26 18:58:49 +0530
commitae2a10e1a768e31d243194694222932ffafb54cc (patch)
tree93227e002b604f6fe580559092aa3115d7a4c7ba
parentbc2bf460eae13cbdad851afd4bda2602babca30b (diff)
downloadastro-ae2a10e1a768e31d243194694222932ffafb54cc.tar.gz
astro-ae2a10e1a768e31d243194694222932ffafb54cc.tar.zst
astro-ae2a10e1a768e31d243194694222932ffafb54cc.zip
Fix an issue where Vercel adapter may create functions for prerendered routes (#10231)
* fix: fix an issue where Vercel adapter may create functions for prerendered routes * test: update test cases in `split.test.js` * chore: add changeset * refactor: apply suggested changes from code review * Apply suggestions from code review --------- Co-authored-by: Arsh <69170106+lilnasy@users.noreply.github.com>
-rw-r--r--.changeset/four-shoes-rule.md5
-rw-r--r--packages/integrations/vercel/src/serverless/adapter.ts4
-rw-r--r--packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro12
-rw-r--r--packages/integrations/vercel/test/split.test.js7
4 files changed, 26 insertions, 2 deletions
diff --git a/.changeset/four-shoes-rule.md b/.changeset/four-shoes-rule.md
new file mode 100644
index 000000000..dbdfe466a
--- /dev/null
+++ b/.changeset/four-shoes-rule.md
@@ -0,0 +1,5 @@
+---
+"@astrojs/vercel": patch
+---
+
+Fixes an issue where functions were also created for prerendered routes with `functionPerRoute` enabled.
diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts
index db8f0c494..2f2e4f747 100644
--- a/packages/integrations/vercel/src/serverless/adapter.ts
+++ b/packages/integrations/vercel/src/serverless/adapter.ts
@@ -288,7 +288,9 @@ export default function vercelServerless({
}
},
'astro:build:ssr': async ({ entryPoints, middlewareEntryPoint }) => {
- _entryPoints = entryPoints;
+ _entryPoints = new Map(
+ Array.from(entryPoints).filter(([routeData]) => !routeData.prerender)
+ );
_middlewareEntryPoint = middlewareEntryPoint;
},
'astro:build:done': async ({ routes, logger }) => {
diff --git a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro b/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro
new file mode 100644
index 000000000..c61b83a97
--- /dev/null
+++ b/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro
@@ -0,0 +1,12 @@
+---
+export const prerender = true;
+---
+
+<html>
+ <head>
+ <title>Prerendered Page</title>
+ </head>
+ <body>
+ <h1>Prerendered Page</h1>
+ </body>
+</html>
diff --git a/packages/integrations/vercel/test/split.test.js b/packages/integrations/vercel/test/split.test.js
index fbd61aa9b..e64a4dc60 100644
--- a/packages/integrations/vercel/test/split.test.js
+++ b/packages/integrations/vercel/test/split.test.js
@@ -14,14 +14,19 @@ describe('build: split', () => {
await fixture.build();
});
- it('creates separate functions for each page', async () => {
+ it('creates separate functions for non-prerendered pages', async () => {
const files = await fixture.readdir('../.vercel/output/functions/');
assert.equal(files.length, 3);
+ assert.equal(files.includes('prerender.astro.func'), false);
});
it('creates the route definitions in the config.json', async () => {
const json = await fixture.readFile('../.vercel/output/config.json');
const config = JSON.parse(json);
assert.equal(config.routes.length, 5);
+ assert.equal(
+ config.routes.some((route) => route.dest === 'prerender.astro'),
+ false
+ );
});
});