@@ -52,6 +52,7 @@ class NodeServer implements Server {
5252 readonly #isSecure?: boolean ;
5353
5454 #listeningPromise?: Promise < void > ;
55+ #listenError?: Error ;
5556
5657 #wait?: ReturnType < typeof createWaitUntil > ;
5758
@@ -120,20 +121,41 @@ class NodeServer implements Server {
120121 this . node . server = server ;
121122
122123 if ( ! options . manual ) {
123- this . serve ( ) ;
124+ this . serve ( ) . catch ( ( ) => { } ) ;
124125 }
125126 }
126127
127- serve ( ) {
128+ serve ( ) : Promise < this > {
128129 if ( this . #listeningPromise) {
129- return Promise . resolve ( this . #listeningPromise) . then ( ( ) => this ) ;
130+ return this . #listeningPromise. then ( ( ) => this ) ;
130131 }
131- this . #listeningPromise = new Promise < void > ( ( resolve ) => {
132- this . node ! . server ! . listen ( this . serveOptions , ( ) => {
132+
133+ const server = this . node ?. server ;
134+ if ( ! server ) {
135+ return Promise . reject ( new Error ( "Server not initialized" ) ) ;
136+ }
137+
138+ this . #listenError = undefined ;
139+ this . #listeningPromise = new Promise < void > ( ( resolve , reject ) => {
140+ const onError = ( error : Error ) => {
141+ server . off ( "listening" , onListening ) ;
142+ this . #listenError = error ;
143+ this . #listeningPromise = undefined ;
144+ reject ( error ) ;
145+ } ;
146+
147+ const onListening = ( ) => {
148+ server . off ( "error" , onError ) ;
133149 printListening ( this . options , this . url ) ;
134150 resolve ( ) ;
135- } ) ;
151+ } ;
152+
153+ server . once ( "error" , onError ) ;
154+ server . once ( "listening" , onListening ) ;
155+ server . listen ( this . serveOptions ) ;
136156 } ) ;
157+
158+ return this . #listeningPromise. then ( ( ) => this ) ;
137159 }
138160
139161 get url ( ) {
@@ -148,6 +170,9 @@ class NodeServer implements Server {
148170 }
149171
150172 ready ( ) : Promise < Server > {
173+ if ( this . #listenError) {
174+ return Promise . reject ( this . #listenError) ;
175+ }
151176 return Promise . resolve ( this . #listeningPromise) . then ( ( ) => this ) ;
152177 }
153178
0 commit comments