/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
'use strict';
const {Writable} = require('stream');
class JsonReporter<TEvent: {}> {
_stream: Writable;
constructor(stream: Writable) {
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};
/* $FlowFixMe(>=0.70.0 site=react_native_fb) This comment suppresses an
* error found when Flow v0.70 was deployed. To see the error delete
* this comment and run Flow. */
event.error = {
/* $FlowFixMe(>=0.70.0 site=react_native_fb) This comment suppresses an
* error found when Flow v0.70 was deployed. To see the error delete
* this comment and run Flow. */
...event.error,
/* $FlowFixMe(>=0.70.0 site=react_native_fb) This comment suppresses an
* error found when Flow v0.70 was deployed. To see the error delete
* this comment and run Flow. */
message: event.error.message,
/* $FlowFixMe(>=0.70.0 site=react_native_fb) This comment suppresses an
* error found when Flow v0.70 was deployed. To see the error delete
* this comment and run Flow. */
stack: event.error.stack,
};
}
this._stream.write(JSON.stringify(event) + '\n');
}
}
module.exports = JsonReporter;