'use strict';
var url = require('url');
var querystring = require('querystring');
var getCurrentScriptSource = require('./getCurrentScriptSource');
function createSocketUrl(resourceQuery) {
var urlParts;
if (typeof resourceQuery === 'string' && resourceQuery !== '') {
urlParts = url.parse(resourceQuery.substr(1));
} else {
var scriptHost = getCurrentScriptSource();
if (scriptHost) {
scriptHost = scriptHost.replace(/\/[^\/]+$/, '');
}
urlParts = url.parse(scriptHost || '/', false, true);
}
if (!urlParts.port || urlParts.port === '0') {
urlParts.port = self.location.port;
}
var _urlParts = urlParts,
auth = _urlParts.auth,
path = _urlParts.path;
var _urlParts2 = urlParts,
hostname = _urlParts2.hostname,
protocol = _urlParts2.protocol;
var isAnyHostname = (hostname === '0.0.0.0' || hostname === '::') && self.location.hostname && !!~self.location.protocol.indexOf('http');
if (isAnyHostname) {
hostname = self.location.hostname;
}
if (hostname && (self.location.protocol === 'https:' || urlParts.hostname === '0.0.0.0')) {
protocol = self.location.protocol;
}
var sockHost = hostname;
var sockPath = '/sockjs-node';
var sockPort = urlParts.port;
var shouldParsePath = path !== null && path !== undefined && path !== '/';
if (shouldParsePath) {
var parsedQuery = querystring.parse(path);
sockHost = parsedQuery.sockHost || sockHost;
sockPath = parsedQuery.sockPath || sockPath;
sockPort = parsedQuery.sockPort || sockPort;
}
return url.format({
protocol: protocol,
auth: auth,
hostname: sockHost,
port: sockPort,
pathname: sockPath
});
}
module.exports = createSocketUrl;