infra-cli
Version:
35 lines (33 loc) • 1.1 kB
JavaScript
const metalsmith = require('metalsmith')
const handlebars = require('handlebars')
const chalk = require('chalk')
module.exports = async function replaceTemplate (metadata, targetDir) {
return new Promise((resolve, reject) => {
metalsmith(__dirname)
.metadata(metadata)
.clean(false)
.source(targetDir)
.destination(targetDir)
.use((files, metalsmith, done) => {
const meta = metalsmith.metadata()
Object.keys(files)
.filter((file) => {
const fileRegex = /^.*\.(svg|png|jpg|ico|gif|jpeg|tsx)/g
return !fileRegex.test(file)
})
.forEach((fileName) => {
try {
const t = files[fileName].contents.toString()
files[fileName].contents = Buffer.from(handlebars.compile(t)(meta), 'utf-8')
} catch (error) {
console.error(chalk.redBright(`${fileName} is replacement failed!\n`))
console.error(error)
}
})
done()
})
.build((err) => {
err ? reject(err) : resolve()
})
})
}