Skip to content

Instantly share code, notes, and snippets.

@rawnly
Created May 6, 2018 13:47
Show Gist options
  • Save rawnly/1354852b132b42e2be1e2f86ec01b340 to your computer and use it in GitHub Desktop.
Save rawnly/1354852b132b42e2be1e2f86ec01b340 to your computer and use it in GitHub Desktop.
Simple nodejs template engine
function template(source, options = {}) {
const testers = {
replacer: /#\{\s?[\w]+\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}|\{\s?\{\s?[\w]+\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}\s?\}/gi,
alternative: /(\'|\")(.*)(\'|\")/i,
key: /#\{\s?([\w]+)\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}|\{\s?\{\s?([\w]+)\s?(\|\|\s?(\'|\")[\w]+(\'|\")\s?)?\}\s?\}/i,
doubleBrackets: /\{\{.*\}\}/g
};
return source.split("\n").map(row => {
const isRepleaceable = testers.replacer.test(row);
const isDoubleBrackets = testers.doubleBrackets.test(row);
let key = null;
let alternative = null;
if (isRepleaceable) {
key = row.match(testers.key)[1];
if ( testers.alternative.test(row) ) {
alternative = row.match(testers.alternative)[2];
}
if (isDoubleBrackets) {
key = row.match(testers.key)[5];
}
if ( options[key] ) {
return row.replace(testers.replacer, options[key])
} else if ( alternative ) {
return row.replace(testers.replacer, alternative)
}
return row;
}
return row;
}).join('\n');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment