Skip to content

Commit abe3979

Browse files
authored
fix: update routes graph when new file is created (#2125)
1 parent d4be1b6 commit abe3979

File tree

3 files changed

+38
-38
lines changed

3 files changed

+38
-38
lines changed

.changeset/purple-taxes-join.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@solidjs/start": patch
3+
---
4+
5+
reload ssr server when new route files are created in dev

packages/start/src/config/fs-routes/fs-watcher.ts

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import type {
22
EnvironmentModuleNode,
33
FSWatcher,
4-
ModuleGraph,
5-
ModuleNode,
64
PluginOption,
75
ViteDevServer,
86
} from "vite";
7+
import { VITE_ENVIRONMENTS } from "../constants.ts";
98
import { moduleId } from "./index.ts";
109
import type { BaseFileSystemRouter } from "./router.ts";
1110

@@ -32,30 +31,24 @@ function createRoutesReloader(
3231
return () => routes.removeEventListener("reload", handleRoutesReload);
3332

3433
function handleRoutesReload(): void {
35-
if (environment === "ssr") {
36-
// Handle server environment HMR reload
37-
const serverEnv = server.environments.server;
38-
if (serverEnv && serverEnv.moduleGraph) {
39-
const mod: EnvironmentModuleNode | undefined =
40-
serverEnv.moduleGraph.getModuleById(moduleId);
41-
if (mod) {
42-
const seen = new Set<EnvironmentModuleNode>();
43-
serverEnv.moduleGraph.invalidateModule(mod, seen);
44-
}
45-
}
46-
} else {
47-
// Handle client environment HMR reload
48-
const { moduleGraph }: { moduleGraph: ModuleGraph } = server;
49-
const mod: ModuleNode | undefined = moduleGraph.getModuleById(moduleId);
50-
if (mod) {
51-
const seen = new Set<ModuleNode>();
52-
moduleGraph.invalidateModule(mod, seen);
53-
server.reloadModule(mod);
54-
}
34+
const envName =
35+
environment === "ssr" ? VITE_ENVIRONMENTS.server : VITE_ENVIRONMENTS.client;
36+
const devEnv = server.environments[envName];
37+
if (!devEnv?.moduleGraph) return;
38+
39+
const mod: EnvironmentModuleNode | undefined =
40+
devEnv.moduleGraph.getModuleById(moduleId);
41+
if (mod) {
42+
const seen = new Set<EnvironmentModuleNode>();
43+
devEnv.moduleGraph.invalidateModule(mod, seen);
5544
}
5645

57-
if (!server.hot) {
58-
server.ws.send({ type: "full-reload" });
46+
if (environment !== "ssr") {
47+
if (mod) {
48+
devEnv.reloadModule(mod);
49+
} else if (devEnv.hot) {
50+
devEnv.hot.send({ type: "full-reload" });
51+
}
5952
}
6053
}
6154
}

packages/start/src/server/handler.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,23 @@ export function createBaseHandler(
4343
const mod = await match.handler.import();
4444
const fn =
4545
event.request.method === "HEAD" ? mod["HEAD"] || mod["GET"] : mod[event.request.method];
46-
(event as APIEvent).params = match.params || {};
47-
// @ts-expect-error
48-
sharedConfig.context = { event };
49-
const res = await fn!(event);
50-
if (res !== undefined) {
51-
if (res instanceof Response) return produceResponseWithEventHeaders(res);
52-
53-
return res;
46+
if (typeof fn === "function") {
47+
(event as APIEvent).params = match.params || {};
48+
// @ts-expect-error
49+
sharedConfig.context = { event };
50+
const res = await fn(event);
51+
if (res !== undefined) {
52+
if (res instanceof Response) return produceResponseWithEventHeaders(res);
53+
54+
return res;
55+
}
56+
if (event.request.method !== "GET") {
57+
throw new Error(
58+
`API handler for ${event.request.method} "${event.request.url}" did not return a response.`,
59+
);
60+
}
61+
if (!match.isPage) return;
5462
}
55-
if (event.request.method !== "GET") {
56-
throw new Error(
57-
`API handler for ${event.request.method} "${event.request.url}" did not return a response.`,
58-
);
59-
}
60-
if (!match.isPage) return;
6163
}
6264

6365
const context = await createPageEvent(event);

0 commit comments

Comments
 (0)