propertext-mold
Version:
Render propertext files with Mold templates
40 lines (31 loc) • 943 B
JavaScript
var { basename, dirname, extname, join } = require('path')
var Mold = require('mold-template')
var fs = require('fs')
var ptext = require('propertext')
module.exports = function mold (layouts, opts = {}) {
var self = new Mold(opts.globals)
return function (file) {
var props = ptext(String(file.contents))
if (props.layout) {
file.path = rewrite(file.path, props)
file.contents = cast(props, file)
}
return file
}
function rewrite (path, props) {
var dir = dirname(path)
var base = basename(path, extname(path))
var ext = extname(props.layout)
return join(dir, base + ext)
}
function cast (props, file) {
var template = layout(props.layout)
return Buffer.from(template({ props, file }))
}
function layout (name) {
if (self.defs[name])
return self.defs[name]
var view = fs.readFileSync(join(layouts, name), 'utf8')
return self.bake(name, view)
}
}