0.4.6 • Published 8 months ago

@neodon/zstd v0.4.6

Weekly downloads
-
License
AGPL-3.0-only
Repository
github
Last release
8 months ago

@neodon/zstd

This package wraps the zstd command in a stream for either compression or decompression.

NOTE: You must have the zstd command available on your path (TODO: allow specifying the location as a parameter).

Installing the zstd CLI

Here are some quick install commands for zstd on different operating systems:

OS/DistroPackage ManagerInstall Command
AlpineAPKapk add zstd
Arch LinuxPacmansudo pacman -S zstd
CentOS/RHELYUMsudo yum install -y zstd
FedoraDNFsudo dnf install -y zstd
MacOSHomebrewbrew install zstd
MacOSMacPortssudo port install zstd
openSUSEZyppersudo zypper install zstd
Ubuntu/DebianAPTsudo apt-get install -y zstd
WindowsChocolateychoco install -y zstandard
WindowsMSYS2pacman -S zstandard
WindowsScoopscoop install zstd

Usage

Basic Streaming

Here's a simple example showing compression and decompression in a pipeline:

import { createZstdCompress, createZstdDecompress } from '@neodon/zstd'
import { Readable } from 'node:stream'
import { pipeline } from 'node:stream/promises'

// Example: Compress data, decompress it, and write the result

await pipeline(
  // Create a simple readable stream with some text
  Readable.from('Hello, world!\n'),

  // Compress using zstd
  createZstdCompress(),

  // Immediately decompress to verify the roundtrip
  createZstdDecompress(),

  // Write the result to stderr (could use any writable stream)
  process.stderr,

  // Prevent pipeline from automatically closing the last stream - process.stderr
  { end: false }
)

File Compression

Here's a complete example showing file compression, decompression, and verification:

import { createZstdCompress, createZstdDecompress } from '@neodon/zstd'
import assert from 'node:assert'
import { createReadStream, createWriteStream, readFileSync, writeFileSync } from 'node:fs'
import { pipeline } from 'node:stream/promises'

// Example: Demonstrate compression/decompression with file verification

const inputFile = 'inputFile.json'
const compressedFile = 'compressed.json.zst'
const outputFile = 'decompressed.json'

// Sample data to compress
const inputData = {
  message: 'Hello from zstd!',
  numbers: [1, 2, 3],
  nested: { works: true }
}

// Write initial data
writeFileSync(inputFile, JSON.stringify(inputData, null, 2))

// Compress JSON file to .zst
await pipeline(
  createReadStream(inputFile),
  createZstdCompress(),
  createWriteStream(compressedFile),
)

// Decompress .zst back to JSON
await pipeline(
  createReadStream(compressedFile),
  createZstdDecompress(),
  createWriteStream(outputFile),
)

// Verify the roundtrip was successful
const result = JSON.parse(readFileSync(outputFile, 'utf8'))
assert.deepStrictEqual(result, inputData)
console.log('Compression/decompression successful!')

License

This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.

0.4.6

8 months ago

0.4.5

8 months ago

0.4.4

11 months ago

0.4.3

11 months ago

0.4.2

11 months ago

0.4.1

11 months ago

0.4.0

11 months ago

0.3.0

11 months ago

0.2.2

11 months ago

0.2.1

11 months ago

0.2.0

11 months ago

0.1.3

11 months ago

0.1.2

12 months ago

0.1.1

12 months ago

0.1.0

12 months ago