Sha256: 682e0812a9f4f7e4cee568a94f3b51ba0d9e5aec3fb0ec3042d9d5444cf892cf

Contents?: true

Size: 1.29 KB

Versions: 33

Compression:

Stored size: 1.29 KB

Contents

'use strict';
const {Transform, PassThrough} = require('stream');
const zlib = require('zlib');
const mimicResponse = require('mimic-response');

module.exports = response => {
	const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();

	if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
		return response;
	}

	// TODO: Remove this when targeting Node.js 12.
	const isBrotli = contentEncoding === 'br';
	if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {
		response.destroy(new Error('Brotli is not supported on Node.js < 12'));
		return response;
	}

	let isEmpty = true;

	const checker = new Transform({
		transform(data, _encoding, callback) {
			isEmpty = false;

			callback(null, data);
		},

		flush(callback) {
			callback();
		}
	});

	const finalStream = new PassThrough({
		autoDestroy: false,
		destroy(error, callback) {
			response.destroy();

			callback(error);
		}
	});

	const decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();

	decompressStream.once('error', error => {
		if (isEmpty && !response.readable) {
			finalStream.end();
			return;
		}

		finalStream.destroy(error);
	});

	mimicResponse(response, finalStream);
	response.pipe(checker).pipe(decompressStream).pipe(finalStream);

	return finalStream;
};

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
immosquare-cleaner-0.1.60 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.59 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.58 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.57 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.56 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.55 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.54 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.53 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.52 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.51 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.50 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.49 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.48 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.47 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.46 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.45 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.44 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.43 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.42 node_modules/decompress-response/index.js
immosquare-cleaner-0.1.41 node_modules/decompress-response/index.js