@@ -13,6 +13,7 @@ const BASE_SERVER_PORT = 3773;
1313const BASE_WEB_PORT = 5733 ;
1414const MAX_HASH_OFFSET = 3000 ;
1515const MAX_PORT = 65535 ;
16+ const DEFAULT_DEV_HOST = "127.0.0.1" ;
1617
1718export const DEFAULT_DEV_STATE_DIR = Effect . map ( Effect . service ( Path . Path ) , ( path ) =>
1819 path . join ( homedir ( ) , ".t3" , "dev" ) ,
@@ -130,6 +131,21 @@ interface CreateDevRunnerEnvInput {
130131 readonly devUrl : URL | undefined ;
131132}
132133
134+ const isWildcardHost = ( host : string ) : boolean =>
135+ host === "0.0.0.0" || host === "::" || host === "[::]" ;
136+
137+ const formatHostForUrl = ( host : string ) : string =>
138+ host . includes ( ":" ) && ! host . startsWith ( "[" ) ? `[${ host } ]` : host ;
139+
140+ const resolveDevHost = ( host : string | undefined ) : string => {
141+ const trimmedHost = host ?. trim ( ) ;
142+ if ( ! trimmedHost || trimmedHost === "localhost" || isWildcardHost ( trimmedHost ) ) {
143+ return DEFAULT_DEV_HOST ;
144+ }
145+
146+ return trimmedHost ;
147+ } ;
148+
133149export function createDevRunnerEnv ( {
134150 mode,
135151 baseEnv,
@@ -148,14 +164,15 @@ export function createDevRunnerEnv({
148164 const serverPort = port ?? BASE_SERVER_PORT + serverOffset ;
149165 const webPort = BASE_WEB_PORT + webOffset ;
150166 const resolvedStateDir = yield * resolveStateDir ( stateDir ) ;
167+ const webHost = resolveDevHost ( host ) ;
151168
152169 const output : NodeJS . ProcessEnv = {
153170 ...baseEnv ,
154171 T3CODE_PORT : String ( serverPort ) ,
155172 PORT : String ( webPort ) ,
156173 ELECTRON_RENDERER_PORT : String ( webPort ) ,
157- VITE_WS_URL : `ws://localhost :${ serverPort } ` ,
158- VITE_DEV_SERVER_URL : devUrl ?. toString ( ) ?? `http://localhost :${ webPort } ` ,
174+ VITE_WS_URL : `ws://${ formatHostForUrl ( webHost ) } :${ serverPort } ` ,
175+ VITE_DEV_SERVER_URL : devUrl ?. toString ( ) ?? `http://${ formatHostForUrl ( webHost ) } :${ webPort } ` ,
159176 T3CODE_STATE_DIR : resolvedStateDir ,
160177 } ;
161178
0 commit comments