diff --git a/README.md b/README.md index 7c648142..a6f5a6a4 100755 --- a/README.md +++ b/README.md @@ -419,23 +419,25 @@ var counters = sharp.counters(); // { queue: 2, process: 4 } ### It worked on my machine - npm test +``` +npm test +``` Running the comparative performance tests requires _ImageMagick_ and _GraphicsMagick_. ``` - brew install imagemagick - brew install graphicsmagick +brew install imagemagick +brew install graphicsmagick ``` ``` - sudo apt-get install -qq imagemagick graphicsmagick +sudo apt-get install -qq imagemagick graphicsmagick ``` ``` - sudo yum install ImageMagick - sudo yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm - sudo yum install -y --enablerepo=epel GraphicsMagick +sudo yum install ImageMagick +sudo yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm +sudo yum install -y --enablerepo=epel GraphicsMagick ``` ## Performance diff --git a/index.js b/index.js index 5636aeb1..89d9f33d 100755 --- a/index.js +++ b/index.js @@ -331,16 +331,22 @@ Sharp.prototype._sharp = function(callback) { // output=stream, input=stream this.on('finish', function() { sharp.resize(that.options, function(err, data) { - if (err) throw err; - that.push(data); + if (err) { + that.emit('error', new Error(err)); + } else { + that.push(data); + } that.push(null); }); }); } else { // output=stream, input=file/buffer sharp.resize(this.options, function(err, data) { - if (err) throw err; - that.push(data); + if (err) { + that.emit('error', new Error(err)); + } else { + that.push(data); + } that.push(null); }); } diff --git a/tests/unit.js b/tests/unit.js index 6bcb8be1..e07195e4 100755 --- a/tests/unit.js +++ b/tests/unit.js @@ -417,6 +417,33 @@ async.series([ var pipeline = sharp().resize(320, 240); readable.pipe(pipeline).pipe(writable); }, + // Stream-Stream error handling + function(done) { + var pipeline = sharp().resize(320, 240); + var anErrorWasEmitted = false; + pipeline.on('error', function(err) { + anErrorWasEmitted = !!err; + }).on('end', function() { + assert(anErrorWasEmitted); + done(); + }); + var readableButNotAnImage = fs.createReadStream(__filename); + var writable = fs.createWriteStream(outputJpg); + readableButNotAnImage.pipe(pipeline).pipe(writable); + }, + // File-Stream error handling + function(done) { + var readableButNotAnImage = sharp(__filename).resize(320, 240); + var anErrorWasEmitted = false; + readableButNotAnImage.on('error', function(err) { + anErrorWasEmitted = !!err; + }).on('end', function() { + assert(anErrorWasEmitted); + done(); + }); + var writable = fs.createWriteStream(outputJpg); + readableButNotAnImage.pipe(writable); + }, // Crop, gravity=north function(done) { sharp(inputJpg).resize(320, 80).crop(sharp.gravity.north).toFile(path.join(fixturesPath, 'output.gravity-north.jpg'), function(err, info) {