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

Commit 194d656

Browse files
committed
Compile framework renderer on demand
1 parent c5dce6b commit 194d656

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

server/aleph.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -216,15 +216,6 @@ export class Aleph implements IAleph {
216216
const { init } = await import(`../framework/${this.#config.framework}/init.ts`)
217217
await init(this)
218218

219-
// compile and import framework renderer
220-
if (this.#config.ssr) {
221-
const mod = await this.compile(`${alephPkgUri}/framework/${this.#config.framework}/renderer.ts`)
222-
const { render } = await this.importModule(mod)
223-
if (util.isFunction(render)) {
224-
this.#renderer.setFrameworkRenderer({ render })
225-
}
226-
}
227-
228219
ms.stop(`init ${this.#config.framework} framework`)
229220

230221
const appFile = await findFile(srcDir, builtinModuleExts.map(ext => `app.${ext}`))
@@ -651,6 +642,14 @@ export class Aleph implements IAleph {
651642
}
652643

653644
async #renderPage(url: RouterURL, nestedModules: string[]): Promise<[string, Record<string, SSRData> | null]> {
645+
// compile and import framework renderer
646+
if (!this.#renderer.ready) {
647+
const mod = await this.compile(`${getAlephPkgUri()}/framework/${this.#config.framework}/renderer.ts`)
648+
const { render } = await this.importModule(mod)
649+
if (util.isFunction(render)) {
650+
this.#renderer.setFrameworkRenderer({ render })
651+
}
652+
}
654653
let [html, data] = await this.#renderer.renderPage(url, nestedModules)
655654
for (const callback of this.#renderListeners) {
656655
callback({ path: url.toString(), html, data })

server/renderer.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,22 @@ export class Renderer {
2727
#aleph: Aleph
2828
#renderer: FrameworkRenderer
2929
#cache: Map<string, Map<string, { html: string, data: Record<string, SSRData> | null }>>
30+
#ready: boolean
3031

3132
constructor(app: Aleph) {
3233
this.#aleph = app
3334
this.#renderer = { render: async () => { throw new Error("framework renderer is undefined") } }
3435
this.#cache = new Map()
36+
this.#ready = false
37+
}
38+
39+
get ready() {
40+
return this.#ready
3541
}
3642

3743
setFrameworkRenderer(renderer: FrameworkRenderer) {
3844
this.#renderer = renderer
45+
this.#ready = true
3946
}
4047

4148
async cache(

0 commit comments

Comments
 (0)