UNPKG

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.

111 lines (87 loc) 2.98 kB
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.default = createMessageStream; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _commonsNodeStream2; function _commonsNodeStream() { return _commonsNodeStream2 = require('../../commons-node/stream'); } var _createMessage2; function _createMessage() { return _createMessage2 = _interopRequireDefault(require('./createMessage')); } var _parseLogcatMetadata2; function _parseLogcatMetadata() { return _parseLogcatMetadata2 = _interopRequireDefault(require('./parseLogcatMetadata')); } var _rxjsBundlesRxUmdMinJs2; function _rxjsBundlesRxUmdMinJs() { return _rxjsBundlesRxUmdMinJs2 = _interopRequireDefault(require('rxjs/bundles/Rx.umd.min.js')); } function createMessageStream(line$) { // Separate the lines into groups, beginning with metadata lines. return (_rxjsBundlesRxUmdMinJs2 || _rxjsBundlesRxUmdMinJs()).default.Observable.create(function (observer) { var buffer = []; var prevMetadata = null; var prevLineIsBlank = function prevLineIsBlank() { return buffer[buffer.length - 1] === ''; }; var flush = function flush() { if (buffer.length === 0) { return; } // Remove the empty line, which is a message separator. if (prevLineIsBlank()) { buffer.pop(); } observer.next({ metadata: prevMetadata, message: buffer.join('\n') }); buffer = []; prevMetadata = null; }; var sharedLine$ = line$.share(); return new (_commonsNodeStream2 || _commonsNodeStream()).CompositeSubscription( // Buffer incoming lines. sharedLine$.subscribe( // onNext function (line) { var metadata = undefined; var hasPreviousLines = buffer.length > 0; if (!hasPreviousLines || prevLineIsBlank()) { metadata = (0, (_parseLogcatMetadata2 || _parseLogcatMetadata()).default)(line); } if (metadata) { // We've reached a new message so the other one must be done. flush(); prevMetadata = metadata; } else { buffer.push(line); } }, // onError function (error) { flush(); observer.error(error); }, // onCompleted function () { flush(); observer.complete(); }), // We know *for certain* that we have a complete entry once we see the metadata for the next // one. But what if the next one takes a long time to happen? After a certain point, we need // to just assume we have the complete entry and move on. sharedLine$.debounceTime(200).subscribe(flush)); }).map((_createMessage2 || _createMessage()).default).share(); } module.exports = exports.default;