lz-utils
v2.1.1
Published
Utils for string compression and decompression with multiple strategies for Node.js and browser
Readme
lz-utils - Utils for string compression
Features
- Zero runtime dependencies
- Multiple compression strategies for different environments
- ESM and CommonJS support
- TypeScript type definitions included
- Browser bundle (IIFE) included
API
| Method | Platform | Sync/Async | Algorithm | Minified |
|:---|:---|:---|:---|:---|
| deflateSync(str) | Node.js | Sync | Native zlib | 0.13 KB |
| deflate(str) | Node.js | Async | Native zlib | 0.17 KB |
| inflateSync(str) | Browser | Sync | tiny-inflate | 3.15 KB |
| inflate(str) | Browser | Async (Worker) | tiny-inflate | 3.60 KB |
| compress(str) | Both | Sync | lz-string | 1.71 KB |
| decompress(str) | Both | Sync | lz-string | 1.59 KB |
| createScriptLoader(str) | Node.js | Sync | zlib + loader template | 4.03 KB |
deflateSync/deflate- Compress raw string and encode in base64 (Node.js only, highest performance)inflateSync/inflate- Decompress base64 string to raw string (Browser only,inflateuses Web Worker for multi-thread decompression)compress/decompress- LZ-string based compression/decompression in base64 (works on both browser and Node.js)createScriptLoader- Create a self-contained HTML script that decompresses and executes the given string in browser
Install
npm install lz-utilsUsage
Node.js - Compress with deflate (recommended)
const { deflateSync, deflate } = require('lz-utils');
const raw = "this is string";
// Synchronous
const compressed = deflateSync(raw);
// Asynchronous
const compressed = await deflate(raw);Browser - Decompress with inflate
import { inflateSync, inflate } from 'lz-utils/inflate-sync';
// or
import { inflate } from 'lz-utils/inflate';
// Synchronous
const raw = inflateSync(compressed);
// Asynchronous (Web Worker)
const raw = await inflate(compressed);Cross-platform - LZ-string compress/decompress
import { compress, decompress } from 'lz-utils';
const raw = "this is string";
const compressed = compress(raw);
const decompressed = decompress(compressed);Create script loader
const { createScriptLoader } = require('lz-utils');
// Creates a self-contained HTML script that will decompress and execute in browser
const script = createScriptLoader('console.log("hello")');Subpath imports
Each function can be imported individually to minimize bundle size:
import compress from 'lz-utils/compress';
import decompress from 'lz-utils/decompress';
import deflate from 'lz-utils/deflate';
import deflateSync from 'lz-utils/deflate-sync';
import inflate from 'lz-utils/inflate';
import inflateSync from 'lz-utils/inflate-sync';
import createScriptLoader from 'lz-utils/create-script-loader';Examples
Why lz-utils?
lz-utils is designed for a specific workflow: generating self-contained HTML reports.
- Goal - Generate HTML reports that are as
fastto produce as possible and assmallin file size as possible. - How it works - Report data is compressed on the server (Node.js) and bundled into a single HTML file. When the user opens the file in the browser, the data is
self-decompressedand rendered on the fly. This is whydeflateruns on Node.js andinflateruns in the browser. - Why base64? - The compressed output is
binarydata, which cannot be safely embedded in JavaScript (due to encoding and CORS issues). Converting it tobase64produces a plain JS string that can be reliably stored in JSON and embedded in HTML without any escaping problems.
String Compression Benchmark
- string-compression - lz-string, pako, uzip.js, fflate, tiny-inflate
Links
- pieroxy/lz-string - LZ-based compression algorithm
- foliojs/tiny-inflate - Tiny DEFLATE decompression library
