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

Commit c236c69

Browse files
author
Je
committed
refactor: cleanup
1 parent 148ab0c commit c236c69

File tree

3 files changed

+43
-53
lines changed

3 files changed

+43
-53
lines changed

app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ function ALEPH({ config }: {
2828
}) {
2929
const [manifest, setManifest] = useState(() => config.manifest)
3030
const [data, setData] = useState(() => config.data)
31+
const [pageModules, setPageModules] = useState(() => config.pageModules)
3132
const [e404, setE404] = useState(() => ({
3233
Component: config.E404Component && util.isLikelyReactComponent(config.E404Component) ? config.E404Component : E404Page
3334
}))
3435
const [app, setApp] = useState(() => ({
3536
Component: config.AppComponent ? (util.isLikelyReactComponent(config.AppComponent) ? config.AppComponent : E501App) : null
3637
}))
37-
const [pageModules, setPageModules] = useState(() => config.pageModules)
3838
const [page, setPage] = useState(() => ({
3939
url: config.url,
4040
Component: config.PageComponent ? (util.isLikelyReactComponent(config.PageComponent) ? config.PageComponent : E501Page) : null

project.ts

Lines changed: 38 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export default class Project {
177177
}
178178
)
179179
if (url.pagePath === '') {
180-
return [200, this.getSPAIndexHtml()]
180+
return [200, this.getDefaultIndexHtml()]
181181
}
182182

183183
const mainModule = this.#modules.get('./main.js')!
@@ -195,7 +195,7 @@ export default class Project {
195195
return [code, html]
196196
}
197197

198-
getSPAIndexHtml(): string {
198+
getDefaultIndexHtml(): string {
199199
const { baseUrl, defaultLocale } = this.config
200200
const mainModule = this.#modules.get('./main.js')!
201201
const html = createHtml({
@@ -226,16 +226,6 @@ export default class Project {
226226
return {}
227227
}
228228

229-
async importModuleAsComponent(moduleId: string) {
230-
if (this.#modules.has(moduleId)) {
231-
const { default: Component } = await import(this.#modules.get(moduleId)!.jsFile)
232-
if (util.isLikelyReactComponent(Component)) {
233-
return { Component }
234-
}
235-
}
236-
return {}
237-
}
238-
239229
async build() {
240230
const start = performance.now()
241231
const outputDir = path.join(this.srcDir, this.config.outputDir)
@@ -246,7 +236,7 @@ export default class Project {
246236
outputModules.add(moduleId)
247237
const { deps } = this.#modules.get(moduleId)!
248238
deps.forEach(({ url }) => {
249-
const { id } = this._parseUrl(url)
239+
const { id } = this._newModule(url)
250240
lookup(id)
251241
})
252242
}
@@ -292,9 +282,9 @@ export default class Project {
292282
await writeTextFile(htmlFile, html)
293283
}
294284
const fallback = path.join(outputDir, util.isPlainObject(ssr) && ssr.fallback ? ssr.fallback : '404.html')
295-
await writeTextFile(fallback, this.getSPAIndexHtml())
285+
await writeTextFile(fallback, this.getDefaultIndexHtml())
296286
} else {
297-
await writeTextFile(path.join(outputDir, 'index.html'), this.getSPAIndexHtml())
287+
await writeTextFile(path.join(outputDir, 'index.html'), this.getDefaultIndexHtml())
298288
}
299289

300290
// copy public files
@@ -561,6 +551,27 @@ export default class Project {
561551
}
562552
}
563553

554+
private _newModule(url: string): Module {
555+
const { importMap } = this.config
556+
const isRemote = reHttp.test(url) || (url in importMap.imports && reHttp.test(importMap.imports[url]))
557+
const sourceFilePath = renameImportUrl(url)
558+
const id = (isRemote ? '//' + util.trimPrefix(sourceFilePath, '/-/') : '.' + sourceFilePath).replace(reModuleExt, '.js')
559+
560+
return {
561+
id,
562+
url,
563+
isRemote,
564+
sourceFilePath,
565+
sourceType: path.extname(sourceFilePath).slice(1).replace('mjs', 'js') || 'js',
566+
sourceHash: '',
567+
deps: [],
568+
jsFile: '',
569+
jsContent: '',
570+
jsSourceMap: '',
571+
hash: '',
572+
} as Module
573+
}
574+
564575
private async _createMainModule(): Promise<Module> {
565576
const { baseUrl, defaultLocale } = this.config
566577
const config: Record<string, any> = {
@@ -570,7 +581,7 @@ export default class Project {
570581
keyModules: {},
571582
pageModules: {}
572583
}
573-
const module = this._parseUrl('./main.js')
584+
const module = this._newModule('./main.js')
574585
const deps = [
575586
'https://deno.land/x/aleph/vendor/tslib/tslib.js',
576587
'https://deno.land/x/aleph/app.ts',
@@ -634,29 +645,8 @@ export default class Project {
634645
return module
635646
}
636647

637-
private _parseUrl(url: string): Module {
638-
const { importMap } = this.config
639-
const isRemote = reHttp.test(url) || (url in importMap.imports && reHttp.test(importMap.imports[url]))
640-
const sourceFilePath = renameImportUrl(url)
641-
const id = (isRemote ? '//' + util.trimPrefix(sourceFilePath, '/-/') : '.' + sourceFilePath).replace(reModuleExt, '.js')
642-
643-
return {
644-
id,
645-
url,
646-
isRemote,
647-
sourceFilePath,
648-
sourceType: path.extname(sourceFilePath).slice(1).replace('mjs', 'js') || 'js',
649-
sourceHash: '',
650-
deps: [],
651-
jsFile: '',
652-
jsContent: '',
653-
jsSourceMap: '',
654-
hash: '',
655-
} as Module
656-
}
657-
658648
private async _compile(url: string, options?: { sourceCode?: string, implicitDeps?: { url: string, hash: string }[], forceCompile?: boolean }) {
659-
const mod = this._parseUrl(url)
649+
const mod = this._newModule(url)
660650
if (this.#modules.has(mod.id) && !options?.forceCompile) {
661651
return this.#modules.get(mod.id)!
662652
}
@@ -996,33 +986,33 @@ export default class Project {
996986
private async _renderPage(url: RouterURL) {
997987
const start = performance.now()
998988
const ret: RenderResult = { code: 200, head: [], body: '<main></main>' }
999-
const pm = this.#pageModules.get(url.pagePath)!
1000-
if (pm.rendered.has(url.pathname)) {
1001-
const cache = pm.rendered.get(url.pathname)!
989+
const page = this.#pageModules.get(url.pagePath)!
990+
if (page.rendered.has(url.pathname)) {
991+
const cache = page.rendered.get(url.pathname)!
1002992
return { ...cache }
1003993
}
1004994
try {
1005995
const appModule = this.#modules.get('./app.js')
1006-
const pageModule = this.#modules.get(pm.moduleId)!
996+
const pageModule = this.#modules.get(page.moduleId)!
1007997
const [
1008998
{ renderPage, renderHead },
1009-
app,
1010-
page
999+
{ default: App },
1000+
{ default: Page }
10111001
] = await Promise.all([
10121002
import(this.#modules.get('//deno.land/x/aleph/renderer.js')!.jsFile),
1013-
appModule ? this.importModuleAsComponent('./app.js') : Promise.resolve({}),
1014-
this.importModuleAsComponent(pm.moduleId)
1003+
appModule ? await import(appModule.jsFile) : Promise.resolve({}),
1004+
await import(pageModule.jsFile)
10151005
])
10161006
const data = await this.getData()
1017-
const html = renderPage(data, url, appModule ? app : undefined, page)
1007+
const html = renderPage(data, url, appModule ? App : undefined, Page)
10181008
const head = renderHead([
10191009
pageModule.deps.map(({ url }) => url).filter(url => reStyleModuleExt.test(url)),
10201010
appModule?.deps.map(({ url }) => url).filter(url => reStyleModuleExt.test(url))
10211011
].filter(Boolean).flat())
10221012
ret.code = 200
10231013
ret.head = head
10241014
ret.body = `<main>${html}</main>`
1025-
pm.rendered.set(url.pathname, { ...ret })
1015+
page.rendered.set(url.pathname, { ...ret })
10261016
log.debug(`render page '${url.pagePath}' in ${Math.round(performance.now() - start)}ms`)
10271017
} catch (err) {
10281018
ret.code = 500

renderer.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ export { renderHead } from './head.ts'
1010
export function renderPage(
1111
data: Record<string, any>,
1212
url: RouterURL,
13-
App: { Component: ComponentType<any> } | undefined,
14-
Page: { Component: ComponentType<any> },
13+
App: ComponentType<any> | undefined,
14+
Page: ComponentType<any>,
1515
) {
16-
const pageEl = React.createElement(util.isLikelyReactComponent(Page.Component) ? Page.Component : E501Page)
17-
const appEl = App ? (util.isLikelyReactComponent(App.Component) ? React.createElement(App.Component, null, pageEl) : React.createElement(E501App)) : pageEl
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
1818
return ReactDomServer.renderToString(React.createElement(
1919
DataContext.Provider,
2020
{ value: data },

0 commit comments

Comments
 (0)