compress-brotli
Version:
Simple cross Node.js inteface for using brotli compression
46 lines (37 loc) • 1.14 kB
JavaScript
const { promisify } = require('util')
const JSONB = require('json-buffer')
const zlib = require('zlib')
const mergeOptions = require('./merge-options')
const compress = promisify(zlib.brotliCompress)
const decompress = promisify(zlib.brotliDecompress)
const identity = val => val
const createCompress = ({
enable = true,
serialize = JSONB.stringify,
deserialize = JSONB.parse,
compressOptions,
decompressOptions
} = {}) => {
if (!enable) {
return { serialize, deserialize, decompress: identity, compress: identity }
}
return {
serialize,
deserialize,
compress: async (data, options = {}) => {
if (data === undefined) return data
const serializedData = serialize(data)
return compress(serializedData, mergeOptions(compressOptions, options))
},
decompress: async (data, options = {}) => {
if (data === undefined) return data
return deserialize(
await decompress(data, mergeOptions(decompressOptions, options))
)
}
}
}
module.exports = createCompress
module.exports.stringify = JSONB.stringify
module.exports.parse = JSONB.parse