1
1
import React , { ComponentType , createContext , useCallback , useEffect , useState } from 'https://esm.sh/react'
2
2
import { hydrate , render } from 'https://esm.sh/react-dom'
3
3
import { DataContext } from './data.ts'
4
- import { E404Page , E501App , E501Page } from './error.ts'
4
+ import { E404Page , E501 } from './error.ts'
5
5
import events from './events.ts'
6
6
import route from './route.ts'
7
7
import { RouterContext } from './router.ts'
@@ -15,30 +15,38 @@ export const AppManifestContext = createContext<AppManifest>({
15
15
} )
16
16
AppManifestContext . displayName = 'AppManifestContext'
17
17
18
- function ALEPH ( { config } : {
19
- config : {
18
+ function ALEPH ( { initial } : {
19
+ initial : {
20
20
manifest : AppManifest
21
- data : Record < string , any >
22
21
pageModules : Record < string , { moduleId : string , hash : string } >
23
22
url : RouterURL
24
- AppComponent ?: ComponentType < any >
25
- E404Component ?: ComponentType < any >
26
- PageComponent ?: ComponentType < any >
23
+ data : Record < string , any >
24
+ components : Record < string , ComponentType < any > >
27
25
}
28
26
} ) {
29
- const [ manifest , setManifest ] = useState ( ( ) => config . manifest )
30
- const [ data , setData ] = useState ( ( ) => config . data )
31
- const [ pageModules , setPageModules ] = useState ( ( ) => config . pageModules )
32
- const [ e404 , setE404 ] = useState ( ( ) => ( {
33
- Component : config . E404Component && util . isLikelyReactComponent ( config . E404Component ) ? config . E404Component : E404Page
34
- } ) )
35
- const [ app , setApp ] = useState ( ( ) => ( {
36
- Component : config . AppComponent ? ( util . isLikelyReactComponent ( config . AppComponent ) ? config . AppComponent : E501App ) : null
37
- } ) )
38
- const [ page , setPage ] = useState ( ( ) => ( {
39
- url : config . url ,
40
- Component : config . PageComponent ? ( util . isLikelyReactComponent ( config . PageComponent ) ? config . PageComponent : E501Page ) : null
41
- } ) )
27
+ const [ manifest , setManifest ] = useState ( ( ) => initial . manifest )
28
+ const [ data , setData ] = useState ( ( ) => initial . data )
29
+ const [ pageModules , setPageModules ] = useState ( ( ) => initial . pageModules )
30
+ const [ e404 , setE404 ] = useState ( ( ) => {
31
+ const { E404 } = initial . components
32
+ return {
33
+ Component : E404 && util . isLikelyReactComponent ( E404 ) ? E404 : E404Page
34
+ }
35
+ } )
36
+ const [ app , setApp ] = useState ( ( ) => {
37
+ const { App } = initial . components
38
+ return {
39
+ Component : App ? ( util . isLikelyReactComponent ( App ) ? App : E501 . App ) : null
40
+ }
41
+ } )
42
+ const [ page , setPage ] = useState ( ( ) => {
43
+ const { components, url } = initial
44
+ const { Page } = components
45
+ return {
46
+ url,
47
+ Component : Page ? ( util . isLikelyReactComponent ( Page ) ? Page : E501 . Page ) : null
48
+ }
49
+ } )
42
50
const onpopstate = useCallback ( async ( ) => {
43
51
const { baseUrl, defaultLocale, locales } = manifest
44
52
const url = route (
@@ -57,7 +65,7 @@ function ALEPH({ config }: {
57
65
} else {
58
66
setPage ( {
59
67
url,
60
- Component : E501Page
68
+ Component : E501 . Page
61
69
} )
62
70
}
63
71
} else {
@@ -95,7 +103,7 @@ function ALEPH({ config }: {
95
103
setApp ( { Component } )
96
104
} else {
97
105
setPage ( {
98
- Component : E501App
106
+ Component : E501 . App
99
107
} )
100
108
}
101
109
} else if ( moduleId === './data.js' || moduleId === './data/index.js' ) {
@@ -232,9 +240,9 @@ export async function bootstrap({
232
240
const pageModule = pageModules [ url . pagePath ] !
233
241
const [
234
242
{ default : data } ,
235
- { default : AppComponent } ,
236
- { default : E404Component } ,
237
- { default : PageComponent }
243
+ { default : App } ,
244
+ { default : E404 } ,
245
+ { default : Page }
238
246
] = await Promise . all ( [
239
247
keyModules . data ? import ( getModuleImportUrl ( baseUrl , keyModules . data ) ) : Promise . resolve ( { default : { } } ) ,
240
248
keyModules . app ? import ( getModuleImportUrl ( baseUrl , keyModules . app ) ) : Promise . resolve ( { } ) ,
@@ -244,14 +252,12 @@ export async function bootstrap({
244
252
const el = React . createElement (
245
253
ALEPH ,
246
254
{
247
- config : {
255
+ initial : {
248
256
manifest : { baseUrl, defaultLocale, locales } ,
249
- data,
250
257
pageModules,
251
258
url,
252
- AppComponent,
253
- E404Component,
254
- PageComponent,
259
+ data,
260
+ components : { E404 , App, Page }
255
261
}
256
262
}
257
263
)
0 commit comments