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

Commit 2ff7a56

Browse files
committed
fix(client): fix routeModules error
1 parent 334ea64 commit 2ff7a56

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed

examples/vue-app/main.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { createSSRApp } from "aleph/vue";
1+
import { Link, createSSRApp } from "aleph/vue";
22
import App from "./app.vue";
33

4-
createSSRApp(App).mount("#root", true);
4+
const app = createSSRApp(App)
5+
6+
app.component('Link', Link)
7+
8+
app.mount("#root", true)

framework/vue/router.ts

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import { Component, createApp, createSSRApp } from "vue";
22
import type { SSRContext } from "../../server/renderer.ts";
33
import { RouterContext } from "./context.ts";
44
import { defineComponent } from "vue";
5+
import { RouteModule } from "../core/route.ts";
6+
7+
// deno-lint-ignore no-explicit-any
8+
const global = window as any;
59

610
export const App = defineComponent({
711
name: "App",
@@ -19,14 +23,19 @@ export const App = defineComponent({
1923
},
2024
});
2125

22-
const createSSRApp_ = (app: Component, { ssrContext }: { ssrContext: SSRContext }) => {
23-
const routeModules = ssrContext?.routeModules;
26+
type RootProps = {
27+
ssrContext?: SSRContext;
28+
};
29+
30+
const createSSRApp_ = (app: Component, props?: RootProps) => {
31+
const { ssrContext } = props || {};
32+
const routeModules = ssrContext?.routeModules || loadSSRModulesFromTag();
2433

2534
if (ssrContext?.url) {
2635
RouterContext.value.url = ssrContext?.url;
2736
}
2837

29-
if (routeModules.length > 0) {
38+
if (routeModules && routeModules.length > 0) {
3039
const defaultRouteModules = routeModules[0];
3140
const { defaultExport } = defaultRouteModules;
3241
if (defaultExport) {
@@ -37,6 +46,47 @@ const createSSRApp_ = (app: Component, { ssrContext }: { ssrContext: SSRContext
3746
return createSSRApp(app);
3847
};
3948

49+
function getRouteModules(): Record<string, { defaultExport?: unknown; withData?: boolean }> {
50+
return global.__ROUTE_MODULES || (global.__ROUTE_MODULES = {});
51+
}
52+
53+
function loadSSRModulesFromTag(): RouteModule[] {
54+
const el = window.document?.getElementById("ssr-modules");
55+
if (el) {
56+
try {
57+
const data = JSON.parse(el.innerText);
58+
if (Array.isArray(data)) {
59+
let suspenseData: Record<string, unknown> | null | undefined = undefined;
60+
const routeModules = getRouteModules();
61+
return data.map(({ url, filename, suspense, ...rest }) => {
62+
if (suspense) {
63+
if (suspenseData === undefined) {
64+
const el = window.document?.getElementById("suspense-data");
65+
if (el) {
66+
suspenseData = JSON.parse(el.innerText);
67+
} else {
68+
suspenseData = null;
69+
}
70+
}
71+
if (suspenseData) {
72+
rest.data = suspenseData[url];
73+
}
74+
}
75+
return {
76+
url: new URL(url, location.href),
77+
filename,
78+
defaultExport: routeModules[filename].defaultExport,
79+
...rest,
80+
};
81+
});
82+
}
83+
} catch (e) {
84+
throw new Error(`loadSSRModulesFromTag: ${e.message}`);
85+
}
86+
}
87+
return [];
88+
}
89+
4090
const createApp_ = (app: Component) => {
4191
return createApp(app);
4292
};

0 commit comments

Comments
 (0)