apeman-tmpl
Version:
Template manager for apeman.
58 lines (52 loc) • 1.74 kB
JavaScript
/**
* Render templates.
* @memberof module:apeman-tmpl/lib/templating
* @function renderTemplate
*/
;
const coz = require('coz'),
async = require('async'),
path = require('path'),
mkdirp = require('mkdirp'),
RenderLogger = require('../logging/render_logger'),
getTemplates = require('./get_templates');
/** @lends renderTemplate */
function renderTemplate(apemanfile, pattern, options, callback) {
let tmpls = getTemplates(apemanfile, pattern),
childTmpls = getTemplates.childTmpls(apemanfile, pattern);
let logger = new RenderLogger({});
let verbose = options.verbose;
if (verbose) {
logger.logTmpls(tmpls);
}
async.series([
(callback) => {
coz.render(tmpls, {
prefix: 'apeman-tmpl',
verbose: verbose
}, callback);
},
(callback) => {
let here = process.cwd();
async.eachSeries(Object.keys(childTmpls || {}), (childName, callback) => {
let $child = apemanfile.$children[childName],
$cwd = path.resolve($child.$cwd || here);
let tmpls = childTmpls[childName];
mkdirp.sync($cwd);
process.chdir($cwd);
logger.trace("Working directory:", $cwd);
coz.render(tmpls, {
prefix: 'apeman-tmpl',
verbose: verbose
}, (err) => {
process.chdir(here);
callback(err);
});
}, (err) => {
process.chdir(here);
callback(err);
});
}
], callback);
}
module.exports = renderTemplate;