From 6a88702152a7c4ea03b693ef87d0cb3b2451a08f Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:38:32 +0200 Subject: [PATCH] Fix dropped statuses when resolving missing types --- .../@node-red/editor-client/src/js/red.js | 3 ++- .../node_modules/@node-red/runtime/lib/api/comms.js | 11 +++++++++++ .../node_modules/@node-red/runtime/lib/nodes/index.js | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/red.js b/packages/node_modules/@node-red/editor-client/src/js/red.js index 99cb8375b..6138a5a35 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/red.js +++ b/packages/node_modules/@node-red/editor-client/src/js/red.js @@ -529,7 +529,8 @@ var RED = (function() { RED.comms.subscribe("status/#",function(topic,msg) { var parts = topic.split("/"); var node = RED.nodes.node(parts[1]); - if (node) { + // Nodes of type unknown do not have i18n + if (node && typeof node._ === "function") { if (msg.hasOwnProperty("text") && msg.text !== null && /^[@a-zA-Z]/.test(msg.text)) { msg.text = node._(msg.text.toString(),{defaultValue:msg.text.toString()}); } diff --git a/packages/node_modules/@node-red/runtime/lib/api/comms.js b/packages/node_modules/@node-red/runtime/lib/api/comms.js index c3cdf644f..41c6df014 100644 --- a/packages/node_modules/@node-red/runtime/lib/api/comms.js +++ b/packages/node_modules/@node-red/runtime/lib/api/comms.js @@ -87,6 +87,15 @@ function publish(topic, data, retain, session, excludeSession) { }) } +function republishStatus() { + for (const topic in retained) { + if (/^status(\/.*)?$/.test(topic)) { + connections.forEach((connection) => { + connection.send(topic, retained[topic]); + }); + } + } +} var api = module.exports = { init: function(_runtime) { @@ -101,6 +110,8 @@ var api = module.exports = { events.on("comms",handleCommsEvent); events.removeListener("event-log",handleEventLog); events.on("event-log",handleEventLog); + events.removeListener("comms:republish-status", republishStatus); + events.on("comms:republish-status", republishStatus); }, /** diff --git a/packages/node_modules/@node-red/runtime/lib/nodes/index.js b/packages/node_modules/@node-red/runtime/lib/nodes/index.js index 0acfec8c6..98ee3c353 100644 --- a/packages/node_modules/@node-red/runtime/lib/nodes/index.js +++ b/packages/node_modules/@node-red/runtime/lib/nodes/index.js @@ -177,6 +177,9 @@ function installModule(module,version,url) { } if (info.nodes.length) { events.emit("runtime-event",{id:"node/added",retain:false,payload:info.nodes}); + // If the installed module resolves missing types, nodes will be started before the editor + // is notified of added types. Therefore, statuses published before the type resolution will be lost. + events.emit("comms:republish-status"); } } return info;