| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- 'use strict';
 
- const fs = require('fs');
 
- const stream = require('stream');
 
- const zlib = require('zlib');
 
- const duplexer = require('duplexer');
 
- const pify = require('pify');
 
- const getOptions = options => Object.assign({level: 9}, options);
 
- module.exports = (input, options) => {
 
- 	if (!input) {
 
- 		return Promise.resolve(0);
 
- 	}
 
- 	return pify(zlib.gzip)(input, getOptions(options)).then(data => data.length).catch(_ => 0);
 
- };
 
- module.exports.sync = (input, options) => zlib.gzipSync(input, getOptions(options)).length;
 
- module.exports.stream = options => {
 
- 	const input = new stream.PassThrough();
 
- 	const output = new stream.PassThrough();
 
- 	const wrapper = duplexer(input, output);
 
- 	let gzipSize = 0;
 
- 	const gzip = zlib.createGzip(getOptions(options))
 
- 		.on('data', buf => {
 
- 			gzipSize += buf.length;
 
- 		})
 
- 		.on('error', () => {
 
- 			wrapper.gzipSize = 0;
 
- 		})
 
- 		.on('end', () => {
 
- 			wrapper.gzipSize = gzipSize;
 
- 			wrapper.emit('gzip-size', gzipSize);
 
- 			output.end();
 
- 		});
 
- 	input.pipe(gzip);
 
- 	input.pipe(output, {end: false});
 
- 	return wrapper;
 
- };
 
- module.exports.file = (path, options) => {
 
- 	return new Promise((resolve, reject) => {
 
- 		const stream = fs.createReadStream(path);
 
- 		stream.on('error', reject);
 
- 		const gzipStream = stream.pipe(module.exports.stream(options));
 
- 		gzipStream.on('error', reject);
 
- 		gzipStream.on('gzip-size', resolve);
 
- 	});
 
- };
 
- module.exports.fileSync = (path, options) => module.exports.sync(fs.readFileSync(path), options);
 
 
  |