// See https://nodejs.org/docs/latest/api/url.html
function parse(url) {
var result = {
protocol: null, auth: null, host: null, path: null,
hash: null, href: url, hostname: null, port: null,
pathname: null, search: null, query: null
};
var i, last;
i = url.indexOf('//');
if (i !== -1) {
result.protocol = url.substring(0,i);
last = i+2;
} else {
last = 0;
}
i = url.indexOf('@', last);
if (i !== -1) {
result.auth = url.substring(last, i);
last = i+1;
}
i = url.indexOf('/', last);
if (i === -1) {
i = url.indexOf('?', last);
if (i === -1) {
i = url.indexOf('#', last);
if (i === -1) {
result.host = url.substring(last);
} else {
result.host = url.substring(last, i);
result.hash = url.substring(i);
}
result.hostname = result.host.split(':')[0];
result.port = result.host.split(':')[1];
if (result.port) {
result.port = parseInt(result.port, 10);
}
return result;
} else {
result.host = url.substring(last, i);
result.hostname = result.host.split(':')[0];
result.port = result.host.split(':')[1];
if (result.port) {
result.port = parseInt(result.port, 10);
}
last = i;
}
} else {
result.host = url.substring(last, i);
result.hostname = result.host.split(':')[0];
result.port = result.host.split(':')[1];
if (result.port) {
result.port = parseInt(result.port, 10);
}
last = i;
}
i = url.indexOf('#', last);
if (i === -1) {
result.path = url.substring(last);
} else {
result.path = url.substring(last, i);
result.hash = url.substring(i);
}
if (result.path) {
var pathParts = result.path.split('?');
result.pathname = pathParts[0];
result.query = pathParts[1];
result.search = result.query ? '?' + result.query : null;
}
return result;
}
module.exports = {
parse: parse
};