@@ -37,12 +37,6 @@ interface Dep {
37
37
external ?: boolean
38
38
}
39
39
40
- interface Renderer {
41
- renderPage : Function
42
- renderHead : Function
43
- renderScripts : Function
44
- }
45
-
46
40
interface RenderResult {
47
41
url : RouterURL
48
42
status : number
@@ -54,10 +48,11 @@ interface RenderResult {
54
48
55
49
/**
56
50
* A Project to manage the Aleph.js appliaction.
57
- * features include:
58
- * - compile source codes
51
+ * core functions include:
52
+ * - compile source code
59
53
* - manage deps
60
54
* - apply plugins
55
+ * - map page/API routes
61
56
* - watch file changes
62
57
* - call APIs
63
58
* - SSR/SSG
@@ -73,7 +68,7 @@ export class Project {
73
68
#routing: Routing = new Routing ( )
74
69
#apiRouting: Routing = new Routing ( )
75
70
#fsWatchListeners: Array < EventEmitter > = [ ]
76
- #renderer: Renderer = { renderPage : ( ) => void 0 , renderHead : ( ) => void 0 , renderScripts : ( ) => void 0 }
71
+ #renderer: { renderPage : CallableFunction } = { renderPage : ( ) => void 0 }
77
72
#rendered: Map < string , Map < string , RenderResult > > = new Map ( )
78
73
#postcssPlugins: Record < string , AcceptedPlugin > = { }
79
74
@@ -296,7 +291,6 @@ export class Project {
296
291
const html = createHtml ( {
297
292
lang : defaultLocale ,
298
293
scripts : [
299
- customLoading ?. data ? { type : 'application/json' , innerText : JSON . stringify ( customLoading ?. data ) , id : 'ssr-data' } : '' ,
300
294
{ src : util . cleanPath ( `${ baseUrl } /_aleph/main.${ mainModule . hash . slice ( 0 , hashShort ) } .js` ) , type : 'module' } ,
301
295
{ src : util . cleanPath ( `${ baseUrl } /_aleph/-/deno.land/x/aleph/nomodule.js${ this . isDev ? '?dev' : '' } ` ) , nomodule : true } ,
302
296
] ,
@@ -635,8 +629,8 @@ export class Project {
635
629
await this . _compile ( 'https://deno.land/x/aleph/renderer.ts' , { forceTarget : 'es2020' } )
636
630
await this . _createMainModule ( )
637
631
638
- const { renderPage, renderHead , renderScripts } = await import ( 'file://' + this . #modules. get ( '//deno.land/x/aleph/renderer.js' ) ! . jsFile )
639
- this . #renderer = { renderPage, renderHead , renderScripts }
632
+ const { renderPage } = await import ( 'file://' + this . #modules. get ( '//deno.land/x/aleph/renderer.js' ) ! . jsFile )
633
+ this . #renderer = { renderPage }
640
634
641
635
log . info ( colors . bold ( `Aleph.js v${ version } ` ) )
642
636
if ( this . config . __file ) {
@@ -1322,19 +1316,29 @@ export class Project {
1322
1316
}
1323
1317
} )
1324
1318
await Promise . all ( imports )
1325
- const [ html , data ] = await this . #renderer. renderPage ( url , App , undefined , pageComponentTree )
1326
- const head = await this . #renderer. renderHead ( [
1327
- appModule ? this . _lookupDeps ( appModule . id ) . filter ( dep => ! ! dep . isStyle ) : [ ] ,
1328
- ...pageModuleTree . map ( ( { id } ) => this . _lookupDeps ( id ) . filter ( dep => ! ! dep . isStyle ) ) . flat ( )
1329
- ] . flat ( ) )
1319
+ const {
1320
+ head,
1321
+ body,
1322
+ data,
1323
+ scripts
1324
+ } = await this . #renderer. renderPage (
1325
+ url ,
1326
+ App ,
1327
+ undefined ,
1328
+ pageComponentTree ,
1329
+ [
1330
+ appModule ? this . _lookupDeps ( appModule . id ) . filter ( dep => ! ! dep . isStyle ) : [ ] ,
1331
+ ...pageModuleTree . map ( ( { id } ) => this . _lookupDeps ( id ) . filter ( dep => ! ! dep . isStyle ) ) . flat ( )
1332
+ ] . flat ( )
1333
+ )
1330
1334
ret . head = head
1331
- ret . scripts = await Promise . all ( this . #renderer . renderScripts ( ) . map ( async ( script : Record < string , any > ) => {
1332
- if ( ! this . isDev && script . innerText ) {
1335
+ ret . scripts = await Promise . all ( scripts . map ( async ( script : Record < string , any > ) => {
1336
+ if ( script . innerText && ! this . isDev ) {
1333
1337
return { ...script , innerText : ( await minify ( script . innerText ) ) . code }
1334
1338
}
1335
1339
return script
1336
1340
} ) )
1337
- ret . body = `<main>${ html } </main>`
1341
+ ret . body = `<main>${ body } </main>`
1338
1342
ret . data = data
1339
1343
this . #rendered. get ( url . pagePath ) ! . set ( key , ret )
1340
1344
if ( this . isDev ) {
@@ -1354,18 +1358,28 @@ export class Project {
1354
1358
try {
1355
1359
const e404Module = this . #modules. get ( '/404.js' )
1356
1360
const { default : E404 } = e404Module ? await import ( 'file://' + e404Module . jsFile ) : { } as any
1357
- const [ html , data ] = await this . #renderer. renderPage ( url , undefined , E404 , [ ] )
1358
- const head = await this . #renderer. renderHead ( [
1359
- e404Module ? this . _lookupDeps ( e404Module . id ) . filter ( dep => ! ! dep . isStyle ) : [ ]
1360
- ] . flat ( ) )
1361
+ const {
1362
+ head,
1363
+ body,
1364
+ data,
1365
+ scripts
1366
+ } = await this . #renderer. renderPage (
1367
+ url ,
1368
+ undefined ,
1369
+ E404 ,
1370
+ [ ] ,
1371
+ [
1372
+ e404Module ? this . _lookupDeps ( e404Module . id ) . filter ( dep => ! ! dep . isStyle ) : [ ]
1373
+ ] . flat ( )
1374
+ )
1361
1375
ret . head = head
1362
- ret . scripts = await Promise . all ( this . #renderer . renderScripts ( ) . map ( async ( script : Record < string , any > ) => {
1363
- if ( ! this . isDev && script . innerText ) {
1376
+ ret . scripts = await Promise . all ( scripts . map ( async ( script : Record < string , any > ) => {
1377
+ if ( script . innerText && ! this . isDev ) {
1364
1378
return { ...script , innerText : ( await minify ( script . innerText ) ) . code }
1365
1379
}
1366
1380
return script
1367
1381
} ) )
1368
- ret . body = `<main>${ html } </main>`
1382
+ ret . body = `<main>${ body } </main>`
1369
1383
ret . data = data
1370
1384
} catch ( err ) {
1371
1385
ret . status = 500
@@ -1381,15 +1395,24 @@ export class Project {
1381
1395
const loadingModule = this . #modules. get ( '/loading.js' ) !
1382
1396
const { default : Loading } = await import ( 'file://' + loadingModule . jsFile )
1383
1397
const url = { locale : this . config . defaultLocale , pagePath : '' , pathname : '/' , params : { } , query : new URLSearchParams ( ) }
1384
- const [ html , data ] = await this . #renderer. renderPage ( url , undefined , undefined , [ { id : '/loading.js' , Component : Loading } ] )
1385
- const head = await this . #renderer. renderHead ( [
1386
- this . _lookupDeps ( loadingModule . id ) . filter ( dep => ! ! dep . isStyle )
1387
- ] . flat ( ) )
1398
+
1399
+ const {
1400
+ head,
1401
+ body,
1402
+ data
1403
+ } = await this . #renderer. renderPage (
1404
+ url ,
1405
+ undefined ,
1406
+ undefined ,
1407
+ [ { id : '/loading.js' , Component : Loading } ] ,
1408
+ [
1409
+ this . _lookupDeps ( loadingModule . id ) . filter ( dep => ! ! dep . isStyle )
1410
+ ] . flat ( )
1411
+ )
1388
1412
return {
1389
1413
head,
1390
- body : html ,
1391
- data,
1392
- } as RenderResult
1414
+ body : `<main>${ body } </main>`
1415
+ } as Pick < RenderResult , 'head' | 'body' >
1393
1416
}
1394
1417
return null
1395
1418
}
0 commit comments