( options: OpCompressesRequestOptions, dataToBeCompressed: Uint8Array )
| 76 | |
| 77 | // Facilitate compressing a message using an agreed compressor |
| 78 | export async function compress( |
| 79 | options: OpCompressesRequestOptions, |
| 80 | dataToBeCompressed: Uint8Array |
| 81 | ): Promise<Uint8Array> { |
| 82 | const zlibOptions = {} as zlib.ZlibOptions; |
| 83 | switch (options.agreedCompressor) { |
| 84 | case 'snappy': { |
| 85 | Snappy ??= loadSnappy(); |
| 86 | return await Snappy.compress(dataToBeCompressed); |
| 87 | } |
| 88 | case 'zstd': { |
| 89 | loadZstd(); |
| 90 | if ('kModuleError' in zstd) { |
| 91 | throw zstd['kModuleError']; |
| 92 | } |
| 93 | return await zstd.compress(dataToBeCompressed, ZSTD_COMPRESSION_LEVEL); |
| 94 | } |
| 95 | case 'zlib': { |
| 96 | if (options.zlibCompressionLevel) { |
| 97 | zlibOptions.level = options.zlibCompressionLevel; |
| 98 | } |
| 99 | return await zlibDeflate(dataToBeCompressed, zlibOptions); |
| 100 | } |
| 101 | default: { |
| 102 | throw new MongoInvalidArgumentError( |
| 103 | `Unknown compressor ${options.agreedCompressor} failed to compress` |
| 104 | ); |
| 105 | } |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | // Decompress a message using the given compressor |
| 110 | export async function decompress( |
no test coverage detected