Airbreaks-Low-Power/Programming/Javascript/node_modules/@serialport/parser-regex/lib/index.js
2023-12-19 18:30:36 -06:00

54 lines
1.3 KiB
JavaScript

const { Transform } = require('stream')
/**
* A transform stream that uses a regular expression to split the incoming text upon.
*
* To use the `Regex` parser provide a regular expression to split the incoming text upon. Data is emitted as string controllable by the `encoding` option (defaults to `utf8`).
* @extends Transform
* @example
const SerialPort = require('serialport')
const Regex = require('@serialport/parser-regex')
const port = new SerialPort('/dev/tty-usbserial1')
const parser = port.pipe(new Regex({ regex: /[\r\n]+/ }))
parser.on('data', console.log)
*/
class RegexParser extends Transform {
constructor(options) {
const opts = {
encoding: 'utf8',
...options,
}
if (opts.regex === undefined) {
throw new TypeError('"options.regex" must be a regular expression pattern or object')
}
if (!(opts.regex instanceof RegExp)) {
opts.regex = new RegExp(opts.regex)
}
super(opts)
this.regex = opts.regex
this.data = ''
}
_transform(chunk, encoding, cb) {
const data = this.data + chunk
const parts = data.split(this.regex)
this.data = parts.pop()
parts.forEach(part => {
this.push(part)
})
cb()
}
_flush(cb) {
this.push(this.data)
this.data = ''
cb()
}
}
module.exports = RegexParser