Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/purple-taxes-join.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@solidjs/start": patch
---

reload ssr server when new route files are created in dev
Comment thread
atilafassina marked this conversation as resolved.
33 changes: 11 additions & 22 deletions packages/start/src/config/fs-routes/fs-watcher.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import type {
EnvironmentModuleNode,
FSWatcher,
ModuleGraph,
ModuleNode,
PluginOption,
ViteDevServer,
} from "vite";
import { VITE_ENVIRONMENTS } from "../constants.ts";
import { moduleId } from "./index.ts";
import type { BaseFileSystemRouter } from "./router.ts";

Expand All @@ -32,30 +31,20 @@ function createRoutesReloader(
return () => routes.removeEventListener("reload", handleRoutesReload);

function handleRoutesReload(): void {
if (environment === "ssr") {
// Handle server environment HMR reload
const serverEnv = server.environments.server;
if (serverEnv && serverEnv.moduleGraph) {
const mod: EnvironmentModuleNode | undefined =
serverEnv.moduleGraph.getModuleById(moduleId);
if (mod) {
const seen = new Set<EnvironmentModuleNode>();
serverEnv.moduleGraph.invalidateModule(mod, seen);
}
}
} else {
// Handle client environment HMR reload
const { moduleGraph }: { moduleGraph: ModuleGraph } = server;
const mod: ModuleNode | undefined = moduleGraph.getModuleById(moduleId);
const envName =
environment === "ssr" ? VITE_ENVIRONMENTS.server : VITE_ENVIRONMENTS.client;
const devEnv = server.environments[envName];
Comment thread
atilafassina marked this conversation as resolved.
if (devEnv && devEnv.moduleGraph) {
const mod: EnvironmentModuleNode | undefined =
devEnv.moduleGraph.getModuleById(moduleId);
if (mod) {
const seen = new Set<ModuleNode>();
moduleGraph.invalidateModule(mod, seen);
server.reloadModule(mod);
const seen = new Set<EnvironmentModuleNode>();
devEnv.moduleGraph.invalidateModule(mod, seen);
}
}

if (!server.hot) {
server.ws.send({ type: "full-reload" });
if (devEnv && devEnv.hot) {
devEnv.hot.send({ type: "full-reload" });
}
Comment thread
atilafassina marked this conversation as resolved.
}
}
Expand Down
Loading