@devicefarmer/adbkit-logcat
Version:
A Node.js interface for working with Android's logcat output.
128 lines (127 loc) • 4.55 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var events_1 = require("events");
var binary_1 = __importDefault(require("./parser/binary"));
var transform_1 = __importDefault(require("./transform"));
var priority_1 = __importDefault(require("./priority"));
var Reader = /** @class */ (function (_super) {
__extends(Reader, _super);
function Reader(options) {
var _this = _super.call(this, options) || this;
_this.options = options;
_this.parser = new binary_1.default();
_this.stream = null;
var defaults = {
format: 'binary',
fixLineFeeds: true,
priority: priority_1.default.DEBUG
};
_this.options = Object.assign({}, defaults, options);
_this.filters = {
all: -1,
tags: {}
};
if (_this.options.format !== 'binary') {
throw new Error("Unsupported format '".concat(_this.options.format, "'"));
}
return _this;
}
Reader.prototype.exclude = function (tag) {
if (tag === Reader.ANY) {
return this.excludeAll();
}
this.filters.tags[tag] = priority_1.default.SILENT;
return this;
};
Reader.prototype.excludeAll = function () {
this.filters.all = priority_1.default.SILENT;
return this;
};
Reader.prototype.include = function (tag, priority) {
if (priority === void 0) { priority = this.options.priority; }
if (tag === Reader.ANY) {
return this.includeAll(priority);
}
this.filters.tags[tag] = this._priority(priority);
return this;
};
Reader.prototype.includeAll = function (priority) {
if (priority === void 0) { priority = this.options.priority; }
this.filters.all = this._priority(priority);
return this;
};
Reader.prototype.resetFilters = function () {
this.filters.all = -1;
this.filters.tags = {};
return this;
};
Reader.prototype._hook = function () {
var _this = this;
if (this.options.fixLineFeeds) {
var transform = this.stream.pipe(new transform_1.default());
transform.on('data', function (data) {
_this.parser.parse(data);
});
}
else {
this.stream.on('data', function (data) {
_this.parser.parse(data);
});
}
this.stream.on('error', function (err) {
_this.emit('error', err);
});
this.stream.on('end', function () {
_this.emit('end');
});
this.stream.on('finish', function () {
_this.emit('finish');
});
this.parser.on('entry', function (entry) {
if (_this._filter(entry)) {
_this.emit('entry', entry);
}
});
this.parser.on('error', function (err) {
_this.emit('error', err);
});
};
Reader.prototype._filter = function (entry) {
var wanted = entry.tag in this.filters.tags
? this.filters.tags[entry.tag]
: this.filters.all;
return entry.priority >= wanted;
};
Reader.prototype._priority = function (priority) {
return typeof priority === 'number' ? priority : priority_1.default.fromName(priority);
};
Reader.prototype.connect = function (stream) {
this.stream = stream;
this._hook();
return this;
};
Reader.prototype.end = function () {
this.stream.end();
return this;
};
Reader.ANY = '*';
return Reader;
}(events_1.EventEmitter));
module.exports = Reader;