diff --git a/packages/metro-bundler/src/lib/JsonReporter.js b/packages/metro-bundler/src/lib/JsonReporter.js index 6d47bc0c..05c5549e 100644 --- a/packages/metro-bundler/src/lib/JsonReporter.js +++ b/packages/metro-bundler/src/lib/JsonReporter.js @@ -13,7 +13,7 @@ import {Writable} from 'stream'; -class JsonReporter { +class JsonReporter { _stream: Writable; @@ -21,7 +21,20 @@ class JsonReporter { this._stream = stream; } + /** + * There is a special case for errors because they have non-enumerable fields. + * (Perhaps we should switch in favor of plain object?) + */ update(event: TEvent) { + /* $FlowFixMe: fine to call on `undefined`. */ + if (Object.prototype.toString.call(event.error) === '[object Error]') { + event = {...event}; + event.error = { + ...event.error, + message: event.error.message, + stack: event.error.stack, + }; + } this._stream.write(JSON.stringify(event) + '\n'); }