mirror of
https://github.com/withastro/astro.git
synced 2025-03-24 23:21:57 -05:00
fix(vercel): fallback to static 404.html (#9648)
This commit is contained in:
parent
a700a20291
commit
d7f1903cde
10 changed files with 87 additions and 3 deletions
5
.changeset/stale-pandas-count.md
Normal file
5
.changeset/stale-pandas-count.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
"@astrojs/vercel": patch
|
||||
---
|
||||
|
||||
Fixes an issue where the serverless function could not respond with a prerendered 404 page.
|
|
@ -287,9 +287,15 @@ You can set functionPerRoute: false to prevent surpassing the limit.`
|
|||
excludeFiles,
|
||||
maxDuration,
|
||||
});
|
||||
routeDefinitions.push({ src: '/.*', dest: 'render' });
|
||||
for (const route of routes) {
|
||||
if (route.prerender) continue
|
||||
routeDefinitions.push({
|
||||
src: route.pattern.source,
|
||||
dest: 'render',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const fourOhFourRoute = routes.find((route) => route.pathname === '/404');
|
||||
// Output configuration
|
||||
// https://vercel.com/docs/build-output-api/v3#build-output-configuration
|
||||
await writeJson(new URL(`./config.json`, _config.outDir), {
|
||||
|
@ -303,6 +309,11 @@ You can set functionPerRoute: false to prevent surpassing the limit.`
|
|||
},
|
||||
{ handle: 'filesystem' },
|
||||
...routeDefinitions,
|
||||
...fourOhFourRoute ? [{
|
||||
src: '/.*',
|
||||
dest: fourOhFourRoute.prerender ? '/404.html' : 'render',
|
||||
status: 404,
|
||||
}] : [],
|
||||
],
|
||||
...(imageService || imagesConfig
|
||||
? {
|
||||
|
|
7
packages/integrations/vercel/test/fixtures/prerendered-error-pages/astro.config.mjs
vendored
Normal file
7
packages/integrations/vercel/test/fixtures/prerendered-error-pages/astro.config.mjs
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import vercel from '@astrojs/vercel/serverless';
|
||||
|
||||
export default defineConfig({
|
||||
output: 'server',
|
||||
adapter: vercel()
|
||||
});
|
9
packages/integrations/vercel/test/fixtures/prerendered-error-pages/package.json
vendored
Normal file
9
packages/integrations/vercel/test/fixtures/prerendered-error-pages/package.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"name": "@test/astro-vercel-prerendered-error-pages",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@astrojs/vercel": "workspace:*",
|
||||
"astro": "workspace:*"
|
||||
}
|
||||
}
|
4
packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/404.astro
vendored
Normal file
4
packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/404.astro
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
export const prerender = true
|
||||
---
|
||||
<h1>404</h1>
|
8
packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/one.astro
vendored
Normal file
8
packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/one.astro
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>One</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>One</h1>
|
||||
</body>
|
||||
</html>
|
8
packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/two.astro
vendored
Normal file
8
packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/two.astro
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Two</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Two</h1>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,23 @@
|
|||
import { loadFixture } from './test-utils.js';
|
||||
import { expect } from 'chai';
|
||||
|
||||
describe('prerendered error pages routing', () => {
|
||||
/** @type {import('./test-utils.js').Fixture} */
|
||||
let fixture;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture({
|
||||
root: './fixtures/prerendered-error-pages/',
|
||||
});
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('falls back to 404.html', async () => {
|
||||
const deploymentConfig = JSON.parse(await fixture.readFile('../.vercel/output/config.json'));
|
||||
expect(deploymentConfig.routes.at(-1)).to.deep.include({
|
||||
src: '/.*',
|
||||
dest: '/404.html',
|
||||
status: 404,
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,7 +1,7 @@
|
|||
import { loadFixture } from './test-utils.js';
|
||||
import { expect } from 'chai';
|
||||
|
||||
describe('maxDuration', () => {
|
||||
describe('static routing', () => {
|
||||
/** @type {import('./test-utils.js').Fixture} */
|
||||
let fixture;
|
||||
|
||||
|
|
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
|
@ -4749,6 +4749,15 @@ importers:
|
|||
specifier: workspace:*
|
||||
version: link:../../../../../astro
|
||||
|
||||
packages/integrations/vercel/test/fixtures/prerendered-error-pages:
|
||||
dependencies:
|
||||
'@astrojs/vercel':
|
||||
specifier: workspace:*
|
||||
version: link:../../..
|
||||
astro:
|
||||
specifier: workspace:*
|
||||
version: link:../../../../../astro
|
||||
|
||||
packages/integrations/vercel/test/fixtures/redirects:
|
||||
dependencies:
|
||||
'@astrojs/vercel':
|
||||
|
|
Loading…
Add table
Reference in a new issue