itty-compressor
v1.0.1
Published
A tiny (de)compressor using CompressionStream and DecompressionStream (with Response)
Downloads
3
Maintainers
Readme
itty-compressor
Install
itty-compressor
is an ESM-only module - you are not able to import it with require
. If you are unable to use ESM in your project you can use the async import('itty-compressor')
from CommonJS to load itty-compressor
asynchronously.
npm install itty-compressor
To use it in node then you need to have global support for CompressionStream
,
DecompressionStream
and Response
globally installed (Requires NodeJS v18)
note: This dose not currently work in FireFox. (due to lack of Compression stream)
Usage
For browsers you should use type="module"
<script type="module">
import { compress, decompress } from 'https://cdn.jsdelivr.net/npm/itty-compressor'
const { compress, decompress } = await import('https://jspm.dev/itty-compressor')
</script>
import { compress, decompress } from 'itty-compressor'
import { compress, decompress } from 'https://cdn.jsdelivr.net/npm/itty-compressor'
const body = 'hello world'.repeat(1024)
const compressed = compress(body) // Returns a `Response`
const decompressed = decompress(compressed.body) // Returns a `Response`
Both compress
and ``decompresstakes the same argument that the
Response`
constructor accepts, meaning ArrayBuffer, typed arrays, Blob, File, FormData,
String, URLSearchParams ReadableStream and more. (Unsupported types will be casted to string)
fyi, NodeJS Response version also supports async iterator (so node streams works too)
Both method also supports a 2nd optional format that can be either
gzip
, deflate
or deflate-raw
. it defaults to gzip
Both method will return a Response back, so you can consume it anyway you like
await compress(body, 'deflate').arrayBuffer()
await compress(body, 'deflate').blob()
await compress(body, 'deflate').body.pipeTo(new WritableStream({ ... }))
await decompress(body, 'deflate').arrayBuffer()
await decompress(body, 'deflate').blob()
await decompress(body, 'deflate-raw').body.pipeTo(dest)
await decompress(body, 'deflate-raw').text()
await decompress(body, 'deflate-raw').json()
null
and undefined
is converted to empty string.