Skip to content

Commit cb95536

Browse files
committed
fix: include redirectRoute in environment route filtering
1 parent 5db6c74 commit cb95536

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

  • packages/astro/src/vite-plugin-pages

packages/astro/src/vite-plugin-pages/pages.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { Plugin as VitePlugin } from 'vite';
22
import { DEFAULT_COMPONENTS } from '../core/routing/default.js';
33
import { routeIsRedirect } from '../core/routing/index.js';
44
import type { RoutesList } from '../types/astro.js';
5+
import type { RouteData } from '../types/public/internal.js';
56
import { VIRTUAL_PAGE_MODULE_ID } from './const.js';
67
import { getVirtualModulePageName } from './util.js';
78
import { ASTRO_VITE_ENVIRONMENT_NAMES } from '../core/constants.js';
@@ -13,6 +14,23 @@ interface PagesPluginOptions {
1314
routesList: RoutesList;
1415
}
1516

17+
/**
18+
* Filters routes for a specific build environment.
19+
* Redirects need their target route included so the redirect response can be generated at runtime.
20+
*/
21+
function getRoutesForEnvironment(routes: RouteData[], isPrerender: boolean): Set<RouteData> {
22+
const result = new Set<RouteData>();
23+
for (const route of routes) {
24+
if (route.prerender === isPrerender) {
25+
result.add(route);
26+
}
27+
if (route.redirectRoute) {
28+
result.add(route.redirectRoute);
29+
}
30+
}
31+
return result;
32+
}
33+
1634
export function pluginPages({ routesList }: PagesPluginOptions): VitePlugin {
1735
return {
1836
name: '@astro/plugin-pages',
@@ -50,8 +68,8 @@ export function pluginPages({ routesList }: PagesPluginOptions): VitePlugin {
5068
const isPrerender = envName === ASTRO_VITE_ENVIRONMENT_NAMES.prerender;
5169
const routes =
5270
isSSR || isPrerender
53-
? routesList.routes.filter((route) => route.prerender === isPrerender)
54-
: routesList.routes;
71+
? getRoutesForEnvironment(routesList.routes, isPrerender)
72+
: new Set(routesList.routes);
5573

5674
for (const route of routes) {
5775
if (routeIsRedirect(route)) {

0 commit comments

Comments
 (0)