lib/apply-proxy-to-url.js (17 lines of code) (raw):

const urlJoin = require('url-join'); const url = require('url'); function applyProxyToUrl(targetEndpoint, urlToProxy) { const parsedUrlToProxy = url.parse(urlToProxy); const parsedTargetUrl = url.parse(targetEndpoint); const resultantTargetUrl = url.format(Object.assign({}, parsedUrlToProxy, { protocol: parsedTargetUrl.protocol, slashes: parsedTargetUrl.slashses, auth: parsedTargetUrl.auth, host: parsedTargetUrl.host, port: parsedTargetUrl.port, hostname: parsedTargetUrl.hostname, // We check for slash to get around this odd behavior // `urlJoin('/', '/', '/session')` -> `'//session'` <---- unexpected (expected `'/session'`) // `urlJoin('/', '/wd/hub', '/session')` -> `'/wd/hub/session'` // `urlJoin('/', '/wd/hub/', '/session')` -> `'/wd/hub/session'` pathname: urlJoin('/', (parsedTargetUrl.pathname !== '/' ? parsedTargetUrl.pathname : ''), parsedUrlToProxy.path), })); return resultantTargetUrl; } module.exports = applyProxyToUrl;