36 lines
1.3 KiB
JavaScript
36 lines
1.3 KiB
JavaScript
|
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;
|