UNPKG

@signalk/streams

Version:

Utilities for handling streams of Signal K data

58 lines (57 loc) 2.03 kB
"use strict"; 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;