arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/node_modules/socket.io-client/lib/url.js
server/node_modules/socket.io-client/lib/url.jsRaw
 1
 2/**
 3 * Module dependencies.
 4 */
 5
 6var parseuri = require('parseuri');
 7var debug = require('debug')('socket.io-client:url');
 8
 9/**
10 * Module exports.
11 */
12
13module.exports = url;
14
15/**
16 * URL parser.
17 *
18 * @param {String} url
19 * @param {Object} An object meant to mimic window.location.
20 *                 Defaults to window.location.
21 * @api public
22 */
23
24function url (uri, loc) {
25  var obj = uri;
26
27  // default to window.location
28  loc = loc || global.location;
29  if (null == uri) uri = loc.protocol + '//' + loc.host;
30
31  // relative path support
32  if ('string' === typeof uri) {
33    if ('/' === uri.charAt(0)) {
34      if ('/' === uri.charAt(1)) {
35        uri = loc.protocol + uri;
36      } else {
37        uri = loc.host + uri;
38      }
39    }
40
41    if (!/^(https?|wss?):\/\//.test(uri)) {
42      debug('protocol-less url %s', uri);
43      if ('undefined' !== typeof loc) {
44        uri = loc.protocol + '//' + uri;
45      } else {
46        uri = 'https://' + uri;
47      }
48    }
49
50    // parse
51    debug('parse %s', uri);
52    obj = parseuri(uri);
53  }
54
55  // make sure we treat `localhost:80` and `localhost` equally
56  if (!obj.port) {
57    if (/^(http|ws)$/.test(obj.protocol)) {
58      obj.port = '80';
59    } else if (/^(http|ws)s$/.test(obj.protocol)) {
60      obj.port = '443';
61    }
62  }
63
64  obj.path = obj.path || '/';
65
66  var ipv6 = obj.host.indexOf(':') !== -1;
67  var host = ipv6 ? '[' + obj.host + ']' : obj.host;
68
69  // define unique id
70  obj.id = obj.protocol + '://' + host + ':' + obj.port;
71  // define href
72  obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));
73
74  return obj;
75}