feat: 导入 NMEA-0183 GPS 协议解析库(node-nmea)
NMEA-0183 语句解析器,含 21 个语句类型 codec 与配套单元测试。 - codecs/:APB/BWC/DBT/GGA/GLL/GRMT/GSA/GSV/HDG/HDM/HDT/MWV/RDID/ RMB/RMC/ROT/RSA/TXT/VTG/VWR/ZDA - test/:各 codec 对应的 mocha 用例 - .github/workflows/:node与 npm-publish 流水线 许可证:MIT(原作者 James Penn)
This commit is contained in:
49
liner.js
Normal file
49
liner.js
Normal file
@@ -0,0 +1,49 @@
|
||||
var Transform = require('stream').Transform;
|
||||
|
||||
function Liner() {
|
||||
Transform.call(this, { objectMode: true });
|
||||
}
|
||||
|
||||
Liner.prototype = {
|
||||
_transform: function (chunk, encoding, done) {
|
||||
var data = chunk.toString()
|
||||
if (this._lastLineData) data = this._lastLineData + data
|
||||
|
||||
var lines = data.split('\n')
|
||||
this._lastLineData = lines.splice(lines.length - 1, 1)[0]
|
||||
|
||||
lines.forEach(this.push.bind(this))
|
||||
done()
|
||||
},
|
||||
_flush: function (done) {
|
||||
if (this._lastLineData) this.push(this._lastLineData)
|
||||
this._lastLineData = null
|
||||
done()
|
||||
}
|
||||
}
|
||||
|
||||
extend(Transform, Liner);
|
||||
|
||||
function extend(base, sub) {
|
||||
// Avoid instantiating the base class just to setup inheritance
|
||||
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
|
||||
// for a polyfill
|
||||
// Also, do a recursive merge of two prototypes, so we don't overwrite
|
||||
// the existing prototype, but still maintain the inheritance chain
|
||||
// Thanks to @ccnokes
|
||||
var origProto = sub.prototype;
|
||||
sub.prototype = Object.create(base.prototype);
|
||||
for (var key in origProto) {
|
||||
sub.prototype[key] = origProto[key];
|
||||
}
|
||||
// Remember the constructor property was set wrong, let's fix it
|
||||
sub.prototype.constructor = sub;
|
||||
// In ECMAScript5+ (all modern browsers), you can make the constructor property
|
||||
// non-enumerable if you define it like this instead
|
||||
Object.defineProperty(sub.prototype, 'constructor', {
|
||||
enumerable: false,
|
||||
value: sub
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = Liner;
|
||||
Reference in New Issue
Block a user