File size: 1,378 Bytes
bc20498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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);
};