@node-red/runtime 3.0.2 → 3.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -89,10 +89,16 @@ var api = module.exports = {
89
89
 
90
90
  if (!runtime.settings.disableEditor) {
91
91
  safeSettings.context = runtime.nodes.listContextStores();
92
- if (runtime.settings.editorTheme && runtime.settings.editorTheme.codeEditor) {
93
- safeSettings.codeEditor = runtime.settings.editorTheme.codeEditor || {};
94
- safeSettings.codeEditor.lib = safeSettings.codeEditor.lib || "monaco";
95
- safeSettings.codeEditor.options = safeSettings.codeEditor.options || {};
92
+ if (runtime.settings.editorTheme) {
93
+ if (runtime.settings.editorTheme.codeEditor) {
94
+ safeSettings.codeEditor = runtime.settings.editorTheme.codeEditor || {};
95
+ safeSettings.codeEditor.lib = safeSettings.codeEditor.lib || "monaco";
96
+ safeSettings.codeEditor.options = safeSettings.codeEditor.options || {};
97
+ }
98
+ if (runtime.settings.editorTheme.markdownEditor) {
99
+ safeSettings.markdownEditor = runtime.settings.editorTheme.markdownEditor || {};
100
+ safeSettings.markdownEditor.mermaid = safeSettings.markdownEditor.mermaid || { enabled: true };
101
+ }
96
102
  }
97
103
  safeSettings.libraries = runtime.library.getLibraries();
98
104
  if (util.isArray(runtime.settings.paletteCategories)) {
package/lib/flows/Flow.js CHANGED
@@ -818,6 +818,16 @@ function handlePreRoute(flow, sendEvent, reportError) {
818
818
  })
819
819
  }
820
820
 
821
+ function deliverMessageToDestination(sendEvent) {
822
+ if (sendEvent?.destination?.node) {
823
+ try {
824
+ sendEvent.destination.node.receive(sendEvent.msg);
825
+ } catch(err) {
826
+ Log.error(`Error delivering message to node:${sendEvent.destination.node._path} [${sendEvent.destination.node.type}]`)
827
+ Log.error(err.stack)
828
+ }
829
+ }
830
+ }
821
831
  function handlePreDeliver(flow,sendEvent, reportError) {
822
832
  // preDeliver - the local router has identified the node it is going to send to. At this point, the message has been cloned if needed.
823
833
  hooks.trigger("preDeliver",sendEvent,(err) => {
@@ -827,15 +837,10 @@ function handlePreDeliver(flow,sendEvent, reportError) {
827
837
  } else if (err !== false) {
828
838
  if (asyncMessageDelivery) {
829
839
  setImmediate(function() {
830
- if (sendEvent.destination.node) {
831
- sendEvent.destination.node.receive(sendEvent.msg);
832
- }
840
+ deliverMessageToDestination(sendEvent)
833
841
  })
834
842
  } else {
835
- if (sendEvent.destination.node) {
836
- sendEvent.destination.node.receive(sendEvent.msg);
837
-
838
- }
843
+ deliverMessageToDestination(sendEvent)
839
844
  }
840
845
  // postDeliver - the message has been dispatched to be delivered asynchronously (unless the sync delivery flag is set, in which case it would be continue as synchronous delivery)
841
846
  hooks.trigger("postDeliver", sendEvent, function(err) {
@@ -474,7 +474,7 @@ class Subflow extends Flow {
474
474
  */
475
475
  function createNodeInSubflow(subflowInstanceId, def) {
476
476
  let node = clone(def);
477
- let nid = redUtil.generateId();
477
+ let nid = `${subflowInstanceId}-${node.id}` //redUtil.generateId();
478
478
  // console.log("Create Node In subflow",node._alias, "--->",nid, "(",node.type,")")
479
479
  // node_map[node.id] = node;
480
480
  node._alias = node.id;
@@ -641,6 +641,7 @@ function getFlow(id) {
641
641
  if (node.type === 'link out') {
642
642
  delete node.wires;
643
643
  }
644
+ delete node.credentials;
644
645
  return node;
645
646
  })
646
647
  }
@@ -648,7 +649,10 @@ function getFlow(id) {
648
649
  if (flow.configs) {
649
650
  var configIds = Object.keys(flow.configs);
650
651
  result.configs = configIds.map(function(configId) {
651
- return clone(flow.configs[configId]);
652
+ const node = clone(flow.configs[configId]);
653
+ delete node.credentials;
654
+ return node
655
+
652
656
  })
653
657
  if (result.configs.length === 0) {
654
658
  delete result.configs;
@@ -660,12 +664,16 @@ function getFlow(id) {
660
664
  var subflow = clone(flow.subflows[subflowId]);
661
665
  var nodeIds = Object.keys(subflow.nodes);
662
666
  subflow.nodes = nodeIds.map(function(id) {
663
- return subflow.nodes[id];
667
+ const node = clone(subflow.nodes[id])
668
+ delete node.credentials
669
+ return node
664
670
  });
665
671
  if (subflow.configs) {
666
672
  var configIds = Object.keys(subflow.configs);
667
673
  subflow.configs = configIds.map(function(id) {
668
- return subflow.configs[id];
674
+ const node = clone(subflow.configs[id])
675
+ delete node.credentials
676
+ return node
669
677
  })
670
678
  }
671
679
  delete subflow.instances;
@@ -777,6 +785,16 @@ const flowAPI = {
777
785
  }
778
786
 
779
787
 
788
+ function getGlobalConfig() {
789
+ let gconf = null;
790
+ eachNode((n) => {
791
+ if (n.type === "global-config") {
792
+ gconf = n;
793
+ }
794
+ });
795
+ return gconf;
796
+ }
797
+
780
798
  module.exports = {
781
799
  init: init,
782
800
 
@@ -790,6 +808,9 @@ module.exports = {
790
808
  get:getNode,
791
809
  eachNode: eachNode,
792
810
 
811
+
812
+ getGlobalConfig: getGlobalConfig,
813
+
793
814
  /**
794
815
  * Gets the current flow configuration
795
816
  */
package/lib/flows/util.js CHANGED
@@ -18,7 +18,9 @@ var redUtil = require("@node-red/util").util;
18
18
  var Log = require("@node-red/util").log;
19
19
  var subflowInstanceRE = /^subflow:(.+)$/;
20
20
  var typeRegistry = require("@node-red/registry");
21
+ const credentials = require("../nodes/credentials");
21
22
 
23
+ let _runtime = null;
22
24
 
23
25
  var envVarExcludes = {};
24
26
 
@@ -265,15 +267,55 @@ function parseConfig(config) {
265
267
  return flow;
266
268
  }
267
269
 
270
+ function getGlobalEnv(name) {
271
+ const nodes = _runtime.nodes;
272
+ if (!nodes) {
273
+ return null;
274
+ }
275
+ const gconf = nodes.getGlobalConfig();
276
+ const env = gconf ? gconf.env : null;
277
+
278
+ if (env) {
279
+ const cred = (gconf ? credentials.get(gconf.id) : null) || {
280
+ map: {}
281
+ };
282
+ const map = cred.map;
283
+
284
+ for (let i = 0; i < env.length; i++) {
285
+ const item = env[i];
286
+ if (item.name === name) {
287
+ if (item.type === "cred") {
288
+ return {
289
+ name: name,
290
+ value: map[name],
291
+ type: "cred"
292
+ };
293
+ }
294
+ return item;
295
+ }
296
+ }
297
+ }
298
+ return null;
299
+ }
300
+
268
301
  module.exports = {
269
302
  init: function(runtime) {
303
+ _runtime = runtime;
270
304
  envVarExcludes = {};
271
305
  if (runtime.settings.hasOwnProperty('envVarExcludes') && Array.isArray(runtime.settings.envVarExcludes)) {
272
306
  runtime.settings.envVarExcludes.forEach(v => envVarExcludes[v] = true);
273
307
  }
274
308
  },
275
309
  getEnvVar: function(k) {
276
- return !envVarExcludes[k]?process.env[k]:undefined
310
+ if (!envVarExcludes[k]) {
311
+ const item = getGlobalEnv(k);
312
+ if (item) {
313
+ const val = redUtil.evaluateNodeProperty(item.value, item.type, null, null, null);
314
+ return val;
315
+ }
316
+ return process.env[k];
317
+ }
318
+ return undefined;
277
319
  },
278
320
  diffNodes: diffNodes,
279
321
  mapEnvVarProperties: mapEnvVarProperties,
package/lib/index.js CHANGED
@@ -161,6 +161,8 @@ function start() {
161
161
  for (i=0;i<nodeErrors.length;i+=1) {
162
162
  if (nodeErrors[i].err.code === "type_already_registered") {
163
163
  log.warn("["+nodeErrors[i].id+"] "+log._("server.type-already-registered",{type:nodeErrors[i].err.details.type,module: nodeErrors[i].err.details.moduleA}));
164
+ } else if (nodeErrors[i].err.code === "set_has_no_types") {
165
+ log.warn("["+nodeErrors[i].id+"] "+log._("server.set-has-no-types", nodeErrors[i].err.details));
164
166
  } else {
165
167
  log.warn("["+nodeErrors[i].id+"] "+nodeErrors[i].err);
166
168
  }
package/lib/nodes/Node.js CHANGED
@@ -373,6 +373,11 @@ Node.prototype.send = function(msg) {
373
373
  if (msg === null || typeof msg === "undefined") {
374
374
  return;
375
375
  } else if (!util.isArray(msg)) {
376
+ // A single message has been passed in
377
+ if (typeof msg !== 'object') {
378
+ this.error(Log._("nodes.flow.non-message-returned", { type: typeof msg }));
379
+ return
380
+ }
376
381
  if (this._wire) {
377
382
  // A single message and a single wire on output 0
378
383
  // TODO: pre-load flows.get calls - cannot do in constructor
@@ -425,27 +430,31 @@ Node.prototype.send = function(msg) {
425
430
  for (k = 0; k < msgs.length; k++) {
426
431
  var m = msgs[k];
427
432
  if (m !== null && m !== undefined) {
428
- if (!m._msgid) {
429
- hasMissingIds = true;
430
- }
431
- /* istanbul ignore else */
432
- if (!sentMessageId) {
433
- sentMessageId = m._msgid;
433
+ if (typeof m !== 'object') {
434
+ this.error(Log._("nodes.flow.non-message-returned", { type: typeof m }));
435
+ } else {
436
+ if (!m._msgid) {
437
+ hasMissingIds = true;
438
+ }
439
+ /* istanbul ignore else */
440
+ if (!sentMessageId) {
441
+ sentMessageId = m._msgid;
442
+ }
443
+ sendEvents.push({
444
+ msg: m,
445
+ source: {
446
+ id: this.id,
447
+ node: this,
448
+ port: i
449
+ },
450
+ destination: {
451
+ id: wires[j],
452
+ node: undefined
453
+ },
454
+ cloneMessage: msgSent
455
+ });
456
+ msgSent = true;
434
457
  }
435
- sendEvents.push({
436
- msg: m,
437
- source: {
438
- id: this.id,
439
- node: this,
440
- port: i
441
- },
442
- destination: {
443
- id: wires[j],
444
- node: undefined
445
- },
446
- cloneMessage: msgSent
447
- });
448
- msgSent = true;
449
458
  }
450
459
  }
451
460
  }
@@ -589,17 +589,28 @@ function deleteContext(id,flowId) {
589
589
  * If flowConfig is undefined, all flow/node contexts will be removed
590
590
  **/
591
591
  function clean(flowConfig) {
592
- flowConfig = flowConfig || { allNodes: {} };
592
+ flowConfig = flowConfig || { allNodes: {}, subflows: {} };
593
+ const knownNodes = new Set(Object.keys(flowConfig.allNodes))
594
+
595
+ // We need to alias all of the subflow instance contents
596
+ for (const subflow of Object.values(flowConfig.subflows || {})) {
597
+ subflow.instances.forEach(instance => {
598
+ for (const nodeId of Object.keys(subflow.nodes || {})) {
599
+ knownNodes.add(`${instance.id}-${nodeId}`)
600
+ }
601
+ for (const nodeId of Object.keys(subflow.configs || {})) {
602
+ knownNodes.add(`${instance.id}-${nodeId}`)
603
+ }
604
+ })
605
+ }
593
606
  var promises = [];
594
- for(var plugin in stores){
595
- if(stores.hasOwnProperty(plugin)){
596
- promises.push(stores[plugin].clean(Object.keys(flowConfig.allNodes)));
597
- }
607
+ for (const store of Object.values(stores)){
608
+ promises.push(store.clean(Array.from(knownNodes)));
598
609
  }
599
- for (var id in contexts) {
600
- if (contexts.hasOwnProperty(id) && id !== "global") {
610
+ for (const id of Object.keys(contexts)) {
611
+ if (id !== "global") {
601
612
  var idParts = id.split(":");
602
- if (!flowConfig.allNodes.hasOwnProperty(idParts[0])) {
613
+ if (!knownNodes.has(idParts[0])) {
603
614
  delete contexts[id];
604
615
  }
605
616
  }
@@ -383,6 +383,11 @@ var api = module.exports = {
383
383
  }
384
384
  }
385
385
  }
386
+ } else if (nodeType === "global-config") {
387
+ if (JSON.stringify(savedCredentials.map) !== JSON.stringify(newCreds.map)) {
388
+ savedCredentials.map = newCreds.map;
389
+ dirty = true;
390
+ }
386
391
  } else {
387
392
  var dashedType = nodeType.replace(/\s+/g, '-');
388
393
  var definition = credentialsDef[dashedType];
@@ -205,6 +205,7 @@ module.exports = {
205
205
  getNode: flows.get,
206
206
  eachNode: flows.eachNode,
207
207
  getContext: context.get,
208
+ getGlobalConfig: flows.getGlobalConfig,
208
209
 
209
210
  clearContext: context.clear,
210
211
 
@@ -18,7 +18,7 @@ var i18n = require("@node-red/util").i18n;
18
18
 
19
19
  module.exports = {
20
20
  "package.json": function(project) {
21
- var package = {
21
+ var packageDetails = {
22
22
  "name": project.name,
23
23
  "description": project.summary||i18n._("storage.localfilesystem.projects.summary"),
24
24
  "version": "0.0.1",
@@ -30,11 +30,11 @@ module.exports = {
30
30
  };
31
31
  if (project.files) {
32
32
  if (project.files.flow) {
33
- package['node-red'].settings.flowFile = project.files.flow;
34
- package['node-red'].settings.credentialsFile = project.files.credentials;
33
+ packageDetails['node-red'].settings.flowFile = project.files.flow;
34
+ packageDetails['node-red'].settings.credentialsFile = project.files.credentials;
35
35
  }
36
36
  }
37
- return JSON.stringify(package,"",4);
37
+ return JSON.stringify(packageDetails,"",4);
38
38
  },
39
39
  "README.md": function(project) {
40
40
  var content = project.name+"\n"+("=".repeat(project.name.length))+"\n\n";
@@ -71,6 +71,8 @@ function runGitCommand(args,cwd,env,emit) {
71
71
  err.code = "git_missing_user";
72
72
  } else if (/name consists only of disallowed characters/i.test(stderr)) {
73
73
  err.code = "git_missing_user";
74
+ } else if (/nothing (add )?to commit/i.test(stdout)) {
75
+ return stdout;
74
76
  }
75
77
  throw err;
76
78
  })
@@ -106,7 +108,7 @@ function runGitCommandWithSSHCommand(args,cwd,auth,emit) {
106
108
  commandEnv.GIT_SSH = path.join(__dirname,"node-red-ssh.sh");
107
109
  commandEnv.NODE_RED_KEY_FILE=auth.key_path;
108
110
  // GIT_SSH_COMMAND - added in git 2.3.0
109
- commandEnv.GIT_SSH_COMMAND = "ssh -i " + auth.key_path + " -F /dev/null";
111
+ commandEnv.GIT_SSH_COMMAND = "ssh -i \"" + auth.key_path + "\" -F /dev/null";
110
112
  // console.log('commandEnv:', commandEnv);
111
113
  return runGitCommand(args,cwd,commandEnv,emit).then( result => {
112
114
  rs.close();
@@ -419,7 +421,10 @@ module.exports = {
419
421
  });
420
422
  },
421
423
  initRepo: function(cwd) {
422
- return runGitCommand(["init"],cwd);
424
+ var args = ["init", "--initial-branch", "main"];
425
+ return runGitCommand(args, cwd).catch(function () {
426
+ return runGitCommand(["init"], cwd);
427
+ });
423
428
  },
424
429
  setUpstream: function(cwd,remoteBranch) {
425
430
  var args = ["branch","--set-upstream-to",remoteBranch];
File without changes
@@ -20,6 +20,7 @@
20
20
  "errors-help": "Run with -v for details",
21
21
  "missing-modules": "Missing node modules:",
22
22
  "node-version-mismatch": "Node module cannot be loaded on this version. Requires: __version__ ",
23
+ "set-has-no-types": "Set does not have any types. name: '__name__', module: '__module__', file: '__file__'",
23
24
  "type-already-registered": "'__type__' already registered by module __module__",
24
25
  "removing-modules": "Removing modules from config",
25
26
  "added-types": "Added node types:",
@@ -134,7 +135,8 @@
134
135
  "flow": {
135
136
  "unknown-type": "Unknown type: __type__",
136
137
  "missing-types": "missing types",
137
- "error-loop": "Message exceeded maximum number of catches"
138
+ "error-loop": "Message exceeded maximum number of catches",
139
+ "non-message-returned": "Node tried to send a message of type __type__"
138
140
  },
139
141
  "index": {
140
142
  "unrecognised-id": "Unrecognised id: __id__",
@@ -0,0 +1,193 @@
1
+ {
2
+ "runtime": {
3
+ "welcome": "Bienvenue sur Node-RED",
4
+ "version": "__component__ version: __version__",
5
+ "unsupported_version": "Version non prise en charge de __component__. Requiert : __requires__ Trouvé : __version__",
6
+ "paths": {
7
+ "settings": "Fichier de paramètres : __path__",
8
+ "httpStatic": "HTTP Statique : __path__"
9
+ }
10
+ },
11
+ "server": {
12
+ "loading": "Chargement des noeuds de la palette",
13
+ "palette-editor": {
14
+ "disabled": "Éditeur de la palette désactivé : paramètres utilisateur",
15
+ "npm-not-found": "Éditeur de la palette désactivé : commande npm introuvable",
16
+ "npm-too-old": "Éditeur de la palette désactivé : version npm trop ancienne. Nécessite npm >= 3.x"
17
+ },
18
+ "errors": "Échec de l'enregistrement de __count__ type de noeud",
19
+ "errors_plural": "Échec de l'enregistrement de __count__ types de noeud",
20
+ "errors-help": "Exécuter avec -v pour plus de détails",
21
+ "missing-modules": "Modules de noeud manquants :",
22
+ "node-version-mismatch": "Le module de noeud ne peut pas être chargé sur cette version. Nécessite : __version__ ",
23
+ "type-already-registered": "'__type__' déjà enregistré par le module __module__",
24
+ "removing-modules": "Suppression de modules de la configuration",
25
+ "added-types": "Types de noeuds ajoutés :",
26
+ "removed-types": "Types de noeuds supprimés :",
27
+ "install": {
28
+ "invalid": "Nom de module invalide",
29
+ "installing": "Installation du module : __nom__, version : __version__",
30
+ "installed": "Module installé : __nom__",
31
+ "install-failed": "L'installation a échoué",
32
+ "install-failed-long": "L'installation du module __name__ a échoué :",
33
+ "install-failed-not-found": "Module $t(server.install.install-failed-long) introuvable",
34
+ "install-failed-name": "$t(server.install.install-failed-long) nom de module invalide : __name__",
35
+ "install-failed-url": "URL invalide $t(server.install.install-failed-long) : __url__",
36
+ "post-install-error": "Erreur lors de l'exécution du hook 'postInstall' :",
37
+ "upgrading": "Mettre à jour le module : __name__ vers la version : __version__",
38
+ "upgraded": "Module mis à jour : __name__. Redémarrer Node-RED pour utiliser la nouvelle version",
39
+ "upgrade-failed-not-found": "Version $t(server.install.install-failed-long) introuvable",
40
+ "uninstalling": "Désinstallation du module : __name__",
41
+ "uninstall-failed": "La désinstallation a échoué",
42
+ "uninstall-failed-long": "La désinstallation du module __name__ a échoué :",
43
+ "uninstalled": "Module désinstallé : __name__",
44
+ "old-ext-mod-dir-warning": "\n\n---------------------------------------------------------------------\nRépertoire des modules externes Node-RED 1.3 détecté :\n __oldDir__\nCe répertoire n'est plus utilisé. Les modules externes seront\nréinstallés dans votre répertoire utilisateur Node-RED :\n __newDir__\nSupprimer l'ancien répertoire externalModules pour arrêter ce message.\n---------------------------------------------------------------------\n"
45
+ },
46
+ "deprecatedOption": "L'utilisation de l'option __old__ est DÉCONSEILLÉE. Utiliser __new__ à la place",
47
+ "unable-to-listen": "Impossible d'écouter sur __listenpath__",
48
+ "port-in-use": "Erreur : port utilisé",
49
+ "uncaught-exception": "Exception non reconnue :",
50
+ "admin-ui-disabled": "Interface d'administration désactivée",
51
+ "now-running": "Le serveur tourne maintenant sur __listenpath__",
52
+ "failed-to-start": "Échec lors du démarrage du serveur :",
53
+ "headless-mode": "Fonctionne en mode sans interface graphique (headless)",
54
+ "httpadminauth-deprecated": "L'utilisation de httpAdminAuth est DÉCONSEILLÉE. Utiliser adminAuth à la place",
55
+ "https": {
56
+ "refresh-interval": "Actualisation des paramètres https toutes les __interval__ heures",
57
+ "settings-refreshed": "Les paramètres https du serveur ont été actualisés",
58
+ "refresh-failed": "Échec de l'actualisation des paramètres https : __message__",
59
+ "nodejs-version": "httpsRefreshInterval nécessite Node.js 11 ou version ultérieure",
60
+ "function-required": "httpsRefreshInterval nécessite que la propriété https soit une fonction"
61
+ }
62
+ },
63
+ "api": {
64
+ "flows": {
65
+ "error-save": "Erreur lors de l'enregistrement des flux : __message__",
66
+ "error-reload": "Erreur lors du rechargement des flux : __message__"
67
+ },
68
+ "library": {
69
+ "error-load-entry": "Erreur lors du chargement de l'entrée de la bibliothèque '__path__' : __message__",
70
+ "error-save-entry": "Erreur lors de l'enregistrement de l'entrée de la bibliothèque '__path__' : __message__",
71
+ "error-load-flow": "Erreur lors du chargement du flux '__path__' : __message__",
72
+ "error-save-flow": "Erreur lors de l'enregistrement du flux '__path__' : __message__"
73
+ },
74
+ "nodes": {
75
+ "enabled": "Types de noeuds activés :",
76
+ "disabled": "Types de noeuds désactivés :",
77
+ "error-enable": "Échec de l'activation du noeud :"
78
+ }
79
+ },
80
+ "comms": {
81
+ "error": "Erreur de canal de communication: __message__",
82
+ "error-server": "Erreur de communication avec le serveur : __message__",
83
+ "error-send": "Erreur d'envoi de communication : __message__"
84
+ },
85
+ "settings": {
86
+ "user-not-available": "Impossible d'enregistrer les paramètres utilisateur : __message__",
87
+ "not-available": "Paramètres non disponibles",
88
+ "property-read-only": "La propriété '__prop__' est en lecture seule",
89
+ "readonly-mode": "Exécution en mode lecture seule. Les modifications ne seront pas enregistrées."
90
+ },
91
+ "library": {
92
+ "unknownLibrary": "Bibliothèque inconnue : __library__",
93
+ "unknownType": "Type de bibliothèque inconnu : __type__",
94
+ "readOnly": "La bibliothèque __library__ est en lecture seule",
95
+ "failedToInit": "Échec de l'initialisation de la bibliothèque __library__ : __error__",
96
+ "invalidProperty": "Propriété invalide __prop__ : '__value__'"
97
+ },
98
+ "nodes": {
99
+ "credentials": {
100
+ "error": "Erreur lors du chargement des identifiants : __message__",
101
+ "error-saving": "Erreur lors de l'enregistrement des identifiants : __message__",
102
+ "not-registered": "Le type d'identifiant '__type__' n'a pas été enregistré",
103
+ "system-key-warning": "\n\n---------------------------------------------------------------------\nVotre fichier contenant les identifiants de flux est chiffré à l'aide d'une clé générée par le système.\n\nSi la clé générée par le système est perdue pour une raison quelconque, votre fichier contenant\nles identifiants ne sera pas récupérable, vous devrez le supprimer et ressaisir vos identifiants.\n\nVous pouvez définir votre propre clé en utilisant l'option 'credentialSecret' dans\nvotre fichier de paramètres. Node-RED rechiffrera alors votre fichier contenant les identifiants\nà l'aide de la clé que vous avez choisie la prochaine fois que vous déploierez une modification.\n---------------------------------------------------------------------\n",
104
+ "unencrypted": "Utilisation d'identifiants non chiffrés",
105
+ "encryptedNotFound": "Identifiants chiffrés introuvables"
106
+ },
107
+ "flows": {
108
+ "safe-mode": "Les flux se sont arrêtés en mode sans échec. Déployer les pour commencer.",
109
+ "registered-missing": "Type manquant enregistré : __type__",
110
+ "error": "Erreur lors du chargement des flux : __message__",
111
+ "starting-modified-nodes": "Démarrage des noeuds modifiés",
112
+ "starting-modified-flows": "Démarrage des flux modifiés",
113
+ "starting-flows": "Démarrage des flux",
114
+ "started-modified-nodes": "Noeuds modifiés démarrés",
115
+ "started-modified-flows": "Flux modifiés démarrés",
116
+ "started-flows": "Flux démarrés",
117
+ "stopping-modified-nodes": "Arrêt des noeuds modifiés",
118
+ "stopping-modified-flows": "Arrêt des flux modifiés",
119
+ "stopping-flows": "Arrêt des flux",
120
+ "stopped-modified-nodes": "Noeuds modifiés arrêtés",
121
+ "stopped-modified-flows": "Flux modifiés arrêtés",
122
+ "stopped-flows": "Flux arrêtés",
123
+ "stopped": "Arrêté",
124
+ "stopping-error": "Erreur lors de l'arrêt du noeud : __message__",
125
+ "updated-flows": "Flux mis à jour",
126
+ "added-flow": "Ajout du flux : __label__",
127
+ "updated-flow": "Flux mis à jour : __label__",
128
+ "removed-flow": "Flux supprimé : __label__",
129
+ "missing-types": "En attente d'enregistrement des types manquants :",
130
+ "missing-type-provided": " - __type__ (fourni par le module npm __module__)",
131
+ "missing-type-install-1": "Pour installer l'un des modules manquants, exécuter :",
132
+ "missing-type-install-2": "dans le répertoire :"
133
+ },
134
+ "flow": {
135
+ "unknown-type": "Type inconnu : __type__",
136
+ "missing-types": "Types manquants",
137
+ "error-loop": "Le message a dépassé le nombre maximum de captures (catches)"
138
+ },
139
+ "index": {
140
+ "unrecognised-id": "Identifiant non reconnu : __id__",
141
+ "type-in-use": "Type en cours d'utilisation : __msg__",
142
+ "unrecognised-module": "Module non reconnu : __module__"
143
+ },
144
+ "registry": {
145
+ "localfilesystem": {
146
+ "module-not-found": "Impossible de trouver le module '__module__'"
147
+ }
148
+ }
149
+ },
150
+ "storage": {
151
+ "index": {
152
+ "forbidden-flow-name": "Nom du flux interdit"
153
+ },
154
+ "localfilesystem": {
155
+ "user-dir": "Répertoire utilisateur : __path__",
156
+ "flows-file": "Fichier des flux : __path__",
157
+ "create": "Création d'un nouveau fichier __type__",
158
+ "empty": "Le fichier __type__ existant est vide",
159
+ "invalid": "Le fichier __type__ existant n'est pas un JSON valide",
160
+ "restore": "Restauration de la sauvegarde du fichier __type__ : __path__",
161
+ "restore-fail": "La restauration de la sauvegarde du fichier __type__ a échoué : __message__",
162
+ "fsync-fail": "Échec du vidage du fichier __path__ sur le disque : __message__",
163
+ "warn_name": "Le nom du fichier de flux n'est pas défini. Génération du nom à l'aide du nom d'hôte.",
164
+ "projects": {
165
+ "changing-project": "Définition du projet actif : __project__",
166
+ "active-project": "Projet actif : __project__",
167
+ "projects-directory": "Répertoire des projets : __projectsDirectory__",
168
+ "project-not-found": "Projet introuvable : __project__",
169
+ "no-active-project": "Aucun projet actif : utilisation du fichier de flux par défaut",
170
+ "disabled": "Projets désactivés : editorTheme.projects.enabled=false",
171
+ "disabledNoFlag": "Projets désactivés : définir editorTheme.projects.enabled=true pour activer",
172
+ "git-not-found": "Projets désactivés : commande git introuvable",
173
+ "git-version-old": "Projets désactivés : git __version__ non pris en charge. Nécessite 2.x",
174
+ "summary": "Un projet Node-RED",
175
+ "readme": "### À propos\n\nCeci est le fichier README.md de votre projet. Il aide les utilisateurs à comprendre ce que fait votre\nprojet, comment l'utiliser et tout ce qu'il est utile de savoir."
176
+ }
177
+ }
178
+ },
179
+ "context": {
180
+ "log-store-init": "Stockage contextuel : '__name__' [__info__]",
181
+ "error-loading-module": "Erreur lors du chargement du stockage contextuel : __message__",
182
+ "error-loading-module2": "Erreur lors du chargement du stockage contextuel '__module__' : __message__",
183
+ "error-module-not-defined": "Option 'module' manquante dans le stockage contextuel '__storage__'",
184
+ "error-invalid-module-name": "Nom du stockage contextuel invalide : '__name__'",
185
+ "error-invalid-default-module": "Stockage contextuel par défaut inconnu : '__storage__'",
186
+ "unknown-store": "Stockage contextuel inconnu '__name__' spécifié. Utilisation du stockage par défaut.",
187
+ "localfilesystem": {
188
+ "invalid-json": "JSON non valide dans le fichier de contexte '__file__'",
189
+ "error-circular": "Le contexte __scope__ contient une référence circulaire qui ne peut pas être persistante",
190
+ "error-write": "Erreur d'écriture du contexte : __message__"
191
+ }
192
+ }
193
+ }
@@ -20,6 +20,7 @@
20
20
  "errors-help": "詳細は -v を指定して実行してください",
21
21
  "missing-modules": "不足しているノードモジュール:",
22
22
  "node-version-mismatch": "ノードモジュールはこのバージョンではロードできません。必要なバージョン: __version__ ",
23
+ "set-has-no-types": "セットに型がありません。 名前: '__name__', モジュール: '__module__', ファイル: '__file__'",
23
24
  "type-already-registered": "'__type__' はモジュール __module__ で登録済みです",
24
25
  "removing-modules": "設定からモジュールを削除します",
25
26
  "added-types": "追加したノード:",
@@ -134,7 +135,8 @@
134
135
  "flow": {
135
136
  "unknown-type": "不明なノード: __type__",
136
137
  "missing-types": "欠落したノード",
137
- "error-loop": "メッセージの例外補足回数が最大値を超えました"
138
+ "error-loop": "メッセージの例外補足回数が最大値を超えました",
139
+ "non-message-returned": "ノードが __type__ 型のメッセージの送信を試みました"
138
140
  },
139
141
  "index": {
140
142
  "unrecognised-id": "不明なID: __id__",
File without changes
@@ -0,0 +1,199 @@
1
+ {
2
+ "runtime": {
3
+ "welcome": "Bem vindo ao Node-RED",
4
+ "version": "__component__ versão: __version__",
5
+ "unsupported_version": "Versão não suportada de __component__. Requer: __requires__ Encontrado: __version__",
6
+ "paths": {
7
+ "settings": "Arquivo de configurações : __path__",
8
+ "httpStatic": "HTTP Estático : __path__"
9
+ }
10
+ },
11
+
12
+ "server": {
13
+ "loading": "Carregando paletá de nós",
14
+ "palette-editor": {
15
+ "disabled": "Editor de paletas desativado : configurações do usuário",
16
+ "npm-not-found": "Editor de paleta desativado : comando npm não encontrado",
17
+ "npm-too-old": "Editor de paleta desativado : versão npm muito antiga. Requer npm> = 3.x"
18
+ },
19
+ "errors": "Falha ao registrar __count__ tipo de nó",
20
+ "errors_plural": "Falha ao registrar __count__ tipos de nós",
21
+ "errors-help": "Execute com -v para obter detalhes",
22
+ "missing-modules": "Módulos de nó que estão faltando:",
23
+ "node-version-mismatch": "O módulo de nó não pode ser carregado nesta versão. Requer: __version__",
24
+ "type-already-registered": "'__type__' já registrado pelo módulo __module__",
25
+ "removing-modules": "Removendo os módulos da configuração",
26
+ "added-types": "Tipos de nós adicionados:",
27
+ "removed-types": "Tipos de nós removidos:",
28
+ "install": {
29
+ "invalid": "Nome de módulo inválido",
30
+ "installing": "Módulo de instalação: __name__, versão: __version__",
31
+ "installed": "Módulo instalado: __name__",
32
+ "install-failed": "Instalação falhou",
33
+ "install-failed-long": "Instalação do módulo __name__ falhou:",
34
+ "install-failed-not-found": "Módulo $t(server.install.install-failed-long) não encontrado",
35
+ "install-failed-name": "$t(server.install.install-failed-long) nome do módulo inválido: __name__",
36
+ "install-failed-url": "$t(server.install.install-failed-long) url inválido: __url__",
37
+ "post-install-error": "Erro ao executar o gancho 'postInstall':",
38
+ "upgrading": "Módulo de atualização: __name__ para a versão: __version__",
39
+ "upgraded": "Módulo atualizado: __name__. Reinicie o Node-RED para usar a nova versão",
40
+ "upgrade-failed-not-found": "$t(server.install.install-failed-long) versão não encontrada",
41
+ "uninstalling": "Desinstalando módulo: __name__",
42
+ "uninstall-failed": "Desinstalação falhou",
43
+ "uninstall-failed-long": "A desinstalação do módulo __name__ falhou:",
44
+ "uninstalled": "Módulo desinstalado: __name__",
45
+ "old-ext-mod-dir-warning": "\n\n---------------------------------------------------------------------\ndetectado diretório de módulos externos do Node-RED 1.3:\n __oldDir__\nEste diretório não é mais usado. Módulos externos serão\nreinstalados em seu diretório de usuário Node-RED:\n __newDir__\nExclua o diretório 'externalModules' antigo para interromper esta mensagem.\n---------------------------------------------------------------------\n"
46
+ },
47
+ "deprecatedOption": "O uso de __old__ está DESCONTINUADO. Use __new__ em seu lugar",
48
+ "unable-to-listen": "Incapaz de ouvir em __listenpath__",
49
+ "port-in-use": "Erro: porta em uso",
50
+ "uncaught-exception": "Exceção não capturada:",
51
+ "admin-ui-disabled": "Admin UI desativada",
52
+ "now-running": "servidor rodando agora em __listenpath__",
53
+ "failed-to-start": "Falhou ao iniciar o servidor:",
54
+ "headless-mode": "Executando no modo sem interface gráfica",
55
+ "httpadminauth-deprecated": "O uso de 'httpAdminAuth' está DESCONTINUADO. Use 'adminAuth' em seu lugar",
56
+ "https": {
57
+ "refresh-interval": "Atualizando as configurações de https a cada __interval__ hora(s)",
58
+ "settings-refreshed": "As configurações https do servidor foram atualizadas",
59
+ "refresh-failed": "Falha ao atualizar as configurações https: __message__",
60
+ "nodejs-version": "httpsRefreshInterval requer Node.js 11 ou posterior",
61
+ "function-required": "httpsRefreshInterval requer que a propriedade https seja uma função"
62
+ }
63
+ },
64
+
65
+ "api": {
66
+ "flows": {
67
+ "error-save": "Erro ao salvar fluxos: __message__",
68
+ "error-reload": "Erro ao recarregar fluxos: __message__"
69
+ },
70
+ "library": {
71
+ "error-load-entry": "Erro ao carregar a entrada da biblioteca '__path__': __message__",
72
+ "error-save-entry": "Erro ao salvar a entrada da biblioteca '__path__': __message__",
73
+ "error-load-flow": "Erro ao carregar o fluxo '__path__': __message__",
74
+ "error-save-flow": "Erro ao salvar o fluxo '__path__': __message__"
75
+ },
76
+ "nodes": {
77
+ "enabled": "Tipos de nós habilitados:",
78
+ "disabled": "Tipos de nós desabilitados:",
79
+ "error-enable": "Falha ao habilitar o nó:"
80
+ }
81
+ },
82
+ "comms": {
83
+ "error": "Erro do canal de comunicação: __message__",
84
+ "error-server": "Erro do servidor de comunicação: __message__",
85
+ "error-send": "Erro de envio de comunicação: __message__"
86
+ },
87
+ "settings": {
88
+ "user-not-available": "Não é possível salvar as configurações do usuário: __message__",
89
+ "not-available": "Configurações não disponíveis",
90
+ "property-read-only": "A propriedade '__prop__' é somente leitura",
91
+ "readonly-mode": "Execução em modo leitura somente. As alterações não serão salvas."
92
+ },
93
+ "library": {
94
+ "unknownLibrary": "Biblioteca desconhecida: __library__",
95
+ "unknownType": "Tipo de biblioteca desconhecido: __type__",
96
+ "readOnly": "A biblioteca __library__ é somente de leitura",
97
+ "failedToInit": "Falha ao inicializar a biblioteca __library__: __error__",
98
+ "invalidProperty": "Propriedade inválida __prop__: '__value__'"
99
+ },
100
+ "nodes": {
101
+ "credentials": {
102
+ "error": "Erro ao carregar credenciais: __message__",
103
+ "error-saving": "Erro ao salvar credenciais: __message__",
104
+ "not-registered": "O tipo de credencial '__type__' não está registrado",
105
+ "system-key-warning": "\n\n------------------------------------- --------------------------------\nSeu arquivo de credenciais de fluxo é criptografado usando uma chave gerada pelo sistema.\n\nSe a chave gerada pelo sistema foi perdida por qualquer motivo, seu arquivo de credenciais \nnão será recuperável; você terá que excluí-lo e inserir novamente \nsuas credenciais. \n\nVocê deve definir sua própria chave usando a opção 'credentialSecret' em \n seu arquivo de configurações. O Node-RED irá então criptografar novamente o arquivo de credenciais \n usando a chave escolhida na próxima vez que você implantar uma alteração. \n ------------------- -------------------------------------------------- \n ",
106
+ "unencrypted": "Usando credenciais não criptografadas",
107
+ "encryptedNotFound": "Credenciais criptografadas não encontradas"
108
+ },
109
+ "flows": {
110
+ "safe-mode": "Fluxos interrompidos no modo de segurança. Implementar para iniciar.",
111
+ "registered-missing": "Tipo ausente registrado: __type__",
112
+ "error": "Erro ao carregar fluxos: __message__",
113
+ "starting-modified-nodes": "Iniciando nós modificados",
114
+ "starting-modified-flows": "Iniciando fluxos modificados",
115
+ "starting-flows": "Iniciando fluxos",
116
+ "started-modified-nodes": "Nós modificados iniciados",
117
+ "started-modified-flows": "Fluxos modificados iniciados",
118
+ "started-flows": "Fluxos iniciados",
119
+ "stopping-modified-nodes": "Parando nós modificados",
120
+ "stopping-modified-flows": "Parando fluxos modificados",
121
+ "stopping-flows": "Parando fluxos",
122
+ "stopped-modified-nodes": "Nós modificados interrompidos",
123
+ "stopped-modified-flows": "Fluxos modificados interrompidos",
124
+ "stopped-flows": "Fluxos interrompidos",
125
+ "stopped": "Parado",
126
+ "stopping-error": "Erro ao parar o nó: __message__",
127
+ "updated-flows": "Fluxos atualizados",
128
+ "added-flow": "Adicionando fluxo: __label__",
129
+ "updated-flow": "Fluxo atualizado: __label__",
130
+ "removed-flow": "Fluxo removido: __label__",
131
+ "missing-types": "Esperando que os tipos ausentes sejam registrados:",
132
+ "missing-type-provided": "- __type__ (fornecido pelo módulo npm __module__)",
133
+ "missing-type-install-1": "Para instalar qualquer um desses módulos ausentes, execute:",
134
+ "missing-type-install-2": "no diretório:"
135
+ },
136
+ "flow": {
137
+ "unknown-type": "Tipo desconhecido: __type__",
138
+ "missing-types": "tipos ausentes",
139
+ "error-loop": "A mensagem excedeu o número máximo de capturas"
140
+
141
+ },
142
+ "index": {
143
+ "unrecognised-id": "Não reconhecido id: __id__",
144
+ "type-in-use": "Tipo em uso: __msg__",
145
+ "unrecognised-module": "Módulo não reconhecido: __module__"
146
+ },
147
+ "registry": {
148
+ "localfilesystem": {
149
+ "module-not-found": "Não é possível encontrar o módulo '__module__'"
150
+ }
151
+ }
152
+ },
153
+ "storage": {
154
+ "index": {
155
+ "forbidden-flow-name": "nome do fluxo proibido"
156
+ },
157
+ "localfilesystem": {
158
+ "user-dir": "Diretório do usuário: __path__",
159
+ "flows-file": "Arquivo de fluxos: __path__",
160
+ "create": "Criando novo arquivo __type__",
161
+ "empty": "O arquivo __type__ existente está vazio",
162
+ "invalid": "O arquivo __type__ existente não é json válido",
163
+ "restore": "Restaurando backup de arquivo __type__: __path__",
164
+ "restore-fail": "Falha ao restaurar o backup do arquivo __type__: __message__",
165
+ "fsync-fail": "A liberação do arquivo __path__ para o disco falhou: __message__",
166
+ "warn_name": "Nome do arquivo de fluxo não definido. Gerando nome usando o nome do servidor.",
167
+ "projects": {
168
+ "changing-project": "Configurando projeto ativo: __project__",
169
+ "active-project": "Projeto ativo: __projeto__",
170
+ "projects-directory": "Diretório de projetos: __projectsDirectory__",
171
+ "project-not-found": "Projeto não encontrado: __project__",
172
+ "no-active-project": "Nenhum projeto ativo: usando arquivo de fluxos padrão",
173
+ "disabled": "Projetos desativados: editorTheme.projects.enabled = false",
174
+ "disabledNoFlag": "Projetos desativados: defina editorTheme.projects.enabled = true para ativar",
175
+ "git-not-found": "Projetos desativados: comando git não encontrado",
176
+ "git-version-old": "Projetos desativados: git __version__ não é compatível. Requer 2.x",
177
+ "summary": "Um Projeto Node-RED",
178
+ "readme": "### Sobre\n\nEste é o arquivo README.md do seu projeto. O Arquivo ajuda usuários a entender o que seu \nprojeto faz, como usá-lo e qualquer outra coisa que eles precisem saber."
179
+ }
180
+ }
181
+ },
182
+
183
+ "context": {
184
+ "log-store-init": "Armazenamento de contexto: '__name__' [__info__]",
185
+ "error-loading-module": "Erro ao carregar armazenamento de contexto: __message__",
186
+ "error-loading-module2": "Erro ao carregar o armazenamento de contexto '__module__': __message__",
187
+ "error-module-not-defined": "Armazenamento de contexto '__storage__' opção de 'módulo' ausente",
188
+ "error-invalid-module-name": "Nome de armazenamento de contexto inválido: '__name__'",
189
+ "error-invalid-default-module": "Armazenamento de contexto padrão desconhecido: '__storage__'",
190
+ "unknown-store": "Armazenamento de contexto desconhecido '__name__' especificado. Usando armazenamento padrão.",
191
+
192
+ "localfilesystem": {
193
+ "invalid-json": "JSON inválido no arquivo de contexto '__file__'",
194
+ "error-circular": "O contexto __scope__ contém uma referência circular que não pode ser continuada",
195
+ "error-write": "Erro ao escrever o contexto: __message__"
196
+ }
197
+ }
198
+
199
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-red/runtime",
3
- "version": "3.0.2",
3
+ "version": "3.1.0-beta.2",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./lib/index.js",
6
6
  "repository": {
@@ -16,11 +16,11 @@
16
16
  }
17
17
  ],
18
18
  "dependencies": {
19
- "@node-red/registry": "3.0.2",
20
- "@node-red/util": "3.0.2",
21
- "async-mutex": "0.3.2",
19
+ "@node-red/registry": "3.1.0-beta.2",
20
+ "@node-red/util": "3.1.0-beta.2",
21
+ "async-mutex": "0.4.0",
22
22
  "clone": "2.1.2",
23
- "express": "4.18.1",
23
+ "express": "4.18.2",
24
24
  "fs-extra": "10.1.0",
25
25
  "json-stringify-safe": "5.0.1"
26
26
  }
package/restart.js DELETED
File without changes