@signalk/streams
Version:
Utilities for handling streams of Signal K data
58 lines (57 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const stream_1 = require("stream");
const canboatjs_1 = require("@canboat/canboatjs");
class CanboatJs extends stream_1.Transform {
fromPgn;
app;
analyzerOutEvent;
constructor(options) {
super({ objectMode: true });
const opts = {
...options,
useCamelCompat: options.useCamelCompat ?? true
};
this.fromPgn = new canboatjs_1.FromPgn(opts);
const createDebug = options.createDebug ?? require('debug');
const debug = createDebug('signalk:streams:canboatjs');
this.fromPgn.on('warning', (pgn, warning) => {
debug(`[warning] ${pgn.pgn} ${warning}`);
options.app.emit('canboatjs:warning', warning);
});
this.fromPgn.on('error', (pgn, err) => {
console.error(pgn.input, err.message);
options.app.emit('canboatjs:error', err);
});
this.app = options.app;
this.analyzerOutEvent = options.analyzerOutEvent ?? 'N2KAnalyzerOut';
}
_transform(chunk, encoding, done) {
if (typeof chunk === 'object' &&
chunk !== null &&
'fromFile' in chunk &&
chunk.fromFile) {
const pgnData = this.fromPgn.parse(chunk.data);
if (pgnData) {
pgnData.timestamp = new Date(Number(chunk.timestamp)).toISOString();
this.push(pgnData);
this.app.emit(this.analyzerOutEvent, pgnData);
}
else {
this.app.emit('canboatjs:unparsed:object', chunk);
}
}
else {
const pgnData = this.fromPgn.parse(chunk);
if (pgnData) {
this.push(pgnData);
this.app.emit(this.analyzerOutEvent, pgnData);
}
else {
this.app.emit('canboatjs:unparsed:data', chunk);
}
}
done();
}
}
exports.default = CanboatJs;