| 'use strict'; |
| |
| var debug = function() {}; |
| if (process.env.NODE_ENV !== 'production') { |
| debug = require('debug')('sockjs-client:utils:transport'); |
| } |
| |
| module.exports = function(availableTransports) { |
| return { |
| filterToEnabled: function(transportsWhitelist, info) { |
| var transports = { |
| main: [] |
| , facade: [] |
| }; |
| if (!transportsWhitelist) { |
| transportsWhitelist = []; |
| } else if (typeof transportsWhitelist === 'string') { |
| transportsWhitelist = [transportsWhitelist]; |
| } |
| |
| availableTransports.forEach(function(trans) { |
| if (!trans) { |
| return; |
| } |
| |
| if (trans.transportName === 'websocket' && info.websocket === false) { |
| debug('disabled from server', 'websocket'); |
| return; |
| } |
| |
| if (transportsWhitelist.length && |
| transportsWhitelist.indexOf(trans.transportName) === -1) { |
| debug('not in whitelist', trans.transportName); |
| return; |
| } |
| |
| if (trans.enabled(info)) { |
| debug('enabled', trans.transportName); |
| transports.main.push(trans); |
| if (trans.facadeTransport) { |
| transports.facade.push(trans.facadeTransport); |
| } |
| } else { |
| debug('disabled', trans.transportName); |
| } |
| }); |
| return transports; |
| } |
| }; |
| }; |