From bdc9749ba0cdf2d92866bad647a106a2f5705739 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Fri, 22 Apr 2016 06:17:17 -0700 Subject: [PATCH] Improve error handling in require-unbundle Reviewed By: davidaurelio Differential Revision: D3207450 fb-gh-sync-id: 35247c265e35976dcee9fca4215403efa604479e fbshipit-source-id: 35247c265e35976dcee9fca4215403efa604479e --- .../Resolver/polyfills/require-unbundle.js | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/react-packager/src/Resolver/polyfills/require-unbundle.js b/react-packager/src/Resolver/polyfills/require-unbundle.js index 70cd1139..fa774787 100644 --- a/react-packager/src/Resolver/polyfills/require-unbundle.js +++ b/react-packager/src/Resolver/polyfills/require-unbundle.js @@ -9,15 +9,11 @@ 'use strict'; -const {ErrorUtils, nativeRequire} = global; global.require = require; global.__d = define; const modules = Object.create(null); -const loadModule = ErrorUtils ? - guardedLoadModule : loadModuleImplementation; - function define(moduleId, factory) { if (moduleId in modules) { // prevent repeated calls to `global.nativeRequire` to overwrite modules @@ -36,20 +32,29 @@ function require(moduleId) { const module = modules[moduleId]; return module && module.isInitialized ? module.exports - : loadModule(moduleId, module); + : guardedLoadModule(moduleId, module); } +var inGuard = false; function guardedLoadModule(moduleId, module) { - try { + if (global.ErrorUtils && !inGuard) { + inGuard = true; + var returnValue; + try { + returnValue = loadModuleImplementation(moduleId, module); + } catch (e) { + global.ErrorUtils.reportFatalError(e); + } + inGuard = false; + return returnValue; + } else { return loadModuleImplementation(moduleId, module); - } catch (e) { - ErrorUtils.reportFatalError(e); } } function loadModuleImplementation(moduleId, module) { if (!module) { - nativeRequire(moduleId); + global.nativeRequire(moduleId); module = modules[moduleId]; } @@ -90,6 +95,7 @@ function loadModuleImplementation(moduleId, module) { module.isInitialized = false; module.hasError = true; module.exports = undefined; + throw e; } }