summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/src/utils/url.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /devtools/client/debugger/src/utils/url.js
parentInitial commit. (diff)
downloadfirefox-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.js90
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;
+}