const expressions = require("angular-expressions"); const assign = require("lodash/assign"); function angularParser(tag) { if (tag === ".") { return { get(s) { return s; }, }; } const expr = expressions.compile( tag.replace(/(’|‘)/g, "'").replace(/(“|”)/g, '"') ); // isAngularAssignment will be true if your tag contains a `=`, for example // when you write the following in your template : // {full_name = first_name + last_name} // In that case, it makes sense to return an empty string so // that the tag does not write something to the generated document. const isAngularAssignment = expr.ast.body[0] && expr.ast.body[0].expression.type === "AssignmentExpression"; return { get(scope, context) { let obj = {}; const scopeList = context.scopeList; const num = context.num; for (let i = 0, len = num + 1; i < len; i++) { obj = assign(obj, scopeList[i]); } const result = expr(scope, obj); if (isAngularAssignment) { return ""; } return result; }, }; } module.exports = angularParser;