ran-boilerplate
Version:
React . Apollo (GraphQL) . Next.js Toolkit
98 lines (96 loc) • 3.48 kB
JavaScript
/**
* Copyright 2017 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { BrowserPollConnection } from './BrowserPollConnection';
import { WebSocketConnection } from './WebSocketConnection';
import { warn, each } from '../core/util/util';
/**
* Currently simplistic, this class manages what transport a Connection should use at various stages of its
* lifecycle.
*
* It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if
* they are available.
* @constructor
*/
var TransportManager = /** @class */ (function () {
/**
* @param {!RepoInfo} repoInfo Metadata around the namespace we're connecting to
*/
function TransportManager(repoInfo) {
this.initTransports_(repoInfo);
}
Object.defineProperty(TransportManager, "ALL_TRANSPORTS", {
/**
* @const
* @type {!Array.<function(new:Transport, string, RepoInfo, string=)>}
*/
get: function () {
return [BrowserPollConnection, WebSocketConnection];
},
enumerable: true,
configurable: true
});
/**
* @param {!RepoInfo} repoInfo
* @private
*/
TransportManager.prototype.initTransports_ = function (repoInfo) {
var isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();
var isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();
if (repoInfo.webSocketOnly) {
if (!isWebSocketsAvailable)
warn("wss:// URL used, but browser isn't known to support websockets. Trying anyway.");
isSkipPollConnection = true;
}
if (isSkipPollConnection) {
this.transports_ = [WebSocketConnection];
}
else {
var transports_1 = (this.transports_ = []);
each(TransportManager.ALL_TRANSPORTS, function (i, transport) {
if (transport && transport['isAvailable']()) {
transports_1.push(transport);
}
});
}
};
/**
* @return {function(new:Transport, !string, !RepoInfo, string=, string=)} The constructor for the
* initial transport to use
*/
TransportManager.prototype.initialTransport = function () {
if (this.transports_.length > 0) {
return this.transports_[0];
}
else {
throw new Error('No transports available');
}
};
/**
* @return {?function(new:Transport, function(),function(), string=)} The constructor for the next
* transport, or null
*/
TransportManager.prototype.upgradeTransport = function () {
if (this.transports_.length > 1) {
return this.transports_[1];
}
else {
return null;
}
};
return TransportManager;
}());
export { TransportManager };
//# sourceMappingURL=TransportManager.js.map