{"_id":"line-reader","_rev":"37-19381e8282f461b9191bc15064bf2757","name":"line-reader","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"line-reader","version":"0.1.0","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.1.0","dist":{"shasum":"e1287491bd5072e61adc8a8c02d26a4ca0d2ac3d","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.1.0.tgz","integrity":"sha512-MUmgi46mGCxMZMY9k6Z75CuZ66g/+2xPM0Mf2mOHvSMkXJ7YVhzqGFpE8wAkHQxbTrNIz680bTVZCTgzZSXk7g==","signatures":[{"sig":"MEUCIEFEG2d9DCB8BiahmhysVpoSiMCyILi198ytDY9bKuC9AiEAhTzwBVSdURvjXla2XIIZbOh+L3GuPd5xEihwgu7+kSo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"files":[""],"engines":{"node":"0.4.x"},"repository":{"url":"http://github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"0.2.18","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.0","_defaultsLoaded":true,"_engineSupported":true},"0.1.1":{"name":"line-reader","version":"0.1.1","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.1.1","dist":{"shasum":"a24a90a4adc3eb51cd1e91cbb379f2a980c0e452","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.1.1.tgz","integrity":"sha512-tuBvPhnAqST/jJ/FTqR198dUY4cU+ISR6y1fn0dg/wp2jVEvM8Ax5TsW2v3UvAeTr1DJ0x4BkYMxGmSTFeNsQQ==","signatures":[{"sig":"MEYCIQCanWMyu9Ji6T4pZ1NF3bK5CP3S8DOUDL9RPspgd7C3qAIhAO7EY4rGCsyPAEj/ey+s6LhHHZBGVPB95Jr9wXckUIIj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"files":[""],"engines":{"node":"0.4.x"},"repository":{"url":"http://github.com/nickewing/line-reader","type":"git"},"_npmVersion":"0.2.18","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.0","_defaultsLoaded":true,"_engineSupported":true},"0.1.2":{"name":"line-reader","version":"0.1.2","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.1.2","url":"https://github.com/nickewing/line-reader","dist":{"shasum":"ae146e39bd6c0f72c3d2266e1e555188939ec36c","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.1.2.tgz","integrity":"sha512-bNwNOOi5dnEPfKob1nL61IpCE85mnfzH0VbrxWdQYVeL75/D24Fu4Kn7JYYJN5VbCfmkox6H02nvXPUIA+X5YA==","signatures":[{"sig":"MEUCIQDM/qk0CgUit4iHCH39X2jVskfO6+T9wsDfGhpRFypm2gIgdCEDfwtj9ldt3SFvG4CJ/ZCgEE5rRs5mUDYwXCqHEpI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","files":[""],"engines":{"node":"0.4.x"},"repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"0.2.18","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.0","_defaultsLoaded":true,"_engineSupported":true},"0.1.3":{"name":"line-reader","version":"0.1.3","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.1.3","url":"https://github.com/nickewing/line-reader","dist":{"shasum":"6155e9d8a8e24116b1dd111f5ec06f5576e899ff","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.1.3.tgz","integrity":"sha512-KMfGEAChboM3EbtZrNw+cA/ZKUEwcBCjNXwBayC0adEju06rr1dROSdzuNE3KYjscdLorzRwBtTDDnxvfV2YaA==","signatures":[{"sig":"MEQCIQC31ZSmMu5Bh9EuSt32QCcaVZRoXo+EAX5whoAZVg64igIfO4yRbXmiPh0UcUMG+bz6GoNfB8qEAC+4amQvlAZCxw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","files":[""],"engines":{"node":"0.4.x"},"repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"0.2.18","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.0","_defaultsLoaded":true,"_engineSupported":true},"0.2.0":{"name":"line-reader","version":"0.2.0","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.2.0","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"7e951bae2fa96d344ec8188eb886b491e25c330a","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.2.0.tgz","integrity":"sha512-Tte3WrA6K/z3P44ODc7pdlKeDL5rdaaBCTuwmIQvR79haHKNr2rjdTPS2hQlwOleiem5vKCwG00vs8OKMewijQ==","signatures":[{"sig":"MEQCIAY4UFcUmmT0yFElDxlDrnE+Bzk0XZd8HmvuQj1fs6N5AiAHXb4veKWZIdntjLWfHmupitjFuBz+I/0KzWrv7emWow==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","engines":{"node":"0.4.x"},"repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"}},"0.2.1":{"name":"line-reader","version":"0.2.1","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.2.1","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"9845d8ca0d117a7b37bd43fc2f6a332d080ab705","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.2.1.tgz","integrity":"sha512-gtrMVWSzAriZCaFTuGd+pEsQZDomF+vJdfVCXMDoh7NmgMtmPF0QyHaeZfAff3BQSXJboxpWArMqN53bGSXsKg==","signatures":[{"sig":"MEQCICyglly+CSy5GBlYnKoFhR1kIjO9iWhLFhq8yq6IGvilAiATto53FOR0QCILEU20bJiWYHsiSDQFzoQQRzbF0aMQbg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"}},"0.2.2":{"name":"line-reader","version":"0.2.2","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.2.2","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"80ed19e5340e099ac747f92984775cf3ea9ac87e","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.2.2.tgz","integrity":"sha512-PH1RqOR1k9LbK4aBYM3g6pDjTROi3u/WfWjTB98eHno3hUwivNn5DlsnFDUkRZUaL/N63KmbWE+eyz+txw85FA==","signatures":[{"sig":"MEUCIQDSYc3NRImXqIZgAwr+OdKeqDvG430ibkDaGGFlL9OS2QIgE+6HOLeuJKp0D3Hn0Q15JOUdxkTd8CSLKr0co8T4r4k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"}},"0.2.3":{"name":"line-reader","version":"0.2.3","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.2.3","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"1810e624061453c245e02692105c29a281565d3f","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.2.3.tgz","integrity":"sha512-S9xyRlOFfQBzVzxLFY3ow+/QaSLchi2Kamby/AmrH02Nn+nUjrWlwyIdJM1l0f5iJcgFY8qRJEKlZzJMLv4MFA==","signatures":[{"sig":"MEUCIBFC201WfWaIqV+95iAIrICLoAekBnUT/LrmYIlNSlBbAiEA/lE6zZhac/Kk7T5fUkz/KDii4tCDYkfTpTUKxgkdaR8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"}},"0.2.4":{"name":"line-reader","version":"0.2.4","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.2.4","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"homepage":"https://github.com/nickewing/line-reader","bugs":{"url":"https://github.com/nickewing/line-reader/issues"},"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"c4392b587dea38580c9678570e6e8e49fce52622","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.2.4.tgz","integrity":"sha512-342xzyZZS9uTiKwHJcMacopVl/WjrMMCZS1Qg4Uhl/WBknWRrGFdKOIS1Kec6SaiTcZMtmuxWvvIbPXj/+FMjA==","signatures":[{"sig":"MEYCIQCrP7ida1g+fA8kDoZpGsPA+WUOyZ7RsGjWJvpuBD7ZDgIhANKwGP4L1usPSBgx7UJ+HhcoGThOmwEDimycxBMiZY4N","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","_from":"./","_shasum":"c4392b587dea38580c9678570e6e8e49fce52622","gitHead":"c6c4fa96e8f17adbd12f205baae040e126d7fd30","scripts":{},"_npmUser":{"name":"nickewing","email":"nick@nickewing.net"},"repository":{"url":"https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"1.5.0-alpha-3","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"}},"0.3.0":{"name":"line-reader","version":"0.3.0","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"_id":"line-reader@0.3.0","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"homepage":"https://github.com/nickewing/line-reader#readme","bugs":{"url":"https://github.com/nickewing/line-reader/issues"},"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"d973cf15a51c2c018e0312d9e55089d90c8a64e2","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.3.0.tgz","integrity":"sha512-tuYIu4rSw6bR0erYxFy8nUsIWP7L7WnjnEhm7BR3MxYxRFDHzJS1U8Y2uv6f91dkrr25meMlZ4Na2XtPOOWJxA==","signatures":[{"sig":"MEUCIAikdl7ABBHPl8/6SBcPx4HbT5/IAMBzmdIayBhYLq1yAiEA6D4sPaS6FXoE2t6gLaociaxGFqEqhBfAwQPUp9A9jlA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","_from":".","_shasum":"d973cf15a51c2c018e0312d9e55089d90c8a64e2","gitHead":"3a5197a68e6b88bb9df7c75d51531542b8394a14","scripts":{},"_npmUser":{"name":"nickewing","email":"nick@nickewing.net"},"repository":{"url":"git+https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"2.14.2","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"},"_nodeVersion":"0.12.7"},"0.3.1":{"name":"line-reader","version":"0.3.1","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"license":"MIT","_id":"line-reader@0.3.1","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"homepage":"https://github.com/nickewing/line-reader#readme","bugs":{"url":"https://github.com/nickewing/line-reader/issues"},"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"2158c06b1ab3ed28238535b97aaeba9f17949bbb","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.3.1.tgz","integrity":"sha512-LKJFUlyMHwXI58F6OsCE764y4uF5WyVOmDOrDix//GVcHf+RGs0hZiLHRF+SuX/XjVMo0A3dglFe3wvMoImNbw==","signatures":[{"sig":"MEQCIBvUjZbx3TDYa7MEQOSrFHox3RATmnqcC3Ic6Kd4ZPsGAiBq4X7cScG+QRQDUV2c0BTCQE9uYqsz6kdR15fEpGArSw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","_from":".","_shasum":"2158c06b1ab3ed28238535b97aaeba9f17949bbb","gitHead":"f3ec9817a673a18d2a4fee162023613e94c952f2","scripts":{"test":"mocha test/line_reader.js"},"_npmUser":{"name":"nickewing","email":"nick@nickewing.net"},"repository":{"url":"git+https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"3.6.0","description":"Asynchronous line-by-line file reader","directories":{"lib":"./lib"},"_nodeVersion":"5.6.0","devDependencies":{"mocha":"^2.4.5"},"_npmOperationalInternal":{"tmp":"tmp/line-reader-0.3.1.tgz_1458087549700_0.1651789399329573","host":"packages-12-west.internal.npmjs.com"}},"0.4.0":{"name":"line-reader","version":"0.4.0","keywords":["file","line","reader","scanner"],"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"license":"MIT","_id":"line-reader@0.4.0","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"homepage":"https://github.com/nickewing/line-reader#readme","bugs":{"url":"https://github.com/nickewing/line-reader/issues"},"url":"https://github.com/nickewing/line-reader","dist":{"shasum":"17e44818da0ac335675ba300954f94ef670e66fd","tarball":"https://registry.npmjs.org/line-reader/-/line-reader-0.4.0.tgz","integrity":"sha512-AYJ8g+eE7v+Ba4s/cuYqzuNulH/WbjdKQ55fvx8fNVn8WQzTpioY6vI1MoxTuMgcHYX3VlmZWbVvnkIqkyJbCA==","signatures":[{"sig":"MEUCIQCcbtVOQPSW3ka4HIbARhIsGDg0kpE07btbTNOQyTGtFgIgcC+tlUOeDeDgX+yQCK1zoKci55n7xZy8VtTOJqQXrmc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/line_reader","_from":".","_shasum":"17e44818da0ac335675ba300954f94ef670e66fd","gitHead":"bd38cc8c5483e4b6799c01bc9b88819fda1461c7","scripts":{"test":"mocha test/line_reader.js"},"_npmUser":{"name":"nickewing","email":"nick@nickewing.net"},"repository":{"url":"git+https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"_npmVersion":"3.6.0","description":"Asynchronous, buffered, line-by-line file/stream reader","directories":{"lib":"./lib"},"_nodeVersion":"5.6.0","devDependencies":{"mocha":"^2.4.5"},"_npmOperationalInternal":{"tmp":"tmp/line-reader-0.4.0.tgz_1458196332410_0.8783941068686545","host":"packages-12-west.internal.npmjs.com"}}},"time":{"created":"2011-03-16T07:41:18.922Z","modified":"2026-06-04T13:18:29.795Z","0.1.0":"2011-03-16T07:41:19.519Z","0.1.1":"2011-03-16T07:42:34.139Z","0.1.2":"2011-03-16T07:57:08.657Z","0.1.3":"2011-03-20T02:20:28.565Z","0.2.0":"2012-07-13T08:10:26.586Z","0.2.1":"2012-07-13T08:12:57.870Z","0.2.2":"2012-08-19T02:26:04.103Z","0.2.3":"2012-09-05T05:52:11.455Z","0.2.4":"2014-07-18T19:52:32.832Z","0.3.0":"2015-10-13T07:41:52.647Z","0.3.1":"2016-03-16T00:19:10.135Z","0.4.0":"2016-03-17T06:32:12.897Z"},"bugs":{"url":"https://github.com/nickewing/line-reader/issues"},"author":{"name":"Nick Ewing","email":"nick@nickewing.net"},"license":"MIT","homepage":"https://github.com/nickewing/line-reader#readme","keywords":["file","line","reader","scanner"],"repository":{"url":"git+https://nickewing@github.com/nickewing/line-reader.git","type":"git"},"description":"Asynchronous, buffered, line-by-line file/stream reader","maintainers":[{"name":"nickewing","email":"nick@nickewing.net"}],"readme":"Line Reader\n===========\n\nAsynchronous, buffered, line-by-line file/stream reader with support for\nuser-defined line separators.\n\nInstall\n-------\n\n`npm install line-reader`\n\nUsage\n-----\n\nThe `eachLine` function reads each line of the given file.  Upon each new line,\nthe given callback function is called with two parameters: the line read and a\nboolean value specifying whether the line read was the last line of the file.\nIf the callback returns `false`, reading will stop and the file will be closed.\n\n    var lineReader = require('line-reader');\n\n    lineReader.eachLine('file.txt', function(line, last) {\n      console.log(line);\n\n      if (/* done */) {\n        return false; // stop reading\n      }\n    });\n\n`eachLine` can also be used in an asynchronous manner by providing a third\ncallback parameter like so:\n\n    var lineReader = require('line-reader');\n\n    lineReader.eachLine('file.txt', function(line, last, cb) {\n      console.log(line);\n\n      if (/* done */) {\n        cb(false); // stop reading\n      } else {\n        cb();\n      }\n    });\n\nYou can provide an optional second node-style callback that will be called with\n`(err)` on failure or `()` when finished (even if you manually terminate iteration\nby returning `false` from the iteratee):\n\n    var lineReader = require('line-reader');\n\n    // read all lines:\n    lineReader.eachLine('file.txt', function(line) {\n      console.log(line);\n    }).then(function (err) {\n      if (err) throw err;\n      console.log(\"I'm done!!\");\n    });\n\nFor more granular control, `open`, `hasNextLine`, and `nextLine` maybe be used\nto iterate a file (but you must `close` it yourself):\n\n    // or read line by line:\n    lineReader.open('file.txt', function(err, reader) {\n      if (err) throw err;\n      if (reader.hasNextLine()) {\n        reader.nextLine(function(err, line) {\n          try {\n            if (err) throw err;\n            console.log(line);\n          } finally {\n            reader.close(function(err) {\n              if (err) throw err;          \n            });\n          }\n        });\n      }\n      else {\n        reader.close(function(err) {\n          if (err) throw err;          \n        });\n      }\n    });\n\nYou may provide additional options in a hash before the callbacks to `eachLine` or `open`:\n* `separator`   - a `string` or `RegExp` separator (defaults to `/\\r\\n?|\\n/`)\n* `encoding`    - file encoding (defaults to `'utf8'`)\n* `bufferSize`  - amount of bytes to buffer (defaults to 1024)\n\nFor example:\n\n    lineReader.eachLine('file.txt', {separator: ';', encoding: 'utf8'}, function(line, last, cb) {\n      console.log(line);\n    });\n    lineReader.open('file.txt', {bufferSize: 1024}, function(err, reader) {\n      ...\n    }); \n\nStreams\n-------\n\nBoth `eachLine` and `open` support passing either a file name or a read stream:\n\n    // reading from stdin\n    lineReader.eachLine(process.stdin, function(line) {});\n\n    // reading with file position boundaries\n    var readStream = fs.createReadStream('test.log', { start: 0, end: 10000 });\n    lineReader.eachLine(readStream, function(line) {});\n\nNote however that if you're reading user input from stdin then the\n[readline module](https://nodejs.org/api/readline.html) is probably a better choice.\n\nPromises\n--------\n\n`eachLine` and `open` are compatible with `promisify` from [bluebird](https://github.com/petkaantonov/bluebird/blob/master/API.md#promisepromisifyfunction-nodefunction--dynamic-receiver---function):\n\n    var lineReader = require('line-reader'),\n        Promise = require('bluebird');\n\n    var eachLine = Promise.promisify(lineReader.eachLine);\n    eachLine('file.txt', function(line) {\n      console.log(line);\n    }).then(function() {\n      console.log('done');\n    }).catch(function(err) {\n      console.error(err);\n    });\n\nIf you're using a promise library that doesn't have a promisify function, here's how you can do it:\n\n    var lineReader = require('line-reader'),\n        Promise = require(...);\n\n    var eachLine = function(filename, options, iteratee) {\n      return new Promise(function(resolve, reject) {\n        lineReader.eachLine(filename, options, iteratee, function(err) {\n          if (err) {\n            reject(err);\n          } else {\n            resolve();\n          }\n        });\n      });\n    }\n    eachLine('file.txt', function(line) {\n      console.log(line);\n    }).then(function() {\n      console.log('done');\n    }).catch(function(err) {\n      console.error(err);\n    });\n\nContributors\n------------\n\n* Nick Ewing\n* Andy Edwards (jedwards1211)\n* Jameson Little (beatgammit)\n* Masum (masumsoft)\n* Matthew Caruana Galizia (mattcg)\n* Ricardo Bin (ricardohbin)\n\nPaul Em has also written a reverse-version of this gem to read files from bottom to top: [reverse-line-reader](https://github.com/paul-em/reverse-line-reader).\n\nCopyright 2011 Nick Ewing.\n","readmeFilename":"README.md","users":{"jeltok":true,"auther2":true,"ferrari":true,"shavyg2":true,"tinyhill":true,"dennisgnl":true,"f124275809":true,"saintedlama":true,"salarsayyad":true,"mingzhangyang":true}}