@node-red/nodes 4.0.2 → 4.0.4
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.
- package/core/network/05-tls.js +7 -7
- package/core/network/10-mqtt.js +26 -1
- package/core/sequence/17-split.html +1 -1
- package/core/sequence/19-batch.html +6 -1
- package/core/sequence/19-batch.js +7 -1
- package/examples/function/range/01 - Scale input value.json +1 -1
- package/locales/de/messages.json +1 -0
- package/locales/en-US/messages.json +4 -2
- package/locales/es-ES/messages.json +77 -64
- package/locales/es-ES/network/31-tcpin.html +2 -0
- package/locales/es-ES/parsers/70-CSV.html +4 -1
- package/locales/fr/messages.json +3 -0
- package/locales/ja/messages.json +3 -0
- package/locales/pt-BR/messages.json +12 -11
- package/locales/ru/messages.json +1 -0
- package/locales/zh-CN/messages.json +1 -0
- package/locales/zh-TW/messages.json +1 -0
- package/package.json +10 -10
- /package/examples/parser/html/{04 - Join extracedt sequence of HTML element using join node.json → 04 - Join extracted sequence of HTML element using join node.json} +0 -0
package/core/network/05-tls.js
CHANGED
|
@@ -104,14 +104,14 @@ module.exports = function(RED) {
|
|
|
104
104
|
if (this.credentials && this.credentials.passphrase) {
|
|
105
105
|
opts.passphrase = this.credentials.passphrase;
|
|
106
106
|
}
|
|
107
|
-
if (this.servername) {
|
|
108
|
-
opts.servername = this.servername;
|
|
109
|
-
}
|
|
110
|
-
if (this.alpnprotocol) {
|
|
111
|
-
opts.ALPNProtocols = [this.alpnprotocol];
|
|
112
|
-
}
|
|
113
|
-
opts.rejectUnauthorized = this.verifyservercert;
|
|
114
107
|
}
|
|
108
|
+
if (this.servername) {
|
|
109
|
+
opts.servername = this.servername;
|
|
110
|
+
}
|
|
111
|
+
if (this.alpnprotocol) {
|
|
112
|
+
opts.ALPNProtocols = [this.alpnprotocol];
|
|
113
|
+
}
|
|
114
|
+
opts.rejectUnauthorized = this.verifyservercert;
|
|
115
115
|
return opts;
|
|
116
116
|
}
|
|
117
117
|
|
package/core/network/10-mqtt.js
CHANGED
|
@@ -158,9 +158,16 @@ module.exports = function(RED) {
|
|
|
158
158
|
if(!keys || !keys.length) return null;
|
|
159
159
|
keys.forEach(key => {
|
|
160
160
|
let val = srcUserProperties[key];
|
|
161
|
-
if(typeof val
|
|
161
|
+
if(typeof val === "string") {
|
|
162
162
|
count++;
|
|
163
163
|
_clone[key] = val;
|
|
164
|
+
} else if (val !== undefined && val !== null) {
|
|
165
|
+
try {
|
|
166
|
+
_clone[key] = JSON.stringify(val)
|
|
167
|
+
count++;
|
|
168
|
+
} catch (err) {
|
|
169
|
+
// Silently drop property
|
|
170
|
+
}
|
|
164
171
|
}
|
|
165
172
|
});
|
|
166
173
|
if(count) properties.userProperties = _clone;
|
|
@@ -673,6 +680,8 @@ module.exports = function(RED) {
|
|
|
673
680
|
delete node.options.protocolId; //V4+ default
|
|
674
681
|
delete node.options.protocolVersion; //V4 default
|
|
675
682
|
delete node.options.properties;//V5 only
|
|
683
|
+
|
|
684
|
+
|
|
676
685
|
if (node.compatmode == "true" || node.compatmode === true || node.protocolVersion == 3) {
|
|
677
686
|
node.options.protocolId = 'MQIsdp';//V3 compat only
|
|
678
687
|
node.options.protocolVersion = 3;
|
|
@@ -691,6 +700,21 @@ module.exports = function(RED) {
|
|
|
691
700
|
setIntProp(node,node.options.properties,"sessionExpiryInterval");
|
|
692
701
|
}
|
|
693
702
|
}
|
|
703
|
+
// Ensure will payload, if set, is a string
|
|
704
|
+
if (node.options.will && Object.hasOwn(node.options.will, 'payload')) {
|
|
705
|
+
let payload = node.options.will.payload
|
|
706
|
+
if (payload === null || typeof payload === 'undefined') {
|
|
707
|
+
payload = "";
|
|
708
|
+
} else if (!Buffer.isBuffer(payload)) {
|
|
709
|
+
if (typeof payload === "object") {
|
|
710
|
+
payload = JSON.stringify(payload);
|
|
711
|
+
} else if (typeof payload !== "string") {
|
|
712
|
+
payload = "" + payload;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
node.options.will.payload = payload
|
|
716
|
+
}
|
|
717
|
+
|
|
694
718
|
if (node.usetls && n.tls) {
|
|
695
719
|
var tlsNode = RED.nodes.getNode(n.tls);
|
|
696
720
|
if (tlsNode) {
|
|
@@ -725,6 +749,7 @@ module.exports = function(RED) {
|
|
|
725
749
|
};
|
|
726
750
|
|
|
727
751
|
node.deregister = function(mqttNode, done, autoDisconnect) {
|
|
752
|
+
setStatusDisconnected(mqttNode, false);
|
|
728
753
|
delete node.users[mqttNode.id];
|
|
729
754
|
if (autoDisconnect && !node.closing && node.connected && Object.keys(node.users).length === 0) {
|
|
730
755
|
node.disconnect(done);
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
|
|
22
22
|
</div>
|
|
23
23
|
<div class="form-row">
|
|
24
|
-
<label for="node-input-property"><i class="fa fa-forward"></i> <span data-i18n="split.
|
|
24
|
+
<label for="node-input-property"><i class="fa fa-forward"></i> <span data-i18n="split.splitThe"></span></label>
|
|
25
25
|
<input type="text" id="node-input-property" style="width:70%;"/>
|
|
26
26
|
</div>
|
|
27
27
|
<div class="form-row"><span data-i18n="[html]split.strBuff"></span></div>
|
|
@@ -36,6 +36,10 @@
|
|
|
36
36
|
<label style="margin-left: 10px; width: 175px;" for="node-input-overlap" data-i18n="batch.count.overlap"></label>
|
|
37
37
|
<input type="text" id="node-input-overlap" style="width: 50px;">
|
|
38
38
|
</div>
|
|
39
|
+
<div class="form-row">
|
|
40
|
+
<input type="checkbox" id="node-input-honourParts" style="margin-left: 10px; margin-right:10px; vertical-align:top; width:auto;">
|
|
41
|
+
<label for="node-input-honourParts" style="width:auto;" data-i18n="batch.honourParts"></label>
|
|
42
|
+
</div>
|
|
39
43
|
</div>
|
|
40
44
|
|
|
41
45
|
<div class="node-row-msg-interval">
|
|
@@ -45,7 +49,7 @@
|
|
|
45
49
|
<span data-i18n="batch.interval.seconds"></span>
|
|
46
50
|
</div>
|
|
47
51
|
<div class="form-row">
|
|
48
|
-
<input type="checkbox" id="node-input-allowEmptySequence" style="margin-left:20px; margin-right:
|
|
52
|
+
<input type="checkbox" id="node-input-allowEmptySequence" style="margin-left:20px; margin-right:10px; vertical-align:top; width:auto;">
|
|
49
53
|
<label for="node-input-allowEmptySequence" style="width:auto;" data-i18n="batch.interval.empty"></label>
|
|
50
54
|
</div>
|
|
51
55
|
</div>
|
|
@@ -101,6 +105,7 @@
|
|
|
101
105
|
}
|
|
102
106
|
},
|
|
103
107
|
allowEmptySequence: {value:false},
|
|
108
|
+
honourParts: {value:false},
|
|
104
109
|
topics: {value:[{topic:""}]}
|
|
105
110
|
},
|
|
106
111
|
inputs:1,
|
|
@@ -181,6 +181,8 @@ module.exports = function(RED) {
|
|
|
181
181
|
RED.nodes.createNode(this,n);
|
|
182
182
|
var node = this;
|
|
183
183
|
var mode = n.mode || "count";
|
|
184
|
+
var eof = false;
|
|
185
|
+
node.honourParts = n.honourParts || false;
|
|
184
186
|
|
|
185
187
|
node.pending_count = 0;
|
|
186
188
|
if (mode === "count") {
|
|
@@ -201,9 +203,12 @@ module.exports = function(RED) {
|
|
|
201
203
|
return;
|
|
202
204
|
}
|
|
203
205
|
var queue = node.pending;
|
|
206
|
+
if (node.honourParts && msg.hasOwnProperty("parts")) {
|
|
207
|
+
if (msg.parts.index + 1 === msg.parts.count) { eof = true; }
|
|
208
|
+
}
|
|
204
209
|
queue.push({msg, send, done});
|
|
205
210
|
node.pending_count++;
|
|
206
|
-
if (queue.length === count) {
|
|
211
|
+
if (queue.length === count || eof === true) {
|
|
207
212
|
send_msgs(node, queue, is_overlap);
|
|
208
213
|
for (let i = 0; i < queue.length-overlap; i++) {
|
|
209
214
|
queue[i].done();
|
|
@@ -211,6 +216,7 @@ module.exports = function(RED) {
|
|
|
211
216
|
node.pending =
|
|
212
217
|
(overlap === 0) ? [] : queue.slice(-overlap);
|
|
213
218
|
node.pending_count = 0;
|
|
219
|
+
eof = false;
|
|
214
220
|
}
|
|
215
221
|
var max_msgs = max_kept_msgs_count(node);
|
|
216
222
|
if ((max_msgs > 0) && (node.pending_count > max_msgs)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"827a48c0.912d88","type":"comment","z":"ff17dfa9.8fa6d","name":"Map property between different numeric ranges","info":"Range node can scale a number from one numeric range to another.\n\nSee Node-RED cookbook [item](https://cookbook.nodered.org/basic/map-between-different-number-ranges).","x":240,"y":60,"wires":[]},{"id":"bb23bd77.ce725","type":"inject","z":"ff17dfa9.8fa6d","name":"","repeat":"","crontab":"","once":false,"topic":"","payload":"0","payloadType":"num","x":170,"y":120,"wires":[["42ed281c.790b38"]]},{"id":"42ed281c.790b38","type":"range","z":"ff17dfa9.8fa6d","minin":"0","maxin":"1023","minout":"0","maxout":"5","action":"clamp","round":false,"name":"","x":390,"y":160,"wires":[["56e6dd0f.436c24"]]},{"id":"54659d5c.0283e4","type":"inject","z":"ff17dfa9.8fa6d","name":"","repeat":"","crontab":"","once":false,"topic":"","payload":"512","payloadType":"num","x":170,"y":160,"wires":[["42ed281c.790b38"]]},{"id":"85ce0127.07b06","type":"inject","z":"ff17dfa9.8fa6d","name":"","repeat":"","crontab":"","once":false,"topic":"","payload":"1023","payloadType":"num","x":170,"y":200,"wires":[["42ed281c.790b38"]]},{"id":"56e6dd0f.436c24","type":"debug","z":"ff17dfa9.8fa6d","name":"","active":true,"console":"false","complete":"false","x":590,"y":160,"wires":[]}]
|
|
1
|
+
[{"id":"827a48c0.912d88","type":"comment","z":"ff17dfa9.8fa6d","name":"Map property between different numeric ranges","info":"Range node can scale a number from one numeric range to another.\n\nSee Node-RED cookbook [item](https://cookbook.nodered.org/basic/map-between-different-number-ranges).","x":240,"y":60,"wires":[]},{"id":"bb23bd77.ce725","type":"inject","z":"ff17dfa9.8fa6d","name":"","repeat":"","crontab":"","once":false,"topic":"","payload":"0","payloadType":"num","x":170,"y":120,"wires":[["42ed281c.790b38"]]},{"id":"42ed281c.790b38","type":"range","z":"ff17dfa9.8fa6d","minin":"0","maxin":"1023","minout":"0","maxout":"5","action":"clamp","round":false,"property":"payload","name":"","x":390,"y":160,"wires":[["56e6dd0f.436c24"]]},{"id":"54659d5c.0283e4","type":"inject","z":"ff17dfa9.8fa6d","name":"","repeat":"","crontab":"","once":false,"topic":"","payload":"512","payloadType":"num","x":170,"y":160,"wires":[["42ed281c.790b38"]]},{"id":"85ce0127.07b06","type":"inject","z":"ff17dfa9.8fa6d","name":"","repeat":"","crontab":"","once":false,"topic":"","payload":"1023","payloadType":"num","x":170,"y":200,"wires":[["42ed281c.790b38"]]},{"id":"56e6dd0f.436c24","type":"debug","z":"ff17dfa9.8fa6d","name":"","active":true,"console":"false","complete":"false","x":590,"y":160,"wires":[]}]
|
package/locales/de/messages.json
CHANGED
|
@@ -912,6 +912,7 @@
|
|
|
912
912
|
"objectSend": "Sende eine Nachricht für jedes Schlüssel/Wert-Paar",
|
|
913
913
|
"strBuff": "<b>string</b> / <b>buffer</b>",
|
|
914
914
|
"array": "<b>array</b>",
|
|
915
|
+
"splitThe": "Split",
|
|
915
916
|
"splitUsing": "Aufteilung",
|
|
916
917
|
"splitLength": "feste Längen von",
|
|
917
918
|
"stream": "Als Nachrichtenstrom behandeln (Streaming-Modus)",
|
|
@@ -456,7 +456,7 @@
|
|
|
456
456
|
"staticTopic": "Subscribe to single topic",
|
|
457
457
|
"dynamicTopic": "Dynamic subscription",
|
|
458
458
|
"auto-connect": "Connect automatically",
|
|
459
|
-
"auto-mode-depreciated": "This option is
|
|
459
|
+
"auto-mode-depreciated": "This option is deprecated. Please use the new auto-detect mode.",
|
|
460
460
|
"none": "none",
|
|
461
461
|
"other": "other"
|
|
462
462
|
},
|
|
@@ -1011,12 +1011,13 @@
|
|
|
1011
1011
|
"tip": "Tip: The filename should be an absolute path, otherwise it will be relative to the working directory of the Node-RED process."
|
|
1012
1012
|
},
|
|
1013
1013
|
"split": {
|
|
1014
|
-
"split": "
|
|
1014
|
+
"split": "split",
|
|
1015
1015
|
"intro": "Split <code>msg.payload</code> based on type:",
|
|
1016
1016
|
"object": "<b>Object</b>",
|
|
1017
1017
|
"objectSend": "Send a message for each key/value pair",
|
|
1018
1018
|
"strBuff": "<b>String</b> / <b>Buffer</b>",
|
|
1019
1019
|
"array": "<b>Array</b>",
|
|
1020
|
+
"splitThe": "Split the",
|
|
1020
1021
|
"splitUsing": "Split using",
|
|
1021
1022
|
"splitLength": "Fixed length of",
|
|
1022
1023
|
"stream": "Handle as a stream of messages",
|
|
@@ -1113,6 +1114,7 @@
|
|
|
1113
1114
|
"too-many": "too many pending messages in batch node",
|
|
1114
1115
|
"unexpected": "unexpected mode",
|
|
1115
1116
|
"no-parts": "no parts property in message",
|
|
1117
|
+
"honourParts": "Allow msg.parts to also complete batch operation.",
|
|
1116
1118
|
"error": {
|
|
1117
1119
|
"invalid-count": "Invalid count",
|
|
1118
1120
|
"invalid-overlap": "Invalid overlap",
|
|
@@ -513,15 +513,15 @@
|
|
|
513
513
|
"method": "Método",
|
|
514
514
|
"url": "URL",
|
|
515
515
|
"doc": "Docs",
|
|
516
|
-
"return": "
|
|
517
|
-
"upload": "
|
|
518
|
-
"status": "
|
|
519
|
-
"headers": "
|
|
516
|
+
"return": "Devolver",
|
|
517
|
+
"upload": "¿Aceptar cargas de archivos?",
|
|
518
|
+
"status": "Código de estado",
|
|
519
|
+
"headers": "Encabezados",
|
|
520
520
|
"other": "otro",
|
|
521
521
|
"paytoqs": {
|
|
522
|
-
"ignore": "
|
|
523
|
-
"query": "
|
|
524
|
-
"body": "
|
|
522
|
+
"ignore": "Ignorar",
|
|
523
|
+
"query": "Agregar a los parámetros de la cadena de consulta",
|
|
524
|
+
"body": "Enviar como cuerpo de la solicitud"
|
|
525
525
|
},
|
|
526
526
|
"utf8String": "texto UTF8",
|
|
527
527
|
"binaryBuffer": "buffer binario",
|
|
@@ -529,45 +529,45 @@
|
|
|
529
529
|
"authType": "Tipo",
|
|
530
530
|
"bearerToken": "Token"
|
|
531
531
|
},
|
|
532
|
-
"setby": "-
|
|
533
|
-
"basicauth": "
|
|
534
|
-
"use-tls": "
|
|
535
|
-
"tls-config": "TLS
|
|
536
|
-
"basic": "
|
|
537
|
-
"digest": "digest
|
|
538
|
-
"bearer": "bearer
|
|
539
|
-
"use-proxy": "
|
|
540
|
-
"persist": "
|
|
541
|
-
"proxy-config": "Proxy
|
|
542
|
-
"use-proxyauth": "
|
|
543
|
-
"noproxy-hosts": "
|
|
544
|
-
"senderr": "
|
|
545
|
-
"utf8": "
|
|
546
|
-
"binary": "
|
|
547
|
-
"json": "
|
|
532
|
+
"setby": "- establecido por msg.method -",
|
|
533
|
+
"basicauth": "Usar autenticación",
|
|
534
|
+
"use-tls": "Habilitar conexión segura (SSL/TLS)",
|
|
535
|
+
"tls-config": "Configuración TLS",
|
|
536
|
+
"basic": "autenticación básica",
|
|
537
|
+
"digest": "autenticación digest",
|
|
538
|
+
"bearer": "autenticación bearer",
|
|
539
|
+
"use-proxy": "Usar proxy",
|
|
540
|
+
"persist": "Habilitar conexión activa (keep-alive)",
|
|
541
|
+
"proxy-config": "Configuración Proxy",
|
|
542
|
+
"use-proxyauth": "Usar autenticación de proxy",
|
|
543
|
+
"noproxy-hosts": "Ignorar hosts",
|
|
544
|
+
"senderr": "Enviar solo respuestas que no sean 2xx al nodo Catch",
|
|
545
|
+
"utf8": "una cadena UTF-8",
|
|
546
|
+
"binary": "un búfer binario",
|
|
547
|
+
"json": "un objeto JSON analizado",
|
|
548
548
|
"tip": {
|
|
549
|
-
"in": "
|
|
550
|
-
"res": "
|
|
549
|
+
"in": "La URL será relativa a ",
|
|
550
|
+
"res": "Los mensajes enviados a este nodo <b>deben</b> originarse desde un nodo de <i>http input</i>",
|
|
551
551
|
"req": "Tip: If the JSON parse fails the fetched string is returned as-is."
|
|
552
552
|
},
|
|
553
|
-
"httpreq": "http
|
|
553
|
+
"httpreq": "solicitud http",
|
|
554
554
|
"errors": {
|
|
555
|
-
"not-created": "
|
|
556
|
-
"missing-path": "
|
|
557
|
-
"no-response": "No
|
|
558
|
-
"json-error": "
|
|
559
|
-
"no-url": "No
|
|
560
|
-
"deprecated-call": "
|
|
561
|
-
"invalid-transport": "
|
|
562
|
-
"timeout-isnan": "
|
|
563
|
-
"timeout-isnegative": "
|
|
564
|
-
"invalid-payload": "
|
|
565
|
-
"invalid-url": "
|
|
555
|
+
"not-created": "No se puede crear el nodo http-in cuando httpNodeRoot está establecido en falso",
|
|
556
|
+
"missing-path": "falta la ruta",
|
|
557
|
+
"no-response": "No hay objeto de respuesta",
|
|
558
|
+
"json-error": "Error de análisis en JSON",
|
|
559
|
+
"no-url": "No se especificó ninguna URL",
|
|
560
|
+
"deprecated-call": "Llamada obsoleta a __method__",
|
|
561
|
+
"invalid-transport": "protocolo no-http solicitado",
|
|
562
|
+
"timeout-isnan": "El valor de tiempo de espera no es un número válido, se ignora",
|
|
563
|
+
"timeout-isnegative": "El valor de tiempo de espera es negativo, se ignora",
|
|
564
|
+
"invalid-payload": "payload Invalido",
|
|
565
|
+
"invalid-url": "URL Inválida"
|
|
566
566
|
},
|
|
567
567
|
"status": {
|
|
568
|
-
"requesting": "
|
|
568
|
+
"requesting": "solicitando"
|
|
569
569
|
},
|
|
570
|
-
"insecureHTTPParser": "
|
|
570
|
+
"insecureHTTPParser": "Deshabilitar el análisis estricto de HTTP"
|
|
571
571
|
},
|
|
572
572
|
"websocket": {
|
|
573
573
|
"label": {
|
|
@@ -576,41 +576,42 @@
|
|
|
576
576
|
"url": "URL",
|
|
577
577
|
"subprotocol": "Subprotocolo"
|
|
578
578
|
},
|
|
579
|
-
"listenon": "
|
|
580
|
-
"connectto": "
|
|
581
|
-
"sendrec": "
|
|
579
|
+
"listenon": "Escuchar",
|
|
580
|
+
"connectto": "Conectar a",
|
|
581
|
+
"sendrec": "Enviar/Recibir",
|
|
582
582
|
"payload": "payload",
|
|
583
|
-
"message": "
|
|
584
|
-
"sendheartbeat": "
|
|
583
|
+
"message": "mensaje completo",
|
|
584
|
+
"sendheartbeat": "Enviar latido",
|
|
585
585
|
"tip": {
|
|
586
|
-
"path1": "
|
|
587
|
-
"path2": "
|
|
588
|
-
"url1": "URL
|
|
589
|
-
"url2": "
|
|
586
|
+
"path1": "De manera predeterminada, <code>payload</code> contendrá los datos que se enviarán o recibirán de un websocket. El receptor puede configurarse para enviar o recibir el objeto de mensaje completo como una cadena en formato JSON.",
|
|
587
|
+
"path2": "Esta ruta será relativa a <code>__path__</code>.",
|
|
588
|
+
"url1": "La URL debe usar el esquema ws:// o wss:// y apuntar a un receptor de websocket existente.",
|
|
589
|
+
"url2": "De manera predeterminada, <code>payload</code> contendrá los datos que se enviarán o recibirán de un websocket. El cliente puede configurarse para enviar o recibir el objeto de mensaje completo como una cadena en formato JSON",
|
|
590
|
+
"headers": "Los encabezados solo se envían durante el mecanismo de actualización del protocolo, de HTTP al protocolo WS/WSS."
|
|
590
591
|
},
|
|
591
592
|
"status": {
|
|
592
|
-
"connected": "
|
|
593
|
-
"connected_plural": "
|
|
593
|
+
"connected": "__count__ conectado",
|
|
594
|
+
"connected_plural": "__count__ conectados"
|
|
594
595
|
},
|
|
595
596
|
"errors": {
|
|
596
|
-
"connect-error": "
|
|
597
|
-
"send-error": "
|
|
598
|
-
"missing-conf": "
|
|
599
|
-
"duplicate-path": "
|
|
600
|
-
"missing-server": "
|
|
601
|
-
"missing-client": "
|
|
597
|
+
"connect-error": "Se produjo un error en la conexión ws:",
|
|
598
|
+
"send-error": "Se produjo un error al enviar: ",
|
|
599
|
+
"missing-conf": "Falta la configuración del servidor",
|
|
600
|
+
"duplicate-path": "No se pueden tener dos escuchas de WebSocket en la misma ruta: __path__",
|
|
601
|
+
"missing-server": "Falta la configuración del servidor",
|
|
602
|
+
"missing-client": "Falta la configuración del cliente"
|
|
602
603
|
}
|
|
603
604
|
},
|
|
604
605
|
"watch": {
|
|
605
|
-
"watch": "
|
|
606
|
+
"watch": "observar",
|
|
606
607
|
"label": {
|
|
607
|
-
"files": "
|
|
608
|
-
"recursive": "
|
|
608
|
+
"files": "Fichero(s)",
|
|
609
|
+
"recursive": "Observar subdirectorios recursivamente"
|
|
609
610
|
},
|
|
610
611
|
"placeholder": {
|
|
611
|
-
"files": "
|
|
612
|
+
"files": "Lista de archivos y/o directorios separados por comas"
|
|
612
613
|
},
|
|
613
|
-
"tip": "
|
|
614
|
+
"tip": "En Windows, debes utilizar barras invertidas dobles \\\\ en cualquier nombre de directorio."
|
|
614
615
|
},
|
|
615
616
|
"tcpin": {
|
|
616
617
|
"label": {
|
|
@@ -849,7 +850,13 @@
|
|
|
849
850
|
"newline": "Nueva línea",
|
|
850
851
|
"usestrings": "analizar valores numéricos",
|
|
851
852
|
"include_empty_strings": "incluir cadenas vacías",
|
|
852
|
-
"include_null_values": "incluir valores nulos"
|
|
853
|
+
"include_null_values": "incluir valores nulos",
|
|
854
|
+
"spec": "Analizador"
|
|
855
|
+
},
|
|
856
|
+
"spec": {
|
|
857
|
+
"rfc": "RFC4180",
|
|
858
|
+
"legacy": "Legado",
|
|
859
|
+
"legacy_warning": "El modo legado se eliminará en una versión futura."
|
|
853
860
|
},
|
|
854
861
|
"placeholder": {
|
|
855
862
|
"columns": "nombres de columnas separados por comas"
|
|
@@ -878,6 +885,7 @@
|
|
|
878
885
|
"once": "enviar encabezados una vez, hasta msg.reset"
|
|
879
886
|
},
|
|
880
887
|
"errors": {
|
|
888
|
+
"bad_template": "Plantilla de columnas mal formada.",
|
|
881
889
|
"csv_js": "Este nodo solo maneja cadenas CSV u objetos JS.",
|
|
882
890
|
"obj_csv": "No se ha especificado ninguna plantilla de columnas para el objeto -> CSV.",
|
|
883
891
|
"bad_csv": "Datos CSV con formato incorrecto: la salida probablemente esté corrupta."
|
|
@@ -887,12 +895,14 @@
|
|
|
887
895
|
"label": {
|
|
888
896
|
"select": "Selector",
|
|
889
897
|
"output": "Salida",
|
|
890
|
-
"in": "en"
|
|
898
|
+
"in": "en",
|
|
899
|
+
"prefix": "Nombre de la propiedad para el contenido HTML"
|
|
891
900
|
},
|
|
892
901
|
"output": {
|
|
893
902
|
"html": "el contenido HTML de los elementos",
|
|
894
903
|
"text": "sólo el contenido textual de los elementos",
|
|
895
|
-
"attr": "un objeto de cualquier atributo de los elementos"
|
|
904
|
+
"attr": "un objeto de cualquier atributo de los elementos",
|
|
905
|
+
"compl": "un objeto de cualquier atributo de los elementos y contenidos html"
|
|
896
906
|
},
|
|
897
907
|
"format": {
|
|
898
908
|
"single": "como un mensaje único que contiene una matriz",
|
|
@@ -1007,6 +1017,7 @@
|
|
|
1007
1017
|
"objectSend": "Enviar un mensaje para cada par clave/valor",
|
|
1008
1018
|
"strBuff": "<b>Texto</b> / <b>Buffer</b>",
|
|
1009
1019
|
"array": "<b>Array</b>",
|
|
1020
|
+
"splitThe": "Dividir el",
|
|
1010
1021
|
"splitUsing": "Dividir usando",
|
|
1011
1022
|
"splitLength": "Longitud fija de",
|
|
1012
1023
|
"stream": "Manejar como un flujo de mensajes",
|
|
@@ -1036,6 +1047,7 @@
|
|
|
1036
1047
|
"joinedUsing": "se unió usando",
|
|
1037
1048
|
"send": "Enviar el mensaje:",
|
|
1038
1049
|
"afterCount": "Después de varias partes del mensaje",
|
|
1050
|
+
"useparts": "Usar la propiedad msg.parts existente",
|
|
1039
1051
|
"count": "contar",
|
|
1040
1052
|
"subsequent": "y cada mensaje posterior.",
|
|
1041
1053
|
"afterTimeout": "Después de un tiempo de espera trás el primer mensaje",
|
|
@@ -1102,6 +1114,7 @@
|
|
|
1102
1114
|
"too-many": "demasiados mensajes pendientes en el nodo de lotes",
|
|
1103
1115
|
"unexpected": "modo inesperado",
|
|
1104
1116
|
"no-parts": "ninguna propiedad 'parte' en el mensaje",
|
|
1117
|
+
"honourParts": "Permitir que msg.parts también complete la operación por lotes.",
|
|
1105
1118
|
"error": {
|
|
1106
1119
|
"invalid-count": "Recuento no válido",
|
|
1107
1120
|
"invalid-overlap": "Solapamiento no válido",
|
|
@@ -24,12 +24,14 @@
|
|
|
24
24
|
<p>Solo se envía el <code>msg.payload</code>.</p>
|
|
25
25
|
<p>Si <code>msg.payload</code> es una cadena que contiene una codificación Base64 de datos binarios, la opción de decodificación Base64 hará que se vuelva a convertir a binario antes de enviarse.</p>
|
|
26
26
|
<p>Si <code>msg._session</code> no está presente, la carga se envía a <b>todos</b> los clientes conectados.</p>
|
|
27
|
+
<p>En el modo Responder a, configurar <code>msg.reset = true</code> restablecerá la conexión especificada por _session.id, o todas las conexiones si no se especifica _session.id.</p>
|
|
27
28
|
<p><b>Nota: </b>En algunos sistemas, es posible que necesites acceso raíz o de administrador para acceder a los puertos inferiores a 1024.</p>
|
|
28
29
|
</script>
|
|
29
30
|
|
|
30
31
|
<script type="text/html" data-help-name="tcp request">
|
|
31
32
|
<p>Un nodo de solicitud TCP simple: envía el <code>msg.payload</code> a un puerto tcp del servidor y espera una respuesta.</p>
|
|
32
33
|
<p>Se conecta, envía la "solicitud" y lee la "respuesta". Puede contar una cantidad de caracteres devueltos en un búfer fijo, hacer coincidir un carácter específico antes de regresar, esperar un tiempo de espera fijo desde la primera respuesta y luego regresar, esperar datos, o enviar y luego cerrar la conexión inmediatamente, sin esperar una respuesta.</p>
|
|
34
|
+
<p>Si está en modo sentado y esperando (permanecer conectado), puede enviar <code>msg.reset = true</code> o <code>msg.reset = "host:port"</code> para forzar una interrupción en la conexión y una reconexión automática.</p>
|
|
33
35
|
<p>La respuesta se generará en <code>msg.payload</code> como un búfer, por lo que es posible que quieras utilizar .toString().</p>
|
|
34
36
|
<p>Si dejas el host TCP o el puerto en blanco, debes configurarlos utilizando las propiedades <code>msg.host</code> y <code>msg.port</code> en cada mensaje enviado al nodo.</p>
|
|
35
37
|
</script>
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
</dd>
|
|
36
36
|
</dl>
|
|
37
37
|
<h3>Detalles</h3>
|
|
38
|
-
<p>La plantilla de columnas puede contener una lista ordenada de nombres de columnas. Al convertir CSV en un objeto, los nombres de las columnas se utilizarán como nombres de propiedades. Alternativamente, los nombres de las columnas se pueden tomar de la primera fila del CSV
|
|
38
|
+
<p>La plantilla de columnas puede contener una lista ordenada de nombres de columnas. Al convertir CSV en un objeto, los nombres de las columnas se utilizarán como nombres de propiedades. Alternativamente, los nombres de las columnas se pueden tomar de la primera fila del CSV.
|
|
39
|
+
<p>Cuando se selecciona el analizador RFC, la plantilla de columna debe ser compatible con RFC4180.</p>
|
|
40
|
+
</p>
|
|
39
41
|
<p>Al convertir a CSV, la plantilla de columnas se utiliza para identificar qué propiedades extraer del objeto y en qué orden.</p>
|
|
40
42
|
<p>Si la plantilla de columnas está en blanco, puede utilizar una lista simple de propiedades separadas por comas proporcionada en <code>msg.columns</code> para determinar qué extraer y en qué orden. Si ninguno de los dos está presente, todas las propiedades del objeto se muestran en el orden en que se encuentran en la primera fila.</p>
|
|
41
43
|
<p>Si la entrada es una matriz, entonces la plantilla de columnas solo se usa para generar opcionalmente una fila de títulos de columnas.</p>
|
|
@@ -46,4 +48,5 @@
|
|
|
46
48
|
<p>Si genera varios mensajes, tendrán su propiedad <code>parts</code> configurada y formarán una secuencia de mensajes completa.</p>
|
|
47
49
|
<p>Si el nodo está configurado para enviar encabezados de columna solo una vez, si se configura <code>msg.reset</code> en cualquier valor hará que el nodo reenvíe los encabezados.</p>
|
|
48
50
|
<p><b>Nota:</b> la plantilla de columna debe estar separada por comas, incluso si se elige un separador diferente para los datos.</p>
|
|
51
|
+
<p><b>Nota:</b> en el modo RFC, se generarán errores detectables para encabezados CSV mal formados y datos de carga útil de entrada no válidos</p>
|
|
49
52
|
</script>
|
package/locales/fr/messages.json
CHANGED
|
@@ -1017,6 +1017,7 @@
|
|
|
1017
1017
|
"objectSend": "Envoie un message pour chaque paire clé/valeur",
|
|
1018
1018
|
"strBuff": "<b>Chaîne</b> / <b>Tampon</b>",
|
|
1019
1019
|
"array": "<b>Tableau</b>",
|
|
1020
|
+
"splitThe": "Diviser le",
|
|
1020
1021
|
"splitUsing": "Diviser en utilisant",
|
|
1021
1022
|
"splitLength": "Longueur fixe de",
|
|
1022
1023
|
"stream": "Gérer comme un flux de messages",
|
|
@@ -1046,6 +1047,7 @@
|
|
|
1046
1047
|
"joinedUsing": "joint en utilisant",
|
|
1047
1048
|
"send": "Envoyer le message :",
|
|
1048
1049
|
"afterCount": "Après un nombre de parties du message",
|
|
1050
|
+
"useparts": "Utiliser la propriété msg.parts existante",
|
|
1049
1051
|
"count": "nombre",
|
|
1050
1052
|
"subsequent": "Et tous les messages suivants.",
|
|
1051
1053
|
"afterTimeout": "Après un délai d'attente après le premier message",
|
|
@@ -1112,6 +1114,7 @@
|
|
|
1112
1114
|
"too-many": "Trop de messages en attente dans le noeud batch",
|
|
1113
1115
|
"unexpected": "Mode inattendu",
|
|
1114
1116
|
"no-parts": "Aucune propriété de pièces dans le message",
|
|
1117
|
+
"honourParts": "Autoriser msg.parts à compléter les opération par lots",
|
|
1115
1118
|
"error": {
|
|
1116
1119
|
"invalid-count": "Compte invalide",
|
|
1117
1120
|
"invalid-overlap": "Recouvrement invalide",
|
package/locales/ja/messages.json
CHANGED
|
@@ -1017,6 +1017,7 @@
|
|
|
1017
1017
|
"objectSend": "各key/valueペアのメッセージを送信",
|
|
1018
1018
|
"strBuff": "<b>文字列</b> / <b>バッファ</b>",
|
|
1019
1019
|
"array": "<b>配列</b>",
|
|
1020
|
+
"splitThe": "に基づく",
|
|
1020
1021
|
"splitUsing": "分割",
|
|
1021
1022
|
"splitLength": "固定長",
|
|
1022
1023
|
"stream": "メッセージのストリームとして処理",
|
|
@@ -1046,6 +1047,7 @@
|
|
|
1046
1047
|
"joinedUsing": "連結文字",
|
|
1047
1048
|
"send": "メッセージ送信:",
|
|
1048
1049
|
"afterCount": "指定数のメッセージパーツを受信後",
|
|
1050
|
+
"useparts": "既存のmsg.partsプロパティを使用",
|
|
1049
1051
|
"count": "合計値",
|
|
1050
1052
|
"subsequent": "後続のメッセージ毎",
|
|
1051
1053
|
"afterTimeout": "最初のメッセージ受信からのタイムアウト後",
|
|
@@ -1112,6 +1114,7 @@
|
|
|
1112
1114
|
"too-many": "batchノード内で保持しているメッセージが多すぎます",
|
|
1113
1115
|
"unexpected": "想定外のモード",
|
|
1114
1116
|
"no-parts": "メッセージにpartsプロパティがありません",
|
|
1117
|
+
"honourParts": "msg.partsを用いたbatch操作を許可",
|
|
1115
1118
|
"error": {
|
|
1116
1119
|
"invalid-count": "メッセージ数が不正",
|
|
1117
1120
|
"invalid-overlap": "オーバラップが不正",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"global": "contexto global",
|
|
45
45
|
"str": "Cadeia de caracteres",
|
|
46
46
|
"num": "número",
|
|
47
|
-
"bool": "booliano",
|
|
47
|
+
"bool": "booliano",
|
|
48
48
|
"json": "objeto",
|
|
49
49
|
"bin": "Armazenamento temporário",
|
|
50
50
|
"date": "Carimbo de data/hora",
|
|
@@ -352,8 +352,8 @@
|
|
|
352
352
|
}
|
|
353
353
|
},
|
|
354
354
|
"trigger": {
|
|
355
|
-
"send": "Enviar",
|
|
356
|
-
"then": "então",
|
|
355
|
+
"send": "Enviar",
|
|
356
|
+
"then": "então",
|
|
357
357
|
"then-send": "então enviem",
|
|
358
358
|
"output": {
|
|
359
359
|
"string": "a cadeia de caracteres",
|
|
@@ -446,7 +446,7 @@
|
|
|
446
446
|
"staticTopic": "Assinar um tópico único",
|
|
447
447
|
"dynamicTopic": "Assinatura dinâmica",
|
|
448
448
|
"auto-connect": "Conectar automaticamente",
|
|
449
|
-
"auto-mode-depreciated": "Esta opção está deprecada. Favor utilizar o novo modo de auto-detecção."
|
|
449
|
+
"auto-mode-depreciated": "Esta opção está deprecada. Favor utilizar o novo modo de auto-detecção."
|
|
450
450
|
},
|
|
451
451
|
"sections-label": {
|
|
452
452
|
"birth-message": "Mensagem enviada na conexão (mensagem de nascimento)",
|
|
@@ -466,8 +466,8 @@
|
|
|
466
466
|
"close-topic": "Deixe em branco para desativar a mensagem de fechamento"
|
|
467
467
|
},
|
|
468
468
|
"state": {
|
|
469
|
-
"connected": "Conectado ao negociante: _ broker _",
|
|
470
|
-
"disconnected": "Desconectado do negociante: _ broker _",
|
|
469
|
+
"connected": "Conectado ao negociante: _ broker _",
|
|
470
|
+
"disconnected": "Desconectado do negociante: _ broker _",
|
|
471
471
|
"connect-failed": "Falha na conexão com o negociante: __broker__",
|
|
472
472
|
"broker-disconnected": "Cliente de negociante __broker__ desconectado: __reasonCode__ __reasonString__"
|
|
473
473
|
},
|
|
@@ -898,7 +898,7 @@
|
|
|
898
898
|
"o2j": "Objeto para opções JSON",
|
|
899
899
|
"pretty": "Formatar cadeia de caracteres JSON",
|
|
900
900
|
"action": "Ação",
|
|
901
|
-
"property": "Propriedade",
|
|
901
|
+
"property": "Propriedade",
|
|
902
902
|
"actions": {
|
|
903
903
|
"toggle": "Converter entre cadeia de caracteres JSON e Objeto",
|
|
904
904
|
"str": "Sempre converter em cadeia de caracteres JSON",
|
|
@@ -929,7 +929,7 @@
|
|
|
929
929
|
"write": "escrever arquivo",
|
|
930
930
|
"read": "ler arquivo",
|
|
931
931
|
"filename": "Nome do arquivo",
|
|
932
|
-
"path": "caminho",
|
|
932
|
+
"path": "caminho",
|
|
933
933
|
"action": "Ação",
|
|
934
934
|
"addnewline": "Adicionar nova linha (\\n) a cada carga útil?",
|
|
935
935
|
"createdir": "Criar diretório se não existir?",
|
|
@@ -994,6 +994,7 @@
|
|
|
994
994
|
"objectSend": "Envia uma mensagem para cada par chave/valor",
|
|
995
995
|
"strBuff": "<b>Cadeia de caracteres</b> / <b>Armazenamento Temporário</b>",
|
|
996
996
|
"array": "<b>Matriz</b>",
|
|
997
|
+
"splitThe": "Dividir",
|
|
997
998
|
"splitUsing": "Dividir usando",
|
|
998
999
|
"splitLength": "Comprimento fixo de",
|
|
999
1000
|
"stream": "Tratar como uma transmissão de mensagens",
|
|
@@ -1066,9 +1067,9 @@
|
|
|
1066
1067
|
"batch" : {
|
|
1067
1068
|
"batch": "lote",
|
|
1068
1069
|
"mode": {
|
|
1069
|
-
"label": "Modo",
|
|
1070
|
-
"num-msgs": "Agrupar por número de mensagens",
|
|
1071
|
-
"interval": "Agrupar por intervalo de tempo",
|
|
1070
|
+
"label": "Modo",
|
|
1071
|
+
"num-msgs": "Agrupar por número de mensagens",
|
|
1072
|
+
"interval": "Agrupar por intervalo de tempo",
|
|
1072
1073
|
"concat": "Concatenar sequências"
|
|
1073
1074
|
},
|
|
1074
1075
|
"count": {
|
package/locales/ru/messages.json
CHANGED
|
@@ -874,6 +874,7 @@
|
|
|
874
874
|
"objectSend":"Отправлять сообщение для каждой пары ключ/значение",
|
|
875
875
|
"strBuff":"<b>Строка</b> / <b>Буфер</b>",
|
|
876
876
|
"array":"<b>Массив</b>",
|
|
877
|
+
"splitThe": "Pазделить",
|
|
877
878
|
"splitUsing":"С помощью",
|
|
878
879
|
"splitLength":"Фикс. длина",
|
|
879
880
|
"stream":"Обрабатывать как поток сообщений",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-red/nodes",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.4",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,20 +15,20 @@
|
|
|
15
15
|
}
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"acorn": "8.
|
|
19
|
-
"acorn-walk": "8.3.
|
|
20
|
-
"ajv": "8.
|
|
21
|
-
"body-parser": "1.20.
|
|
18
|
+
"acorn": "8.12.1",
|
|
19
|
+
"acorn-walk": "8.3.4",
|
|
20
|
+
"ajv": "8.17.1",
|
|
21
|
+
"body-parser": "1.20.3",
|
|
22
22
|
"cheerio": "1.0.0-rc.10",
|
|
23
23
|
"content-type": "1.0.5",
|
|
24
|
-
"cookie-parser": "1.4.
|
|
25
|
-
"cookie": "0.
|
|
24
|
+
"cookie-parser": "1.4.7",
|
|
25
|
+
"cookie": "0.7.2",
|
|
26
26
|
"cors": "2.8.5",
|
|
27
27
|
"cronosjs": "1.7.1",
|
|
28
28
|
"denque": "2.1.0",
|
|
29
29
|
"form-data": "4.0.0",
|
|
30
30
|
"fs-extra": "11.2.0",
|
|
31
|
-
"got": "12.6.
|
|
31
|
+
"got": "12.6.1",
|
|
32
32
|
"hash-sum": "2.0.0",
|
|
33
33
|
"hpagent": "1.2.0",
|
|
34
34
|
"https-proxy-agent": "5.0.1",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"mustache": "4.2.0",
|
|
41
41
|
"node-watch": "0.7.4",
|
|
42
42
|
"on-headers": "1.0.2",
|
|
43
|
-
"raw-body": "
|
|
44
|
-
"tough-cookie": "
|
|
43
|
+
"raw-body": "3.0.0",
|
|
44
|
+
"tough-cookie": "^5.0.0",
|
|
45
45
|
"uuid": "9.0.1",
|
|
46
46
|
"ws": "7.5.10",
|
|
47
47
|
"xml2js": "0.6.2",
|