Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit 218d753

Browse files
author
Je
committed
refactor: cleanup
1 parent 4087505 commit 218d753

File tree

3 files changed

+42
-39
lines changed

3 files changed

+42
-39
lines changed

app.ts

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { ComponentType, createContext, useCallback, useEffect, useState } from 'https://esm.sh/react'
22
import { hydrate, render } from 'https://esm.sh/react-dom'
33
import { DataContext } from './data.ts'
4-
import { E404Page, E501App, E501Page } from './error.ts'
4+
import { E404Page, E501 } from './error.ts'
55
import events from './events.ts'
66
import route from './route.ts'
77
import { RouterContext } from './router.ts'
@@ -15,30 +15,38 @@ export const AppManifestContext = createContext<AppManifest>({
1515
})
1616
AppManifestContext.displayName = 'AppManifestContext'
1717

18-
function ALEPH({ config }: {
19-
config: {
18+
function ALEPH({ initial }: {
19+
initial: {
2020
manifest: AppManifest
21-
data: Record<string, any>
2221
pageModules: Record<string, { moduleId: string, hash: string }>
2322
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>>
2725
}
2826
}) {
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+
})
4250
const onpopstate = useCallback(async () => {
4351
const { baseUrl, defaultLocale, locales } = manifest
4452
const url = route(
@@ -57,7 +65,7 @@ function ALEPH({ config }: {
5765
} else {
5866
setPage({
5967
url,
60-
Component: E501Page
68+
Component: E501.Page
6169
})
6270
}
6371
} else {
@@ -95,7 +103,7 @@ function ALEPH({ config }: {
95103
setApp({ Component })
96104
} else {
97105
setPage({
98-
Component: E501App
106+
Component: E501.App
99107
})
100108
}
101109
} else if (moduleId === './data.js' || moduleId === './data/index.js') {
@@ -232,9 +240,9 @@ export async function bootstrap({
232240
const pageModule = pageModules[url.pagePath]!
233241
const [
234242
{ default: data },
235-
{ default: AppComponent },
236-
{ default: E404Component },
237-
{ default: PageComponent }
243+
{ default: App },
244+
{ default: E404 },
245+
{ default: Page }
238246
] = await Promise.all([
239247
keyModules.data ? import(getModuleImportUrl(baseUrl, keyModules.data)) : Promise.resolve({ default: {} }),
240248
keyModules.app ? import(getModuleImportUrl(baseUrl, keyModules.app)) : Promise.resolve({}),
@@ -244,14 +252,12 @@ export async function bootstrap({
244252
const el = React.createElement(
245253
ALEPH,
246254
{
247-
config: {
255+
initial: {
248256
manifest: { baseUrl, defaultLocale, locales },
249-
data,
250257
pageModules,
251258
url,
252-
AppComponent,
253-
E404Component,
254-
PageComponent,
259+
data,
260+
components: { E404, App, Page }
255261
}
256262
}
257263
)

error.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,9 @@ const e501PageEl = React.createElement(
1919
)
2020
const e404PageEl = React.createElement(ErrorPage, { status: 404 })
2121

22-
export function E501App() {
23-
return e501AppEl
24-
}
25-
26-
export function E501Page() {
27-
return e501PageEl
22+
export const E501 = {
23+
App: () => e501AppEl,
24+
Page: () => e501PageEl
2825
}
2926

3027
export function E404Page() {

renderer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { ComponentType } from 'https://esm.sh/react'
22
import { DataContext } from './data.ts'
3-
import { E501App, E501Page } from './error.ts'
3+
import { E501 } from './error.ts'
44
import { RouterContext } from './router.ts'
55
import type { RouterURL } from './types.ts'
66
import util from './util.ts'
@@ -13,8 +13,8 @@ export function renderPage(
1313
App: ComponentType<any> | undefined,
1414
Page: ComponentType<any>,
1515
) {
16-
const pageEl = React.createElement(util.isLikelyReactComponent(Page) ? Page : E501Page)
17-
const appEl = App ? (util.isLikelyReactComponent(App) ? React.createElement(App, null, pageEl) : React.createElement(E501App)) : pageEl
16+
const pageEl = React.createElement(util.isLikelyReactComponent(Page) ? Page : E501.Page)
17+
const appEl = App ? (util.isLikelyReactComponent(App) ? React.createElement(App, null, pageEl) : React.createElement(E501.App)) : pageEl
1818
return ReactDomServer.renderToString(React.createElement(
1919
DataContext.Provider,
2020
{ value: data },

0 commit comments

Comments
 (0)