@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
47 lines (38 loc) • 1.27 kB
JavaScript
const Mustache = require('mustache')
const cds = require('../cds')
const { copy, read, write, exists, readdir, path, isdir, mkdirp } = cds.utils
async function renderAndCopy(from, into = '.', replacements = {}, overwrite = cds.cli.options.force) {
const srcRoot = path.resolve(from)
const destRoot = path.resolve(cds.root, into)
async function walk(src, dest) {
if (isdir(src)) {
await mkdirp(dest)
const entries = await readdir(src)
return Promise.all(entries.map(name => {
const renderedName = Mustache.render(name, replacements)
return walk(path.join(src, name), path.join(dest, renderedName))
}))
}
const extension = path.extname(src)
if (extension === '.hbs') {
const destFile = dest.replace(/\.hbs$/, '')
if (overwrite || !exists(destFile)) {
const content = await render(src, replacements)
await write(destFile, content, { spaces: 2 })
}
return
}
if (overwrite || !exists(dest)) {
await copy(src, dest)
}
}
return walk(srcRoot, destRoot)
}
async function render(templatePath, values = {}) {
const content = await read(templatePath, 'utf-8')
return Mustache.render(content, values)
}
module.exports = {
render,
renderAndCopy
}