-
Notifications
You must be signed in to change notification settings - Fork 481
Expand file tree
/
Copy pathgz.ts
More file actions
47 lines (42 loc) · 1.23 KB
/
Copy pathgz.ts
File metadata and controls
47 lines (42 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Node.js implementation using zlib
// For browser builds, this file is replaced with gz.browser.ts via package.json "browser" field
import * as zlib from 'zlib';
// This will transfer `data` if it is an array buffer.
export function compress(
data: string | Uint8Array<ArrayBuffer>
): Promise<Uint8Array<ArrayBuffer>> {
return new Promise((resolve, reject) => {
zlib.gzip(data, (errorOrNull, result) => {
if (errorOrNull) {
reject(errorOrNull);
} else {
resolve(result);
}
});
});
}
export function decompress(
data: Uint8Array<ArrayBuffer>
): Promise<Uint8Array<ArrayBuffer>> {
return new Promise((resolve, reject) => {
zlib.gunzip(data, (errorOrNull, result) => {
if (errorOrNull) {
reject(errorOrNull);
} else {
resolve(result);
}
});
});
}
export function isGzip(data: Uint8Array): boolean {
// Detect the gzip magic bytes 1f 8b 08.
return (
data.byteLength >= 3 &&
data[0] === 0x1f &&
data[1] === 0x8b &&
data[2] === 0x08
);
}