| 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.substr(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; |