UNPKG

express-cjs

Version:

coffee-react / jade / stylus middleware for Single Page Application on Express4

136 lines (124 loc) 3.86 kB
// Generated by CoffeeScript 1.10.0 var Promise, browserify, express, expressCjs, fs, jade, koutoSwiss, path, prepareResponse, stylus; Promise = require('bluebird'); express = require('express'); prepareResponse = require('prepare-response'); browserify = require('browserify-middleware'); jade = require('jade'); stylus = require('stylus'); koutoSwiss = require('kouto-swiss'); path = require('path'); fs = require('fs'); expressCjs = function(arg) { var browserifyMiddleware, bundleExternal, cjs, cssPromise, cwd, debug, html5Mode, htmlPromise, htmlResolver, jadeOptions, ref, transformers, useBrfs, useNgannotate, usePlainJadeify, useReactify; ref = arg != null ? arg : {}, cwd = ref.cwd, debug = ref.debug, bundleExternal = ref.bundleExternal, jadeOptions = ref.jadeOptions, useReactify = ref.useReactify, useNgannotate = ref.useNgannotate, usePlainJadeify = ref.usePlainJadeify, useBrfs = ref.useBrfs, html5Mode = ref.html5Mode; cjs = express.Router(); if (cwd == null) { cwd = process.cwd(); } if (debug == null) { debug = process.env.NODE_ENV !== 'production'; } if (bundleExternal == null) { bundleExternal = true; } if (useReactify == null) { useReactify = true; } if (useNgannotate == null) { useNgannotate = true; } if (usePlainJadeify == null) { usePlainJadeify = true; } if (useBrfs == null) { useBrfs = true; } if (html5Mode == null) { html5Mode = false; } transformers = []; if (useReactify) { transformers.push('coffee-reactify'); } else { transformers.push('coffeeify'); } if (useNgannotate) { transformers.push([ 'browserify-ngannotate', { ext: '.coffee' } ]); } if (usePlainJadeify) { transformers.push('plain-jadeify'); } if (useBrfs) { transformers.push('brfs'); } browserify.settings('basedir', path.resolve(__dirname, '..')); browserify.settings('transform', transformers); browserifyMiddleware = browserify(cwd + path.sep + 'index.coffee', { extensions: ['.coffee', '.cjsx'], bundleExternal: bundleExternal }); cjs.get('/index.js', browserifyMiddleware); cssPromise = null; cjs.get('/index.css', function(req, res, next) { if (debug) { cssPromise = null; } if (cssPromise == null) { cssPromise = new Promise(function(resolve, reject) { var styl, stylData; styl = cwd + path.sep + 'index.styl'; stylData = fs.readFileSync(styl, 'utf8'); return stylus(stylData).set('filename', styl).set('sourcemap', debug ? { inline: true } : false).set('compress', !debug).use(koutoSwiss())["import"]('kouto-swiss').render(function(error, css) { if (!error) { return resolve(prepareResponse(css, { 'content-type': 'css' })); } else { return reject(error); } }); }); } return cssPromise.then(function(prepare) { return prepare.send(req, res, next); }); }); htmlPromise = null; htmlResolver = function(req, res, next) { if (debug) { htmlPromise = null; } if (htmlPromise == null) { htmlPromise = new Promise(function(resolve) { var filename, html; filename = cwd + path.sep + 'index.jade'; if (jadeOptions == null) { jadeOptions = {}; } if (jadeOptions.pretty == null) { jadeOptions.pretty = debug; } html = jade.renderFile(filename, jadeOptions); return resolve(prepareResponse(html, { 'content-type': 'html' })); }); } return htmlPromise.then(function(prepare) { return prepare.send(req, res, next); }); }; cjs.get('/', htmlResolver); if (html5Mode) { cjs.get('*', htmlResolver); } return cjs; }; module.exports = expressCjs;