diff --git a/packages/node_modules/@node-red/nodes/core/common/20-inject.js b/packages/node_modules/@node-red/nodes/core/common/20-inject.js index 54715e131..b1db94ff5 100644 --- a/packages/node_modules/@node-red/nodes/core/common/20-inject.js +++ b/packages/node_modules/@node-red/nodes/core/common/20-inject.js @@ -98,7 +98,7 @@ module.exports = function(RED) { node.repeaterSetup(); } - this.on("input", function(msg) { + this.on("input", function(msg, send, done) { var errors = []; this.props.forEach(p => { @@ -128,9 +128,10 @@ module.exports = function(RED) { }); if (errors.length) { - node.error(errors.join('; '), msg); + done(errors.join('; ')); } else { - node.send(msg); + send(msg); + done(); } }); } diff --git a/packages/node_modules/@node-red/nodes/core/common/24-complete.js b/packages/node_modules/@node-red/nodes/core/common/24-complete.js index 78008f81d..ea665a265 100644 --- a/packages/node_modules/@node-red/nodes/core/common/24-complete.js +++ b/packages/node_modules/@node-red/nodes/core/common/24-complete.js @@ -21,8 +21,9 @@ module.exports = function(RED) { RED.nodes.createNode(this,n); var node = this; this.scope = n.scope; - this.on("input",function(msg) { - this.send(msg); + this.on("input",function(msg, send, done) { + send(msg); + done(); }); } diff --git a/packages/node_modules/@node-red/nodes/core/common/25-catch.js b/packages/node_modules/@node-red/nodes/core/common/25-catch.js index 86245186c..5ed525c36 100644 --- a/packages/node_modules/@node-red/nodes/core/common/25-catch.js +++ b/packages/node_modules/@node-red/nodes/core/common/25-catch.js @@ -22,8 +22,9 @@ module.exports = function(RED) { var node = this; this.scope = n.scope; this.uncaught = n.uncaught; - this.on("input",function(msg) { - this.send(msg); + this.on("input",function(msg, send, done) { + send(msg); + done(); }); } diff --git a/packages/node_modules/@node-red/nodes/core/common/25-status.js b/packages/node_modules/@node-red/nodes/core/common/25-status.js index b36468dba..fc6ccbe29 100644 --- a/packages/node_modules/@node-red/nodes/core/common/25-status.js +++ b/packages/node_modules/@node-red/nodes/core/common/25-status.js @@ -21,8 +21,9 @@ module.exports = function(RED) { RED.nodes.createNode(this,n); var node = this; this.scope = n.scope; - this.on("input", function(msg) { - this.send(msg); + this.on("input", function(msg, send, done) { + send(msg); + done(); }); } diff --git a/packages/node_modules/@node-red/nodes/core/common/60-link.js b/packages/node_modules/@node-red/nodes/core/common/60-link.js index df0cf8850..5470ed434 100644 --- a/packages/node_modules/@node-red/nodes/core/common/60-link.js +++ b/packages/node_modules/@node-red/nodes/core/common/60-link.js @@ -26,8 +26,9 @@ module.exports = function(RED) { node.receive(msg); } RED.events.on(event,handler); - this.on("input", function(msg) { - this.send(msg); + this.on("input", function(msg, send, done) { + send(msg); + done(); }); this.on("close",function() { RED.events.removeListener(event,handler); @@ -40,10 +41,11 @@ module.exports = function(RED) { RED.nodes.createNode(this,n); var node = this; var event = "node:"+n.id; - this.on("input", function(msg) { + this.on("input", function(msg, send, done) { msg._event = event; RED.events.emit(event,msg) - this.send(msg); + send(msg); + done(); }); } RED.nodes.registerType("link out",LinkOutNode); diff --git a/packages/node_modules/@node-red/nodes/core/function/16-range.js b/packages/node_modules/@node-red/nodes/core/function/16-range.js index b92b155ed..a5dede4ea 100644 --- a/packages/node_modules/@node-red/nodes/core/function/16-range.js +++ b/packages/node_modules/@node-red/nodes/core/function/16-range.js @@ -27,7 +27,7 @@ module.exports = function(RED) { this.property = n.property||"payload"; var node = this; - this.on('input', function (msg) { + this.on('input', function (msg, send, done) { var value = RED.util.getMessageProperty(msg,node.property); if (value !== undefined) { var n = Number(value); @@ -43,11 +43,12 @@ module.exports = function(RED) { value = ((n - node.minin) / (node.maxin - node.minin) * (node.maxout - node.minout)) + node.minout; if (node.round) { value = Math.round(value); } RED.util.setMessageProperty(msg,node.property,value); - node.send(msg); + send(msg); } else { node.log(RED._("range.errors.notnumber")+": "+value); } } - else { node.send(msg); } // If no payload - just pass it on. + else { send(msg); } // If no payload - just pass it on. + done(); }); } RED.nodes.registerType("range", RangeNode); diff --git a/packages/node_modules/@node-red/nodes/core/function/80-template.js b/packages/node_modules/@node-red/nodes/core/function/80-template.js index 5700e2f55..d4c27cfd0 100644 --- a/packages/node_modules/@node-red/nodes/core/function/80-template.js +++ b/packages/node_modules/@node-red/nodes/core/function/80-template.js @@ -107,7 +107,7 @@ module.exports = function(RED) { var node = this; - function output(msg,value) { + function output(msg,value,send,done) { /* istanbul ignore else */ if (node.outputFormat === "json") { value = JSON.parse(value); @@ -119,22 +119,24 @@ module.exports = function(RED) { if (node.fieldType === 'msg') { RED.util.setMessageProperty(msg, node.field, value); - node.send(msg); + send(msg); + done(); } else if ((node.fieldType === 'flow') || (node.fieldType === 'global')) { var context = RED.util.parseContextStore(node.field); var target = node.context()[node.fieldType]; target.set(context.key, value, context.store, function (err) { if (err) { - node.error(err, msg); + done(err); } else { - node.send(msg); + send(msg); + done(); } }); } } - node.on("input", function(msg) { + node.on("input", function(msg, send, done) { try { /*** @@ -179,16 +181,16 @@ module.exports = function(RED) { Promise.all(promises).then(function() { var value = mustache.render(template, new NodeContext(msg, node.context(), null, is_json, resolvedTokens)); - output(msg, value); + output(msg, value, send, done); }).catch(function (err) { - node.error(err.message,msg); + done(err.message); }); } else { - output(msg, template); + output(msg, template, send, done); } } catch(err) { - node.error(err.message, msg); + done(err.message); } }); } diff --git a/packages/node_modules/@node-red/nodes/core/network/21-httpin.js b/packages/node_modules/@node-red/nodes/core/network/21-httpin.js index 6cf243cf8..322cb37e9 100644 --- a/packages/node_modules/@node-red/nodes/core/network/21-httpin.js +++ b/packages/node_modules/@node-red/nodes/core/network/21-httpin.js @@ -281,7 +281,7 @@ module.exports = function(RED) { var node = this; this.headers = n.headers||{}; this.statusCode = n.statusCode; - this.on("input",function(msg) { + this.on("input",function(msg,_send,done) { if (msg.res) { var headers = RED.util.cloneMessage(node.headers); if (msg.headers) { @@ -347,6 +347,7 @@ module.exports = function(RED) { } else { node.warn(RED._("httpin.errors.no-response")); } + done(); }); } RED.nodes.registerType("http response",HTTPOut); diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-HTML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-HTML.js index 0a24be368..b4b58b7a8 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-HTML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-HTML.js @@ -26,7 +26,7 @@ module.exports = function(RED) { this.ret = n.ret || "html"; this.as = n.as || "single"; var node = this; - this.on("input", function(msg) { + this.on("input", function(msg,send,done) { var value = RED.util.getMessageProperty(msg,node.property); if (value !== undefined) { var tag = node.tag; @@ -57,7 +57,7 @@ module.exports = function(RED) { type: "string", ch: "" }; - node.send(new_msg); + send(new_msg); } } if (node.as === "single") { @@ -70,14 +70,15 @@ module.exports = function(RED) { }); if (node.as === "single") { // Always return an array - even if blank RED.util.setMessageProperty(msg,node.outproperty,pay); - node.send(msg); + send(msg); } + done(); } catch (error) { - node.error(error.message,msg); + done(error.message); } } - else { node.send(msg); } // If no payload - just pass it on. + else { send(msg); done(); } // If no payload - just pass it on. }); } RED.nodes.registerType("html",CheerioNode); diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js index 6611877e1..c3bd6ae5b 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js @@ -31,7 +31,7 @@ module.exports = function(RED) { var node = this; - this.on("input", function(msg) { + this.on("input", function(msg,send,done) { var validate = false; if (msg.schema) { // If input schema is different, re-compile it @@ -42,7 +42,7 @@ module.exports = function(RED) { } catch(e) { this.schema = null; this.compiledSchema = null; - node.error(RED._("json.errors.schema-error-compile"), msg); + done(RED._("json.errors.schema-error-compile")); return; } } @@ -57,28 +57,32 @@ module.exports = function(RED) { if (validate) { if (this.compiledSchema(msg[node.property])) { delete msg.schema; - node.send(msg); + send(msg); + done(); } else { msg.schemaError = this.compiledSchema.errors; - node.error(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`, msg); + done(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`); } } else { - node.send(msg); + send(msg); + done(); } } - catch(e) { node.error(e.message,msg); } + catch(e) { done(e.message); } } else { // If node.action is str and value is str if (validate) { if (this.compiledSchema(JSON.parse(msg[node.property]))) { delete msg.schema; - node.send(msg); + send(msg); + done(); } else { msg.schemaError = this.compiledSchema.errors; - node.error(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`, msg); + done(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`); } } else { - node.send(msg); + send(msg); + done(); } } } @@ -90,37 +94,41 @@ module.exports = function(RED) { if (this.compiledSchema(value)) { RED.util.setMessageProperty(msg,node.property,JSON.stringify(value,null,node.indent)); delete msg.schema; - node.send(msg); + send(msg); + done(); } else { msg.schemaError = this.compiledSchema.errors; - node.error(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`, msg); + done(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`); } } else { RED.util.setMessageProperty(msg,node.property,JSON.stringify(value,null,node.indent)); - node.send(msg); + send(msg); + done(); } } - catch(e) { node.error(RED._("json.errors.dropped-error")); } + catch(e) { done(RED._("json.errors.dropped-error")); } } - else { node.warn(RED._("json.errors.dropped-object")); } + else { node.warn(RED._("json.errors.dropped-object")); done(); } } else { // If node.action is obj and value is object if (validate) { if (this.compiledSchema(value)) { delete msg.schema; - node.send(msg); + send(msg); + done(); } else { msg.schemaError = this.compiledSchema.errors; - node.error(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`, msg); + done(`${RED._("json.errors.schema-error")}: ${ajv.errorsText(this.compiledSchema.errors)}`); } } else { - node.send(msg); + send(msg); + done(); } } } - else { node.warn(RED._("json.errors.dropped")); } + else { node.warn(RED._("json.errors.dropped")); done(); } } - else { node.send(msg); } // If no property - just pass it on. + else { send(msg); done(); } // If no property - just pass it on. }); } RED.nodes.registerType("json",JSONNode); diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js index 3bfd38101..a778c4d72 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js @@ -10,7 +10,7 @@ module.exports = function(RED) { this.charkey = n.chr; this.property = n.property||"payload"; var node = this; - this.on("input", function(msg) { + this.on("input", function(msg,send,done) { var value = RED.util.getMessageProperty(msg,node.property); if (value !== undefined) { var options; @@ -21,7 +21,8 @@ module.exports = function(RED) { var builder = new xml2js.Builder(options); value = builder.buildObject(value, options); RED.util.setMessageProperty(msg,node.property,value); - node.send(msg); + send(msg); + done(); } else if (typeof value == "string") { options = {}; @@ -30,17 +31,18 @@ module.exports = function(RED) { options.attrkey = node.attrkey || options.attrkey || '$'; options.charkey = node.charkey || options.charkey || '_'; parseString(value, options, function (err, result) { - if (err) { node.error(err, msg); } + if (err) { done(err); } else { value = result; RED.util.setMessageProperty(msg,node.property,value); - node.send(msg); + send(msg); + done(); } }); } - else { node.warn(RED._("xml.errors.xml_js")); } + else { node.warn(RED._("xml.errors.xml_js")); done(); } } - else { node.send(msg); } // If no property - just pass it on. + else { send(msg); done(); } // If no property - just pass it on. }); } RED.nodes.registerType("xml",XMLNode); diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js index 1a34fdd57..69a6bf444 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js @@ -6,33 +6,35 @@ module.exports = function(RED) { RED.nodes.createNode(this,n); this.property = n.property||"payload"; var node = this; - this.on("input", function(msg) { + this.on("input", function(msg,send,done) { var value = RED.util.getMessageProperty(msg,node.property); if (value !== undefined) { if (typeof value === "string") { try { value = yaml.load(value); RED.util.setMessageProperty(msg,node.property,value); - node.send(msg); + send(msg); + done(); } - catch(e) { node.error(e.message,msg); } + catch(e) { done(e.message); } } else if (typeof value === "object") { if (!Buffer.isBuffer(value)) { try { value = yaml.dump(value); RED.util.setMessageProperty(msg,node.property,value); - node.send(msg); + send(msg); + done(); } catch(e) { - node.error(RED._("yaml.errors.dropped-error")); + done(RED._("yaml.errors.dropped-error")); } } - else { node.warn(RED._("yaml.errors.dropped-object")); } + else { node.warn(RED._("yaml.errors.dropped-object")); done(); } } - else { node.warn(RED._("yaml.errors.dropped")); } + else { node.warn(RED._("yaml.errors.dropped")); done(); } } - else { node.send(msg); } // If no payload - just pass it on. + else { send(msg); done(); } // If no payload - just pass it on. }); } RED.nodes.registerType("yaml",YAMLNode);