@loaders.gl/compression 4.2.0-alpha.3 → 4.2.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brotli/decode.js +2311 -1739
- package/dist/compress-on-worker.js +16 -8
- package/dist/dist.dev.js +576 -198
- package/dist/dist.min.js +16 -0
- package/dist/index.cjs +36 -119
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +12 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/lib/brotli-compression.d.ts +2 -2
- package/dist/lib/brotli-compression.d.ts.map +1 -1
- package/dist/lib/brotli-compression.js +69 -67
- package/dist/lib/compression.js +50 -43
- package/dist/lib/deflate-compression.d.ts +2 -2
- package/dist/lib/deflate-compression.d.ts.map +1 -1
- package/dist/lib/deflate-compression.js +118 -107
- package/dist/lib/gzip-compression.d.ts +2 -2
- package/dist/lib/gzip-compression.d.ts.map +1 -1
- package/dist/lib/gzip-compression.js +10 -14
- package/dist/lib/lz4-compression.d.ts +2 -2
- package/dist/lib/lz4-compression.d.ts.map +1 -1
- package/dist/lib/lz4-compression.js +125 -75
- package/dist/lib/lzo-compression.d.ts +2 -2
- package/dist/lib/lzo-compression.d.ts.map +1 -1
- package/dist/lib/lzo-compression.js +47 -28
- package/dist/lib/no-compression.d.ts +2 -2
- package/dist/lib/no-compression.d.ts.map +1 -1
- package/dist/lib/no-compression.js +23 -22
- package/dist/lib/snappy-compression.d.ts +2 -2
- package/dist/lib/snappy-compression.d.ts.map +1 -1
- package/dist/lib/snappy-compression.js +20 -17
- package/dist/lib/zstd-compression.d.ts +2 -2
- package/dist/lib/zstd-compression.d.ts.map +1 -1
- package/dist/lib/zstd-compression.js +36 -28
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/workers/compression-worker-node.d.ts +1 -1
- package/dist/workers/compression-worker-node.d.ts.map +1 -1
- package/dist/workers/compression-worker-node.js +0 -1
- package/dist/workers/compression-worker.js +56 -44
- package/package.json +10 -7
- package/dist/brotli/decode.js.map +0 -1
- package/dist/compress-on-worker.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/brotli-compression.js.map +0 -1
- package/dist/lib/compression.js.map +0 -1
- package/dist/lib/deflate-compression.js.map +0 -1
- package/dist/lib/gzip-compression.js.map +0 -1
- package/dist/lib/lz4-compression.js.map +0 -1
- package/dist/lib/lzo-compression.js.map +0 -1
- package/dist/lib/no-compression.js.map +0 -1
- package/dist/lib/snappy-compression.js.map +0 -1
- package/dist/lib/zstd-compression.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/workers/compression-worker-node.js.map +0 -1
- package/dist/workers/compression-worker.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export type { CompressionOptions } from
|
|
2
|
-
export { Compression } from
|
|
3
|
-
export { NoCompression } from
|
|
4
|
-
export { DeflateCompression } from
|
|
5
|
-
export { GZipCompression } from
|
|
6
|
-
export { BrotliCompression } from
|
|
7
|
-
export { SnappyCompression } from
|
|
8
|
-
export { LZ4Compression } from
|
|
9
|
-
export { ZstdCompression } from
|
|
10
|
-
export { LZOCompression } from
|
|
11
|
-
export type { CompressionWorkerOptions } from
|
|
12
|
-
export { CompressionWorker, compressOnWorker } from
|
|
1
|
+
export type { CompressionOptions } from "./lib/compression.js";
|
|
2
|
+
export { Compression } from "./lib/compression.js";
|
|
3
|
+
export { NoCompression } from "./lib/no-compression.js";
|
|
4
|
+
export { DeflateCompression } from "./lib/deflate-compression.js";
|
|
5
|
+
export { GZipCompression } from "./lib/gzip-compression.js";
|
|
6
|
+
export { BrotliCompression } from "./lib/brotli-compression.js";
|
|
7
|
+
export { SnappyCompression } from "./lib/snappy-compression.js";
|
|
8
|
+
export { LZ4Compression } from "./lib/lz4-compression.js";
|
|
9
|
+
export { ZstdCompression } from "./lib/zstd-compression.js";
|
|
10
|
+
export { LZOCompression } from "./lib/lzo-compression.js";
|
|
11
|
+
export type { CompressionWorkerOptions } from "./compress-on-worker.js";
|
|
12
|
+
export { CompressionWorker, compressOnWorker } from "./compress-on-worker.js";
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAC,6BAA0B;AAE1D,OAAO,EAAC,WAAW,EAAC,6BAA0B;AAE9C,OAAO,EAAC,aAAa,EAAC,gCAA6B;AACnD,OAAO,EAAC,kBAAkB,EAAC,qCAAkC;AAC7D,OAAO,EAAC,eAAe,EAAC,kCAA+B;AACvD,OAAO,EAAC,iBAAiB,EAAC,oCAAiC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,oCAAiC;AAC3D,OAAO,EAAC,cAAc,EAAC,iCAA8B;AACrD,OAAO,EAAC,eAAe,EAAC,kCAA+B;AACvD,OAAO,EAAC,cAAc,EAAC,iCAA8B;AAErD,YAAY,EAAC,wBAAwB,EAAC,gCAA6B;AACnE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,gCAA6B"}
|
package/dist/index.js
CHANGED
|
@@ -8,4 +8,3 @@ export { LZ4Compression } from "./lib/lz4-compression.js";
|
|
|
8
8
|
export { ZstdCompression } from "./lib/zstd-compression.js";
|
|
9
9
|
export { LZOCompression } from "./lib/lzo-compression.js";
|
|
10
10
|
export { CompressionWorker, compressOnWorker } from "./compress-on-worker.js";
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CompressionOptions } from
|
|
2
|
-
import { Compression } from
|
|
1
|
+
import type { CompressionOptions } from "./compression.js";
|
|
2
|
+
import { Compression } from "./compression.js";
|
|
3
3
|
export type BrotliCompressionOptions = CompressionOptions & {
|
|
4
4
|
brotli?: {
|
|
5
5
|
mode?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brotli-compression.d.ts","sourceRoot":"","sources":["../../src/lib/brotli-compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,
|
|
1
|
+
{"version":3,"file":"brotli-compression.d.ts","sourceRoot":"","sources":["../../src/lib/brotli-compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,yBAAsB;AACtD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAQ1C,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,GAAG;IAC1D,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAYF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IACjC,QAAQ,CAAC,UAAU,WAAU;IAC7B,QAAQ,CAAC,gBAAgB,WAAU;IACnC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;gBAE/B,OAAO,EAAE,wBAAwB;IAK7C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IASxD,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAkBvC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAS1D,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;CAkBhD"}
|
|
@@ -1,83 +1,85 @@
|
|
|
1
1
|
import { Compression } from "./compression.js";
|
|
2
2
|
import { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';
|
|
3
|
+
// import brotli from 'brotli'; // https://bundlephobia.com/package/brotli
|
|
3
4
|
import { BrotliDecode } from "../brotli/decode.js";
|
|
4
5
|
import zlib from 'zlib';
|
|
5
6
|
import { promisify1 } from '@loaders.gl/loader-utils';
|
|
6
7
|
const DEFAULT_BROTLI_OPTIONS = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
brotli: {
|
|
9
|
+
mode: 0,
|
|
10
|
+
quality: 8,
|
|
11
|
+
lgwin: 22
|
|
12
|
+
}
|
|
12
13
|
};
|
|
13
14
|
let brotli;
|
|
15
|
+
/**
|
|
16
|
+
* brotli compression / decompression
|
|
17
|
+
*/
|
|
14
18
|
export class BrotliCompression extends Compression {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
this.options = options;
|
|
23
|
-
}
|
|
24
|
-
async preload() {
|
|
25
|
-
var _this$options, _this$options$modules;
|
|
26
|
-
brotli = brotli || ((_this$options = this.options) === null || _this$options === void 0 ? void 0 : (_this$options$modules = _this$options.modules) === null || _this$options$modules === void 0 ? void 0 : _this$options$modules.brotli);
|
|
27
|
-
if (!brotli) {
|
|
28
|
-
console.warn(`${this.name} library not installed`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
async compress(input) {
|
|
32
|
-
var _this$options$brotli;
|
|
33
|
-
if (!isBrowser && (_this$options$brotli = this.options.brotli) !== null && _this$options$brotli !== void 0 && _this$options$brotli.useZlib) {
|
|
34
|
-
const buffer = await promisify1(zlib.brotliCompress)(input);
|
|
35
|
-
return toArrayBuffer(buffer);
|
|
19
|
+
constructor(options) {
|
|
20
|
+
super(options);
|
|
21
|
+
this.name = 'brotli';
|
|
22
|
+
this.extensions = ['br'];
|
|
23
|
+
this.contentEncodings = ['br'];
|
|
24
|
+
this.isSupported = true;
|
|
25
|
+
this.options = options;
|
|
36
26
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
27
|
+
/**
|
|
28
|
+
* brotli is an injectable dependency due to big size
|
|
29
|
+
* @param options
|
|
30
|
+
*/
|
|
31
|
+
async preload() {
|
|
32
|
+
brotli = brotli || this.options?.modules?.brotli;
|
|
33
|
+
if (!brotli) {
|
|
34
|
+
// eslint-disable-next-line no-console
|
|
35
|
+
console.warn(`${this.name} library not installed`);
|
|
36
|
+
}
|
|
44
37
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
async compress(input) {
|
|
39
|
+
// On Node.js we can use built-in zlib
|
|
40
|
+
if (!isBrowser && this.options.brotli?.useZlib) {
|
|
41
|
+
const buffer = await promisify1(zlib.brotliCompress)(input);
|
|
42
|
+
return toArrayBuffer(buffer);
|
|
43
|
+
}
|
|
44
|
+
return this.compressSync(input);
|
|
52
45
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
46
|
+
compressSync(input) {
|
|
47
|
+
// On Node.js we can use built-in zlib
|
|
48
|
+
if (!isBrowser && this.options.brotli?.useZlib) {
|
|
49
|
+
const buffer = zlib.brotliCompressSync(input);
|
|
50
|
+
return toArrayBuffer(buffer);
|
|
51
|
+
}
|
|
52
|
+
const brotliOptions = { ...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli };
|
|
53
|
+
const inputArray = new Uint8Array(input);
|
|
54
|
+
if (!brotli) {
|
|
55
|
+
throw new Error('brotli compression: brotli module not installed');
|
|
56
|
+
}
|
|
57
|
+
// @ts-ignore brotli types state that only Buffers are accepted...
|
|
58
|
+
const outputArray = brotli.compress(inputArray, brotliOptions);
|
|
59
|
+
return outputArray.buffer;
|
|
61
60
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
async decompress(input) {
|
|
62
|
+
// On Node.js we can use built-in zlib
|
|
63
|
+
if (!isBrowser && this.options.brotli?.useZlib) {
|
|
64
|
+
const buffer = await promisify1(zlib.brotliDecompress)(input);
|
|
65
|
+
return toArrayBuffer(buffer);
|
|
66
|
+
}
|
|
67
|
+
return this.decompressSync(input);
|
|
69
68
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
69
|
+
decompressSync(input) {
|
|
70
|
+
// On Node.js we can use built-in zlib
|
|
71
|
+
if (!isBrowser && this.options.brotli?.useZlib) {
|
|
72
|
+
const buffer = zlib.brotliDecompressSync(input);
|
|
73
|
+
return toArrayBuffer(buffer);
|
|
74
|
+
}
|
|
75
|
+
const brotliOptions = { ...DEFAULT_BROTLI_OPTIONS.brotli, ...this.options?.brotli };
|
|
76
|
+
const inputArray = new Uint8Array(input);
|
|
77
|
+
if (brotli) {
|
|
78
|
+
// @ts-ignore brotli types state that only Buffers are accepted...
|
|
79
|
+
const outputArray = brotli.decompress(inputArray, brotliOptions);
|
|
80
|
+
return outputArray.buffer;
|
|
81
|
+
}
|
|
82
|
+
const outputArray = BrotliDecode(inputArray, undefined);
|
|
83
|
+
return outputArray.buffer;
|
|
78
84
|
}
|
|
79
|
-
const outputArray = BrotliDecode(inputArray, undefined);
|
|
80
|
-
return outputArray.buffer;
|
|
81
|
-
}
|
|
82
85
|
}
|
|
83
|
-
//# sourceMappingURL=brotli-compression.js.map
|
package/dist/lib/compression.js
CHANGED
|
@@ -1,46 +1,53 @@
|
|
|
1
|
+
// Compression interface
|
|
1
2
|
import { concatenateArrayBuffersAsync } from '@loaders.gl/loader-utils';
|
|
3
|
+
/** Compression */
|
|
2
4
|
export class Compression {
|
|
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
|
-
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.compressBatches = this.compressBatches.bind(this);
|
|
7
|
+
this.decompressBatches = this.decompressBatches.bind(this);
|
|
8
|
+
}
|
|
9
|
+
/** Preloads any dynamic libraries. May enable sync functions */
|
|
10
|
+
async preload() {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
/** Asynchronously compress data */
|
|
14
|
+
async compress(input) {
|
|
15
|
+
await this.preload();
|
|
16
|
+
return this.compressSync(input);
|
|
17
|
+
}
|
|
18
|
+
/** Asynchronously decompress data */
|
|
19
|
+
async decompress(input, size) {
|
|
20
|
+
await this.preload();
|
|
21
|
+
return this.decompressSync(input, size);
|
|
22
|
+
}
|
|
23
|
+
/** Synchronously compress data */
|
|
24
|
+
compressSync(input) {
|
|
25
|
+
throw new Error(`${this.name}: sync compression not supported`);
|
|
26
|
+
}
|
|
27
|
+
/** Synchronously compress data */
|
|
28
|
+
decompressSync(input, size) {
|
|
29
|
+
throw new Error(`${this.name}: sync decompression not supported`);
|
|
30
|
+
}
|
|
31
|
+
/** Compress batches */
|
|
32
|
+
async *compressBatches(asyncIterator) {
|
|
33
|
+
// TODO - implement incremental compression
|
|
34
|
+
const input = await this.concatenate(asyncIterator);
|
|
35
|
+
yield this.compress(input);
|
|
36
|
+
}
|
|
37
|
+
/** Decompress batches */
|
|
38
|
+
async *decompressBatches(asyncIterator) {
|
|
39
|
+
// TODO - implement incremental compression
|
|
40
|
+
const input = await this.concatenate(asyncIterator);
|
|
41
|
+
yield this.decompress(input);
|
|
42
|
+
}
|
|
43
|
+
// HELPERS
|
|
44
|
+
concatenate(asyncIterator) {
|
|
45
|
+
return concatenateArrayBuffersAsync(asyncIterator);
|
|
46
|
+
}
|
|
47
|
+
improveError(error) {
|
|
48
|
+
if (!error.message.includes(this.name)) {
|
|
49
|
+
error.message = `${this.name} ${error.message}`;
|
|
50
|
+
}
|
|
51
|
+
return error;
|
|
52
|
+
}
|
|
45
53
|
}
|
|
46
|
-
//# sourceMappingURL=compression.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CompressionOptions } from
|
|
2
|
-
import { Compression } from
|
|
1
|
+
import type { CompressionOptions } from "./compression.js";
|
|
2
|
+
import { Compression } from "./compression.js";
|
|
3
3
|
import pako from 'pako';
|
|
4
4
|
export type DeflateCompressionOptions = CompressionOptions & {
|
|
5
5
|
deflate?: pako.InflateOptions & pako.DeflateOptions & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deflate-compression.d.ts","sourceRoot":"","sources":["../../src/lib/deflate-compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,
|
|
1
|
+
{"version":3,"file":"deflate-compression.d.ts","sourceRoot":"","sources":["../../src/lib/deflate-compression.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,yBAAsB;AACtD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAE1C,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,GAAG;IAC3D,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;IAC1E,kEAAkE;IAClE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAa;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IACnC,QAAQ,CAAC,gBAAgB,WAAe;IACxC,QAAQ,CAAC,WAAW,QAAQ;IAE5B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAE5C,OAAO,CAAC,OAAO,CAAqB;gBAExB,OAAO,GAAE,yBAA8B;IAK7C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAWlD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAW1D,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAY7C,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAYxC,eAAe,CACpB,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAMtB,iBAAiB,CACtB,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAMtB,gBAAgB,CACrB,aAAa,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAC1C,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,GAChE,aAAa,CAAC,WAAW,CAAC;IAwB7B,OAAO,CAAC,KAAK,KAAA;IAIb,MAAM,CAAC,MAAM,KAAA;IAMb,UAAU,IAAI,WAAW,EAAE;IAO3B,SAAS,CAAC,IAAI,GAAE,MAAU,GAAG,MAAM;CAuBpC"}
|
|
@@ -1,119 +1,130 @@
|
|
|
1
1
|
import { Compression } from "./compression.js";
|
|
2
2
|
import { isBrowser, toArrayBuffer } from '@loaders.gl/loader-utils';
|
|
3
|
-
import pako from 'pako';
|
|
3
|
+
import pako from 'pako'; // https://bundlephobia.com/package/pako
|
|
4
4
|
import zlib from 'zlib';
|
|
5
5
|
import { promisify1 } from '@loaders.gl/loader-utils';
|
|
6
|
+
/**
|
|
7
|
+
* DEFLATE compression / decompression
|
|
8
|
+
*/
|
|
6
9
|
export class DeflateCompression extends Compression {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this._chunks = [];
|
|
16
|
-
this.options = options;
|
|
17
|
-
}
|
|
18
|
-
async compress(input) {
|
|
19
|
-
var _this$options$deflate;
|
|
20
|
-
if (!isBrowser && (_this$options$deflate = this.options.deflate) !== null && _this$options$deflate !== void 0 && _this$options$deflate.useZlib) {
|
|
21
|
-
var _this$options$deflate2;
|
|
22
|
-
const buffer = (_this$options$deflate2 = this.options.deflate) !== null && _this$options$deflate2 !== void 0 && _this$options$deflate2.gzip ? await promisify1(zlib.gzip)(input) : await promisify1(zlib.deflate)(input);
|
|
23
|
-
return toArrayBuffer(buffer);
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
super(options);
|
|
12
|
+
this.name = 'deflate';
|
|
13
|
+
this.extensions = [];
|
|
14
|
+
this.contentEncodings = ['deflate'];
|
|
15
|
+
this.isSupported = true;
|
|
16
|
+
this._chunks = [];
|
|
17
|
+
this.options = options;
|
|
24
18
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
async compress(input) {
|
|
20
|
+
// On Node.js we can use built-in zlib
|
|
21
|
+
if (!isBrowser && this.options.deflate?.useZlib) {
|
|
22
|
+
const buffer = this.options.deflate?.gzip
|
|
23
|
+
? await promisify1(zlib.gzip)(input)
|
|
24
|
+
: await promisify1(zlib.deflate)(input);
|
|
25
|
+
return toArrayBuffer(buffer);
|
|
26
|
+
}
|
|
27
|
+
return this.compressSync(input);
|
|
33
28
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
async decompress(input) {
|
|
30
|
+
// On Node.js we can use built-in zlib
|
|
31
|
+
if (!isBrowser && this.options.deflate?.useZlib) {
|
|
32
|
+
const buffer = this.options.deflate?.gzip
|
|
33
|
+
? await promisify1(zlib.gunzip)(input)
|
|
34
|
+
: await promisify1(zlib.inflate)(input);
|
|
35
|
+
return toArrayBuffer(buffer);
|
|
36
|
+
}
|
|
37
|
+
return this.decompressSync(input);
|
|
42
38
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return toArrayBuffer(buffer);
|
|
39
|
+
compressSync(input) {
|
|
40
|
+
// On Node.js we can use built-in zlib
|
|
41
|
+
if (!isBrowser && this.options.deflate?.useZlib) {
|
|
42
|
+
const buffer = this.options.deflate?.gzip ? zlib.gzipSync(input) : zlib.deflateSync(input);
|
|
43
|
+
return toArrayBuffer(buffer);
|
|
44
|
+
}
|
|
45
|
+
const pakoOptions = this.options?.deflate || {};
|
|
46
|
+
const inputArray = new Uint8Array(input);
|
|
47
|
+
const deflate = this.options?.raw ? pako.deflateRaw : pako.deflate;
|
|
48
|
+
return deflate(inputArray, pakoOptions).buffer;
|
|
54
49
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
async *decompressBatches(asyncIterator) {
|
|
67
|
-
var _this$options6;
|
|
68
|
-
const pakoOptions = ((_this$options6 = this.options) === null || _this$options6 === void 0 ? void 0 : _this$options6.deflate) || {};
|
|
69
|
-
const pakoProcessor = new pako.Inflate(pakoOptions);
|
|
70
|
-
yield* this.transformBatches(pakoProcessor, asyncIterator);
|
|
71
|
-
}
|
|
72
|
-
async *transformBatches(pakoProcessor, asyncIterator) {
|
|
73
|
-
pakoProcessor.onData = this._onData.bind(this);
|
|
74
|
-
pakoProcessor.onEnd = this._onEnd.bind(this);
|
|
75
|
-
for await (const chunk of asyncIterator) {
|
|
76
|
-
const uint8Array = new Uint8Array(chunk);
|
|
77
|
-
const ok = pakoProcessor.push(uint8Array, false);
|
|
78
|
-
if (!ok) {
|
|
79
|
-
throw new Error(`${this._getError()}write`);
|
|
80
|
-
}
|
|
81
|
-
const chunks = this._getChunks();
|
|
82
|
-
yield* chunks;
|
|
50
|
+
decompressSync(input) {
|
|
51
|
+
// On Node.js we can use built-in zlib
|
|
52
|
+
if (!isBrowser && this.options.deflate?.useZlib) {
|
|
53
|
+
const buffer = this.options.deflate?.gzip ? zlib.gunzipSync(input) : zlib.inflateSync(input);
|
|
54
|
+
return toArrayBuffer(buffer);
|
|
55
|
+
}
|
|
56
|
+
const pakoOptions = this.options?.deflate || {};
|
|
57
|
+
const inputArray = new Uint8Array(input);
|
|
58
|
+
const inflate = this.options?.raw ? pako.inflateRaw : pako.inflate;
|
|
59
|
+
return inflate(inputArray, pakoOptions).buffer;
|
|
83
60
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
61
|
+
async *compressBatches(asyncIterator) {
|
|
62
|
+
const pakoOptions = this.options?.deflate || {};
|
|
63
|
+
const pakoProcessor = new pako.Deflate(pakoOptions);
|
|
64
|
+
yield* this.transformBatches(pakoProcessor, asyncIterator);
|
|
65
|
+
}
|
|
66
|
+
async *decompressBatches(asyncIterator) {
|
|
67
|
+
const pakoOptions = this.options?.deflate || {};
|
|
68
|
+
const pakoProcessor = new pako.Inflate(pakoOptions);
|
|
69
|
+
yield* this.transformBatches(pakoProcessor, asyncIterator);
|
|
70
|
+
}
|
|
71
|
+
async *transformBatches(pakoProcessor, asyncIterator) {
|
|
72
|
+
pakoProcessor.onData = this._onData.bind(this);
|
|
73
|
+
pakoProcessor.onEnd = this._onEnd.bind(this);
|
|
74
|
+
for await (const chunk of asyncIterator) {
|
|
75
|
+
const uint8Array = new Uint8Array(chunk);
|
|
76
|
+
const ok = pakoProcessor.push(uint8Array, false); // false -> not last chunk
|
|
77
|
+
if (!ok) {
|
|
78
|
+
throw new Error(`${this._getError()}write`);
|
|
79
|
+
}
|
|
80
|
+
const chunks = this._getChunks();
|
|
81
|
+
yield* chunks;
|
|
82
|
+
}
|
|
83
|
+
// End
|
|
84
|
+
const emptyChunk = new Uint8Array(0);
|
|
85
|
+
const ok = pakoProcessor.push(emptyChunk, true); // true -> last chunk
|
|
86
|
+
if (!ok) {
|
|
87
|
+
// For some reason we get error but it still works???
|
|
88
|
+
// throw new Error(this._getError() + 'end');
|
|
89
|
+
}
|
|
90
|
+
const chunks = this._getChunks();
|
|
91
|
+
yield* chunks;
|
|
92
|
+
}
|
|
93
|
+
_onData(chunk) {
|
|
94
|
+
this._chunks.push(chunk);
|
|
95
|
+
}
|
|
96
|
+
_onEnd(status) {
|
|
97
|
+
if (status !== 0) {
|
|
98
|
+
throw new Error(this._getError(status) + this._chunks.length);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
_getChunks() {
|
|
102
|
+
const chunks = this._chunks;
|
|
103
|
+
this._chunks = [];
|
|
104
|
+
return chunks;
|
|
105
|
+
}
|
|
106
|
+
// TODO - For some reason we don't get the error message from pako in _onEnd?
|
|
107
|
+
_getError(code = 0) {
|
|
108
|
+
const MESSAGES = {
|
|
109
|
+
/* Z_NEED_DICT 2 */
|
|
110
|
+
2: 'need dictionary',
|
|
111
|
+
/* Z_STREAM_END 1 */
|
|
112
|
+
1: 'stream end',
|
|
113
|
+
/* Z_OK 0 */
|
|
114
|
+
0: '',
|
|
115
|
+
/* Z_ERRNO (-1) */
|
|
116
|
+
'-1': 'file error',
|
|
117
|
+
/* Z_STREAM_ERROR (-2) */
|
|
118
|
+
'-2': 'stream error',
|
|
119
|
+
/* Z_DATA_ERROR (-3) */
|
|
120
|
+
'-3': 'data error',
|
|
121
|
+
/* Z_MEM_ERROR (-4) */
|
|
122
|
+
'-4': 'insufficient memory',
|
|
123
|
+
/* Z_BUF_ERROR (-5) */
|
|
124
|
+
'-5': 'buffer error',
|
|
125
|
+
/* Z_VERSION_ERROR (-6) */
|
|
126
|
+
'-6': 'incompatible version'
|
|
127
|
+
};
|
|
128
|
+
return `${this.name}: ${MESSAGES[code]}`;
|
|
96
129
|
}
|
|
97
|
-
}
|
|
98
|
-
_getChunks() {
|
|
99
|
-
const chunks = this._chunks;
|
|
100
|
-
this._chunks = [];
|
|
101
|
-
return chunks;
|
|
102
|
-
}
|
|
103
|
-
_getError() {
|
|
104
|
-
let code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
105
|
-
const MESSAGES = {
|
|
106
|
-
2: 'need dictionary',
|
|
107
|
-
1: 'stream end',
|
|
108
|
-
0: '',
|
|
109
|
-
'-1': 'file error',
|
|
110
|
-
'-2': 'stream error',
|
|
111
|
-
'-3': 'data error',
|
|
112
|
-
'-4': 'insufficient memory',
|
|
113
|
-
'-5': 'buffer error',
|
|
114
|
-
'-6': 'incompatible version'
|
|
115
|
-
};
|
|
116
|
-
return `${this.name}: ${MESSAGES[code]}`;
|
|
117
|
-
}
|
|
118
130
|
}
|
|
119
|
-
//# sourceMappingURL=deflate-compression.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CompressionOptions } from
|
|
2
|
-
import { DeflateCompression } from
|
|
1
|
+
import type { CompressionOptions } from "./compression.js";
|
|
2
|
+
import { DeflateCompression } from "./deflate-compression.js";
|
|
3
3
|
import pako from 'pako';
|
|
4
4
|
export type GZipCompressionOptions = CompressionOptions & {
|
|
5
5
|
gzip?: pako.InflateOptions & pako.DeflateOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gzip-compression.d.ts","sourceRoot":"","sources":["../../src/lib/gzip-compression.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,kBAAkB,EAAC,
|
|
1
|
+
{"version":3,"file":"gzip-compression.d.ts","sourceRoot":"","sources":["../../src/lib/gzip-compression.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,kBAAkB,EAAC,yBAAsB;AACtD,OAAO,EAAC,kBAAkB,EAAC,iCAA8B;AACzD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAU;IAC/B,QAAQ,CAAC,UAAU,WAAkB;IACrC,QAAQ,CAAC,gBAAgB,WAAsB;IAC/C,QAAQ,CAAC,WAAW,QAAQ;gBAEhB,OAAO,CAAC,EAAE,sBAAsB;CAG7C"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { DeflateCompression } from "./deflate-compression.js";
|
|
2
|
+
/**
|
|
3
|
+
* GZIP compression / decompression
|
|
4
|
+
*/
|
|
2
5
|
export class GZipCompression extends DeflateCompression {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
});
|
|
11
|
-
this.name = 'gzip';
|
|
12
|
-
this.extensions = ['gz', 'gzip'];
|
|
13
|
-
this.contentEncodings = ['gzip', 'x-gzip'];
|
|
14
|
-
this.isSupported = true;
|
|
15
|
-
}
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super({ ...options, deflate: { ...options?.gzip, gzip: true } });
|
|
8
|
+
this.name = 'gzip';
|
|
9
|
+
this.extensions = ['gz', 'gzip'];
|
|
10
|
+
this.contentEncodings = ['gzip', 'x-gzip'];
|
|
11
|
+
this.isSupported = true;
|
|
12
|
+
}
|
|
16
13
|
}
|
|
17
|
-
//# sourceMappingURL=gzip-compression.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lz4-compression.d.ts","sourceRoot":"","sources":["../../src/lib/lz4-compression.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,kBAAkB,EAAC,
|
|
1
|
+
{"version":3,"file":"lz4-compression.d.ts","sourceRoot":"","sources":["../../src/lib/lz4-compression.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,kBAAkB,EAAC,yBAAsB;AACtD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAM1C;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IAC9B,QAAQ,CAAC,UAAU,WAAW;IAC9B,QAAQ,CAAC,gBAAgB,WAAa;IACtC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAEzB,OAAO,EAAE,kBAAkB;IAUvC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAK7C;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;IAwBhE;;;;;;;;OAQG;IACH,WAAW,CACT,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,UAAU,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM;IAgET;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;CAI7C"}
|