zstdify 1.0.1 → 1.0.2

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 (79) hide show
  1. package/package.json +1 -1
  2. package/dist/barrelExports.test.d.ts +0 -1
  3. package/dist/barrelExports.test.js +0 -25
  4. package/dist/barrelExports.test.js.map +0 -1
  5. package/dist/bitstream/bitReader.test.d.ts +0 -1
  6. package/dist/bitstream/bitReader.test.js +0 -47
  7. package/dist/bitstream/bitReader.test.js.map +0 -1
  8. package/dist/bitstream/bitReaderReverse.test.d.ts +0 -1
  9. package/dist/bitstream/bitReaderReverse.test.js +0 -49
  10. package/dist/bitstream/bitReaderReverse.test.js.map +0 -1
  11. package/dist/bitstream/littleEndian.test.d.ts +0 -1
  12. package/dist/bitstream/littleEndian.test.js +0 -21
  13. package/dist/bitstream/littleEndian.test.js.map +0 -1
  14. package/dist/bitstream/varint.test.d.ts +0 -1
  15. package/dist/bitstream/varint.test.js +0 -25
  16. package/dist/bitstream/varint.test.js.map +0 -1
  17. package/dist/compress.test.d.ts +0 -1
  18. package/dist/compress.test.js +0 -39
  19. package/dist/compress.test.js.map +0 -1
  20. package/dist/decode/block.test.d.ts +0 -1
  21. package/dist/decode/block.test.js +0 -26
  22. package/dist/decode/block.test.js.map +0 -1
  23. package/dist/decode/decompressFrame.test.d.ts +0 -1
  24. package/dist/decode/decompressFrame.test.js +0 -95
  25. package/dist/decode/decompressFrame.test.js.map +0 -1
  26. package/dist/decode/literals.corruption.test.d.ts +0 -1
  27. package/dist/decode/literals.corruption.test.js +0 -68
  28. package/dist/decode/literals.corruption.test.js.map +0 -1
  29. package/dist/decode/literals.test.d.ts +0 -1
  30. package/dist/decode/literals.test.js +0 -68
  31. package/dist/decode/literals.test.js.map +0 -1
  32. package/dist/decode/reconstruct.test.d.ts +0 -1
  33. package/dist/decode/reconstruct.test.js +0 -42
  34. package/dist/decode/reconstruct.test.js.map +0 -1
  35. package/dist/decode/sequences.corruption.test.d.ts +0 -1
  36. package/dist/decode/sequences.corruption.test.js +0 -32
  37. package/dist/decode/sequences.corruption.test.js.map +0 -1
  38. package/dist/decode/sequences.level1.test.d.ts +0 -1
  39. package/dist/decode/sequences.level1.test.js +0 -35
  40. package/dist/decode/sequences.level1.test.js.map +0 -1
  41. package/dist/decode/sequences.modes.test.d.ts +0 -1
  42. package/dist/decode/sequences.modes.test.js +0 -56
  43. package/dist/decode/sequences.modes.test.js.map +0 -1
  44. package/dist/dictionary/decoderDictionary.test.d.ts +0 -1
  45. package/dist/dictionary/decoderDictionary.test.js +0 -87
  46. package/dist/dictionary/decoderDictionary.test.js.map +0 -1
  47. package/dist/encode/blockWriter.test.d.ts +0 -1
  48. package/dist/encode/blockWriter.test.js +0 -31
  49. package/dist/encode/blockWriter.test.js.map +0 -1
  50. package/dist/encode/compressedBlock.test.d.ts +0 -1
  51. package/dist/encode/compressedBlock.test.js +0 -63
  52. package/dist/encode/compressedBlock.test.js.map +0 -1
  53. package/dist/encode/frameWriter.test.d.ts +0 -1
  54. package/dist/encode/frameWriter.test.js +0 -38
  55. package/dist/encode/frameWriter.test.js.map +0 -1
  56. package/dist/encode/greedySequences.test.d.ts +0 -1
  57. package/dist/encode/greedySequences.test.js +0 -33
  58. package/dist/encode/greedySequences.test.js.map +0 -1
  59. package/dist/entropy/fse.test.d.ts +0 -1
  60. package/dist/entropy/fse.test.js +0 -41
  61. package/dist/entropy/fse.test.js.map +0 -1
  62. package/dist/entropy/huffman.test.d.ts +0 -1
  63. package/dist/entropy/huffman.test.js +0 -22
  64. package/dist/entropy/huffman.test.js.map +0 -1
  65. package/dist/entropy/weights.test.d.ts +0 -1
  66. package/dist/entropy/weights.test.js +0 -38
  67. package/dist/entropy/weights.test.js.map +0 -1
  68. package/dist/errors.test.d.ts +0 -1
  69. package/dist/errors.test.js +0 -16
  70. package/dist/errors.test.js.map +0 -1
  71. package/dist/frame/checksum.test.d.ts +0 -1
  72. package/dist/frame/checksum.test.js +0 -28
  73. package/dist/frame/checksum.test.js.map +0 -1
  74. package/dist/frame/frameHeader.test.d.ts +0 -1
  75. package/dist/frame/frameHeader.test.js +0 -83
  76. package/dist/frame/frameHeader.test.js.map +0 -1
  77. package/dist/frame/skippable.test.d.ts +0 -1
  78. package/dist/frame/skippable.test.js +0 -35
  79. package/dist/frame/skippable.test.js.map +0 -1
@@ -1,38 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { readWeightsDirect, readWeightsFSE } from './weights.js';
3
- describe('weights', () => {
4
- describe('readWeightsDirect', () => {
5
- it('throws when data is truncated', () => {
6
- // numWeights=4 -> bytesNeeded=2; buffer length 1
7
- expect(() => readWeightsDirect(new Uint8Array([0x00]), 0, 4)).toThrow(/Huffman weights truncated/i);
8
- });
9
- it('returns weights for valid direct input', () => {
10
- // 2 weights in 1 byte: high nibble and low nibble
11
- const { weights, bytesRead } = readWeightsDirect(new Uint8Array([0x12]), 0, 2);
12
- expect(weights).toEqual([1, 2]);
13
- expect(bytesRead).toBe(1);
14
- });
15
- });
16
- describe('readWeightsFSE', () => {
17
- it('throws when compressed size < 2', () => {
18
- expect(() => readWeightsFSE(new Uint8Array(10), 0, 1)).toThrow(/FSE-compressed weights: need at least 2 bytes/i);
19
- });
20
- it('throws when input is truncated', () => {
21
- expect(() => readWeightsFSE(new Uint8Array([0x00, 0x00]), 0, 5)).toThrow(/FSE-compressed weights truncated/i);
22
- });
23
- it('throws when there is no stream after header', () => {
24
- // From fse.test: [0x10, 0x3f, 0x01] gives readNCount bytesRead=2. Use compressedSize=2
25
- // so streamLength = 2 - 2 = 0 (no stream bytes after header).
26
- const buf = new Uint8Array([0x10, 0x3f]);
27
- expect(() => readWeightsFSE(buf, 0, 2)).toThrow(/no stream after header/i);
28
- });
29
- it('throws when stream has invalid end marker (last byte zero)', () => {
30
- // 3 bytes: 2-byte ncount header + 1 stream byte. If stream last byte is 0, invalid.
31
- // We need readNCount to read exactly 2 bytes. Example from fse.test: [0x10, 0x3f, 0x01] gives bytesRead 2.
32
- // So [0x10, 0x3f, 0x00] = 2 byte header + stream [0x00], lastByte=0 -> invalid end marker
33
- const buf = new Uint8Array([0x10, 0x3f, 0x00]);
34
- expect(() => readWeightsFSE(buf, 0, 3)).toThrow(/invalid end marker/i);
35
- });
36
- });
37
- });
38
- //# sourceMappingURL=weights.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"weights.test.js","sourceRoot":"","sources":["../../src/entropy/weights.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;IACxB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC;QAClC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC;YACxC,iDAAiD;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAAA,CACrG,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC;YACjD,kDAAkD;YAClD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA,CAC3B,CAAC,CAAC;IAAA,CACJ,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC;QAC/B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAAA,CAClH,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QAAA,CAC/G,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE,CAAC;YACtD,uFAAuF;YACvF,8DAA8D;YAC9D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAAA,CAC5E,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE,CAAC;YACrE,oFAAoF;YACpF,2GAA2G;YAC3G,0FAA0F;YAC1F,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAAA,CACxE,CAAC,CAAC;IAAA,CACJ,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { ZstdError } from './errors.js';
3
- describe('ZstdError', () => {
4
- it('has correct name, message, and code', () => {
5
- const e = new ZstdError('test message', 'corruption_detected');
6
- expect(e.name).toBe('ZstdError');
7
- expect(e.message).toBe('test message');
8
- expect(e.code).toBe('corruption_detected');
9
- });
10
- it('is instanceof Error and ZstdError', () => {
11
- const e = new ZstdError('x', 'parameter_unsupported');
12
- expect(e).toBeInstanceOf(Error);
13
- expect(e).toBeInstanceOf(ZstdError);
14
- });
15
- });
16
- //# sourceMappingURL=errors.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;IAC1B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAAA,CAC5C,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAAA,CACrC,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,28 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { computeContentChecksum32, validateContentChecksum, xxh64 } from './checksum.js';
3
- describe('xxh64', () => {
4
- it('hashes empty input', () => {
5
- const h = xxh64(new Uint8Array(0));
6
- expect(typeof h).toBe('bigint');
7
- expect(h).toBeGreaterThanOrEqual(0n);
8
- });
9
- it('hashes consistently', () => {
10
- const data = new TextEncoder().encode('hello');
11
- const h1 = xxh64(data);
12
- const h2 = xxh64(data);
13
- expect(h1).toBe(h2);
14
- expect(typeof h1).toBe('bigint');
15
- });
16
- it('validateContentChecksum matches low 32 bits', () => {
17
- const data = new TextEncoder().encode('test');
18
- const hash = xxh64(data);
19
- const low32 = Number(hash & 0xffffffffn);
20
- expect(validateContentChecksum(data, low32)).toBe(true);
21
- expect(validateContentChecksum(data, low32 + 1)).toBe(false);
22
- });
23
- it('matches zstd checksum vector', () => {
24
- const data = new TextEncoder().encode('checksum interoperability payload');
25
- expect(computeContentChecksum32(data)).toBe(0x1be3054d);
26
- });
27
- });
28
- //# sourceMappingURL=checksum.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checksum.test.js","sourceRoot":"","sources":["../../src/frame/checksum.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEzF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;IACtB,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAAA,CACtC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAAA,CAClC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAAA,CAC9D,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;QAC3E,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAAA,CACzD,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,83 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { parseZstdFrame } from './frameHeader.js';
3
- describe('frameHeader', () => {
4
- it('parses minimal frame header (no window, no content size, no dict)', () => {
5
- // FHD: 0x00 = FCS=0, single=0, unused=0, reserved=0, checksum=0, dict=0
6
- const data = new Uint8Array([
7
- 0x28,
8
- 0xb5,
9
- 0x2f,
10
- 0xfd, // magic
11
- 0x00,
12
- 0x00, // FHD=0, WD: exponent=0 (windowLog=10), mantissa=0 -> 1KB
13
- ]);
14
- const { header } = parseZstdFrame(data, 0);
15
- expect(header.headerSize).toBe(2); // 1 FHD + 1 WD
16
- expect(header.windowSize).toBe(1024);
17
- expect(header.contentSize).toBe(null);
18
- expect(header.hasContentChecksum).toBe(false);
19
- expect(header.dictionaryId).toBe(null);
20
- });
21
- it('rejects invalid magic', () => {
22
- const data = new Uint8Array([0, 0, 0, 0]);
23
- expect(() => parseZstdFrame(data, 0)).toThrow('Invalid zstd magic');
24
- });
25
- it('rejects reserved bit set', () => {
26
- const data = new Uint8Array([
27
- 0x28,
28
- 0xb5,
29
- 0x2f,
30
- 0xfd, // magic
31
- 0x08,
32
- 0x40, // FHD with reserved bit (bit 3) set
33
- ]);
34
- expect(() => parseZstdFrame(data, 0)).toThrow('Reserved bit');
35
- });
36
- it('parses single-segment frame with 1-byte content size and checksum', () => {
37
- // FHD: FCS=0 (1 byte), single=1, checksum=1, dict=0 -> 0x24. Then 1 byte content size = 5
38
- const data = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x24, 0x05]);
39
- const { header } = parseZstdFrame(data, 0);
40
- expect(header.singleSegment).toBe(true);
41
- expect(header.contentSize).toBe(5);
42
- expect(header.hasContentChecksum).toBe(true);
43
- expect(header.headerSize).toBe(2);
44
- });
45
- it('parses frame with 2-byte content size', () => {
46
- // FHD: FCS=1 (2 bytes), single=1, dict=0 -> 0x60. Single-segment skips WD, so FCS starts immediately.
47
- const data = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x60, 0x01, 0x00]);
48
- const { header } = parseZstdFrame(data, 0);
49
- expect(header.singleSegment).toBe(true);
50
- expect(header.contentSize).toBe(257);
51
- });
52
- it('parses frame with dictionary ID (1 byte)', () => {
53
- // FHD: FCS=0, single=1, dict=1 -> 0x21. Per spec: [Dict_ID] then [FCS]; so 1 byte dict ID = 42, then 1 byte FCS = 0.
54
- const data = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x21, 0x2a, 0x00]);
55
- const { header } = parseZstdFrame(data, 0);
56
- expect(header.dictionaryId).toBe(0x2a);
57
- });
58
- it('parses frame with dictionary ID 0 as null', () => {
59
- // dict=1, 1 byte dict ID = 0; per spec dictionary ID 0 means "no dictionary"
60
- const data = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x21, 0x00, 0x00]);
61
- const { header } = parseZstdFrame(data, 0);
62
- expect(header.dictionaryId).toBe(null);
63
- });
64
- it('parses frame with 4-byte content size', () => {
65
- // FHD: bits 7-6=FCS(2)=4 bytes, bit 5=single=1, bits 1-0=dict=0 -> 0xA0. Then 4 bytes LE = 0x10000.
66
- const data = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0xa0, 0x00, 0x00, 0x01, 0x00]);
67
- const { header } = parseZstdFrame(data, 0);
68
- expect(header.contentSize).toBe(0x10000);
69
- expect(header.headerSize).toBe(5);
70
- });
71
- it('parses frame with 8-byte content size', () => {
72
- // FHD: bits 7-6=FCS(3)=8 bytes, bit 5=single=1 -> 0xE0. Then 8 bytes LE = 2^32.
73
- const data = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00]);
74
- const { header } = parseZstdFrame(data, 0);
75
- expect(header.contentSize).toBe(0x1_0000_0000);
76
- expect(header.headerSize).toBe(9);
77
- });
78
- it('rejects input too short for magic', () => {
79
- const data = new Uint8Array([0x28, 0xb5, 0x2f]);
80
- expect(() => parseZstdFrame(data, 0)).toThrow(/too short|magic/i);
81
- });
82
- });
83
- //# sourceMappingURL=frameHeader.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frameHeader.test.js","sourceRoot":"","sources":["../../src/frame/frameHeader.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,35 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { getSkippableFrameSize, isSkippableFrame, SKIPPABLE_FRAME_MAGIC, skipSkippableFrame } from './skippable.js';
3
- describe('skippable frame', () => {
4
- it('isSkippableFrame returns false when not enough bytes', () => {
5
- expect(isSkippableFrame(new Uint8Array(2), 0)).toBe(false);
6
- expect(isSkippableFrame(new Uint8Array([0x50, 0x2a]), 0)).toBe(false);
7
- });
8
- it('isSkippableFrame returns true for skippable magic (LE)', () => {
9
- const magic = new Uint8Array(4);
10
- new DataView(magic.buffer).setUint32(0, SKIPPABLE_FRAME_MAGIC, true);
11
- expect(isSkippableFrame(magic, 0)).toBe(true);
12
- });
13
- it('getSkippableFrameSize returns payload size and throws when truncated', () => {
14
- const magic = new Uint8Array([0x50, 0x2a, 0x4d, 0x18]);
15
- const sizeBytes = new Uint8Array(4);
16
- new DataView(sizeBytes.buffer).setUint32(0, 10, true);
17
- const header = new Uint8Array(8);
18
- header.set(magic);
19
- header.set(sizeBytes, 4);
20
- expect(getSkippableFrameSize(header, 0)).toBe(10);
21
- expect(() => getSkippableFrameSize(new Uint8Array(7), 0)).toThrow(/truncated/);
22
- });
23
- it('skipSkippableFrame returns offset after frame', () => {
24
- const magic = new Uint8Array([0x50, 0x2a, 0x4d, 0x18]);
25
- const sizeBytes = new Uint8Array(4);
26
- new DataView(sizeBytes.buffer).setUint32(0, 4, true);
27
- const payload = new Uint8Array([1, 2, 3, 4]);
28
- const frame = new Uint8Array(8 + 4);
29
- frame.set(magic, 0);
30
- frame.set(sizeBytes, 4);
31
- frame.set(payload, 8);
32
- expect(skipSkippableFrame(frame, 0)).toBe(12);
33
- });
34
- });
35
- //# sourceMappingURL=skippable.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skippable.test.js","sourceRoot":"","sources":["../../src/frame/skippable.test.ts"],"names":[],"mappings":"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"}