| Leo Repp | 58b9f11 | 2021-11-22 11:57:47 +0100 | [diff] [blame^] | 1 | 'use strict'; |
| 2 | const lazy = (mod, fn, id) => mod === undefined ? fn(id) : mod; |
| 3 | |
| 4 | module.exports = fn => { |
| 5 | return id => { |
| 6 | let mod; |
| 7 | |
| 8 | const handler = { |
| 9 | get: (target, property) => { |
| 10 | mod = lazy(mod, fn, id); |
| 11 | return Reflect.get(mod, property); |
| 12 | }, |
| 13 | apply: (target, thisArg, argumentsList) => { |
| 14 | mod = lazy(mod, fn, id); |
| 15 | return Reflect.apply(mod, thisArg, argumentsList); |
| 16 | }, |
| 17 | construct: (target, argumentsList) => { |
| 18 | mod = lazy(mod, fn, id); |
| 19 | return Reflect.construct(mod, argumentsList); |
| 20 | } |
| 21 | }; |
| 22 | |
| 23 | // eslint-disable-next-line prefer-arrow-callback |
| 24 | return new Proxy(function () {}, handler); |
| 25 | }; |
| 26 | }; |