compression
Advanced tools
Comparing version 1.0.4 to 1.0.5
@@ -0,1 +1,7 @@ | ||
1.0.5 / 2014-06-03 | ||
================== | ||
* fix listeners for delayed stream creation | ||
- fixes regression for certain `stream.pipe(res)` situations | ||
1.0.4 / 2014-06-03 | ||
@@ -2,0 +8,0 @@ ================== |
42
index.js
@@ -59,7 +59,8 @@ /*! | ||
return function compression(req, res, next){ | ||
var compress = true | ||
var listeners = [] | ||
var write = res.write | ||
var on = res.on | ||
var end = res.end | ||
, compress = true | ||
, stream; | ||
var stream | ||
@@ -112,12 +113,24 @@ // see #8 | ||
res.on = function(type, listener){ | ||
if (!stream || type !== 'drain') { | ||
if (!listeners || type !== 'drain') { | ||
return on.call(this, type, listener) | ||
} | ||
return stream.on(type, listener) | ||
if (stream) { | ||
return stream.on(type, listener) | ||
} | ||
// buffer listeners for future stream | ||
listeners.push([type, listener]) | ||
return this | ||
} | ||
function nocompress(){ | ||
addListeners(res, on, listeners) | ||
listeners = null | ||
} | ||
onHeaders(res, function(){ | ||
// default request filter | ||
if (!filter(req, res)) return; | ||
if (!filter(req, res)) return nocompress() | ||
@@ -127,3 +140,3 @@ // vary | ||
if (!compress) return; | ||
if (!compress) return nocompress() | ||
@@ -133,6 +146,6 @@ var encoding = res.getHeader('Content-Encoding') || 'identity'; | ||
// already encoded | ||
if ('identity' != encoding) return; | ||
if ('identity' !== encoding) return nocompress() | ||
// head | ||
if ('HEAD' == req.method) return; | ||
if ('HEAD' === req.method) return nocompress() | ||
@@ -144,6 +157,7 @@ // compression method | ||
// negotiation failed | ||
if (!method || method === 'identity') return; | ||
if (!method || method === 'identity') nocompress() | ||
// compression stream | ||
stream = exports.methods[method](options); | ||
addListeners(stream, stream.on, listeners) | ||
@@ -179,2 +193,12 @@ // overwrite the flush method | ||
/** | ||
* Add bufferred listeners to stream | ||
*/ | ||
function addListeners(stream, on, listeners) { | ||
for (var i = 0; i < listeners.length; i++) { | ||
on.apply(stream, listeners[i]) | ||
} | ||
} | ||
function noop(){} | ||
@@ -181,0 +205,0 @@ |
{ | ||
"name": "compression", | ||
"description": "Compression middleware for connect and node.js", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "Jonathan Ong", |
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
8854
176