1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.ClientProxy = void 0;
|
4 | const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util");
|
5 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
6 | const rxjs_1 = require("rxjs");
|
7 | const operators_1 = require("rxjs/operators");
|
8 | const constants_1 = require("../constants");
|
9 | const incoming_response_deserializer_1 = require("../deserializers/incoming-response.deserializer");
|
10 | const invalid_message_exception_1 = require("../errors/invalid-message.exception");
|
11 | const identity_serializer_1 = require("../serializers/identity.serializer");
|
12 | const utils_1 = require("../utils");
|
13 | class 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 && prop in 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 | }
|
89 | exports.ClientProxy = ClientProxy;
|