123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /**
- * Expose `read`.
- */
- module.exports = read;
- /**
- * Read from a readable `stream`.
- *
- * @param {Stream} stream
- * @return {Function}
- */
- function read(stream) {
- return typeof stream.read == 'function'
- ? read2(stream)
- : read1(stream);
- }
- /**
- * Read from a readable streams1 `stream`.
- *
- * @param {Stream} stream
- * @return {Function}
- */
- function* read1(stream) {
- var err;
- var data;
- stream.on('data', ondata);
- stream.on('error', onerror);
- stream.resume();
- function ondata(_data) {
- stream.pause();
- data = _data;
- }
- function onerror(_err) {
- err = _err;
- }
- yield function (done) {
- if (err || data || !stream.readable) return done();
- stream.on('data', onevent);
- stream.on('end', onevent);
- stream.on('error', onevent);
- function onevent() {
- stream.removeListener('data', onevent);
- stream.removeListener('end', onevent);
- stream.removeListener('error', onevent);
- done();
- }
- };
- stream.removeListener('data', ondata);
- stream.removeListener('error', onerror);
- if (err) throw err;
- return data;
- }
- /**
- * Read from a readable streams2 `stream`.
- *
- * @param {Stream} stream
- * @return {Function}
- */
- function read2(stream) {
- return function(done) {
- if (!stream.readable) {
- return done();
- }
- function onreadable() {
- cleanup();
- check();
- }
- function onend() {
- cleanup();
- done(null, null);
- }
- function onerror(err) {
- cleanup();
- done(err);
- }
- function listen() {
- stream.on('readable', onreadable);
- stream.on('end', onend);
- stream.on('error', onerror);
- }
- function cleanup() {
- stream.removeListener('readable', onreadable);
- stream.removeListener('end', onend);
- stream.removeListener('error', onerror);
- }
- function check() {
- var buf = stream.read();
- if (buf) {
- done(null, buf);
- } else {
- listen();
- }
- }
- check();
- };
- }
|