@@ -2,13 +2,14 @@ import { Logger } from '@nestjs/common/services/logger.service';
22import { loadPackage } from '@nestjs/common/utils/load-package.util' ;
33import { isFunction , isString } from '@nestjs/common/utils/shared.utils' ;
44import {
5+ ConnectableObservable ,
56 EMPTY as empty ,
67 from as fromPromise ,
78 Observable ,
89 of ,
910 Subscription ,
1011} from 'rxjs' ;
11- import { catchError , finalize } from 'rxjs/operators' ;
12+ import { catchError , finalize , publish } from 'rxjs/operators' ;
1213import {
1314 MessageHandler ,
1415 MicroserviceOptions ,
@@ -61,13 +62,16 @@ export abstract class Server {
6162 if ( ! handler ) {
6263 return this . logger . error ( NO_EVENT_HANDLER ) ;
6364 }
64- await handler ( packet . data ) ;
65+ const resultOrStream = await handler ( packet . data ) ;
66+ if ( this . isObservable ( resultOrStream ) ) {
67+ ( resultOrStream . pipe ( publish ( ) ) as ConnectableObservable < any > ) . connect ( ) ;
68+ }
6569 }
6670
6771 public transformToObservable < T = any > ( resultOrDeffered : any ) : Observable < T > {
6872 if ( resultOrDeffered instanceof Promise ) {
6973 return fromPromise ( resultOrDeffered ) ;
70- } else if ( ! ( resultOrDeffered && isFunction ( resultOrDeffered . subscribe ) ) ) {
74+ } else if ( ! this . isObservable ( resultOrDeffered ) ) {
7175 return of ( resultOrDeffered ) ;
7276 }
7377 return resultOrDeffered ;
@@ -91,4 +95,8 @@ export abstract class Server {
9195 ) : T {
9296 return loadPackage ( name , ctx , loader ) ;
9397 }
98+
99+ private isObservable ( input : unknown ) : input is Observable < any > {
100+ return input && isFunction ( ( input as Observable < any > ) . subscribe ) ;
101+ }
94102}
0 commit comments