12345678910111213141516171819202122232425262728293031323334353637383940 |
- 'use strict';
- const {PassThrough: PassThroughStream} = require('stream');
- const zlib = require('zlib');
- const mimicResponse = require('mimic-response');
- const decompressResponse = response => {
- const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();
- if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
- return response;
- }
- const isBrotli = contentEncoding === 'br';
- if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {
- return response;
- }
- const decompress = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();
- const stream = new PassThroughStream();
- mimicResponse(response, stream);
- decompress.on('error', error => {
- // Ignore empty response
- if (error.code === 'Z_BUF_ERROR') {
- stream.end();
- return;
- }
- stream.emit('error', error);
- });
- response.pipe(decompress).pipe(stream);
- return stream;
- };
- module.exports = decompressResponse;
- // TODO: remove this in the next major version
- module.exports.default = decompressResponse;
|