brjade
Version:
Turn jade.render and jade.renderFile calls into inlined markup
66 lines (50 loc) • 1.2 kB
JavaScript
var path = require('path');
var through = require('through2');
var staticModule = require('static-module');
var resolve = require('resolve');
var assign = require('object-assign');
var stringify = require('js-stringify');
var jade = require('jade');
module.exports = transform;
function transform( file, opts ){
if (/\.json$/.test(file))
return through();
if (!opts)
opts = {};
var vars = assign({
__filename: file,
__dirname: path.dirname(file),
require: { resolve: resolver }
}, opts.vars);
var sm = staticModule({
jade: {
renderFile: renderFile,
render: render,
},
}, {
vars: vars,
varModules: { path: path },
});
return sm;
function resolver( p ){
return resolve.sync(p, {
basedir: path.dirname(file),
});
}
function renderFile( file, opts ){
var render = jade.compileFile(file, opts);
track(sm, [ file ].concat(render.dependencies));
return stringify(render(opts));
}
function render( source, opts ){
var render = jade.compile(source, opts);
track(sm, render.dependencies);
return stringify(render(opts));
}
};
function track( sm, files ){
files.forEach(function( file ){
sm.emit('file', file);
});
}
;