Skip to content

Commit d6b31c3

Browse files
fix(): fix interceptors in combination with events nestjs#2209
1 parent 97afee9 commit d6b31c3

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

packages/microservices/server/server.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ import { Logger } from '@nestjs/common/services/logger.service';
22
import { loadPackage } from '@nestjs/common/utils/load-package.util';
33
import { isFunction, isString } from '@nestjs/common/utils/shared.utils';
44
import {
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';
1213
import {
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

Comments
 (0)