aboutsummaryrefslogtreecommitdiff
path: root/node_modules/compression
diff options
context:
space:
mode:
authorHumairAK <humair88@hotmail.com>2016-07-27 00:18:34 +0000
committerHumairAK <humair88@hotmail.com>2016-07-27 00:18:34 +0000
commit25706820837bd05cdc3b186eb1d5ebabf9688a61 (patch)
treeafbc83b902d3f0789d5174bd2e2798937ab57b26 /node_modules/compression
parent38594fd274a4bebee75ae71dbed457b39d253cae (diff)
parent714368c049f8749ed22c6d1d07bb3adc783dc349 (diff)
Merge branch 'master' of https://github.com/HumairAK/solutions_repo
Diffstat (limited to 'node_modules/compression')
-rw-r--r--node_modules/compression/HISTORY.md251
-rw-r--r--node_modules/compression/LICENSE23
-rw-r--r--node_modules/compression/README.md233
-rw-r--r--node_modules/compression/index.js276
-rw-r--r--node_modules/compression/node_modules/bytes/History.md65
-rw-r--r--node_modules/compression/node_modules/bytes/LICENSE23
-rw-r--r--node_modules/compression/node_modules/bytes/Readme.md109
-rw-r--r--node_modules/compression/node_modules/bytes/index.js154
-rw-r--r--node_modules/compression/node_modules/bytes/package.json85
-rw-r--r--node_modules/compression/node_modules/compressible/HISTORY.md56
-rw-r--r--node_modules/compression/node_modules/compressible/LICENSE24
-rw-r--r--node_modules/compression/node_modules/compressible/README.md46
-rw-r--r--node_modules/compression/node_modules/compressible/index.js58
-rw-r--r--node_modules/compression/node_modules/compressible/package.json111
-rw-r--r--node_modules/compression/package.json82
15 files changed, 1596 insertions, 0 deletions
diff --git a/node_modules/compression/HISTORY.md b/node_modules/compression/HISTORY.md
new file mode 100644
index 0000000..663f0de
--- /dev/null
+++ b/node_modules/compression/HISTORY.md
@@ -0,0 +1,251 @@
+1.6.2 / 2016-05-12
+==================
+
+ * deps: accepts@~1.3.3
+ - deps: mime-types@~2.1.11
+ - deps: negotiator@0.6.1
+ * deps: bytes@2.3.0
+ - Drop partial bytes on all parsed units
+ - Fix parsing byte string that looks like hex
+ - perf: hoist regular expressions
+ * deps: compressible@~2.0.8
+ - deps: mime-db@'>= 1.23.0 < 2'
+
+1.6.1 / 2016-01-19
+==================
+
+ * deps: bytes@2.2.0
+ * deps: compressible@~2.0.7
+ - deps: mime-db@'>= 1.21.0 < 2'
+ * deps: accepts@~1.3.1
+ - deps: mime-types@~2.1.9
+
+1.6.0 / 2015-09-29
+==================
+
+ * Skip compression when response has `Cache-Control: no-transform`
+ * deps: accepts@~1.3.0
+ - deps: mime-types@~2.1.7
+ - deps: negotiator@0.6.0
+ * deps: compressible@~2.0.6
+ - deps: mime-db@'>= 1.19.0 < 2'
+ * deps: on-headers@~1.0.1
+ - perf: enable strict mode
+ * deps: vary@~1.1.0
+ - Only accept valid field names in the `field` argument
+
+1.5.2 / 2015-07-30
+==================
+
+ * deps: accepts@~1.2.12
+ - deps: mime-types@~2.1.4
+ * deps: compressible@~2.0.5
+ - deps: mime-db@'>= 1.16.0 < 2'
+ * deps: vary@~1.0.1
+ - Fix setting empty header from empty `field`
+ - perf: enable strict mode
+ - perf: remove argument reassignments
+
+1.5.1 / 2015-07-05
+==================
+
+ * deps: accepts@~1.2.10
+ - deps: mime-types@~2.1.2
+ * deps: compressible@~2.0.4
+ - deps: mime-db@'>= 1.14.0 < 2'
+ - perf: enable strict mode
+
+1.5.0 / 2015-06-09
+==================
+
+ * Fix return value from `.end` and `.write` after end
+ * Improve detection of zero-length body without `Content-Length`
+ * deps: accepts@~1.2.9
+ - deps: mime-types@~2.1.1
+ - perf: avoid argument reassignment & argument slice
+ - perf: avoid negotiator recursive construction
+ - perf: enable strict mode
+ - perf: remove unnecessary bitwise operator
+ * deps: bytes@2.1.0
+ - Slight optimizations
+ - Units no longer case sensitive when parsing
+ * deps: compressible@~2.0.3
+ - Fix regex fallback to work if type exists, but is undefined
+ - deps: mime-db@'>= 1.13.0 < 2'
+ - perf: hoist regex declaration
+ - perf: use regex to extract mime
+ * perf: enable strict mode
+ * perf: remove flush reassignment
+ * perf: simplify threshold detection
+
+1.4.4 / 2015-05-11
+==================
+
+ * deps: accepts@~1.2.7
+ - deps: mime-types@~2.0.11
+ - deps: negotiator@0.5.3
+ * deps: debug@~2.2.0
+ - deps: ms@0.7.1
+
+1.4.3 / 2015-03-14
+==================
+
+ * deps: accepts@~1.2.5
+ - deps: mime-types@~2.0.10
+ * deps: debug@~2.1.3
+ - Fix high intensity foreground color for bold
+ - deps: ms@0.7.0
+
+1.4.2 / 2015-03-11
+==================
+
+ * Fix error when code calls `res.end(str, encoding)`
+ - Specific to Node.js 0.8
+ * deps: debug@~2.1.2
+ - deps: ms@0.7.0
+
+1.4.1 / 2015-02-15
+==================
+
+ * deps: accepts@~1.2.4
+ - deps: mime-types@~2.0.9
+ - deps: negotiator@0.5.1
+
+1.4.0 / 2015-02-01
+==================
+
+ * Prefer `gzip` over `deflate` on the server
+ - Not all clients agree on what "deflate" coding means
+
+1.3.1 / 2015-01-31
+==================
+
+ * deps: accepts@~1.2.3
+ - deps: mime-types@~2.0.8
+ * deps: compressible@~2.0.2
+ - deps: mime-db@'>= 1.1.2 < 2'
+
+1.3.0 / 2014-12-30
+==================
+
+ * Export the default `filter` function for wrapping
+ * deps: accepts@~1.2.2
+ - deps: mime-types@~2.0.7
+ - deps: negotiator@0.5.0
+ * deps: debug@~2.1.1
+
+1.2.2 / 2014-12-10
+==================
+
+ * Fix `.end` to only proxy to `.end`
+ - Fixes an issue with Node.js 0.11.14
+ * deps: accepts@~1.1.4
+ - deps: mime-types@~2.0.4
+
+1.2.1 / 2014-11-23
+==================
+
+ * deps: accepts@~1.1.3
+ - deps: mime-types@~2.0.3
+
+1.2.0 / 2014-10-16
+==================
+
+ * deps: debug@~2.1.0
+ - Implement `DEBUG_FD` env variable support
+
+1.1.2 / 2014-10-15
+==================
+
+ * deps: accepts@~1.1.2
+ - Fix error when media type has invalid parameter
+ - deps: negotiator@0.4.9
+
+1.1.1 / 2014-10-12
+==================
+
+ * deps: accepts@~1.1.1
+ - deps: mime-types@~2.0.2
+ - deps: negotiator@0.4.8
+ * deps: compressible@~2.0.1
+ - deps: mime-db@1.x
+
+1.1.0 / 2014-09-07
+==================
+
+ * deps: accepts@~1.1.0
+ * deps: compressible@~2.0.0
+ * deps: debug@~2.0.0
+
+1.0.11 / 2014-08-10
+===================
+
+ * deps: on-headers@~1.0.0
+ * deps: vary@~1.0.0
+
+1.0.10 / 2014-08-05
+===================
+
+ * deps: compressible@~1.1.1
+ - Fix upper-case Content-Type characters prevent compression
+
+1.0.9 / 2014-07-20
+==================
+
+ * Add `debug` messages
+ * deps: accepts@~1.0.7
+ - deps: negotiator@0.4.7
+
+1.0.8 / 2014-06-20
+==================
+
+ * deps: accepts@~1.0.5
+ - use `mime-types`
+
+1.0.7 / 2014-06-11
+==================
+
+ * use vary module for better `Vary` behavior
+ * deps: accepts@1.0.3
+ * deps: compressible@1.1.0
+
+1.0.6 / 2014-06-03
+==================
+
+ * fix regression when negotiation fails
+
+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
+==================
+
+ * fix adding `Vary` when value stored as array
+ * fix back-pressure behavior
+ * fix length check for `res.end`
+
+1.0.3 / 2014-05-29
+==================
+
+ * use `accepts` for negotiation
+ * use `on-headers` to handle header checking
+ * deps: bytes@1.0.0
+
+1.0.2 / 2014-04-29
+==================
+
+ * only version compatible with node.js 0.8
+ * support headers given to `res.writeHead`
+ * deps: bytes@0.3.0
+ * deps: negotiator@0.4.3
+
+1.0.1 / 2014-03-08
+==================
+
+ * bump negotiator
+ * use compressible
+ * use .headersSent (drops 0.8 support)
+ * handle identity;q=0 case
diff --git a/node_modules/compression/LICENSE b/node_modules/compression/LICENSE
new file mode 100644
index 0000000..386b7b6
--- /dev/null
+++ b/node_modules/compression/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
+Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/compression/README.md b/node_modules/compression/README.md
new file mode 100644
index 0000000..a5d599d
--- /dev/null
+++ b/node_modules/compression/README.md
@@ -0,0 +1,233 @@
+# compression
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+[![Gratipay][gratipay-image]][gratipay-url]
+
+Node.js compression middleware.
+
+The following compression codings are supported:
+
+ - deflate
+ - gzip
+
+## Install
+
+```bash
+$ npm install compression
+```
+
+## API
+
+```js
+var compression = require('compression')
+```
+
+### compression([options])
+
+Returns the compression middleware using the given `options`. The middleware
+will attempt to compress response bodies for all request that traverse through
+the middleware, based on the given `options`.
+
+This middleware will never compress responses that include a `Cache-Control`
+header with the [`no-transform` directive](https://tools.ietf.org/html/rfc7234#section-5.2.2.4),
+as compressing will transform the body.
+
+#### Options
+
+`compression()` accepts these properties in the options object. In addition to
+those listed below, [zlib](http://nodejs.org/api/zlib.html) options may be
+passed in to the options object.
+
+##### chunkSize
+
+The default value is `zlib.Z_DEFAULT_CHUNK`, or `16384`.
+
+See [Node.js documentation](http://nodejs.org/api/zlib.html#zlib_memory_usage_tuning)
+regarding the usage.
+
+##### filter
+
+A function to decide if the response should be considered for compression.
+This function is called as `filter(req, res)` and is expected to return
+`true` to consider the response for compression, or `false` to not compress
+the response.
+
+The default filter function uses the [compressible](https://www.npmjs.com/package/compressible)
+module to determine if `res.getHeader('Content-Type')` is compressible.
+
+##### level
+
+The level of zlib compression to apply to responses. A higher level will result
+in better compression, but will take longer to complete. A lower level will
+result in less compression, but will be much faster.
+
+This is an integer in the range of `0` (no compression) to `9` (maximum
+compression). The special value `-1` can be used to mean the "default
+compression level", which is a default compromise between speed and
+compression (currently equivalent to level 6).
+
+ - `-1` Default compression level (also `zlib.Z_DEFAULT_COMPRESSION`).
+ - `0` No compression (also `zlib.Z_NO_COMPRESSION`).
+ - `1` Fastest compression (also `zlib.Z_BEST_SPEED`).
+ - `2`
+ - `3`
+ - `4`
+ - `5`
+ - `6` (currently what `zlib.Z_DEFAULT_COMPRESSION` points to).
+ - `7`
+ - `8`
+ - `9` Best compression (also `zlib.Z_BEST_COMPRESSION`).
+
+The default value is `zlib.Z_DEFAULT_COMPRESSION`, or `-1`.
+
+**Note** in the list above, `zlib` is from `zlib = require('zlib')`.
+
+##### memLevel
+
+This specifies how much memory should be allocated for the internal compression
+state and is an integer in the range of `1` (minimum level) and `9` (maximum
+level).
+
+The default value is `zlib.Z_DEFAULT_MEMLEVEL`, or `8`.
+
+See [Node.js documentation](http://nodejs.org/api/zlib.html#zlib_memory_usage_tuning)
+regarding the usage.
+
+##### strategy
+
+This is used to tune the compression algorithm. This value only affects the
+compression ratio, not the correctness of the compressed output, even if it
+is not set appropriately.
+
+ - `zlib.Z_DEFAULT_STRATEGY` Use for normal data.
+ - `zlib.Z_FILTERED` Use for data produced by a filter (or predictor).
+ Filtered data consists mostly of small values with a somewhat random
+ distribution. In this case, the compression algorithm is tuned to
+ compress them better. The effect is to force more Huffman coding and less
+ string matching; it is somewhat intermediate between `zlib.Z_DEFAULT_STRATEGY`
+ and `zlib.Z_HUFFMAN_ONLY`.
+ - `zlib.Z_FIXED` Use to prevent the use of dynamic Huffman codes, allowing
+ for a simpler decoder for special applications.
+ - `zlib.Z_HUFFMAN_ONLY` Use to force Huffman encoding only (no string match).
+ - `zlib.Z_RLE` Use to limit match distances to one (run-length encoding).
+ This is designed to be almost as fast as `zlib.Z_HUFFMAN_ONLY`, but give
+ better compression for PNG image data.
+
+**Note** in the list above, `zlib` is from `zlib = require('zlib')`.
+
+##### threshold
+
+The byte threshold for the response body size before compression is considered
+for the response, defaults to `1kb`. This is a number of bytes, any string
+accepted by the [bytes](https://www.npmjs.com/package/bytes) module, or `false`.
+
+**Note** this is only an advisory setting; if the response size cannot be determined
+at the time the response headers are written, then it is assumed the response is
+_over_ the threshold. To guarantee the response size can be determined, be sure
+set a `Content-Length` response header.
+
+##### windowBits
+
+The default value is `zlib.Z_DEFAULT_WINDOWBITS`, or `15`.
+
+See [Node.js documentation](http://nodejs.org/api/zlib.html#zlib_memory_usage_tuning)
+regarding the usage.
+
+#### .filter
+
+The default `filter` function. This is used to construct a custom filter
+function that is an extension of the default function.
+
+```js
+app.use(compression({filter: shouldCompress}))
+
+function shouldCompress(req, res) {
+ if (req.headers['x-no-compression']) {
+ // don't compress responses with this request header
+ return false
+ }
+
+ // fallback to standard filter function
+ return compression.filter(req, res)
+}
+```
+
+### res.flush
+
+This module adds a `res.flush()` method to force the partially-compressed
+response to be flushed to the client.
+
+## Examples
+
+### express/connect
+
+When using this module with express or connect, simply `app.use` the module as
+high as you like. Requests that pass through the middleware will be compressed.
+
+```js
+var compression = require('compression')
+var express = require('express')
+
+var app = express()
+
+// compress all requests
+app.use(compression())
+
+// add all routes
+```
+
+### Server-Sent Events
+
+Because of the nature of compression this module does not work out of the box
+with server-sent events. To compress content, a window of the output needs to
+be buffered up in order to get good compression. Typically when using server-sent
+events, there are certain block of data that need to reach the client.
+
+You can achieve this by calling `res.flush()` when you need the data written to
+actually make it to the client.
+
+```js
+var compression = require('compression')
+var express = require('express')
+
+var app = express()
+
+// compress responses
+app.use(compression())
+
+// server-sent event stream
+app.get('/events', function (req, res) {
+ res.setHeader('Content-Type', 'text/event-stream')
+ res.setHeader('Cache-Control', 'no-cache')
+
+ // send a ping approx every 2 seconds
+ var timer = setInterval(function () {
+ res.write('data: ping\n\n')
+
+ // !!! this is the important part
+ res.flush()
+ }, 2000)
+
+ res.on('close', function () {
+ clearInterval(timer)
+ })
+})
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/compression.svg
+[npm-url]: https://npmjs.org/package/compression
+[travis-image]: https://img.shields.io/travis/expressjs/compression/master.svg
+[travis-url]: https://travis-ci.org/expressjs/compression
+[coveralls-image]: https://img.shields.io/coveralls/expressjs/compression/master.svg
+[coveralls-url]: https://coveralls.io/r/expressjs/compression?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/compression.svg
+[downloads-url]: https://npmjs.org/package/compression
+[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg
+[gratipay-url]: https://www.gratipay.com/dougwilson/
diff --git a/node_modules/compression/index.js b/node_modules/compression/index.js
new file mode 100644
index 0000000..c0e801e
--- /dev/null
+++ b/node_modules/compression/index.js
@@ -0,0 +1,276 @@
+/*!
+ * compression
+ * Copyright(c) 2010 Sencha Inc.
+ * Copyright(c) 2011 TJ Holowaychuk
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var accepts = require('accepts')
+var bytes = require('bytes')
+var compressible = require('compressible')
+var debug = require('debug')('compression')
+var onHeaders = require('on-headers')
+var vary = require('vary')
+var zlib = require('zlib')
+
+/**
+ * Module exports.
+ */
+
+module.exports = compression
+module.exports.filter = shouldCompress
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var cacheControlNoTransformRegExp = /(?:^|,)\s*?no-transform\s*?(?:,|$)/
+
+/**
+ * Compress response data with gzip / deflate.
+ *
+ * @param {Object} [options]
+ * @return {Function} middleware
+ * @public
+ */
+
+function compression (options) {
+ var opts = options || {}
+
+ // options
+ var filter = opts.filter || shouldCompress
+ var threshold = bytes.parse(opts.threshold)
+
+ if (threshold == null) {
+ threshold = 1024
+ }
+
+ return function compression (req, res, next) {
+ var ended = false
+ var length
+ var listeners = []
+ var stream
+
+ var _end = res.end
+ var _on = res.on
+ var _write = res.write
+
+ // flush
+ res.flush = function flush () {
+ if (stream) {
+ stream.flush()
+ }
+ }
+
+ // proxy
+
+ res.write = function write (chunk, encoding) {
+ if (ended) {
+ return false
+ }
+
+ if (!this._header) {
+ this._implicitHeader()
+ }
+
+ return stream
+ ? stream.write(new Buffer(chunk, encoding))
+ : _write.call(this, chunk, encoding)
+ }
+
+ res.end = function end (chunk, encoding) {
+ if (ended) {
+ return false
+ }
+
+ if (!this._header) {
+ // estimate the length
+ if (!this.getHeader('Content-Length')) {
+ length = chunkLength(chunk, encoding)
+ }
+
+ this._implicitHeader()
+ }
+
+ if (!stream) {
+ return _end.call(this, chunk, encoding)
+ }
+
+ // mark ended
+ ended = true
+
+ // write Buffer for Node.js 0.8
+ return chunk
+ ? stream.end(new Buffer(chunk, encoding))
+ : stream.end()
+ }
+
+ res.on = function on (type, listener) {
+ if (!listeners || type !== 'drain') {
+ return _on.call(this, type, listener)
+ }
+
+ if (stream) {
+ return stream.on(type, listener)
+ }
+
+ // buffer listeners for future stream
+ listeners.push([type, listener])
+
+ return this
+ }
+
+ function nocompress (msg) {
+ debug('no compression: %s', msg)
+ addListeners(res, _on, listeners)
+ listeners = null
+ }
+
+ onHeaders(res, function onResponseHeaders () {
+ // determine if request is filtered
+ if (!filter(req, res)) {
+ nocompress('filtered')
+ return
+ }
+
+ // determine if the entity should be transformed
+ if (!shouldTransform(req, res)) {
+ nocompress('no transform')
+ return
+ }
+
+ // vary
+ vary(res, 'Accept-Encoding')
+
+ // content-length below threshold
+ if (Number(res.getHeader('Content-Length')) < threshold || length < threshold) {
+ nocompress('size below threshold')
+ return
+ }
+
+ var encoding = res.getHeader('Content-Encoding') || 'identity'
+
+ // already encoded
+ if (encoding !== 'identity') {
+ nocompress('already encoded')
+ return
+ }
+
+ // head
+ if (req.method === 'HEAD') {
+ nocompress('HEAD request')
+ return
+ }
+
+ // compression method
+ var accept = accepts(req)
+ var method = accept.encoding(['gzip', 'deflate', 'identity'])
+
+ // we really don't prefer deflate
+ if (method === 'deflate' && accept.encoding(['gzip'])) {
+ method = accept.encoding(['gzip', 'identity'])
+ }
+
+ // negotiation failed
+ if (!method || method === 'identity') {
+ nocompress('not acceptable')
+ return
+ }
+
+ // compression stream
+ debug('%s compression', method)
+ stream = method === 'gzip'
+ ? zlib.createGzip(opts)
+ : zlib.createDeflate(opts)
+
+ // add buffered listeners to stream
+ addListeners(stream, stream.on, listeners)
+
+ // header fields
+ res.setHeader('Content-Encoding', method)
+ res.removeHeader('Content-Length')
+
+ // compression
+ stream.on('data', function onStreamData (chunk) {
+ if (_write.call(res, chunk) === false) {
+ stream.pause()
+ }
+ })
+
+ stream.on('end', function onStreamEnd () {
+ _end.call(res)
+ })
+
+ _on.call(res, 'drain', function onResponseDrain () {
+ stream.resume()
+ })
+ })
+
+ next()
+ }
+}
+
+/**
+ * Add bufferred listeners to stream
+ * @private
+ */
+
+function addListeners (stream, on, listeners) {
+ for (var i = 0; i < listeners.length; i++) {
+ on.apply(stream, listeners[i])
+ }
+}
+
+/**
+ * Get the length of a given chunk
+ */
+
+function chunkLength (chunk, encoding) {
+ if (!chunk) {
+ return 0
+ }
+
+ return !Buffer.isBuffer(chunk)
+ ? Buffer.byteLength(chunk, encoding)
+ : chunk.length
+}
+
+/**
+ * Default filter function.
+ * @private
+ */
+
+function shouldCompress (req, res) {
+ var type = res.getHeader('Content-Type')
+
+ if (type === undefined || !compressible(type)) {
+ debug('%s not compressible', type)
+ return false
+ }
+
+ return true
+}
+
+/**
+ * Determine if the entity should be transformed.
+ * @private
+ */
+
+function shouldTransform (req, res) {
+ var cacheControl = res.getHeader('Cache-Control')
+
+ // Don't compress for Cache-Control: no-transform
+ // https://tools.ietf.org/html/rfc7234#section-5.2.2.4
+ return !cacheControl ||
+ !cacheControlNoTransformRegExp.test(cacheControl)
+}
diff --git a/node_modules/compression/node_modules/bytes/History.md b/node_modules/compression/node_modules/bytes/History.md
new file mode 100644
index 0000000..559e063
--- /dev/null
+++ b/node_modules/compression/node_modules/bytes/History.md
@@ -0,0 +1,65 @@
+2.3.0 / 2016-02-15
+==================
+
+ * Drop partial bytes on all parsed units
+ * Fix non-finite numbers to `.format` to return `null`
+ * Fix parsing byte string that looks like hex
+ * perf: hoist regular expressions
+
+2.2.0 / 2015-11-13
+==================
+
+ * add option "decimalPlaces"
+ * add option "fixedDecimals"
+
+2.1.0 / 2015-05-21
+==================
+
+ * add `.format` export
+ * add `.parse` export
+
+2.0.2 / 2015-05-20
+==================
+
+ * remove map recreation
+ * remove unnecessary object construction
+
+2.0.1 / 2015-05-07
+==================
+
+ * fix browserify require
+ * remove node.extend dependency
+
+2.0.0 / 2015-04-12
+==================
+
+ * add option "case"
+ * add option "thousandsSeparator"
+ * return "null" on invalid parse input
+ * support proper round-trip: bytes(bytes(num)) === num
+ * units no longer case sensitive when parsing
+
+1.0.0 / 2014-05-05
+==================
+
+ * add negative support. fixes #6
+
+0.3.0 / 2014-03-19
+==================
+
+ * added terabyte support
+
+0.2.1 / 2013-04-01
+==================
+
+ * add .component
+
+0.2.0 / 2012-10-28
+==================
+
+ * bytes(200).should.eql('200b')
+
+0.1.0 / 2012-07-04
+==================
+
+ * add bytes to string conversion [yields]
diff --git a/node_modules/compression/node_modules/bytes/LICENSE b/node_modules/compression/node_modules/bytes/LICENSE
new file mode 100644
index 0000000..63e95a9
--- /dev/null
+++ b/node_modules/compression/node_modules/bytes/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2012-2014 TJ Holowaychuk <tj@vision-media.ca>
+Copyright (c) 2015 Jed Watson <jed.watson@me.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/compression/node_modules/bytes/Readme.md b/node_modules/compression/node_modules/bytes/Readme.md
new file mode 100644
index 0000000..dd19ff2
--- /dev/null
+++ b/node_modules/compression/node_modules/bytes/Readme.md
@@ -0,0 +1,109 @@
+# Bytes utility
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][travis-image]][travis-url]
+
+Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.
+
+## Usage
+
+```js
+var bytes = require('bytes');
+```
+
+#### bytes.format(number value, [options]): string|null
+
+Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is
+ rounded.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------|--------|--------------------|
+| value | `number` | Value in bytes |
+| options | `Object` | Conversion options |
+
+**Options**
+
+| Property | Type | Description |
+|-------------------|--------|-----------------------------------------------------------------------------------------|
+| decimalPlaces | `number`&#124;`null` | Maximum number of decimal places to include in output. Default value to `2`. |
+| fixedDecimals | `boolean`&#124;`null` | Whether to always display the maximum number of decimal places. Default value to `false` |
+| thousandsSeparator | `string`&#124;`null` | Example of values: `' '`, `','` and `.`... Default value to `' '`. |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|-------------|-------------------------|
+| results | `string`&#124;`null` | Return null upon error. String value otherwise. |
+
+**Example**
+
+```js
+bytes(1024);
+// output: '1kB'
+
+bytes(1000);
+// output: '1000B'
+
+bytes(1000, {thousandsSeparator: ' '});
+// output: '1 000B'
+
+bytes(1024 * 1.7, {decimalPlaces: 0});
+// output: '2kB'
+```
+
+#### bytes.parse(string value): number|null
+
+Parse the string value into an integer in bytes. If no unit is given, it is assumed the value is in bytes.
+
+Supported units and abbreviations are as follows and are case-insensitive:
+
+ * "b" for bytes
+ * "kb" for kilobytes
+ * "mb" for megabytes
+ * "gb" for gigabytes
+ * "tb" for terabytes
+
+The units are in powers of two, not ten. This means 1kb = 1024b according to this parser.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------------|--------|--------------------|
+| value | `string` | String to parse. |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|-------------|-------------------------|
+| results | `number`&#124;`null` | Return null upon error. Value in bytes otherwise. |
+
+**Example**
+
+```js
+bytes('1kB');
+// output: 1024
+
+bytes('1024');
+// output: 1024
+```
+
+## Installation
+
+```bash
+npm install bytes --save
+component install visionmedia/bytes.js
+```
+
+## License
+
+[![npm](https://img.shields.io/npm/l/express.svg)](https://github.com/visionmedia/bytes.js/blob/master/LICENSE)
+
+[downloads-image]: https://img.shields.io/npm/dm/bytes.svg
+[downloads-url]: https://npmjs.org/package/bytes
+[npm-image]: https://img.shields.io/npm/v/bytes.svg
+[npm-url]: https://npmjs.org/package/bytes
+[travis-image]: https://img.shields.io/travis/visionmedia/bytes.js/master.svg
+[travis-url]: https://travis-ci.org/visionmedia/bytes.js
diff --git a/node_modules/compression/node_modules/bytes/index.js b/node_modules/compression/node_modules/bytes/index.js
new file mode 100644
index 0000000..f71cca7
--- /dev/null
+++ b/node_modules/compression/node_modules/bytes/index.js
@@ -0,0 +1,154 @@
+/*!
+ * bytes
+ * Copyright(c) 2012-2014 TJ Holowaychuk
+ * Copyright(c) 2015 Jed Watson
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = bytes;
+module.exports.format = format;
+module.exports.parse = parse;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
+
+var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
+
+var map = {
+ b: 1,
+ kb: 1 << 10,
+ mb: 1 << 20,
+ gb: 1 << 30,
+ tb: ((1 << 30) * 1024)
+};
+
+// TODO: use is-finite module?
+var numberIsFinite = Number.isFinite || function (v) { return typeof v === 'number' && isFinite(v); };
+
+var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i;
+
+/**
+ * Convert the given value in bytes into a string or parse to string to an integer in bytes.
+ *
+ * @param {string|number} value
+ * @param {{
+ * case: [string],
+ * decimalPlaces: [number]
+ * fixedDecimals: [boolean]
+ * thousandsSeparator: [string]
+ * }} [options] bytes options.
+ *
+ * @returns {string|number|null}
+ */
+
+function bytes(value, options) {
+ if (typeof value === 'string') {
+ return parse(value);
+ }
+
+ if (typeof value === 'number') {
+ return format(value, options);
+ }
+
+ return null;
+}
+
+/**
+ * Format the given value in bytes into a string.
+ *
+ * If the value is negative, it is kept as such. If it is a float,
+ * it is rounded.
+ *
+ * @param {number} value
+ * @param {object} [options]
+ * @param {number} [options.decimalPlaces=2]
+ * @param {number} [options.fixedDecimals=false]
+ * @param {string} [options.thousandsSeparator=]
+ *
+ * @returns {string|null}
+ * @public
+ */
+
+function format(value, options) {
+ if (!numberIsFinite(value)) {
+ return null;
+ }
+
+ var mag = Math.abs(value);
+ var thousandsSeparator = (options && options.thousandsSeparator) || '';
+ var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
+ var fixedDecimals = Boolean(options && options.fixedDecimals);
+ var unit = 'B';
+
+ if (mag >= map.tb) {
+ unit = 'TB';
+ } else if (mag >= map.gb) {
+ unit = 'GB';
+ } else if (mag >= map.mb) {
+ unit = 'MB';
+ } else if (mag >= map.kb) {
+ unit = 'kB';
+ }
+
+ var val = value / map[unit.toLowerCase()];
+ var str = val.toFixed(decimalPlaces);
+
+ if (!fixedDecimals) {
+ str = str.replace(formatDecimalsRegExp, '$1');
+ }
+
+ if (thousandsSeparator) {
+ str = str.replace(formatThousandsRegExp, thousandsSeparator);
+ }
+
+ return str + unit;
+}
+
+/**
+ * Parse the string value into an integer in bytes.
+ *
+ * If no unit is given, it is assumed the value is in bytes.
+ *
+ * @param {number|string} val
+ *
+ * @returns {number|null}
+ * @public
+ */
+
+function parse(val) {
+ if (typeof val === 'number' && !isNaN(val)) {
+ return val;
+ }
+
+ if (typeof val !== 'string') {
+ return null;
+ }
+
+ // Test if the string passed is valid
+ var results = parseRegExp.exec(val);
+ var floatValue;
+ var unit = 'b';
+
+ if (!results) {
+ // Nothing could be extracted from the given string
+ floatValue = parseInt(val, 10);
+ unit = 'b'
+ } else {
+ // Retrieve the value and the unit
+ floatValue = parseFloat(results[1]);
+ unit = results[4].toLowerCase();
+ }
+
+ return Math.floor(map[unit] * floatValue);
+}
diff --git a/node_modules/compression/node_modules/bytes/package.json b/node_modules/compression/node_modules/bytes/package.json
new file mode 100644
index 0000000..d0f622e
--- /dev/null
+++ b/node_modules/compression/node_modules/bytes/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "bytes",
+ "description": "Utility to parse a string bytes to bytes and vice-versa",
+ "version": "2.3.0",
+ "author": {
+ "name": "TJ Holowaychuk",
+ "email": "tj@vision-media.ca",
+ "url": "http://tjholowaychuk.com"
+ },
+ "contributors": [
+ {
+ "name": "Jed Watson",
+ "email": "jed.watson@me.com"
+ },
+ {
+ "name": "Théo FIDRY",
+ "email": "theo.fidry@gmail.com"
+ }
+ ],
+ "license": "MIT",
+ "keywords": [
+ "byte",
+ "bytes",
+ "utility",
+ "parse",
+ "parser",
+ "convert",
+ "converter"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/visionmedia/bytes.js.git"
+ },
+ "component": {
+ "scripts": {
+ "bytes/index.js": "index.js"
+ }
+ },
+ "devDependencies": {
+ "mocha": "1.21.5"
+ },
+ "files": [
+ "History.md",
+ "LICENSE",
+ "Readme.md",
+ "index.js"
+ ],
+ "scripts": {
+ "test": "mocha --check-leaks --reporter spec"
+ },
+ "gitHead": "c8be41b24b04e04992d5918356d5a4dd35fbf805",
+ "bugs": {
+ "url": "https://github.com/visionmedia/bytes.js/issues"
+ },
+ "homepage": "https://github.com/visionmedia/bytes.js#readme",
+ "_id": "bytes@2.3.0",
+ "_shasum": "d5b680a165b6201739acb611542aabc2d8ceb070",
+ "_from": "bytes@2.3.0",
+ "_npmVersion": "2.14.7",
+ "_nodeVersion": "4.2.3",
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "dist": {
+ "shasum": "d5b680a165b6201739acb611542aabc2d8ceb070",
+ "tarball": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ }
+ ],
+ "_npmOperationalInternal": {
+ "host": "packages-6-west.internal.npmjs.com",
+ "tmp": "tmp/bytes-2.3.0.tgz_1455595208428_0.5990735022351146"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz"
+}
diff --git a/node_modules/compression/node_modules/compressible/HISTORY.md b/node_modules/compression/node_modules/compressible/HISTORY.md
new file mode 100644
index 0000000..b949015
--- /dev/null
+++ b/node_modules/compression/node_modules/compressible/HISTORY.md
@@ -0,0 +1,56 @@
+2.0.8 / 2016-05-12
+==================
+
+ * deps: mime-db@'>= 1.23.0 < 2'
+
+2.0.7 / 2016-01-18
+==================
+
+ * deps: mime-db@'>= 1.21.0 < 2'
+
+2.0.6 / 2015-09-29
+==================
+
+ * deps: mime-db@'>= 1.19.0 < 2'
+
+2.0.5 / 2015-07-30
+==================
+
+ * deps: mime-db@'>= 1.16.0 < 2'
+
+2.0.4 / 2015-07-01
+==================
+
+ * deps: mime-db@'>= 1.14.0 < 2'
+ * perf: enable strict mode
+
+2.0.3 / 2015-06-08
+==================
+
+ * Fix regex fallback to work if type exists, but is undefined
+ * perf: hoist regex declaration
+ * perf: use regex to extract mime
+ * deps: mime-db@'>= 1.13.0 < 2'
+
+2.0.2 / 2015-01-31
+==================
+
+ * deps: mime-db@'>= 1.1.2 < 2'
+
+2.0.1 / 2014-09-28
+==================
+
+ * deps: mime-db@1.x
+ - Add new mime types
+ - Add additional compressible
+ - Update charsets
+
+
+2.0.0 / 2014-09-02
+==================
+
+ * use mime-db
+ * remove .get()
+ * specifications are now private
+ * regex is now private
+ * stricter regex
diff --git a/node_modules/compression/node_modules/compressible/LICENSE b/node_modules/compression/node_modules/compressible/LICENSE
new file mode 100644
index 0000000..ce00b3f
--- /dev/null
+++ b/node_modules/compression/node_modules/compressible/LICENSE
@@ -0,0 +1,24 @@
+(The MIT License)
+
+Copyright (c) 2013 Jonathan Ong <me@jongleberry.com>
+Copyright (c) 2014 Jeremiah Senkpiel <fishrock123@rocketmail.com>
+Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/compression/node_modules/compressible/README.md b/node_modules/compression/node_modules/compressible/README.md
new file mode 100644
index 0000000..1082f1e
--- /dev/null
+++ b/node_modules/compression/node_modules/compressible/README.md
@@ -0,0 +1,46 @@
+# compressible
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Compressible `Content-Type` / `mime` checking.
+
+## Installation
+
+```bash
+$ npm install compressible
+```
+
+## API
+
+```js
+var compressible = require('compressible')
+```
+
+### compressible(type)
+
+Checks if the given `Content-Type` is compressible. The `type` argument is expected
+to be a value MIME type or `Content-Type` string, though no validation is performed.
+
+```js
+compressible('text/html') // => true
+compressible('image/png') // => false
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/compressible.svg
+[npm-url]: https://npmjs.org/package/compressible
+[node-version-image]: https://img.shields.io/node/v/compressible.svg
+[node-version-url]: https://nodejs.org/en/download/
+[travis-image]: https://img.shields.io/travis/jshttp/compressible/master.svg
+[travis-url]: https://travis-ci.org/jshttp/compressible
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/compressible/master.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/compressible?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/compressible.svg
+[downloads-url]: https://npmjs.org/package/compressible
diff --git a/node_modules/compression/node_modules/compressible/index.js b/node_modules/compression/node_modules/compressible/index.js
new file mode 100644
index 0000000..04a7178
--- /dev/null
+++ b/node_modules/compression/node_modules/compressible/index.js
@@ -0,0 +1,58 @@
+/*!
+ * compressible
+ * Copyright(c) 2013 Jonathan Ong
+ * Copyright(c) 2014 Jeremiah Senkpiel
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var db = require('mime-db')
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var compressibleTypeRegExp = /^text\/|\+json$|\+text$|\+xml$/i
+var extractTypeRegExp = /^\s*([^;\s]*)(?:;|\s|$)/
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = compressible
+
+/**
+ * Checks if a type is compressible.
+ *
+ * @param {string} type
+ * @return {Boolean} compressible
+ * @public
+ */
+
+function compressible (type) {
+ if (!type || typeof type !== 'string') {
+ return false
+ }
+
+ // strip parameters
+ var match = extractTypeRegExp.exec(type)
+ var mime = match && match[1].toLowerCase()
+ var data = db[mime]
+
+ if ((data && data.compressible) || compressibleTypeRegExp.test(mime)) {
+ return true
+ }
+
+ return data
+ ? data.compressible
+ : undefined
+}
diff --git a/node_modules/compression/node_modules/compressible/package.json b/node_modules/compression/node_modules/compressible/package.json
new file mode 100644
index 0000000..9a87f21
--- /dev/null
+++ b/node_modules/compression/node_modules/compressible/package.json
@@ -0,0 +1,111 @@
+{
+ "name": "compressible",
+ "description": "Compressible Content-Type / mime checking",
+ "version": "2.0.8",
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ },
+ {
+ "name": "Jeremiah Senkpiel",
+ "email": "fishrock123@rocketmail.com",
+ "url": "https://searchbeam.jit.su"
+ }
+ ],
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jshttp/compressible"
+ },
+ "keywords": [
+ "compress",
+ "gzip",
+ "mime",
+ "content-type"
+ ],
+ "dependencies": {
+ "mime-db": ">= 1.23.0 < 2"
+ },
+ "devDependencies": {
+ "eslint": "2.9.0",
+ "eslint-config-standard": "5.3.1",
+ "eslint-plugin-promise": "1.1.0",
+ "eslint-plugin-standard": "1.3.2",
+ "istanbul": "0.4.3",
+ "mocha": "~1.21.5"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "README.md",
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint **/*.js",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot --check-leaks"
+ },
+ "gitHead": "b696fa801bf93ffff41a3854cedd6f2ce86b0124",
+ "bugs": {
+ "url": "https://github.com/jshttp/compressible/issues"
+ },
+ "homepage": "https://github.com/jshttp/compressible",
+ "_id": "compressible@2.0.8",
+ "_shasum": "7162e6c46d3b9d200ffb45cb4e4a0f7832732503",
+ "_from": "compressible@>=2.0.8 <2.1.0",
+ "_npmVersion": "1.4.28",
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "maintainers": [
+ {
+ "name": "defunctzombie",
+ "email": "shtylman@gmail.com"
+ },
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "federomero",
+ "email": "federomero@gmail.com"
+ },
+ {
+ "name": "fishrock123",
+ "email": "fishrock123@rocketmail.com"
+ },
+ {
+ "name": "jongleberry",
+ "email": "jonathanrichardong@gmail.com"
+ },
+ {
+ "name": "mscdex",
+ "email": "mscdex@mscdex.net"
+ },
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ }
+ ],
+ "dist": {
+ "shasum": "7162e6c46d3b9d200ffb45cb4e4a0f7832732503",
+ "tarball": "https://registry.npmjs.org/compressible/-/compressible-2.0.8.tgz"
+ },
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/compressible-2.0.8.tgz_1463066991355_0.24597734049893916"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.8.tgz"
+}
diff --git a/node_modules/compression/package.json b/node_modules/compression/package.json
new file mode 100644
index 0000000..6f71870
--- /dev/null
+++ b/node_modules/compression/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "compression",
+ "description": "Node.js compression middleware",
+ "version": "1.6.2",
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ }
+ ],
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/expressjs/compression.git"
+ },
+ "dependencies": {
+ "accepts": "~1.3.3",
+ "bytes": "2.3.0",
+ "compressible": "~2.0.8",
+ "debug": "~2.2.0",
+ "on-headers": "~1.0.1",
+ "vary": "~1.1.0"
+ },
+ "devDependencies": {
+ "eslint": "2.9.0",
+ "eslint-config-standard": "5.3.1",
+ "eslint-plugin-promise": "1.1.0",
+ "eslint-plugin-standard": "1.3.2",
+ "istanbul": "0.4.3",
+ "mocha": "2.4.5",
+ "supertest": "1.1.0"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.8.0"
+ },
+ "scripts": {
+ "lint": "eslint **/*.js",
+ "test": "mocha --check-leaks --reporter spec --bail",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec"
+ },
+ "gitHead": "b9c63ced82b9f719cd5d9fd250c8432b00752d89",
+ "bugs": {
+ "url": "https://github.com/expressjs/compression/issues"
+ },
+ "homepage": "https://github.com/expressjs/compression#readme",
+ "_id": "compression@1.6.2",
+ "_shasum": "cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3",
+ "_from": "compression@latest",
+ "_npmVersion": "2.15.1",
+ "_nodeVersion": "4.4.3",
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "dist": {
+ "shasum": "cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3",
+ "tarball": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ }
+ ],
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/compression-1.6.2.tgz_1463095977791_0.03453603922389448"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz"
+}