fcs
2025-04-10 0163870d662dc5b7d69ceff977490ede594f7d82
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
45
46
47
48
49
50
51
52
53
'use strict';
const lazy = (mod, fn, id) => mod === undefined ? fn(id) : mod;
 
module.exports = fn => {
    return id => {
        let mod;
 
        return function () {
            if (arguments.length === 0) {
                mod = lazy(mod, fn, id);
                return mod;
            }
 
            const ret = {};
 
            [].forEach.call(arguments, prop => {
                Object.defineProperty(ret, prop, {
                    get: () => {
                        mod = lazy(mod, fn, id);
                        if (typeof mod[prop] === 'function') {
                            return function () {
                                return mod[prop].apply(mod, arguments);
                            };
                        }
 
                        return mod[prop];
                    }
                });
            });
 
            return ret;
        };
    };
};
 
module.exports.proxy = fn => {
    return id => {
        let mod;
 
        const handler = {
            get: (target, property) => {
                mod = lazy(mod, fn, id);
                return Reflect.get(mod, property);
            },
            apply: (target, thisArg, argumentsList) => {
                mod = lazy(mod, fn, id);
                return Reflect.apply(mod, thisArg, argumentsList);
            }
        };
 
        return new Proxy(() => {}, handler);
    };
};