bpms_site/.svn/pristine/36/3658221e9267f5e0aa91e7988e6a47cd56a0f052.svn-base
2025-11-02 16:38:49 +03:30

24 lines
1.1 KiB
Plaintext

import { getLocationOrigin } from "../../utils";
import { searchParamsToUrlQuery } from "./querystring";
/**
* Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative
* (e.g. `./hello`) then at least base must be.
* Absolute urls are rejected with one exception, in the browser, absolute urls that are on
* the current origin will be parsed as relative
*/ export function parseRelativeUrl(url, base) {
const globalBase = new URL(typeof window === "undefined" ? "http://n" : getLocationOrigin());
const resolvedBase = base ? new URL(base, globalBase) : url.startsWith(".") ? new URL(typeof window === "undefined" ? "http://n" : window.location.href) : globalBase;
const { pathname, searchParams, search, hash, href, origin } = new URL(url, resolvedBase);
if (origin !== globalBase.origin) {
throw new Error("invariant: invalid relative URL, router received " + url);
}
return {
pathname,
query: searchParamsToUrlQuery(searchParams),
search,
hash,
href: href.slice(globalBase.origin.length)
};
}
//# sourceMappingURL=parse-relative-url.js.map