@@ -38,6 +38,7 @@ import { ControllerResponse } from '../models/ControllerResponse';
3838import { CustomNativeParameterDecoratorHandlerOptions } from '../models/CustomNativeParameterDecoratorHandlerOptions' ;
3939import { CustomParameterDecoratorHandlerOptions } from '../models/CustomParameterDecoratorHandlerOptions' ;
4040import { HttpAdapterOptions } from '../models/HttpAdapterOptions' ;
41+ import { httpServerServiceIdentifier } from '../models/httpServerServiceIdentifier' ;
4142import { HttpStatusCode } from '../models/HttpStatusCode' ;
4243import { MiddlewareHandler } from '../models/MiddlewareHandler' ;
4344import { RequestHandler } from '../models/RequestHandler' ;
@@ -170,6 +171,8 @@ export abstract class InversifyHttpAdapter<
170171 ) ;
171172 }
172173
174+ this . #bindAdapterRelatedServices( ) ;
175+
173176 await this . #registerControllers( ) ;
174177
175178 this . #isBuilt = true ;
@@ -220,6 +223,40 @@ export abstract class InversifyHttpAdapter<
220223 : param ;
221224 }
222225
226+ #appendHeaderMetadata(
227+ headerMetadata : Record < string , string > | undefined ,
228+ headers : Record < string , string > | undefined ,
229+ ) : Record < string , string > | undefined {
230+ if ( headerMetadata === undefined ) {
231+ return headers ;
232+ }
233+
234+ if ( headers === undefined ) {
235+ return { ...headerMetadata } ;
236+ }
237+
238+ for ( const key in headerMetadata ) {
239+ if ( ! Object . hasOwn ( headers , key ) ) {
240+ headers [ key ] = headerMetadata [ key ] as string ;
241+ }
242+ }
243+
244+ return headers ;
245+ }
246+
247+ #bindAdapterRelatedServices( ) : void {
248+ if ( this . #container. isBound ( httpServerServiceIdentifier ) ) {
249+ throw new InversifyHttpAdapterError (
250+ InversifyHttpAdapterErrorKind . invalidOperationAfterBuild ,
251+ 'An HTTP server is already registered in the container' ,
252+ ) ;
253+ }
254+
255+ this . #container
256+ . bind < TApp > ( httpServerServiceIdentifier )
257+ . toConstantValue ( this . _app ) ;
258+ }
259+
223260 #buildCustomParameterDecoratorHandlerOptions( ) : CustomParameterDecoratorHandlerOptions <
224261 TRequest ,
225262 TResponse
@@ -260,42 +297,6 @@ export abstract class InversifyHttpAdapter<
260297 return httpAdapterOptions . logger ;
261298 }
262299
263- #parseHttpAdapterOptions(
264- defaultHttpAdapterOptions : RequiredOptions < TOptions > ,
265- httpAdapterOptions : TOptions | undefined ,
266- ) : RequiredOptions < TOptions > {
267- return {
268- ...defaultHttpAdapterOptions ,
269- ...httpAdapterOptions ,
270- } ;
271- }
272-
273- async #registerControllers( ) : Promise < void > {
274- const routerExplorerControllerMetadataList : RouterExplorerControllerMetadata <
275- TRequest ,
276- TResponse ,
277- TResult
278- > [ ] = buildRouterExplorerControllerMetadataList (
279- this . #container,
280- this . _logger ,
281- ) ;
282-
283- for ( const routerExplorerControllerMetadata of routerExplorerControllerMetadataList ) {
284- await this . _buildRouter ( {
285- path : routerExplorerControllerMetadata . path ,
286- routeParamsList : this . #builRouteParamdHandlerList(
287- routerExplorerControllerMetadata ,
288- ) ,
289- } ) ;
290-
291- this . #printController(
292- routerExplorerControllerMetadata . target . name ,
293- routerExplorerControllerMetadata . path ,
294- routerExplorerControllerMetadata . controllerMethodMetadataList ,
295- ) ;
296- }
297- }
298-
299300 #builRouteParamdHandlerList(
300301 routerExplorerControllerMetadata : RouterExplorerControllerMetadata <
301302 TRequest ,
@@ -698,14 +699,14 @@ export abstract class InversifyHttpAdapter<
698699 return handleError ;
699700 }
700701
701- #setHeaders (
702- request : TRequest ,
703- response : TResponse ,
704- headers : Record < string , string > ,
705- ) : void {
706- for ( const key in headers ) {
707- this . _setHeader ( request , response , key , headers [ key ] as string ) ;
708- }
702+ #parseHttpAdapterOptions (
703+ defaultHttpAdapterOptions : RequiredOptions < TOptions > ,
704+ httpAdapterOptions : TOptions | undefined ,
705+ ) : RequiredOptions < TOptions > {
706+ return {
707+ ... defaultHttpAdapterOptions ,
708+ ... httpAdapterOptions ,
709+ } ;
709710 }
710711
711712 #reply(
@@ -751,6 +752,16 @@ export abstract class InversifyHttpAdapter<
751752 }
752753 }
753754
755+ #setHeaders(
756+ request : TRequest ,
757+ response : TResponse ,
758+ headers : Record < string , string > ,
759+ ) : void {
760+ for ( const key in headers ) {
761+ this . _setHeader ( request , response , key , headers [ key ] as string ) ;
762+ }
763+ }
764+
754765 #getMiddlewareHandlerFromMetadata(
755766 routerExplorerControllerMethodMetadata : RouterExplorerControllerMethodMetadata <
756767 TRequest ,
@@ -883,25 +894,30 @@ export abstract class InversifyHttpAdapter<
883894 this . _logger . error ( errorMessage ) ;
884895 }
885896
886- #appendHeaderMetadata(
887- headerMetadata : Record < string , string > | undefined ,
888- headers : Record < string , string > | undefined ,
889- ) : Record < string , string > | undefined {
890- if ( headerMetadata === undefined ) {
891- return headers ;
892- }
897+ async #registerControllers( ) : Promise < void > {
898+ const routerExplorerControllerMetadataList : RouterExplorerControllerMetadata <
899+ TRequest ,
900+ TResponse ,
901+ TResult
902+ > [ ] = buildRouterExplorerControllerMetadataList (
903+ this . #container,
904+ this . _logger ,
905+ ) ;
893906
894- if ( headers === undefined ) {
895- return { ...headerMetadata } ;
896- }
907+ for ( const routerExplorerControllerMetadata of routerExplorerControllerMetadataList ) {
908+ await this . _buildRouter ( {
909+ path : routerExplorerControllerMetadata . path ,
910+ routeParamsList : this . #builRouteParamdHandlerList(
911+ routerExplorerControllerMetadata ,
912+ ) ,
913+ } ) ;
897914
898- for ( const key in headerMetadata ) {
899- if ( ! Object . hasOwn ( headers , key ) ) {
900- headers [ key ] = headerMetadata [ key ] as string ;
901- }
915+ this . #printController(
916+ routerExplorerControllerMetadata . target . name ,
917+ routerExplorerControllerMetadata . path ,
918+ routerExplorerControllerMetadata . controllerMethodMetadataList ,
919+ ) ;
902920 }
903-
904- return headers ;
905921 }
906922
907923 #setGlobalErrorFilter( errorFilter : Newable < ErrorFilter > ) : void {
0 commit comments