Spaces:
Paused
Paused
| var spawn = require('child_process').spawn, | |
| util = require('util'), | |
| ResponseStream = require('../../lib').ResponseStream; | |
| /** | |
| * Accepts a writable stream, i.e. fs.WriteStream, and returns a StreamStack | |
| * whose 'write()' calls are transparently sent to a 'gzip' process before | |
| * being written to the target stream. | |
| */ | |
| var GzipEncode = module.exports = function GzipEncode(options) { | |
| ResponseStream.call(this, options); | |
| if (compression) { | |
| process.assert(compression >= 1 && compression <= 9); | |
| this.compression = compression; | |
| } | |
| this.on('pipe', this.encode); | |
| } | |
| util.inherits(GzipEncode, ResponseStream); | |
| GzipEncode.prototype.encode = function (source) { | |
| this.source = source; | |
| }; | |
| GzipEncode.prototype.pipe = function (dest) { | |
| if (!this.source) { | |
| throw new Error('GzipEncode is only pipeable once it has been piped to'); | |
| } | |
| this.encoder = spawn('gzip', ['-'+this.compression]); | |
| this.encoder.stdout.pipe(dest); | |
| this.encoder.stdin.pipe(this.source); | |
| }; | |
| inherits(GzipEncoderStack, StreamStack); | |
| exports.GzipEncoderStack = GzipEncoderStack; | |
| GzipEncoderStack.prototype.compression = 6; |