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 }