UNPKG

@aiot-toolkit/emulator

Version:

vela emulator tool.

70 lines (68 loc) 1.99 kB
"use strict"; 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 }; }