qjs
Version:
Use the await keyword with Q promises to tame your async code
47 lines (42 loc) • 1.51 kB
JavaScript
/**
* template.js loads the templates and constants from templatesandconstants.js
*/
var filename = __dirname + '/templatesandconstants.js';
var secretPrefix = module.exports.secretPrefix = '_';
var fs = require('fs');
var mustache = require('mustache');
var templates = module.exports.templates = {};
var constants = module.exports.constants = {};
var partials = {};
function buildTemplate(name, contents) {
contents = contents.replace(/\{\{([\w\.]*)\}\}/g, '{{{$1}}}');
partials[name] = contents;
return function template(values) {
var result = mustache.render(contents, values, partials);
return result.trim();
};
}
var file = fs.readFileSync(filename).toString();
file = file.replace(/^\/\/[^\n]*$/gm, '');
var regex = /^\`\`\`([\w\.]*)$([^\`]*)/gm;
var parsed;
var contents;
while(parsed = regex.exec(file)) {
contents = parsed[2].trim().replace(/\{\{prefix\}\}/g, secretPrefix);
if (contents.charAt(0) === '"' && contents.charAt(contents.length - 1) === '"'){
contents = contents.substr(1, contents.length - 2);
set(constants, parsed[1], contents);
} else {
set(templates, parsed[1], buildTemplate(parsed[1], contents));
}
}
function set(on, name, value) {
name = name.split(/\./g);
var namePart = name.shift(1);
while (name.length) {
on[namePart] = on[namePart] || {};
on = on[namePart];
namePart = name.shift(1);
}
on[namePart] = value;
}