30 lines
		
	
	
		
			628 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			628 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| const PassThrough = require('stream').PassThrough;
 | |
| const zlib = require('zlib');
 | |
| const mimicResponse = require('mimic-response');
 | |
| 
 | |
| module.exports = response => {
 | |
| 	// TODO: Use Array#includes when targeting Node.js 6
 | |
| 	if (['gzip', 'deflate'].indexOf(response.headers['content-encoding']) === -1) {
 | |
| 		return response;
 | |
| 	}
 | |
| 
 | |
| 	const unzip = zlib.createUnzip();
 | |
| 	const stream = new PassThrough();
 | |
| 
 | |
| 	mimicResponse(response, stream);
 | |
| 
 | |
| 	unzip.on('error', err => {
 | |
| 		if (err.code === 'Z_BUF_ERROR') {
 | |
| 			stream.end();
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		stream.emit('error', err);
 | |
| 	});
 | |
| 
 | |
| 	response.pipe(unzip).pipe(stream);
 | |
| 
 | |
| 	return stream;
 | |
| };
 |