@@ -2,6 +2,7 @@ import type { Plugin as VitePlugin } from 'vite';
22import { DEFAULT_COMPONENTS } from '../core/routing/default.js' ;
33import { routeIsRedirect } from '../core/routing/index.js' ;
44import type { RoutesList } from '../types/astro.js' ;
5+ import type { RouteData } from '../types/public/internal.js' ;
56import { VIRTUAL_PAGE_MODULE_ID } from './const.js' ;
67import { getVirtualModulePageName } from './util.js' ;
78import { 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+
1634export 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