@@ -71,7 +71,8 @@ function get_config(nodes) {
7171 if ( config ) {
7272 current = {
7373 ...current ,
74- ...config
74+ ...( node ?. server ?. config ?? { } ) ,
75+ ...( node ?. universal ?. config ?? { } )
7576 } ;
7677 }
7778 }
@@ -99,8 +100,11 @@ async function analyse_node(nodePromise) {
99100async function analyse_route ( route , { node_promises } ) {
100101 const endpointResultPromise = analyse_route_endpoint ( route . endpoint ?. ( ) , { file : route . id } ) ;
101102 const pageResultPromise = analyse_route_page ( route . page , { node_promises } ) ;
102- const [ endpoint , page ] = await Promise . all ( [ endpointResultPromise , pageResultPromise ] ) ;
103- const { methods, prerender, config, entries } = merge_route_options ( { endpoint, page } ) ;
103+ const [ endpoint , { page, layout } ] = await Promise . all ( [
104+ endpointResultPromise ,
105+ pageResultPromise
106+ ] ) ;
107+ const { methods, prerender, config, entries } = merge_route_options ( { endpoint, page, layout } ) ;
104108 return [
105109 route . id ,
106110 {
@@ -121,15 +125,16 @@ async function analyse_route(route, { node_promises }) {
121125
122126/**
123127 *
124- * @param {{ endpoint: RouteAnalysisResult , page: RouteAnalysisResult } } analysis_results
125- * @returns {RouteAnalysisResult }
128+ * @param {{ endpoint: EndpointRouteAnalysisResult , page: PageRouteAnalysisResult, layout: LayoutRouteAnalysisResult } } analysis_results
129+ * @returns {MergedRouteAnalysisResult }
126130 */
127- function merge_route_options ( { endpoint, page } ) {
131+ function merge_route_options ( { endpoint, page, layout } ) {
128132 return {
129133 methods : [ ...new Set ( [ ...endpoint . methods , ...page . methods ] ) ] ,
130- prerender : page . prerender ?? endpoint . prerender ,
131- entries : page . entries ?? endpoint . entries ,
134+ prerender : page . prerender ?? endpoint . prerender ?? layout . prerender ,
135+ entries : page . entries ?? endpoint . entries , // layouts can't have entries
132136 config : {
137+ ...layout . config ,
133138 ...endpoint . config ,
134139 ...page . config
135140 }
@@ -141,13 +146,35 @@ function merge_route_options({ endpoint, page }) {
141146 prerender: import('types').PrerenderOption | undefined;
142147 config: any;
143148 entries: import('types').PrerenderEntryGenerator | undefined;
144- }} RouteAnalysisResult
149+ }} EndpointRouteAnalysisResult
150+ */
151+
152+ /** @typedef {{
153+ methods: ("GET" | "POST")[];
154+ prerender: import('types').PrerenderOption | undefined;
155+ config: any;
156+ entries: import('types').PrerenderEntryGenerator | undefined;
157+ }} PageRouteAnalysisResult
158+ */
159+
160+ /** @typedef {{
161+ prerender: import('types').PrerenderOption | undefined;
162+ config: any;
163+ }} LayoutRouteAnalysisResult
164+ */
165+
166+ /** @typedef {{
167+ methods: (import('types').HttpMethod | "*")[];
168+ prerender: import('types').PrerenderOption | undefined;
169+ config: any;
170+ entries: import('types').PrerenderEntryGenerator | undefined;
171+ }} MergedRouteAnalysisResult
145172 */
146173
147174/**
148175 * @param {Promise<import('types').SSREndpoint> | undefined } endpoint_promise
149176 * @param {{file: string} } config
150- * @returns {Promise<RouteAnalysisResult > }
177+ * @returns {Promise<EndpointRouteAnalysisResult > }
151178 */
152179async function analyse_route_endpoint ( endpoint_promise , { file } ) {
153180 if ( ! endpoint_promise ) {
@@ -194,15 +221,21 @@ async function analyse_route_endpoint(endpoint_promise, { file }) {
194221/**
195222 * @param {import('types').PageNodeIndexes | null } page_indexes
196223 * @param {{ node_promises: Promise<import('types').SSRNode>[] } } config
197- * @returns {Promise<RouteAnalysisResult > }
224+ * @returns {Promise<{ page: PageRouteAnalysisResult, layout: LayoutRouteAnalysisResult } > }
198225 */
199226async function analyse_route_page ( page_indexes , { node_promises } ) {
200227 if ( ! page_indexes ) {
201228 return {
202- methods : [ ] ,
203- prerender : undefined ,
204- config : undefined ,
205- entries : undefined
229+ page : {
230+ methods : [ ] ,
231+ prerender : undefined ,
232+ config : undefined ,
233+ entries : undefined
234+ } ,
235+ layout : {
236+ prerender : undefined ,
237+ config : undefined
238+ }
206239 } ;
207240 }
208241
@@ -226,16 +259,24 @@ async function analyse_route_page(page_indexes, { node_promises }) {
226259 const methods = [ ] ;
227260 if ( page ) {
228261 methods . push ( 'GET' ) ;
229- if ( page . server ?. actions ) methods . push ( 'POST' ) ;
262+ if ( page . server ?. actions ) {
263+ methods . push ( 'POST' ) ;
264+ }
230265
231266 validate_page_server_exports ( page . server , page . server_id ) ;
232267 validate_page_exports ( page . universal , page . universal_id ) ;
233268 }
234269
235270 return {
236- methods,
237- prerender : get_option ( nodes , 'prerender' ) ,
238- config : get_config ( nodes ) ,
239- entries : get_option ( nodes , 'entries' )
271+ page : {
272+ methods,
273+ prerender : get_option ( [ page ] , 'prerender' ) ,
274+ config : get_config ( [ page ] ) ,
275+ entries : get_option ( [ page ] , 'entries' )
276+ } ,
277+ layout : {
278+ prerender : get_option ( layouts , 'prerender' ) ,
279+ config : get_config ( layouts )
280+ }
240281 } ;
241282}
0 commit comments