99
1010/**
1111 * Module dependencies.
12+ * @private
1213 */
1314
14- var zlib = require ( 'zlib' ) ;
15- var accepts = require ( 'accepts' ) ;
16- var bytes = require ( 'bytes' ) ;
15+ var accepts = require ( 'accepts' )
16+ var bytes = require ( 'bytes' )
17+ var compressible = require ( 'compressible' )
1718var debug = require ( 'debug' ) ( 'compression' )
18- var onHeaders = require ( 'on-headers' ) ;
19- var compressible = require ( 'compressible' ) ;
20- var vary = require ( 'vary' ) ;
19+ var onHeaders = require ( 'on-headers' )
20+ var vary = require ( 'vary' )
21+ var zlib = require ( 'zlib' )
2122
2223/**
23- * Supported content-encoding methods .
24+ * Module exports .
2425 */
2526
26- exports . methods = {
27- gzip : zlib . createGzip
28- , deflate : zlib . createDeflate
29- } ;
30-
31- /**
32- * Default filter function.
33- */
34-
35- exports . filter = function filter ( req , res ) {
36- var type = res . getHeader ( 'Content-Type' )
37-
38- if ( type === undefined || ! compressible ( type ) ) {
39- debug ( '%s not compressible' , type )
40- return false
41- }
42-
43- return true
44- } ;
27+ module . exports = compression
4528
4629/**
4730 * Compress response data with gzip / deflate.
4831 *
4932 * @param {Object } options
5033 * @return {Function } middleware
51- * @api public
34+ * @public
5235 */
5336
54- module . exports = function compression ( options ) {
37+ function compression ( options ) {
5538 options = options || { } ;
56- var filter = options . filter || exports . filter ;
39+
40+ var filter = options . filter || shouldCompress
5741 var threshold ;
5842
5943 if ( false === options . threshold || 0 === options . threshold ) {
@@ -173,8 +157,8 @@ module.exports = function compression(options) {
173157 }
174158
175159 // compression method
176- var accept = accepts ( req ) ;
177- var method = accept . encodings ( [ 'gzip' , 'deflate' , 'identity' ] ) ;
160+ var accept = accepts ( req )
161+ var method = accept . encoding ( [ 'gzip' , 'deflate' , 'identity' ] )
178162
179163 // negotiation failed
180164 if ( ! method || method === 'identity' ) {
@@ -184,7 +168,11 @@ module.exports = function compression(options) {
184168
185169 // compression stream
186170 debug ( '%s compression' , method )
187- stream = exports . methods [ method ] ( options ) ;
171+ stream = method === 'gzip'
172+ ? zlib . createGzip ( options )
173+ : zlib . createDeflate ( options )
174+
175+ // add bufferred listeners to stream
188176 addListeners ( stream , stream . on , listeners )
189177
190178 // overwrite the flush method
@@ -214,10 +202,11 @@ module.exports = function compression(options) {
214202
215203 next ( ) ;
216204 } ;
217- } ;
205+ }
218206
219207/**
220208 * Add bufferred listeners to stream
209+ * @private
221210 */
222211
223212function addListeners ( stream , on , listeners ) {
@@ -226,4 +215,25 @@ function addListeners(stream, on, listeners) {
226215 }
227216}
228217
218+ /**
219+ * No-operation function
220+ * @private
221+ */
222+
229223function noop ( ) { }
224+
225+ /**
226+ * Default filter function.
227+ * @private
228+ */
229+
230+ function shouldCompress ( req , res ) {
231+ var type = res . getHeader ( 'Content-Type' )
232+
233+ if ( type === undefined || ! compressible ( type ) ) {
234+ debug ( '%s not compressible' , type )
235+ return false
236+ }
237+
238+ return true
239+ }
0 commit comments