diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js index 53ebe5c4b..c70757dfa 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js @@ -46,10 +46,20 @@ RED.contextMenu = (function () { hasEnabledNode = true; } } - if (n.l === undefined || n.l) { - hasLabeledNode = true; + if (n.l === undefined) { + // Check if the node sets showLabel in the defaults + // as that determines the default behaviour for the node + if (n._def.showLabel !== false) { + hasLabeledNode = true; + } else { + hasUnlabeledNode = true; + } } else { - hasUnlabeledNode = true; + if (n.l) { + hasLabeledNode = true; + } else { + hasUnlabeledNode = true; + } } } } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js index 1ac86320b..921c3a1eb 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js @@ -284,37 +284,80 @@ RED.palette.editor = (function() { function _refreshNodeModule(module) { if (!nodeEntries.hasOwnProperty(module)) { - nodeEntries[module] = {info:RED.nodes.registry.getModule(module)}; - var index = [module]; - for (var s in nodeEntries[module].info.sets) { - if (nodeEntries[module].info.sets.hasOwnProperty(s)) { - index.push(s); - index = index.concat(nodeEntries[module].info.sets[s].types) + const nodeInfo = RED.nodes.registry.getModule(module); + let index = [module]; + + nodeEntries[module] = { + info: { + name: nodeInfo.name, + version: nodeInfo.version, + local: nodeInfo.local, + nodeSet: nodeInfo.sets, + }, + }; + + if (nodeInfo.pending_version) { + nodeEntries[module].info.pending_version = nodeInfo.pending_version; + } + + for (const set in nodeInfo.sets) { + if (nodeInfo.sets.hasOwnProperty(set)) { + index.push(set); + index = index.concat(nodeInfo.sets[set].types); } } + nodeEntries[module].index = index.join(",").toLowerCase(); nodeList.editableList('addItem', nodeEntries[module]); } else { - var moduleInfo = nodeEntries[module].info; - var nodeEntry = nodeEntries[module].elements; - if (nodeEntry) { - if (moduleInfo.plugin) { - nodeEntry.enableButton.hide(); - nodeEntry.removeButton.show(); + if (nodeEntries[module].info.pluginSet && !nodeEntries[module].info.nodeSet) { + // Since plugins are loaded before nodes, check if the module has nodes too + const nodeInfo = RED.nodes.registry.getModule(module); + + if (nodeInfo) { + let index = [nodeEntries[module].index]; + + for (const set in nodeInfo.sets) { + if (nodeInfo.sets.hasOwnProperty(set)) { + index.push(set); + index = index.concat(nodeInfo.sets[set].types) + } + } + + nodeEntries[module].info.nodeSet = nodeInfo.sets; + nodeEntries[module].index = index.join(",").toLowerCase(); + } + } + const moduleInfo = nodeEntries[module].info; + const nodeEntry = nodeEntries[module].elements; + if (nodeEntry) { + const setCount = []; + + if (moduleInfo.pluginSet) { let pluginCount = 0; - for (let setName in moduleInfo.sets) { - if (moduleInfo.sets.hasOwnProperty(setName)) { - let set = moduleInfo.sets[setName]; - if (set.plugins) { + for (const setName in moduleInfo.pluginSet) { + if (moduleInfo.pluginSet.hasOwnProperty(setName)) { + let set = moduleInfo.pluginSet[setName]; + if (set.plugins && set.plugins.length) { pluginCount += set.plugins.length; + } else if (set.plugins && !!RED.plugins.getPlugin(setName)) { + // `registerPlugin` in runtime not called but called in editor, add it + pluginCount++; } } } - - nodeEntry.setCount.text(RED._('palette.editor.pluginCount',{count:pluginCount,label:pluginCount})); - } else { + setCount.push(RED._('palette.editor.pluginCount', { count: pluginCount })); + + if (!moduleInfo.nodeSet) { + // Module only have plugins + nodeEntry.enableButton.hide(); + nodeEntry.removeButton.show(); + } + } + + if (moduleInfo.nodeSet) { var activeTypeCount = 0; var typeCount = 0; var errorCount = 0; @@ -322,10 +365,10 @@ RED.palette.editor = (function() { nodeEntries[module].totalUseCount = 0; nodeEntries[module].setUseCount = {}; - for (var setName in moduleInfo.sets) { - if (moduleInfo.sets.hasOwnProperty(setName)) { - var inUseCount = 0; - const set = moduleInfo.sets[setName]; + for (const setName in moduleInfo.nodeSet) { + if (moduleInfo.nodeSet.hasOwnProperty(setName)) { + let inUseCount = 0; + const set = moduleInfo.nodeSet[setName]; const setElements = nodeEntry.sets[setName] if (set.err) { @@ -342,8 +385,8 @@ RED.palette.editor = (function() { activeTypeCount += set.types.length; } typeCount += set.types.length; - for (var i=0;i 0) { nodeEntry.enableButton.text(RED._('palette.editor.inuse')); @@ -399,6 +442,7 @@ RED.palette.editor = (function() { nodeEntry.container.toggleClass("disabled",(activeTypeCount === 0)); } } + nodeEntry.setCount.text(setCount.join(" & ") || RED._("sidebar.info.empty")); } if (moduleInfo.pending_version) { nodeEntry.versionSpan.html(moduleInfo.version+' '+moduleInfo.pending_version).appendTo(nodeEntry.metaRow) @@ -789,19 +833,36 @@ RED.palette.editor = (function() { }) RED.events.on("registry:plugin-module-added", function(module) { - if (!nodeEntries.hasOwnProperty(module)) { - nodeEntries[module] = {info:RED.plugins.getModule(module)}; - var index = [module]; - for (var s in nodeEntries[module].info.sets) { - if (nodeEntries[module].info.sets.hasOwnProperty(s)) { - index.push(s); - index = index.concat(nodeEntries[module].info.sets[s].types) + const pluginInfo = RED.plugins.getModule(module); + let index = [module]; + + nodeEntries[module] = { + info: { + name: pluginInfo.name, + version: pluginInfo.version, + local: pluginInfo.local, + pluginSet: pluginInfo.sets, + } + }; + + if (pluginInfo.pending_version) { + nodeEntries[module].info.pending_version = pluginInfo.pending_version; + } + + for (const set in pluginInfo.sets) { + if (pluginInfo.sets.hasOwnProperty(set)) { + index.push(set); + // TODO: not sure plugin has `types` property + index = index.concat(pluginInfo.sets[set].types) } } + nodeEntries[module].index = index.join(",").toLowerCase(); nodeList.editableList('addItem', nodeEntries[module]); } else { + // Since plugins are loaded before nodes, + // `nodeEntries[module]` should be undefined _refreshNodeModule(module); } @@ -984,12 +1045,28 @@ RED.palette.editor = (function() { } }) const populateSetList = function () { - var setList = Object.keys(entry.sets) - setList.sort(function(A,B) { + const setList = [...Object.keys(entry.nodeSet || {}), ...Object.keys(entry.pluginSet || {})]; + setList.sort(function (A, B) { return A.toLowerCase().localeCompare(B.toLowerCase()); }); - setList.forEach(function(setName) { - var set = entry.sets[setName]; + setList.forEach(function (setName) { + const set = (entry.nodeSet && setName in entry.nodeSet) ? entry.nodeSet[setName] : entry.pluginSet[setName]; + + if (set.plugins && !set.plugins.length) { + // `registerPlugin` in the runtime not called + if (!!RED.plugins.getPlugin(setName)) { + // Add plugin if registered in editor but not in runtime + // Can happen if plugin doesn't have .js file + set.plugins.push({ id: setName }); + } else { + // `registerPlugin` in the editor not called - do not add this empty set + return; + } + } else if (set.types && !set.types.length) { + // `registerPlugin` in the runtime not called - do not add this empty set + return; + } + var setRow = $('
',{class:"red-ui-palette-module-set"}).appendTo(contentRow); var buttonGroup = $('
',{class:"red-ui-palette-module-set-button-group"}).appendTo(setRow); var typeSwatches = {}; @@ -1466,7 +1543,7 @@ RED.palette.editor = (function() { } } else { // dedicated list management for plugins - if (entry.plugin) { + if (entry.pluginSet) { let e = nodeEntries[entry.name]; if (e) { @@ -1479,9 +1556,9 @@ RED.palette.editor = (function() { // cleans the editor accordingly of its left-overs. let found_onremove = true; - let keys = Object.keys(entry.sets); + let keys = Object.keys(entry.pluginSet); keys.forEach((key) => { - let set = entry.sets[key]; + let set = entry.pluginSet[key]; for (let i=0; i - +
diff --git a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js index 90c4134a4..194d06175 100644 --- a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js +++ b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js @@ -586,6 +586,17 @@ in your Node-RED user directory (${RED.settings.userDir}). opts.https.certificate = opts.https.cert; delete opts.https.cert; } + // The got library uses a different case for some https properties compared to the + // standard node tls options object. + if (opts.https.ALPNProtocols) { + opts.https.alpnProtocols = opts.https.ALPNProtocols + delete opts.https.ALPNProtocols + } + // The got library doesn't support servername at this time + // https://github.com/sindresorhus/got/issues/2320 + if (opts.https.servername) { + delete opts.https.servername + } } else { if (msg.hasOwnProperty('rejectUnauthorized')) { opts.https = { rejectUnauthorized: msg.rejectUnauthorized }; diff --git a/packages/node_modules/@node-red/nodes/core/sequence/17-split.html b/packages/node_modules/@node-red/nodes/core/sequence/17-split.html index b754700cd..975dd593e 100644 --- a/packages/node_modules/@node-red/nodes/core/sequence/17-split.html +++ b/packages/node_modules/@node-red/nodes/core/sequence/17-split.html @@ -21,8 +21,8 @@
- - + +
diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index d26f0f56b..fdb85f021 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -1017,7 +1017,7 @@ "objectSend": "Send a message for each key/value pair", "strBuff": "String / Buffer", "array": "Array", - "splitThe": "Split the", + "splitThe": "Split property", "splitUsing": "Split using", "splitLength": "Fixed length of", "stream": "Handle as a stream of messages", diff --git a/packages/node_modules/@node-red/registry/lib/loader.js b/packages/node_modules/@node-red/registry/lib/loader.js index 27783be7f..eb27d9411 100644 --- a/packages/node_modules/@node-red/registry/lib/loader.js +++ b/packages/node_modules/@node-red/registry/lib/loader.js @@ -406,6 +406,7 @@ async function loadPlugin(plugin) { } try { var r = require(plugin.file); + r = r.__esModule ? r.default : r if (typeof r === "function") { var red = registryUtil.createNodeApi(plugin); diff --git a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/git/index.js b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/git/index.js index 96dab3417..983b4ca52 100644 --- a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/git/index.js +++ b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/git/index.js @@ -51,6 +51,8 @@ function runGitCommand(args,cwd,env,emit) { err.code = "git_auth_failed"; } else if(/Authentication failed/i.test(stderr)) { err.code = "git_auth_failed"; + } else if (/The requested URL returned error: 403/i.test(stderr)) { + err.code = "git_auth_failed"; } else if (/commit your changes or stash/i.test(stderr)) { err.code = "git_local_overwrite"; } else if (/CONFLICT/.test(err.stdout)) {