|
|
@@ -45,14 +45,17 @@ klass.parse = function parse(expr, vpsIn){
|
|
|
throw new Error("Unrecognized parameter to $map: " + bogus.join(",") + "- 16879");
|
|
|
}
|
|
|
|
|
|
+ // parse "input"
|
|
|
var input = Expression.parseOperand(inputElem, vpsIn);
|
|
|
|
|
|
+ // parse "as"
|
|
|
var vpsSub = new VariablesParseState(vpsIn),
|
|
|
varName = asElem;
|
|
|
|
|
|
Variables.uassertValidNameForUserWrite(varName);
|
|
|
var varId = vpsSub.defineVariable(varName);
|
|
|
|
|
|
+ // parse ""in
|
|
|
var invert = Expression.parseOperand(inElem, vpsSub);
|
|
|
|
|
|
return new MapExpression(varName, varId, input, invert);
|
|
|
@@ -72,13 +75,15 @@ proto.serialize = function serialize(explain) {
|
|
|
};
|
|
|
|
|
|
proto.evaluateInternal = function evaluateInternal(vars) {
|
|
|
+
|
|
|
+ // guaranteed at parse time that this isn't using our _varId
|
|
|
var inputVal = this._input.evaluateInternal(vars);
|
|
|
- if( inputVal === null) {
|
|
|
+ if( inputVal === null || inputVal === undefined) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
if(!(inputVal instanceof Array)) {
|
|
|
- throw new Error("Input to $map must be an Array, not a ____ 16883");
|
|
|
+ throw new Error("Input to $map must be an Array, not a " + typeof inputVal + " 16883");
|
|
|
}
|
|
|
|
|
|
if(inputVal.length === 0) {
|