diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 5d4d87bb7..07efaf18e 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -28,7 +28,7 @@ To help us understand the issue, please fill-in as much of the following informa ### Please tell us about your environment: - [ ] Node-RED version: -- [ ] node.js version: +- [ ] Node.js version: - [ ] npm version: - [ ] Platform/OS: - [ ] Browser: diff --git a/.github/ISSUE_TEMPLATE/--bug_report.md b/.github/ISSUE_TEMPLATE/--bug_report.md index ff13e2ace..63923455e 100644 --- a/.github/ISSUE_TEMPLATE/--bug_report.md +++ b/.github/ISSUE_TEMPLATE/--bug_report.md @@ -33,7 +33,7 @@ To help us understand the issue, please fill-in as much of the following informa ### Please tell us about your environment: - [ ] Node-RED version: -- [ ] node.js version: +- [ ] Node.js version: - [ ] npm version: - [ ] Platform/OS: - [ ] Browser: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb84978a..793b5c565 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -725,7 +725,7 @@ Nodes - Initial support of sequence rules for SWITCH node (#1545) - initial support of SORT node (#1500) - Inject node - let once delay be editable (#1541) - - Introduce `nodeMaxMessageBufferLength` setting for msg sequence nodes + - Introduce `nodeMessageBufferMaxLength` setting for msg sequence nodes - Let CSV correct parts if we remove header row. - let default apply if msg.delay not set in override mode. (#1397) - let trigger node be reset by boolean message (#1554) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33a2f582f..f0f4096c5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,7 @@ relevant nodes, press Ctrl-E and copy the flow data from the Export dialog. At a minimum, please include: - Version of Node-RED - either release number if you downloaded a zip, or the first few lines of `git log` if you are cloning the repository directly. - - Version of node.js - what does `node -v` say? + - Version of Node.js - what does `node -v` say? ## Feature requests diff --git a/packages/node_modules/@node-red/editor-api/lib/admin/index.js b/packages/node_modules/@node-red/editor-api/lib/admin/index.js index 32bf010c5..50d7b168f 100644 --- a/packages/node_modules/@node-red/editor-api/lib/admin/index.js +++ b/packages/node_modules/@node-red/editor-api/lib/admin/index.js @@ -48,13 +48,13 @@ module.exports = { // Nodes adminApp.get("/nodes",needsPermission("nodes.read"),nodes.getAll,apiUtil.errorHandler); adminApp.post("/nodes",needsPermission("nodes.write"),nodes.post,apiUtil.errorHandler); - adminApp.get(/\/nodes\/messages/,needsPermission("nodes.read"),nodes.getModuleCatalogs,apiUtil.errorHandler); - adminApp.get(/\/nodes\/((@[^\/]+\/)?[^\/]+\/[^\/]+)\/messages/,needsPermission("nodes.read"),nodes.getModuleCatalog,apiUtil.errorHandler); - adminApp.get(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.read"),nodes.getModule,apiUtil.errorHandler); - adminApp.put(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.write"),nodes.putModule,apiUtil.errorHandler); - adminApp.delete(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.write"),nodes.delete,apiUtil.errorHandler); - adminApp.get(/\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,needsPermission("nodes.read"),nodes.getSet,apiUtil.errorHandler); - adminApp.put(/\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,needsPermission("nodes.write"),nodes.putSet,apiUtil.errorHandler); + adminApp.get(/^\/nodes\/messages/,needsPermission("nodes.read"),nodes.getModuleCatalogs,apiUtil.errorHandler); + adminApp.get(/^\/nodes\/((@[^\/]+\/)?[^\/]+\/[^\/]+)\/messages/,needsPermission("nodes.read"),nodes.getModuleCatalog,apiUtil.errorHandler); + adminApp.get(/^\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.read"),nodes.getModule,apiUtil.errorHandler); + adminApp.put(/^\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.write"),nodes.putModule,apiUtil.errorHandler); + adminApp.delete(/^\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.write"),nodes.delete,apiUtil.errorHandler); + adminApp.get(/^\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,needsPermission("nodes.read"),nodes.getSet,apiUtil.errorHandler); + adminApp.put(/^\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,needsPermission("nodes.write"),nodes.putSet,apiUtil.errorHandler); // Context adminApp.get("/context/:scope(global)",needsPermission("context.read"),context.get,apiUtil.errorHandler); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index 4fa779269..1abace286 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -526,7 +526,7 @@ RED.editor = (function() { } else if (node.type.indexOf("subflow:")===0) { var subflow = RED.nodes.subflow(node.type.substring(8)); label = RED._("subflow.editSubflowInstance",{name:RED.utils.sanitize(subflow.name)}) - } else { + } else if (node._def !== undefined) { if (typeof node._def.paletteLabel !== "undefined") { try { label = RED.utils.sanitize((typeof node._def.paletteLabel === "function" ? node._def.paletteLabel.call(node._def) : node._def.paletteLabel)||""); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/palette.js b/packages/node_modules/@node-red/editor-client/src/js/ui/palette.js index 256c8eb1b..359d0dead 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/palette.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/palette.js @@ -152,7 +152,7 @@ RED.palette = (function() { function getPaletteNode(type) { return $(".red-ui-palette-node[data-palette-type='"+type+"']"); } - + function addNodeType(nt,def) { if (getPaletteNode(nt).length) { return; @@ -241,7 +241,6 @@ RED.palette = (function() { RED.sidebar.info.set(helpText,RED._("sidebar.info.nodeHelp")); }); var chart = $("#red-ui-workspace-chart"); - var chartOffset = chart.offset(); var chartSVG = $("#red-ui-workspace-chart>svg").get(0); var activeSpliceLink; var mouseX; @@ -265,8 +264,8 @@ RED.palette = (function() { ui.originalPosition.left = $('#' + e.target.id).offset().left; if (def.inputs > 0 && def.outputs > 0) { - mouseX = ui.position.left-paletteWidth+(ui.helper.width()/2) - chartOffset.left + chart.scrollLeft(); - mouseY = ui.position.top-paletteTop+(ui.helper.height()/2) - chartOffset.top + chart.scrollTop(); + mouseX = ui.position.left - paletteWidth + (ui.helper.width()/2) + chart.scrollLeft(); + mouseY = ui.position.top - paletteTop + (ui.helper.height()/2) + chart.scrollTop(); if (!spliceTimer) { spliceTimer = setTimeout(function() { var nodes = []; diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 57cce2852..0a3438264 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -3166,7 +3166,7 @@ RED.view = (function() { var statusClass = "red-ui-flow-node-status-"+(d.status.shape||"dot")+"-"+d.status.fill; thisNode.selectAll(".red-ui-flow-node-status").style("display","inline").attr("class","red-ui-flow-node-status "+statusClass); } - if (d.status.text) { + if (d.status.hasOwnProperty('text')) { thisNode.selectAll(".red-ui-flow-node-status-label").text(d.status.text); } else { thisNode.selectAll(".red-ui-flow-node-status-label").text(""); diff --git a/packages/node_modules/@node-red/nodes/core/core/lib/debug/debug-utils.js b/packages/node_modules/@node-red/nodes/core/core/lib/debug/debug-utils.js index 10888cbad..a1b44ae97 100644 --- a/packages/node_modules/@node-red/nodes/core/core/lib/debug/debug-utils.js +++ b/packages/node_modules/@node-red/nodes/core/core/lib/debug/debug-utils.js @@ -42,14 +42,14 @@ RED.debug = (function() { var content = $("
").css({"position":"relative","height":"100%"}); var toolbar = $('
'+ ' '+ - '
').appendTo(content); + '
').appendTo(content); var footerToolbar = $('
'+ // ''+ // 'list'+ // 'table '+ // ''+ - ' ' + + ' ' + '
'); messageList = $('
').appendTo(content); diff --git a/packages/node_modules/@node-red/nodes/core/logic/10-switch.html b/packages/node_modules/@node-red/nodes/core/logic/10-switch.html index 3687ae484..3b3d54110 100644 --- a/packages/node_modules/@node-red/nodes/core/logic/10-switch.html +++ b/packages/node_modules/@node-red/nodes/core/logic/10-switch.html @@ -372,7 +372,6 @@ }, oneditsave: function() { var rules = $("#node-input-rule-container").editableList('items'); - var ruleset; var node = this; node.rules = []; rules.each(function(i) { diff --git a/packages/node_modules/@node-red/nodes/core/logic/15-change.html b/packages/node_modules/@node-red/nodes/core/logic/15-change.html index 616b03ab9..5df7f9a6c 100644 --- a/packages/node_modules/@node-red/nodes/core/logic/15-change.html +++ b/packages/node_modules/@node-red/nodes/core/logic/15-change.html @@ -226,7 +226,6 @@ }, oneditsave: function() { var rules = $("#node-input-rule-container").editableList('items'); - var ruleset; var node = this; node.rules= []; rules.each(function(i) { diff --git a/packages/node_modules/@node-red/nodes/core/logic/17-split.js b/packages/node_modules/@node-red/nodes/core/logic/17-split.js index c644b9e36..869fbaa3d 100644 --- a/packages/node_modules/@node-red/nodes/core/logic/17-split.js +++ b/packages/node_modules/@node-red/nodes/core/logic/17-split.js @@ -42,7 +42,7 @@ module.exports = function(RED) { node.addname = n.addname || ""; try { if (node.spltType === "str") { - this.splt = (n.splt || "\\n").replace(/\\n/,"\n").replace(/\\r/,"\r").replace(/\\t/,"\t").replace(/\\e/,"\e").replace(/\\f/,"\f").replace(/\\0/,"\0"); + this.splt = (n.splt || "\\n").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"\t").replace(/\\e/g,"\e").replace(/\\f/g,"\f").replace(/\\0/g,"\0"); } else if (node.spltType === "bin") { var spltArray = JSON.parse(n.splt); if (Array.isArray(spltArray)) { diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/core/89-delay.html b/packages/node_modules/@node-red/nodes/locales/en-US/core/89-delay.html index 87deebe2b..d6977a34a 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/core/89-delay.html +++ b/packages/node_modules/@node-red/nodes/locales/en-US/core/89-delay.html @@ -22,12 +22,12 @@
Sets the delay, in milliseconds, to be applied to the message. This option only applies if the node is configured to allow the message to override the configured default delay interval.
-
reset
-
If the received message has this property set to any value, all - outstanding messages held by the node are cleared without being sent.
-
flush
-
If the received message has this property set to any value, all - outstanding messages held by the node are sent immediately.
+
reset
+
If the received message has this property set to any value, all + outstanding messages held by the node are cleared without being sent.
+
flush
+
If the received message has this property set to any value, all + outstanding messages held by the node are sent immediately.

Details

When configured to delay messages, the delay interval can be a fixed value, diff --git a/packages/node_modules/@node-red/nodes/locales/ja/core/89-delay.html b/packages/node_modules/@node-red/nodes/locales/ja/core/89-delay.html index 43eda93a7..ed5046f03 100644 --- a/packages/node_modules/@node-red/nodes/locales/ja/core/89-delay.html +++ b/packages/node_modules/@node-red/nodes/locales/ja/core/89-delay.html @@ -22,6 +22,8 @@

メッセージの遅延時間をミリ秒単位で設定します。これはノードの設定でデフォルトの遅延時間を上書きできるようノードを設定した場合にのみ適用します。
reset
受信メッセージでこのプロパティを任意の値に設定すると、ノードが保持する全ての未送信メッセージをクリアします。
+
flush
+
受信メッセージでこのプロパティを任意の値に設定すると、ノードが保持する全ての未送信メッセージを直ちに送信します。

詳細

メッセージを遅延させるように設定する場合、遅延時間は固定値、範囲内の乱数値、メッセージ毎の動的な指定値のいずれかを指定できます。

diff --git a/packages/node_modules/@node-red/runtime/lib/index.js b/packages/node_modules/@node-red/runtime/lib/index.js index 58b7df986..66bff6ff2 100644 --- a/packages/node_modules/@node-red/runtime/lib/index.js +++ b/packages/node_modules/@node-red/runtime/lib/index.js @@ -129,7 +129,7 @@ function start() { log.info(log._("runtime.version",{component:"Node.js ",version:process.version})); if (settings.UNSUPPORTED_VERSION) { log.error("*****************************************************************"); - log.error("* "+log._("runtime.unsupported_version",{component:"Node.js",version:process.version,requires: ">=4"})+" *"); + log.error("* "+log._("runtime.unsupported_version",{component:"Node.js",version:process.version,requires: ">=8.9.0"})+" *"); log.error("*****************************************************************"); events.emit("runtime-event",{id:"runtime-unsupported-version",payload:{type:"error",text:"notification.errors.unsupportedVersion"},retain:true}); } diff --git a/packages/node_modules/@node-red/runtime/lib/nodes/context/index.js b/packages/node_modules/@node-red/runtime/lib/nodes/context/index.js index f8de26070..322fa2868 100644 --- a/packages/node_modules/@node-red/runtime/lib/nodes/context/index.js +++ b/packages/node_modules/@node-red/runtime/lib/nodes/context/index.js @@ -234,7 +234,7 @@ function createContext(id,seed,parent) { if (err.code === "INVALID_EXPR") { throw err; } - value[0] = undefined; + values[0] = undefined; } } } else { @@ -246,7 +246,7 @@ function createContext(id,seed,parent) { if (err.code === "INVALID_EXPR") { throw err; } - value[i] = undefined; + values[i] = undefined; } } } diff --git a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/ssh/keygen.js b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/ssh/keygen.js index 218144c12..5555f841b 100644 --- a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/ssh/keygen.js +++ b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/ssh/keygen.js @@ -51,6 +51,12 @@ function runSshKeygenCommand(args,cwd,env) { resolve(stdout); } }); + child.error('error', function(err) { + if (/ENOENT/.test(err.toString())) { + err.code = "command_not_found"; + } + reject(err); + }); }); } diff --git a/packages/node_modules/node-red/lib/red.js b/packages/node_modules/node-red/lib/red.js index 2a04df578..4d7269518 100644 --- a/packages/node_modules/node-red/lib/red.js +++ b/packages/node_modules/node-red/lib/red.js @@ -27,9 +27,9 @@ var apiEnabled = false; function checkVersion(userSettings) { var semver = require('semver'); - if (!semver.satisfies(process.version,">=4.8.0")) { + if (!semver.satisfies(process.version,">=8.9.0")) { // TODO: in the future, make this a hard error. - // var e = new Error("Unsupported version of node.js"); + // var e = new Error("Unsupported version of Node.js"); // e.code = "unsupported_version"; // throw e; userSettings.UNSUPPORTED_VERSION = process.version; @@ -39,7 +39,7 @@ function checkVersion(userSettings) { * This module provides the full Node-RED application, with both the runtime * and editor components built in. * - * The API this module exposes allows it to be embedded within another node.js + * The API this module exposes allows it to be embedded within another Node.js * application. * * @namespace node-red diff --git a/packages/node_modules/node-red/red.js b/packages/node_modules/node-red/red.js index 337eb44e8..94cebdfaa 100755 --- a/packages/node_modules/node-red/red.js +++ b/packages/node_modules/node-red/red.js @@ -197,10 +197,8 @@ try { RED.init(server,settings); } catch(err) { if (err.code == "unsupported_version") { - console.log("Unsupported version of node.js:",process.version); - console.log("Node-RED requires node.js v4 or later"); - } else if (err.code == "not_built") { - console.log("Node-RED has not been built. See README.md for details"); + console.log("Unsupported version of Node.js:",process.version); + console.log("Node-RED requires Node.js v8.9.0 or later"); } else { console.log("Failed to start server:"); if (err.stack) { diff --git a/packages/node_modules/node-red/settings.js b/packages/node_modules/node-red/settings.js index a15e533c5..679d24065 100644 --- a/packages/node_modules/node-red/settings.js +++ b/packages/node_modules/node-red/settings.js @@ -55,7 +55,7 @@ module.exports = { // The maximum number of messages nodes will buffer internally as part of their // operation. This applies across a range of nodes that operate on message sequences. // defaults to no limit. A value of 0 also means no limit is applied. - //nodeMaxMessageBufferLength: 0, + //nodeMessageBufferMaxLength: 0, // To disable the option for using local files for storing keys and certificates in the TLS configuration // node, set this to true