665a62080b
* test: more unit tests - Adjust vitest configuration to handle main process and renderer process tests separately - Add unit tests for main process utils - Add unit tests for the renderer process - Add three component tests to verify vitest usage: `DragableList`, `Scrollbar`, `QuickPanelView` - Add an e2e startup test to verify playwright usage - Extract `splitApiKeyString` and add tests for it - Add and format some comments * fix: mock individual properties * test: add tests for CustomTag * test: add tests for ExpandableText * test: conditional rendering tooltip of tag * chore: update dependencies
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import util from 'node:util'
|
|
import zlib from 'node:zlib'
|
|
|
|
import logger from 'electron-log'
|
|
|
|
// 将 zlib 的 gzip 和 gunzip 方法转换为 Promise 版本
|
|
const gzipPromise = util.promisify(zlib.gzip)
|
|
const gunzipPromise = util.promisify(zlib.gunzip)
|
|
|
|
/**
|
|
* 压缩字符串
|
|
* @param {string} str 要压缩的 JSON 字符串
|
|
* @returns {Promise<Buffer>} 压缩后的 Buffer
|
|
*/
|
|
export async function compress(str: string): Promise<Buffer> {
|
|
try {
|
|
const buffer = Buffer.from(str, 'utf-8')
|
|
return await gzipPromise(buffer)
|
|
} catch (error) {
|
|
logger.error('Compression failed:', error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 解压缩 Buffer 到 JSON 字符串
|
|
* @param {Buffer} compressedBuffer - 压缩的 Buffer
|
|
* @returns {Promise<string>} 解压缩后的 JSON 字符串
|
|
*/
|
|
export async function decompress(compressedBuffer: Buffer): Promise<string> {
|
|
try {
|
|
const buffer = await gunzipPromise(compressedBuffer)
|
|
return buffer.toString('utf-8')
|
|
} catch (error) {
|
|
logger.error('Decompression failed:', error)
|
|
throw error
|
|
}
|
|
}
|