1 | export 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 |
|
18 | console.reportErrorsAsExceptions = false;
|
19 | console.error(err);
|
20 |
|
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 | }
|