"use strict"; // FIXME: Clearly document that this only splits lines in *strings*, not eg. Buffers (and make a separate split-lines-buffer package for that, as it requires a very different implementation) const lastItem = require("last-item"); const pipe = require("@promistream/pipe"); const map = require("@promistream/map"); const buffer = require("@promistream/buffer"); const lastWill = require("@promistream/last-will"); const { validateOptions, validateValue } = require("@validatem/core"); const defaultTo = require("@validatem/default-to"); const isBoolean = require("@validatem/is-boolean"); const isString = require("@validatem/is-string"); module.exports = function splitLines(_options) { let options = validateOptions(arguments, [ defaultTo({}), { stripCarriageReturn: [ defaultTo(true), isBoolean ] } ]); let stringBuffer = ""; return pipe([ map((value) => { validateValue(value, [ isString ]); // FIXME: Turn this into a clearer error stringBuffer += value; let lines = stringBuffer.split("\n"); if (lines.length > 1) { let completedLines = lines.slice(0, -1); stringBuffer = lastItem(lines); if (options.stripCarriageReturn) { return completedLines.map((line) => { return line.replace(/\r+$/g, ""); }); } else { return completedLines; } } else { return []; } }), buffer(), lastWill(() => { return stringBuffer; }) ]); };