From 946a6d604160ce07b513dc7df182461505528755 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 5 Jul 2018 10:43:33 +0100 Subject: [PATCH] Update RED.util.evaluateNodeProperty to support context stores --- red/runtime/util.js | 51 +++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/red/runtime/util.js b/red/runtime/util.js index 1d49641df..7d6464174 100644 --- a/red/runtime/util.js +++ b/red/runtime/util.js @@ -322,35 +322,54 @@ function evaluteEnvProperty(value) { return value; } -function evaluateNodeProperty(value, type, node, msg) { +var parseContextStore = function(key) { + var parts = {}; + var m = /^#:\((\S+?)\)::(.*)$/.exec(key); + if (m) { + parts.store = m[1]; + parts.key = m[2]; + } else { + parts.key = key; + } + return parts; +} + +function evaluateNodeProperty(value, type, node, msg, callback) { + var result; if (type === 'str') { - return ""+value; + result = ""+value; } else if (type === 'num') { - return Number(value); + result = Number(value); } else if (type === 'json') { - return JSON.parse(value); + result = JSON.parse(value); } else if (type === 're') { - return new RegExp(value); + result = new RegExp(value); } else if (type === 'date') { - return Date.now(); + result = Date.now(); } else if (type === 'bin') { var data = JSON.parse(value); - return Buffer.from(data); + result = Buffer.from(data); } else if (type === 'msg' && msg) { - return getMessageProperty(msg,value); - } else if (type === 'flow' && node) { - return node.context().flow.get(value); - } else if (type === 'global' && node) { - return node.context().global.get(value); + result = getMessageProperty(msg,value); + } else if ((type === 'flow' || type === 'global') && node) { + var contextKey = parseContextStore(value); + result = node.context()[type].get(contextKey.key,contextKey.store,callback); + if (callback) { + return; + } } else if (type === 'bool') { - return /^true$/i.test(value); + result = /^true$/i.test(value); } else if (type === 'jsonata') { var expr = prepareJSONataExpression(value,node); - return evaluateJSONataExpression(expr,msg); + result = evaluateJSONataExpression(expr,msg); } else if (type === 'env') { - return evaluteEnvProperty(value); + result = evaluteEnvProperty(value); + } + if (callback) { + callback(result); + } else { + return value; } - return value; } function prepareJSONataExpression(value,node) {