@brianpugh/tamp
v1.10.3
Published
Tamp compression library for JavaScript/TypeScript using WebAssembly
Maintainers
Readme
@brianpugh/tamp
Documentation: https://tamp.readthedocs.io/en/latest/
Source Code: https://github.com/BrianPugh/tamp
Online Demo: https://brianpugh.github.io/tamp
Tamp is a low-memory, DEFLATE-inspired lossless compression library optimized for embedded and resource-constrained environments.
Tamp delivers the highest data compression ratios, while using the least amount of RAM and firmware storage.
Features
- High compression ratios, low memory use, and fast.
- Various language implementations available:
- Python
- Micropython
- C
- Javascript
- Support for both streaming and one-shot compression
Installation
npm install @brianpugh/tampQuick Start
Text Compression
import { compressText, decompressText } from '@brianpugh/tamp';
// Compress text (handles UTF-8 encoding automatically)
const compressed = await compressText(
'Hello, World! This is some text to compress.'
);
console.log(`Original: ${compressed.length} bytes compressed`);
// Decompress back to original text
const original = await decompressText(compressed);
console.log(original); // "Hello, World! This is some text to compress."Binary Data Compression
import { compress, decompress } from '@brianpugh/tamp';
// Compress binary data
const data = new TextEncoder().encode('Hello, World!');
const compressedData = await compress(data);
// Decompress
const decompressed = await decompress(compressedData);
console.log(new TextDecoder().decode(decompressed)); // "Hello, World!"Streaming Compression
import { TampCompressor, TampDecompressor } from '@brianpugh/tamp';
// Create streaming compressor
const compressor = new TampCompressor({ window: 10 });
// Compress data in chunks
const chunk1 = await compressor.compress(new TextEncoder().encode('Hello '));
const chunk2 = await compressor.compress(new TextEncoder().encode('World!'));
const finalChunk = await compressor.flush();
// Clean up
compressor.destroy();
// Create streaming decompressor
const decompressor = new TampDecompressor();
// Decompress the chunks we created above
const decompressed1 = await decompressor.decompress(chunk1);
const decompressed2 = await decompressor.decompress(chunk2);
const decompressed3 = await decompressor.decompress(finalChunk);
// Combine all decompressed chunks
const totalLength =
decompressed1.length + decompressed2.length + decompressed3.length;
const result = new Uint8Array(totalLength);
result.set(decompressed1, 0);
result.set(decompressed2, decompressed1.length);
result.set(decompressed3, decompressed1.length + decompressed2.length);
// Convert back to text
const originalText = new TextDecoder().decode(result);
console.log(originalText); // "Hello World!"
// Clean up
decompressor.destroy();API Reference
See the docs for more details.
Basic Interface
compress(data: Uint8Array): Promise<Uint8Array>- Compress binary datadecompress(data: Uint8Array): Promise<Uint8Array>- Decompress binary datacompressText(text: string): Promise<Uint8Array>- Compress UTF-8 textdecompressText(data: Uint8Array): Promise<string>- Decompress to UTF-8 text
Streaming Classes
TampCompressor
class TampCompressor {
constructor(options?: { window?: number; literal?: number });
compress(data: Uint8Array): Promise<Uint8Array>;
flush(): Promise<Uint8Array>;
destroy(): void;
}TampDecompressor
class TampDecompressor {
decompress(data: Uint8Array): Promise<Uint8Array>;
destroy(): void;
}License
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
