UNPKG

apeman-tmpl

Version:
60 lines (52 loc) 1.51 kB
/** * Render templates. * @memberof module:apeman-tmpl/lib/templating * @function renderTemplate * @returns {Promise} */ 'use strict' 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