Skip to content

Instantly share code, notes, and snippets.

@jiaz
Last active April 28, 2017 05:14
Show Gist options
  • Save jiaz/959fc79a4a8b497b83547e91634f69df to your computer and use it in GitHub Desktop.
Save jiaz/959fc79a4a8b497b83547e91634f69df to your computer and use it in GitHub Desktop.
blah
var process = require('process');
var _ = require('lodash');
const KEY_REGEX = /\w+/
function validateParams(params) {
for (let k of Object.keys(params)) {
if (!KEY_REGEX.test(k)) {
return false;
}
if (k === 'lb') {
return false;
}
if (typeof(params[k]) !== 'string') {
return false;
}
}
return true;
}
function parseInputs(args) {
if (args.length < 3) {
return [1, null];
}
let input;
let params;
try {
input = require('./' + args[1]);
} catch (err) {
return [2, null];
}
try {
params = require('./' + args[2]);
} catch (err) {
return [2, null];
}
if (!validateParams(params)) {
return [3, null];
}
return [0, {input, params}];
}
function handleArray(input, params) {
return _.map(input, (val) => {
return executeTemplate(val, params);
});
}
function handleObject(input, params) {
let obj = {};
_.each(input, (v, k) => {
obj[k] = executeTemplate(v, params);
})
return obj;
}
function translate(t, params) {
if (t === 'lb') {
return '{';
} else if (params[t]) {
return params[t];
} else {
return '{{' + t + '}}';
}
}
function handleString(input, params) {
let startIdx = input.indexOf('{{');
if (startIdx === -1) {
return input;
} else {
let endIdx = input.indexOf('}}');
if (endIdx === -1) {
return input;
}
return input.slice(0, startIdx) +
translate(input.slice(startIdx + 2, endIdx), params) +
handleString(input.slice(endIdx + 2), params);
}
}
function executeTemplate(input, params) {
if (Array.isArray(input)) {
return handleArray(input, params);
} else if (typeof(input) === 'object' && input !== null) {
return handleObject(input, params);
} else if (typeof(input) === 'string') {
return handleString(input, params);
} else {
return input;
}
}
function main(args) {
let [code, inputs] = parseInputs(args);
if (code !== 0) {
process.exit(code);
}
console.log(executeTemplate(inputs.input, inputs.params));
}
// main(process.argv);
let [code, inputs] = parseInputs(['', 'a.json', 'b.json']);
console.log(inputs)
console.log('---')
console.log(executeTemplate(inputs.input, inputs.params));
// console.log(code);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment