You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
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; |