UNPKG

1.14 kBJavaScriptView Raw
1(function() {
2 var stream;
3
4 stream = require('stream');
5
6 exports.take = function(base, n, done, dstat) {
7 var ended, fin, rem, wrap, wrapread;
8 rem = n;
9 wrap = stream.Readable();
10 ended = false;
11 if (done != null) {
12 wrap.once('end', done);
13 }
14 base.once('end', function() {
15 ended = true;
16 return fin();
17 });
18 fin = function() {
19 wrap.push(null);
20 return base.removeListener('readable', wrapread);
21 };
22 wrap._read = function(size) {
23 var data;
24 if (ended || rem <= 0) {
25 return;
26 }
27 if (size != null) {
28 size = Math.min(size, rem);
29 } else {
30 size = rem;
31 }
32 data = base.read(size);
33 if (data == null) {
34 data = base.read();
35 }
36 if (data != null) {
37 rem -= data.length;
38 wrap.push(data);
39 if (typeof dstat === "function") {
40 dstat(n - rem, n);
41 }
42 if (rem <= 0) {
43 return fin();
44 }
45 }
46 };
47 wrapread = function() {
48 return wrap._read();
49 };
50 base.on('readable', wrapread);
51 return wrap;
52 };
53
54}).call(this);