@@ -12,7 +12,7 @@ import type {
12
12
RouteType ,
13
13
SSRLoadedRenderer ,
14
14
} from '../../@types/astro' ;
15
- import type { BuildInternals } from '../../core/build/internal.js' ;
15
+ import { BuildInternals , hasPrerenderedPages } from '../../core/build/internal.js' ;
16
16
import {
17
17
prependForwardSlash ,
18
18
removeLeadingForwardSlash ,
@@ -29,7 +29,12 @@ import { createRequest } from '../request.js';
29
29
import { matchRoute } from '../routing/match.js' ;
30
30
import { getOutputFilename } from '../util.js' ;
31
31
import { 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' ;
33
38
import type { PageBuildData , SingleFileBuiltModule , StaticBuildOptions } from './types' ;
34
39
import { getTimeStat } from './util.js' ;
35
40
@@ -70,17 +75,27 @@ export function chunkIsPage(
70
75
71
76
export async function generatePages ( opts : StaticBuildOptions , internals : BuildInternals ) {
72
77
const timer = performance . now ( ) ;
73
- info ( opts . logging , null , `\n${ bgGreen ( black ( ' generating static routes ' ) ) } ` ) ;
74
-
75
78
const ssr = opts . settings . config . output === 'server' ;
76
79
const serverEntry = opts . buildConfig . serverEntry ;
77
80
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
+
78
87
const ssrEntryURL = new URL ( './' + serverEntry + `?time=${ Date . now ( ) } ` , outFolder ) ;
79
88
const ssrEntry = await import ( ssrEntryURL . toString ( ) ) ;
80
89
const builtPaths = new Set < string > ( ) ;
81
90
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
+ }
84
99
}
85
100
86
101
await runHookBuildGenerated ( {
@@ -106,7 +121,7 @@ async function generatePage(
106
121
const linkIds : string [ ] = sortedCSS ( pageData ) ;
107
122
const scripts = pageInfo ?. hoistedScript ?? null ;
108
123
109
- const pageModule = ssrEntry . pageMap . get ( pageData . component ) ;
124
+ const pageModule = ssrEntry . pageMap ? .get ( pageData . component ) ;
110
125
111
126
if ( ! pageModule ) {
112
127
throw new Error (
@@ -163,7 +178,7 @@ async function getPathsForRoute(
163
178
route : pageData . route ,
164
179
isValidate : false ,
165
180
logging : opts . logging ,
166
- ssr : opts . settings . config . output === 'server' ,
181
+ ssr : false ,
167
182
} )
168
183
. then ( ( _result ) => {
169
184
const label = _result . staticPaths . length === 1 ? 'page' : 'pages' ;
0 commit comments