@ngxs/websocket-plugin 3.7.3 → 3.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { Injectable, Inject } from '@angular/core';
6
6
  import { Actions, Store, getValue, ofActionDispatched } from '@ngxs/store';
7
+ import { Subscription } from 'rxjs';
7
8
  import { WebSocketSubject } from 'rxjs/webSocket';
8
9
  import { ConnectWebSocket, DisconnectWebSocket, SendWebSocketMessage, NGXS_WEBSOCKET_OPTIONS, WebsocketMessageError, WebSocketDisconnected, TypeKeyPropertyMissingError, WebSocketConnectionUpdated, WebSocketConnected } from './symbols';
9
10
  export class WebSocketHandler {
@@ -44,33 +45,41 @@ export class WebSocketHandler {
44
45
  }
45
46
  };
46
47
  this.typeKey = (/** @type {?} */ (this.options.typeKey));
48
+ this.subscription = new Subscription();
47
49
  this.setupActionsListeners();
48
50
  }
51
+ /**
52
+ * @return {?}
53
+ */
54
+ ngOnDestroy() {
55
+ this.closeConnection();
56
+ this.subscription.unsubscribe();
57
+ }
49
58
  /**
50
59
  * @private
51
60
  * @return {?}
52
61
  */
53
62
  setupActionsListeners() {
54
- this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
63
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
55
64
  * @param {?} __0
56
65
  * @return {?}
57
66
  */
58
67
  ({ payload }) => {
59
68
  this.connect(payload);
60
- }));
61
- this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
69
+ })));
70
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
62
71
  * @return {?}
63
72
  */
64
73
  () => {
65
74
  this.disconnect();
66
- }));
67
- this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
75
+ })));
76
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
68
77
  * @param {?} __0
69
78
  * @return {?}
70
79
  */
71
80
  ({ payload }) => {
72
81
  this.send(payload);
73
- }));
82
+ })));
74
83
  }
75
84
  /**
76
85
  * @private
@@ -119,11 +128,7 @@ export class WebSocketHandler {
119
128
  */
120
129
  disconnect() {
121
130
  if (this.socket) {
122
- // `socket.complete()` closes the connection
123
- // also it doesn't invoke the `onComplete` callback that we passed
124
- // into `socket.subscribe(...)`
125
- this.socket.complete();
126
- this.socket = null;
131
+ this.closeConnection();
127
132
  this.dispatchWebSocketDisconnected();
128
133
  }
129
134
  }
@@ -165,8 +170,7 @@ export class WebSocketHandler {
165
170
  */
166
171
  updateConnection() {
167
172
  if (this.socket) {
168
- this.socket.complete();
169
- this.socket = null;
173
+ this.closeConnection();
170
174
  this.store.dispatch(new WebSocketConnectionUpdated());
171
175
  }
172
176
  }
@@ -178,6 +182,19 @@ export class WebSocketHandler {
178
182
  dispatchWebSocketDisconnected() {
179
183
  this.store.dispatch(new WebSocketDisconnected());
180
184
  }
185
+ /**
186
+ * @private
187
+ * @return {?}
188
+ */
189
+ closeConnection() {
190
+ // `socket.complete()` closes the connection
191
+ // also it doesn't invoke the `onComplete` callback that we passed
192
+ // into `socket.subscribe(...)`
193
+ if (this.socket !== null) {
194
+ this.socket.complete();
195
+ this.socket = null;
196
+ }
197
+ }
181
198
  }
182
199
  WebSocketHandler.decorators = [
183
200
  { type: Injectable }
@@ -204,6 +221,11 @@ if (false) {
204
221
  * @private
205
222
  */
206
223
  WebSocketHandler.prototype.typeKey;
224
+ /**
225
+ * @type {?}
226
+ * @private
227
+ */
228
+ WebSocketHandler.prototype.subscription;
207
229
  /**
208
230
  * @type {?}
209
231
  * @private
@@ -220,4 +242,4 @@ if (false) {
220
242
  */
221
243
  WebSocketHandler.prototype.options;
222
244
  }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy93ZWJzb2NrZXQtcGx1Z2luLyIsInNvdXJjZXMiOlsic3JjL3dlYnNvY2tldC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxFQUFFLGdCQUFnQixFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFFdEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNuQixNQUFNLFdBQVcsQ0FBQztBQUduQixNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7SUEwQjNCLFlBQ1UsS0FBWSxFQUNaLFFBQWlCLEVBQ2UsT0FBbUM7UUFGbkUsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUNaLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDZSxZQUFPLEdBQVAsT0FBTyxDQUE0QjtRQTVCckUsV0FBTSxHQUFpQyxJQUFJLENBQUM7UUFFNUMsV0FBTSxHQUFnQztZQUM1QyxHQUFHLEVBQUUsbUJBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUM7WUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTs7WUFFL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ25DLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDdkMsYUFBYSxFQUFFO2dCQUNiLElB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LGtDQUFvRDs7Ozs7SUFFcEQsa0NBbUJFOzs7OztJQUVGLG1DQUF3Qzs7Ozs7SUFHdEMsaUNBQW9COzs7OztJQUNwQixvQ0FBeUI7Ozs7O0lBQ3pCLG1DQUEyRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBTdG9yZSwgZ2V0VmFsdWUsIG9mQWN0aW9uRGlzcGF0Y2hlZCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcclxuXHJcbmltcG9ydCB7IFdlYlNvY2tldFN1YmplY3QsIFdlYlNvY2tldFN1YmplY3RDb25maWcgfSBmcm9tICdyeGpzL3dlYlNvY2tldCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbm5lY3RXZWJTb2NrZXQsXHJcbiAgRGlzY29ubmVjdFdlYlNvY2tldCxcclxuICBTZW5kV2ViU29ja2V0TWVzc2FnZSxcclxuICBOR1hTX1dFQlNPQ0tFVF9PUFRJT05TLFxyXG4gIE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zLFxyXG4gIFdlYnNvY2tldE1lc3NhZ2VFcnJvcixcclxuICBXZWJTb2NrZXREaXNjb25uZWN0ZWQsXHJcbiAgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yLFxyXG4gIFdlYlNvY2tldENvbm5lY3Rpb25VcGRhdGVkLFxyXG4gIFdlYlNvY2tldENvbm5lY3RlZFxyXG59IGZyb20gJy4vc3ltYm9scyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRIYW5kbGVyIHtcclxuICBwcml2YXRlIHNvY2tldDogV2ViU29ja2V0U3ViamVjdDxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgY29uZmlnOiBXZWJTb2NrZXRTdWJqZWN0Q29uZmlnPGFueT4gPSB7XHJcbiAgICB1cmw6IHRoaXMub3B0aW9ucy51cmwhLFxyXG4gICAgcHJvdG9jb2w6IHRoaXMub3B0aW9ucy5wcm90b2NvbCxcclxuICAgIC8vIERlZmF1bHQgYmluYXJ5IHR5cGUgaXMgYGJsb2JgIGZvciB0aGUgZ2xvYmFsIGBXZWJTb2NrZXRgXHJcbiAgICBiaW5hcnlUeXBlOiB0aGlzLm9wdGlvbnMuYmluYXJ5VHlwZSxcclxuICAgIHNlcmlhbGl6ZXI6IHRoaXMub3B0aW9ucy5zZXJpYWxpemVyLFxyXG4gICAgZGVzZXJpYWxpemVyOiB0aGlzLm9wdGlvbnMuZGVzZXJpYWxpemVyLFxyXG4gICAgY2xvc2VPYnNlcnZlcjoge1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgLy8gQVRURU5USU9OIVxyXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvYmxvYi9tYXN0ZXIvc3JjL2ludGVybmFsL29ic2VydmFibGUvZG9tL1dlYlNvY2tldFN1YmplY3QudHMjTDM0MFxyXG4gICAgICAgIC8vIFJ4SlMgc29ja2V0IGVtaXRzIGBvbkNvbXBsZXRlYCBldmVudCBvbmx5IGlmIGBldmVudC53YXNDbGVhbmAgaXMgdHJ1dGh5XHJcbiAgICAgICAgLy8gYW5kIGRvZXNuJ3QgY29tcGxldGUgc29ja2V0IHN1YmplY3QgaWYgaXQncyBmYWxzeVxyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgb3Blbk9ic2VydmVyOiB7XHJcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYlNvY2tldENvbm5lY3RlZCgpKVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgdHlwZUtleSA9IHRoaXMub3B0aW9ucy50eXBlS2V5ITtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgICBASW5qZWN0KE5HWFNfV0VCU09DS0VUX09QVElPTlMpIHByaXZhdGUgb3B0aW9uczogTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnNcclxuICApIHtcclxuICAgIHRoaXMuc2V0dXBBY3Rpb25zTGlzdGVuZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwQWN0aW9uc0xpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoQ29ubmVjdFdlYlNvY2tldCkpLnN1YnNjcmliZSgoeyBwYXlsb2FkIH0pID0+IHtcclxuICAgICAgdGhpcy5jb25uZWN0KHBheWxvYWQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChEaXNjb25uZWN0V2ViU29ja2V0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKFNlbmRXZWJTb2NrZXRNZXNzYWdlKSkuc3Vic2NyaWJlKCh7IHBheWxvYWQgfSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbmQocGF5bG9hZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29ubmVjdChvcHRpb25zPzogTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnMpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbigpO1xyXG5cclxuICAgIC8vIFVzZXJzIGNhbiBwYXNzIHRoZSBvcHRpb25zIGluIHRoZSBjb25uZWN0IG1ldGhvZCBzb1xyXG4gICAgLy8gaWYgb3B0aW9ucyBhcmVuJ3QgYXZhaWxhYmxlIGF0IERJIGJvb3RzdHJhcCB0aGV5IGhhdmUgYWNjZXNzXHJcbiAgICAvLyB0byBwYXNzIHRoZW0gaGVyZVxyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5tZXJnZUNvbmZpZ1dpdGhPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldFN1YmplY3QodGhpcy5jb25maWcpO1xyXG5cclxuICAgIHRoaXMuc29ja2V0LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChtZXNzYWdlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0eXBlID0gZ2V0VmFsdWUobWVzc2FnZSwgdGhpcy50eXBlS2V5KTtcclxuICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBUeXBlS2V5UHJvcGVydHlNaXNzaW5nRXJyb3IodGhpcy50eXBlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7IC4uLm1lc3NhZ2UsIHR5cGUgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENsb3NlRXZlbnQpIHtcclxuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hXZWJTb2NrZXREaXNjb25uZWN0ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2Vic29ja2V0TWVzc2FnZUVycm9yKGVycm9yKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzY29ubmVjdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvY2tldCkge1xyXG4gICAgICAvLyBgc29ja2V0LmNvbXBsZXRlKClgIGNsb3NlcyB0aGUgY29ubmVjdGlvblxyXG4gICAgICAvLyBhbHNvIGl0IGRvZXNuJ3QgaW52b2tlIHRoZSBgb25Db21wbGV0ZWAgY2FsbGJhY2sgdGhhdCB3ZSBwYXNzZWRcclxuICAgICAgLy8gaW50byBgc29ja2V0LnN1YnNjcmliZSguLi4pYFxyXG4gICAgICB0aGlzLnNvY2tldC5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLnNvY2tldCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hXZWJTb2NrZXREaXNjb25uZWN0ZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZChkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zb2NrZXQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBjb25uZWN0IHRvIHRoZSBzb2NrZXQgYmVmb3JlIHNlbmRpbmcgYW55IGRhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvY2tldC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG9uJ3QgZW5sYXJnZSB0aGUgYGNvbm5lY3RgIG1ldGhvZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWVyZ2VDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zOiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnVybCA9IG9wdGlvbnMudXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLnNlcmlhbGl6ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuc2VyaWFsaXplciA9IG9wdGlvbnMuc2VyaWFsaXplcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5kZXNlcmlhbGl6ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuZGVzZXJpYWxpemVyID0gb3B0aW9ucy5kZXNlcmlhbGl6ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUbyBlbnN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkgbWVtb3J5IGxlYWtzXHJcbiAgICogZS5nLiBpZiB0aGUgdXNlciBvY2Nhc2lvbmFsbHkgZGlzcGF0Y2hlZCBgQ29ubmVjdFdlYlNvY2tldGAgdHdpY2VcclxuICAgKiB0aGVuIHRoZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gd2lsbCBzdGlsbCBsaXZlIGluIHRoZSBtZW1vcnlcclxuICAgKiB0byBwcmV2ZW50IHN1Y2ggYmVoYXZpb3IgLSB3ZSBjbG9zZSB0aGUgcHJldmlvdXMgY29ubmVjdGlvbiBpZiBpdCBleGlzdHNcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZUNvbm5lY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcclxuICAgICAgdGhpcy5zb2NrZXQuY29tcGxldGUoKTtcclxuICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uVXBkYXRlZCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgaW4gbWFueSBwbGFjZXMgc28gaXQncyBiZXR0ZXIgdG8gbW92ZSB0aGUgY29kZSBpbnRvIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpKTtcclxuICB9XHJcbn1cclxuIl19
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy93ZWJzb2NrZXQtcGx1Z2luLyIsInNvdXJjZXMiOlsic3JjL3dlYnNvY2tldC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUV0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsa0JBQWtCLEVBQ25CLE1BQU0sV0FBVyxDQUFDO0FBR25CLE1BQU0sT0FBTyxnQkFBZ0I7Ozs7OztJQTRCM0IsWUFDVSxLQUFZLEVBQ1osUUFBaUIsRUFDZSxPQUFtQztRQUZuRSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNlLFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBOUJyRSxXQUFNLEdBQWlDLElBQUksQ0FBQztRQUU1QyxXQUFNLEdBQWdDO1lBQzVDLEdBQUcsRUFBRSxtQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBQztZQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFROztZQUUvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDbkMsWUFBWSxFQUFFLElBQUksQ0FB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NkI7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7Ozs7SUFFTyxlQUFlO1FBQ3JCLDRDQUE0QztRQUM1QyxrRUFBa0U7UUFDbEUsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNwQjtJQUNILENBQUM7OztZQXhKRixVQUFVOzs7O1lBbEJPLEtBQUs7WUFBZCxPQUFPOzRDQWtEWCxNQUFNLFNBQUMsc0JBQXNCOzs7Ozs7O0lBOUJoQyxrQ0FBb0Q7Ozs7O0lBRXBELGtDQW1CRTs7Ozs7SUFFRixtQ0FBd0M7Ozs7O0lBRXhDLHdDQUEwQzs7Ozs7SUFHeEMsaUNBQW9COzs7OztJQUNwQixvQ0FBeUI7Ozs7O0lBQ3pCLG1DQUEyRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbnMsIFN0b3JlLCBnZXRWYWx1ZSwgb2ZBY3Rpb25EaXNwYXRjaGVkIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFdlYlNvY2tldFN1YmplY3QsIFdlYlNvY2tldFN1YmplY3RDb25maWcgfSBmcm9tICdyeGpzL3dlYlNvY2tldCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbm5lY3RXZWJTb2NrZXQsXHJcbiAgRGlzY29ubmVjdFdlYlNvY2tldCxcclxuICBTZW5kV2ViU29ja2V0TWVzc2FnZSxcclxuICBOR1hTX1dFQlNPQ0tFVF9PUFRJT05TLFxyXG4gIE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zLFxyXG4gIFdlYnNvY2tldE1lc3NhZ2VFcnJvcixcclxuICBXZWJTb2NrZXREaXNjb25uZWN0ZWQsXHJcbiAgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yLFxyXG4gIFdlYlNvY2tldENvbm5lY3Rpb25VcGRhdGVkLFxyXG4gIFdlYlNvY2tldENvbm5lY3RlZFxyXG59IGZyb20gJy4vc3ltYm9scyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRIYW5kbGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHNvY2tldDogV2ViU29ja2V0U3ViamVjdDxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgY29uZmlnOiBXZWJTb2NrZXRTdWJqZWN0Q29uZmlnPGFueT4gPSB7XHJcbiAgICB1cmw6IHRoaXMub3B0aW9ucy51cmwhLFxyXG4gICAgcHJvdG9jb2w6IHRoaXMub3B0aW9ucy5wcm90b2NvbCxcclxuICAgIC8vIERlZmF1bHQgYmluYXJ5IHR5cGUgaXMgYGJsb2JgIGZvciB0aGUgZ2xvYmFsIGBXZWJTb2NrZXRgXHJcbiAgICBiaW5hcnlUeXBlOiB0aGlzLm9wdGlvbnMuYmluYXJ5VHlwZSxcclxuICAgIHNlcmlhbGl6ZXI6IHRoaXMub3B0aW9ucy5zZXJpYWxpemVyLFxyXG4gICAgZGVzZXJpYWxpemVyOiB0aGlzLm9wdGlvbnMuZGVzZXJpYWxpemVyLFxyXG4gICAgY2xvc2VPYnNlcnZlcjoge1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgLy8gQVRURU5USU9OIVxyXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvYmxvYi9tYXN0ZXIvc3JjL2ludGVybmFsL29ic2VydmFibGUvZG9tL1dlYlNvY2tldFN1YmplY3QudHMjTDM0MFxyXG4gICAgICAgIC8vIFJ4SlMgc29ja2V0IGVtaXRzIGBvbkNvbXBsZXRlYCBldmVudCBvbmx5IGlmIGBldmVudC53YXNDbGVhbmAgaXMgdHJ1dGh5XHJcbiAgICAgICAgLy8gYW5kIGRvZXNuJ3QgY29tcGxldGUgc29ja2V0IHN1YmplY3QgaWYgaXQncyBmYWxzeVxyXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgb3Blbk9ic2VydmVyOiB7XHJcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYlNvY2tldENvbm5lY3RlZCgpKVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgdHlwZUtleSA9IHRoaXMub3B0aW9ucy50eXBlS2V5ITtcclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXHJcbiAgICBwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxyXG4gICAgQEluamVjdChOR1hTX1dFQlNPQ0tFVF9PUFRJT05TKSBwcml2YXRlIG9wdGlvbnM6IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldHVwQWN0aW9uc0xpc3RlbmVycygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBBY3Rpb25zTGlzdGVuZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKENvbm5lY3RXZWJTb2NrZXQpKS5zdWJzY3JpYmUoKHsgcGF5bG9hZCB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0KHBheWxvYWQpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoRGlzY29ubmVjdFdlYlNvY2tldCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChTZW5kV2ViU29ja2V0TWVzc2FnZSkpLnN1YnNjcmliZSgoeyBwYXlsb2FkIH0pID0+IHtcclxuICAgICAgICB0aGlzLnNlbmQocGF5bG9hZCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25uZWN0KG9wdGlvbnM/OiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVDb25uZWN0aW9uKCk7XHJcblxyXG4gICAgLy8gVXNlcnMgY2FuIHBhc3MgdGhlIG9wdGlvbnMgaW4gdGhlIGNvbm5lY3QgbWV0aG9kIHNvXHJcbiAgICAvLyBpZiBvcHRpb25zIGFyZW4ndCBhdmFpbGFibGUgYXQgREkgYm9vdHN0cmFwIHRoZXkgaGF2ZSBhY2Nlc3NcclxuICAgIC8vIHRvIHBhc3MgdGhlbSBoZXJlXHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICB0aGlzLm1lcmdlQ29uZmlnV2l0aE9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0U3ViamVjdCh0aGlzLmNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5zb2NrZXQuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKG1lc3NhZ2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBnZXRWYWx1ZShtZXNzYWdlLCB0aGlzLnR5cGVLZXkpO1xyXG4gICAgICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVLZXlQcm9wZXJ0eU1pc3NpbmdFcnJvcih0aGlzLnR5cGVLZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHsgLi4ubWVzc2FnZSwgdHlwZSB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ2xvc2VFdmVudCkge1xyXG4gICAgICAgICAgdGhpcy5kaXNwYXRjaFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBXZWJzb2NrZXRNZXNzYWdlRXJyb3IoZXJyb3IpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNjb25uZWN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XHJcbiAgICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hXZWJTb2NrZXREaXNjb25uZWN0ZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZChkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zb2NrZXQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBjb25uZWN0IHRvIHRoZSBzb2NrZXQgYmVmb3JlIHNlbmRpbmcgYW55IGRhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvY2tldC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG9uJ3QgZW5sYXJnZSB0aGUgYGNvbm5lY3RgIG1ldGhvZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWVyZ2VDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zOiBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnVybCA9IG9wdGlvbnMudXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLnNlcmlhbGl6ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuc2VyaWFsaXplciA9IG9wdGlvbnMuc2VyaWFsaXplcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5kZXNlcmlhbGl6ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuZGVzZXJpYWxpemVyID0gb3B0aW9ucy5kZXNlcmlhbGl6ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUbyBlbnN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkgbWVtb3J5IGxlYWtzXHJcbiAgICogZS5nLiBpZiB0aGUgdXNlciBvY2Nhc2lvbmFsbHkgZGlzcGF0Y2hlZCBgQ29ubmVjdFdlYlNvY2tldGAgdHdpY2VcclxuICAgKiB0aGVuIHRoZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gd2lsbCBzdGlsbCBsaXZlIGluIHRoZSBtZW1vcnlcclxuICAgKiB0byBwcmV2ZW50IHN1Y2ggYmVoYXZpb3IgLSB3ZSBjbG9zZSB0aGUgcHJldmlvdXMgY29ubmVjdGlvbiBpZiBpdCBleGlzdHNcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZUNvbm5lY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcclxuICAgICAgdGhpcy5jbG9zZUNvbm5lY3Rpb24oKTtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2ViU29ja2V0Q29ubmVjdGlvblVwZGF0ZWQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGluIG1hbnkgcGxhY2VzIHNvIGl0J3MgYmV0dGVyIHRvIG1vdmUgdGhlIGNvZGUgaW50byBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlzcGF0Y2hXZWJTb2NrZXREaXNjb25uZWN0ZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBXZWJTb2NrZXREaXNjb25uZWN0ZWQoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlQ29ubmVjdGlvbigpOiB2b2lkIHtcclxuICAgIC8vIGBzb2NrZXQuY29tcGxldGUoKWAgY2xvc2VzIHRoZSBjb25uZWN0aW9uXHJcbiAgICAvLyBhbHNvIGl0IGRvZXNuJ3QgaW52b2tlIHRoZSBgb25Db21wbGV0ZWAgY2FsbGJhY2sgdGhhdCB3ZSBwYXNzZWRcclxuICAgIC8vIGludG8gYHNvY2tldC5zdWJzY3JpYmUoLi4uKWBcclxuICAgIGlmICh0aGlzLnNvY2tldCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNvY2tldC5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLnNvY2tldCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -5,6 +5,7 @@
5
5
  import * as tslib_1 from "tslib";
6
6
  import { Injectable, Inject } from '@angular/core';
7
7
  import { Actions, Store, getValue, ofActionDispatched } from '@ngxs/store';
8
+ import { Subscription } from 'rxjs';
8
9
  import { WebSocketSubject } from 'rxjs/webSocket';
9
10
  import { ConnectWebSocket, DisconnectWebSocket, SendWebSocketMessage, NGXS_WEBSOCKET_OPTIONS, WebsocketMessageError, WebSocketDisconnected, TypeKeyPropertyMissingError, WebSocketConnectionUpdated, WebSocketConnected } from './symbols';
10
11
  var WebSocketHandler = /** @class */ (function () {
@@ -41,8 +42,19 @@ var WebSocketHandler = /** @class */ (function () {
41
42
  }
42
43
  };
43
44
  this.typeKey = (/** @type {?} */ (this.options.typeKey));
45
+ this.subscription = new Subscription();
44
46
  this.setupActionsListeners();
45
47
  }
48
+ /**
49
+ * @return {?}
50
+ */
51
+ WebSocketHandler.prototype.ngOnDestroy = /**
52
+ * @return {?}
53
+ */
54
+ function () {
55
+ this.closeConnection();
56
+ this.subscription.unsubscribe();
57
+ };
46
58
  /**
47
59
  * @private
48
60
  * @return {?}
@@ -53,28 +65,28 @@ var WebSocketHandler = /** @class */ (function () {
53
65
  */
54
66
  function () {
55
67
  var _this = this;
56
- this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
68
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
57
69
  * @param {?} __0
58
70
  * @return {?}
59
71
  */
60
72
  function (_a) {
61
73
  var payload = _a.payload;
62
74
  _this.connect(payload);
63
- }));
64
- this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
75
+ })));
76
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
65
77
  * @return {?}
66
78
  */
67
79
  function () {
68
80
  _this.disconnect();
69
- }));
70
- this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
81
+ })));
82
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
71
83
  * @param {?} __0
72
84
  * @return {?}
73
85
  */
74
86
  function (_a) {
75
87
  var payload = _a.payload;
76
88
  _this.send(payload);
77
- }));
89
+ })));
78
90
  };
79
91
  /**
80
92
  * @private
@@ -133,11 +145,7 @@ var WebSocketHandler = /** @class */ (function () {
133
145
  */
134
146
  function () {
135
147
  if (this.socket) {
136
- // `socket.complete()` closes the connection
137
- // also it doesn't invoke the `onComplete` callback that we passed
138
- // into `socket.subscribe(...)`
139
- this.socket.complete();
140
- this.socket = null;
148
+ this.closeConnection();
141
149
  this.dispatchWebSocketDisconnected();
142
150
  }
143
151
  };
@@ -207,8 +215,7 @@ var WebSocketHandler = /** @class */ (function () {
207
215
  */
208
216
  function () {
209
217
  if (this.socket) {
210
- this.socket.complete();
211
- this.socket = null;
218
+ this.closeConnection();
212
219
  this.store.dispatch(new WebSocketConnectionUpdated());
213
220
  }
214
221
  };
@@ -228,6 +235,23 @@ var WebSocketHandler = /** @class */ (function () {
228
235
  function () {
229
236
  this.store.dispatch(new WebSocketDisconnected());
230
237
  };
238
+ /**
239
+ * @private
240
+ * @return {?}
241
+ */
242
+ WebSocketHandler.prototype.closeConnection = /**
243
+ * @private
244
+ * @return {?}
245
+ */
246
+ function () {
247
+ // `socket.complete()` closes the connection
248
+ // also it doesn't invoke the `onComplete` callback that we passed
249
+ // into `socket.subscribe(...)`
250
+ if (this.socket !== null) {
251
+ this.socket.complete();
252
+ this.socket = null;
253
+ }
254
+ };
231
255
  WebSocketHandler.decorators = [
232
256
  { type: Injectable }
233
257
  ];
@@ -256,6 +280,11 @@ if (false) {
256
280
  * @private
257
281
  */
258
282
  WebSocketHandler.prototype.typeKey;
283
+ /**
284
+ * @type {?}
285
+ * @private
286
+ */
287
+ WebSocketHandler.prototype.subscription;
259
288
  /**
260
289
  * @type {?}
261
290
  * @private
@@ -272,4 +301,4 @@ if (false) {
272
301
  */
273
302
  WebSocketHandler.prototype.options;
274
303
  }
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy93ZWJzb2NrZXQtcGx1Z2luLyIsInNvdXJjZXMiOlsic3JjL3dlYnNvY2tldC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBRXRCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQixrQkFBa0IsRUFDbkIsTUFBTSxXQUFXLENBQUM7QUFFbkI7SUEyQkUsMEJBQ1UsS0FBWSxFQUNaLFFBQWlCLEVBQ2UsT0FBbUM7UUFIN0UsaUJBTUM7UUFMUyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNlLFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBNUJyRSxXQUFNLEdBQWlDLElBQUksQ0FBQztRQUU1QyxXQUFNLEdBQWdDO1lBQzVDLEdBQUcsRUFBRSxtQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBQztZQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFROztZQUUvQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDbkMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUN2QyxhQUFhLEVBQUU7Z0JBQ2IsSUFBSTs7O2dCQUFF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QUFDOztnQkF0SUYsVUFBVTs7OztnQkFqQk8sS0FBSztnQkFBZCxPQUFPO2dEQStDWCxNQUFNLFNBQUMsc0JBQXNCOztJQXlHbEMsdUJBQUM7Q0FBQSxBQXZJRCxJQXVJQztTQXRJWSxnQkFBZ0I7Ozs7OztJQUMzQixrQ0FBb0Q7Ozs7O0lBRXBELGtDQW1CRTs7Ozs7SUFFRixtQ0FBd0M7Ozs7O0lBR3RDLGlDQUFvQjs7Ozs7SUFDcEIsb0NBQXlCOzs7OztJQUN6QixtQ0FBMkUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aW9ucywgU3RvcmUsIGdldFZhbHVlLCBvZkFjdGlvbkRpc3BhdGNoZWQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XHJcblxyXG5pbXBvcnQgeyBXZWJTb2NrZXRTdWJqZWN0LCBXZWJTb2NrZXRTdWJqZWN0Q29uZmlnIH0gZnJvbSAncnhqcy93ZWJTb2NrZXQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDb25uZWN0V2ViU29ja2V0LFxyXG4gIERpc2Nvbm5lY3RXZWJTb2NrZXQsXHJcbiAgU2VuZFdlYlNvY2tldE1lc3NhZ2UsXHJcbiAgTkdYU19XRUJTT0NLRVRfT1BUSU9OUyxcclxuICBOZ3hzV2Vic29ja2V0UGx1Z2luT3B0aW9ucyxcclxuICBXZWJzb2NrZXRNZXNzYWdlRXJyb3IsXHJcbiAgV2ViU29ja2V0RGlzY29ubmVjdGVkLFxyXG4gIFR5cGVLZXlQcm9wZXJ0eU1pc3NpbmdFcnJvcixcclxuICBXZWJTb2NrZXRDb25uZWN0aW9uVXBkYXRlZCxcclxuICBXZWJTb2NrZXRDb25uZWN0ZWRcclxufSBmcm9tICcuL3N5bWJvbHMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0SGFuZGxlciB7XHJcbiAgcHJpdmF0ZSBzb2NrZXQ6IFdlYlNvY2tldFN1YmplY3Q8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGNvbmZpZzogV2ViU29ja2V0U3ViamVjdENvbmZpZzxhbnk+ID0ge1xyXG4gICAgdXJsOiB0aGlzLm9wdGlvbnMudXJsISxcclxuICAgIHByb3RvY29sOiB0aGlzLm9wdGlvbnMucHJvdG9jb2wsXHJcbiAgICAvLyBEZWZhdWx0IGJpbmFyeSB0eXBlIGlzIGBibG9iYCBmb3IgdGhlIGdsb2JhbCBgV2ViU29ja2V0YFxyXG4gICAgYmluYXJ5VHlwZTogdGhpcy5vcHRpb25zLmJpbmFyeVR5cGUsXHJcbiAgICBzZXJpYWxpemVyOiB0aGlzLm9wdGlvbnMuc2VyaWFsaXplcixcclxuICAgIGRlc2VyaWFsaXplcjogdGhpcy5vcHRpb25zLmRlc2VyaWFsaXplcixcclxuICAgIGNsb3NlT2JzZXJ2ZXI6IHtcclxuICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgIC8vIEFUVEVOVElPTiFcclxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvbWFzdGVyL3NyYy9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9XZWJTb2NrZXRTdWJqZWN0LnRzI0wzNDBcclxuICAgICAgICAvLyBSeEpTIHNvY2tldCBlbWl0cyBgb25Db21wbGV0ZWAgZXZlbnQgb25seSBpZiBgZXZlbnQud2FzQ2xlYW5gIGlzIHRydXRoeVxyXG4gICAgICAgIC8vIGFuZCBkb2Vzbid0IGNvbXBsZXRlIHNvY2tldCBzdWJqZWN0IGlmIGl0J3MgZmFsc3lcclxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG9wZW5PYnNlcnZlcjoge1xyXG4gICAgICBuZXh0OiAoKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBXZWJTb2NrZXRDb25uZWN0ZWQoKSlcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIHR5cGVLZXkgPSB0aGlzLm9wdGlvbnMudHlwZUtleSE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXHJcbiAgICBwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxyXG4gICAgQEluamVjdChOR1hTX1dFQlNPQ0tFVF9PUFRJT05TKSBwcml2YXRlIG9wdGlvbnM6IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldHVwQWN0aW9uc0xpc3RlbmVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEFjdGlvbnNMaXN0ZW5lcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKENvbm5lY3RXZWJTb2NrZXQpKS5zdWJzY3JpYmUoKHsgcGF5bG9hZCB9KSA9PiB7XHJcbiAgICAgIHRoaXMuY29ubmVjdChwYXlsb2FkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoRGlzY29ubmVjdFdlYlNvY2tldCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChTZW5kV2ViU29ja2V0TWVzc2FnZSkpLnN1YnNjcmliZSgoeyBwYXlsb2FkIH0pID0+IHtcclxuICAgICAgdGhpcy5zZW5kKHBheWxvYWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbm5lY3Qob3B0aW9ucz86IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb24oKTtcclxuXHJcbiAgICAvLyBVc2VycyBjYW4gcGFzcyB0aGUgb3B0aW9ucyBpbiB0aGUgY29ubmVjdCBtZXRob2Qgc29cclxuICAgIC8vIGlmIG9wdGlvbnMgYXJlbid0IGF2YWlsYWJsZSBhdCBESSBib290c3RyYXAgdGhleSBoYXZlIGFjY2Vzc1xyXG4gICAgLy8gdG8gcGFzcyB0aGVtIGhlcmVcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIHRoaXMubWVyZ2VDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXRTdWJqZWN0KHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNvY2tldC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGdldFZhbHVlKG1lc3NhZ2UsIHRoaXMudHlwZUtleSk7XHJcbiAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yKHRoaXMudHlwZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goeyAuLi5tZXNzYWdlLCB0eXBlIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbG9zZUV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoV2ViU29ja2V0RGlzY29ubmVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYnNvY2tldE1lc3NhZ2VFcnJvcihlcnJvcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc2Nvbm5lY3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcclxuICAgICAgLy8gYHNvY2tldC5jb21wbGV0ZSgpYCBjbG9zZXMgdGhlIGNvbm5lY3Rpb25cclxuICAgICAgLy8gYWxzbyBpdCBkb2Vzbid0IGludm9rZSB0aGUgYG9uQ29tcGxldGVgIGNhbGxiYWNrIHRoYXQgd2UgcGFzc2VkXHJcbiAgICAgIC8vIGludG8gYHNvY2tldC5zdWJzY3JpYmUoLi4uKWBcclxuICAgICAgdGhpcy5zb2NrZXQuY29tcGxldGUoKTtcclxuICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoV2ViU29ja2V0RGlzY29ubmVjdGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmQoZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc29ja2V0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgY29ubmVjdCB0byB0aGUgc29ja2V0IGJlZm9yZSBzZW5kaW5nIGFueSBkYXRhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb2NrZXQubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvbid0IGVubGFyZ2UgdGhlIGBjb25uZWN0YCBtZXRob2RcclxuICAgKi9cclxuICBwcml2YXRlIG1lcmdlQ29uZmlnV2l0aE9wdGlvbnMob3B0aW9uczogTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnMpOiB2b2lkIHtcclxuICAgIGlmIChvcHRpb25zLnVybCkge1xyXG4gICAgICB0aGlzLmNvbmZpZy51cmwgPSBvcHRpb25zLnVybDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5zZXJpYWxpemVyKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLnNlcmlhbGl6ZXIgPSBvcHRpb25zLnNlcmlhbGl6ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuZGVzZXJpYWxpemVyKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnLmRlc2VyaWFsaXplciA9IG9wdGlvbnMuZGVzZXJpYWxpemVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG8gZW5zdXJlIHdlIGRvbid0IGhhdmUgYW55IG1lbW9yeSBsZWFrc1xyXG4gICAqIGUuZy4gaWYgdGhlIHVzZXIgb2NjYXNpb25hbGx5IGRpc3BhdGNoZWQgYENvbm5lY3RXZWJTb2NrZXRgIHR3aWNlXHJcbiAgICogdGhlbiB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIHdpbGwgc3RpbGwgbGl2ZSBpbiB0aGUgbWVtb3J5XHJcbiAgICogdG8gcHJldmVudCBzdWNoIGJlaGF2aW9yIC0gd2UgY2xvc2UgdGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gaWYgaXQgZXhpc3RzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb25uZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XHJcbiAgICAgIHRoaXMuc29ja2V0LmNvbXBsZXRlKCk7XHJcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2ViU29ja2V0Q29ubmVjdGlvblVwZGF0ZWQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGluIG1hbnkgcGxhY2VzIHNvIGl0J3MgYmV0dGVyIHRvIG1vdmUgdGhlIGNvZGUgaW50byBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlzcGF0Y2hXZWJTb2NrZXREaXNjb25uZWN0ZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBXZWJTb2NrZXREaXNjb25uZWN0ZWQoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhhbmRsZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy93ZWJzb2NrZXQtcGx1Z2luLyIsInNvdXJjZXMiOlsic3JjL3dlYnNvY2tldC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLGdCQUFnQixFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFFdEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNuQixNQUFNLFdBQVcsQ0FBQztBQUVuQjtJQTZCRSwwQkFDVSxLQUFZLEVBQ1osUUFBaUIsRUFDZSxPQUFtQztRQUg3RSxpQkFNQztRQUxTLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2UsWUFBTyxHQUFQLE9BQU8sQ0FBNEI7UUE5QnJFLFdBQU0sR0FBaUMsSUFBSSxDQUFDO1FBRTVDLFdBQU0sR0FBZ0M7WUFDNUMsR0FBRyxFQUFFLG1CQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFDO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7O1lBRS9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDbkMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUNuQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO1lBQ3ZDLGFBQWEsRUFBRTtnQkFDYixJQUFJOzs7Z0JBQUU7b0JBQ0osYUFBYTtvQkFDYix5R0FBeUc7b0JBQ3pHLDBFQUEwRTtvQkFDMUUsb0RBQW9EO29CQUNwRCxLQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQTthQUNGO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLElBQUk7OztnQkFBRSxjQUFNLE9BQUEsS0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLEVBQTdDLENBQTZDLENBQUE7YUFDMUQ7U0FDRixDQUFDO1FBRU0sWUFBTyxHQUFHLG1CQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDLENBQUM7UUFFaEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBT3hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7Ozs7SUFFRCxzQ0FBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7OztJQUVPLGdEQUFxQjs7OztJQUE3QjtRQUFBLGlCQWtCQztRQWpCQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLEVBQVc7Z0JBQVQsb0JBQU87WUFDM0UsS0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxTQUFTOzs7UUFBQztZQUNwRSxLQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsRUFBVztnQkFBVCxvQkFBTztZQUMvRSxLQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLENBQUMsRUFBQyxDQUNILENBQUM7SUFDSixDQUFDOzs7Ozs7SUFFTyxrQ0FBTzs7Ozs7SUFBZixVQUFnQixPQUFvQztRQUFwRCxpQkE0QkM7UUEzQkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsc0RBQXNEO1FBQ3RELCtEQUErRDtRQUMvRCxvQkFBb0I7UUFDcEIsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BCLElBQUk7Ozs7WUFBRSxVQUFDLE9BQVk7O29CQUNYLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ1QsTUFBTSxJQUFJLDJCQUEyQixDQUFDLEtBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDckQ7Z0JBQ0QsS0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLHNCQUFNLE9BQU8sSUFBRSxJQUFJLE1BQUEsSUFBRyxDQUFDO1lBQzVDLENBQUMsQ0FBQTtZQUNELEtBQUs7Ozs7WUFBRSxVQUFDLEtBQVU7Z0JBQ2hCLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtvQkFDL0IsS0FBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7aUJBQ3RDO3FCQUFNO29CQUNMLEtBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7WUFDSCxDQUFDLENBQUE7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUVPLHFDQUFVOzs7O0lBQWxCO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sK0JBQUk7Ozs7O0lBQVosVUFBYSxJQUFTO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztTQUMzRTtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRzs7Ozs7OztJQUNLLGlEQUFzQjs7Ozs7O0lBQTlCLFVBQStCLE9BQW1DO1FBQ2hFLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDL0I7UUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUM3QztRQUVELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHOzs7Ozs7Ozs7SUFDSywyQ0FBZ0I7Ozs7Ozs7O0lBQXhCO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSyx3REFBNkI7Ozs7O0lBQXJDO1FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7Ozs7SUFFTywwQ0FBZTs7OztJQUF2QjtRQUNFLDRDQUE0QztRQUM1QyxrRUFBa0U7UUFDbEUsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNwQjtJQUNILENBQUM7O2dCQXhKRixVQUFVOzs7O2dCQWxCTyxLQUFLO2dCQUFkLE9BQU87Z0RBa0RYLE1BQU0sU0FBQyxzQkFBc0I7O0lBeUhsQyx1QkFBQztDQUFBLEFBekpELElBeUpDO1NBeEpZLGdCQUFnQjs7Ozs7O0lBQzNCLGtDQUFvRDs7Ozs7SUFFcEQsa0NBbUJFOzs7OztJQUVGLG1DQUF3Qzs7Ozs7SUFFeEMsd0NBQTBDOzs7OztJQUd4QyxpQ0FBb0I7Ozs7O0lBQ3BCLG9DQUF5Qjs7Ozs7SUFDekIsbUNBQTJFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aW9ucywgU3RvcmUsIGdldFZhbHVlLCBvZkFjdGlvbkRpc3BhdGNoZWQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgV2ViU29ja2V0U3ViamVjdCwgV2ViU29ja2V0U3ViamVjdENvbmZpZyB9IGZyb20gJ3J4anMvd2ViU29ja2V0JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdFdlYlNvY2tldCxcclxuICBEaXNjb25uZWN0V2ViU29ja2V0LFxyXG4gIFNlbmRXZWJTb2NrZXRNZXNzYWdlLFxyXG4gIE5HWFNfV0VCU09DS0VUX09QVElPTlMsXHJcbiAgTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnMsXHJcbiAgV2Vic29ja2V0TWVzc2FnZUVycm9yLFxyXG4gIFdlYlNvY2tldERpc2Nvbm5lY3RlZCxcclxuICBUeXBlS2V5UHJvcGVydHlNaXNzaW5nRXJyb3IsXHJcbiAgV2ViU29ja2V0Q29ubmVjdGlvblVwZGF0ZWQsXHJcbiAgV2ViU29ja2V0Q29ubmVjdGVkXHJcbn0gZnJvbSAnLi9zeW1ib2xzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEhhbmRsZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgc29ja2V0OiBXZWJTb2NrZXRTdWJqZWN0PGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBjb25maWc6IFdlYlNvY2tldFN1YmplY3RDb25maWc8YW55PiA9IHtcclxuICAgIHVybDogdGhpcy5vcHRpb25zLnVybCEsXHJcbiAgICBwcm90b2NvbDogdGhpcy5vcHRpb25zLnByb3RvY29sLFxyXG4gICAgLy8gRGVmYXVsdCBiaW5hcnkgdHlwZSBpcyBgYmxvYmAgZm9yIHRoZSBnbG9iYWwgYFdlYlNvY2tldGBcclxuICAgIGJpbmFyeVR5cGU6IHRoaXMub3B0aW9ucy5iaW5hcnlUeXBlLFxyXG4gICAgc2VyaWFsaXplcjogdGhpcy5vcHRpb25zLnNlcmlhbGl6ZXIsXHJcbiAgICBkZXNlcmlhbGl6ZXI6IHRoaXMub3B0aW9ucy5kZXNlcmlhbGl6ZXIsXHJcbiAgICBjbG9zZU9ic2VydmVyOiB7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAvLyBBVFRFTlRJT04hXHJcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZVgvcnhqcy9ibG9iL21hc3Rlci9zcmMvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vV2ViU29ja2V0U3ViamVjdC50cyNMMzQwXHJcbiAgICAgICAgLy8gUnhKUyBzb2NrZXQgZW1pdHMgYG9uQ29tcGxldGVgIGV2ZW50IG9ubHkgaWYgYGV2ZW50Lndhc0NsZWFuYCBpcyB0cnV0aHlcclxuICAgICAgICAvLyBhbmQgZG9lc24ndCBjb21wbGV0ZSBzb2NrZXQgc3ViamVjdCBpZiBpdCdzIGZhbHN5XHJcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBvcGVuT2JzZXJ2ZXI6IHtcclxuICAgICAgbmV4dDogKCkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgV2ViU29ja2V0Q29ubmVjdGVkKCkpXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB0eXBlS2V5ID0gdGhpcy5vcHRpb25zLnR5cGVLZXkhO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgICBASW5qZWN0KE5HWFNfV0VCU09DS0VUX09QVElPTlMpIHByaXZhdGUgb3B0aW9uczogTmd4c1dlYnNvY2tldFBsdWdpbk9wdGlvbnNcclxuICApIHtcclxuICAgIHRoaXMuc2V0dXBBY3Rpb25zTGlzdGVuZXJzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VDb25uZWN0aW9uKCk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEFjdGlvbnNMaXN0ZW5lcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoQ29ubmVjdFdlYlNvY2tldCkpLnN1YnNjcmliZSgoeyBwYXlsb2FkIH0pID0+IHtcclxuICAgICAgICB0aGlzLmNvbm5lY3QocGF5bG9hZCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChEaXNjb25uZWN0V2ViU29ja2V0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKFNlbmRXZWJTb2NrZXRNZXNzYWdlKSkuc3Vic2NyaWJlKCh7IHBheWxvYWQgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VuZChwYXlsb2FkKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbm5lY3Qob3B0aW9ucz86IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb24oKTtcclxuXHJcbiAgICAvLyBVc2VycyBjYW4gcGFzcyB0aGUgb3B0aW9ucyBpbiB0aGUgY29ubmVjdCBtZXRob2Qgc29cclxuICAgIC8vIGlmIG9wdGlvbnMgYXJlbid0IGF2YWlsYWJsZSBhdCBESSBib290c3RyYXAgdGhleSBoYXZlIGFjY2Vzc1xyXG4gICAgLy8gdG8gcGFzcyB0aGVtIGhlcmVcclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgIHRoaXMubWVyZ2VDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXRTdWJqZWN0KHRoaXMuY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNvY2tldC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGdldFZhbHVlKG1lc3NhZ2UsIHRoaXMudHlwZUtleSk7XHJcbiAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUtleVByb3BlcnR5TWlzc2luZ0Vycm9yKHRoaXMudHlwZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goeyAuLi5tZXNzYWdlLCB0eXBlIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbG9zZUV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoV2ViU29ja2V0RGlzY29ubmVjdGVkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYnNvY2tldE1lc3NhZ2VFcnJvcihlcnJvcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc2Nvbm5lY3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcclxuICAgICAgdGhpcy5jbG9zZUNvbm5lY3Rpb24oKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kKGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNvY2tldCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGNvbm5lY3QgdG8gdGhlIHNvY2tldCBiZWZvcmUgc2VuZGluZyBhbnkgZGF0YScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ja2V0Lm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb24ndCBlbmxhcmdlIHRoZSBgY29ubmVjdGAgbWV0aG9kXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ1dpdGhPcHRpb25zKG9wdGlvbnM6IE5neHNXZWJzb2NrZXRQbHVnaW5PcHRpb25zKTogdm9pZCB7XHJcbiAgICBpZiAob3B0aW9ucy51cmwpIHtcclxuICAgICAgdGhpcy5jb25maWcudXJsID0gb3B0aW9ucy51cmw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuc2VyaWFsaXplcikge1xyXG4gICAgICB0aGlzLmNvbmZpZy5zZXJpYWxpemVyID0gb3B0aW9ucy5zZXJpYWxpemVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLmRlc2VyaWFsaXplcikge1xyXG4gICAgICB0aGlzLmNvbmZpZy5kZXNlcmlhbGl6ZXIgPSBvcHRpb25zLmRlc2VyaWFsaXplcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvIGVuc3VyZSB3ZSBkb24ndCBoYXZlIGFueSBtZW1vcnkgbGVha3NcclxuICAgKiBlLmcuIGlmIHRoZSB1c2VyIG9jY2FzaW9uYWxseSBkaXNwYXRjaGVkIGBDb25uZWN0V2ViU29ja2V0YCB0d2ljZVxyXG4gICAqIHRoZW4gdGhlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiB3aWxsIHN0aWxsIGxpdmUgaW4gdGhlIG1lbW9yeVxyXG4gICAqIHRvIHByZXZlbnQgc3VjaCBiZWhhdmlvciAtIHdlIGNsb3NlIHRoZSBwcmV2aW91cyBjb25uZWN0aW9uIGlmIGl0IGV4aXN0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlQ29ubmVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvY2tldCkge1xyXG4gICAgICB0aGlzLmNsb3NlQ29ubmVjdGlvbigpO1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uVXBkYXRlZCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgaW4gbWFueSBwbGFjZXMgc28gaXQncyBiZXR0ZXIgdG8gbW92ZSB0aGUgY29kZSBpbnRvIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFdlYlNvY2tldERpc2Nvbm5lY3RlZCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VDb25uZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gYHNvY2tldC5jb21wbGV0ZSgpYCBjbG9zZXMgdGhlIGNvbm5lY3Rpb25cclxuICAgIC8vIGFsc28gaXQgZG9lc24ndCBpbnZva2UgdGhlIGBvbkNvbXBsZXRlYCBjYWxsYmFjayB0aGF0IHdlIHBhc3NlZFxyXG4gICAgLy8gaW50byBgc29ja2V0LnN1YnNjcmliZSguLi4pYFxyXG4gICAgaWYgKHRoaXMuc29ja2V0ICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc29ja2V0LmNvbXBsZXRlKCk7XHJcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -1,5 +1,6 @@
1
1
  import { InjectionToken, Injectable, Inject, APP_INITIALIZER, NgModule } from '@angular/core';
2
2
  import { ofActionDispatched, getValue, Store, Actions } from '@ngxs/store';
3
+ import { Subscription } from 'rxjs';
3
4
  import { WebSocketSubject } from 'rxjs/webSocket';
4
5
 
5
6
  /**
@@ -240,33 +241,41 @@ class WebSocketHandler {
240
241
  }
241
242
  };
242
243
  this.typeKey = (/** @type {?} */ (this.options.typeKey));
244
+ this.subscription = new Subscription();
243
245
  this.setupActionsListeners();
244
246
  }
247
+ /**
248
+ * @return {?}
249
+ */
250
+ ngOnDestroy() {
251
+ this.closeConnection();
252
+ this.subscription.unsubscribe();
253
+ }
245
254
  /**
246
255
  * @private
247
256
  * @return {?}
248
257
  */
249
258
  setupActionsListeners() {
250
- this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
259
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
251
260
  * @param {?} __0
252
261
  * @return {?}
253
262
  */
254
263
  ({ payload }) => {
255
264
  this.connect(payload);
256
- }));
257
- this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
265
+ })));
266
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
258
267
  * @return {?}
259
268
  */
260
269
  () => {
261
270
  this.disconnect();
262
- }));
263
- this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
271
+ })));
272
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
264
273
  * @param {?} __0
265
274
  * @return {?}
266
275
  */
267
276
  ({ payload }) => {
268
277
  this.send(payload);
269
- }));
278
+ })));
270
279
  }
271
280
  /**
272
281
  * @private
@@ -315,11 +324,7 @@ class WebSocketHandler {
315
324
  */
316
325
  disconnect() {
317
326
  if (this.socket) {
318
- // `socket.complete()` closes the connection
319
- // also it doesn't invoke the `onComplete` callback that we passed
320
- // into `socket.subscribe(...)`
321
- this.socket.complete();
322
- this.socket = null;
327
+ this.closeConnection();
323
328
  this.dispatchWebSocketDisconnected();
324
329
  }
325
330
  }
@@ -361,8 +366,7 @@ class WebSocketHandler {
361
366
  */
362
367
  updateConnection() {
363
368
  if (this.socket) {
364
- this.socket.complete();
365
- this.socket = null;
369
+ this.closeConnection();
366
370
  this.store.dispatch(new WebSocketConnectionUpdated());
367
371
  }
368
372
  }
@@ -374,6 +378,19 @@ class WebSocketHandler {
374
378
  dispatchWebSocketDisconnected() {
375
379
  this.store.dispatch(new WebSocketDisconnected());
376
380
  }
381
+ /**
382
+ * @private
383
+ * @return {?}
384
+ */
385
+ closeConnection() {
386
+ // `socket.complete()` closes the connection
387
+ // also it doesn't invoke the `onComplete` callback that we passed
388
+ // into `socket.subscribe(...)`
389
+ if (this.socket !== null) {
390
+ this.socket.complete();
391
+ this.socket = null;
392
+ }
393
+ }
377
394
  }
378
395
  WebSocketHandler.decorators = [
379
396
  { type: Injectable }
@@ -400,6 +417,11 @@ if (false) {
400
417
  * @private
401
418
  */
402
419
  WebSocketHandler.prototype.typeKey;
420
+ /**
421
+ * @type {?}
422
+ * @private
423
+ */
424
+ WebSocketHandler.prototype.subscription;
403
425
  /**
404
426
  * @type {?}
405
427
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"ngxs-websocket-plugin.js","sources":["ng://@ngxs/websocket-plugin/src/symbols.ts","ng://@ngxs/websocket-plugin/src/websocket-handler.ts","ng://@ngxs/websocket-plugin/src/websocket.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const NGXS_WEBSOCKET_OPTIONS = new InjectionToken('NGXS_WEBSOCKET_OPTIONS');\r\n\r\nexport interface NgxsWebsocketPluginOptions {\r\n /**\r\n * URL of the websocket.\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Either a single protocol string or an array of protocol strings.\r\n * These strings are used to indicate sub-protocols, so that a single server\r\n * can implement multiple WebSocket sub-protocols (for example, you might want one server to be able\r\n * to handle different types of interactions depending on the specified protocol).\r\n * If you don't specify a protocol string, an empty string is assumed.\r\n */\r\n protocol?: string | string[];\r\n\r\n /**\r\n * Sets the `binaryType` property of the underlying WebSocket.\r\n */\r\n binaryType?: 'blob' | 'arraybuffer';\r\n\r\n /**\r\n * The property name to distigunish this type for the store.\r\n * Default: 'type'\r\n */\r\n typeKey?: string;\r\n\r\n /**\r\n * Interval to try and reconnect.\r\n * Default: 5000\r\n */\r\n reconnectInterval?: number;\r\n\r\n /**\r\n * Number of reconnect attemps.\r\n * Default: 10\r\n */\r\n reconnectAttempts?: number;\r\n\r\n /**\r\n * Serializer to call before sending messages\r\n * Default: `json.stringify`\r\n */\r\n serializer?: (data: any) => string;\r\n\r\n /**\r\n * Deseralizer before publishing the message.\r\n */\r\n deserializer?: (e: MessageEvent) => any;\r\n}\r\n\r\nexport function noop(..._args: any[]) {\r\n return function() {};\r\n}\r\n\r\n/**\r\n * Action to connect to the websocket. Optionally pass a URL.\r\n */\r\nexport class ConnectWebSocket {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Connect';\r\n }\r\n constructor(public payload?: NgxsWebsocketPluginOptions) {}\r\n}\r\n\r\n/**\r\n * Action triggered when a error ocurrs\r\n */\r\nexport class WebsocketMessageError {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Message Error';\r\n }\r\n constructor(public payload: any) {}\r\n}\r\n\r\n/**\r\n * Action to disconnect the websocket.\r\n */\r\nexport class DisconnectWebSocket {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Disconnect';\r\n }\r\n}\r\n\r\n/**\r\n * Action triggered when websocket is connected\r\n */\r\nexport class WebSocketConnected {\r\n static get type() {\r\n return '[WebSocket] Connected';\r\n }\r\n}\r\n\r\n/**\r\n * Action triggered when websocket is disconnected\r\n */\r\nexport class WebSocketDisconnected {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Disconnected';\r\n }\r\n}\r\n\r\n/**\r\n * Action to send to the server.\r\n */\r\nexport class SendWebSocketMessage {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Send Message';\r\n }\r\n constructor(public payload: any) {}\r\n}\r\n\r\n/**\r\n * Action dispatched when the user tries to connect if the connection already exists.\r\n */\r\nexport class WebSocketConnectionUpdated {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Connection Updated';\r\n }\r\n}\r\n\r\n/**\r\n * This error is thrown where there is no `type` (or custom `typeKey`) property\r\n * on the message that came from the server side socket\r\n */\r\nexport class TypeKeyPropertyMissingError extends Error {\r\n constructor(typeKey: string) {\r\n super(`Property ${typeKey} is missing on the socket message`);\r\n }\r\n}\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { Actions, Store, getValue, ofActionDispatched } from '@ngxs/store';\r\n\r\nimport { WebSocketSubject, WebSocketSubjectConfig } from 'rxjs/webSocket';\r\n\r\nimport {\r\n ConnectWebSocket,\r\n DisconnectWebSocket,\r\n SendWebSocketMessage,\r\n NGXS_WEBSOCKET_OPTIONS,\r\n NgxsWebsocketPluginOptions,\r\n WebsocketMessageError,\r\n WebSocketDisconnected,\r\n TypeKeyPropertyMissingError,\r\n WebSocketConnectionUpdated,\r\n WebSocketConnected\r\n} from './symbols';\r\n\r\n@Injectable()\r\nexport class WebSocketHandler {\r\n private socket: WebSocketSubject<any> | null = null;\r\n\r\n private config: WebSocketSubjectConfig<any> = {\r\n url: this.options.url!,\r\n protocol: this.options.protocol,\r\n // Default binary type is `blob` for the global `WebSocket`\r\n binaryType: this.options.binaryType,\r\n serializer: this.options.serializer,\r\n deserializer: this.options.deserializer,\r\n closeObserver: {\r\n next: () => {\r\n // ATTENTION!\r\n // See https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/dom/WebSocketSubject.ts#L340\r\n // RxJS socket emits `onComplete` event only if `event.wasClean` is truthy\r\n // and doesn't complete socket subject if it's falsy\r\n this.disconnect();\r\n }\r\n },\r\n openObserver: {\r\n next: () => this.store.dispatch(new WebSocketConnected())\r\n }\r\n };\r\n\r\n private typeKey = this.options.typeKey!;\r\n\r\n constructor(\r\n private store: Store,\r\n private actions$: Actions,\r\n @Inject(NGXS_WEBSOCKET_OPTIONS) private options: NgxsWebsocketPluginOptions\r\n ) {\r\n this.setupActionsListeners();\r\n }\r\n\r\n private setupActionsListeners(): void {\r\n this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe(({ payload }) => {\r\n this.connect(payload);\r\n });\r\n\r\n this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe(() => {\r\n this.disconnect();\r\n });\r\n\r\n this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe(({ payload }) => {\r\n this.send(payload);\r\n });\r\n }\r\n\r\n private connect(options?: NgxsWebsocketPluginOptions): void {\r\n this.updateConnection();\r\n\r\n // Users can pass the options in the connect method so\r\n // if options aren't available at DI bootstrap they have access\r\n // to pass them here\r\n if (options) {\r\n this.mergeConfigWithOptions(options);\r\n }\r\n\r\n this.socket = new WebSocketSubject(this.config);\r\n\r\n this.socket.subscribe({\r\n next: (message: any) => {\r\n const type = getValue(message, this.typeKey);\r\n if (!type) {\r\n throw new TypeKeyPropertyMissingError(this.typeKey);\r\n }\r\n this.store.dispatch({ ...message, type });\r\n },\r\n error: (error: any) => {\r\n if (error instanceof CloseEvent) {\r\n this.dispatchWebSocketDisconnected();\r\n } else {\r\n this.store.dispatch(new WebsocketMessageError(error));\r\n }\r\n }\r\n });\r\n }\r\n\r\n private disconnect(): void {\r\n if (this.socket) {\r\n // `socket.complete()` closes the connection\r\n // also it doesn't invoke the `onComplete` callback that we passed\r\n // into `socket.subscribe(...)`\r\n this.socket.complete();\r\n this.socket = null;\r\n this.dispatchWebSocketDisconnected();\r\n }\r\n }\r\n\r\n private send(data: any): void {\r\n if (!this.socket) {\r\n throw new Error('You must connect to the socket before sending any data');\r\n }\r\n\r\n this.socket.next(data);\r\n }\r\n\r\n /**\r\n * Don't enlarge the `connect` method\r\n */\r\n private mergeConfigWithOptions(options: NgxsWebsocketPluginOptions): void {\r\n if (options.url) {\r\n this.config.url = options.url;\r\n }\r\n\r\n if (options.serializer) {\r\n this.config.serializer = options.serializer;\r\n }\r\n\r\n if (options.deserializer) {\r\n this.config.deserializer = options.deserializer;\r\n }\r\n }\r\n\r\n /**\r\n * To ensure we don't have any memory leaks\r\n * e.g. if the user occasionally dispatched `ConnectWebSocket` twice\r\n * then the previous subscription will still live in the memory\r\n * to prevent such behavior - we close the previous connection if it exists\r\n */\r\n private updateConnection(): void {\r\n if (this.socket) {\r\n this.socket.complete();\r\n this.socket = null;\r\n this.store.dispatch(new WebSocketConnectionUpdated());\r\n }\r\n }\r\n\r\n /**\r\n * Used in many places so it's better to move the code into function\r\n */\r\n private dispatchWebSocketDisconnected(): void {\r\n this.store.dispatch(new WebSocketDisconnected());\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders, APP_INITIALIZER, InjectionToken } from '@angular/core';\r\n\r\nimport { WebSocketHandler } from './websocket-handler';\r\nimport { NgxsWebsocketPluginOptions, NGXS_WEBSOCKET_OPTIONS, noop } from './symbols';\r\n\r\nexport function websocketOptionsFactory(options: NgxsWebsocketPluginOptions) {\r\n return {\r\n reconnectInterval: 5000,\r\n reconnectAttempts: 10,\r\n typeKey: 'type',\r\n deserializer(e: MessageEvent) {\r\n return JSON.parse(e.data);\r\n },\r\n serializer(value: any) {\r\n return JSON.stringify(value);\r\n },\r\n ...options\r\n };\r\n}\r\n\r\nexport const USER_OPTIONS = new InjectionToken('USER_OPTIONS');\r\n\r\n@NgModule()\r\nexport class NgxsWebsocketPluginModule {\r\n static forRoot(\r\n options?: NgxsWebsocketPluginOptions\r\n ): ModuleWithProviders<NgxsWebsocketPluginModule> {\r\n return {\r\n ngModule: NgxsWebsocketPluginModule,\r\n providers: [\r\n WebSocketHandler,\r\n {\r\n provide: USER_OPTIONS,\r\n useValue: options\r\n },\r\n {\r\n provide: NGXS_WEBSOCKET_OPTIONS,\r\n useFactory: websocketOptionsFactory,\r\n deps: [USER_OPTIONS]\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: noop,\r\n deps: [WebSocketHandler],\r\n multi: true\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngxs-websocket-plugin.js","sources":["ng://@ngxs/websocket-plugin/src/symbols.ts","ng://@ngxs/websocket-plugin/src/websocket-handler.ts","ng://@ngxs/websocket-plugin/src/websocket.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const NGXS_WEBSOCKET_OPTIONS = new InjectionToken('NGXS_WEBSOCKET_OPTIONS');\r\n\r\nexport interface NgxsWebsocketPluginOptions {\r\n /**\r\n * URL of the websocket.\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Either a single protocol string or an array of protocol strings.\r\n * These strings are used to indicate sub-protocols, so that a single server\r\n * can implement multiple WebSocket sub-protocols (for example, you might want one server to be able\r\n * to handle different types of interactions depending on the specified protocol).\r\n * If you don't specify a protocol string, an empty string is assumed.\r\n */\r\n protocol?: string | string[];\r\n\r\n /**\r\n * Sets the `binaryType` property of the underlying WebSocket.\r\n */\r\n binaryType?: 'blob' | 'arraybuffer';\r\n\r\n /**\r\n * The property name to distigunish this type for the store.\r\n * Default: 'type'\r\n */\r\n typeKey?: string;\r\n\r\n /**\r\n * Interval to try and reconnect.\r\n * Default: 5000\r\n */\r\n reconnectInterval?: number;\r\n\r\n /**\r\n * Number of reconnect attemps.\r\n * Default: 10\r\n */\r\n reconnectAttempts?: number;\r\n\r\n /**\r\n * Serializer to call before sending messages\r\n * Default: `json.stringify`\r\n */\r\n serializer?: (data: any) => string;\r\n\r\n /**\r\n * Deseralizer before publishing the message.\r\n */\r\n deserializer?: (e: MessageEvent) => any;\r\n}\r\n\r\nexport function noop(..._args: any[]) {\r\n return function() {};\r\n}\r\n\r\n/**\r\n * Action to connect to the websocket. Optionally pass a URL.\r\n */\r\nexport class ConnectWebSocket {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Connect';\r\n }\r\n constructor(public payload?: NgxsWebsocketPluginOptions) {}\r\n}\r\n\r\n/**\r\n * Action triggered when a error ocurrs\r\n */\r\nexport class WebsocketMessageError {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Message Error';\r\n }\r\n constructor(public payload: any) {}\r\n}\r\n\r\n/**\r\n * Action to disconnect the websocket.\r\n */\r\nexport class DisconnectWebSocket {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Disconnect';\r\n }\r\n}\r\n\r\n/**\r\n * Action triggered when websocket is connected\r\n */\r\nexport class WebSocketConnected {\r\n static get type() {\r\n return '[WebSocket] Connected';\r\n }\r\n}\r\n\r\n/**\r\n * Action triggered when websocket is disconnected\r\n */\r\nexport class WebSocketDisconnected {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Disconnected';\r\n }\r\n}\r\n\r\n/**\r\n * Action to send to the server.\r\n */\r\nexport class SendWebSocketMessage {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Send Message';\r\n }\r\n constructor(public payload: any) {}\r\n}\r\n\r\n/**\r\n * Action dispatched when the user tries to connect if the connection already exists.\r\n */\r\nexport class WebSocketConnectionUpdated {\r\n static get type() {\r\n // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138\r\n return '[WebSocket] Connection Updated';\r\n }\r\n}\r\n\r\n/**\r\n * This error is thrown where there is no `type` (or custom `typeKey`) property\r\n * on the message that came from the server side socket\r\n */\r\nexport class TypeKeyPropertyMissingError extends Error {\r\n constructor(typeKey: string) {\r\n super(`Property ${typeKey} is missing on the socket message`);\r\n }\r\n}\r\n","import { Injectable, Inject, OnDestroy } from '@angular/core';\r\nimport { Actions, Store, getValue, ofActionDispatched } from '@ngxs/store';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { WebSocketSubject, WebSocketSubjectConfig } from 'rxjs/webSocket';\r\n\r\nimport {\r\n ConnectWebSocket,\r\n DisconnectWebSocket,\r\n SendWebSocketMessage,\r\n NGXS_WEBSOCKET_OPTIONS,\r\n NgxsWebsocketPluginOptions,\r\n WebsocketMessageError,\r\n WebSocketDisconnected,\r\n TypeKeyPropertyMissingError,\r\n WebSocketConnectionUpdated,\r\n WebSocketConnected\r\n} from './symbols';\r\n\r\n@Injectable()\r\nexport class WebSocketHandler implements OnDestroy {\r\n private socket: WebSocketSubject<any> | null = null;\r\n\r\n private config: WebSocketSubjectConfig<any> = {\r\n url: this.options.url!,\r\n protocol: this.options.protocol,\r\n // Default binary type is `blob` for the global `WebSocket`\r\n binaryType: this.options.binaryType,\r\n serializer: this.options.serializer,\r\n deserializer: this.options.deserializer,\r\n closeObserver: {\r\n next: () => {\r\n // ATTENTION!\r\n // See https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/dom/WebSocketSubject.ts#L340\r\n // RxJS socket emits `onComplete` event only if `event.wasClean` is truthy\r\n // and doesn't complete socket subject if it's falsy\r\n this.disconnect();\r\n }\r\n },\r\n openObserver: {\r\n next: () => this.store.dispatch(new WebSocketConnected())\r\n }\r\n };\r\n\r\n private typeKey = this.options.typeKey!;\r\n\r\n private subscription = new Subscription();\r\n\r\n constructor(\r\n private store: Store,\r\n private actions$: Actions,\r\n @Inject(NGXS_WEBSOCKET_OPTIONS) private options: NgxsWebsocketPluginOptions\r\n ) {\r\n this.setupActionsListeners();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeConnection();\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private setupActionsListeners(): void {\r\n this.subscription.add(\r\n this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe(({ payload }) => {\r\n this.connect(payload);\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe(() => {\r\n this.disconnect();\r\n })\r\n );\r\n\r\n this.subscription.add(\r\n this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe(({ payload }) => {\r\n this.send(payload);\r\n })\r\n );\r\n }\r\n\r\n private connect(options?: NgxsWebsocketPluginOptions): void {\r\n this.updateConnection();\r\n\r\n // Users can pass the options in the connect method so\r\n // if options aren't available at DI bootstrap they have access\r\n // to pass them here\r\n if (options) {\r\n this.mergeConfigWithOptions(options);\r\n }\r\n\r\n this.socket = new WebSocketSubject(this.config);\r\n\r\n this.socket.subscribe({\r\n next: (message: any) => {\r\n const type = getValue(message, this.typeKey);\r\n if (!type) {\r\n throw new TypeKeyPropertyMissingError(this.typeKey);\r\n }\r\n this.store.dispatch({ ...message, type });\r\n },\r\n error: (error: any) => {\r\n if (error instanceof CloseEvent) {\r\n this.dispatchWebSocketDisconnected();\r\n } else {\r\n this.store.dispatch(new WebsocketMessageError(error));\r\n }\r\n }\r\n });\r\n }\r\n\r\n private disconnect(): void {\r\n if (this.socket) {\r\n this.closeConnection();\r\n this.dispatchWebSocketDisconnected();\r\n }\r\n }\r\n\r\n private send(data: any): void {\r\n if (!this.socket) {\r\n throw new Error('You must connect to the socket before sending any data');\r\n }\r\n\r\n this.socket.next(data);\r\n }\r\n\r\n /**\r\n * Don't enlarge the `connect` method\r\n */\r\n private mergeConfigWithOptions(options: NgxsWebsocketPluginOptions): void {\r\n if (options.url) {\r\n this.config.url = options.url;\r\n }\r\n\r\n if (options.serializer) {\r\n this.config.serializer = options.serializer;\r\n }\r\n\r\n if (options.deserializer) {\r\n this.config.deserializer = options.deserializer;\r\n }\r\n }\r\n\r\n /**\r\n * To ensure we don't have any memory leaks\r\n * e.g. if the user occasionally dispatched `ConnectWebSocket` twice\r\n * then the previous subscription will still live in the memory\r\n * to prevent such behavior - we close the previous connection if it exists\r\n */\r\n private updateConnection(): void {\r\n if (this.socket) {\r\n this.closeConnection();\r\n this.store.dispatch(new WebSocketConnectionUpdated());\r\n }\r\n }\r\n\r\n /**\r\n * Used in many places so it's better to move the code into function\r\n */\r\n private dispatchWebSocketDisconnected(): void {\r\n this.store.dispatch(new WebSocketDisconnected());\r\n }\r\n\r\n private closeConnection(): void {\r\n // `socket.complete()` closes the connection\r\n // also it doesn't invoke the `onComplete` callback that we passed\r\n // into `socket.subscribe(...)`\r\n if (this.socket !== null) {\r\n this.socket.complete();\r\n this.socket = null;\r\n }\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders, APP_INITIALIZER, InjectionToken } from '@angular/core';\r\n\r\nimport { WebSocketHandler } from './websocket-handler';\r\nimport { NgxsWebsocketPluginOptions, NGXS_WEBSOCKET_OPTIONS, noop } from './symbols';\r\n\r\nexport function websocketOptionsFactory(options: NgxsWebsocketPluginOptions) {\r\n return {\r\n reconnectInterval: 5000,\r\n reconnectAttempts: 10,\r\n typeKey: 'type',\r\n deserializer(e: MessageEvent) {\r\n return JSON.parse(e.data);\r\n },\r\n serializer(value: any) {\r\n return JSON.stringify(value);\r\n },\r\n ...options\r\n };\r\n}\r\n\r\nexport const USER_OPTIONS = new InjectionToken('USER_OPTIONS');\r\n\r\n@NgModule()\r\nexport class NgxsWebsocketPluginModule {\r\n static forRoot(\r\n options?: NgxsWebsocketPluginOptions\r\n ): ModuleWithProviders<NgxsWebsocketPluginModule> {\r\n return {\r\n ngModule: NgxsWebsocketPluginModule,\r\n providers: [\r\n WebSocketHandler,\r\n {\r\n provide: USER_OPTIONS,\r\n useValue: options\r\n },\r\n {\r\n provide: NGXS_WEBSOCKET_OPTIONS,\r\n useFactory: websocketOptionsFactory,\r\n deps: [USER_OPTIONS]\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: noop,\r\n deps: [WebSocketHandler],\r\n multi: true\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;AAAA;AAEA,MAAa,sBAAsB,GAAG,IAAI,cAAc,CAAC,wBAAwB,CAAC;;;;AAElF,yCAgDC;;;;;;IA5CC,yCAAa;;;;;;;;;IASb,8CAA6B;;;;;IAK7B,gDAAoC;;;;;;IAMpC,6CAAiB;;;;;;IAMjB,uDAA2B;;;;;;IAM3B,uDAA2B;;;;;;IAM3B,gDAAmC;;;;;IAKnC,kDAAwC;;;;;;AAG1C,SAAgB,IAAI,CAAC,GAAG,KAAY;IAClC;;;IAAO,eAAa,EAAC;CACtB;;;;AAKD,MAAa,gBAAgB;;;;IAK3B,YAAmB,OAAoC;QAApC,YAAO,GAAP,OAAO,CAA6B;KAAI;;;;IAJ3D,WAAW,IAAI;;QAEb,OAAO,qBAAqB,CAAC;KAC9B;CAEF;;;IADa,mCAA2C;;;;;AAMzD,MAAa,qBAAqB;;;;IAKhC,YAAmB,OAAY;QAAZ,YAAO,GAAP,OAAO,CAAK;KAAI;;;;IAJnC,WAAW,IAAI;;QAEb,OAAO,2BAA2B,CAAC;KACpC;CAEF;;;IADa,wCAAmB;;;;;AAMjC,MAAa,mBAAmB;;;;IAC9B,WAAW,IAAI;;QAEb,OAAO,wBAAwB,CAAC;KACjC;CACF;;;;AAKD,MAAa,kBAAkB;;;;IAC7B,WAAW,IAAI;QACb,OAAO,uBAAuB,CAAC;KAChC;CACF;;;;AAKD,MAAa,qBAAqB;;;;IAChC,WAAW,IAAI;;QAEb,OAAO,0BAA0B,CAAC;KACnC;CACF;;;;AAKD,MAAa,oBAAoB;;;;IAK/B,YAAmB,OAAY;QAAZ,YAAO,GAAP,OAAO,CAAK;KAAI;;;;IAJnC,WAAW,IAAI;;QAEb,OAAO,0BAA0B,CAAC;KACnC;CAEF;;;IADa,uCAAmB;;;;;AAMjC,MAAa,0BAA0B;;;;IACrC,WAAW,IAAI;;QAEb,OAAO,gCAAgC,CAAC;KACzC;CACF;;;;;AAMD,MAAa,2BAA4B,SAAQ,KAAK;;;;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,YAAY,OAAO,mCAAmC,CAAC,CAAC;KAC/D;CACF;;;;;;AC1ID,MAoBa,gBAAgB;;;;;;IA4B3B,YACU,KAAY,EACZ,QAAiB,EACe,OAAmC;QAFnE,UAAK,GAAL,KAAK,CAAO;QACZ,aAAQ,GAAR,QAAQ,CAAS;QACe,YAAO,GAAP,OAAO,CAA4B;QA9BrE,WAAM,GAAiC,IAAI,CAAC;QAE5C,WAAM,GAAgC;YAC5C,GAAG,qBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAC;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;;YAE/B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YACnC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YACnC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,aAAa,EAAE;gBACb,IAAI;;;gBAAE;;;;;oBAKJ,IAAI,CAAC,UAAU,EAAE,CAAC;iBACnB,CAAA;aACF;YACD,YAAY,EAAE;gBACZ,IAAI;;;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAA;aAC1D;SACF,CAAC;QAEM,YAAO,sBAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAC,CAAC;QAEhC,iBAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAOxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;;;;IAED,WAAW;QACT,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACjC;;;;;IAEO,qBAAqB;QAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;;;;QAAC,CAAC,EAAE,OAAO,EAAE;YAC7E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACvB,EAAC,CACH,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;;;QAAC;YACpE,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB,EAAC,CACH,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;;;;QAAC,CAAC,EAAE,OAAO,EAAE;YACjF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACpB,EAAC,CACH,CAAC;KACH;;;;;;IAEO,OAAO,CAAC,OAAoC;QAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;;;;QAKxB,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,IAAI;;;;YAAE,CAAC,OAAY;;sBACX,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;gBAC5C,IAAI,CAAC,IAAI,EAAE;oBACT,MAAM,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACrD;gBACD,IAAI,CAAC,KAAK,CAAC,QAAQ,mBAAM,OAAO,IAAE,IAAI,IAAG,CAAC;aAC3C,CAAA;YACD,KAAK;;;;YAAE,CAAC,KAAU;gBAChB,IAAI,KAAK,YAAY,UAAU,EAAE;oBAC/B,IAAI,CAAC,6BAA6B,EAAE,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;iBACvD;aACF,CAAA;SACF,CAAC,CAAC;KACJ;;;;;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,6BAA6B,EAAE,CAAC;SACtC;KACF;;;;;;IAEO,IAAI,CAAC,IAAS;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;SAC3E;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxB;;;;;;;IAKO,sBAAsB,CAAC,OAAmC;QAChE,IAAI,OAAO,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;SAC/B;QAED,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;SAC7C;QAED,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;SACjD;KACF;;;;;;;;;IAQO,gBAAgB;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;SACvD;KACF;;;;;;IAKO,6BAA6B;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;KAClD;;;;;IAEO,eAAe;;;;QAIrB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;KACF;;;YAxJF,UAAU;;;;YAlBO,KAAK;YAAd,OAAO;4CAkDX,MAAM,SAAC,sBAAsB;;;;;;;IA9BhC,kCAAoD;;;;;IAEpD,kCAmBE;;;;;IAEF,mCAAwC;;;;;IAExC,wCAA0C;;;;;IAGxC,iCAAoB;;;;;IACpB,oCAAyB;;;;;IACzB,mCAA2E;;;;;;;ACnD/E;;;;AAKA,SAAgB,uBAAuB,CAAC,OAAmC;IACzE,uBACE,iBAAiB,EAAE,IAAI,EACvB,iBAAiB,EAAE,EAAE,EACrB,OAAO,EAAE,MAAM;;;;QACf,YAAY,CAAC,CAAe;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC3B;;;;;QACD,UAAU,CAAC,KAAU;YACnB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC9B,IACE,OAAO,EACV;CACH;;AAED,MAAa,YAAY,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC;AAG9D,MAAa,yBAAyB;;;;;IACpC,OAAO,OAAO,CACZ,OAAoC;QAEpC,OAAO;YACL,QAAQ,EAAE,yBAAyB;YACnC,SAAS,EAAE;gBACT,gBAAgB;gBAChB;oBACE,OAAO,EAAE,YAAY;oBACrB,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,sBAAsB;oBAC/B,UAAU,EAAE,uBAAuB;oBACnC,IAAI,EAAE,CAAC,YAAY,CAAC;iBACrB;gBACD;oBACE,OAAO,EAAE,eAAe;oBACxB,UAAU,EAAE,IAAI;oBAChB,IAAI,EAAE,CAAC,gBAAgB,CAAC;oBACxB,KAAK,EAAE,IAAI;iBACZ;aACF;SACF,CAAC;KACH;;;YA1BF,QAAQ;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { __extends, __assign } from 'tslib';
2
2
  import { InjectionToken, Injectable, Inject, APP_INITIALIZER, NgModule } from '@angular/core';
3
3
  import { ofActionDispatched, getValue, Store, Actions } from '@ngxs/store';
4
+ import { Subscription } from 'rxjs';
4
5
  import { WebSocketSubject } from 'rxjs/webSocket';
5
6
 
6
7
  /**
@@ -299,8 +300,19 @@ var WebSocketHandler = /** @class */ (function () {
299
300
  }
300
301
  };
301
302
  this.typeKey = (/** @type {?} */ (this.options.typeKey));
303
+ this.subscription = new Subscription();
302
304
  this.setupActionsListeners();
303
305
  }
306
+ /**
307
+ * @return {?}
308
+ */
309
+ WebSocketHandler.prototype.ngOnDestroy = /**
310
+ * @return {?}
311
+ */
312
+ function () {
313
+ this.closeConnection();
314
+ this.subscription.unsubscribe();
315
+ };
304
316
  /**
305
317
  * @private
306
318
  * @return {?}
@@ -311,28 +323,28 @@ var WebSocketHandler = /** @class */ (function () {
311
323
  */
312
324
  function () {
313
325
  var _this = this;
314
- this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
326
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(ConnectWebSocket)).subscribe((/**
315
327
  * @param {?} __0
316
328
  * @return {?}
317
329
  */
318
330
  function (_a) {
319
331
  var payload = _a.payload;
320
332
  _this.connect(payload);
321
- }));
322
- this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
333
+ })));
334
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(DisconnectWebSocket)).subscribe((/**
323
335
  * @return {?}
324
336
  */
325
337
  function () {
326
338
  _this.disconnect();
327
- }));
328
- this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
339
+ })));
340
+ this.subscription.add(this.actions$.pipe(ofActionDispatched(SendWebSocketMessage)).subscribe((/**
329
341
  * @param {?} __0
330
342
  * @return {?}
331
343
  */
332
344
  function (_a) {
333
345
  var payload = _a.payload;
334
346
  _this.send(payload);
335
- }));
347
+ })));
336
348
  };
337
349
  /**
338
350
  * @private
@@ -391,11 +403,7 @@ var WebSocketHandler = /** @class */ (function () {
391
403
  */
392
404
  function () {
393
405
  if (this.socket) {
394
- // `socket.complete()` closes the connection
395
- // also it doesn't invoke the `onComplete` callback that we passed
396
- // into `socket.subscribe(...)`
397
- this.socket.complete();
398
- this.socket = null;
406
+ this.closeConnection();
399
407
  this.dispatchWebSocketDisconnected();
400
408
  }
401
409
  };
@@ -465,8 +473,7 @@ var WebSocketHandler = /** @class */ (function () {
465
473
  */
466
474
  function () {
467
475
  if (this.socket) {
468
- this.socket.complete();
469
- this.socket = null;
476
+ this.closeConnection();
470
477
  this.store.dispatch(new WebSocketConnectionUpdated());
471
478
  }
472
479
  };
@@ -486,6 +493,23 @@ var WebSocketHandler = /** @class */ (function () {
486
493
  function () {
487
494
  this.store.dispatch(new WebSocketDisconnected());
488
495
  };
496
+ /**
497
+ * @private
498
+ * @return {?}
499
+ */
500
+ WebSocketHandler.prototype.closeConnection = /**
501
+ * @private
502
+ * @return {?}
503
+ */
504
+ function () {
505
+ // `socket.complete()` closes the connection
506
+ // also it doesn't invoke the `onComplete` callback that we passed
507
+ // into `socket.subscribe(...)`
508
+ if (this.socket !== null) {
509
+ this.socket.complete();
510
+ this.socket = null;
511
+ }
512
+ };
489
513
  WebSocketHandler.decorators = [
490
514
  { type: Injectable }
491
515
  ];
@@ -513,6 +537,11 @@ if (false) {
513
537
  * @private
514
538
  */
515
539
  WebSocketHandler.prototype.typeKey;
540
+ /**
541
+ * @type {?}
542
+ * @private
543
+ */
544
+ WebSocketHandler.prototype.subscription;
516
545
  /**
517
546
  * @type {?}
518
547
  * @private