UNPKG

1.6 kBPlain TextView Raw
1import { promisify } from 'util'
2import { ZlibOptions } from 'zlib'
3import * as zlib from 'zlib'
4
5const deflate = promisify(zlib.deflate.bind(zlib))
6const inflate = promisify(zlib.inflate.bind(zlib))
7const gzip = promisify(zlib.gzip.bind(zlib))
8const gunzip = promisify(zlib.gunzip.bind(zlib))
9
10// string > zip
11/**
12 * zipBuffer uses `deflate`.
13 * It's 9 bytes shorter than gzip.
14 */
15export async function zipBuffer(buf: Buffer, options: ZlibOptions = {}): Promise<Buffer> {
16 return await deflate(buf, options)
17}
18
19/**
20 * gzipBuffer uses `gzip`
21 * It's 9 bytes longer than deflate.
22 */
23export async function gzipBuffer(buf: Buffer, options: ZlibOptions = {}): Promise<Buffer> {
24 return await gzip(buf, options)
25}
26
27// zip > buffer
28export async function unzipBuffer(buf: Buffer, options: ZlibOptions = {}): Promise<Buffer> {
29 return await inflate(buf, options)
30}
31
32export async function gunzipBuffer(buf: Buffer, options: ZlibOptions = {}): Promise<Buffer> {
33 return await gunzip(buf, options)
34}
35
36// convenience
37export async function zipString(s: string, options?: ZlibOptions): Promise<Buffer> {
38 return await zipBuffer(Buffer.from(s), options)
39}
40
41export async function gzipString(s: string, options?: ZlibOptions): Promise<Buffer> {
42 return await gzipBuffer(Buffer.from(s), options)
43}
44
45// convenience
46export async function unzipToString(buf: Buffer, options?: ZlibOptions): Promise<string> {
47 return (await unzipBuffer(buf, options)).toString()
48}
49
50export async function gunzipToString(buf: Buffer, options?: ZlibOptions): Promise<string> {
51 return (await gunzipBuffer(buf, options)).toString()
52}