diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /devtools/client/debugger/src/utils/url.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/src/utils/url.js')
-rw-r--r-- | devtools/client/debugger/src/utils/url.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/utils/url.js b/devtools/client/debugger/src/utils/url.js new file mode 100644 index 0000000000..b421a95e9c --- /dev/null +++ b/devtools/client/debugger/src/utils/url.js @@ -0,0 +1,90 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +// @flow +import { memoize } from "lodash"; +import { URL as URLParser } from "whatwg-url"; +import type { URL } from "../types"; + +const defaultUrl = { + hash: "", + host: "", + hostname: "", + href: "", + origin: "null", + password: "", + path: "", + pathname: "", + port: "", + protocol: "", + search: "", + // This should be a "URLSearchParams" object + searchParams: {}, + username: "", +}; + +export const stripQuery = memoize(function stripQueryAndHash(url: URL): URL { + let queryStart = url.indexOf("?"); + + let before = url; + let after = ""; + if (queryStart >= 0) { + const hashStart = url.indexOf("#"); + if (hashStart >= 0) { + if (hashStart < queryStart) { + queryStart = hashStart; + } + + after = url.slice(hashStart); + } + + before = url.slice(0, queryStart); + } + + return before + after; +}); + +export const parse = memoize(function parse(url: URL): any { + let urlObj; + try { + urlObj = new URLParser(url); + } catch (err) { + urlObj = { ...defaultUrl }; + // If we're given simply a filename... + if (url) { + const hashStart = url.indexOf("#"); + if (hashStart >= 0) { + urlObj.hash = url.slice(hashStart); + url = url.slice(0, hashStart); + + if (urlObj.hash === "#") { + // The standard URL parser does not include the ? unless there are + // parameters included in the search value. + urlObj.hash = ""; + } + } + + const queryStart = url.indexOf("?"); + if (queryStart >= 0) { + urlObj.search = url.slice(queryStart); + url = url.slice(0, queryStart); + + if (urlObj.search === "?") { + // The standard URL parser does not include the ? unless there are + // parameters included in the search value. + urlObj.search = ""; + } + } + + urlObj.pathname = url; + } + } + (urlObj: any).path = urlObj.pathname + urlObj.search; + + return urlObj; +}); + +export function sameOrigin(firstUrl: URL, secondUrl: URL): boolean { + return parse(firstUrl).origin == parse(secondUrl).origin; +} |