requisite
Version:
A cosmic javascript bundler.
81 lines (74 loc) • 2.04 kB
JavaScript
// Generated by CoffeeScript 1.12.5
var bundle, dirname, fs, join, ref, url;
fs = require('fs');
url = require('url');
ref = require('path'), dirname = ref.dirname, join = ref.join;
bundle = require('./bundle');
module.exports = function(opts) {
var cached, maxAge, middleware;
if (opts == null) {
opts = {};
}
maxAge = opts.maxAge || 0;
cached = null;
middleware = function(req, res, next) {
var isMap, now, path;
path = url.parse(req.url, true, true).pathname;
isMap = /\.map$/.test(path);
path = path.replace(/\.\w+$/, '');
if (isMap) {
path = path.replace(/\.\w+$/, '');
}
if (cached == null) {
if (opts.urlRoot == null) {
opts.urlRoot = dirname(req.originalUrl);
}
if (opts.entry == null) {
opts.entry = path;
}
bundle(opts, function(err, _bundle) {
if (err != null) {
return next(err);
}
cached = _bundle;
return middleware(req, res, next);
});
return;
}
now = new Date().toUTCString();
if (!res.getHeader('Date')) {
res.setHeader('Date', now);
}
if (!res.getHeader('Cache-Control')) {
res.setHeader('Cache-Control', 'public, max-age=' + (maxAge / 1000));
}
if (!res.getHeader('Last-Modified')) {
res.setHeader('Last-Modified', now);
}
res.setHeader('Content-Type', 'application/javascript; charset=UTF-8');
if (req.method === 'HEAD') {
res.writeHead(200);
return res.end();
}
if (req.method !== 'GET') {
return next();
}
return cached.parse({
deep: true
}, function(err) {
var mod;
if (err != null) {
return next(err);
}
if ((mod = cached.find(path)) == null) {
return next();
}
res.writeHead(200);
return res.end(mod.toString({
sourceMapOnly: isMap
}), 'utf8');
});
};
return function requisite(req, res, next) { return middleware(req, res, next); };;
};
//# sourceMappingURL=middleware.js.map