@@ -6,11 +6,48 @@ import {
66 type ViteDevServer ,
77} from "vite" ;
88import { 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
1017export 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