UNPKG

1.19 kBJavaScriptView Raw
1export default function catchErrors({ filename, components, imports }) {
2 const [React, ErrorReporter] = imports;
3 if (!React || !React.Component) {
4 throw new Error('imports[0] for react-transform-catch-errors does not look like React.');
5 }
6 if (typeof ErrorReporter !== 'function') {
7 throw new Error('imports[1] for react-transform-catch-errors does not look like a React component.');
8 }
9
10 return function wrapToCatchErrors(ReactClass, componentId) {
11 const originalRender = ReactClass.prototype.render;
12 ReactClass.prototype.render = function tryRender() {
13 try {
14 return originalRender.apply(this, arguments);
15 } catch (err) {
16 if (console.reportErrorsAsExceptions) {
17 // Stop react-native from triggering its own error handler
18 console.reportErrorsAsExceptions = false;
19 console.error(err);
20 // Reactivate it so other errors are still handled
21 console.reportErrorsAsExceptions = true;
22 } else {
23 console.error(err);
24 }
25 return React.createElement(ErrorReporter, {
26 error: err,
27 filename
28 });
29 }
30 };
31 return ReactClass;
32 };
33}