UNPKG

@push.rocks/smarthbs

Version:

handlebars with better fs support

68 lines 5.23 kB
// This file contains code that makes it easy to search handlebar templates for variables. // Why? To get a clue if you are missing some. import * as plugins from './smarthbs.plugins.js'; // the curly regex objects let tripleCurlyRegex = /{{{\s*[\w\.]+\s*}}}/g; let doubleCurlyRegex = /{{\s*[\w\.]+\s*}}/g; let nameInCurlsRegex = /[\w\.]+/; /** * finds all variables in a handlebars template * @param hbsStringArg */ export let findVarsInHbsString = async (hbsStringArg) => { let hbsString = hbsStringArg; // make sure we have a new string object that we may destroy let varNameArray = []; let tripleCurlyMatches = hbsString.match(tripleCurlyRegex); if (tripleCurlyMatches) { hbsString = hbsString.replace(tripleCurlyRegex, '[[[replaced]]]'); varNameArray = varNameArray.concat(tripleCurlyMatches); } let doubleCurlyMatches = hbsString.match(doubleCurlyRegex); if (doubleCurlyMatches) { varNameArray = varNameArray.concat(doubleCurlyMatches); } // make sure we are clean from curly brackets varNameArray = varNameArray.map((x) => { return x.match(nameInCurlsRegex)[0]; }); // make sure are uniq function uniqueArray(input) { return Array.from(new Set(input)); } varNameArray = uniqueArray(varNameArray); return varNameArray; }; /** * checks if supplied variables satisfy an handlebars template * @param hbsStringArg * @param varObjectArg * @return string array with missing variable names */ export let checkVarsSatisfaction = async (hbsStringArg, varObjectArg) => { // required vars as combined deep string with . notation let requiredVarStrings = await findVarsInHbsString(hbsStringArg); // comparison objects let suppliedVarsObject = varObjectArg; let missingVarsObject = []; // building the for (let stringVar of requiredVarStrings) { let splittedVars = stringVar.split('.'); let requiredPointer = suppliedVarsObject; for (let i = 0; i < splittedVars.length; i++) { let splitVar = splittedVars[i]; let varAvailable = requiredPointer[splitVar] !== undefined; if (varAvailable && splittedVars.length === i + 1) { // ok } else if (varAvailable) { requiredPointer = requiredPointer[splitVar]; } else { missingVarsObject.push(stringVar); i = splittedVars.length; } } } return missingVarsObject; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRoYnMudmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRoYnMudmFyaWFibGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBGQUEwRjtBQUMxRiw4Q0FBOEM7QUFFOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCwwQkFBMEI7QUFDMUIsSUFBSSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxJQUFJLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDO0FBQzVDLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0FBRWpDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixHQUFHLEtBQUssRUFBRSxZQUFvQixFQUFFLEVBQUU7SUFDOUQsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsNERBQTREO0lBQzFGLElBQUksWUFBWSxHQUFhLEVBQUUsQ0FBQztJQUNoQyxJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzRCxJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDbEUsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQUN4RDtJQUNELElBQUksa0JBQWtCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNELElBQUksa0JBQWtCLEVBQUU7UUFDdEIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQUN4RDtJQUVELDZDQUE2QztJQUM3QyxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgscUJBQXFCO0lBQ3JCLFNBQVMsV0FBVyxDQUFDLEtBQWU7UUFDbEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsWUFBb0IsRUFBRSxZQUFpQixFQUFFLEVBQUU7SUFDbkYsd0RBQXdEO0lBQ3hELElBQUksa0JBQWtCLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVqRSxxQkFBcUI7SUFDckIsSUFBSSxrQkFBa0IsR0FBRyxZQUFZLENBQUM7SUFDdEMsSUFBSSxpQkFBaUIsR0FBYSxFQUFFLENBQUM7SUFFckMsZUFBZTtJQUNmLEtBQUssSUFBSSxTQUFTLElBQUksa0JBQWtCLEVBQUU7UUFDeEMsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQztZQUMzRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pELEtBQUs7YUFDTjtpQkFBTSxJQUFJLFlBQVksRUFBRTtnQkFDdkIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2FBQ3pCO1NBQ0Y7S0FDRjtJQUNELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyxDQUFDIn0=