diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/stream-slice/index.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/stream-slice/index.js')
| -rw-r--r-- | node_modules/stream-slice/index.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/node_modules/stream-slice/index.js b/node_modules/stream-slice/index.js new file mode 100644 index 00000000..44c4ae02 --- /dev/null +++ b/node_modules/stream-slice/index.js @@ -0,0 +1,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); +} |
