0.4.6 • Published 10 months ago

@neodon/zstd v0.4.6

Weekly downloads
-
License
AGPL-3.0-only
Repository
github
Last release
10 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

10 months ago

0.4.5

10 months ago

0.4.4

1 year ago

0.4.3

1 year ago

0.4.2

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.0

1 year ago

0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago

0.1.3

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago