diff --git a/src/config/config.js b/src/config/config.js index 6f430f97..5a0a675d 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -30,6 +30,8 @@ export default { encryption_cipher: enums.symmetric.aes256, /** @property {Integer} compression Default compression algorithm {@link module:enums.compression} */ compression: enums.compression.uncompressed, + /** @property {Integer} deflate_level Default zip/zlib compression level, between 1 and 9 */ + deflate_level: 6, /** * Use Authenticated Encryption with Additional Data (AEAD) protection for symmetric encryption. diff --git a/src/packet/compressed.js b/src/packet/compressed.js index 258c605f..a726a103 100644 --- a/src/packet/compressed.js +++ b/src/packet/compressed.js @@ -31,6 +31,7 @@ */ import pako from 'pako'; +import config from '../config'; import enums from '../enums.js'; import util from '../util.js'; import Bzip2 from '../compression/bzip2.build.js'; @@ -38,6 +39,12 @@ import Bzip2 from '../compression/bzip2.build.js'; const nodeZlib = util.getNodeZlib(); const Buffer = util.getNodeBuffer(); +function node_zlib(func, options = {}) { + return function (data) { + return func(data, options); + }; +} + function pako_zlib(constructor, options = {}) { return function(data) { const obj = new constructor(options); @@ -51,23 +58,23 @@ let decompress_fns; if (nodeZlib) { // Use Node native zlib for DEFLATE compression/decompression compress_fns = { // eslint-disable-next-line no-sync - zip: nodeZlib.deflateRawSync, + zip: node_zlib(nodeZlib.deflateRawSync, { level: config.deflate_level }), // eslint-disable-next-line no-sync - zlib: nodeZlib.deflateSync, + zlib: node_zlib(nodeZlib.deflateSync, { level: config.deflate_level }), bzip2: Bzip2.compressFile }; decompress_fns = { // eslint-disable-next-line no-sync - zip: nodeZlib.inflateRawSync, + zip: node_zlib(nodeZlib.inflateRawSync), // eslint-disable-next-line no-sync - zlib: nodeZlib.inflateSync, + zlib: node_zlib(nodeZlib.inflateSync), bzip2: Bzip2.decompressFile }; } else { // Use JS fallbacks compress_fns = { - zip: pako_zlib(pako.Deflate, { raw: true }), - zlib: pako_zlib(pako.Deflate), + zip: pako_zlib(pako.Deflate, { raw: true, level: config.deflate_level }), + zlib: pako_zlib(pako.Deflate, { level: config.deflate_level }), bzip2: Bzip2.compressFile };