tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ModuleLoader.js (1120B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 function ModuleLoader(base, depth) {
      7  const modules = {};
      8 
      9  const require = async function (id) {
     10    if (modules[id]) {
     11      return modules[id].exported_symbols;
     12    }
     13 
     14    const url = new URL(depth + id, base);
     15 
     16    const module = Object.create(null, {
     17      exported_symbols: {
     18        configurable: false,
     19        enumerable: true,
     20        value: Object.create(null),
     21        writable: true,
     22      },
     23    });
     24 
     25    modules[id] = module;
     26 
     27    const xhr = new XMLHttpRequest();
     28    xhr.open("GET", url.href, false);
     29    xhr.responseType = "text";
     30    xhr.send();
     31 
     32    let source = xhr.responseText;
     33 
     34    let code = new Function(
     35      "require_module",
     36      "exported_symbols",
     37      `eval(arguments[2] + "\\n//# sourceURL=" + arguments[3] + "\\n")`
     38    );
     39    code(require, module.exported_symbols, source, url.href);
     40 
     41    return module.exported_symbols;
     42  };
     43 
     44  const returnObj = {
     45    require: {
     46      enumerable: true,
     47      value: require,
     48    },
     49  };
     50 
     51  return Object.create(null, returnObj);
     52 }