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