From 598bcf675fe9635164e8b6c8abcb2dd1da1fb472 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Aug 2022 15:45:12 +0100 Subject: [PATCH 01/15] fix searching by type when type name has a space --- .../editor-client/src/js/ui/palette.js | 14 +++++- .../editor-client/src/js/ui/search.js | 46 +++++++++++++------ 2 files changed, 44 insertions(+), 16 deletions(-) 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 9f20cc674..322283fcb 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 @@ -175,9 +175,19 @@ RED.palette = (function() { $('').appendTo(popOverContent) } - var safeType = type.replace(/'/g,"\\'"); + const safeType = type.replace(/'/g,"\\'"); + function wrapStr(str) { + if(str.indexOf(' ') >= 0) { + return '"' + str + '"' + } + return str + } - $('').appendTo(popOverContent) + $('') + .appendTo(popOverContent) + .on('click', function() { + RED.search.show('type:' + wrapStr(safeType)) + }) $('').appendTo(popOverContent) $('

',{style:"font-size: 0.8em"}).text(metaData).appendTo(popOverContent); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js index f9cc79f08..d8035908a 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js @@ -106,14 +106,26 @@ RED.search = (function() { return val; } + function extractType(val, flags) { + // extracts: type:XYZ & type:"X Y Z" + console.log(`extractType(val, flags): val:${val}`) + const regEx = /(?:type):\s*(?:"([^"]+)"|([^" ]+))/; + let m + while ((m = regEx.exec(val)) !== null) { + // avoid infinite loops with zero-width matches + if (m.index === regEx.lastIndex) { + regEx.lastIndex++; + } + val = val.replace(m[0]," ").trim() + const flag = m[2] || m[1] // quoted entries in capture group 1, unquoted in capture group 2 + flags.type = flags.type || []; + flags.type.push(flag); + } + return val; + } + function search(val) { var results = []; - var typeFilter; - var m = /(?:^| )type:([^ ]+)/.exec(val); - if (m) { - val = val.replace(/(?:^| )type:[^ ]+/,""); - typeFilter = m[1]; - } var flags = {}; val = extractFlag(val,"invalid",flags); val = extractFlag(val,"unused",flags); @@ -121,18 +133,20 @@ RED.search = (function() { val = extractFlag(val,"subflow",flags); val = extractFlag(val,"hidden",flags); val = extractFlag(val,"modified",flags); - val = extractValue(val,"flow",flags);// flow:active or flow: + val = extractValue(val,"flow",flags);// flow:current or flow: val = extractValue(val,"uses",flags);// uses: + val = extractType(val,flags);// uses: val = val.trim(); var hasFlags = Object.keys(flags).length > 0; if (flags.flow && flags.flow.indexOf("current") >= 0) { let idx = flags.flow.indexOf("current"); - flags.flow[idx] = RED.workspaces.active();//convert active to flow ID + flags.flow[idx] = RED.workspaces.active();//convert 'current' to active flow ID } if (flags.flow && flags.flow.length) { flags.flow = [ ...new Set(flags.flow) ]; //deduplicate } - if (val.length > 0 || typeFilter || hasFlags) { + const hasTypeFilter = flags.type && flags.type.length > 0 + if (val.length > 0 || hasFlags) { val = val.toLowerCase(); var i; var j; @@ -146,8 +160,8 @@ RED.search = (function() { } for (i=0;i -1) { + var kpos = val ? keys[i].indexOf(val) : -1; + if (kpos > -1 || (val === "" && hasTypeFilter)) { var ids = Object.keys(index[key]||{}); for (j=0;j -1) { + nodes[node.node.id] = nodes[node.node.id] || { node: node.node, label: node.label }; - nodes[node.node.id].index = Math.min(nodes[node.node.id].index||Infinity,kpos); + nodes[node.node.id].index = Math.min(nodes[node.node.id].index || Infinity, typeIndex > -1 ? typeIndex : kpos); } } } From 9540cfe74931720aa34f1b0e8dbbef566cb91c8b Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Sat, 13 Aug 2022 18:09:11 +0100 Subject: [PATCH 02/15] fix flags search without val --- .../editor-client/src/js/ui/search.js | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js index d8035908a..7d147bde9 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js @@ -125,8 +125,8 @@ RED.search = (function() { } function search(val) { - var results = []; - var flags = {}; + const results = []; + const flags = {}; val = extractFlag(val,"invalid",flags); val = extractFlag(val,"unused",flags); val = extractFlag(val,"config",flags); @@ -137,7 +137,8 @@ RED.search = (function() { val = extractValue(val,"uses",flags);// uses: val = extractType(val,flags);// uses: val = val.trim(); - var hasFlags = Object.keys(flags).length > 0; + const hasFlags = Object.keys(flags).length > 0; + const hasTypeFilter = flags.type && flags.type.length > 0 if (flags.flow && flags.flow.indexOf("current") >= 0) { let idx = flags.flow.indexOf("current"); flags.flow[idx] = RED.workspaces.active();//convert 'current' to active flow ID @@ -145,13 +146,12 @@ RED.search = (function() { if (flags.flow && flags.flow.length) { flags.flow = [ ...new Set(flags.flow) ]; //deduplicate } - const hasTypeFilter = flags.type && flags.type.length > 0 if (val.length > 0 || hasFlags) { val = val.toLowerCase(); - var i; - var j; - var list = []; - var nodes = {}; + let i; + let j; + let list = []; + const nodes = {}; let keys = []; if (flags.uses) { keys = flags.uses; @@ -159,10 +159,10 @@ RED.search = (function() { keys = Object.keys(index); } for (i=0;i -1 || (val === "" && hasTypeFilter)) { - var ids = Object.keys(index[key]||{}); + const key = keys[i]; + const kpos = val ? keys[i].indexOf(val) : -1; + if (kpos > -1 || (val === "" && hasFlags)) { + const ids = Object.keys(index[key]||{}); for (j=0;j Date: Sat, 3 Sep 2022 21:03:08 +0900 Subject: [PATCH 03/15] Add button type to the adding SSH key button --- .../@node-red/editor-client/src/js/ui/projects/projects.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js index 190561e15..30a1e51d0 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js @@ -545,7 +545,7 @@ RED.projects = (function() { var sshwarningRow = $('

').hide().appendTo(subrow); $('
'+RED._("projects.clone-project.ssh-key-desc")+'
').appendTo(sshwarningRow); subrow = $('
').appendTo(sshwarningRow); - $('').appendTo(subrow).on("click", function(e) { + $('').appendTo(subrow).on("click", function(e) { e.preventDefault(); dialog.dialog( "close" ); RED.userSettings.show('gitconfig'); From 5f159c1fbd4e78373292472263f8caa0d720721d Mon Sep 17 00:00:00 2001 From: Stephen McLaughlin <44235289+Steve-Mcl@users.noreply.github.com> Date: Sat, 3 Sep 2022 21:54:21 +0100 Subject: [PATCH 04/15] Update packages/node_modules/@node-red/editor-client/src/js/ui/search.js Co-authored-by: Nick O'Leary --- .../node_modules/@node-red/editor-client/src/js/ui/search.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js index 7d147bde9..6dcd44b88 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js @@ -108,7 +108,6 @@ RED.search = (function() { function extractType(val, flags) { // extracts: type:XYZ & type:"X Y Z" - console.log(`extractType(val, flags): val:${val}`) const regEx = /(?:type):\s*(?:"([^"]+)"|([^" ]+))/; let m while ((m = regEx.exec(val)) !== null) { From c038c99f9dbc54f15c88f6ec8a2b5f379d4e8253 Mon Sep 17 00:00:00 2001 From: Stephen McLaughlin <44235289+Steve-Mcl@users.noreply.github.com> Date: Sat, 3 Sep 2022 21:54:41 +0100 Subject: [PATCH 05/15] Update packages/node_modules/@node-red/editor-client/src/js/ui/search.js Co-authored-by: Nick O'Leary --- .../node_modules/@node-red/editor-client/src/js/ui/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js index 6dcd44b88..3903a4a0a 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js @@ -134,7 +134,7 @@ RED.search = (function() { val = extractFlag(val,"modified",flags); val = extractValue(val,"flow",flags);// flow:current or flow: val = extractValue(val,"uses",flags);// uses: - val = extractType(val,flags);// uses: + val = extractType(val,flags);// type: val = val.trim(); const hasFlags = Object.keys(flags).length > 0; const hasTypeFilter = flags.type && flags.type.length > 0 From e11f17672c0b208d7560c249ca617ef989b11ee9 Mon Sep 17 00:00:00 2001 From: Stephen McLaughlin <44235289+Steve-Mcl@users.noreply.github.com> Date: Sat, 3 Sep 2022 22:01:54 +0100 Subject: [PATCH 06/15] Update packages/node_modules/@node-red/editor-client/src/js/ui/palette.js --- .../node_modules/@node-red/editor-client/src/js/ui/palette.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 322283fcb..928793610 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 @@ -176,7 +176,7 @@ RED.palette = (function() { } const safeType = type.replace(/'/g,"\\'"); - function wrapStr(str) { + const wrapStr = function (str) { if(str.indexOf(' ') >= 0) { return '"' + str + '"' } From a533943a4043cd915ec40e37a424ae168a0b4793 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Sun, 4 Sep 2022 01:50:54 +0100 Subject: [PATCH 07/15] add function node monaco types util and promisify fixes #3851 --- .../editor-client/src/js/ui/editors/code-editors/monaco.js | 2 +- .../@node-red/editor-client/src/types/node-red/func.d.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editors/monaco.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editors/monaco.js index 497116125..68b9a487e 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editors/monaco.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/code-editors/monaco.js @@ -100,7 +100,7 @@ RED.editor.codeEditor.monaco = (function() { "node-red-util": {package: "node-red", module: "util", path: "node-red/util.d.ts" }, "node-red-func": {package: "node-red", module: "func", path: "node-red/func.d.ts" }, } - const defaultServerSideTypes = [ knownModules["node-red-util"], knownModules["node-red-func"], knownModules["globals"], knownModules["console"], knownModules["buffer"] ]; + const defaultServerSideTypes = [ knownModules["node-red-util"], knownModules["node-red-func"], knownModules["globals"], knownModules["console"], knownModules["buffer"] , knownModules["util"] ]; const modulesCache = {}; diff --git a/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts index ae411f33c..fd2adcbd8 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts @@ -14,6 +14,9 @@ declare var msg: NodeMessage; /** @type {string} the id of the incoming `msg` (alias of msg._msgid) */ declare const __msgid__:string; +declare const util:typeof import('util') +declare const promisify:typeof import('util').promisify + /** * @typedef NodeStatus * @type {object} From fbde0091de47a8393e8e541bebc973b51fa0f721 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Sun, 4 Sep 2022 11:08:41 +0100 Subject: [PATCH 08/15] fix node-red crash with invalid mqtt birth topic fixes #3865 --- .../@node-red/nodes/core/network/10-mqtt.js | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js index 9e6195b5d..532d54d8e 100644 --- a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js +++ b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js @@ -991,14 +991,21 @@ module.exports = function(RED) { } if (topicOK) { - node.client.publish(msg.topic, msg.payload, options, function(err) { - done && done(err); - return - }); + node.client.publish(msg.topic, msg.payload, options, function (err) { + if (done) { + done(err) + } else { + node.error(err, msg) + } + }) } else { - const error = new Error(RED._("mqtt.errors.invalid-topic")); - error.warn = true; - done(error); + const error = new Error(RED._("mqtt.errors.invalid-topic")) + error.warn = true + if (done) { + done(error) + } else { + node.warn(error, msg) + } } } }; From cc5a770b164e8e55713c37d468ee2c4c717be1b3 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 4 Sep 2022 21:58:02 +0900 Subject: [PATCH 09/15] Add button type to buttons on projects dialog --- .../src/js/ui/projects/projects.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js index 30a1e51d0..6294c4c51 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/projects/projects.js @@ -1171,11 +1171,11 @@ RED.projects = (function() { row = $('
').appendTo(container); - var openProject = $('').appendTo(row); - var createAsEmpty = $('').appendTo(row); - // var createAsCopy = $('').appendTo(row); - var createAsClone = $('').appendTo(row); - // var createAsClone = $('').appendTo(row); + var openProject = $('').appendTo(row); + var createAsEmpty = $('').appendTo(row); + // var createAsCopy = $('').appendTo(row); + var createAsClone = $('').appendTo(row); + // var createAsClone = $('').appendTo(row); row.find(".red-ui-projects-dialog-screen-create-type").on("click", function(evt) { evt.preventDefault(); container.find(".red-ui-projects-dialog-screen-create-type").removeClass('selected'); @@ -1397,7 +1397,7 @@ RED.projects = (function() { var sshwarningRow = $('
').hide().appendTo(subrow); $('
'+RED._("projects.create.desc2")+'
').appendTo(sshwarningRow); subrow = $('
').appendTo(sshwarningRow); - $('').appendTo(subrow).on("click", function(e) { + $('').appendTo(subrow).on("click", function(e) { e.preventDefault(); $('#red-ui-projects-dialog-cancel').trigger("click"); RED.userSettings.show('gitconfig'); @@ -1631,14 +1631,14 @@ RED.projects = (function() { function deleteProject(row,name,done) { var cover = $('
').on("click", function(evt) { evt.stopPropagation(); }).appendTo(row); $('').text(RED._("projects.delete.confirm")).appendTo(cover); - $('') + $('') .appendTo(cover) .on("click", function(e) { e.stopPropagation(); cover.remove(); done(true); }); - $('') + $('') .appendTo(cover) .on("click", function(e) { e.stopPropagation(); @@ -1822,7 +1822,7 @@ RED.projects = (function() { header.addClass("selectable"); var tools = $('
').appendTo(header); - $('') + $('') .appendTo(tools) .on("click", function(e) { e.stopPropagation(); From 745607b5bce56c125e76f8e4baf6b0707d542ed5 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 4 Sep 2022 23:21:34 +0900 Subject: [PATCH 10/15] Add button type to buttons on node properties --- .../@node-red/nodes/core/common/24-complete.html | 2 +- .../node_modules/@node-red/nodes/core/common/25-catch.html | 2 +- .../node_modules/@node-red/nodes/core/common/25-status.html | 2 +- .../@node-red/nodes/core/function/10-function.html | 6 +++--- .../@node-red/nodes/core/function/80-template.html | 2 +- .../node_modules/@node-red/nodes/core/network/05-tls.html | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/common/24-complete.html b/packages/node_modules/@node-red/nodes/core/common/24-complete.html index a6a7a2a45..b2d406bb5 100644 --- a/packages/node_modules/@node-red/nodes/core/common/24-complete.html +++ b/packages/node_modules/@node-red/nodes/core/common/24-complete.html @@ -1,6 +1,6 @@