Comparing version 0.4.1 to 0.5.0
@@ -100,3 +100,6 @@ var util = require('util'); | ||
self.emit('entry', entry); | ||
if (self._readableState.pipesCount) | ||
self.push(entry); | ||
self.pull(vars.extraFieldLength).then(function(extraField) { | ||
@@ -107,4 +110,2 @@ var fileSizeKnown = !(vars.flags & 0x08), | ||
var inflater = vars.compressionMethod ? zlib.createInflateRaw() : Stream.PassThrough(); | ||
if (self.listenerCount && !self.listenerCount('entry')) | ||
inflater = NoopStream(); | ||
@@ -199,6 +200,8 @@ if (fileSizeKnown) { | ||
comment = comment.toString('utf8'); | ||
return self.end(); | ||
self.end(); | ||
self.push(null); | ||
}); | ||
} else { | ||
self.end(); | ||
self.push(null); | ||
} | ||
@@ -205,0 +208,0 @@ }); |
@@ -14,7 +14,7 @@ var Stream = require('stream'); | ||
Stream.Writable.call(this,{decodeStrings:false}); | ||
Stream.Duplex.call(this,{decodeStrings:false, objectMode:true}); | ||
this.buffer = new Buffer(''); | ||
} | ||
util.inherits(PullStream,Stream.Writable); | ||
util.inherits(PullStream,Stream.Duplex); | ||
@@ -21,0 +21,0 @@ PullStream.prototype._write = function(chunk,e,cb) { |
{ | ||
"name": "unzipper", | ||
"version": "0.4.1", | ||
"version": "0.5.0", | ||
"description": "Unzip cross-platform streaming API ", | ||
@@ -5,0 +5,0 @@ "author": "Evan Oxfeld <eoxfeld@gmail.com>", |
@@ -7,4 +7,6 @@ # unzipper [![Build Status](https://api.travis-ci.org/ZJONSSON/node-unzipper.png)](https://api.travis-ci.org/ZJONSSON/node-unzipper) | ||
The stucture of this fork is identical to the original, but uses ES6, Promises and inherit guarantees provided by node streams to ensure low memory footprint and guarantee finish/close events at the end of processing. | ||
The stucture of this fork is similar to the original, but uses Promises and inherit guarantees provided by node streams to ensure low memory footprint and guarantee finish/close events at the end of processing. The new `Parser` will push any parsed `entries` downstream if you pipe from it, while still supporting the legacy `entry` event as well. | ||
Breaking changes: The new `Parser` will not automatically drain entries if there are no listeners or pipes in place. | ||
Unzipper provides simple APIs similar to [node-tar](https://github.com/isaacs/node-tar) for parsing and extracting zip files. | ||
@@ -50,15 +52,47 @@ There are no added compiled dependencies - inflation is handled by node.js's built in zlib support. | ||
``` | ||
### Parse zip by piping entries downstream | ||
Or pipe the output of unzipper.Parse() to fstream | ||
If you `pipe` from unzipper the downstream components will receive each `entry` for further processing. This allows for clean pipelines transforming zipfiles into unzipped data. | ||
Example using `stream.Transform`: | ||
```js | ||
var readStream = fs.createReadStream('path/to/archive.zip'); | ||
var writeStream = fstream.Writer('output/path'); | ||
fs.createReadStream('path/to/archive.zip') | ||
.pipe(unzipper.Parse()) | ||
.pipe(stream.Transform({ | ||
objectMode: true, | ||
_transform: function(entry,e,cb) { | ||
var fileName = entry.path; | ||
var type = entry.type; // 'Directory' or 'File' | ||
var size = entry.size; | ||
if (fileName === "this IS the file I'm looking for") { | ||
entry.pipe(fs.createWriteStream('output/path')) | ||
.on('finish',cb); | ||
} else { | ||
entry.autodrain(); | ||
cb(); | ||
} | ||
} | ||
} | ||
})); | ||
``` | ||
readStream | ||
Example using [etl](https://www.npmjs.com/package/etl): | ||
```js | ||
fs.createReadStream('path/to/archive.zip') | ||
.pipe(unzipper.Parse()) | ||
.pipe(writeStream) | ||
.pipe(etl.map(entry => { | ||
if (entry.path == "this IS the file I'm looking for") | ||
return entry | ||
.pipe(etl.toFile('output/path')) | ||
.promise(); | ||
else | ||
entry.autodrain(); | ||
})) | ||
``` | ||
## Licenses | ||
See LICENCE |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
36040
26
511
96
6