Fix plugin error and lazy webpack

This commit is contained in:
Zack Rauen 2022-08-16 20:19:58 -04:00
parent 5285c950d0
commit 2bf7c4386f
2 changed files with 21 additions and 13 deletions

View File

@ -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);
}
}

View File

@ -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);