function transformAbsolutePath(_url, _relativepath) {
if (!_relativepath) return _relativepath
const url = new URL(_url)
const pathname = url.pathname
const pathnameArr = pathname.split('/')
const relativepathArr = _relativepath.split('/')
let newUrl = ''
if (/^\.\.\//.test(_relativepath)) {
const relativepathFilterArr = relativepathArr.filter(s => s !== '..')
const count = relativepathArr.length - relativepathFilterArr.length
const pathnameSliceArr = pathnameArr.slice(0, pathnameArr.length - count)
newUrl = pathnameSliceArr.concat(relativepathFilterArr).join('/')
} else if (/^\/[^\/]/.test(_relativepath)) {
newUrl = _relativepath
} else {
const relativepathFilterArr = relativepathArr.filter(s => s !== '.')
newUrl = pathnameArr.concat(relativepathFilterArr).join('/')
}
return url.origin + newUrl
}
const url = 'https://www.demo.com/a/b/c/d'
const relativePath1 = '../../foo'
const relativePath2 = './bar'
const relativePath3 = '/foobar'
const absolutePath1 = transformAbsolutePath(url, relativePath1)
const absolutePath2 = transformAbsolutePath(url, relativePath2)
const absolutePath3 = transformAbsolutePath(url, relativePath3)
console.log({ absolutePath1, absolutePath2, absolutePath3 })