| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import brotliWasm from 'brotli-wasm';
- import { gzipSync, gunzipSync } from 'fflate';
- export enum CompressFormat {
- GZIP = 'gzip',
- BROTLI = 'brotli',
- }
- let brotliModule: Awaited<typeof brotliWasm> | null = null;
- async function getBrotli() {
- if (brotliModule) return brotliModule;
- brotliModule = await brotliWasm;
- return brotliModule;
- }
- /**
- * 使用 fflate(brotli-wasm) 压缩二进制数据
- * @param bytes 原始二进制数据
- * @param format 压缩格式
- * @returns 压缩后的二进制数据
- */
- export async function compressBytes(
- bytes: Uint8Array,
- format: CompressFormat
- ): Promise<Uint8Array> {
- if (format === CompressFormat.GZIP) {
- return gzipSync(bytes);
- }
- const brotli = await getBrotli();
- return brotli.compress(bytes);
- }
- /**
- * 使用 fflate(brotli-wasm) 解压二进制数据
- * @param bytes 压缩后的二进制数据
- * @param format 压缩格式(需与压缩时一致)
- * @returns 解压后的二进制数据
- */
- export async function decompressBytes(
- bytes: Uint8Array,
- format: CompressFormat
- ): Promise<Uint8Array> {
- if (format === CompressFormat.GZIP) {
- return gunzipSync(bytes);
- }
- const brotli = await getBrotli();
- return brotli.decompress(bytes);
- }
|