blob: 44c4ae0246dca1a190e1f5cfdb0e09c2afa866e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
var util = require('util');
var Transform = require('stream').Transform;
util.inherits(SliceStream, Transform);
function SliceStream(start, end) {
if (!(this instanceof SliceStream)) {
return new SliceStream();
}
Transform.call(this);
this._start = start || 0;
this._end = end || Infinity;
this._offset = 0;
this._state = 0;
this._emitUp = false;
this._emitDown = false;
}
SliceStream.prototype._transform = function(chunk, encoding, done) {
this._offset += chunk.length;
if (!this._emitUp && this._offset >= this._start) {
this._emitUp = true;
var start = chunk.length - (this._offset - this._start);
if(this._offset > this._end)
{
var end = chunk.length - (this._offset - this._end);
this._emitDown = true;
this.push(chunk.slice(start, end));
}
else
{
this.push(chunk.slice(start, chunk.length));
}
return done();
}
if (this._emitUp && !this._emitDown) {
if (this._offset >= this._end) {
this._emitDown = true;
this.push(chunk.slice(0, chunk.length - (this._offset - this._end)));
} else {
this.push(chunk);
}
return done();
}
return done();
}
exports.slice = function(start, end) {
return new SliceStream(start, end);
}
|