logkitten
Version:
Stream Android and iOS logs without Android Studio or Console.app, with programmatic Node.js API for log analysis.
53 lines (48 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LineBuffer = void 0;
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); }
/**
* LineBuffer handles streaming data that may arrive in chunks that split mid-line.
* It buffers incomplete lines until a newline is received.
*/
class LineBuffer {
constructor() {
_defineProperty(this, "buffer", '');
}
/**
* Process a chunk of data and return complete lines
* @param chunk - The incoming data chunk
* @returns Array of complete lines
*/
processChunk(chunk) {
const data = chunk.toString();
this.buffer += data;
const lines = this.buffer.split(/\r?\n/);
// Keep the last line in buffer (might be incomplete)
this.buffer = lines.pop() || '';
// Return complete lines, filtering out empty ones
return lines.filter(Boolean);
}
/**
* Get any remaining buffered content (call when stream ends)
* @returns The remaining buffered content or empty string
*/
flush() {
const remaining = this.buffer;
this.buffer = '';
return remaining;
}
/**
* Clear the buffer
*/
clear() {
this.buffer = '';
}
}
exports.LineBuffer = LineBuffer;
//# sourceMappingURL=line-buffer.js.map