'use strict'; const stream = require('stream'); const Transform = stream.Transform; /** * Ensures that only sequences are used for linebreaks * * @param {Object} options Stream options */ class LeWindows extends Transform { constructor(options) { super(options); // init Transform this.options = options || {}; this.lastByte = false; } /** * Escapes dots */ _transform(chunk, encoding, done) { let buf; let lastPos = 0; for (let i = 0, len = chunk.length; i < len; i++) { if (chunk[i] === 0x0a) { // \n if ((i && chunk[i - 1] !== 0x0d) || (!i && this.lastByte !== 0x0d)) { if (i > lastPos) { buf = chunk.slice(lastPos, i); this.push(buf); } this.push(Buffer.from('\r\n')); lastPos = i + 1; } } } if (lastPos && lastPos < chunk.length) { buf = chunk.slice(lastPos); this.push(buf); } else if (!lastPos) { this.push(chunk); } this.lastByte = chunk[chunk.length - 1]; done(); } } module.exports = LeWindows;