const modules = new Map>(); const pendingModules = new Map(); (window as any).pendingModules = pendingModules; export default class Modules { static async import(name: string): Promise { const { importFunction } = window as any; if (importFunction) { return await importFunction(name); } let m = modules.get(name); if (!m) { m = new Promise((resolve, reject) => { const script = document.createElement("script"); pendingModules.set(name, { resolve, reject, script }); script.type = "module"; script.setAttribute("remove-when-save", "true"); script.textContent = ` import * as result from "${name}.js"; const { resolve, script } = window.pendingModules.get("${name}"); script.remove(); window.pendingModules.delete("${name}"); resolve(result); `; document.body.append(script); }); modules.set(name, m); } return m; } }