From 6f34696687bd0ff129136ed0af863a58c0f9d391 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 9 Jun 2025 11:47:18 +0100 Subject: [PATCH 01/16] Initial prep for 4.1.0-beta.1 release --- CHANGELOG.md | 73 +++++++++++++++++++ package.json | 2 +- .../@node-red/editor-api/package.json | 6 +- .../@node-red/editor-client/package.json | 2 +- .../node_modules/@node-red/nodes/package.json | 2 +- .../@node-red/registry/package.json | 4 +- .../@node-red/runtime/package.json | 6 +- .../node_modules/@node-red/util/package.json | 2 +- packages/node_modules/node-red/package.json | 10 +-- 9 files changed, 90 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e77657c8..95df0d08a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,76 @@ +#### 4.1.0-beta.1: Beta Release + +Editor + + - Add update notification (#5117) @knolleary + - Add a node annotation if the info property is set (#4955) @knolleary + - Add node suggestion api to editor and apply to typeSearch (#5135) @knolleary + - Node filter support for typedInput's builtin node (#5154) @GogoVega + - Import `got` module only once when sending metrics (#5152) @GogoVega + - Trigger button action of the selected nodes with new Hotkey (#4924) @GogoVega + - Handle deleting of subflow context entries (#5071) @knolleary + - Add the `changed` badge to the config node (#5062) @GogoVega + - Default Palette Search: Sort by Downloads (#5108) @joepavitt + - Show deprecated message if module flagged (#5134) @knolleary + - Add link icon to node docs and warn for major update (#5143) @GogoVega + - Support for a module with nodes and plugins in the palette (#4945) @GogoVega + - Include module list in global-config node when importing/exporting flows (#4599) @knolleary + - Add `Install all` button to the module list feature (#5123) @GogoVega + - Fix node tab filtering (#5119) @knolleary + - Cleanup global Palette Manager variables (#4958) @GogoVega + - Add a new `update available` widget to statusBar (#4948) @knolleary + - Add a queue while installing or removing a module from the Palette Manager (#4937) @GogoVega + - Ignore state of disabled nodes/flows during deployment (#5054) @GogoVega + - Exclude internal properties from node definition (#5144) @GogoVega + - Refresh config node sidebar when changing lock state of a flow (#5072) @knolleary + - Add a border to better distinguish typedInput type/option dropdowns (#5078) @knolleary + - Fix undo of subflow color change not applying to instances (#5012) @GogoVega + - Properly handle scale factor in getLinksAtPoint for firefox (#5087) @knolleary + - Update markdown drop-target appearance (#5059) @knolleary + - Support for disabled flows in Sidebar Config (#5061) @GogoVega + - Support text drag & drop into markdown editor (#5056) @gorenje + - Truncate long messages from the Debug Sidebar (#4944) @GogoVega + - Handle link nodes with show/hide label action (#5106) @knolleary + - Update the Node-RED logo to use the hex variant (#5103) @joepavitt + - Add the vertical marker to the palette hand (#4954) @GogoVega + - Monaco Latest (0.52.0) (#4930) @Steve-Mcl + - Updates monaco to 0.52.0 for action widget sizing fix (#5110) @Steve-Mcl + - Bump Multer to 2.0.1 (#5151) @hardillb + - Upgrade multer to 2.0.0 (#5148) @hardillb + - Update dompurify (#5120) @knolleary + - Colourise the Node-RED logs (#5109) @hardillb + - Only apply colours for non-default log lines (#5129) @knolleary + - feat: import default export if plugin is a transpiled es module (#5137) @dschmidt + - Add an additional git_auth_failed condition (#5145) @sonnyp + - Fix Sass deprecation warnings (#4922) @bonanitech + - chore(editor)!: remove Internet Explorer polyfill (#5070) @Rotzbua + - Remove Internet Explorer CSS hacks (#5142) @bonanitech + +Runtime + + - fix: set label in themeSettings.deployButton despite type attribute (#5053) @matiseni51 + - fix(html): correct buggy html (#4768) @Rotzbua + - Update dev (#4836) @knolleary + - Update dependencies (#5107) @knolleary + - Bump i18next to 24.x and auto-migrate message catalog format (#5088) @knolleary + - chore(editor): update `DOMPurify` flag (#5073) @Rotzbua + - Add .editorconfig to .gitignore (#5060) @gorenje + +Nodes + + - Complete/Status: Fix complete node to not feedback immediately connected nodes (#5114) @dceejay + - Function: Add URL/URLSearchParams to Function sandbox (#5159) @knolleary + - Function: Add support for node: prefixed modules in function node (#5067) @knolleary + - Function: Add globalFunctionTimeout (#4985) @vasuvanka + - Exec: Make encoding handling consistent between stdout and err (#5158) @knolleary + - Split: Let split node send original msg to complete node (#5113) @dceejay + - Split: Rename Split The field (#5130) @dceejay + - MQTT: Ensure generated mqtt clientId uses only valid chars (#5156) @knolleary + - HTTP Request: Fix the capitisation for ALPN settings in http-request (#5105) @hardillb + - HTTP Request: (docs) Recommend HTTPS over HTTP (#5141) @ZJvandeWeg + - Catch: Add code to error object sent by Catch node (#5081) @knolleary + - Debug: Improve debug display of error objects (#5079) @knolleary + #### 4.0.9: Maintenance Release Editor diff --git a/package.json b/package.json index df423ad0f..41edfd069 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "description": "Low-code programming for event-driven applications", "homepage": "https://nodered.org", "license": "Apache-2.0", diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json index 4ed4e3f4a..a9f91fa3c 100644 --- a/packages/node_modules/@node-red/editor-api/package.json +++ b/packages/node_modules/@node-red/editor-api/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/editor-api", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,8 +16,8 @@ } ], "dependencies": { - "@node-red/util": "4.1.0-beta.0", - "@node-red/editor-client": "4.1.0-beta.0", + "@node-red/util": "4.1.0-beta.1", + "@node-red/editor-client": "4.1.0-beta.1", "bcryptjs": "3.0.2", "body-parser": "1.20.3", "clone": "2.1.2", diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json index c50b279a1..9cb219576 100644 --- a/packages/node_modules/@node-red/editor-client/package.json +++ b/packages/node_modules/@node-red/editor-client/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/editor-client", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json index c9a6f0166..fd5fef6b4 100644 --- a/packages/node_modules/@node-red/nodes/package.json +++ b/packages/node_modules/@node-red/nodes/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/nodes", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json index 1e886a159..0014d853a 100644 --- a/packages/node_modules/@node-red/registry/package.json +++ b/packages/node_modules/@node-red/registry/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/registry", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,7 +16,7 @@ } ], "dependencies": { - "@node-red/util": "4.1.0-beta.0", + "@node-red/util": "4.1.0-beta.1", "clone": "2.1.2", "fs-extra": "11.3.0", "semver": "7.7.1", diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json index 03ef360d2..c2a0a91ef 100644 --- a/packages/node_modules/@node-red/runtime/package.json +++ b/packages/node_modules/@node-red/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/runtime", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,8 +16,8 @@ } ], "dependencies": { - "@node-red/registry": "4.1.0-beta.0", - "@node-red/util": "4.1.0-beta.0", + "@node-red/registry": "4.1.0-beta.1", + "@node-red/util": "4.1.0-beta.1", "async-mutex": "0.5.0", "clone": "2.1.2", "cronosjs": "1.7.1", diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json index dffc817b0..316d0696f 100644 --- a/packages/node_modules/@node-red/util/package.json +++ b/packages/node_modules/@node-red/util/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/util", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json index f36273986..0806b69b9 100644 --- a/packages/node_modules/node-red/package.json +++ b/packages/node_modules/node-red/package.json @@ -1,6 +1,6 @@ { "name": "node-red", - "version": "4.1.0-beta.0", + "version": "4.1.0-beta.1", "description": "Low-code programming for event-driven applications", "homepage": "https://nodered.org", "license": "Apache-2.0", @@ -31,10 +31,10 @@ "flow" ], "dependencies": { - "@node-red/editor-api": "4.1.0-beta.0", - "@node-red/runtime": "4.1.0-beta.0", - "@node-red/util": "4.1.0-beta.0", - "@node-red/nodes": "4.1.0-beta.0", + "@node-red/editor-api": "4.1.0-beta.1", + "@node-red/runtime": "4.1.0-beta.1", + "@node-red/util": "4.1.0-beta.1", + "@node-red/nodes": "4.1.0-beta.1", "basic-auth": "2.0.1", "bcryptjs": "3.0.2", "cors": "2.8.5", From c32e8875ef1ad96061b3efbcdf27b562d6878b6d Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Mon, 9 Jun 2025 13:19:57 +0200 Subject: [PATCH 02/16] Add French translation for 4.1 --- .../editor-client/locales/fr/editor.json | 22 +++++++++++++++++++ .../@node-red/nodes/locales/fr/messages.json | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/locales/fr/editor.json b/packages/node_modules/@node-red/editor-client/locales/fr/editor.json index ddc464650..8d12615b7 100644 --- a/packages/node_modules/@node-red/editor-client/locales/fr/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/fr/editor.json @@ -111,6 +111,7 @@ "userSettings": "Paramètres de l'utilisateur", "nodes": "Noeuds", "displayStatus": "Afficher l'état du noeud", + "displayInfoIcon": "Afficher l'icône d'information sur le noeud", "displayConfig": "Noeuds de configuration", "import": "Importer", "importExample": "Importer un exemple de flux", @@ -264,6 +265,8 @@ "download": "Télécharger", "importUnrecognised": "Importation d'un type inconnu :", "importUnrecognised_plural": "Importation de plusieurs types inconnus :", + "importWithModuleInfo": "Modules requis manquants", + "importWithModuleInfoDesc": "Ces noeuds ne sont pas actuellement installés dans votre palette et sont requis pour le flux importé :", "importDuplicate": "Noeud en double importé :", "importDuplicate_plural": "Noeuds en double importés :", "nodesExported": "Noeuds exportés vers le presse-papiers", @@ -623,12 +626,15 @@ "yearsMonthsV": "il y a __y__ ans, __count__ mois", "yearsMonthsV_plural": "il y a __y__ ans, __count__ mois" }, + "manageModules": "Gérer les modules", "nodeCount": "__label__ noeud", "nodeCount_plural": "__label__ noeuds", "pluginCount": "__count__ plugin", "pluginCount_plural": "__count__ plugins", "moduleCount": "__count__ module disponible", "moduleCount_plural": "__count__ modules disponibles", + "updateCount": "__count__ mise à jour disponible", + "updateCount_plural": "__count__ mises à jour disponibles", "inuse": "En cours d'utilisation", "enableall": "Activer tout", "disableall": "Désactiver tout", @@ -638,9 +644,12 @@ "update": "Mettre à jour vers __version__", "updated": "Mis à jour", "install": "Installer", + "installAll": "Installer tout", "installed": "Installé", + "installing": "Installation du module en cours : __module__", "conflict": "Conflit", "conflictTip": "

Ce module ne peut pas être installé car il inclut un
type de noeud qui a déjà été installé

Conflits avec __module__

", + "majorVersion": "

Il s'agit d'une mise à jour majeure du noeud. Consulter la documentation pour plus de détails sur la mise à jour.

", "loading": "Chargement des catalogues...", "tab-nodes": "Noeuds", "tab-install": "Installer", @@ -648,9 +657,12 @@ "sortRelevance": "Pertinence", "sortAZ": "A-Z", "sortRecent": "Récent", + "successfulInstall": "Modules installés avec succès", "more": "+ __count__ en plus", "upload": "Charger le fichier .tgz du module", "refresh": "Actualiser la liste des modules", + "deprecated": "Obsolète", + "deprecatedTip": "Ce module est obsolète", "errors": { "catalogLoadFailed": "

Échec du chargement du catalogue de noeuds.

Vérifier la console du navigateur pour plus d'informations

", "installFailed": "

Échec lors de l'installation : __module__

__message__

Consulter le journal pour plus d'informations

", @@ -1262,6 +1274,16 @@ "header": "Variables d'environnement globales", "revert": "Rétablir" }, + "telemetry": { + "label": "Notifications de mise à jour", + "settingsTitle": "Activer les notifications de mise à jour", + "settingsDescription": "

Node-RED peut vous avertir de la disponibilité d'une nouvelle version. Vous êtes ainsi informé des dernières fonctionnalités et correctifs.

Cela nécessite d'envoyer des données anonymes à l'équipe Node-RED. Elles n'incluent aucun détail sur vos flux ou vos utilisateurs.

Pour plus d'informations sur les informations collectées et leur utilisation, veuillez consulter la documentation.

", + "settingsDescription2": "

Vous pouvez modifier ce paramètre à tout moment dans les paramètres de l'éditeur.

", + "enableLabel": "Oui, activer les notifications", + "disableLabel": "Non, ne pas activer les notifications", + "updateAvailable": "Mise(s) à jour disponible(s)", + "updateAvailableDesc": "Node-RED __version__ est désormais disponible" + }, "action-list": { "toggle-show-tips": "Basculer l'affichage des astuces", "show-about": "Afficher la description de Node-RED", diff --git a/packages/node_modules/@node-red/nodes/locales/fr/messages.json b/packages/node_modules/@node-red/nodes/locales/fr/messages.json index 238763e3b..e4c2d49ab 100644 --- a/packages/node_modules/@node-red/nodes/locales/fr/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/fr/messages.json @@ -406,6 +406,7 @@ "label": { "unknown": "inconnu" }, + "manageModules": "Gérer les modules", "tip": "

Ce noeud est un type inconnu de votre installation Node-RED.

Si vous déployez avec le noeud dans cet état, sa configuration sera préservée, mais le flux ne démarrera pas avant que le type manquant soit installé.

Consulter la barre latérale d'informations pour plus d'aide

" }, "mqtt": { @@ -1017,7 +1018,7 @@ "objectSend": "Envoie un message pour chaque paire clé/valeur", "strBuff": "Chaîne / Tampon", "array": "Tableau", - "splitThe": "Diviser le", + "splitThe": "Diviser la propriété", "splitUsing": "Diviser en utilisant", "splitLength": "Longueur fixe de", "stream": "Gérer comme un flux de messages", From 9c086a1e611fc4e44970aada373d695756c533ee Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 9 Jun 2025 17:01:59 +0100 Subject: [PATCH 03/16] Update tour for beta.1 --- .../src/tours/images/missing-modules.png | Bin 0 -> 47386 bytes .../src/tours/images/node-docs.png | Bin 0 -> 7524 bytes .../src/tours/images/update-notification.png | Bin 0 -> 24604 bytes .../editor-client/src/tours/welcome.js | 97 +++++++++++------- 4 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 packages/node_modules/@node-red/editor-client/src/tours/images/missing-modules.png create mode 100644 packages/node_modules/@node-red/editor-client/src/tours/images/node-docs.png create mode 100644 packages/node_modules/@node-red/editor-client/src/tours/images/update-notification.png diff --git a/packages/node_modules/@node-red/editor-client/src/tours/images/missing-modules.png b/packages/node_modules/@node-red/editor-client/src/tours/images/missing-modules.png new file mode 100644 index 0000000000000000000000000000000000000000..f96144395b9e8c9dea38bafccd07164521be4f4f GIT binary patch literal 47386 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 literal 0 HcmV?d00001 diff --git a/packages/node_modules/@node-red/editor-client/src/tours/images/update-notification.png b/packages/node_modules/@node-red/editor-client/src/tours/images/update-notification.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4b610e787e6e24af4f02870d95825780ee229f GIT binary patch literal 24604 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 new

` + "en-US": `

Stay up to date with notifications when there is a new Node-RED version available, or updates to the nodes you have installed

` } }, - // { - // title: { - // "en-US": "Node Updates", - // "ja": "ノードの更新", - // "fr": "Mises à jour des noeuds" - // }, - // // image: "images/", - // description: { - // "en-US": `

The core nodes have received lots of minor fixes, documentation updates and - // small enhancements. Check the full changelog in the Help sidebar for a full list.

- //
    - //
  • A fully RFC4180 compliant CSV mode
  • - //
  • Customisable headers on the WebSocket node
  • - //
  • Split node now can operate on any message property
  • - //
  • and lots more...
  • - //
`, - // "ja": `

コアノードには沢山の軽微な修正、ドキュメント更新、小さな機能拡張が入っています。全リストはヘルプサイドバーにある変更履歴を参照してください。

- //
    - //
  • RFC4180に完全に準拠したCSVモード
  • - //
  • WebSocketノードのカスタマイズ可能なヘッダ
  • - //
  • Splitノードは、メッセージプロパティで操作できるようになりました
  • - //
  • 他にも沢山あります...
  • - //
`, - // "fr": `

Les noeuds principaux ont reçu de nombreux correctifs mineurs ainsi que des améliorations. La documentation a été mise à jour. - // Consultez le journal des modifications dans la barre latérale d'aide pour une liste complète. Ci-dessous, les changements les plus importants :

- //
    - //
  • Un mode CSV entièrement conforme à la norme RFC4180
  • - //
  • En-têtes personnalisables pour le noeud WebSocket
  • - //
  • Le noeud Split peut désormais fonctionner sur n'importe quelle propriété de message
  • - //
  • Et bien plus encore...
  • - //
` - // } - // } + { + title: { + "en-US": "Flow documentation", + }, + image: 'images/node-docs.png', + description: { + "en-US": `

Quickly see which nodes have additional documentation with the new documentation icon.

Clicking on the icon opens up the Description tab of the node edit dialog.

` + } + }, + { + title: { + "en-US": "Palette Manager Improvements", + }, + description: { + "en-US": `

There are lots of improvements to the palette manager:

+
    +
  • Search results are sorted by downloads to help you find the most popular nodes
  • +
  • See which nodes have been deprecated by their author and are no longer recommended for use
  • +
  • Links to node documentation for the nodes you already have installed
  • +
` + } + }, + { + title: { + "en-US": "Installing missing modules", + }, + image: 'images/missing-modules.png', + description: { + "en-US": `

Flows exported from Node-RED 4.1 now include information on what additional modules need to be installed.

+

When importing a flow with this information, the editor will let you know what is missing and help to get them installed.

+ ` + } + }, + { + title: { + "en-US": "Node Updates", + "ja": "ノードの更新", + "fr": "Mises à jour des noeuds" + }, + // image: "images/", + description: { + "en-US": `

The core nodes have received lots of minor fixes, documentation updates and + small enhancements. Check the full changelog in the Help sidebar for a full list.

+
    +
  • Support for node: prefixed modules in the Function node
  • +
  • The ability to set a global timeout for Function nodes via the runtime settings
  • +
  • Better display of error objects in the Debug sidebar
  • +
  • and lots more...
  • +
`, + // "ja": `

コアノードには沢山の軽微な修正、ドキュメント更新、小さな機能拡張が入っています。全リストはヘルプサイドバーにある変更履歴を参照してください。

+ //
    + //
`, + // "fr": `

Les noeuds principaux ont reçu de nombreux correctifs mineurs ainsi que des améliorations. La documentation a été mise à jour. + // Consultez le journal des modifications dans la barre latérale d'aide pour une liste complète. Ci-dessous, les changements les plus importants :

+ //
    + //
` + } + } ] } From 0e0a1d5e7b604229e7896dce2b766c258a3e0dd3 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Mon, 9 Jun 2025 20:46:23 +0200 Subject: [PATCH 04/16] Add French translation for 4.1 Welcome tour --- .../editor-client/src/tours/welcome.js | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js index 15e4be7f7..627f542be 100644 --- a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js +++ b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js @@ -17,24 +17,31 @@ export default { { title: { "en-US": "Update notifications", + "fr": "Notifications de mise à jour" }, image: 'images/update-notification.png', description: { - "en-US": `

Stay up to date with notifications when there is a new Node-RED version available, or updates to the nodes you have installed

` + "en-US": `

Stay up to date with notifications when there is a new Node-RED version available, or updates to the nodes you have installed

`, + "fr": `

Désormais vous recevrez une notification lorsqu'une nouvelle version de Node-RED ou une nouvelle version relative à un des noeuds que vous avez installés est disponible

` } }, { title: { "en-US": "Flow documentation", + "fr": "Documentation des flux" }, image: 'images/node-docs.png', description: { - "en-US": `

Quickly see which nodes have additional documentation with the new documentation icon.

Clicking on the icon opens up the Description tab of the node edit dialog.

` + "en-US": `

Quickly see which nodes have additional documentation with the new documentation icon.

+

Clicking on the icon opens up the Description tab of the node edit dialog.

`, + "fr": `

Voyez rapidement quels noeuds ont une documentation supplémentaire avec la nouvelle icône de documentation.

+

Cliquer sur l'icône ouvre l'onglet Description de la boîte de dialogue d'édition du noeud.

` } }, { title: { "en-US": "Palette Manager Improvements", + "fr": "Améliorations du Gestionnaire de Palettes" }, description: { "en-US": `

There are lots of improvements to the palette manager:

@@ -42,17 +49,27 @@ export default {
  • Search results are sorted by downloads to help you find the most popular nodes
  • See which nodes have been deprecated by their author and are no longer recommended for use
  • Links to node documentation for the nodes you already have installed
  • + `, + "fr": `

    Le Gestionnaire de Palettes a bénéficié de nombreuses améliorations :

    +
      +
    • Les résultats de recherche sont triés par téléchargement pour vous aider à trouver les noeuds les plus populaires.
    • +
    • Indique les noeuds obsolètes par leur auteur et dont l'utilisation n'est plus recommandée.
    • +
    • Liens vers la documentation des noeuds déjà installés.
    ` } }, { title: { "en-US": "Installing missing modules", + "fr": "Installation des modules manquants" }, image: 'images/missing-modules.png', description: { "en-US": `

    Flows exported from Node-RED 4.1 now include information on what additional modules need to be installed.

    When importing a flow with this information, the editor will let you know what is missing and help to get them installed.

    + `, + "fr": `

    Les flux exportés depuis Node-RED 4.1 incluent désormais des informations sur les modules supplémentaires à installer.

    +

    Lors de l'importation d'un flux contenant ces informations, l'éditeur vous indiquera les modules manquants et vous aidera à les installer.

    ` } }, @@ -75,10 +92,14 @@ export default { // "ja": `

    コアノードには沢山の軽微な修正、ドキュメント更新、小さな機能拡張が入っています。全リストはヘルプサイドバーにある変更履歴を参照してください。

    //
      //
    `, - // "fr": `

    Les noeuds principaux ont reçu de nombreux correctifs mineurs ainsi que des améliorations. La documentation a été mise à jour. - // Consultez le journal des modifications dans la barre latérale d'aide pour une liste complète. Ci-dessous, les changements les plus importants :

    - //
      - //
    ` + "fr": `

    Les noeuds principaux ont bénéficié de nombreux correctifs mineurs, de mises à jour de documentation et d'améliorations mineures. + Consultez le journal complet des modifications dans la barre latérale d'aide pour une liste complète.

    +
      +
    • Prise en charge des modules préfixés node: dans le noeud Fonction.
    • +
    • Possibilité de définir un délai d'expiration global pour les noeuds Fonction via les paramètres d'exécution.
    • +
    • Meilleur affichage des objets d'erreur dans la barre latérale de débogage.
    • +
    • Et bien plus encore...
    • +
    ` } } ] From 05b15e4d1a96140aea9ef646d03a151a22b42b29 Mon Sep 17 00:00:00 2001 From: Ben Hardill Date: Tue, 10 Jun 2025 10:10:46 +0100 Subject: [PATCH 05/16] Include URL query params in HTTP Digest fixes #3616 --- .../node_modules/@node-red/nodes/core/network/21-httprequest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 194d06175..703382ea2 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 @@ -431,7 +431,7 @@ in your Node-RED user directory (${RED.settings.userDir}). normalisedHeaders[k.toLowerCase()] = response.headers[k] }) if (normalisedHeaders['www-authenticate']) { - let authHeader = buildDigestHeader(digestCreds.user,digestCreds.password, response.request.options.method, requestUrl.pathname, normalisedHeaders['www-authenticate']) + let authHeader = buildDigestHeader(digestCreds.user,digestCreds.password, response.request.options.method, requestUrl.pathname + requestUrl.search, normalisedHeaders['www-authenticate']) options.headers.Authorization = authHeader; } // response.request.options.merge(options) From 1ba0980a3392be964a2b51a757da5e9dfbef9f97 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 10 Jun 2025 10:17:17 +0100 Subject: [PATCH 06/16] Bump node-red-admin version --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 41edfd069..2a132cd9c 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ } ], "dependencies": { - "acorn": "8.14.1", + "acorn": "8.15.0", "acorn-walk": "8.3.4", "ajv": "8.17.1", "async-mutex": "0.5.0", @@ -65,7 +65,7 @@ "mqtt": "5.11.0", "multer": "2.0.1", "mustache": "4.2.0", - "node-red-admin": "^4.0.2", + "node-red-admin": "^4.1.0", "node-watch": "0.7.4", "nopt": "5.0.0", "oauth2orize": "1.12.0", From 7f1eede6f8cc650bde948886b60c14071b53a3ab Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 10 Jun 2025 10:41:21 +0100 Subject: [PATCH 07/16] Update dependencies --- packages/node_modules/@node-red/nodes/package.json | 2 +- packages/node_modules/node-red/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json index fd5fef6b4..c6b385979 100644 --- a/packages/node_modules/@node-red/nodes/package.json +++ b/packages/node_modules/@node-red/nodes/package.json @@ -15,7 +15,7 @@ } ], "dependencies": { - "acorn": "8.14.1", + "acorn": "8.15.0", "acorn-walk": "8.3.4", "ajv": "8.17.1", "body-parser": "1.20.3", diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json index 0806b69b9..d189fb5e3 100644 --- a/packages/node_modules/node-red/package.json +++ b/packages/node_modules/node-red/package.json @@ -40,7 +40,7 @@ "cors": "2.8.5", "express": "4.21.2", "fs-extra": "11.3.0", - "node-red-admin": "^4.0.2", + "node-red-admin": "^4.1.0", "nopt": "5.0.0", "semver": "7.7.1" }, From 3e6a44fa65c89652a385906a3c7fe093b43d9f8f Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 10 Jun 2025 16:13:59 +0100 Subject: [PATCH 08/16] Fix unit test failures due to timing issue around start/stop lifecyclce --- packages/node_modules/@node-red/runtime/lib/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/runtime/lib/index.js b/packages/node_modules/@node-red/runtime/lib/index.js index 3251ff2fa..1ac43032b 100644 --- a/packages/node_modules/@node-red/runtime/lib/index.js +++ b/packages/node_modules/@node-red/runtime/lib/index.js @@ -237,8 +237,12 @@ function start() { } } return redNodes.loadContextsPlugin().then(function () { - redNodes.loadFlows().then(() => { redNodes.startFlows() }).catch(function(err) {}); started = true; + redNodes.loadFlows().then(() => { + if (started) { + redNodes.startFlows() + } + }).catch(function(err) {}); }); }); }); From 4d38168f0359072201b15a12f2c5a596a192b10f Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 10 Jun 2025 16:25:01 +0100 Subject: [PATCH 09/16] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95df0d08a..6ab22448f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -68,6 +68,7 @@ Nodes - MQTT: Ensure generated mqtt clientId uses only valid chars (#5156) @knolleary - HTTP Request: Fix the capitisation for ALPN settings in http-request (#5105) @hardillb - HTTP Request: (docs) Recommend HTTPS over HTTP (#5141) @ZJvandeWeg + - HTTP Request: Include URL query params in HTTP Digest (#5166) @hardillb - Catch: Add code to error object sent by Catch node (#5081) @knolleary - Debug: Improve debug display of error objects (#5079) @knolleary From e5f2e8783abfd01d9fe79492c9ee3afe6057a391 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:51:11 +0200 Subject: [PATCH 10/16] Fix pending_version not setted after module update --- .../@node-red/editor-client/src/js/ui/palette-editor.js | 5 +++++ 1 file changed, 5 insertions(+) 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 dae41e8b4..5cc1faddc 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 @@ -769,6 +769,11 @@ RED.palette.editor = (function() { }); RED.events.on('registry:module-updated', function(ns) { + if (nodeEntries[ns.module]) { + // Set the node/plugin as updated + nodeEntries[ns.module].info.pending_version = ns.version; + } + refreshNodeModule(ns.module); refreshUpdateStatus(); }); From 410e5b8faf0a1ed51d7af08cdccb647100c3cbd6 Mon Sep 17 00:00:00 2001 From: Ben Hardill Date: Fri, 13 Jun 2025 13:33:42 +0100 Subject: [PATCH 11/16] Allow limited Strings for msg.rejectUnauthorized fixes #5171 If `msg.rejectUnauthorized` is a string allow "true", "false" (and upper case versions) otherwise show a warning and use default behaviour. Boolean values used as is, any other types also ignored. --- .../@node-red/nodes/core/network/21-httprequest.js | 13 ++++++++++++- .../@node-red/nodes/locales/en-US/messages.json | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) 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 194d06175..b3aa9cfd7 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 @@ -599,7 +599,18 @@ in your Node-RED user directory (${RED.settings.userDir}). } } else { if (msg.hasOwnProperty('rejectUnauthorized')) { - opts.https = { rejectUnauthorized: msg.rejectUnauthorized }; + if (typeof msg.rejectUnauthorized === 'boolean') { + opts.https = { rejectUnauthorized: msg.rejectUnauthorized } + } else if (typeof msg.rejectUnauthorized === 'string') { + if (msg.rejectUnauthorized.toLowerCase() === 'true' || msg.rejectUnauthorized.toLowerCase() === 'false') { + opts.https = { rejectUnauthorized: (msg.rejectUnauthorized.toLowerCase() === 'true') } + } else { + node.warn(RED._("httpin.errors.rejectunauthorized-invalid")) + } + } else { + node.warn(RED._("httpin.errors.rejectunauthorized-invalid")) + } + } } 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 7cde427f4..6d33e78aa 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 @@ -563,7 +563,8 @@ "timeout-isnan": "Timeout value is not a valid number, ignoring", "timeout-isnegative": "Timeout value is negative, ignoring", "invalid-payload": "Invalid payload", - "invalid-url": "Invalid url" + "invalid-url": "Invalid url", + "rejectunauthorized-invalid": "msg.rejectUnauthorized should be a boolean" }, "status": { "requesting": "requesting" From 922229221f4f13063659a7db033bcf67a2dbef46 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 15 Jun 2025 00:53:35 +0900 Subject: [PATCH 12/16] Fix image URLs in welcome tour for Node-RED v4.0 --- .../editor-client/src/tours/4.0/welcome.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/tours/4.0/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/4.0/welcome.js index 02a559136..a55763189 100644 --- a/packages/node_modules/@node-red/editor-client/src/tours/4.0/welcome.js +++ b/packages/node_modules/@node-red/editor-client/src/tours/4.0/welcome.js @@ -20,7 +20,7 @@ export default { "ja": "複数ユーザ同時利用モード", "fr": "Mode Multi-utilisateur" }, - image: 'images/nr4-multiplayer-location.png', + image: '4.0/images/nr4-multiplayer-location.png', description: { "en-US": `

    This release includes the first small steps towards making Node-RED easier to work with when you have multiple people editing flows at the same time.

    @@ -44,7 +44,7 @@ export default { "ja": "バックグラウンドのデプロイ処理の改善", "fr": "Meilleure gestion du déploiement en arrière-plan" }, - image: 'images/nr4-background-deploy.png', + image: '4.0/images/nr4-background-deploy.png', description: { "en-US": `

    If another user deploys changes whilst you are editing, we now use a more discrete notification that doesn't stop you continuing your work - especially if they are being very productive and deploying lots @@ -60,7 +60,7 @@ export default { "ja": "フローの差分表示の改善", "fr": "Amélioration des différences de flux" }, - image: 'images/nr4-diff-update.png', + image: '4.0/images/nr4-diff-update.png', description: { "en-US": `

    When viewing changes made to a flow, Node-RED now distinguishes between nodes that have had configuration changes and those that have only been moved.

    @@ -79,7 +79,7 @@ export default { "ja": "設定ノードのUXが向上", "fr": "Meilleure expérience utilisateur du noeud de configuration" }, - image: 'images/nr4-config-select.png', + image: '4.0/images/nr4-config-select.png', description: { "en-US": `

    The Configuration node selection UI has had a small update to have a dedicated 'add' button next to the select box.

    @@ -97,7 +97,7 @@ export default { "ja": "タイムスタンプの形式の項目", "fr": "Options de formatage de l'horodatage" }, - image: 'images/nr4-timestamp-formatting.png', + image: '4.0/images/nr4-timestamp-formatting.png', description: { "en-US": `

    Nodes that let you set a timestamp now have options on what format that timestamp should be in.

    We're keeping it simple to begin with by providing three options:

    @@ -128,7 +128,7 @@ export default { "ja": "フロー/グローバル、環境変数の型の自動補完", "fr": "Saisie automatique des types de flux/global et env" }, - image: 'images/nr4-auto-complete.png', + image: '4.0/images/nr4-auto-complete.png', description: { "en-US": `

    The flow/global context inputs and the env input now all include auto-complete suggestions based on the live state of your flows.

    @@ -146,7 +146,7 @@ export default { "ja": "サブフローでの設定ノードのカスタマイズ", "fr": "Personnalisation du noeud de configuration dans les sous-flux" }, - image: 'images/nr4-sf-config.png', + image: '4.0/images/nr4-sf-config.png', description: { "en-US": `

    Subflows can now be customised to allow each instance to use a different config node of a selected type.

    @@ -183,7 +183,7 @@ export default { "ja": "パレット管理にプラグインを表示", "fr": "Affichage des Plugins dans le gestionnaire de palettes" }, - image: 'images/nr4-plugins.png', + image: '4.0/images/nr4-plugins.png', description: { "en-US": `

    The palette manager now shows any plugin modules you have installed, such as node-red-debugger. Previously they would only be shown if the plugins include From 09a539a710170ebb6565707897310525dc2caf9d Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 15 Jun 2025 00:58:20 +0900 Subject: [PATCH 13/16] Make explanation of update notifications more specific --- .../@node-red/editor-client/locales/en-US/editor.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json index bade10e6f..1aa92c370 100644 --- a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json @@ -1290,7 +1290,7 @@ "label": "Update Notifications", "settingsTitle": "Enable Update Notifications", "settingsDescription": "

    Node-RED can notify you when there is a new version available. This ensures you keep up to date with the latest features and fixes.

    This requires sending anonymised data back to the Node-RED team. It does not include any details of your flows or users.

    For full information on what information is collected and how it is used, please see the documentation.

    ", - "settingsDescription2": "

    You can change this setting at any time in the editor settings.

    ", + "settingsDescription2": "

    You can change this setting at any time in the User Settings.

    ", "enableLabel": "Yes, enable notifications", "disableLabel": "No, do not enable notifications", "updateAvailable": "Update available", From 2886fc326cee8dd3cf30f5a65c59a9e8b74bec55 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 15 Jun 2025 01:01:55 +0900 Subject: [PATCH 14/16] Add Japanese translations for 4.1.0-beta.1 --- .../editor-client/locales/ja/editor.json | 26 ++++++++++++++++++- .../editor-client/src/tours/welcome.js | 26 ++++++++++++++++--- .../@node-red/nodes/locales/ja/messages.json | 1 + 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json index e6c02590b..b65730c52 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json @@ -111,6 +111,7 @@ "userSettings": "ユーザ設定", "nodes": "ノード", "displayStatus": "ノードのステータスを表示", + "displayInfoIcon": "ノード情報のアイコンを表示", "displayConfig": "設定ノード", "import": "読み込み", "importExample": "フロー例を読み込み", @@ -264,6 +265,8 @@ "download": "ダウンロード", "importUnrecognised": "認識できない型が読み込まれました:", "importUnrecognised_plural": "認識できない型が読み込まれました:", + "importWithModuleInfo": "必要なモジュールが不足", + "importWithModuleInfoDesc": "以下のノードは現在パレットにインストールされていませんが、読み込んだフローには必要なノードです:", "importDuplicate": "重複したノードを読み込みました:", "importDuplicate_plural": "重複したノードを読み込みました:", "nodesExported": "クリップボードへフローを書き出しました", @@ -623,12 +626,15 @@ "yearsMonthsV": "__y__ 年 __count__ ヵ月前", "yearsMonthsV_plural": "__y__ 年 __count__ ヵ月前" }, + "manageModules": "モジュールを管理", "nodeCount": "__label__ 個のノード", "nodeCount_plural": "__label__ 個のノード", "pluginCount": "__count__ 個のプラグイン", "pluginCount_plural": "__count__ 個のプラグイン", "moduleCount": "__count__ 個のモジュール", "moduleCount_plural": "__count__ 個のモジュール", + "updateCount": "__count__ 個の更新が存在", + "updateCount_plural": "__count__ 個の更新が存在", "inuse": "使用中", "enableall": "全て有効化", "disableall": "全て無効化", @@ -638,9 +644,12 @@ "update": "__version__ へ更新", "updated": "更新済", "install": "ノードを追加", + "installAll": "全てインストール", "installed": "追加しました", + "installing": "モジュールのインストールが進行中: __module__", "conflict": "競合", "conflictTip": "

    インストール済みのノードの種別と競合しているため
    ノードをインストールできません

    競合: __module__

    ", + "majorVersion": "

    これはノードのメジャーバージョンの更新です。更新内容の詳細については、ドキュメントを確認してください。

    ", "loading": "カタログを読み込み中", "tab-nodes": "現在のノード", "tab-install": "ノードを追加", @@ -648,9 +657,12 @@ "sortRelevance": "関連順", "sortAZ": "辞書順", "sortRecent": "日付順", + "successfulInstall": "モジュールのインストールが成功", "more": "+ さらに __count__ 個", "upload": "モジュールのtgzファイルをアップロード", "refresh": "モジュールリスト更新", + "deprecated": "非推奨", + "deprecatedTip": "本モジュールは非推奨です", "errors": { "catalogLoadFailed": "

    ノードのカタログの読み込みに失敗しました。

    詳細はブラウザのコンソールを確認してください。

    ", "installFailed": "

    追加処理が失敗しました: __module__

    __message__

    詳細はログを確認してください。

    ", @@ -1262,6 +1274,16 @@ "header": "グローバル環境変数", "revert": "破棄" }, + "telemetry": { + "label": "更新の通知", + "settingsTitle": "更新の通知を有効化", + "settingsDescription": "

    新バージョンのNode-REDが存在した時に、通知を受けることができます。この機能によって最新機能の提供や修正があることを把握できます。

    この通知を受け取るには、匿名化されたデータをNode-REDチームに送る必要があります。このデータには、フローやユーザの詳細は含まれません。

    収集される情報と利用方法の詳細については、ドキュメントを参照してください。

    ", + "settingsDescription2": "

    この設定はユーザ設定からいつでも変更できます。

    ", + "enableLabel": "はい、通知を有効にします", + "disableLabel": "いいえ、通知を有効にしません", + "updateAvailable": "更新を利用可能", + "updateAvailableDesc": "現在、Node-RED __version__ が利用可能" + }, "action-list": { "toggle-show-tips": "ヒント表示切替", "show-about": "Node-REDの説明を表示", @@ -1302,6 +1324,7 @@ "toggle-show-grid": "グリッド表示切替", "toggle-snap-grid": "ノードの配置補助切替", "toggle-status": "ステータス表示切替", + "toggle-node-info-icon": "ノード情報のアイコン表示切替", "show-selected-node-labels": "選択したノードのラベルを表示", "hide-selected-node-labels": "選択したノードのラベルを非表示", "scroll-view-up": "上スクロール", @@ -1414,6 +1437,7 @@ "show-global-env": "グローバル環境変数を表示", "lock-flow": "フローを固定", "unlock-flow": "フローの固定を解除", - "show-node-help": "ノードのヘルプを表示" + "show-node-help": "ノードのヘルプを表示", + "trigger-selected-nodes-action": "選択したノードのアクションを実行" } } diff --git a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js index 627f542be..f77c7c60a 100644 --- a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js +++ b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js @@ -17,23 +17,28 @@ export default { { title: { "en-US": "Update notifications", + "ja": "更新の通知", "fr": "Notifications de mise à jour" }, image: 'images/update-notification.png', description: { "en-US": `

    Stay up to date with notifications when there is a new Node-RED version available, or updates to the nodes you have installed

    `, + "en-US": `

    新バージョンのNode-REDの提供や、インストールしたノードの更新があった時に、通知を受け取ることができます。

    `, "fr": `

    Désormais vous recevrez une notification lorsqu'une nouvelle version de Node-RED ou une nouvelle version relative à un des noeuds que vous avez installés est disponible

    ` } }, { title: { "en-US": "Flow documentation", + "ja": "フローのドキュメント", "fr": "Documentation des flux" }, image: 'images/node-docs.png', description: { "en-US": `

    Quickly see which nodes have additional documentation with the new documentation icon.

    Clicking on the icon opens up the Description tab of the node edit dialog.

    `, + "ja": `

    ドキュメントアイコンによって、どのノードにドキュメントが追加されているかをすぐに確認できます。

    +

    アイコンをクリックすると、ノード編集ダイアログの説明タブが開きます。

    `, "fr": `

    Voyez rapidement quels noeuds ont une documentation supplémentaire avec la nouvelle icône de documentation.

    Cliquer sur l'icône ouvre l'onglet Description de la boîte de dialogue d'édition du noeud.

    ` } @@ -41,6 +46,7 @@ export default { { title: { "en-US": "Palette Manager Improvements", + "ja": "パレットの管理の改善", "fr": "Améliorations du Gestionnaire de Palettes" }, description: { @@ -50,6 +56,12 @@ export default {
  • See which nodes have been deprecated by their author and are no longer recommended for use
  • Links to node documentation for the nodes you already have installed
  • `, + "ja": `

    パレットの管理に多くの改善が加えられました:

    +
      +
    • 検索結果はダウンロード数順で並べられ、最も人気のあるノードを見つけやすくなりました。
    • +
    • 作者によって非推奨とされ、利用が推奨されなくなったノードかを確認できるようになりました。
    • +
    • 既にインストールされているノードに、ノードのドキュメントへのリンクが追加されました。
    • +
    `, "fr": `

    Le Gestionnaire de Palettes a bénéficié de nombreuses améliorations :

    • Les résultats de recherche sont triés par téléchargement pour vous aider à trouver les noeuds les plus populaires.
    • @@ -61,6 +73,7 @@ export default { { title: { "en-US": "Installing missing modules", + "ja": "不足モジュールのインストール", "fr": "Installation des modules manquants" }, image: 'images/missing-modules.png', @@ -68,6 +81,9 @@ export default { "en-US": `

      Flows exported from Node-RED 4.1 now include information on what additional modules need to be installed.

      When importing a flow with this information, the editor will let you know what is missing and help to get them installed.

      `, + "ja": `

      Node-RED 4.1から書き出したフローには、インストールが必要な追加モジュールの情報が含まれる様になりました。

      +

      この情報を含むフローを読み込むと、エディタは不足しているモジュールを通知し、インストールを支援します。

      + `, "fr": `

      Les flux exportés depuis Node-RED 4.1 incluent désormais des informations sur les modules supplémentaires à installer.

      Lors de l'importation d'un flux contenant ces informations, l'éditeur vous indiquera les modules manquants et vous aidera à les installer.

      ` @@ -89,9 +105,13 @@ export default {
    • Better display of error objects in the Debug sidebar
    • and lots more...
    `, - // "ja": `

    コアノードには沢山の軽微な修正、ドキュメント更新、小さな機能拡張が入っています。全リストはヘルプサイドバーにある変更履歴を参照してください。

    - //
      - //
    `, + "ja": `

    コアノードには沢山の軽微な修正、ドキュメント更新、小さな機能拡張が入っています。全リストはヘルプサイドバーにある変更履歴を参照してください。

    +
      +
    • Functionノードでnode:のプレフィックスモジュールをサポート
    • +
    • ランタイム設定からFunctionノードのグローバルタイムアウトを設定可能
    • +
    • デバッグサイドバーでのエラーオブジェクトの表示を改善
    • +
    • その他、多数...
    • +
    `, "fr": `

    Les noeuds principaux ont bénéficié de nombreux correctifs mineurs, de mises à jour de documentation et d'améliorations mineures. Consultez le journal complet des modifications dans la barre latérale d'aide pour une liste complète.

      diff --git a/packages/node_modules/@node-red/nodes/locales/ja/messages.json b/packages/node_modules/@node-red/nodes/locales/ja/messages.json index 1693f879e..118d6af2c 100644 --- a/packages/node_modules/@node-red/nodes/locales/ja/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/ja/messages.json @@ -406,6 +406,7 @@ "label": { "unknown": "unknown" }, + "manageModules": "モジュールを管理", "tip": "

      現在のNode-RED環境では、本ノードの型が不明です。

      現在の状態で本ノードをデプロイすると設定は保存されますが、不明なノードがインストールされるまでフローは実行されません。

      詳細はノードの「情報」を参照してください。

      " }, "mqtt": { From 51e0e18045f8704b3e569dfca2c55cc76084cca3 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 15 Jun 2025 01:29:39 +0900 Subject: [PATCH 15/16] Fix typo in welcome tour --- .../node_modules/@node-red/editor-client/src/tours/welcome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js index f77c7c60a..8041db469 100644 --- a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js +++ b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js @@ -23,7 +23,7 @@ export default { image: 'images/update-notification.png', description: { "en-US": `

      Stay up to date with notifications when there is a new Node-RED version available, or updates to the nodes you have installed

      `, - "en-US": `

      新バージョンのNode-REDの提供や、インストールしたノードの更新があった時に、通知を受け取ることができます。

      `, + "ja": `

      新バージョンのNode-REDの提供や、インストールしたノードの更新があった時に、通知を受け取ることができます。

      `, "fr": `

      Désormais vous recevrez une notification lorsqu'une nouvelle version de Node-RED ou une nouvelle version relative à un des noeuds que vous avez installés est disponible

      ` } }, From f24bf3549c9f83365eb02a61e2c520aa1f96a6b4 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 16 Jun 2025 11:32:43 +0100 Subject: [PATCH 16/16] Do not use css display when counting filtered palette nodes --- .../node_modules/@node-red/editor-client/src/js/ui/palette.js | 4 +++- 1 file changed, 3 insertions(+), 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 5c9c9e5d2..89337e7c9 100644 --- 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 @@ -80,7 +80,7 @@ RED.palette = (function() { getNodeCount: function (visibleOnly) { const nodes = catDiv.find(".red-ui-palette-node") if (visibleOnly) { - return nodes.filter(function() { return $(this).css('display') !== 'none'}).length + return nodes.filter(function() { return $(this).attr("data-filter") !== "true"}).length } else { return nodes.length } @@ -572,8 +572,10 @@ RED.palette = (function() { var currentLabel = $(el).attr("data-palette-label"); var type = $(el).attr("data-palette-type"); if (val === "" || re.test(type) || re.test(currentLabel)) { + $(el).attr("data-filter", null) $(this).show(); } else { + $(el).attr("data-filter", "true") $(this).hide(); } });