aboutsummaryrefslogtreecommitdiffhomepage
path: root/node_modules/socket.io-client/lib/url.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/socket.io-client/lib/url.js')
-rw-r--r--node_modules/socket.io-client/lib/url.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/node_modules/socket.io-client/lib/url.js b/node_modules/socket.io-client/lib/url.js
new file mode 100644
index 0000000..8bac542
--- /dev/null
+++ b/node_modules/socket.io-client/lib/url.js
@@ -0,0 +1,75 @@
+
+/**
+ * Module dependencies.
+ */
+
+var parseuri = require('parseuri');
+var debug = require('debug')('socket.io-client:url');
+
+/**
+ * Module exports.
+ */
+
+module.exports = url;
+
+/**
+ * URL parser.
+ *
+ * @param {String} url
+ * @param {Object} An object meant to mimic window.location.
+ * Defaults to window.location.
+ * @api public
+ */
+
+function url (uri, loc) {
+ var obj = uri;
+
+ // default to window.location
+ loc = loc || global.location;
+ if (null == uri) uri = loc.protocol + '//' + loc.host;
+
+ // relative path support
+ if ('string' === typeof uri) {
+ if ('/' === uri.charAt(0)) {
+ if ('/' === uri.charAt(1)) {
+ uri = loc.protocol + uri;
+ } else {
+ uri = loc.host + uri;
+ }
+ }
+
+ if (!/^(https?|wss?):\/\//.test(uri)) {
+ debug('protocol-less url %s', uri);
+ if ('undefined' !== typeof loc) {
+ uri = loc.protocol + '//' + uri;
+ } else {
+ uri = 'https://' + uri;
+ }
+ }
+
+ // parse
+ debug('parse %s', uri);
+ obj = parseuri(uri);
+ }
+
+ // make sure we treat `localhost:80` and `localhost` equally
+ if (!obj.port) {
+ if (/^(http|ws)$/.test(obj.protocol)) {
+ obj.port = '80';
+ } else if (/^(http|ws)s$/.test(obj.protocol)) {
+ obj.port = '443';
+ }
+ }
+
+ obj.path = obj.path || '/';
+
+ var ipv6 = obj.host.indexOf(':') !== -1;
+ var host = ipv6 ? '[' + obj.host + ']' : obj.host;
+
+ // define unique id
+ obj.id = obj.protocol + '://' + host + ':' + obj.port;
+ // define href
+ obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));
+
+ return obj;
+}