| 'use strict'; |
| const lazy = (importedModule, importFn, moduleId) => |
| importedModule === undefined ? importFn(moduleId) : importedModule; |
| |
| module.exports = importFn => { |
| return moduleId => { |
| let importedModule; |
| |
| const handler = { |
| get: (target, property) => { |
| importedModule = lazy(importedModule, importFn, moduleId); |
| return Reflect.get(importedModule, property); |
| }, |
| apply: (target, thisArgument, argumentsList) => { |
| importedModule = lazy(importedModule, importFn, moduleId); |
| return Reflect.apply(importedModule, thisArgument, argumentsList); |
| }, |
| construct: (target, argumentsList) => { |
| importedModule = lazy(importedModule, importFn, moduleId); |
| return Reflect.construct(importedModule, argumentsList); |
| } |
| }; |
| |
| // eslint-disable-next-line prefer-arrow-callback |
| return new Proxy(function () {}, handler); |
| }; |
| }; |