UNPKG

3.81 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ClientProxy = void 0;
4const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util");
5const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
6const rxjs_1 = require("rxjs");
7const operators_1 = require("rxjs/operators");
8const constants_1 = require("../constants");
9const incoming_response_deserializer_1 = require("../deserializers/incoming-response.deserializer");
10const invalid_message_exception_1 = require("../errors/invalid-message.exception");
11const identity_serializer_1 = require("../serializers/identity.serializer");
12const utils_1 = require("../utils");
13class ClientProxy {
14 constructor() {
15 this.routingMap = new Map();
16 }
17 send(pattern, data) {
18 if ((0, shared_utils_1.isNil)(pattern) || (0, shared_utils_1.isNil)(data)) {
19 return (0, rxjs_1.throwError)(() => new invalid_message_exception_1.InvalidMessageException());
20 }
21 return (0, rxjs_1.defer)(async () => this.connect()).pipe((0, operators_1.mergeMap)(() => new rxjs_1.Observable((observer) => {
22 const callback = this.createObserver(observer);
23 return this.publish({ pattern, data }, callback);
24 })));
25 }
26 emit(pattern, data) {
27 if ((0, shared_utils_1.isNil)(pattern) || (0, shared_utils_1.isNil)(data)) {
28 return (0, rxjs_1.throwError)(() => new invalid_message_exception_1.InvalidMessageException());
29 }
30 const source = (0, rxjs_1.defer)(async () => this.connect()).pipe((0, operators_1.mergeMap)(() => this.dispatchEvent({ pattern, data })));
31 const connectableSource = (0, rxjs_1.connectable)(source, {
32 connector: () => new rxjs_1.Subject(),
33 resetOnDisconnect: false,
34 });
35 connectableSource.connect();
36 return connectableSource;
37 }
38 createObserver(observer) {
39 return ({ err, response, isDisposed }) => {
40 if (err) {
41 return observer.error(this.serializeError(err));
42 }
43 else if (response !== undefined && isDisposed) {
44 observer.next(this.serializeResponse(response));
45 return observer.complete();
46 }
47 else if (isDisposed) {
48 return observer.complete();
49 }
50 observer.next(this.serializeResponse(response));
51 };
52 }
53 serializeError(err) {
54 return err;
55 }
56 serializeResponse(response) {
57 return response;
58 }
59 assignPacketId(packet) {
60 const id = (0, random_string_generator_util_1.randomStringGenerator)();
61 return Object.assign(packet, { id });
62 }
63 connect$(instance, errorEvent = constants_1.ERROR_EVENT, connectEvent = constants_1.CONNECT_EVENT) {
64 const error$ = (0, rxjs_1.fromEvent)(instance, errorEvent).pipe((0, operators_1.map)((err) => {
65 throw err;
66 }));
67 const connect$ = (0, rxjs_1.fromEvent)(instance, connectEvent);
68 return (0, rxjs_1.merge)(error$, connect$).pipe((0, operators_1.take)(1));
69 }
70 getOptionsProp(obj, prop, defaultValue = undefined) {
71 return (obj && obj[prop]) || defaultValue;
72 }
73 normalizePattern(pattern) {
74 return (0, utils_1.transformPatternToRoute)(pattern);
75 }
76 initializeSerializer(options) {
77 this.serializer =
78 (options &&
79 options.serializer) ||
80 new identity_serializer_1.IdentitySerializer();
81 }
82 initializeDeserializer(options) {
83 this.deserializer =
84 (options &&
85 options.deserializer) ||
86 new incoming_response_deserializer_1.IncomingResponseDeserializer();
87 }
88}
89exports.ClientProxy = ClientProxy;