UNPKG

dphelper

Version:

dphelper devtools for developers

311 lines (246 loc) 9.5 kB
# compress Compression and encoding utilities for data compression, decompression, and various encoding formats including gzip, deflate, LZW, base64, URL, and HTML encoding. ## Functions | Function | Description | Example | |----------|-------------|---------| | `gzip` | Compress with gzip | `await dphelper.compress.gzip('Hello World')` | | `gunzip` | Decompress gzip | `await dphelper.compress.gunzip(compressedBlob)` | | `deflate` | Compress with deflate | `await dphelper.compress.deflate('Hello World')` | | `inflate` | Decompress deflate | `await dphelper.compress.inflate(compressedBlob)` | | `compress` | LZW compress | `dphelper.compress.compress('Hello World')` | | `decompress` | LZW decompress | `dphelper.compress.decompress(compressedString)` | | `base64Encode` | Encode to base64 | `dphelper.compress.base64Encode('Hello')` | | `base64Decode` | Decode from base64 | `dphelper.compress.base64Decode('SGVsbG8=')` | | `urlEncode` | URL encode | `dphelper.compress.urlEncode('Hello World!')` | | `urlDecode` | URL decode | `dphelper.compress.urlDecode('Hello%20World!')` | | `htmlEncode` | HTML encode | `dphelper.compress.htmlEncode('<script>')` | | `htmlDecode` | HTML decode | `dphelper.compress.htmlDecode('<script>')` | ## Description Comprehensive compression and encoding module providing: - **Gzip/Deflate** - Browser-native compression using CompressionStream API - **LZW Compression** - JavaScript-compatible compression for data storage - **Base64** - Binary-to-text encoding for data transfer - **URL Encoding** - Percent-encoding for URLs and query strings - **HTML Encoding** - Escape special characters for safe HTML rendering - **Universal** - Works in both browser and server environments ## Usage Examples ### Gzip Compression ```javascript // Compress string with gzip const original = 'Hello World! This is a test string for compression.'; const compressed = await dphelper.compress.gzip(original); console.log('Original size:', original.length); console.log('Compressed type:', compressed.type); // "application/gzip" // Decompress const decompressed = await dphelper.compress.gunzip(compressed); console.log('Decompressed:', decompressed); // "Hello World! This is a test..." ``` ### Deflate Compression ```javascript // Compress with deflate (smaller than gzip, no header) const data = JSON.stringify({ users: [...], metadata: {...} }); const deflated = await dphelper.compress.deflate(data); // Decompress const inflated = await dphelper.compress.inflate(deflated); console.log(JSON.parse(inflated)); ``` ### LZW Compression (JavaScript Compatible) ```javascript // LZW compression - works in both browser and Node.js const original = 'ABABABABABABABAB'; const compressed = dphelper.compress.compress(original); console.log('Original:', original.length, 'chars'); console.log('Compressed:', compressed.length, 'chars'); // Decompress const decompressed = dphelper.compress.decompress(compressed); console.log('Decompressed:', decompressed); // "ABABABABABABABAB" ``` ### Base64 Encoding ```javascript // Encode string to base64 const plain = 'Hello, World!'; const encoded = dphelper.compress.base64Encode(plain); console.log(encoded); // "SGVsbG8sIFdvcmxkIQ==" // Decode from base64 const decoded = dphelper.compress.base64Decode(encoded); console.log(decoded); // "Hello, World!" // Encode binary data const bytes = new Uint8Array([72, 101, 108, 108, 111]); const binaryEncoded = dphelper.compress.base64Encode(String.fromCharCode(...bytes)); console.log(binaryEncoded); // "SGVsbG8=" ``` ### URL Encoding ```javascript // URL encode (percent-encoding) const url = 'Hello World! Test=1&value=abc'; const encoded = dphelper.compress.urlEncode(url); console.log(encoded); // "Hello%20World!%20Test%3D1%26value%3Dabc" // URL decode const decoded = dphelper.compress.urlDecode(encoded); console.log(decoded); // "Hello World! Test=1&value=abc" // Encode for query string const query = 'name=John Doe&city=New York'; const queryEncoded = dphelper.compress.urlEncode(query); console.log(queryEncoded); // "name%3DJohn%20Doe%26city%3DNew%20York" ``` ### HTML Encoding ```javascript // HTML encode (escape special characters) const unsafe = '<script>alert("XSS!")</script>'; const encoded = dphelper.compress.htmlEncode(unsafe); console.log(encoded); // "<script>alert("XSS!")</script>" // HTML decode const decoded = dphelper.compress.htmlDecode(encoded); console.log(decoded); // '<script>alert("XSS!")</script>' // Encode user input before displaying const userInput = '<div onclick="evil()">Click me</div>'; const safe = dphelper.compress.htmlEncode(userInput); // In HTML: <div onclick="evil()">Click me</div> ``` ## Advanced Usage ### Data Compression for Storage ```javascript class CompressedStorage { async compress(key, data) { const json = JSON.stringify(data); const compressed = await dphelper.compress.gzip(json); localStorage.setItem(key, await compressed.text()); } async decompress(key) { const stored = localStorage.getItem(key); if (!stored) return null; const blob = new Blob([stored], { type: 'application/gzip' }); const decompressed = await dphelper.compress.gunzip(blob); return JSON.parse(decompressed); } } // Usage const storage = new CompressedStorage(); await storage.compress('cache', { users: [...], timestamp: Date.now() }); const data = await storage.decompress('cache'); ``` ### API Response Compression ```javascript // Compress data before sending to server async function sendCompressed(url, data) { const json = JSON.stringify(data); const compressed = await dphelper.compress.gzip(json); return fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/gzip' }, body: compressed }); } // Decompress server response async function fetchCompressed(url) { const response = await fetch(url); const compressed = await response.blob(); const decompressed = await dphelper.compress.gunzip(compressed); return JSON.parse(decompressed); } ``` ### String Compression for URLs ```javascript // Compress data for URL-safe storage (using LZW) function compressForUrl(data) { const compressed = dphelper.compress.compress(JSON.stringify(data)); return dphelper.compress.base64Encode(compressed) .replace(/\+/g, '-') .replace(/\//g, '_') .replace(/=+$/, ''); } // Decompress from URL function decompressFromUrl(encoded) { const base64 = encoded.replace(/-/g, '+').replace(/_/g, '/'); const padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '='); const compressed = dphelper.compress.base64Decode(padded); return JSON.parse(dphelper.compress.decompress(compressed)); } // Usage const data = { id: 123, type: 'test', values: [1,2,3] }; const encoded = compressForUrl(data); console.log(encoded); // URL-safe compressed string const decoded = decompressFromUrl(encoded); console.log(decoded); // { id: 123, type: 'test', values: [1,2,3] } ``` ### Secure Data Transfer ```javascript // Encode sensitive data for transfer function encodeSecure(data) { const json = JSON.stringify(data); const base64 = dphelper.compress.base64Encode(json); return base64; } // Decode secure data function decodeSecure(encoded) { const json = dphelper.compress.base64Decode(encoded); return JSON.parse(json); } // Sanitize HTML content function sanitizeHtml(content) { return dphelper.compress.htmlEncode(content); } // Build safe query string function buildQueryString(params) { return Object.entries(params) .map(([k, v]) => `${dphelper.compress.urlEncode(k)}=${dphelper.compress.urlEncode(v)}`) .join('&'); } console.log(buildQueryString({ name: 'John Doe', age: '30' })); // "name=John%20Doe=30" ``` ### Cache with Compression ```javascript class CacheManager { constructor(prefix = 'cache_') { this.prefix = prefix; } async set(key, value, maxAge = 3600000) { const entry = { data: value, expires: Date.now() + maxAge }; const compressed = await dphelper.compress.gzip(JSON.stringify(entry)); localStorage.setItem( this.prefix + key, await compressed.text() ); } async get(key) { const stored = localStorage.getItem(this.prefix + key); if (!stored) return null; try { const blob = new Blob([stored], { type: 'application/gzip' }); const decompressed = await dphelper.compress.gunzip(blob); const entry = JSON.parse(decompressed); if (Date.now() > entry.expires) { localStorage.removeItem(this.prefix + key); return null; } return entry.data; } catch { return null; } } clear() { Object.keys(localStorage) .filter(k => k.startsWith(this.prefix)) .forEach(k => localStorage.removeItem(k)); } } // Usage const cache = new CacheManager(); await cache.set('user_123', { name: 'John', email: 'john@example.com' }); const user = await cache.get('user_123'); ``` ## Details - **Author:** Dario Passariello - **Version:** 0.0.1 - **Creation Date:** 20260313 - **Last Modified:** 20260313 - **Environment:** Works in both client and server environments --- *Automatically generated document*