2 var __extends = (this && this.__extends) || (function () {
3 var extendStatics = function (d, b) {
4 extendStatics = Object.setPrototypeOf ||
5 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
7 return extendStatics(d, b);
9 return function (d, b) {
11 function __() { this.constructor = d; }
12 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15 var __assign = (this && this.__assign) || function () {
16 __assign = Object.assign || function(t) {
17 for (var s, i = 1, n = arguments.length; i < n; i++) {
19 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
24 return __assign.apply(this, arguments);
26 Object.defineProperty(exports, "__esModule", { value: true });
27 var Subject_1 = require("../../Subject");
28 var Subscriber_1 = require("../../Subscriber");
29 var Observable_1 = require("../../Observable");
30 var Subscription_1 = require("../../Subscription");
31 var ReplaySubject_1 = require("../../ReplaySubject");
32 var DEFAULT_WEBSOCKET_CONFIG = {
34 deserializer: function (e) { return JSON.parse(e.data); },
35 serializer: function (value) { return JSON.stringify(value); },
37 var WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT = 'WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }';
38 var WebSocketSubject = (function (_super) {
39 __extends(WebSocketSubject, _super);
40 function WebSocketSubject(urlConfigOrSource, destination) {
41 var _this = _super.call(this) || this;
42 if (urlConfigOrSource instanceof Observable_1.Observable) {
43 _this.destination = destination;
44 _this.source = urlConfigOrSource;
47 var config = _this._config = __assign({}, DEFAULT_WEBSOCKET_CONFIG);
48 _this._output = new Subject_1.Subject();
49 if (typeof urlConfigOrSource === 'string') {
50 config.url = urlConfigOrSource;
53 for (var key in urlConfigOrSource) {
54 if (urlConfigOrSource.hasOwnProperty(key)) {
55 config[key] = urlConfigOrSource[key];
59 if (!config.WebSocketCtor && WebSocket) {
60 config.WebSocketCtor = WebSocket;
62 else if (!config.WebSocketCtor) {
63 throw new Error('no WebSocket constructor can be found');
65 _this.destination = new ReplaySubject_1.ReplaySubject();
69 WebSocketSubject.prototype.lift = function (operator) {
70 var sock = new WebSocketSubject(this._config, this.destination);
71 sock.operator = operator;
75 WebSocketSubject.prototype._resetState = function () {
78 this.destination = new ReplaySubject_1.ReplaySubject();
80 this._output = new Subject_1.Subject();
82 WebSocketSubject.prototype.multiplex = function (subMsg, unsubMsg, messageFilter) {
84 return new Observable_1.Observable(function (observer) {
91 var subscription = self.subscribe(function (x) {
93 if (messageFilter(x)) {
100 }, function (err) { return observer.error(err); }, function () { return observer.complete(); });
103 self.next(unsubMsg());
108 subscription.unsubscribe();
112 WebSocketSubject.prototype._connectSocket = function () {
114 var _a = this._config, WebSocketCtor = _a.WebSocketCtor, protocol = _a.protocol, url = _a.url, binaryType = _a.binaryType;
115 var observer = this._output;
119 new WebSocketCtor(url, protocol) :
120 new WebSocketCtor(url);
121 this._socket = socket;
123 this._socket.binaryType = binaryType;
130 var subscription = new Subscription_1.Subscription(function () {
131 _this._socket = null;
132 if (socket && socket.readyState === 1) {
136 socket.onopen = function (e) {
137 var _socket = _this._socket;
143 var openObserver = _this._config.openObserver;
145 openObserver.next(e);
147 var queue = _this.destination;
148 _this.destination = Subscriber_1.Subscriber.create(function (x) {
149 if (socket.readyState === 1) {
151 var serializer = _this._config.serializer;
152 socket.send(serializer(x));
155 _this.destination.error(e);
159 var closingObserver = _this._config.closingObserver;
160 if (closingObserver) {
161 closingObserver.next(undefined);
164 socket.close(e.code, e.reason);
167 observer.error(new TypeError(WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT));
171 var closingObserver = _this._config.closingObserver;
172 if (closingObserver) {
173 closingObserver.next(undefined);
178 if (queue && queue instanceof ReplaySubject_1.ReplaySubject) {
179 subscription.add(queue.subscribe(_this.destination));
182 socket.onerror = function (e) {
186 socket.onclose = function (e) {
188 var closeObserver = _this._config.closeObserver;
190 closeObserver.next(e);
199 socket.onmessage = function (e) {
201 var deserializer = _this._config.deserializer;
202 observer.next(deserializer(e));
209 WebSocketSubject.prototype._subscribe = function (subscriber) {
211 var source = this.source;
213 return source.subscribe(subscriber);
216 this._connectSocket();
218 this._output.subscribe(subscriber);
219 subscriber.add(function () {
220 var _socket = _this._socket;
221 if (_this._output.observers.length === 0) {
222 if (_socket && _socket.readyState === 1) {
230 WebSocketSubject.prototype.unsubscribe = function () {
231 var _socket = this._socket;
232 if (_socket && _socket.readyState === 1) {
236 _super.prototype.unsubscribe.call(this);
238 return WebSocketSubject;
239 }(Subject_1.AnonymousSubject));
240 exports.WebSocketSubject = WebSocketSubject;
241 //# sourceMappingURL=WebSocketSubject.js.map