atom-nuclide
Version:
A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.
82 lines (63 loc) • 2.48 kB
JavaScript
Object.defineProperty(exports, '__esModule', {
value: true
});
/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the license found in the LICENSE file in
* the root directory of this source tree.
*/
exports.createMessageStream = createMessageStream;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _commonsNodeStream2;
function _commonsNodeStream() {
return _commonsNodeStream2 = require('../../commons-node/stream');
}
var _commonsAtomFeatureConfig2;
function _commonsAtomFeatureConfig() {
return _commonsAtomFeatureConfig2 = _interopRequireDefault(require('../../commons-atom/featureConfig'));
}
var _createMessage2;
function _createMessage() {
return _createMessage2 = require('./createMessage');
}
var _plist2;
function _plist() {
return _plist2 = _interopRequireDefault(require('plist'));
}
var _rxjsBundlesRxUmdMinJs2;
function _rxjsBundlesRxUmdMinJs() {
return _rxjsBundlesRxUmdMinJs2 = _interopRequireDefault(require('rxjs/bundles/Rx.umd.min.js'));
}
function createMessageStream(line$) {
// Group the lines into valid plist strings.
return (0, (_commonsNodeStream2 || _commonsNodeStream()).bufferUntil)(line$, function (line) {
return line.trim() === '</plist>';
})
// Don't include empty buffers. This happens if the stream completes since we opened a new
// buffer when the previous record ended.
.filter(function (lines) {
return lines.length > 1;
}).map(function (lines) {
return lines.join('');
})
// Parse the plists. Each parsed plist contains an array which, in turn, *may* contain dicts
// (that correspond to records). We just want those dicts so we use `flatMap()`.
.flatMap(function (xml) {
return (_plist2 || _plist()).default.parse(xml);
})
// Exclude dicts that don't have any message property.
.filter(function (record) {
return record.hasOwnProperty('Message');
})
// Exclude blacklisted senders.
// FIXME: This is a stopgap. What we really need to do is identify the currently running app and
// only show its messages. ):
.filter(function (record) {
var blacklist = (_commonsAtomFeatureConfig2 || _commonsAtomFeatureConfig()).default.get('nuclide-ios-simulator-logs.senderBlacklist');
return blacklist.indexOf(record.Sender) === -1;
})
// Format the messages for Nuclide.
.map((_createMessage2 || _createMessage()).createMessage);
}