@@ -12,7 +12,7 @@ import type {
1212 RouteType ,
1313 SSRLoadedRenderer ,
1414} from '../../@types/astro' ;
15- import type { BuildInternals } from '../../core/build/internal.js' ;
15+ import { BuildInternals , hasPrerenderedPages } from '../../core/build/internal.js' ;
1616import {
1717 prependForwardSlash ,
1818 removeLeadingForwardSlash ,
@@ -29,7 +29,12 @@ import { createRequest } from '../request.js';
2929import { matchRoute } from '../routing/match.js' ;
3030import { getOutputFilename } from '../util.js' ;
3131import { getOutDirWithinCwd , getOutFile , getOutFolder } from './common.js' ;
32- import { eachPageData , getPageDataByComponent , sortedCSS } from './internal.js' ;
32+ import {
33+ eachPrerenderedPageData ,
34+ eachPageData ,
35+ getPageDataByComponent ,
36+ sortedCSS ,
37+ } from './internal.js' ;
3338import type { PageBuildData , SingleFileBuiltModule , StaticBuildOptions } from './types' ;
3439import { getTimeStat } from './util.js' ;
3540
@@ -70,17 +75,27 @@ export function chunkIsPage(
7075
7176export async function generatePages ( opts : StaticBuildOptions , internals : BuildInternals ) {
7277 const timer = performance . now ( ) ;
73- info ( opts . logging , null , `\n${ bgGreen ( black ( ' generating static routes ' ) ) } ` ) ;
74-
7578 const ssr = opts . settings . config . output === 'server' ;
7679 const serverEntry = opts . buildConfig . serverEntry ;
7780 const outFolder = ssr ? opts . buildConfig . server : getOutDirWithinCwd ( opts . settings . config . outDir ) ;
81+
82+ if ( opts . settings . config . experimental . prerender && opts . settings . config . output === 'server' && ! hasPrerenderedPages ( internals ) ) return ;
83+
84+ const verb = ssr ? 'prerendering' : 'generating' ;
85+ info ( opts . logging , null , `\n${ bgGreen ( black ( ` ${ verb } static routes ` ) ) } ` ) ;
86+
7887 const ssrEntryURL = new URL ( './' + serverEntry + `?time=${ Date . now ( ) } ` , outFolder ) ;
7988 const ssrEntry = await import ( ssrEntryURL . toString ( ) ) ;
8089 const builtPaths = new Set < string > ( ) ;
8190
82- for ( const pageData of eachPageData ( internals ) ) {
83- await generatePage ( opts , internals , pageData , ssrEntry , builtPaths ) ;
91+ if ( opts . settings . config . experimental . prerender && opts . settings . config . output === 'server' ) {
92+ for ( const pageData of eachPrerenderedPageData ( internals ) ) {
93+ await generatePage ( opts , internals , pageData , ssrEntry , builtPaths ) ;
94+ }
95+ } else {
96+ for ( const pageData of eachPageData ( internals ) ) {
97+ await generatePage ( opts , internals , pageData , ssrEntry , builtPaths ) ;
98+ }
8499 }
85100
86101 await runHookBuildGenerated ( {
@@ -106,7 +121,7 @@ async function generatePage(
106121 const linkIds : string [ ] = sortedCSS ( pageData ) ;
107122 const scripts = pageInfo ?. hoistedScript ?? null ;
108123
109- const pageModule = ssrEntry . pageMap . get ( pageData . component ) ;
124+ const pageModule = ssrEntry . pageMap ? .get ( pageData . component ) ;
110125
111126 if ( ! pageModule ) {
112127 throw new Error (
@@ -163,7 +178,7 @@ async function getPathsForRoute(
163178 route : pageData . route ,
164179 isValidate : false ,
165180 logging : opts . logging ,
166- ssr : opts . settings . config . output === 'server' ,
181+ ssr : false ,
167182 } )
168183 . then ( ( _result ) => {
169184 const label = _result . staticPaths . length === 1 ? 'page' : 'pages' ;
0 commit comments