# Compression Streams API

The Compression Streams API provides a JavaScript API for compressing and decompressing streams of data. It allows you to compress data directly in the browser without needing to send it to a server or use a heavy JavaScript library.

## 1. Supported Formats

The API supports the following compression formats:
*   `gzip`
*   `deflate`
*   `deflate-raw`

## 2. Compressing Data

To compress data, you use the `CompressionStream` interface. It is a Transform Stream that takes chunks of data as input and outputs compressed chunks.

```javascript
async function compressData(readableStream) {
  const compressedStream = readableStream.pipeThrough(
    new CompressionStream('gzip')
  );
  return compressedStream;
}
```

### Example: Compressing a String

```javascript
async function compressString(str) {
  // 1. Convert string to stream
  const stream = new Blob([str]).stream();
  
  // 2. Compress
  const compressedStream = stream.pipeThrough(
    new CompressionStream('gzip')
  );
  
  // 3. Convert stream back to Response/Blob/ArrayBuffer
  const compressedResponse = new Response(compressedStream);
  const blob = await compressedResponse.blob();
  
  return blob;
}
```

## 3. Decompressing Data

To decompress data, you use the `DecompressionStream` interface.

```javascript
async function decompressBlob(blob) {
  const stream = blob.stream().pipeThrough(
    new DecompressionStream('gzip')
  );
  
  const decompressedResponse = new Response(stream);
  const text = await decompressedResponse.text();
  return text;
}
```

[[programming/javascript/vanilla/javascript]]
[[programming/javascript/vanilla/streams-api]]
[[programming/javascript/vanilla/file-api]]