1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import getCurrentScriptSource from "./getCurrentScriptSource.js";
- /**
- * @param {string} resourceQuery
- * @returns {{ [key: string]: string | boolean }}
- */
- function parseURL(resourceQuery) {
- /** @type {{ [key: string]: string }} */
- var options = {};
- if (typeof resourceQuery === "string" && resourceQuery !== "") {
- var searchParams = resourceQuery.slice(1).split("&");
- for (var i = 0; i < searchParams.length; i++) {
- var pair = searchParams[i].split("=");
- options[pair[0]] = decodeURIComponent(pair[1]);
- }
- } else {
- // Else, get the url from the <script> this file was called with.
- var scriptSource = getCurrentScriptSource();
- var scriptSourceURL;
- try {
- // The placeholder `baseURL` with `window.location.href`,
- // is to allow parsing of path-relative or protocol-relative URLs,
- // and will have no effect if `scriptSource` is a fully valid URL.
- scriptSourceURL = new URL(scriptSource, self.location.href);
- } catch (error) {// URL parsing failed, do nothing.
- // We will still proceed to see if we can recover using `resourceQuery`
- }
- if (scriptSourceURL) {
- options = scriptSourceURL;
- options.fromCurrentScript = true;
- }
- }
- return options;
- }
- export default parseURL;
|