Add JSONata expr tester and improved feedback

This commit is contained in:
Nick O'Leary
2017-05-05 11:23:24 +01:00
parent b030e935ce
commit dbf0486acb
15 changed files with 362 additions and 52 deletions

View File

@@ -519,7 +519,7 @@
"else":"otherwise"
},
"errors": {
"invalid-expr": "Invalid expression: __error__"
"invalid-expr": "Invalid JSONata expression: __error__"
}
},
"change": {
@@ -544,7 +544,8 @@
},
"errors": {
"invalid-from": "Invalid 'from' property: __error__",
"invalid-json": "Invalid 'to' JSON property"
"invalid-json": "Invalid 'to' JSON property",
"invalid-expr": "Invalid JSONata expression: __error__"
}
},
"range": {

View File

@@ -104,7 +104,7 @@ module.exports = function(RED) {
try {
var prop;
if (node.propertyType === 'jsonata') {
prop = node.property.evaluate({msg:msg});
prop = RED.util.evaluateJSONataExpression(node.property,msg);
} else {
prop = RED.util.evaluateNodeProperty(node.property,node.propertyType,node,msg);
}
@@ -117,7 +117,7 @@ module.exports = function(RED) {
v1 = node.previousValue;
} else if (rule.vt === 'jsonata') {
try {
v1 = rule.v.evaluate({msg:msg});
v1 = RED.util.evaluateJSONataExpression(rule.v,msg);
} catch(err) {
node.error(RED._("switch.errors.invalid-expr",{error:err.message}));
return;
@@ -134,7 +134,7 @@ module.exports = function(RED) {
v2 = node.previousValue;
} else if (rule.v2t === 'jsonata') {
try {
v2 = rule.v2.evaluate({msg:msg});
v2 = RED.util.evaluateJSONataExpression(rule.v2,msg);
} catch(err) {
node.error(RED._("switch.errors.invalid-expr",{error:err.message}));
return;

View File

@@ -19,6 +19,7 @@ module.exports = function(RED) {
function ChangeNode(n) {
RED.nodes.createNode(this, n);
var node = this;
this.rules = n.rules;
var rule;
@@ -90,7 +91,7 @@ module.exports = function(RED) {
rule.to = RED.util.prepareJSONataExpression(rule.to,this);
} catch(e) {
valid = false;
this.error(RED._("change.errors.invalid-from",{error:e.message}));
this.error(RED._("change.errors.invalid-expr",{error:e.message}));
}
}
}
@@ -115,7 +116,12 @@ module.exports = function(RED) {
} else if (rule.tot === 'date') {
value = Date.now();
} else if (rule.tot === 'jsonata') {
value = rule.to.evaluate({msg:msg});
try{
value = RED.util.evaluateJSONataExpression(rule.to,msg);
} catch(err) {
node.error(RED._("change.errors.invalid-expr",{error:err.message}));
return;
}
}
if (rule.t === 'change') {
if (rule.fromt === 'msg' || rule.fromt === 'flow' || rule.fromt === 'global') {
@@ -219,7 +225,6 @@ module.exports = function(RED) {
return msg;
}
if (valid) {
var node = this;
this.on('input', function(msg) {
for (var i=0; i<this.rules.length; i++) {
if (this.rules[i].t === "move") {