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.
Files changed (53) hide show
  1. package/README.md +24 -4
  2. package/dist/bitstream/bitReaderReverse.d.ts +15 -0
  3. package/dist/bitstream/bitReaderReverse.js +41 -1
  4. package/dist/bitstream/bitReaderReverse.js.map +1 -1
  5. package/dist/bitstream/index.d.ts +1 -1
  6. package/dist/bitstream/index.js +1 -1
  7. package/dist/bitstream/index.js.map +1 -1
  8. package/dist/bitstream/reverseBitWriter.d.ts +15 -1
  9. package/dist/bitstream/reverseBitWriter.js +6 -7
  10. package/dist/bitstream/reverseBitWriter.js.map +1 -1
  11. package/dist/bitstream/varint.d.ts +2 -1
  12. package/dist/bitstream/varint.js +16 -8
  13. package/dist/bitstream/varint.js.map +1 -1
  14. package/dist/compress.js +8 -7
  15. package/dist/compress.js.map +1 -1
  16. package/dist/decode/block.d.ts +1 -0
  17. package/dist/decode/block.js +4 -0
  18. package/dist/decode/block.js.map +1 -1
  19. package/dist/decode/decompressFrame.js +25 -71
  20. package/dist/decode/decompressFrame.js.map +1 -1
  21. package/dist/decode/fusedSequences.d.ts +4 -5
  22. package/dist/decode/fusedSequences.js +403 -20
  23. package/dist/decode/fusedSequences.js.map +1 -1
  24. package/dist/decode/reconstruct.d.ts +0 -2
  25. package/dist/decode/reconstruct.js +87 -78
  26. package/dist/decode/reconstruct.js.map +1 -1
  27. package/dist/decode/sequences.js +19 -20
  28. package/dist/decode/sequences.js.map +1 -1
  29. package/dist/dictionary/compressorDictionary.d.ts +8 -0
  30. package/dist/dictionary/compressorDictionary.js +22 -14
  31. package/dist/dictionary/compressorDictionary.js.map +1 -1
  32. package/dist/encode/compressedBlock.d.ts +2 -2
  33. package/dist/encode/compressedBlock.js +107 -198
  34. package/dist/encode/compressedBlock.js.map +1 -1
  35. package/dist/encode/fastMatcher.js.map +1 -1
  36. package/dist/encode/frameWriter.js +5 -1
  37. package/dist/encode/frameWriter.js.map +1 -1
  38. package/dist/encode/lazyMatcher.js.map +1 -1
  39. package/dist/encode/literalsEncoder.d.ts +2 -1
  40. package/dist/encode/literalsEncoder.js +289 -47
  41. package/dist/encode/literalsEncoder.js.map +1 -1
  42. package/dist/encode/optimalParser.js.map +1 -1
  43. package/dist/encode/sequencePlanner.js.map +1 -1
  44. package/dist/entropy/fse.d.ts +1 -1
  45. package/dist/entropy/fse.js +21 -1
  46. package/dist/entropy/fse.js.map +1 -1
  47. package/dist/entropy/huffman.d.ts +1 -1
  48. package/dist/entropy/huffman.js +2 -1
  49. package/dist/entropy/huffman.js.map +1 -1
  50. package/dist/frame/frameHeader.js +1 -1
  51. package/dist/frame/skippable.js +7 -2
  52. package/dist/frame/skippable.js.map +1 -1
  53. 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
- ![Benchmark: compression and decompression throughput](packages/zstdify-tests/benchmarks/latest.svg)
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 | 13.90 KiB | 5.27 KiB | 4.75 KiB |
165
- | zstdify/decompress | 27.70 KiB | 8.63 KiB | 7.67 KiB |
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 ? readU32LEFast(this.data, byteIndex + 4) : readU32LEBounded(this.data, byteIndex + 4);
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":"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"}
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';
@@ -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,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
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
- export declare function encodeReverseBitstream(bitCounts: ArrayLike<number>, bitValues: ArrayLike<number>): Uint8Array;
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
- const sharedReverseBitWriter = new ReverseBitWriter();
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
- sharedReverseBitWriter.reset(bitLength);
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
- sharedReverseBitWriter.writeBits(n, bitValues[i] ?? 0);
60
+ writer.writeBits(n, bitValues[i] ?? 0);
62
61
  }
63
- sharedReverseBitWriter.writeBits(1, 1);
64
- return sharedReverseBitWriter.finish();
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":"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"}
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
- * 1-9 bytes, little-endian, 7 bits per byte, high bit = continue.
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;
@@ -1,12 +1,16 @@
1
1
  /**
2
2
  * Variable-length integer (varint) decode/encode per zstd format.
3
- * 1-9 bytes, little-endian, 7 bits per byte, high bit = continue.
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 < 9; 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
- value |= (byte & 0x7f) << shift;
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 9 bytes');
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;;;GAGG;AAEH,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,MAAc,EAAwC;IACnG,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,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;QAC5C,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;AAAA,CACvD;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAc;IACtD,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"}
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 { resolveDictionaryIdForCompression } from './dictionary/compressorDictionary.js';
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 dictionaryId = options?.noDictId
54
- ? null
55
- : dictionaryBytes && dictionaryBytes.length > 0
56
- ? resolveDictionaryIdForCompression(dictionaryBytes, providedDictionaryId)
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 = new Uint8Array(0);
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();
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * Block header parsing and block type dispatch.
3
3
  */
4
4
  export declare const BLOCK_HEADER_SIZE = 3;
5
+ export declare const MAX_BLOCK_SIZE: number;
5
6
  export type BlockType = 0 | 1 | 2 | 3;
6
7
  export interface BlockHeader {
7
8
  lastBlock: boolean;
@@ -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
@@ -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;AAUnC,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;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,CAC5C"}
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, executeSequencesInto, executeSequencesIntoFast, getOrCreateHistoryWindow, } from './reconstruct.js';
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
- const canUseFusedPath = useFastPath &&
131
- useFusedSequences &&
132
- shouldUseFusedSequencePath(seqSectionSize, literals.length, header.windowSize, !block.lastBlock);
133
- if (canUseFusedPath) {
134
- const start = totalSize;
135
- const { written, seqResult } = decodeAndExecuteSequencesInto(blockContent, litBytesConsumed, seqSectionSize, prevSeqTables, reuseContext?._sequences, literals, header.windowSize, ensureOutputCapacity, () => outputBuffer, start, repOffsets, history, !block.lastBlock);
136
- if (reuseContext) {
137
- reuseContext._sequences = seqResult.sequences;
138
- }
139
- prevSeqTables = seqResult.tables;
140
- if (onBlockDecoded) {
141
- blockSequencesInfo = {
142
- numSequences: seqResult.metadata.numSequences,
143
- llMode: seqResult.metadata.llMode,
144
- ofMode: seqResult.metadata.ofMode,
145
- mlMode: seqResult.metadata.mlMode,
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":"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"}
1
+ {"version":3,"file":"decompressFrame.js","sourceRoot":"","sources":["../../src/decode/decompressFrame.ts"],"names":[],"mappings":"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"}