var brotli = require('./build/encode'); /** * Compresses the given buffer * The second parameter is optional and specifies whether the buffer is * text or binary data (the default is binary). * Returns null on error */ module.exports = function(buffer, opts) { // default to binary data var quality = 11; var mode = 0; var lgwin = 22; if (typeof opts === 'boolean') { mode = opts ? 0 : 1; } else if (typeof opts === 'object') { quality = opts.quality || 11; mode = opts.mode || 0; lgwin = opts.lgwin || 22; } // allocate input buffer and copy data to it var buf = brotli._malloc(buffer.length); brotli.HEAPU8.set(buffer, buf); // allocate output buffer (same size + some padding to be sure it fits), and encode var outBuf = brotli._malloc(buffer.length + 1024); var encodedSize = brotli._encode(quality, lgwin, mode, buffer.length, buf, buffer.length, outBuf); var outBuffer = null; if (encodedSize !== -1) { // allocate and copy data to an output buffer outBuffer = new Uint8Array(encodedSize); outBuffer.set(brotli.HEAPU8.subarray(outBuf, outBuf + encodedSize)); } // free malloc'd buffers brotli._free(buf); brotli._free(outBuf); return outBuffer; };