123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 'use strict';
- var util = require('util');
- var Transform = require('stream').Transform;
-
- function ctor(options, transform) {
- util.inherits(FirstChunk, Transform);
-
- if (typeof options === 'function') {
- transform = options;
- options = {};
- }
-
- if (typeof transform !== 'function') {
- throw new Error('transform function required');
- }
-
- function FirstChunk(options2) {
- if (!(this instanceof FirstChunk)) {
- return new FirstChunk(options2);
- }
-
- Transform.call(this, options2);
-
- this._firstChunk = true;
- this._transformCalled = false;
- this._minSize = options.minSize;
- }
-
- FirstChunk.prototype._transform = function (chunk, enc, cb) {
- this._enc = enc;
-
- if (this._firstChunk) {
- this._firstChunk = false;
-
- if (this._minSize == null) {
- transform.call(this, chunk, enc, cb);
- this._transformCalled = true;
- return;
- }
-
- this._buffer = chunk;
- cb();
- return;
- }
-
- if (this._minSize == null) {
- this.push(chunk);
- cb();
- return;
- }
-
- if (this._buffer.length < this._minSize) {
- this._buffer = Buffer.concat([this._buffer, chunk]);
- cb();
- return;
- }
-
- if (this._buffer.length >= this._minSize) {
- transform.call(this, this._buffer.slice(), enc, function () {
- this.push(chunk);
- cb();
- }.bind(this));
- this._transformCalled = true;
- this._buffer = false;
- return;
- }
-
- this.push(chunk);
- cb();
- };
-
- FirstChunk.prototype._flush = function (cb) {
- if (!this._buffer) {
- cb();
- return;
- }
-
- if (this._transformCalled) {
- this.push(this._buffer);
- cb();
- } else {
- transform.call(this, this._buffer.slice(), this._enc, cb);
- }
- };
-
- return FirstChunk;
- }
-
- module.exports = function () {
- return ctor.apply(ctor, arguments)();
- };
-
- module.exports.ctor = ctor;
|