|
import { absoluteURL, entries, isArray, isCSS, js_modules } from '../utils.js'; |
|
import { base } from '../interpreter/_utils.js'; |
|
|
|
const has = (modules, name) => modules.has(name); |
|
|
|
const ownKeys = modules => [...modules.keys()]; |
|
|
|
const proxy = (modules, window, sync, baseURL) => new Proxy(modules, { |
|
has, |
|
ownKeys, |
|
get: (modules, name) => { |
|
let value = modules.get(name); |
|
if (isArray(value)) { |
|
let sources = value; |
|
value = null; |
|
for (let source of sources) { |
|
source = absoluteURL(source, baseURL); |
|
if (isCSS(source)) sync.importCSS(source); |
|
else { |
|
sync.importJS(source, name); |
|
value = window[js_modules].get(name); |
|
} |
|
} |
|
modules.set(name, value); |
|
} |
|
return value; |
|
}, |
|
}); |
|
|
|
export default (window, sync, mainModules) => { |
|
let modules = globalThis[js_modules], baseURL = ''; |
|
if (mainModules) { |
|
baseURL = base.get(mainModules); |
|
for (let [source, module] of entries(mainModules)) { |
|
let value = modules.get(module); |
|
if (!value || isArray(value)) { |
|
modules.set(module, value || (value = [])); |
|
value.push(source); |
|
} |
|
} |
|
} |
|
return proxy(modules, window, sync, baseURL); |
|
}; |
|
|