wukong-templates
Version:
A wukong plugin to render files with templates.
60 lines (51 loc) • 1.4 kB
JavaScript
;
/**
* Module dependencies.
*/
var debug = require('debug')('wukong:templates');
var extend = require('extend');
var cons = require('consolidate');
var match = require('multimatch');
/**
* Expose `templates`.
*/
module.exports = templates;
function templates(opts) {
opts = opts || {};
if ('string' === typeof opts) opts = { engine: opts };
if (!opts.engine) throw new Error('"engine" option required!');
var dir = opts.directory || 'templates';
var engine = opts.engine;
var ext = opts.ext;
var def = opts.default;
var pattern = opts.pattern;
var inPlace = opts.inPlace;
engine = cons[engine];
return function *templates(next) {
var file = this.file;
var path = file.path;
var tmpl = file.template || def;
if ((pattern && !match(path, pattern).length)
|| (!tmpl && !inPlace)) yield next;
var wukong = this.wukong;
var metadata = wukong.metadata();
var clone = extend({}, metadata, file);
var contents = clone.contents;
var _render = engine;
if (inPlace) {
tmpl = contents;
_render = engine.render;
} else {
tmpl = wukong.join(dir, tmpl);
clone.contents = contents;
}
function render() {
return function (done) {
_render(tmpl, clone, done);
};
}
file.contents = yield render();
debug('converted file: %s', path);
yield next;
};
}