1234567891011121314151617181920212223242526272829303132 |
- var zlib = require('zlib')
- var peek = require('peek-stream')
- var through = require('through2')
- var pumpify = require('pumpify')
- var isGzip = require('is-gzip')
- var isDeflate = require('is-deflate')
- var isCompressed = function (data) {
- if (isGzip(data)) return 1
- if (isDeflate(data)) return 2
- return 0
- }
- var gunzip = function (maxRecursion) {
- if (maxRecursion === undefined) maxRecursion = 3
- return peek({newline: false, maxBuffer: 10}, function (data, swap) {
- if (maxRecursion < 0) return swap(new Error('Maximum recursion reached'))
- switch (isCompressed(data)) {
- case 1:
- swap(null, pumpify(zlib.createGunzip(), gunzip(maxRecursion - 1)))
- break
- case 2:
- swap(null, pumpify(zlib.createInflate(), gunzip(maxRecursion - 1)))
- break
- default:
- swap(null, through())
- }
- })
- }
- module.exports = gunzip
|