# zlib

***

**1. Compressing a String**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**2. Decompressing a Buffer**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**3. Compressing a File**

```js
const fs = require('fs');
const zlib = require('zlib');

const input = 'input.txt';
const output = 'output.gz';

fs.createReadStream(input)
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream(output));
```

**4. Decompressing a File**

```js
const fs = require('fs');
const zlib = require('zlib');

const input = 'input.gz';
const output = 'output.txt';

fs.createReadStream(input)
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream(output));
```

**5. Compressing a Stream**

```js
const fs = require('fs');
const zlib = require('zlib');

const input = fs.createReadStream('input.txt');
const output = fs.createWriteStream('output.gz');

input.pipe(zlib.createGzip()).pipe(output);
```

**6. Decompressing a Stream**

```js
const fs = require('fs');
const zlib = require('zlib');

const input = fs.createReadStream('input.gz');
const output = fs.createWriteStream('output.txt');

input.pipe(zlib.createGunzip()).pipe(output);
```

**7. Compressing Data with a Custom Level**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, { level: 9 }, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**8. Decompressing Data with a Custom Level**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, { level: 9 }, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**9. Compressing Data with a Custom Strategy**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, { strategy: zlib.Z_RLE }, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**10. Decompressing Data with a Custom Strategy**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, { strategy: zlib.Z_RLE }, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**11. Compressing Data with a Custom Window Size**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  windowBits: 15,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**12. Decompressing Data with a Custom Window Size**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  windowBits: 15,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**13. Compressing Data with a Custom Flush Mode**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  flush: zlib.Z_PARTIAL_FLUSH,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**14. Decompressing Data with a Custom Flush Mode**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  flush: zlib.Z_PARTIAL_FLUSH,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**15. Compressing Data with a Custom Dictionary**

```js
const zlib = require('zlib');

const input = 'Hello, world!';
const dictionary = 'example dictionary';

zlib.deflate(input, {
  dict: dictionary,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**16. Decompressing Data with a Custom Dictionary**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');
const dictionary = 'example dictionary';

zlib.inflate(input, {
  dict: dictionary,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**17. Compressing Data with a Custom Checksum**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  checksum: true,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**18. Decompressing Data with a Custom Checksum**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  verify: true,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**19. Compressing Data with a Custom Memory Level**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  memLevel: 9,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**20. Decompressing Data with a Custom Memory Level**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  memLevel: 9,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**21. Compressing Data with a Custom Maximum Window Size**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  maxWindowBits: 15,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**22. Decompressing Data with a Custom Maximum Window Size**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  maxWindowBits: 15,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**23. Compressing Data with a Custom Buffer Size**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  bufferSize: 1024,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**24. Decompressing Data with a Custom Buffer Size**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  bufferSize: 1024,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**25. Compressing Data with a Custom Flag**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  flags: zlib.Z_SYNC_FLUSH,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**26. Decompressing Data with a Custom Flag**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  flags: zlib.Z_SYNC_FLUSH,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**27. Compressing Data with a Custom Timeout**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  timeout: 1000,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**28. Decompressing Data with a Custom Timeout**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  timeout: 1000,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**29. Compressing Data with a Custom Callback**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
});
```

**30. Decompressing Data with a Custom Callback**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
});
```

**31. Compressing Data with a Custom Progress Callback**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
}, {
  progress: (progress) => {
    console.log(`Progress: ${progress}%`);
  },
});
```

**32. Decompressing Data with a Custom Progress Callback**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
}, {
  progress: (progress) => {
    console.log(`Progress: ${progress}%`);
  },
});
```

**33. Compressing Data with a Custom Flush Mode and Callback**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  flush: zlib.Z_PARTIAL_FLUSH,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
}, {
  progress: (progress) => {
    console.log(`Progress: ${progress}%`);
  },
});
```

**34. Decompressing Data with a Custom Flush Mode and Callback**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  flush: zlib.Z_PARTIAL_FLUSH,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
}, {
  progress: (progress) => {
    console.log(`Progress: ${progress}%`);
  },
});
```

**35. Compressing Data with a Custom Window Size and Callback**

```js
const zlib = require('zlib');

const input = 'Hello, world!';

zlib.deflate(input, {
  windowBits: 15,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString('base64'));
}, {
  progress: (progress) => {
    console.log(`Progress: ${progress}%`);
  },
});
```

**36. Decompressing Data with a Custom Window Size and Callback**

```js
const zlib = require('zlib');

const input = Buffer.from('qEBAAAE=', 'base64');

zlib.inflate(input, {
  windowBits: 15,
}, (err, buffer) => {
  if (err) throw err;
  console.log(buffer.toString());
}, {
  progress: (progress) => {
    console.log(`Progress: ${progress}%`);
  },
});
```
