// 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,
};