mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge branch 'master' into dev
This commit is contained in:
@@ -100,9 +100,13 @@ function buildDiagnosticReport(scope, callback) {
|
||||
version: os.version(),
|
||||
},
|
||||
runtime: {
|
||||
isStarted: runtime.isStarted(),
|
||||
modules: modules,
|
||||
version: runtime.settings.version,
|
||||
isStarted: runtime.isStarted(),
|
||||
flows: {
|
||||
state: runtime.flows && runtime.flows.state(),
|
||||
started: runtime.flows && runtime.flows.started,
|
||||
},
|
||||
modules: modules,
|
||||
settings: {
|
||||
available: runtime.settings.available(),
|
||||
apiMaxLength: runtime.settings.apiMaxLength || "UNSET",
|
||||
@@ -114,6 +118,11 @@ function buildDiagnosticReport(scope, callback) {
|
||||
flowFile: runtime.settings.flowFile || "UNSET",
|
||||
mqttReconnectTime: runtime.settings.mqttReconnectTime || "UNSET",
|
||||
serialReconnectTime: runtime.settings.serialReconnectTime || "UNSET",
|
||||
socketReconnectTime: runtime.settings.socketReconnectTime || "UNSET",
|
||||
socketTimeout: runtime.settings.socketTimeout || "UNSET",
|
||||
tcpMsgQueueSize: runtime.settings.tcpMsgQueueSize || "UNSET",
|
||||
inboundWebSocketTimeout: runtime.settings.inboundWebSocketTimeout || "UNSET",
|
||||
runtimeState: runtime.settings.runtimeState || "UNSET",
|
||||
|
||||
adminAuth: runtime.settings.adminAuth ? "SET" : "UNSET",
|
||||
|
||||
@@ -131,6 +140,7 @@ function buildDiagnosticReport(scope, callback) {
|
||||
uiHost: runtime.settings.uiHost ? "SET" : "UNSET",
|
||||
uiPort: runtime.settings.uiPort ? "SET" : "UNSET",
|
||||
userDir: runtime.settings.userDir ? "SET" : "UNSET",
|
||||
nodesDir: runtime.settings.nodesDir && runtime.settings.nodesDir.length ? "SET" : "UNSET",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -641,6 +641,7 @@ function getFlow(id) {
|
||||
if (node.type === 'link out') {
|
||||
delete node.wires;
|
||||
}
|
||||
delete node.credentials;
|
||||
return node;
|
||||
})
|
||||
}
|
||||
@@ -648,7 +649,10 @@ function getFlow(id) {
|
||||
if (flow.configs) {
|
||||
var configIds = Object.keys(flow.configs);
|
||||
result.configs = configIds.map(function(configId) {
|
||||
return clone(flow.configs[configId]);
|
||||
const node = clone(flow.configs[configId]);
|
||||
delete node.credentials;
|
||||
return node
|
||||
|
||||
})
|
||||
if (result.configs.length === 0) {
|
||||
delete result.configs;
|
||||
@@ -660,12 +664,16 @@ function getFlow(id) {
|
||||
var subflow = clone(flow.subflows[subflowId]);
|
||||
var nodeIds = Object.keys(subflow.nodes);
|
||||
subflow.nodes = nodeIds.map(function(id) {
|
||||
return subflow.nodes[id];
|
||||
const node = clone(subflow.nodes[id])
|
||||
delete node.credentials
|
||||
return node
|
||||
});
|
||||
if (subflow.configs) {
|
||||
var configIds = Object.keys(subflow.configs);
|
||||
subflow.configs = configIds.map(function(id) {
|
||||
return subflow.configs[id];
|
||||
const node = clone(subflow.configs[id])
|
||||
delete node.credentials
|
||||
return node
|
||||
})
|
||||
}
|
||||
delete subflow.instances;
|
||||
|
@@ -136,10 +136,12 @@ function createNode(flow,config) {
|
||||
subflowInstanceConfig,
|
||||
instanceConfig
|
||||
);
|
||||
// Register this subflow as an instance node of the parent flow.
|
||||
// This allows nodes inside the subflow to get ahold of each other
|
||||
// such as a node accessing its config node
|
||||
flow.subflowInstanceNodes[config.id] = subflow
|
||||
subflow.start();
|
||||
return subflow.node;
|
||||
|
||||
Log.error(Log._("nodes.flow.unknown-type", {type:type}));
|
||||
}
|
||||
} catch(err) {
|
||||
Log.error(err);
|
||||
|
@@ -161,6 +161,8 @@ function start() {
|
||||
for (i=0;i<nodeErrors.length;i+=1) {
|
||||
if (nodeErrors[i].err.code === "type_already_registered") {
|
||||
log.warn("["+nodeErrors[i].id+"] "+log._("server.type-already-registered",{type:nodeErrors[i].err.details.type,module: nodeErrors[i].err.details.moduleA}));
|
||||
} else if (nodeErrors[i].err.code === "set_has_no_types") {
|
||||
log.warn("["+nodeErrors[i].id+"] "+log._("server.set-has-no-types", nodeErrors[i].err.details));
|
||||
} else {
|
||||
log.warn("["+nodeErrors[i].id+"] "+nodeErrors[i].err);
|
||||
}
|
||||
|
@@ -373,6 +373,11 @@ Node.prototype.send = function(msg) {
|
||||
if (msg === null || typeof msg === "undefined") {
|
||||
return;
|
||||
} else if (!util.isArray(msg)) {
|
||||
// A single message has been passed in
|
||||
if (typeof msg !== 'object') {
|
||||
this.error(Log._("nodes.flow.non-message-returned", { type: typeof msg }));
|
||||
return
|
||||
}
|
||||
if (this._wire) {
|
||||
// A single message and a single wire on output 0
|
||||
// TODO: pre-load flows.get calls - cannot do in constructor
|
||||
@@ -425,27 +430,31 @@ Node.prototype.send = function(msg) {
|
||||
for (k = 0; k < msgs.length; k++) {
|
||||
var m = msgs[k];
|
||||
if (m !== null && m !== undefined) {
|
||||
if (!m._msgid) {
|
||||
hasMissingIds = true;
|
||||
if (typeof m !== 'object') {
|
||||
this.error(Log._("nodes.flow.non-message-returned", { type: typeof m }));
|
||||
} else {
|
||||
if (!m._msgid) {
|
||||
hasMissingIds = true;
|
||||
}
|
||||
/* istanbul ignore else */
|
||||
if (!sentMessageId) {
|
||||
sentMessageId = m._msgid;
|
||||
}
|
||||
sendEvents.push({
|
||||
msg: m,
|
||||
source: {
|
||||
id: this.id,
|
||||
node: this,
|
||||
port: i
|
||||
},
|
||||
destination: {
|
||||
id: wires[j],
|
||||
node: undefined
|
||||
},
|
||||
cloneMessage: msgSent
|
||||
});
|
||||
msgSent = true;
|
||||
}
|
||||
/* istanbul ignore else */
|
||||
if (!sentMessageId) {
|
||||
sentMessageId = m._msgid;
|
||||
}
|
||||
sendEvents.push({
|
||||
msg: m,
|
||||
source: {
|
||||
id: this.id,
|
||||
node: this,
|
||||
port: i
|
||||
},
|
||||
destination: {
|
||||
id: wires[j],
|
||||
node: undefined
|
||||
},
|
||||
cloneMessage: msgSent
|
||||
});
|
||||
msgSent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@ var i18n = require("@node-red/util").i18n;
|
||||
|
||||
module.exports = {
|
||||
"package.json": function(project) {
|
||||
var package = {
|
||||
var packageDetails = {
|
||||
"name": project.name,
|
||||
"description": project.summary||i18n._("storage.localfilesystem.projects.summary"),
|
||||
"version": "0.0.1",
|
||||
@@ -30,11 +30,11 @@ module.exports = {
|
||||
};
|
||||
if (project.files) {
|
||||
if (project.files.flow) {
|
||||
package['node-red'].settings.flowFile = project.files.flow;
|
||||
package['node-red'].settings.credentialsFile = project.files.credentials;
|
||||
packageDetails['node-red'].settings.flowFile = project.files.flow;
|
||||
packageDetails['node-red'].settings.credentialsFile = project.files.credentials;
|
||||
}
|
||||
}
|
||||
return JSON.stringify(package,"",4);
|
||||
return JSON.stringify(packageDetails,"",4);
|
||||
},
|
||||
"README.md": function(project) {
|
||||
var content = project.name+"\n"+("=".repeat(project.name.length))+"\n\n";
|
||||
|
@@ -71,6 +71,8 @@ function runGitCommand(args,cwd,env,emit) {
|
||||
err.code = "git_missing_user";
|
||||
} else if (/name consists only of disallowed characters/i.test(stderr)) {
|
||||
err.code = "git_missing_user";
|
||||
} else if (/nothing (add )?to commit/i.test(stdout)) {
|
||||
return stdout;
|
||||
}
|
||||
throw err;
|
||||
})
|
||||
@@ -106,7 +108,7 @@ function runGitCommandWithSSHCommand(args,cwd,auth,emit) {
|
||||
commandEnv.GIT_SSH = path.join(__dirname,"node-red-ssh.sh");
|
||||
commandEnv.NODE_RED_KEY_FILE=auth.key_path;
|
||||
// GIT_SSH_COMMAND - added in git 2.3.0
|
||||
commandEnv.GIT_SSH_COMMAND = "ssh -i " + auth.key_path + " -F /dev/null";
|
||||
commandEnv.GIT_SSH_COMMAND = "ssh -i \"" + auth.key_path + "\" -F /dev/null";
|
||||
// console.log('commandEnv:', commandEnv);
|
||||
return runGitCommand(args,cwd,commandEnv,emit).then( result => {
|
||||
rs.close();
|
||||
@@ -419,7 +421,10 @@ module.exports = {
|
||||
});
|
||||
},
|
||||
initRepo: function(cwd) {
|
||||
return runGitCommand(["init"],cwd);
|
||||
var args = ["init", "--initial-branch", "main"];
|
||||
return runGitCommand(args, cwd).catch(function () {
|
||||
return runGitCommand(["init"], cwd);
|
||||
});
|
||||
},
|
||||
setUpstream: function(cwd,remoteBranch) {
|
||||
var args = ["branch","--set-upstream-to",remoteBranch];
|
||||
|
32
packages/node_modules/@node-red/runtime/locales/de/runtime.json
vendored
Executable file → Normal file
32
packages/node_modules/@node-red/runtime/locales/de/runtime.json
vendored
Executable file → Normal file
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"runtime": {
|
||||
"welcome": "Willkommen bei Node-RED!",
|
||||
"welcome": "Willkommen bei Node-RED",
|
||||
"version": "__component__ Version: __version__",
|
||||
"unsupported_version": "Nicht unterstützte Version von __component__. Erforderlich: __requires__, jedoch gefunden: __version__",
|
||||
"paths": {
|
||||
@@ -8,7 +8,6 @@
|
||||
"httpStatic": "HTTP-Statisch: __path__"
|
||||
}
|
||||
},
|
||||
|
||||
"server": {
|
||||
"loading": "Paletten-Nodes werden geladen",
|
||||
"palette-editor": {
|
||||
@@ -34,17 +33,19 @@
|
||||
"install-failed-not-found": "Das Modul $t(server.install.install-failed-long) wurde nicht gefunden",
|
||||
"install-failed-name": "$t(server.install.install-failed-long). Ungültiger Modulname: __name__",
|
||||
"install-failed-url": "$t(server.install.install-failed-long). Ungültige URL: __url__",
|
||||
"post-install-error": "Fehler bei der Ausführung des 'postInstall'-Hooks:",
|
||||
"upgrading": "Upgrade von Modul __name__ auf Version __version__ gestartet",
|
||||
"upgraded": "Upgrade von Modul __name__ war erfolgreich. Neustart von Node-RED für die Verwendung der neuen Version erforderlich.",
|
||||
"upgrade-failed-not-found": "Upgrade fehlgeschlagen. $t(server.install.install-failed-long). Version nicht gefunden.",
|
||||
"uninstalling": "Das Modul __name__ wird deinstalliert",
|
||||
"uninstall-failed": "Deinstallation fehlgeschlagen",
|
||||
"uninstall-failed-long": "Die Deinstallation des Moduls __name__ ist fehlgeschlagen:",
|
||||
"uninstalled": "Das Modul __name__ ist deinstalliert"
|
||||
"uninstalled": "Das Modul __name__ ist deinstalliert",
|
||||
"old-ext-mod-dir-warning": "\n\n---------------------------------------------------------------------\nNode-RED 1.3 Verzeichnis externer Module erkannt:\n __oldDir__\nDieses Verzeichnis wird nicht mehr verwendet. Die externen Module werden\nin Ihrem Node-RED-Benutzerverzeichnis neu installiert:\n __newDir__\nLöschen Sie das alte externalModules-Verzeichnis, um diese Meldung abzustellen.\n---------------------------------------------------------------------\n"
|
||||
},
|
||||
"deprecatedOption": "Die Verwendung von __old__ ist abgekündigt. Stattdessen __new__ verwenden.",
|
||||
"unable-to-listen": "Überwachen (listen) von __listenpath__ nicht möglich",
|
||||
"port-in-use": "FEHLER: Port wird verwendet",
|
||||
"port-in-use": "Fehler: Port wird verwendet",
|
||||
"uncaught-exception": "Nicht abgefangene Ausnahmebedingung:",
|
||||
"admin-ui-disabled": "Administrator-Benutzeroberfläche deaktiv",
|
||||
"now-running": "Server wird jetzt auf __listenpath__ ausgeführt",
|
||||
@@ -55,11 +56,10 @@
|
||||
"refresh-interval": "Erneuerung der https-Einstellungen erfolgt alle __interval__ Stunden",
|
||||
"settings-refreshed": "https-Einstellungen wurden erneuert",
|
||||
"refresh-failed": "Erneuerung der https-Einstellungen fehlgeschlagen: __message__",
|
||||
"nodejs-version": "httpsRefreshInterval erfordert Node.js 11 or later",
|
||||
"nodejs-version": "httpsRefreshInterval erfordert Node.js 11 oder höher",
|
||||
"function-required": "httpsRefreshInterval erfordert die https-Eigenschaft in Form einer Funktion"
|
||||
}
|
||||
},
|
||||
|
||||
"api": {
|
||||
"flows": {
|
||||
"error-save": "Fehler beim Speichern der Flows: __message__",
|
||||
@@ -77,17 +77,16 @@
|
||||
"error-enable": "Der Node konnte nicht aktiviert werden:"
|
||||
}
|
||||
},
|
||||
|
||||
"comms": {
|
||||
"error": "Kommunikationskanal-Fehler: __message__",
|
||||
"error-server": "Kommunikationsserver-Fehler: __message__",
|
||||
"error-send": "Kommunikationsende-Fehler: __message__"
|
||||
},
|
||||
|
||||
"settings": {
|
||||
"user-not-available": "Einstellungen konnten nicht gespeichert werden: __message__",
|
||||
"not-available": "Einstellungen nicht verfügbar",
|
||||
"property-read-only": "Die Eigenschaft '__prop__ 'ist schreibgeschützt"
|
||||
"property-read-only": "Die Eigenschaft '__prop__' ist schreibgeschützt",
|
||||
"readonly-mode": "Laufzeitumgebung im Nur-Lese-Modus. Änderungen werden nicht gespeichert."
|
||||
},
|
||||
"library": {
|
||||
"unknownLibrary": "Unbekannte Bibliothek (Library): __library__",
|
||||
@@ -98,10 +97,12 @@
|
||||
},
|
||||
"nodes": {
|
||||
"credentials": {
|
||||
"error": "Fehler beim Laden der Berechtigungen: __message__",
|
||||
"error-saving": "Fehler beim Speichern der Berechtigungen: __message__",
|
||||
"not-registered": "Der Berechtigung-Typ '__type__' ist nicht registriert",
|
||||
"system-key-warning": "\n---------------------------------------------------------------------\nDie Datei mit den Flow-Berechtigungen wird mit einem vom System\ngenerierten Schlüssel verschlüsselt.\nWenn der vom System generierte Schlüssel aus irgendeinem Grund\nverloren geht, kann die Datei mit den Berechtigungen nicht\nwiederhergestellt werden. Sie muss dann gelöscht und die\nBerechtigungen müssen erneut eingestellt werden.\nEs sollte ein eigener Schlüssel mit Hilfe der Option\n'credentialSecret' in der Einstellungsdatei vorgegeben werden.\nNode-RED wird dann die Datei mit den Flow-Berechtigungen\nbei der nächsten Übernahme (deploy) einer Änderung erneut\nverschlüsseln.\n---------------------------------------------------------------------"
|
||||
"error": "Fehler beim Laden der Credentials: __message__",
|
||||
"error-saving": "Fehler beim Speichern der Credentials: __message__",
|
||||
"not-registered": "Der Credentials-Typ '__type__' ist nicht registriert",
|
||||
"system-key-warning": "\n---------------------------------------------------------------------\nDie Datei mit den Flow-Credentials wird mit einem vom System\ngenerierten Schlüssel verschlüsselt.\nWenn der vom System generierte Schlüssel aus irgendeinem Grund\nverloren geht, kann die Datei mit den Credentials nicht\nwiederhergestellt werden. Sie muss dann gelöscht und die\nCredentials müssen erneut eingestellt werden.\nEs sollte ein eigener Schlüssel mit Hilfe der Option\n'credentialSecret' in der Einstellungsdatei vorgegeben werden.\nNode-RED wird dann die Datei mit den Flow-Credentials\nbei der nächsten Übernahme (deploy) einer Änderung erneut\nverschlüsseln.\n---------------------------------------------------------------------",
|
||||
"unencrypted": "Verwende unverschlüsselte Credentials",
|
||||
"encryptedNotFound": "Verschlüsselte Credentials nicht gefunden"
|
||||
},
|
||||
"flows": {
|
||||
"safe-mode": "Die Flows sind gestoppt im abgesicherten Modus. Übernahme (deploy) zum Starten.",
|
||||
@@ -121,6 +122,7 @@
|
||||
"stopped-flows": "Flows sind gestoppt",
|
||||
"stopped": "gestoppt",
|
||||
"stopping-error": "Fehler beim Stoppen des Nodes: __message__",
|
||||
"updated-flows": "Flows aktualisiert",
|
||||
"added-flow": "Flow wird hinzugefügt: __label__",
|
||||
"updated-flow": "Aktualisierter Flow: __label__",
|
||||
"removed-flow": "Entfernter Flow: __label__",
|
||||
@@ -145,7 +147,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"storage": {
|
||||
"index": {
|
||||
"forbidden-flow-name": "Unzulässiger Flow-Name"
|
||||
@@ -159,6 +160,7 @@
|
||||
"restore": "Die '__type__'-Dateisicherung wird wiederhergestellt: __path__",
|
||||
"restore-fail": "Die Wiederherstellung der '__type__'-Dateisicherung ist fehlgeschlagen: __message__",
|
||||
"fsync-fail": "Die Übertragung der Datei __path__ auf das Laufwerk ist fehlgeschlagen: __message__",
|
||||
"warn_name": "Name der Flows-Datei nicht festgelegt. Name wird unter Verwendung des Hostnamens generiert.",
|
||||
"projects": {
|
||||
"changing-project": "Aktives Projekt wird festgelegt: __project__",
|
||||
"active-project": "Aktives Projekt: __project__",
|
||||
@@ -174,7 +176,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"context": {
|
||||
"log-store-init": "Kontextspeicher: __name__ [__info__]",
|
||||
"error-loading-module": "Fehler beim Laden des Kontextspeichers: __message__",
|
||||
@@ -189,5 +190,4 @@
|
||||
"error-write": "Fehler beim Schreiben des Kontextes: __message__"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@
|
||||
"errors-help": "Run with -v for details",
|
||||
"missing-modules": "Missing node modules:",
|
||||
"node-version-mismatch": "Node module cannot be loaded on this version. Requires: __version__ ",
|
||||
"set-has-no-types": "Set does not have any types. name: '__name__', module: '__module__', file: '__file__'",
|
||||
"type-already-registered": "'__type__' already registered by module __module__",
|
||||
"removing-modules": "Removing modules from config",
|
||||
"added-types": "Added node types:",
|
||||
@@ -134,7 +135,8 @@
|
||||
"flow": {
|
||||
"unknown-type": "Unknown type: __type__",
|
||||
"missing-types": "missing types",
|
||||
"error-loop": "Message exceeded maximum number of catches"
|
||||
"error-loop": "Message exceeded maximum number of catches",
|
||||
"non-message-returned": "Node tried to send a message of type __type__"
|
||||
},
|
||||
"index": {
|
||||
"unrecognised-id": "Unrecognised id: __id__",
|
||||
|
@@ -20,6 +20,7 @@
|
||||
"errors-help": "詳細は -v を指定して実行してください",
|
||||
"missing-modules": "不足しているノードモジュール:",
|
||||
"node-version-mismatch": "ノードモジュールはこのバージョンではロードできません。必要なバージョン: __version__ ",
|
||||
"set-has-no-types": "セットに型がありません。 名前: '__name__', モジュール: '__module__', ファイル: '__file__'",
|
||||
"type-already-registered": "'__type__' はモジュール __module__ で登録済みです",
|
||||
"removing-modules": "設定からモジュールを削除します",
|
||||
"added-types": "追加したノード:",
|
||||
@@ -134,7 +135,8 @@
|
||||
"flow": {
|
||||
"unknown-type": "不明なノード: __type__",
|
||||
"missing-types": "欠落したノード",
|
||||
"error-loop": "メッセージの例外補足回数が最大値を超えました"
|
||||
"error-loop": "メッセージの例外補足回数が最大値を超えました",
|
||||
"non-message-returned": "ノードが __type__ 型のメッセージの送信を試みました"
|
||||
},
|
||||
"index": {
|
||||
"unrecognised-id": "不明なID: __id__",
|
||||
|
0
packages/node_modules/@node-red/runtime/locales/ko/runtime.json
vendored
Executable file → Normal file
0
packages/node_modules/@node-red/runtime/locales/ko/runtime.json
vendored
Executable file → Normal file
Reference in New Issue
Block a user