logkitten
Version:
Stream Android and iOS logs without Android Studio or Console.app, with programmatic Node.js API for log analysis.
60 lines (58 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LogkittenEmitter = void 0;
var _events = require("events");
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
* LogkittenEmitter extends EventEmitter and provides an async .close([cb]) method
* to programmatically stop the logging process and clean up resources.
*/
class LogkittenEmitter extends _events.EventEmitter {
constructor(loggingProcess) {
super();
_defineProperty(this, "_closePromise", void 0);
_defineProperty(this, "_loggingProcess", void 0);
this._loggingProcess = loggingProcess;
}
/**
* Closes the logging process and emits 'close'.
* Supports both callback and Promise API.
*/
close(cb) {
if (this._closePromise) {
// eslint-disable-next-line promise/catch-or-return, promise/prefer-await-to-then, promise/no-callback-in-promise
if (cb) this._closePromise.then(() => cb(), cb);
return this._closePromise;
}
this._closePromise = new Promise((resolve, reject) => {
const onExit = () => {
this.emit('close');
if (cb) cb();
resolve();
};
try {
var _this$_loggingProcess, _this$_loggingProcess2, _this$_loggingProcess3;
this._loggingProcess.removeAllListeners();
(_this$_loggingProcess = this._loggingProcess.stdin) === null || _this$_loggingProcess === void 0 || _this$_loggingProcess.removeAllListeners();
(_this$_loggingProcess2 = this._loggingProcess.stdout) === null || _this$_loggingProcess2 === void 0 || _this$_loggingProcess2.removeAllListeners();
(_this$_loggingProcess3 = this._loggingProcess.stderr) === null || _this$_loggingProcess3 === void 0 || _this$_loggingProcess3.removeAllListeners();
if (this._loggingProcess.exitCode !== null || this._loggingProcess.killed) {
onExit();
} else {
this._loggingProcess.on('exit', onExit);
this._loggingProcess.kill();
}
} catch (err) {
if (cb) cb(err);
reject(err);
}
});
return this._closePromise;
}
}
exports.LogkittenEmitter = LogkittenEmitter;
//# sourceMappingURL=emitter.js.map