mach
Version:
HTTP for JavaScript
37 lines (29 loc) • 1.04 kB
JavaScript
;
var zlib = require("zlib");
var mach = require("../index");
mach.extend(require("../extensions/acceptEncoding"));
var GZIP_MATCHER = /text|javascript|json/i;
function shouldGzipContentType(contentType) {
if (!contentType || contentType === "text/event-stream") {
return false;
}return GZIP_MATCHER.test(contentType);
}
/**
* A middleware that gzip's the response content (see http://www.gzip.org/).
* Options may be any of node's zlib options (see http://nodejs.org/api/zlib.html).
*/
function gzip(app, options) {
return function (conn) {
return conn.call(app).then(function () {
var response = conn.response;
var headers = response.headers;
if (shouldGzipContentType(headers["Content-Type"]) && conn.acceptsEncoding("gzip")) {
response.content = response.content.pipe(zlib.createGzip(options));
delete headers["Content-Length"];
headers["Content-Encoding"] = "gzip";
headers.Vary = "Accept-Encoding";
}
});
};
}
module.exports = gzip;