@ufly/tpl-module-wasm
Version:
> @ufly/cli,配套创建AssemblyScript to Wasm 的 module 的 tpl
75 lines (66 loc) • 1.71 kB
JavaScript
;
const path = require('path');
const async = require('async');
const mlsm = require('metalsmith');
const compile = require('handlebars').compile;
const util = require('@ufly/util');
async function tplModule(data, options = {}) {
await processTpls(
Object.assign(
{
date: util.date('Y/m/d H:i')
},
data,
options
)
);
}
function processTpls(data) {
return new Promise((resolve, reject) => {
mlsm(process.cwd())
.metadata(data)
.clean(false)
.source(path.resolve(__dirname, '../tpl'))
.destination(process.cwd())
.use(renderTpls)
.build(err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
function renderTpls(files, metalsmith, done) {
const keys = Object.keys(files);
const metadata = metalsmith.metadata();
async.each(
keys,
(filename, next) => {
const str = files[filename].contents.toString();
// 订正 .* 文件
if (/^_[^_]+/i.test(filename)) {
const _filename = filename.replace(/^_/i, '.');
files[_filename] = files[filename];
delete files[filename];
}
// 订正 *.tpl 文件
if (/\.tpl$/i.test(filename)) {
const _filename = filename;
filename = _filename.replace(/\.tpl$/i, '');
files[filename] = files[_filename];
delete files[_filename];
}
if (!/[^$]{{([^{}]+)}}/g.test(str)) {
return next();
}
const render = compile(str, metadata);
const result = render(metadata);
files[filename].contents = Buffer.from(result);
next();
},
done
);
}
module.exports = tplModule;