@@ -30,6 +30,7 @@ export class NitroDevServer extends NitroDevApp implements RunnerRPCHooks {
3030 #manager: RunnerManager ;
3131 #workerIdCtr: number = 0 ;
3232 #workerError?: unknown ;
33+ #workerRetries: number = 0 ;
3334 #building?: boolean = true ; // Assume initial build will start soon
3435 #buildError?: unknown ;
3536 #reloadPromise?: Promise < void > ;
@@ -67,6 +68,7 @@ export class NitroDevServer extends NitroDevApp implements RunnerRPCHooks {
6768
6869 this . #manager = new RunnerManager ( ) ;
6970 this . #manager. onReady ( async ( _runner , addr ) => {
71+ this . #workerRetries = 0 ;
7072 writeDevBuildInfo ( this . nitro , addr ) . catch ( ( error ) => {
7173 this . nitro . logger . warn (
7274 `Failed to write dev build info: ${ error instanceof Error ? error . message : String ( error ) } `
@@ -75,6 +77,15 @@ export class NitroDevServer extends NitroDevApp implements RunnerRPCHooks {
7577 } ) ;
7678 this . #manager. onClose ( ( _runner , cause ) => {
7779 this . #workerError = cause ;
80+ if ( this . #workerRetries++ < 3 ) {
81+ this . nitro . logger . info ( "Restarting dev worker..." , cause ? `Cause: ${ cause } ` : "" ) ;
82+ this . reload ( ) ;
83+ } else {
84+ this . nitro . logger . error (
85+ "Dev worker failed after 3 retries." ,
86+ cause ? `Last cause: ${ cause } ` : ""
87+ ) ;
88+ }
7889 } ) ;
7990
8091 nitro . hooks . hook ( "close" , ( ) => this . close ( ) ) ;
0 commit comments