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; |