cafescript
Version:
CafeScript is a node component driven preprocessor.
68 lines (55 loc) • 1.29 kB
JavaScript
var Module = require('module');
var Environment = require('./lib/environment.js');
var StringStream = require('./lib/stringstream.js');
function loader(module, filename) {
var env = new Environment(module, filename);
var exports = function() {
var _$cafe = module._$cafe || { res: process.stdout };
env.run(_$cafe, arguments);
};
exports.middleware = function(req, res, next) {
try {
env.run({
res: res,
global: {
request: req
}
});
res.end();
} catch(err) {
next(err);
}
};
module.exports = exports;
}
require.extensions['.cafe'] = loader;
module.exports = {
render: function(filename, global, callback) {
if(filename in Environment._cache) {
env = Environment._cache[filename];
} else {
var mod;
if(filename in Module._cache) {
mod = Module._cache[filename];
} else {
mod = new Module(filename, module.parent);
mod.load(filename);
Module._cache[filename] = mod;
}
env = new Environment(mod, filename);
Environment._cache[filename] = env;
}
var stream = new StringStream('');
stream.on('error', function(err) {
callback(err, null);
});
stream.on('finish', function() {
callback(null, stream.val());
});
env.run({
res: stream,
global: global
});
stream.end();
}
};