UNPKG

@brianpugh/tamp

Version:

Tamp compression library for JavaScript/TypeScript using WebAssembly

145 lines (103 loc) 3.82 kB
# @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 ```bash npm install @brianpugh/tamp ``` ## Quick Start ### Text Compression ```javascript 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 ```javascript 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 ```javascript 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](https://tamp.readthedocs.io/en/latest/javascript.html) for more details. ### Basic Interface - `compress(data: Uint8Array): Promise<Uint8Array>` - Compress binary data - `decompress(data: Uint8Array): Promise<Uint8Array>` - Decompress binary data - `compressText(text: string): Promise<Uint8Array>` - Compress UTF-8 text - `decompressText(data: Uint8Array): Promise<string>` - Decompress to UTF-8 text ### Streaming Classes #### TampCompressor ```typescript class TampCompressor { constructor(options?: { window?: number; literal?: number }); compress(data: Uint8Array): Promise<Uint8Array>; flush(): Promise<Uint8Array>; destroy(): void; } ``` #### TampDecompressor ```typescript class TampDecompressor { decompress(data: Uint8Array): Promise<Uint8Array>; destroy(): void; } ``` ## License This project is licensed under the Apache 2.0 License - see the [LICENSE](https://github.com/BrianPugh/tamp/blob/main/LICENSE) file for details.