Skip to content

Commit 4f28907

Browse files
committed
feat: vite preview
1 parent 10bf932 commit 4f28907

1 file changed

Lines changed: 38 additions & 3 deletions

File tree

packages/start/src/config/dev-server.ts

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,48 @@ import {
66
type ViteDevServer,
77
} from "vite";
88
import { VITE_ENVIRONMENTS } from "./constants.ts";
9+
import { join, resolve } from "node:path";
10+
import { H3, serveStatic } from "h3";
11+
import { stat, readFile } from "node:fs/promises";
12+
13+
type Server = {
14+
default: { fetch: (req: Request) => Promise<Response> };
15+
};
916

1017
export function devServer(): Array<PluginOption> {
1118
return [
1219
{
1320
name: "solid-start-dev-server",
21+
async configurePreviewServer(vitePreviewServer) {
22+
const { default: h3App }: Server = await import(
23+
resolve(process.cwd(), "dist/server/entry-server.js")
24+
);
25+
const app = new H3();
26+
app.use("/_build/**", event => {
27+
return serveStatic(event, {
28+
indexNames: ["/index.html"],
29+
headers: { "cache-control": "public, max-age=3156000, immutable" },
30+
getContents: id => readFile(join(process.cwd(), "dist/client", id)),
31+
getMeta: async id => {
32+
const stats = await stat(join("dist/client", id)).catch(() => {});
33+
if (stats?.isFile()) {
34+
return {
35+
size: stats.size,
36+
mtime: stats.mtimeMs,
37+
};
38+
}
39+
},
40+
});
41+
});
42+
app.mount("/", h3App);
43+
44+
vitePreviewServer.middlewares.use(async (req, res) => {
45+
const webReq = new NodeRequest({ req, res });
46+
47+
const webRes = await app.fetch(webReq);
48+
sendNodeResponse(res, webRes);
49+
});
50+
},
1451
configureServer(viteDevServer) {
1552
(globalThis as any).VITE_DEV_SERVER = viteDevServer;
1653
return async () => {
@@ -40,9 +77,7 @@ export function devServer(): Array<PluginOption> {
4077
const webReq = new NodeRequest({ req, res });
4178

4279
try {
43-
const serverEntry: {
44-
default: { fetch: (req: Request) => Promise<Response> };
45-
} = await serverEnv.runner.import("./src/entry-server.tsx");
80+
const serverEntry: Server = await serverEnv.runner.import("./src/entry-server.tsx");
4681

4782
const webRes = await serverEntry.default.fetch(webReq);
4883

0 commit comments

Comments
 (0)