@aiot-toolkit/emulator
Version:
vela emulator tool.
70 lines (68 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.attachReadline = attachReadline;
exports.creatLogcat = creatLogcat;
var _readline = _interopRequireDefault(require("readline"));
var _adb = require("@miwt/adb");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function creatLogcat(sn) {
let onStdout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : console.log;
let onErrout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : console.log;
let p = arguments.length > 3 ? arguments[3] : undefined;
let rls = arguments.length > 4 ? arguments[4] : undefined;
const logcatProcess = p || (0, _adb.spawnAdbCmd)('adb', ['-s', sn, 'logcat']);
const readlines = rls || attachReadline(logcatProcess, onStdout, onErrout);
return {
...readlines,
logcatProcess,
onStdout,
onErrout
};
}
function attachReadline(p, onStdout, onErrout) {
let stdoutReadline;
let stderrReadline;
// 利用 readline 接口可解决子进程日志换行的问题
if (p?.stdout) {
stdoutReadline = _readline.default.createInterface({
input: p.stdout
});
stdoutReadline.on('line', str => {
onStdout(str);
});
p.stdout.on('close', () => {
stdoutReadline?.close();
stdoutReadline = undefined;
});
}
if (p?.stderr) {
stderrReadline = _readline.default.createInterface({
input: p.stderr
});
stderrReadline.on('line', str => {
onErrout(str);
});
p.stderr.on('close', () => {
stderrReadline?.close();
});
}
function dispose() {
p?.removeAllListeners();
stdoutReadline?.removeAllListeners();
stderrReadline?.removeAllListeners();
stdoutReadline?.close();
stderrReadline?.close();
stdoutReadline = undefined;
stderrReadline = undefined;
}
p?.on('exit', () => {
dispose();
});
return {
stdoutReadline,
stderrReadline,
dispose
};
}