UNPKG

requisite

Version:
81 lines (74 loc) 2.04 kB
// 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