Hard
Implementing a Dynamic Module Loader with Async/Sync Support in JavaScript
You're building a plugin system that needs to dynamically load and execute modules. What's the correct implementation to handle both synchronous and asynchronous modules safely?
1class ModuleLoader {2 constructor() {3 this.modules = new Map();4 this.loading = new Map();5 }67 // Missing implementation8 async load(moduleId, dependencies = []) {9 ____________________10 ____________________11 ____________________12 ____________________13 }1415 register(moduleId, factory) {16 this.modules.set(moduleId, factory);17 }18}1920// Usage:21const loader = new ModuleLoader();2223loader.register('logger', () => ({24 log: (msg) => console.log(msg)25}));2627loader.register('dataService', async (logger) => ({28 getData: () => {29 logger.log('Fetching data...');30 return Promise.resolve([1, 2, 3]);31 }32}));3334// Should work with both scenarios:35const logger = await loader.load('logger');36const dataService = await loader.load('dataService', ['logger']);