/** * Create a valid URL from parsed URL parts. * @param {import('./getSocketUrlParts').SocketUrlParts} urlParts The parsed URL parts. * @param {import('./getWDSMetadata').WDSMetaObj} [metadata] The parsed WDS metadata object. * @returns {string} The generated URL. */ function urlFromParts(urlParts, metadata) { if (typeof metadata === 'undefined') { metadata = {}; } let fullProtocol = 'http:'; if (urlParts.protocol) { fullProtocol = urlParts.protocol; } if (metadata.enforceWs) { fullProtocol = fullProtocol.replace(/^(?:http|.+-extension|file)/i, 'ws'); } fullProtocol = fullProtocol + '//'; let fullHost = urlParts.hostname; if (urlParts.auth) { const fullAuth = urlParts.auth.split(':').map(encodeURIComponent).join(':') + '@'; fullHost = fullAuth + fullHost; } if (urlParts.port) { fullHost = fullHost + ':' + urlParts.port; } const url = new URL(urlParts.pathname, fullProtocol + fullHost); return url.href; } module.exports = urlFromParts;