123456789101112131415161718192021222324252627282930313233343536 |
- 'use strict';
- const PassThrough = require('stream').PassThrough;
- const zlib = require('zlib');
- module.exports = res => {
- // TODO: use Array#includes when targeting Node.js 6
- if (['gzip', 'deflate'].indexOf(res.headers['content-encoding']) === -1) {
- return res;
- }
- const unzip = zlib.createUnzip();
- const stream = new PassThrough();
- stream.httpVersion = res.httpVersion;
- stream.headers = res.headers;
- stream.rawHeaders = res.rawHeaders;
- stream.trailers = res.trailers;
- stream.rawTrailers = res.rawTrailers;
- stream.setTimeout = res.setTimeout.bind(res);
- stream.statusCode = res.statusCode;
- stream.statusMessage = res.statusMessage;
- stream.socket = res.socket;
- unzip.on('error', err => {
- if (err.code === 'Z_BUF_ERROR') {
- stream.end();
- return;
- }
- stream.emit('error', err);
- });
- res.pipe(unzip).pipe(stream);
- return stream;
- };
|