apeman-tmpl
Version:
Template manager for apeman.
60 lines (52 loc) • 1.51 kB
JavaScript
/**
* Render templates.
* @memberof module:apeman-tmpl/lib/templating
* @function renderTemplate
* @returns {Promise}
*/
const coz = require('coz')
const co = require('co')
const path = require('path')
const mkdirp = require('mkdirp')
const RenderLogger = require('../logging/render_logger')
const getTemplates = require('./get_templates')
const apemancwd = require('apemancwd')
/** @lends renderTemplate */
function renderTemplate (configuration, names, options) {
let tmpls = getTemplates(configuration, names)
let childTmpls = getTemplates.childTmpls(configuration, names)
let logger = new RenderLogger({})
let verbose = options.verbose
let force = options.force
if (verbose) {
logger.logTmpls(tmpls)
}
function _render (tmpls) {
if (force) {
for (let tmpl of [].concat(tmpls)) {
tmpl.force = true
}
}
return coz.render(tmpls, {
prefix: 'apeman-tmpl',
verbose: verbose
})
}
return co(function * () {
yield _render(tmpls)
let cwd = apemancwd.create({ prefix: 'apeman-tmpl' })
for (let childName of Object.keys(childTmpls || {})) {
let $child = configuration.get('$children')[ childName ]
let $cwd = path.resolve($child.$cwd || process.cwd())
mkdirp.sync($cwd)
cwd.chdir($cwd)
logger.trace('Working directory:', $cwd)
let tmpls = childTmpls[ childName ]
yield _render(tmpls)
cwd.restore()
}
cwd.restoreAll()
})
}
module.exports = renderTemplate