summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/src/utils/url.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/src/utils/url.js')
-rw-r--r--devtools/client/debugger/src/utils/url.js75
1 files changed, 75 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..2aabc31258
--- /dev/null
+++ b/devtools/client/debugger/src/utils/url.js
@@ -0,0 +1,75 @@
+/* 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/>. */
+
+const defaultUrl = {
+ hash: "",
+ host: "",
+ hostname: "",
+ href: "",
+ origin: "null",
+ password: "",
+ path: "",
+ pathname: "",
+ port: "",
+ protocol: "",
+ search: "",
+ // This should be a "URLSearchParams" object
+ searchParams: {},
+ username: "",
+};
+
+const parseCache = new Map();
+export function parse(url) {
+ if (parseCache.has(url)) {
+ return parseCache.get(url);
+ }
+
+ let urlObj;
+ try {
+ urlObj = new URL(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;
+ }
+ }
+ // When provided a special URL like "webpack:///webpack/foo",
+ // prevents passing the three slashes in the path, and pass only onea.
+ // This will prevent displaying modules in empty-name sub folders.
+ urlObj.pathname = urlObj.pathname.replace(/\/+/, "/");
+ urlObj.path = urlObj.pathname + urlObj.search;
+
+ // Cache the result
+ parseCache.set(url, urlObj);
+ return urlObj;
+}
+
+export function sameOrigin(firstUrl, secondUrl) {
+ return parse(firstUrl).origin == parse(secondUrl).origin;
+}