zstd.compat.spec.ts 1.3 KB

123456789101112131415161718192021222324
  1. import { describe, expect, it } from 'vitest'
  2. import { compressZstdFrame, decompressZstdFrame, decompressZstdPrefix, scanZstdFrames } from '../src/zstd.ts'
  3. describe('JSONL Zstandard compatibility', () => {
  4. it('round-trips concatenated checksummed frames through the built-in Node API', async () => {
  5. const encoded = Buffer.concat([
  6. await compressZstdFrame('{"type":"session","version":0,"id":"compat","createdAt":1}\n'),
  7. await compressZstdFrame('{"type":"turn/start","seq":0,"turn":1}\n'),
  8. ])
  9. const { frames, tornStart } = scanZstdFrames(encoded)
  10. expect(tornStart).toBeUndefined()
  11. expect(frames).toHaveLength(2)
  12. expect(frames.map(frame => encoded.subarray(frame.start, frame.start + 4).toString('hex')))
  13. .toEqual(['28b52ffd', '28b52ffd'])
  14. const decoded = await Promise.all(frames.map(frame => decompressZstdFrame(encoded.subarray(frame.start, frame.end))))
  15. expect(Buffer.concat(decoded).toString()).toContain('"type":"turn/start"')
  16. const eventFrame = encoded.subarray(frames[1]!.start, frames[1]!.end)
  17. const missingChecksumByte = eventFrame.subarray(0, -1)
  18. expect(scanZstdFrames(missingChecksumByte)).toEqual({ frames: [], tornStart: 0 })
  19. expect((await decompressZstdPrefix(missingChecksumByte)).toString()).toContain('"type":"turn/start"')
  20. })
  21. })