zstdify 1.0.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 (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/bitstream/bitReader.d.ts +26 -0
  4. package/dist/bitstream/bitReader.js +86 -0
  5. package/dist/bitstream/bitReader.js.map +1 -0
  6. package/dist/bitstream/bitReader.test.d.ts +1 -0
  7. package/dist/bitstream/bitReader.test.js +47 -0
  8. package/dist/bitstream/bitReader.test.js.map +1 -0
  9. package/dist/bitstream/bitReaderReverse.d.ts +23 -0
  10. package/dist/bitstream/bitReaderReverse.js +84 -0
  11. package/dist/bitstream/bitReaderReverse.js.map +1 -0
  12. package/dist/bitstream/bitReaderReverse.test.d.ts +1 -0
  13. package/dist/bitstream/bitReaderReverse.test.js +49 -0
  14. package/dist/bitstream/bitReaderReverse.test.js.map +1 -0
  15. package/dist/bitstream/bitWriter.d.ts +15 -0
  16. package/dist/bitstream/bitWriter.js +47 -0
  17. package/dist/bitstream/bitWriter.js.map +1 -0
  18. package/dist/bitstream/index.d.ts +4 -0
  19. package/dist/bitstream/index.js +5 -0
  20. package/dist/bitstream/index.js.map +1 -0
  21. package/dist/bitstream/littleEndian.d.ts +7 -0
  22. package/dist/bitstream/littleEndian.js +45 -0
  23. package/dist/bitstream/littleEndian.js.map +1 -0
  24. package/dist/bitstream/littleEndian.test.d.ts +1 -0
  25. package/dist/bitstream/littleEndian.test.js +21 -0
  26. package/dist/bitstream/littleEndian.test.js.map +1 -0
  27. package/dist/bitstream/varint.d.ts +9 -0
  28. package/dist/bitstream/varint.js +40 -0
  29. package/dist/bitstream/varint.js.map +1 -0
  30. package/dist/bitstream/varint.test.d.ts +1 -0
  31. package/dist/bitstream/varint.test.js +25 -0
  32. package/dist/bitstream/varint.test.js.map +1 -0
  33. package/dist/compress.d.ts +9 -0
  34. package/dist/compress.js +74 -0
  35. package/dist/compress.js.map +1 -0
  36. package/dist/decode/block.d.ts +11 -0
  37. package/dist/decode/block.js +28 -0
  38. package/dist/decode/block.js.map +1 -0
  39. package/dist/decode/block.test.d.ts +1 -0
  40. package/dist/decode/block.test.js +26 -0
  41. package/dist/decode/block.test.js.map +1 -0
  42. package/dist/decode/decompressFrame.d.ts +9 -0
  43. package/dist/decode/decompressFrame.js +147 -0
  44. package/dist/decode/decompressFrame.js.map +1 -0
  45. package/dist/decode/literals.corruption.test.d.ts +1 -0
  46. package/dist/decode/literals.corruption.test.js +26 -0
  47. package/dist/decode/literals.corruption.test.js.map +1 -0
  48. package/dist/decode/literals.d.ts +49 -0
  49. package/dist/decode/literals.js +300 -0
  50. package/dist/decode/literals.js.map +1 -0
  51. package/dist/decode/literals.test.d.ts +1 -0
  52. package/dist/decode/literals.test.js +52 -0
  53. package/dist/decode/literals.test.js.map +1 -0
  54. package/dist/decode/reconstruct.d.ts +13 -0
  55. package/dist/decode/reconstruct.js +80 -0
  56. package/dist/decode/reconstruct.js.map +1 -0
  57. package/dist/decode/reconstruct.test.d.ts +1 -0
  58. package/dist/decode/reconstruct.test.js +42 -0
  59. package/dist/decode/reconstruct.test.js.map +1 -0
  60. package/dist/decode/sequences.corruption.test.d.ts +1 -0
  61. package/dist/decode/sequences.corruption.test.js +32 -0
  62. package/dist/decode/sequences.corruption.test.js.map +1 -0
  63. package/dist/decode/sequences.d.ts +21 -0
  64. package/dist/decode/sequences.js +222 -0
  65. package/dist/decode/sequences.js.map +1 -0
  66. package/dist/decode/sequences.level1.test.d.ts +1 -0
  67. package/dist/decode/sequences.level1.test.js +35 -0
  68. package/dist/decode/sequences.level1.test.js.map +1 -0
  69. package/dist/decompress.d.ts +11 -0
  70. package/dist/decompress.js +59 -0
  71. package/dist/decompress.js.map +1 -0
  72. package/dist/dictionary/decoderDictionary.d.ts +15 -0
  73. package/dist/dictionary/decoderDictionary.js +116 -0
  74. package/dist/dictionary/decoderDictionary.js.map +1 -0
  75. package/dist/dictionary/decoderDictionary.test.d.ts +1 -0
  76. package/dist/dictionary/decoderDictionary.test.js +87 -0
  77. package/dist/dictionary/decoderDictionary.test.js.map +1 -0
  78. package/dist/encode/blockWriter.d.ts +5 -0
  79. package/dist/encode/blockWriter.js +27 -0
  80. package/dist/encode/blockWriter.js.map +1 -0
  81. package/dist/encode/blockWriter.test.d.ts +1 -0
  82. package/dist/encode/blockWriter.test.js +31 -0
  83. package/dist/encode/blockWriter.test.js.map +1 -0
  84. package/dist/encode/compressedBlock.d.ts +3 -0
  85. package/dist/encode/compressedBlock.js +449 -0
  86. package/dist/encode/compressedBlock.js.map +1 -0
  87. package/dist/encode/compressedBlock.test.d.ts +1 -0
  88. package/dist/encode/compressedBlock.test.js +63 -0
  89. package/dist/encode/compressedBlock.test.js.map +1 -0
  90. package/dist/encode/frameWriter.d.ts +4 -0
  91. package/dist/encode/frameWriter.js +34 -0
  92. package/dist/encode/frameWriter.js.map +1 -0
  93. package/dist/encode/frameWriter.test.d.ts +1 -0
  94. package/dist/encode/frameWriter.test.js +38 -0
  95. package/dist/encode/frameWriter.test.js.map +1 -0
  96. package/dist/encode/greedySequences.d.ts +7 -0
  97. package/dist/encode/greedySequences.js +82 -0
  98. package/dist/encode/greedySequences.js.map +1 -0
  99. package/dist/encode/greedySequences.test.d.ts +1 -0
  100. package/dist/encode/greedySequences.test.js +33 -0
  101. package/dist/encode/greedySequences.test.js.map +1 -0
  102. package/dist/entropy/fse.d.ts +33 -0
  103. package/dist/entropy/fse.js +217 -0
  104. package/dist/entropy/fse.js.map +1 -0
  105. package/dist/entropy/fse.test.d.ts +1 -0
  106. package/dist/entropy/fse.test.js +41 -0
  107. package/dist/entropy/fse.test.js.map +1 -0
  108. package/dist/entropy/huffman.d.ts +24 -0
  109. package/dist/entropy/huffman.js +70 -0
  110. package/dist/entropy/huffman.js.map +1 -0
  111. package/dist/entropy/huffman.test.d.ts +1 -0
  112. package/dist/entropy/huffman.test.js +22 -0
  113. package/dist/entropy/huffman.test.js.map +1 -0
  114. package/dist/entropy/index.d.ts +6 -0
  115. package/dist/entropy/index.js +5 -0
  116. package/dist/entropy/index.js.map +1 -0
  117. package/dist/entropy/predefined.d.ts +10 -0
  118. package/dist/entropy/predefined.js +18 -0
  119. package/dist/entropy/predefined.js.map +1 -0
  120. package/dist/entropy/weights.d.ts +20 -0
  121. package/dist/entropy/weights.js +108 -0
  122. package/dist/entropy/weights.js.map +1 -0
  123. package/dist/entropy/weights.test.d.ts +1 -0
  124. package/dist/entropy/weights.test.js +38 -0
  125. package/dist/entropy/weights.test.js.map +1 -0
  126. package/dist/errors.d.ts +7 -0
  127. package/dist/errors.js +13 -0
  128. package/dist/errors.js.map +1 -0
  129. package/dist/errors.test.d.ts +1 -0
  130. package/dist/errors.test.js +16 -0
  131. package/dist/errors.test.js.map +1 -0
  132. package/dist/frame/checksum.d.ts +17 -0
  133. package/dist/frame/checksum.js +94 -0
  134. package/dist/frame/checksum.js.map +1 -0
  135. package/dist/frame/checksum.test.d.ts +1 -0
  136. package/dist/frame/checksum.test.js +28 -0
  137. package/dist/frame/checksum.test.js.map +1 -0
  138. package/dist/frame/frameHeader.d.ts +26 -0
  139. package/dist/frame/frameHeader.js +127 -0
  140. package/dist/frame/frameHeader.js.map +1 -0
  141. package/dist/frame/frameHeader.test.d.ts +1 -0
  142. package/dist/frame/frameHeader.test.js +83 -0
  143. package/dist/frame/frameHeader.test.js.map +1 -0
  144. package/dist/frame/index.d.ts +4 -0
  145. package/dist/frame/index.js +4 -0
  146. package/dist/frame/index.js.map +1 -0
  147. package/dist/frame/skippable.d.ts +12 -0
  148. package/dist/frame/skippable.js +27 -0
  149. package/dist/frame/skippable.js.map +1 -0
  150. package/dist/frame/skippable.test.d.ts +1 -0
  151. package/dist/frame/skippable.test.js +35 -0
  152. package/dist/frame/skippable.test.js.map +1 -0
  153. package/dist/index.d.ts +2 -0
  154. package/dist/index.js +3 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/tsconfig.tsbuildinfo +1 -0
  157. package/package.json +38 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockWriter.js","sourceRoot":"","sources":["../../src/encode/blockWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS,UAAU,CAAC,GAAe,EAAE,MAAc,EAAE,KAAa,EAAQ;IACxE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;AAAA,CACxC;AAED,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,MAAc,EAAE,IAAY,EAAE,IAAa,EAAc;IACvG,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5D,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC;AAAA,CACf;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,IAAa,EAAc;IACnF,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5D,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACxB,OAAO,MAAM,CAAC;AAAA,CACf"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { writeRawBlock, writeRLEBlock } from './blockWriter.js';
3
+ describe('blockWriter', () => {
4
+ it('writeRawBlock produces correct header and payload', () => {
5
+ const data = new Uint8Array([0x61, 0x62, 0x63]);
6
+ const block = writeRawBlock(data, 0, 3, true);
7
+ expect(block.length).toBe(6);
8
+ // Block header: last=1, type=0 (raw), size=3 -> (1 | 0<<1 | 3<<3) = 25 LE = 19 00 00
9
+ expect(block[0]).toBe(25);
10
+ expect(block[1]).toBe(0);
11
+ expect(block[2]).toBe(0);
12
+ expect(block[3]).toBe(0x61);
13
+ expect(block[4]).toBe(0x62);
14
+ expect(block[5]).toBe(0x63);
15
+ });
16
+ it('writeRawBlock with last=false sets last bit 0', () => {
17
+ const data = new Uint8Array([1]);
18
+ const block = writeRawBlock(data, 0, 1, false);
19
+ expect(block[0]).toBe(1 << 3); // last=0, type=0, size=1
20
+ });
21
+ it('writeRLEBlock produces correct header and single byte', () => {
22
+ const block = writeRLEBlock(0x61, 10, true);
23
+ expect(block.length).toBe(4);
24
+ // last=1, type=1 (RLE), size=10 -> (1 | 2 | 80) = 83 LE = 53 00 00
25
+ expect(block[0]).toBe(83);
26
+ expect(block[1]).toBe(0);
27
+ expect(block[2]).toBe(0);
28
+ expect(block[3]).toBe(0x61);
29
+ });
30
+ });
31
+ //# sourceMappingURL=blockWriter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockWriter.test.js","sourceRoot":"","sources":["../../src/encode/blockWriter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC;IAC5B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,qFAAqF;QACrF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAA,CAC7B,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB;IAA1B,CAC/B,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,mEAAmE;QACnE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAA,CAC7B,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Sequence } from '../decode/reconstruct.js';
2
+ export declare function buildCompressedBlockPayload(literals: Uint8Array, sequences: Sequence[]): Uint8Array | null;
3
+ export declare function writeCompressedBlock(payload: Uint8Array, last: boolean): Uint8Array;
@@ -0,0 +1,449 @@
1
+ import { BitWriter } from '../bitstream/bitWriter.js';
2
+ import { buildFSEDecodeTable } from '../entropy/fse.js';
3
+ import { buildHuffmanDecodeTable, weightsToNumBits } from '../entropy/huffman.js';
4
+ import { LITERALS_LENGTH_DEFAULT_DISTRIBUTION, LITERALS_LENGTH_TABLE_LOG, MATCH_LENGTH_DEFAULT_DISTRIBUTION, MATCH_LENGTH_TABLE_LOG, OFFSET_CODE_DEFAULT_DISTRIBUTION, OFFSET_CODE_TABLE_LOG, } from '../entropy/predefined.js';
5
+ const LL_BASELINE = [
6
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 18, 20, 22, 24, 28, 32, 40, 48, 64, 128, 256, 512, 1024, 2048,
7
+ 4096, 8192, 16384, 32768, 65536,
8
+ ];
9
+ const LL_NUMBITS = [
10
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
11
+ ];
12
+ const ML_BASELINE = [
13
+ 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,
14
+ 34, 35, 37, 39, 41, 43, 47, 51, 59, 67, 83, 99, 131, 259, 515, 1027, 2051, 4099, 8195, 16387, 32771, 65539,
15
+ ];
16
+ const ML_NUMBITS = [
17
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3,
18
+ 3, 4, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
19
+ ];
20
+ function writeU24LE(arr, offset, value) {
21
+ arr[offset] = value & 0xff;
22
+ arr[offset + 1] = (value >> 8) & 0xff;
23
+ arr[offset + 2] = (value >> 16) & 0xff;
24
+ }
25
+ function encodeReverseBitstream(readOrder) {
26
+ const bits = [];
27
+ const writeBitsLSB = (n, value) => {
28
+ for (let i = 0; i < n; i++) {
29
+ bits.push((value >>> i) & 1);
30
+ }
31
+ };
32
+ for (let i = readOrder.length - 1; i >= 0; i--) {
33
+ const chunk = readOrder[i];
34
+ if (!chunk || chunk.n <= 0)
35
+ continue;
36
+ writeBitsLSB(chunk.n, chunk.value);
37
+ }
38
+ // Append end marker, then zero-fill above marker so decoder skips them.
39
+ bits.push(1);
40
+ while ((bits.length & 7) !== 0) {
41
+ bits.push(0);
42
+ }
43
+ const out = new Uint8Array(Math.ceil(bits.length / 8));
44
+ for (let i = 0; i < bits.length; i++) {
45
+ if ((bits[i] ?? 0) !== 0) {
46
+ const idx = i >>> 3;
47
+ out[idx] = ((out[idx] ?? 0) | (1 << (i & 7))) & 0xff;
48
+ }
49
+ }
50
+ return out;
51
+ }
52
+ function findLengthCode(value, baseline, extraBits, directMax, directBias) {
53
+ if (value <= directMax) {
54
+ const code = value - directBias;
55
+ if (code < 0)
56
+ return null;
57
+ return { code, extra: 0, extraN: 0 };
58
+ }
59
+ for (let code = 0; code < baseline.length; code++) {
60
+ const base = baseline[code] ?? 0;
61
+ const n = extraBits[code] ?? 0;
62
+ if (value >= base && value < base + (1 << n)) {
63
+ return { code, extra: value - base, extraN: n };
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ function buildSingleSymbolCompressedLiterals(literals) {
69
+ if (literals.length === 0 || literals.length > 1023)
70
+ return null;
71
+ const sym = literals[0] ?? 0;
72
+ for (let i = 1; i < literals.length; i++) {
73
+ if ((literals[i] ?? 0) !== sym)
74
+ return null;
75
+ }
76
+ if (sym > 127)
77
+ return null;
78
+ const numWeights = sym + 1;
79
+ if (numWeights < 1 || numWeights > 128)
80
+ return null;
81
+ const weights = new Array(numWeights).fill(0);
82
+ weights[sym] = 1;
83
+ let partialSum = 0;
84
+ for (const w of weights) {
85
+ if (w > 0)
86
+ partialSum += 1 << (w - 1);
87
+ }
88
+ if (partialSum === 0)
89
+ return null;
90
+ const maxNumBits = 32 - Math.clz32(partialSum);
91
+ const total = 1 << maxNumBits;
92
+ const remainder = total - partialSum;
93
+ if (remainder <= 0 || (remainder & (remainder - 1)) !== 0)
94
+ return null;
95
+ const lastWeight = 32 - Math.clz32(remainder);
96
+ const fullWeights = [...weights, lastWeight];
97
+ while (fullWeights.length < 256)
98
+ fullWeights.push(0);
99
+ const numBits = weightsToNumBits(fullWeights, maxNumBits);
100
+ const table = buildHuffmanDecodeTable(numBits, maxNumBits);
101
+ const symbolCode = table.findIndex((row) => row?.symbol === sym);
102
+ if (symbolCode < 0)
103
+ return null;
104
+ const stream = encodeReverseBitstream(new Array(literals.length).fill(0).map(() => ({ n: maxNumBits, value: symbolCode })));
105
+ const directHeader = 127 + numWeights;
106
+ const weightWriter = new BitWriter();
107
+ for (let i = 0; i < weights.length; i += 2) {
108
+ const hi = weights[i] ?? 0;
109
+ const lo = weights[i + 1] ?? 0;
110
+ weightWriter.writeBits(8, ((hi & 0xf) << 4) | (lo & 0xf));
111
+ }
112
+ const weightBytes = weightWriter.flush();
113
+ const compressedSize = 1 + weightBytes.length + stream.length;
114
+ if (compressedSize > 1023)
115
+ return null;
116
+ const b0 = (2 | (0 << 2) | ((literals.length & 0x0f) << 4)) & 0xff;
117
+ const b1 = (((literals.length >> 4) & 0x3f) | ((compressedSize & 0x03) << 6)) & 0xff;
118
+ const b2 = (compressedSize >> 2) & 0xff;
119
+ const out = new Uint8Array(3 + 1 + weightBytes.length + stream.length);
120
+ out[0] = b0;
121
+ out[1] = b1;
122
+ out[2] = b2;
123
+ out[3] = directHeader & 0xff;
124
+ out.set(weightBytes, 4);
125
+ out.set(stream, 4 + weightBytes.length);
126
+ return out;
127
+ }
128
+ function splitPowerTerms(targetSum, count) {
129
+ if (count < 1 || count > targetSum)
130
+ return null;
131
+ const terms = [];
132
+ for (let bit = 31; bit >= 0; bit--) {
133
+ const value = 1 << bit;
134
+ if ((targetSum & value) !== 0) {
135
+ terms.push(value);
136
+ }
137
+ }
138
+ while (terms.length < count) {
139
+ let splitIndex = -1;
140
+ let largest = 0;
141
+ for (let i = 0; i < terms.length; i++) {
142
+ const term = terms[i] ?? 0;
143
+ if (term > largest) {
144
+ largest = term;
145
+ splitIndex = i;
146
+ }
147
+ }
148
+ if (splitIndex < 0 || largest <= 1) {
149
+ return null;
150
+ }
151
+ const half = largest >>> 1;
152
+ terms.splice(splitIndex, 1, half, half);
153
+ }
154
+ return terms;
155
+ }
156
+ function buildGeneralCompressedLiterals(literals) {
157
+ if (literals.length === 0 || literals.length > 1023)
158
+ return null;
159
+ const symbols = new Set();
160
+ for (const byte of literals) {
161
+ symbols.add(byte);
162
+ }
163
+ if (symbols.size === 0 || symbols.size > 128)
164
+ return null;
165
+ const sortedSymbols = [...symbols].sort((a, b) => a - b);
166
+ const maxSymbol = sortedSymbols[sortedSymbols.length - 1] ?? 0;
167
+ if (maxSymbol > 127)
168
+ return null;
169
+ // Construct a valid direct-weight table over symbols <= 127.
170
+ const partialTarget = 128; // maxNumBits=8 => total 256, remainder is 128 (power of two).
171
+ const contributions = splitPowerTerms(partialTarget, sortedSymbols.length);
172
+ if (!contributions)
173
+ return null;
174
+ contributions.sort((a, b) => b - a);
175
+ const weights = new Array(maxSymbol + 1).fill(0);
176
+ for (let i = 0; i < sortedSymbols.length; i++) {
177
+ const symbol = sortedSymbols[i] ?? 0;
178
+ const contribution = contributions[i] ?? 1;
179
+ const weight = 32 - Math.clz32(contribution);
180
+ if (weight < 1 || weight > 15)
181
+ return null;
182
+ weights[symbol] = weight;
183
+ }
184
+ const fullWeights = [...weights, 8];
185
+ while (fullWeights.length < 256)
186
+ fullWeights.push(0);
187
+ const numBits = weightsToNumBits(fullWeights, 8);
188
+ const table = buildHuffmanDecodeTable(numBits, 8);
189
+ const symbolCode = new Map();
190
+ for (const symbol of sortedSymbols) {
191
+ const code = table.findIndex((row) => row?.symbol === symbol);
192
+ if (code < 0)
193
+ return null;
194
+ symbolCode.set(symbol, code);
195
+ }
196
+ const stream = encodeReverseBitstream(new Array(literals.length).fill(0).map((_, i) => ({
197
+ n: 8,
198
+ value: symbolCode.get(literals[i] ?? 0) ?? 0,
199
+ })));
200
+ const numWeights = weights.length;
201
+ if (numWeights < 1 || numWeights > 128)
202
+ return null;
203
+ const directHeader = 127 + numWeights;
204
+ const weightWriter = new BitWriter();
205
+ for (let i = 0; i < weights.length; i += 2) {
206
+ const hi = weights[i] ?? 0;
207
+ const lo = weights[i + 1] ?? 0;
208
+ weightWriter.writeBits(8, ((hi & 0xf) << 4) | (lo & 0xf));
209
+ }
210
+ const weightBytes = weightWriter.flush();
211
+ const compressedSize = 1 + weightBytes.length + stream.length;
212
+ if (compressedSize > 1023)
213
+ return null;
214
+ const b0 = (2 | (0 << 2) | ((literals.length & 0x0f) << 4)) & 0xff;
215
+ const b1 = (((literals.length >> 4) & 0x3f) | ((compressedSize & 0x03) << 6)) & 0xff;
216
+ const b2 = (compressedSize >> 2) & 0xff;
217
+ const out = new Uint8Array(3 + 1 + weightBytes.length + stream.length);
218
+ out[0] = b0;
219
+ out[1] = b1;
220
+ out[2] = b2;
221
+ out[3] = directHeader & 0xff;
222
+ out.set(weightBytes, 4);
223
+ out.set(stream, 4 + weightBytes.length);
224
+ return out;
225
+ }
226
+ function buildRawLiteralsSection(literals) {
227
+ const size = literals.length;
228
+ if (size <= 31) {
229
+ const out = new Uint8Array(1 + size);
230
+ out[0] = (size << 3) | 0;
231
+ out.set(literals, 1);
232
+ return out;
233
+ }
234
+ if (size <= 0x0fff) {
235
+ const out = new Uint8Array(2 + size);
236
+ out[0] = ((size & 0x0f) << 4) | (1 << 2);
237
+ out[1] = (size >>> 4) & 0xff;
238
+ out.set(literals, 2);
239
+ return out;
240
+ }
241
+ if (size <= 0x0f_ffff) {
242
+ const out = new Uint8Array(3 + size);
243
+ out[0] = ((size & 0x0f) << 4) | (3 << 2);
244
+ out[1] = (size >>> 4) & 0xff;
245
+ out[2] = (size >>> 12) & 0xff;
246
+ out.set(literals, 3);
247
+ return out;
248
+ }
249
+ return null;
250
+ }
251
+ function encodeNumSequences(numSequences) {
252
+ if (numSequences < 0 || numSequences > 0xffff + 0x7f00)
253
+ return null;
254
+ if (numSequences < 128) {
255
+ return new Uint8Array([numSequences & 0xff]);
256
+ }
257
+ if (numSequences < 0x7f00) {
258
+ const hi = ((numSequences >>> 8) & 0x7f) + 0x80;
259
+ const lo = numSequences & 0xff;
260
+ return new Uint8Array([hi, lo]);
261
+ }
262
+ const value = numSequences - 0x7f00;
263
+ return new Uint8Array([0xff, value & 0xff, (value >>> 8) & 0xff]);
264
+ }
265
+ function buildStatePath(codes, table) {
266
+ if (codes.length === 0)
267
+ return { states: [], updateBits: [] };
268
+ const tableSize = table.length;
269
+ const statesByCode = new Map();
270
+ for (let s = 0; s < tableSize; s++) {
271
+ const row = table[s];
272
+ if (!row)
273
+ continue;
274
+ const arr = statesByCode.get(row.symbol) ?? [];
275
+ arr.push(s);
276
+ statesByCode.set(row.symbol, arr);
277
+ }
278
+ const possible = new Array(codes.length);
279
+ const nextChoice = new Array(codes.length);
280
+ for (let i = 0; i < codes.length; i++) {
281
+ possible[i] = new Set();
282
+ nextChoice[i] = new Map();
283
+ }
284
+ const lastCandidates = statesByCode.get(codes[codes.length - 1] ?? -1) ?? [];
285
+ const lastSet = possible[codes.length - 1];
286
+ if (!lastSet)
287
+ return null;
288
+ for (const s of lastCandidates) {
289
+ lastSet.add(s);
290
+ }
291
+ if (lastSet.size === 0)
292
+ return null;
293
+ for (let i = codes.length - 2; i >= 0; i--) {
294
+ const candidates = statesByCode.get(codes[i] ?? -1) ?? [];
295
+ const nextSet = possible[i + 1];
296
+ const curSet = possible[i];
297
+ const curNextChoice = nextChoice[i];
298
+ if (!nextSet || !curSet || !curNextChoice)
299
+ return null;
300
+ for (const s of candidates) {
301
+ const row = table[s];
302
+ if (!row)
303
+ continue;
304
+ const width = row.numBits > 0 ? 1 << row.numBits : 1;
305
+ const minNext = row.baseline;
306
+ const maxNext = row.baseline + width - 1;
307
+ let chosen = -1;
308
+ for (const n of nextSet) {
309
+ if (n >= minNext && n <= maxNext) {
310
+ chosen = n;
311
+ break;
312
+ }
313
+ }
314
+ if (chosen >= 0) {
315
+ curSet.add(s);
316
+ curNextChoice.set(s, chosen);
317
+ }
318
+ }
319
+ if (curSet.size === 0)
320
+ return null;
321
+ }
322
+ const states = new Array(codes.length);
323
+ const updateBits = new Array(Math.max(0, codes.length - 1));
324
+ const firstSet = possible[0];
325
+ if (!firstSet)
326
+ return null;
327
+ const first = firstSet.values().next().value;
328
+ if (first === undefined)
329
+ return null;
330
+ states[0] = first;
331
+ for (let i = 0; i < codes.length - 1; i++) {
332
+ const cur = states[i];
333
+ if (cur === undefined)
334
+ return null;
335
+ const choices = nextChoice[i];
336
+ if (!choices)
337
+ return null;
338
+ const next = choices.get(cur);
339
+ if (next === undefined)
340
+ return null;
341
+ states[i + 1] = next;
342
+ const row = table[cur];
343
+ if (!row)
344
+ return null;
345
+ updateBits[i] = next - row.baseline;
346
+ }
347
+ return { states, updateBits };
348
+ }
349
+ function buildPredefinedSequenceSection(sequences) {
350
+ if (sequences.length === 0)
351
+ return null;
352
+ const numSequencesBytes = encodeNumSequences(sequences.length);
353
+ if (!numSequencesBytes)
354
+ return null;
355
+ const llCodes = [];
356
+ const llExtra = [];
357
+ const mlCodes = [];
358
+ const mlExtra = [];
359
+ const ofCodes = [];
360
+ const ofExtra = [];
361
+ for (const sequence of sequences) {
362
+ const ll = findLengthCode(sequence.literalsLength, LL_BASELINE, LL_NUMBITS, 15, 0);
363
+ const ml = findLengthCode(sequence.matchLength, ML_BASELINE, ML_NUMBITS, 34, 3);
364
+ if (!ll || !ml)
365
+ return null;
366
+ const offsetValue = sequence.offset;
367
+ if (offsetValue < 1)
368
+ return null;
369
+ const ofCode = 31 - Math.clz32(offsetValue);
370
+ if (ofCode < 0 || ofCode > 28)
371
+ return null;
372
+ const ofEx = offsetValue - (1 << ofCode);
373
+ llCodes.push(ll.code);
374
+ llExtra.push({ n: ll.extraN, value: ll.extra });
375
+ mlCodes.push(ml.code);
376
+ mlExtra.push({ n: ml.extraN, value: ml.extra });
377
+ ofCodes.push(ofCode);
378
+ ofExtra.push({ n: ofCode, value: ofEx });
379
+ }
380
+ const llTable = buildFSEDecodeTable(LITERALS_LENGTH_DEFAULT_DISTRIBUTION, LITERALS_LENGTH_TABLE_LOG);
381
+ const ofTable = buildFSEDecodeTable(OFFSET_CODE_DEFAULT_DISTRIBUTION, OFFSET_CODE_TABLE_LOG);
382
+ const mlTable = buildFSEDecodeTable(MATCH_LENGTH_DEFAULT_DISTRIBUTION, MATCH_LENGTH_TABLE_LOG);
383
+ const llPath = buildStatePath(llCodes, llTable);
384
+ const ofPath = buildStatePath(ofCodes, ofTable);
385
+ const mlPath = buildStatePath(mlCodes, mlTable);
386
+ if (!llPath || !ofPath || !mlPath)
387
+ return null;
388
+ const readChunks = [
389
+ { n: LITERALS_LENGTH_TABLE_LOG, value: llPath.states[0] ?? 0 },
390
+ { n: OFFSET_CODE_TABLE_LOG, value: ofPath.states[0] ?? 0 },
391
+ { n: MATCH_LENGTH_TABLE_LOG, value: mlPath.states[0] ?? 0 },
392
+ ];
393
+ for (let i = 0; i < sequences.length; i++) {
394
+ readChunks.push(ofExtra[i] ?? { n: 0, value: 0 });
395
+ readChunks.push(mlExtra[i] ?? { n: 0, value: 0 });
396
+ readChunks.push(llExtra[i] ?? { n: 0, value: 0 });
397
+ if (i !== sequences.length - 1) {
398
+ const llState = llPath.states[i] ?? 0;
399
+ const mlState = mlPath.states[i] ?? 0;
400
+ const ofState = ofPath.states[i] ?? 0;
401
+ const llRow = llTable[llState];
402
+ const mlRow = mlTable[mlState];
403
+ const ofRow = ofTable[ofState];
404
+ if (!llRow || !mlRow || !ofRow)
405
+ return null;
406
+ readChunks.push({ n: llRow.numBits, value: llPath.updateBits[i] ?? 0 });
407
+ readChunks.push({ n: mlRow.numBits, value: mlPath.updateBits[i] ?? 0 });
408
+ readChunks.push({ n: ofRow.numBits, value: ofPath.updateBits[i] ?? 0 });
409
+ }
410
+ }
411
+ const bitstream = encodeReverseBitstream(readChunks);
412
+ const out = new Uint8Array(numSequencesBytes.length + 1 + bitstream.length);
413
+ out.set(numSequencesBytes, 0);
414
+ out[numSequencesBytes.length] = 0x00; // predefined LL/OF/ML modes
415
+ out.set(bitstream, numSequencesBytes.length + 1);
416
+ return out;
417
+ }
418
+ export function buildCompressedBlockPayload(literals, sequences) {
419
+ const literalCandidates = [
420
+ buildSingleSymbolCompressedLiterals(literals),
421
+ buildGeneralCompressedLiterals(literals),
422
+ buildRawLiteralsSection(literals),
423
+ ].filter((section) => section !== null);
424
+ if (literalCandidates.length === 0)
425
+ return null;
426
+ let literalsSection = literalCandidates[0];
427
+ for (const candidate of literalCandidates) {
428
+ if (candidate.length < literalsSection.length) {
429
+ literalsSection = candidate;
430
+ }
431
+ }
432
+ const seqSection = buildPredefinedSequenceSection(sequences);
433
+ if (!seqSection)
434
+ return null;
435
+ const out = new Uint8Array(literalsSection.length + seqSection.length);
436
+ out.set(literalsSection, 0);
437
+ out.set(seqSection, literalsSection.length);
438
+ return out;
439
+ }
440
+ export function writeCompressedBlock(payload, last) {
441
+ const header = new Uint8Array(3);
442
+ const blockHeader = (last ? 1 : 0) | (2 << 1) | (payload.length << 3);
443
+ writeU24LE(header, 0, blockHeader);
444
+ const out = new Uint8Array(3 + payload.length);
445
+ out.set(header, 0);
446
+ out.set(payload, 3);
447
+ return out;
448
+ }
449
+ //# sourceMappingURL=compressedBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compressedBlock.js","sourceRoot":"","sources":["../../src/encode/compressedBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { compress } from '../compress.js';
3
+ import { parseLiteralsSectionHeader } from '../decode/literals.js';
4
+ import { decompress } from '../decompress.js';
5
+ import { parseFrameHeader } from '../frame/frameHeader.js';
6
+ import { buildCompressedBlockPayload, writeCompressedBlock } from './compressedBlock.js';
7
+ import { buildGreedySequences } from './greedySequences.js';
8
+ describe('compressed block encoder', () => {
9
+ it('builds decodable compressed-block payload for single-sequence case', () => {
10
+ const input = new TextEncoder().encode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
11
+ const plan = buildGreedySequences(input);
12
+ expect(plan.sequences.length).toBeGreaterThan(0);
13
+ const payload = buildCompressedBlockPayload(plan.literals, plan.sequences);
14
+ expect(payload).not.toBeNull();
15
+ const frameHeader = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x20, input.length & 0xff]);
16
+ const block = writeCompressedBlock(payload, true);
17
+ const frame = new Uint8Array(frameHeader.length + block.length);
18
+ frame.set(frameHeader, 0);
19
+ frame.set(block, frameHeader.length);
20
+ expect(decompress(frame)).toEqual(input);
21
+ });
22
+ it('compress(level=3) emits compressed block when beneficial', () => {
23
+ const input = new TextEncoder().encode('abcdabcdabcdabcdabcdabcdabcdabcd');
24
+ const encoded = compress(input, { level: 3 });
25
+ const header = parseFrameHeader(encoded, 4);
26
+ const blockHeaderOffset = 4 + header.headerSize;
27
+ const blockType = ((encoded[blockHeaderOffset] ?? 0) >> 1) & 0x3;
28
+ expect(blockType).toBe(2);
29
+ expect(decompress(encoded)).toEqual(input);
30
+ });
31
+ it('encodes multi-sequence section using non-RLE modes', () => {
32
+ const input = new TextEncoder().encode('abcdabcdXabcdabcdYabcdabcdZabcdabcd');
33
+ const plan = buildGreedySequences(input);
34
+ expect(plan.sequences.length).toBeGreaterThan(1);
35
+ const payload = buildCompressedBlockPayload(plan.literals, plan.sequences);
36
+ expect(payload).not.toBeNull();
37
+ const { header } = parseLiteralsSectionHeader(payload, 0);
38
+ const litBytes = header.headerSize + (header.compressedSize ?? header.regeneratedSize);
39
+ const numSeq = payload[litBytes] ?? 0;
40
+ expect(numSeq).toBe(plan.sequences.length);
41
+ const modes = payload[litBytes + 1] ?? 0xff;
42
+ expect(modes).toBe(0); // predefined, i.e. non-RLE modes
43
+ const frameHeader = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x20, input.length & 0xff]);
44
+ const block = writeCompressedBlock(payload, true);
45
+ const frame = new Uint8Array(frameHeader.length + block.length);
46
+ frame.set(frameHeader, 0);
47
+ frame.set(block, frameHeader.length);
48
+ expect(decompress(frame)).toEqual(input);
49
+ });
50
+ it('encodes multi-symbol compressed literals for bounded symbol sets', () => {
51
+ const literals = new Uint8Array(40);
52
+ for (let i = 0; i < literals.length; i++) {
53
+ literals[i] = (i & 1);
54
+ }
55
+ const payload = buildCompressedBlockPayload(literals, [
56
+ { literalsLength: literals.length, offset: 1, matchLength: 3 },
57
+ ]);
58
+ expect(payload).not.toBeNull();
59
+ const { header } = parseLiteralsSectionHeader(payload, 0);
60
+ expect([0, 2]).toContain(header.blockType);
61
+ });
62
+ });
63
+ //# sourceMappingURL=compressedBlock.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compressedBlock.test.js","sourceRoot":"","sources":["../../src/encode/compressedBlock.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Write zstd frame header.
3
+ */
4
+ export declare function writeFrameHeader(contentSize: number, hasChecksum: boolean): Uint8Array;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Write zstd frame header.
3
+ */
4
+ const ZSTD_MAGIC = 0xfd2fb528;
5
+ export function writeFrameHeader(contentSize, hasChecksum) {
6
+ const chunks = [];
7
+ chunks.push(ZSTD_MAGIC & 0xff, (ZSTD_MAGIC >> 8) & 0xff, (ZSTD_MAGIC >> 16) & 0xff, (ZSTD_MAGIC >> 24) & 0xff);
8
+ let fhd = 0;
9
+ if (contentSize <= 255) {
10
+ fhd |= 0 << 6;
11
+ fhd |= 1 << 5;
12
+ }
13
+ else if (contentSize <= 256 + 65535 - 1) {
14
+ fhd |= 1 << 6;
15
+ fhd |= 1 << 5;
16
+ }
17
+ else {
18
+ fhd |= 2 << 6;
19
+ fhd |= 1 << 5;
20
+ }
21
+ fhd |= (hasChecksum ? 1 : 0) << 2;
22
+ chunks.push(fhd);
23
+ if (contentSize <= 255) {
24
+ chunks.push(contentSize & 0xff);
25
+ }
26
+ else if (contentSize <= 256 + 65535 - 1) {
27
+ chunks.push((contentSize - 256) & 0xff, ((contentSize - 256) >> 8) & 0xff);
28
+ }
29
+ else {
30
+ chunks.push(contentSize & 0xff, (contentSize >> 8) & 0xff, (contentSize >> 16) & 0xff, (contentSize >> 24) & 0xff);
31
+ }
32
+ return new Uint8Array(chunks);
33
+ }
34
+ //# sourceMappingURL=frameWriter.js.map