/** * 小程序 Gzip 压缩工具 * * 纯 JS 实现,零第三方依赖,适用于 wx / my / tt / qq 小程序环境。 * 小程序没有 CompressionStream 和 Web Worker,因此采用同步 DEFLATE 压缩。 * * 压缩策略:使用定长哈夫曼编码(Fixed Huffman)的 DEFLATE 实现, * 搭配 LZ77 滑动窗口匹配,在代码体积和压缩率之间取得平衡。 * 典型 JSON 上报数据可获得 60-75% 的压缩率。 */ export interface GzipConfig { /** 是否启用 gzip 压缩,默认 true */ enable?: boolean; /** 压缩阈值(字节),body 大小超过该值才压缩,默认 1024 */ threshold?: number; /** 是否输出 gzip 调试日志并估算压缩体积,默认 false */ debug?: boolean; } export interface ResolvedGzipConfig { enable: boolean; threshold: number; debug: boolean; } /** 将 config.gzip 归一化为内部统一结构 */ export declare function resolveGzipConfig(gzip: any): ResolvedGzipConfig; /** * 白名单接口返回的 use_gzip 开关: * - 1 / '1' / true:允许 gzip * - 0 / '0' / false / 其他值:不允许 gzip * - undefined / null / '':兼容旧后台,默认允许 gzip */ export declare function resolveWhitelistUseGzip(useGzip: unknown): boolean; /** * 统一计算上报请求的 Content-Encoding。 * - gzip 功能关闭:返回 null,不设置该 header * - gzip 功能开启且已压缩:返回 gzip * - gzip 功能开启但未压缩:返回 identity */ export declare function getReportContentEncoding(gzipEnabled: boolean, isCompressed: boolean): string | null; /** 生成统一的 gzip 大小日志文案,便于三端测试时观察压缩收益 */ export declare function getGzipSizeLog(rawSize: number, compressedSize: number): string; /** * 将字符串进行 gzip 压缩,返回 ArrayBuffer。 * * 格式:Gzip Header (10B) + DEFLATE compressed data + Gzip Footer (8B: CRC32 + ISIZE) */ export declare function gzipCompress(str: string): ArrayBuffer;