From 2bf7c4386f93e805a8f8a71daad250f499153b4f Mon Sep 17 00:00:00 2001 From: Zack Rauen Date: Tue, 16 Aug 2022 20:19:58 -0400 Subject: [PATCH] Fix plugin error and lazy webpack --- renderer/src/modules/pluginmanager.js | 2 +- renderer/src/modules/webpackmodules.js | 32 ++++++++++++++++---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/renderer/src/modules/pluginmanager.js b/renderer/src/modules/pluginmanager.js index a5cb34b4..ba823404 100644 --- a/renderer/src/modules/pluginmanager.js +++ b/renderer/src/modules/pluginmanager.js @@ -127,7 +127,7 @@ export default new class PluginManager extends AddonManager { return addon; } catch (err) { - return new AddonError(addon.name || addon.filename, module.filename, "Plugin could not be compiled", {message: err.message, stack: err.stack}, this.prefix); + throw new AddonError(addon.name || addon.filename, module.filename, "Plugin could not be compiled", {message: err.message, stack: err.stack}, this.prefix); } } diff --git a/renderer/src/modules/webpackmodules.js b/renderer/src/modules/webpackmodules.js index f40c2f74..98c5a51b 100644 --- a/renderer/src/modules/webpackmodules.js +++ b/renderer/src/modules/webpackmodules.js @@ -324,21 +324,29 @@ export default class WebpackModules { const fromCache = this.getModule(filter); if (fromCache) return Promise.resolve(fromCache); + const wrappedFilter = (exports) => { + try { + return filter(exports); + } + catch (err) { + if (!hasThrown.has(filter)) Logger.warn("WebpackModules~getModule", "Module filter threw an exception.", filter, err); + hasThrown.add(filter); + return false; + } + }; + return new Promise((resolve) => { - const cancel = () => {this.removeListener(listener);}; - const listener = function (mod) { - const directMatch = filter(mod); + const cancel = () => this.removeListener(listener); + const listener = function(exports) { + if (!exports) return; + + let foundModule = null; + if (exports.__esModule && exports.default && wrappedFilter(exports.default)) foundModule = defaultExport ? exports.default : exports; + if (wrappedFilter(exports)) foundModule = exports; + if (!foundModule) return; - if (directMatch) { - cancel(); - return resolve(directMatch); - } - - const defaultMatch = filter(mod.default); - if (!defaultMatch) return; - cancel(); - resolve(defaultExport ? mod.default : mod); + resolve(protect(foundModule)); }; this.addListener(listener);