zstdify 1.3.0 → 1.4.0
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/README.md +24 -4
- package/dist/bitstream/bitReaderReverse.d.ts +15 -0
- package/dist/bitstream/bitReaderReverse.js +41 -1
- package/dist/bitstream/bitReaderReverse.js.map +1 -1
- package/dist/bitstream/index.d.ts +1 -1
- package/dist/bitstream/index.js +1 -1
- package/dist/bitstream/index.js.map +1 -1
- package/dist/bitstream/reverseBitWriter.d.ts +15 -1
- package/dist/bitstream/reverseBitWriter.js +6 -7
- package/dist/bitstream/reverseBitWriter.js.map +1 -1
- package/dist/bitstream/varint.d.ts +2 -1
- package/dist/bitstream/varint.js +16 -8
- package/dist/bitstream/varint.js.map +1 -1
- package/dist/compress.js +8 -7
- package/dist/compress.js.map +1 -1
- package/dist/decode/block.d.ts +1 -0
- package/dist/decode/block.js +4 -0
- package/dist/decode/block.js.map +1 -1
- package/dist/decode/decompressFrame.js +25 -71
- package/dist/decode/decompressFrame.js.map +1 -1
- package/dist/decode/fusedSequences.d.ts +4 -5
- package/dist/decode/fusedSequences.js +403 -20
- package/dist/decode/fusedSequences.js.map +1 -1
- package/dist/decode/reconstruct.d.ts +0 -2
- package/dist/decode/reconstruct.js +87 -78
- package/dist/decode/reconstruct.js.map +1 -1
- package/dist/decode/sequences.js +19 -20
- package/dist/decode/sequences.js.map +1 -1
- package/dist/dictionary/compressorDictionary.d.ts +8 -0
- package/dist/dictionary/compressorDictionary.js +22 -14
- package/dist/dictionary/compressorDictionary.js.map +1 -1
- package/dist/encode/compressedBlock.d.ts +2 -2
- package/dist/encode/compressedBlock.js +107 -198
- package/dist/encode/compressedBlock.js.map +1 -1
- package/dist/encode/fastMatcher.js.map +1 -1
- package/dist/encode/frameWriter.js +5 -1
- package/dist/encode/frameWriter.js.map +1 -1
- package/dist/encode/lazyMatcher.js.map +1 -1
- package/dist/encode/literalsEncoder.d.ts +2 -1
- package/dist/encode/literalsEncoder.js +289 -47
- package/dist/encode/literalsEncoder.js.map +1 -1
- package/dist/encode/optimalParser.js.map +1 -1
- package/dist/encode/sequencePlanner.js.map +1 -1
- package/dist/entropy/fse.d.ts +1 -1
- package/dist/entropy/fse.js +21 -1
- package/dist/entropy/fse.js.map +1 -1
- package/dist/entropy/huffman.d.ts +1 -1
- package/dist/entropy/huffman.js +2 -1
- package/dist/entropy/huffman.js.map +1 -1
- package/dist/frame/frameHeader.js +1 -1
- package/dist/frame/skippable.js +7 -2
- package/dist/frame/skippable.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -143,7 +143,27 @@ All of the following run as part of the test suite (`pnpm test` / `pnpm vitest`)
|
|
|
143
143
|
|
|
144
144
|
Throughput and compression ratio are compared against Node’s built-in `node:zlib` zstd on a downloaded, local real-world corpus at compression level 6 (one entry per corpus file).
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
## Throughput (MB/s)
|
|
147
|
+
|
|
148
|
+
## Throughput (MB/s)
|
|
149
|
+
|
|
150
|
+
| Payload | Category | Level | Compress zstdify | Compress Node | Decompress zstdify | Decompress Node | Decompress fzstd | Decompress zstddec |
|
|
151
|
+
|-------------|------|----------|-------|------------------|---------------|-------------------|------------------|---------------------|
|
|
152
|
+
| war-and-peace-txt | text | 6 | 1.52 | 102.63 | 150.75 | 1019.58 | 256.78 | 922.89 |
|
|
153
|
+
| shakespeare-complete-txt | text | 6 | 1.35 | 96.08 | 142.93 | 970.29 | 240.50 | 887.62 |
|
|
154
|
+
| enwik8 | text | 6 | 1.70 | 120.36 | 149.69 | 1112.28 | 247.97 | 953.65 |
|
|
155
|
+
| linux-kernel-tar | archive | 6 | 2.72 | 177.01 | 232.84 | 1749.27 | 337.85 | 1448.23 |
|
|
156
|
+
| apollo17-flightplan-pdf | document | 6 | 5.18 | 272.59 | 444.49 | 2968.65 | 497.71 | 2417.05 |
|
|
157
|
+
|
|
158
|
+
## Compression ratio (compressed/original)
|
|
159
|
+
|
|
160
|
+
| Payload | Category | Level | zstdify | Node |
|
|
161
|
+
|-------------|----------|-------|---------|------|
|
|
162
|
+
| war-and-peace-txt | text | 6 | 0.4002 | 0.3280 |
|
|
163
|
+
| shakespeare-complete-txt | text | 6 | 0.4171 | 0.3480 |
|
|
164
|
+
| enwik8 | text | 6 | 0.3724 | 0.3248 |
|
|
165
|
+
| linux-kernel-tar | archive | 6 | 0.2259 | 0.1995 |
|
|
166
|
+
| apollo17-flightplan-pdf | document | 6 | 0.1315 | 0.1176 |
|
|
147
167
|
|
|
148
168
|
Before benchmarking, fetch local corpus files (downloaded and stored locally, not committed):
|
|
149
169
|
|
|
@@ -161,8 +181,8 @@ pnpm --filter zstdify-tests run bench:update
|
|
|
161
181
|
|
|
162
182
|
| Target | Raw | Gzip | Brotli |
|
|
163
183
|
|---|---:|---:|---:|
|
|
164
|
-
| zstdify/compress |
|
|
165
|
-
| zstdify/decompress |
|
|
184
|
+
| zstdify/compress | 28.82 KiB | 9.78 KiB | 8.83 KiB |
|
|
185
|
+
| zstdify/decompress | 35.13 KiB | 10.66 KiB | 9.41 KiB |
|
|
166
186
|
| zstddec decoder + wasm | 127.37 KiB | 49.69 KiB | 40.66 KiB |
|
|
167
187
|
|
|
168
188
|
To regenerate this snapshot:
|
|
@@ -190,7 +210,7 @@ pnpm make-release:cli
|
|
|
190
210
|
## Acknowledgements
|
|
191
211
|
|
|
192
212
|
This project is made possible by the original [zstd](https://github.com/facebook/zstd) project by Meta and its contributors.
|
|
193
|
-
The monorepo, project, and CLI structure were bootstrapped from [hdrify](https://github.com/bhouston/hdrify), which made this project much easier to build.
|
|
213
|
+
The monorepo, project, and CLI structure were bootstrapped from [hdrify](https://github.com/bhouston/hdrify), which made this project much easier to build. Many JavaScript optimization strategies were inspired by [fzstd](https://github.com/101arrowz/fzstd). We use [simple-zstd](https://www.npmjs.com/package/simple-zstd) for validation against the zstd cli tool.
|
|
194
214
|
|
|
195
215
|
# License
|
|
196
216
|
|
|
@@ -14,14 +14,29 @@ export declare class BitReaderReverse {
|
|
|
14
14
|
constructor(data: Uint8Array, startByteOffset: number, lengthBytes: number, skipBitsAtStart?: number);
|
|
15
15
|
/** Read n bits (1-32), LSB first from current position (reading backward) */
|
|
16
16
|
readBits(n: number): number;
|
|
17
|
+
/**
|
|
18
|
+
* Read n bits and throw if request crosses the logical stream start.
|
|
19
|
+
*
|
|
20
|
+
* Use strict reads for inputs that must fail fast on truncation/corruption.
|
|
21
|
+
* Keep readBits()/readBitsFast() for decode paths that intentionally rely on
|
|
22
|
+
* zstd-compatible zero-fill behavior near the stream start.
|
|
23
|
+
*/
|
|
24
|
+
readBitsStrict(n: number): number;
|
|
17
25
|
/**
|
|
18
26
|
* Fast path used by validated hot loops.
|
|
19
27
|
* Falls back to readBits() when the request crosses the logical stream start.
|
|
20
28
|
*/
|
|
21
29
|
readBitsFast(n: number): number;
|
|
30
|
+
/** Fast-path strict variant that forbids crossing stream start. */
|
|
31
|
+
readBitsFastStrict(n: number): number;
|
|
32
|
+
/**
|
|
33
|
+
* Hot-loop helper: read n bits quickly, returning 0 when n is 0.
|
|
34
|
+
*/
|
|
35
|
+
readBitsFastOrZero(n: number): number;
|
|
22
36
|
/** Skip trailing zero padding and end-mark bit from the stream tail. */
|
|
23
37
|
skipPadding(): void;
|
|
24
38
|
get position(): number;
|
|
39
|
+
get bitsRemaining(): number;
|
|
25
40
|
/** Skip the first n bits at the logical start (the end of the buffer when reading backward). */
|
|
26
41
|
skipBitsAtEnd(n: number): void;
|
|
27
42
|
/** Undo a previous readBits() by pushing the cursor forward. */
|
|
@@ -53,7 +53,9 @@ export class BitReaderReverse {
|
|
|
53
53
|
}
|
|
54
54
|
const low = word0 >>> bitInByte;
|
|
55
55
|
const highBits = n - (32 - bitInByte);
|
|
56
|
-
const word1 = hasEightBytes
|
|
56
|
+
const word1 = hasEightBytes
|
|
57
|
+
? readU32LEFast(this.data, byteIndex + 4)
|
|
58
|
+
: readU32LEBounded(this.data, byteIndex + 4);
|
|
57
59
|
const high = ((word1 & BIT_MASKS[highBits]) << (32 - bitInByte)) >>> 0;
|
|
58
60
|
const merged = (low | high) >>> 0;
|
|
59
61
|
return n === 32 ? merged : (merged & BIT_MASKS[n]) >>> 0;
|
|
@@ -71,6 +73,22 @@ export class BitReaderReverse {
|
|
|
71
73
|
}
|
|
72
74
|
return value;
|
|
73
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Read n bits and throw if request crosses the logical stream start.
|
|
78
|
+
*
|
|
79
|
+
* Use strict reads for inputs that must fail fast on truncation/corruption.
|
|
80
|
+
* Keep readBits()/readBitsFast() for decode paths that intentionally rely on
|
|
81
|
+
* zstd-compatible zero-fill behavior near the stream start.
|
|
82
|
+
*/
|
|
83
|
+
readBitsStrict(n) {
|
|
84
|
+
if (n < 1 || n > 32) {
|
|
85
|
+
throw new RangeError(`BitReaderReverse.readBitsStrict: n must be 1-32, got ${n}`);
|
|
86
|
+
}
|
|
87
|
+
if (n > this.bitsRemaining) {
|
|
88
|
+
throw new RangeError('BitReaderReverse: buffer underflow');
|
|
89
|
+
}
|
|
90
|
+
return this.readBits(n);
|
|
91
|
+
}
|
|
74
92
|
/**
|
|
75
93
|
* Fast path used by validated hot loops.
|
|
76
94
|
* Falls back to readBits() when the request crosses the logical stream start.
|
|
@@ -89,6 +107,25 @@ export class BitReaderReverse {
|
|
|
89
107
|
const word = byteIndex + 3 < this.dataLength ? readU32LEFast(this.data, byteIndex) : readU32LEBounded(this.data, byteIndex);
|
|
90
108
|
return ((word >>> bitInByte) & BIT_MASKS[n]) >>> 0;
|
|
91
109
|
}
|
|
110
|
+
/** Fast-path strict variant that forbids crossing stream start. */
|
|
111
|
+
readBitsFastStrict(n) {
|
|
112
|
+
if (n < 1 || n > 24) {
|
|
113
|
+
return this.readBitsStrict(n);
|
|
114
|
+
}
|
|
115
|
+
if (n > this.bitsRemaining) {
|
|
116
|
+
throw new RangeError('BitReaderReverse: buffer underflow');
|
|
117
|
+
}
|
|
118
|
+
return this.readBitsFast(n);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Hot-loop helper: read n bits quickly, returning 0 when n is 0.
|
|
122
|
+
*/
|
|
123
|
+
readBitsFastOrZero(n) {
|
|
124
|
+
if (n === 0) {
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
return this.readBitsFast(n);
|
|
128
|
+
}
|
|
92
129
|
/** Skip trailing zero padding and end-mark bit from the stream tail. */
|
|
93
130
|
skipPadding() {
|
|
94
131
|
if (this.endBit <= this.startBit) {
|
|
@@ -112,6 +149,9 @@ export class BitReaderReverse {
|
|
|
112
149
|
}
|
|
113
150
|
return (this.bitOffset - 1) >>> 3;
|
|
114
151
|
}
|
|
152
|
+
get bitsRemaining() {
|
|
153
|
+
return this.bitOffset - this.startBit;
|
|
154
|
+
}
|
|
115
155
|
/** Skip the first n bits at the logical start (the end of the buffer when reading backward). */
|
|
116
156
|
skipBitsAtEnd(n) {
|
|
117
157
|
if (n <= 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitReaderReverse.js","sourceRoot":"","sources":["../../src/bitstream/bitReaderReverse.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAgB,EAAE,GAAW,EAAU;IAC/D,OAAO,CACL,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CACrH,CAAC;AAAA,CACH;AAED,SAAS,aAAa,CAAC,IAAgB,EAAE,GAAW,EAAU;IAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,CACrG;AAED,MAAM,OAAO,gBAAgB;IACV,IAAI,CAAa;IACjB,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,MAAM,CAAS;IACxB,SAAS,CAAS;IAE1B,YAAY,IAAgB,EAAE,eAAuB,EAAE,WAAmB,EAAE,eAAe,GAAG,CAAC,EAAE;QAC/F,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,eAAe,GAAG,CAAC,GAAG,eAAe,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IAAA,CAC9B;IAED,6EAA6E;IAC7E,QAAQ,CAAC,CAAS,EAAU;QAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;QACrF,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAE9B,IAAI,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,cAAc,KAAK,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC;YACrC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAE,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACtD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC3G,IAAI,SAAS,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC;gBAClC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC;YAChC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"bitReaderReverse.js","sourceRoot":"","sources":["../../src/bitstream/bitReaderReverse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { BitReader } from './bitReader.js';
|
|
2
2
|
export { BitWriter } from './bitWriter.js';
|
|
3
|
-
export { encodeReverseBitstream } from './reverseBitWriter.js';
|
|
4
3
|
export { readU16LE, readU32LE, readU64LE } from './littleEndian.js';
|
|
4
|
+
export { encodeReverseBitstream } from './reverseBitWriter.js';
|
|
5
5
|
export { decodeVarint, encodeVarint } from './varint.js';
|
package/dist/bitstream/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { BitReader } from './bitReader.js';
|
|
2
2
|
export { BitWriter } from './bitWriter.js';
|
|
3
|
-
export { encodeReverseBitstream } from './reverseBitWriter.js';
|
|
4
3
|
export { readU16LE, readU32LE, readU64LE } from './littleEndian.js';
|
|
4
|
+
export { encodeReverseBitstream } from './reverseBitWriter.js';
|
|
5
5
|
export { decodeVarint, encodeVarint } from './varint.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bitstream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bitstream/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* LSB-first bit writer used for reverse zstd bitstreams.
|
|
3
|
+
* Callers must write symbols in reverse decode order.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ReverseBitWriter {
|
|
6
|
+
private buffer;
|
|
7
|
+
private outputSize;
|
|
8
|
+
private writePos;
|
|
9
|
+
private bitContainer;
|
|
10
|
+
private bitCount;
|
|
11
|
+
reset(bitLength: number): void;
|
|
12
|
+
writeBits(n: number, bits: number): void;
|
|
13
|
+
finish(): Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
export declare function encodeReverseBitstream(bitCounts: ArrayLike<number>, bitValues: ArrayLike<number>, writer?: ReverseBitWriter): Uint8Array;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* LSB-first bit writer used for reverse zstd bitstreams.
|
|
3
3
|
* Callers must write symbols in reverse decode order.
|
|
4
4
|
*/
|
|
5
|
-
class ReverseBitWriter {
|
|
5
|
+
export class ReverseBitWriter {
|
|
6
6
|
buffer = new Uint8Array(0);
|
|
7
7
|
outputSize = 0;
|
|
8
8
|
writePos = 0;
|
|
@@ -46,21 +46,20 @@ class ReverseBitWriter {
|
|
|
46
46
|
return this.buffer.slice(0, this.outputSize);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
export function encodeReverseBitstream(bitCounts, bitValues) {
|
|
49
|
+
export function encodeReverseBitstream(bitCounts, bitValues, writer = new ReverseBitWriter()) {
|
|
51
50
|
let bitLength = 1; // End marker bit.
|
|
52
51
|
for (let i = 0; i < bitCounts.length; i++) {
|
|
53
52
|
const n = bitCounts[i] ?? 0;
|
|
54
53
|
if (n > 0)
|
|
55
54
|
bitLength += n;
|
|
56
55
|
}
|
|
57
|
-
|
|
56
|
+
writer.reset(bitLength);
|
|
58
57
|
for (let i = bitCounts.length - 1; i >= 0; i--) {
|
|
59
58
|
const n = bitCounts[i] ?? 0;
|
|
60
59
|
if (n > 0)
|
|
61
|
-
|
|
60
|
+
writer.writeBits(n, bitValues[i] ?? 0);
|
|
62
61
|
}
|
|
63
|
-
|
|
64
|
-
return
|
|
62
|
+
writer.writeBits(1, 1);
|
|
63
|
+
return writer.finish();
|
|
65
64
|
}
|
|
66
65
|
//# sourceMappingURL=reverseBitWriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverseBitWriter.js","sourceRoot":"","sources":["../../src/bitstream/reverseBitWriter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,gBAAgB;
|
|
1
|
+
{"version":3,"file":"reverseBitWriter.js","sourceRoot":"","sources":["../../src/bitstream/reverseBitWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Variable-length integer (varint) decode/encode per zstd format.
|
|
3
|
-
*
|
|
3
|
+
* This implementation supports unsigned 32-bit values (1-5 bytes).
|
|
4
|
+
* Little-endian, 7 bits per byte, high bit = continue.
|
|
4
5
|
*/
|
|
5
6
|
export declare function decodeVarint(data: Uint8Array, offset: number): {
|
|
6
7
|
value: number;
|
package/dist/bitstream/varint.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Variable-length integer (varint) decode/encode per zstd format.
|
|
3
|
-
*
|
|
3
|
+
* This implementation supports unsigned 32-bit values (1-5 bytes).
|
|
4
|
+
* Little-endian, 7 bits per byte, high bit = continue.
|
|
4
5
|
*/
|
|
5
6
|
export function decodeVarint(data, offset) {
|
|
7
|
+
if (!Number.isInteger(offset) || offset < 0) {
|
|
8
|
+
throw new RangeError(`decodeVarint: offset must be a non-negative integer, got ${offset}`);
|
|
9
|
+
}
|
|
6
10
|
let value = 0;
|
|
7
11
|
let shift = 0;
|
|
8
12
|
let pos = offset;
|
|
9
|
-
for (let i = 0; i <
|
|
13
|
+
for (let i = 0; i < 5; i++) {
|
|
10
14
|
if (pos >= data.length) {
|
|
11
15
|
throw new RangeError('decodeVarint: truncated input');
|
|
12
16
|
}
|
|
@@ -14,18 +18,22 @@ export function decodeVarint(data, offset) {
|
|
|
14
18
|
if (byte === undefined)
|
|
15
19
|
throw new RangeError('decodeVarint: truncated input');
|
|
16
20
|
pos++;
|
|
17
|
-
|
|
21
|
+
const chunk = byte & 0x7f;
|
|
22
|
+
if (shift === 28 && chunk > 0x0f) {
|
|
23
|
+
throw new RangeError('decodeVarint: value too large for uint32');
|
|
24
|
+
}
|
|
25
|
+
value += chunk * 2 ** shift;
|
|
18
26
|
if ((byte & 0x80) === 0) {
|
|
19
|
-
return { value, bytesRead: pos - offset };
|
|
27
|
+
return { value: value >>> 0, bytesRead: pos - offset };
|
|
20
28
|
}
|
|
21
29
|
shift += 7;
|
|
22
|
-
if (shift >= 56) {
|
|
23
|
-
throw new RangeError('decodeVarint: value too large');
|
|
24
|
-
}
|
|
25
30
|
}
|
|
26
|
-
throw new RangeError('decodeVarint: exceeds
|
|
31
|
+
throw new RangeError('decodeVarint: exceeds 5 bytes for uint32');
|
|
27
32
|
}
|
|
28
33
|
export function encodeVarint(value) {
|
|
34
|
+
if (!Number.isInteger(value) || value < 0 || value > 0xffff_ffff) {
|
|
35
|
+
throw new RangeError(`encodeVarint: value must be a uint32, got ${value}`);
|
|
36
|
+
}
|
|
29
37
|
const bytes = [];
|
|
30
38
|
let v = value >>> 0;
|
|
31
39
|
do {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"varint.js","sourceRoot":"","sources":["../../src/bitstream/varint.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"varint.js","sourceRoot":"","sources":["../../src/bitstream/varint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,MAAc,EAAwC;IACnG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,UAAU,CAAC,4DAA4D,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,MAAM,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;QAC9E,GAAG,EAAE,CAAC;QACN,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1B,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;QACzD,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;AAAA,CAClE;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAc;IACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,WAAW,EAAE,CAAC;QACjE,MAAM,IAAI,UAAU,CAAC,6CAA6C,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;IAEpB,GAAG,CAAC;QACF,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,CAAC,MAAM,CAAC,CAAC;QACT,IAAI,CAAC,KAAK,CAAC;YAAE,IAAI,IAAI,IAAI,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAElB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAAA,CAC9B"}
|
package/dist/compress.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Compress input data using zstd.
|
|
3
3
|
* Level 0: raw blocks only (no compression, fast).
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { resolveDictionaryContextForCompression } from './dictionary/compressorDictionary.js';
|
|
6
6
|
import { writeRawBlock, writeRLEBlock } from './encode/blockWriter.js';
|
|
7
7
|
import { buildCompressedBlockPayload, writeCompressedBlock, } from './encode/compressedBlock.js';
|
|
8
8
|
import { writeFrameHeader } from './encode/frameWriter.js';
|
|
@@ -50,11 +50,10 @@ export function compress(input, options) {
|
|
|
50
50
|
const dictionary = options?.dictionary;
|
|
51
51
|
const dictionaryBytes = dictionary instanceof Uint8Array ? dictionary : dictionary?.bytes;
|
|
52
52
|
const providedDictionaryId = dictionary instanceof Uint8Array ? null : (dictionary?.id ?? null);
|
|
53
|
-
const
|
|
54
|
-
?
|
|
55
|
-
:
|
|
56
|
-
|
|
57
|
-
: providedDictionaryId;
|
|
53
|
+
const dictionaryContext = dictionaryBytes && dictionaryBytes.length > 0
|
|
54
|
+
? resolveDictionaryContextForCompression(dictionaryBytes, providedDictionaryId)
|
|
55
|
+
: null;
|
|
56
|
+
const dictionaryId = options?.noDictId ? null : (dictionaryContext?.dictionaryId ?? providedDictionaryId);
|
|
58
57
|
if (dictionaryId !== null && (!Number.isInteger(dictionaryId) || dictionaryId <= 0 || dictionaryId > 0xffff_ffff)) {
|
|
59
58
|
throw new ZstdError('dictionary.id must be a 32-bit positive integer', 'parameter_unsupported');
|
|
60
59
|
}
|
|
@@ -63,7 +62,9 @@ export function compress(input, options) {
|
|
|
63
62
|
let offset = 0;
|
|
64
63
|
const blockCount = input.length === 0 ? 1 : Math.ceil(input.length / BLOCK_MAX);
|
|
65
64
|
let blockIndex = 0;
|
|
66
|
-
let history =
|
|
65
|
+
let history = dictionaryContext && dictionaryContext.historyPrefix.length > 0
|
|
66
|
+
? dictionaryContext.historyPrefix.subarray(Math.max(0, dictionaryContext.historyPrefix.length - WINDOW_SIZE))
|
|
67
|
+
: new Uint8Array(0);
|
|
67
68
|
let repOffsets = [1, 4, 8];
|
|
68
69
|
const sequenceEntropyContext = { prevTables: null };
|
|
69
70
|
const sequencePlannerState = createSequencePlannerState();
|
package/dist/compress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"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"}
|
package/dist/decode/block.d.ts
CHANGED
package/dist/decode/block.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { ZstdError } from '../errors.js';
|
|
5
5
|
export const BLOCK_HEADER_SIZE = 3;
|
|
6
|
+
export const MAX_BLOCK_SIZE = 128 * 1024;
|
|
6
7
|
function readU24LE(data, offset) {
|
|
7
8
|
if (offset + 3 > data.length) {
|
|
8
9
|
throw new RangeError(`readU24LE: offset ${offset} + 3 exceeds length ${data.length}`);
|
|
@@ -23,6 +24,9 @@ export function parseBlockHeader(data, offset) {
|
|
|
23
24
|
if (blockType === 3) {
|
|
24
25
|
throw new ZstdError('Reserved block type', 'corruption_detected');
|
|
25
26
|
}
|
|
27
|
+
if (blockSize > MAX_BLOCK_SIZE) {
|
|
28
|
+
throw new ZstdError('Block size exceeds maximum', 'corruption_detected');
|
|
29
|
+
}
|
|
26
30
|
return { lastBlock, blockType, blockSize };
|
|
27
31
|
}
|
|
28
32
|
//# sourceMappingURL=block.js.map
|
package/dist/decode/block.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/decode/block.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/decode/block.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC;AAUzC,SAAS,SAAS,CAAC,IAAgB,EAAE,MAAc,EAAU;IAC3D,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,qBAAqB,MAAM,uBAAuB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAAA,CACjC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,MAAc,EAAe;IAC9E,IAAI,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CAAC,wBAAwB,EAAE,qBAAqB,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAc,CAAC;IAC9C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,SAAS,GAAG,cAAc,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,4BAA4B,EAAE,qBAAqB,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,CAC5C"}
|
|
@@ -5,13 +5,15 @@ import { readU32LE } from '../bitstream/littleEndian.js';
|
|
|
5
5
|
import { ZstdError } from '../errors.js';
|
|
6
6
|
import { validateContentChecksum } from '../frame/checksum.js';
|
|
7
7
|
import { parseBlockHeader } from './block.js';
|
|
8
|
+
import { decodeAndExecuteSequencesInto } from './fusedSequences.js';
|
|
8
9
|
import { decodeCompressedLiterals, decodeRawLiterals, decodeRLELiterals, decodeTreelessLiterals, parseLiteralsSectionHeader, } from './literals.js';
|
|
9
|
-
import { appendRangeToHistoryWindow, appendRLEToHistoryWindow, appendToHistoryWindow,
|
|
10
|
-
import { decodeAndExecuteSequencesInto, shouldUseFusedSequencePath } from './fusedSequences.js';
|
|
11
|
-
import { decodeSequences } from './sequences.js';
|
|
10
|
+
import { appendRangeToHistoryWindow, appendRLEToHistoryWindow, appendToHistoryWindow, getOrCreateHistoryWindow, } from './reconstruct.js';
|
|
12
11
|
export function decompressFrame(data, offset, header, dictionary, maxSize, validateChecksum = true, reuseContext, debugTrace) {
|
|
13
12
|
let pos = offset + 4 + header.headerSize;
|
|
14
13
|
const knownOutputSize = header.contentSize ?? null;
|
|
14
|
+
if (knownOutputSize !== null && maxSize !== undefined && knownOutputSize > maxSize) {
|
|
15
|
+
throw new ZstdError('Decompressed size exceeds maxSize', 'parameter_unsupported');
|
|
16
|
+
}
|
|
15
17
|
let outputBuffer = knownOutputSize !== null ? new Uint8Array(knownOutputSize) : new Uint8Array(0);
|
|
16
18
|
let totalSize = 0;
|
|
17
19
|
const repOffsets = dictionary?.repOffsets
|
|
@@ -20,9 +22,6 @@ export function decompressFrame(data, offset, header, dictionary, maxSize, valid
|
|
|
20
22
|
const history = getOrCreateHistoryWindow(header.windowSize, dictionary?.historyPrefix, reuseContext);
|
|
21
23
|
let prevHuffmanTable = dictionary?.huffmanTable ?? null;
|
|
22
24
|
let prevSeqTables = dictionary?.sequenceTables ?? null;
|
|
23
|
-
const decodeMode = reuseContext?._decodeMode ?? 'fast';
|
|
24
|
-
const useFastPath = decodeMode !== 'reference';
|
|
25
|
-
const useFusedSequences = reuseContext?._useFusedSequences !== false;
|
|
26
25
|
const ensureOutputCapacity = (additional) => {
|
|
27
26
|
const needed = totalSize + additional;
|
|
28
27
|
if (needed <= outputBuffer.length) {
|
|
@@ -84,6 +83,9 @@ export function decompressFrame(data, offset, header, dictionary, maxSize, valid
|
|
|
84
83
|
pos += 1;
|
|
85
84
|
}
|
|
86
85
|
else if (block.blockType === 2) {
|
|
86
|
+
if (pos + block.blockSize > data.length) {
|
|
87
|
+
throw new ZstdError('Compressed block truncated', 'corruption_detected');
|
|
88
|
+
}
|
|
87
89
|
const blockContent = data.subarray(pos, pos + block.blockSize);
|
|
88
90
|
const { header: litHeader, dataOffset: litDataOffset } = parseLiteralsSectionHeader(blockContent, 0);
|
|
89
91
|
if (onBlockDecoded) {
|
|
@@ -127,72 +129,24 @@ export function decompressFrame(data, offset, header, dictionary, maxSize, valid
|
|
|
127
129
|
}
|
|
128
130
|
}
|
|
129
131
|
else {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
llTableLog: seqResult.metadata.llTableLog,
|
|
147
|
-
ofTableLog: seqResult.metadata.ofTableLog,
|
|
148
|
-
mlTableLog: seqResult.metadata.mlTableLog,
|
|
149
|
-
repeatOffsetCandidateCount: seqResult.metadata.repeatOffsetCandidateCount,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
if (seqResult.sequences.length === 0) {
|
|
153
|
-
appendOutput(literals);
|
|
154
|
-
if (!block.lastBlock) {
|
|
155
|
-
appendToHistoryWindow(history, literals);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
totalSize += written;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
const seqResult = decodeSequences(blockContent, litBytesConsumed, seqSectionSize, prevSeqTables, reuseContext?._sequences);
|
|
164
|
-
if (reuseContext) {
|
|
165
|
-
reuseContext._sequences = seqResult.sequences;
|
|
166
|
-
}
|
|
167
|
-
prevSeqTables = seqResult.tables;
|
|
168
|
-
if (onBlockDecoded) {
|
|
169
|
-
blockSequencesInfo = {
|
|
170
|
-
numSequences: seqResult.metadata.numSequences,
|
|
171
|
-
llMode: seqResult.metadata.llMode,
|
|
172
|
-
ofMode: seqResult.metadata.ofMode,
|
|
173
|
-
mlMode: seqResult.metadata.mlMode,
|
|
174
|
-
llTableLog: seqResult.metadata.llTableLog,
|
|
175
|
-
ofTableLog: seqResult.metadata.ofTableLog,
|
|
176
|
-
mlTableLog: seqResult.metadata.mlTableLog,
|
|
177
|
-
repeatOffsetCandidateCount: seqResult.metadata.repeatOffsetCandidateCount,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
if (seqResult.sequences.length === 0) {
|
|
181
|
-
appendOutput(literals);
|
|
182
|
-
if (!block.lastBlock) {
|
|
183
|
-
appendToHistoryWindow(history, literals);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
const decodedSize = literals.length + seqResult.metadata.totalMatchLength;
|
|
188
|
-
ensureOutputCapacity(decodedSize);
|
|
189
|
-
const start = totalSize;
|
|
190
|
-
const written = useFastPath
|
|
191
|
-
? executeSequencesIntoFast(literals, seqResult.sequences, header.windowSize, outputBuffer, start, repOffsets, history, !block.lastBlock)
|
|
192
|
-
: executeSequencesInto(literals, seqResult.sequences, header.windowSize, outputBuffer, start, repOffsets, history, !block.lastBlock);
|
|
193
|
-
totalSize += written;
|
|
194
|
-
}
|
|
132
|
+
// Decoded block output is bounded by zstd block max size (128 KiB).
|
|
133
|
+
ensureOutputCapacity(128 * 1024);
|
|
134
|
+
const start = totalSize;
|
|
135
|
+
const { written, tables, metadata } = decodeAndExecuteSequencesInto(blockContent, litBytesConsumed, seqSectionSize, prevSeqTables, literals, header.windowSize, outputBuffer, start, repOffsets, history, !block.lastBlock, !!onBlockDecoded);
|
|
136
|
+
prevSeqTables = tables;
|
|
137
|
+
if (onBlockDecoded) {
|
|
138
|
+
blockSequencesInfo = {
|
|
139
|
+
numSequences: metadata.numSequences,
|
|
140
|
+
llMode: metadata.llMode,
|
|
141
|
+
ofMode: metadata.ofMode,
|
|
142
|
+
mlMode: metadata.mlMode,
|
|
143
|
+
llTableLog: metadata.llTableLog,
|
|
144
|
+
ofTableLog: metadata.ofTableLog,
|
|
145
|
+
mlTableLog: metadata.mlTableLog,
|
|
146
|
+
repeatOffsetCandidateCount: metadata.repeatOffsetCandidateCount,
|
|
147
|
+
};
|
|
195
148
|
}
|
|
149
|
+
totalSize += written;
|
|
196
150
|
}
|
|
197
151
|
pos += block.blockSize;
|
|
198
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompressFrame.js","sourceRoot":"","sources":["../../src/decode/decompressFrame.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EAErB,
|
|
1
|
+
{"version":3,"file":"decompressFrame.js","sourceRoot":"","sources":["../../src/decode/decompressFrame.ts"],"names":[],"mappings":"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"}
|