Skip to content

Commit 994d790

Browse files
committed
refactor: improve Modules Component types for better code readability
1 parent 7194d0c commit 994d790

File tree

3 files changed

+42
-27
lines changed

3 files changed

+42
-27
lines changed
Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { measureTime } from "@/utils/time-perf";
66
import fse from "fs-extra";
77
import kleur from "kleur";
88
import { join } from "pathe";
9-
import { Fragment, h } from "preact";
109
import { renderToStringAsync } from "preact-render-to-string";
1110
import type {
1211
AppModule,
@@ -60,13 +59,24 @@ export async function build() {
6059
api: [],
6160
};
6261

63-
let server_entry_module: ServerEntryModule | null = null;
62+
const server_entry_module = (await import(
63+
server_site_manifest.entry_server
64+
)) as ServerEntryModule;
6465

65-
server_entry_module = (await import(server_site_manifest.entry_server)) as ServerEntryModule;
66+
const app_module = (await import(server_site_manifest.app_module)) as AppModule;
6667

67-
let app_module: AppModule | null = null;
68+
if (!server_entry_module.default) {
69+
logger.error(new Error("entry-server.{tsx,jsx} should `export default` a valid Component"));
70+
process.exit(1);
71+
}
72+
73+
if (!app_module.default) {
74+
logger.error(new Error("App.{tsx,jsx} should `export default` a valid Component"));
75+
process.exit(1);
76+
}
6877

69-
app_module = (await import(server_site_manifest.app_module)) as AppModule;
78+
const AppComponent = app_module.default;
79+
const ServerEntryComponent = server_entry_module.default;
7080

7181
// Generating api routes Manifest
7282
const pranx_server_base_path = join(".pranx", "server");
@@ -289,15 +299,16 @@ export async function build() {
289299
if (route.rendering_kind === "server-side") continue;
290300

291301
const page_module = (await import(route.absolute_module_path)) as PageModule;
302+
const PageComponent = page_module.default;
292303

293304
if (route.static_generated_routes.length > 0) {
294305
for (const static_route of route.static_generated_routes) {
295306
const page_prerendered = await renderToStringAsync(
296-
h(
297-
server_entry_module?.default || Fragment,
298-
{},
299-
h(app_module.default, {}, h(page_module.default, static_route.props))
300-
)
307+
<ServerEntryComponent>
308+
<AppComponent>
309+
<PageComponent {...static_route.props} />
310+
</AppComponent>
311+
</ServerEntryComponent>
301312
);
302313

303314
const html = generate_html_template({
@@ -318,11 +329,11 @@ export async function build() {
318329
}
319330

320331
const page_prerendered = await renderToStringAsync(
321-
h(
322-
server_entry_module?.default || Fragment,
323-
{},
324-
h(app_module.default, {}, h(page_module.default, route.props, null))
325-
)
332+
<ServerEntryComponent>
333+
<AppComponent>
334+
<PageComponent {...route.props} />
335+
</AppComponent>
336+
</ServerEntryComponent>
326337
);
327338

328339
const html = generate_html_template({

packages/pranx/src/server/runtime/define-ssr-handlers.ts renamed to packages/pranx/src/server/runtime/define-ssr-handlers.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { logger } from "@/log/logger";
55
import fse from "fs-extra";
66
import { defineHandler, type H3, html } from "h3";
77
import { extname, join, resolve } from "pathe";
8-
import { Fragment, h } from "preact";
98
import { renderToStringAsync } from "preact-render-to-string";
109
import type {
1110
AppModule,
@@ -20,11 +19,16 @@ export const define_ssr_handlers = async (server_manifest: SERVER_MANIFEST, app:
2019
const server_entry_module = (await import(server_manifest.entry_server)) as ServerEntryModule;
2120
const app_module = (await import(server_manifest.app_module)) as AppModule;
2221

22+
const AppComponent = app_module.default;
23+
const ServerEntryComponent = server_entry_module.default;
24+
2325
for (const route of server_manifest.routes) {
2426
if (route.rendering_kind !== "server-side") continue;
2527

2628
const file_absolute = resolve(join(OUTPUT_BUNDLE_SERVER_DIR, "pages", route.module));
27-
const { default: page, getServerSideProps } = (await import(file_absolute)) as PageModule;
29+
const { default: PageComponent, getServerSideProps } = (await import(
30+
file_absolute
31+
)) as PageModule;
2832

2933
const hydrate_data = (await fse.readJSON(SITE_MANIFEST_OUTPUT_PATH)) as HYDRATE_DATA;
3034
const url_for_routing_match = filePathToRoutingPath(route.path, false);
@@ -65,11 +69,11 @@ export const define_ssr_handlers = async (server_manifest: SERVER_MANIFEST, app:
6569
hydrate_data.routes[target_route_index].props = props_to_return;
6670

6771
const page_prerendered = await renderToStringAsync(
68-
h(
69-
server_entry_module?.default || Fragment,
70-
{},
71-
h(app_module.default, {}, h(page, props_to_return))
72-
)
72+
<ServerEntryComponent>
73+
<AppComponent>
74+
<PageComponent {...props_to_return} />
75+
</AppComponent>
76+
</ServerEntryComponent>
7377
);
7478

7579
const html_string = generate_html_template({

packages/pranx/types/index.d.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { BuildOptions } from "esbuild";
22
import { EventHandlerRequest, H3Event, defineHandler } from "h3";
3-
import { VNode } from "preact";
3+
import { ComponentType } from "preact";
44
import { PropsWithChildren } from "preact/compat";
55
import { useHead } from "unhead";
66

7-
export type ServerEntryProps = PropsWithChildren;
7+
export type ServerEntryProps = PropsWithChildren<any>;
88

99
export type ServerEntryModule = {
10-
default(): VNode<ServerEntryProps>;
10+
default: ComponentType;
1111
};
1212

1313
export type AppModule = {
14-
default(): VNode<PropsWithChildren<any>>;
14+
default: ComponentType;
1515
};
1616

1717
// Static
@@ -42,7 +42,7 @@ export type GetServerSidePropsFunction<Props extends Record<string, any> = {}> =
4242
// Meta
4343
export type MetaFunction = typeof useHead;
4444

45-
export type Page = VNode<any>;
45+
export type Page = ComponentType;
4646

4747
export type PageModule = {
4848
default(): Page;

0 commit comments

Comments
 (0)