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);
|