diff --git a/lib/Jexl.js b/lib/Jexl.js index 14fc6ce0..897bbd00 100644 --- a/lib/Jexl.js +++ b/lib/Jexl.js @@ -14,10 +14,11 @@ var Evaluator = require("./evaluator/Evaluator"), * xpath-like drilldown into native Javascript objects. * @constructor */ -function Jexl() { +function Jexl(throwOnMissingProp = false) { this._customGrammar = null; this._lexer = null; this._transforms = {}; + this._throwOnMissingProp = throwOnMissingProp; } /** diff --git a/lib/evaluator/handlers.js b/lib/evaluator/handlers.js index 5ffe32bb..b4167301 100644 --- a/lib/evaluator/handlers.js +++ b/lib/evaluator/handlers.js @@ -83,6 +83,14 @@ exports.FilterExpression = function(ast) { exports.Identifier = function(ast) { if (ast.from) { return this.eval(ast.from).then(function(context) { + if ( + this._throwOnMissingProp && + !Object.hasOwnProperty(context, ast.value) + ) { + throw new Error( + `property does not have an identifier named ${ast.value}` + ); + } if (Array.isArray(context)) context = context[0]; if (context === undefined) return undefined; return context[ast.value];