14 lines
569 B
TypeScript
14 lines
569 B
TypeScript
|
/**
|
||
|
* Given a URL as a string and a base URL it will make the URL relative
|
||
|
* if the parsed protocol and host is the same as the one in the base
|
||
|
* URL. Otherwise it returns the same URL string.
|
||
|
*/
|
||
|
export function relativizeURL(url: string | string, base: string | URL) {
|
||
|
const baseURL = typeof base === 'string' ? new URL(base) : base
|
||
|
const relative = new URL(url, base)
|
||
|
const origin = `${baseURL.protocol}//${baseURL.host}`
|
||
|
return `${relative.protocol}//${relative.host}` === origin
|
||
|
? relative.toString().replace(origin, '')
|
||
|
: relative.toString()
|
||
|
}
|