UNPKG

line-input-stream

Version:

Convert a Node.JS Readable Stream into a Line Buffered Input Stream

79 lines (58 loc) 2.39 kB
node-line-input-stream ====================== Convert a Node.JS Readable Stream into a Line Buffered Input Stream Install --- ``` npm install line-input-stream ``` Usage --- Like [Readable Stream](http://nodejs.org/api/stream.html#stream_readable_stream) with a `line` event. ```javascript var LineInputStream = require('line-input-stream'), fs = require('fs'); var stream = LineInputStream(fs.createReadStream("foo.txt", { flags: "r" })); stream.setEncoding("utf8"); stream.setDelimiter("\n"); // optional string, defaults to "\n" stream.on("error", function(err) { console.log(err); }); stream.on("data", function(chunk) { // You don't need to use this event }); stream.on("line", function(line) { // Sends you lines from the stream delimited by delimiter }); stream.on("end", function() { // No more data, all line events emitted before this event }); stream.on("close", function() { // Same as ReadableStream's close event }); if(stream.readable) { console.log("stream is readable"); } // Also available: pause(), resume(), destroy(), pipe() ``` You can also attach listeners to any event specific to the underlying stream, ie, you can listen to the `open` event for streams created by [`fs.createReadStream()`](http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options) or the `connect` event for [Net](http://nodejs.org/api/net.html) streams. A side effect of this is that you can add a listener for any junk string and `LineInputStream` will pretend that it worked. The event listener may never be called though. Caveats & Notes --- - Calling `pause()` might not stop `line` events from firing immediately. It will stop reading of data from the underlying stream, but any data that has already been read will still be split into lines and a `line` event will be fired for each of them. - The delimiter is not included in the line passed to the `line` handler - Even though this is called `line-input-stream`, you can delimit by anything, so for example, setting delimiter to `"\n\n"` will read by paragraph (sort of). - You can set the delimiter to a regular expression, which let's you do cool things like drop multiple blank lines: `/[\r\n]+/` - All methods return `this`, so can be chained Copyright --- Philip Tellis [@bluesmoon](https://twitter.com/bluesmoon) <philip@lognormal.com> License --- (Apache License)[LICENSE.md]