* fixed#2790 swapped description of encodeUrl/encodeUrlComponent and decodeUrl/decodeUrlComponent
* fixed#2790 swapped description of encodeUrl/encodeUrlComponent and decodeUrl/decodeUrlComponent also in ja, ru, zh-CN and zh-TW
* Fix for HTTP-Request not sending body for GET
Background in SO question:
https://stackoverflow.com/q/60356824/504554
* Prevent crash when coreNodesDir points to empty dir
This should prevent a crash when you point to an empty core nodes
directory.
* Matching upstream master
Adds a `_` function to the plugin definition object that will automatically
prepend the plugin's module namespace to any call. This saves the plugin
from having to prepend its namespace all of the time.
* add the ability to set the projects path
* Update packages/node_modules/@node-red/runtime/locales/en-US/runtime.json
use directory to keep consistency with the project
Co-authored-by: Nick O'Leary <nick.oleary@gmail.com>
* Update packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/index.js
only show the projects directory is projects are enabled
Co-authored-by: Nick O'Leary <nick.oleary@gmail.com>
* use "directory" instead of "folder" to keep consistency with the Node-RED project
Co-authored-by: Nick O'Leary <nick.oleary@gmail.com>
The exec and events components are common components that
are used by both runtime and registry. It makes sense to
move them into the util package.
This also adds some docs to the registry module
The grunt-nodemon module we were using is no longer
maintained and is stuck on a 1.x version of nodemon.
At that version, node-red doesn't restart properly
due to our increased signal handling in the core.
This change removes grunt-nodemon and replaces it
with nodemon itself, with a custom task to wrap it
that does the same work as grunt-nodemon was doing.
In the case of an "Unmatched {" error, it flags the { on
the line we wrap the user's code in. That doesn't help the
user.
This fix moves such an error to the first valid { in the file.
It handles ignoring { in comments or strings. It fails to ignore
{ inside regex. But that's an edge case on top of an edge case.
This is a slightly scary set of changes to be making. It overhauls
how the view is rendered.
Rather than use d3 for every single part of generating the view,
we new use native DOM functions as much as possible.
d3 is still used for the basic heavy lifting of working out what
nodes/links etc need to be added/removed from the view. But once
it comes to rendering them, d3 is side-lined as much as possible.
There's room for further improvement. This change focusses on Nodes
and Links. It has not touched groups, subflow-ports and link-nodes.
Whenever a DOM element is modified, it causes the browser to re-examine
the whole hierarchy around the element to see if anything needs to change.
This can cause a lot of extra work if an element is added to the DOM and
then a lot of updates are applied to the element.
It is much better to get the element as close to its final state as
possible *before* adding it to the DOM.
- puts the node version check first
- validates the refresh interval and keeps it in valid range
- simplifies the error messages
- uses parseFloat not parseInt so we can use fractions of hour
Adds the actions:
- core:activate-all-debug-nodes
- core:activate-all-flow-debug-nodes
to match the deactivate* actions.
Also adds:
- core:activate-selected-debug-nodes
- core:deactivate-selected-debug-nodes
Adds a new httpAdmin route - /debug/(enable/disable) - that can be
use to bulk enable/disable nodes via HTTP Post.
Closes#2567
This ensures when the node:added event fires, all possible
changes have already been applied such as remapping node ids.
This avoids the need to emit a separate node:changed event.
All data items now get their `item.treeList` api added even if deferBuild is set.
This means the apis can be used regardless of whether the tree has built their
ui pieces.
Also adds a number of new api calls
Top-level methods:
- clearSelection - clears selection from the list
- filter(filterFunc) - filters the tree using the provided function
Data item functions:
- item.treeList.sortChildren(sortFunction)
- item.treeList.replaceElement(element)
This introduces a much more consistent set of events within the editor
for whenever a element is added, removed or modified.
The events emited on the `RED.events` event system. The event names
take the form: `"<thing>:<action>"`.
`<thing>` can be one of:
- nodes
- flows
- subflows
- groups
- links
`<action>` can be one of:
- add
- remove
- change
The payload of the events is the object in question.
There is also:
- flows:reorder - when tabs are reordered. Payload is array of flow ids.
- workspace:clear - when the workspace is emptied - part of switching projects
The `nodes:change` event was already used by RED.nodes.dirty() to cause
the Deploy button to become active. This renames that event to:
- workspace:dirty - Payload is boolean flag for the dirty state
This commit also updates the Palette to use the subflows:change event to
only redraw subflows that have actually changed rather than refresh them
all whenever one of them *might* have changed. This removes a noticable
flicker of the icon which was needlessly being redrawn.
Fixes#2513
If a node inside a subflow accessed its context object in its
constructor, the subflow-instance flow context would not yet
have been created. This would cause a place holder context
to get created on its behalf, but that place holder doesn't
have its parent set properly. This then breaks the usage
of $parent inside such a subflow.
This fix has changed it so flows (and subflows) create their
flow context as part of their initial creation. That ensures
it exists when individual nodes from the subflow are created,
allowing them to safely access their context.
This has also fixed a related issue where any attempt to use
$parent to access beyond the root parent would seemingly hang
as the callback was never being called. This would cause
messages to get stuck in flows. The fix ensures the callback
is used in the root context objects and undefined is returned.
This moves the expensive redraw code out of the event handling phase
and onto the browser's repaint phase. This makes the event handling
more responsive, particularly when dragging a large number of nodes.
It also removes lots of unnecessary anonymous functions in the redraw
code that should also improve performance.
* [CSV node] Add support for parsing empty strings and null values
* Add new lines at the end and fix script type.
* Last one script type fix
* Naming change
* Update page object of change node
* Support multiple node outputs in UI testing
* Add page object of switch node
* Add page objects of trigger and exec nodes
* Remove unnecessary code
* Update page object of trigger node to select time unit
* Add page objects of websocket nodes
* Support boolean as value in selectWithWait()
* Update page object of split node
* Merge page objects of mqtt nodes to make them same as original mqtt node file path
The function prepareJSONataExpression() does not take context store into account.
This causes problems when using typedInput fields and getting the value of a property based on its type using evaluateNodeProperty().
fixes#2469
this is a major version bump of https-proxy-agent, because they set engine to >6 and did some refactoring, which is ok for node-red.
all tests pass.
Fixes#2445
Continuing the arms race against Chrome's war on developers getting
to choose if a form should be autocompleted or not.
The honey-pot username/password fields we already had were being
ignored. This is because they were hidden.
This fix does three things:
- unhides the honey-pot inputs, but moves them offscreen so they won't be seen
- gives them dummy id's so Chrome thinks they are username/password fields
- updates our autocomplete setting to be the standards-compliant 'off' for all
the other browsers who adhere to the standard
This label is used for the user definable properties form-row. The word properties is duplicated with the tab description, but it best descrbies the form-rows content. If another name is chosen, this entry can be deleted.
Fixes#2358
This property can be used to identify the full path to the node that
logged a given message. If the node is inside a subflow (and maybe
nested many levels deep), this path can be used to help find the
node, rather than just the top-level subflow instance node.
A side-effect of this change is the Debug sidebar is now able to
show the message tools for a message coming from a deeply nested
subflow
Symptom- Observed that global context would not display in front end, the call returning 400.
Traced to an object in global which cause encodeObject to except.
This push catches that, and now global will display, but the object in question display as an error.
When using the file-in node and ‘a msg per line’ the last line does not get msg.topic passed.
In the
.on(‘end’, function() {
code (starting at line 334) the msg is created but no msg.topic is set. Adding
topic:msg.topic,
after line 343 (var m = { payload: spare,) fixes the issue.
Fixes an issue where, if the number of node outputs was changes
the node would resize, but the status text would not reposition
until a new status message arrived.
This change marks status as dirty whenever the node has been
edited, forcing it to be redrawn.
The grunt watch task is used by the grunt dev task that watches for
changes and auto rebuilds the editor js.
When running in dev mode, the editor will load the unminified version
of red.js. This means there is no point in running the uglify task to
generate the minified version. The uglify task tasks a few seconds and
if you do a couple rapid saves, the second will often not get built as
the previous uglify task was still running.
Removing it from the dev task shouldn't have any side effects. It still
forms part of the `grunt build` and `grunt release` tasks where it is
needed.
Having removed the ui test dependencies out of package.json
we can remove the 'allow failures' flag from the node 12 build.
Given how close Node 12 is to being LTS, we really need to pay
proper attention to it.
Given chromedriver was already an extra dependency that needed to
be manually installed, I have now moved all of the webdriver.io
dependencies out as well.
A new script has been added to install all of the ui test dependencies.
The Grunt file has been updated on how it checks for the missing
deps.
fixes#2240
It looks like the regex for the /nodes/... endpoints over matches.
I've added `^` to the start to anchor the matches to the start of the
URL.
If the label contains an img, the width calculation needs
to wait for the img to be loaded. This fix is a bit hacky
as it doesn't actually tie into the onload event, but should
be good enough
formData can only be Strings or Buffers - anything else will cause
errors. To help matters, we now look for invalid types and json-encode
them where needed.
When listing icons provided by a module, if there is a png and svg
with the same name, only the svg will be listed.
If a node asks for a png icon which is not known, but there is a
corresponding svg, that will be used instead.
Fixes#2216
This was broken when we switched from media-typer to content-type
modules for parsing the content-type header.
The content-type header can handle the field with parameters, but
does not do the type/sub-type parsing that media-typer does.
Our code relied on that extra bit of parsing to correctly
identify if the content should be parsed to String or kept as
a buffer.
The fix restores the use of media-typer, but using the result
of the content-type module to make sure it valid
formData can only be Strings or Buffers - anything else will cause
errors. To help matters, we now look for invalid types and json-encode
them where needed.
Currently, everytime the tab is switched, we recalculate the
width of every node. There's no need to do that as the width
will not have changed - unless it has changed, but then the
dirty/changed flag will be set on that one node and it will
get handled.
Also avoid endless added/removing an element to calculate the
dimenstions - keep it on the dom (keyed by className) and
positioned well away from the visible space.
This gets stored in localStorage of the browser which is not
ideal. This is because we load language catalogs before we
load user preferences - so if this was stored in the runtime,
the editor wouldn't know the user's preference until it was
too late to apply it.
This is likely good enough for now - may need to do something
more convoluted later on.
The way we dynamically added/removed event handlers for the
upgrade event was causing problems with the way sockjs (as
used by the worldmap node) tries to intercept the event.
This fix means the ws nodes won't ever remove the upgrade
listener - it gets added once when the first ws node is
deployed and will then remain until the last ws node is
removed and the runtime restarted.
Please use the [Node-RED Forum](https://discourse.nodered.org) or [slack team](https://nodered.org/slack).
Please DO NOT raise an issue.
You could also consider asking a question on [Stack Overflow](https://stackoverflow.com/questions/tagged/node-red) and tag it `node-red`.
We DO NOT use the issue tracker for general support or feature requests. Only bug reports should be raised here using the 'Bug report' template.
For general support, please use the [Node-RED Forum](https://discourse.nodered.org) or [slack team](https://nodered.org/slack). You could also consider asking a question on [Stack Overflow](https://stackoverflow.com/questions/tagged/node-red) and tag it `node-red`.
That way the whole Node-RED user community can help, rather than rely on the core development team.
For feature requests, please use the Node-RED Forum](https://discourse.nodered.org). Many ideas have already been discussed there and you should search that for your request before starting a new discussion.
"missing-types":"<p> Die Flows wurden aufgrund fehlender Nodetypen gestoppt. </p>",
"restartRequired":"Node-RED muss erneut gestartet werden, damit aufgerüstete Module aktiviert werden können",
"credentials_load_failed":"<p> Die Flows wurden gestoppt, da die Berechtigungsnachweise nicht entschlüsselt werden konnten. </p> <p> Die Datei mit dem Datenflowberechtigungsnachweis ist verschlüsselt, aber der Verschlüsselungsschlüssel des Projekts fehlt oder ist ungültig. </p>",
"credentials_load_failed_reset":"<p> Die Berechtigungsnachweise konnten nicht entschlüsselt werden </p> <p> Die Datei mit dem Flow-Berechtigungsnachweis ist verschlüsselt, aber der Chiffrierschlüssel des Projekts fehlt oder ist ungültig. </p> <p> Die Datei des Flow-Berechtigungsnachweises wird bei der nächsten Implementierung zurückgesetzt. Alle vorhandenen Datenflowberechtigungsnachweise werden gelöscht. </p>",
"missing_flow_file":"<p> Die Projektflowdatei wurde nicht gefunden. </p> <p> Das Projekt ist nicht mit einer Flow-Datei konfiguriert. </p>",
@@ -136,19 +132,19 @@
}
},
"clipboard":{
"nodes":"Knoten",
"selectNodes":"Wählen Sie den Text oben aus, und kopieren Sie die Datei in die Zwischenablage.",
"pasteNodes":"Knoten hier einfügen",
"importNodes":"Knoten importieren",
"exportNodes":"Knoten in Zwischenablage exportieren",
"clipboard":"Zwischenablage",
"nodes":"Nodes",
"pasteNodes":"Nodes hier einfügen",
"importNodes":"Nodes importieren",
"exportNodes":"Nodes in Zwischenablage exportieren",
"importUnrecognised":"Importierter Typ nicht erkannt:",
"importUnrecognised_plural":"Importierte Typen nicht erkannt:",
"nodesExported":"Knoten, die in die Zwischenablage exportiert wurden",
"nodeCopied":"__count__ Knoten kopiert",
"nodeCopied_plural":"__count__ Knoten kopiert",
"nodesExported":"Nodes, die in die Zwischenablage exportiert wurden",
"catalogLoadFailed":"<p> Fehler beim Laden des Knotenkatalogs. </p> <p> Weitere Informationen finden Sie in der Browserkonsole. </p>",
"catalogLoadFailed":"<p> Fehler beim Laden des Node-Katalogs. </p> <p> Weitere Informationen finden Sie in der Browserkonsole. </p>",
"installFailed":"<p> Installation fehlgeschlagen: __module__ </p> <p> __message__ </p> <p> Überprüfen Sie das Protokoll auf weitere Informationen. </p>",
"removeFailed":"<p> Entfernen fehlgeschlagen: __module__ </p> <p> __message__ </p> <p> Überprüfen Sie das Protokoll auf weitere Informationen. </p>",
"updateFailed":"<p> Aktualisierung fehlgeschlagen: __module__ </p> <p> __message__ </p> <p> Überprüfen Sie das Protokoll auf weitere Informationen. </p>",
@@ -393,22 +385,22 @@
},
"confirm":{
"install":{
"body":"<p> Installieren von '__module__' </p> <p> Vor der Installation von lesen Sie bitte die Dokumentation des Knotens. Einige Knoten haben Abhängigkeiten, die nicht automatisch aufgelöst werden können und einen Neustart von 'Node-RED' erfordern. </p>",
"title":"Knoten installieren"
"body":"<p> Installieren von '__module__' </p> <p> Vor der Installation von lesen Sie bitte die Dokumentation des Nodes. Einige Nodes haben Abhängigkeiten, die nicht automatisch aufgelöst werden können und einen Neustart von 'Node-RED' erfordern. </p>",
"title":"Nodes installieren"
},
"remove":{
"body":"<p> Entfernen von '__module__' </p> <p>-Der Knoten deinstalliert ihn aus Node-RED. Der Knoten kann weiterhin Ressourcen verwenden, bis Node-RED erneut gestartet wird. </p>",
"title":"Knoten entfernen"
"body":"<p> Entfernen von '__module__' </p> <p>-Der Node deinstalliert ihn aus Node-RED. Der Node kann weiterhin Ressourcen verwenden, bis Node-RED erneut gestartet wird. </p>",
"title":"Nodes entfernen"
},
"update":{
"body":"<p> Aktualisieren von '__module__' </p> <p> Für die Aktualisierung des Knotens ist ein Neustart von 'Node-RED' erforderlich, damit die Aktualisierung abgeschlossen werden kann. Dies muss manuell geschehen. </p>",
"title":"Knoten aktualisieren"
"body":"<p> Aktualisieren von '__module__' </p> <p> Für die Aktualisierung des Nodes ist ein Neustart von 'Node-RED' erforderlich, damit die Aktualisierung abgeschlossen werden kann. Dies muss manuell geschehen. </p>",
"title":"Nodes aktualisieren"
},
"cannotUpdate":{
"body":"Es ist eine Aktualisierung für diesen Knoten verfügbar, aber sie ist nicht an einer Position installiert, die vom Palettenmanager aktualisiert werden kann. <br/> <br/> Weitere Informationen zum Aktualisieren dieses Knotens finden Sie in der Dokumentation."
"body":"Es ist eine Aktualisierung für diesen Node verfügbar, aber sie ist nicht an einer Position installiert, die vom Palettenmanager aktualisiert werden kann. <br/> <br/> Weitere Informationen zum Aktualisieren dieses Nodes finden Sie in der Dokumentation."
},
"button":{
"review":"Knoteninformationen öffnen",
"review":"Node-Informationen öffnen",
"install":"installieren",
"remove":"Entfernen",
"update":"Aktualisieren"
@@ -418,10 +410,10 @@
},
"sidebar":{
"info":{
"name":"Knoteninformationen",
"name":"Node-Informationen",
"tabName":"Name",
"label":"info",
"node":"Knoten",
"node":"Node",
"type":"Typ",
"id":"ID",
"status":"Status",
@@ -437,32 +429,32 @@
"showLess":"Weniger anzeigen",
"flow":"Flow",
"selection":"Auswahl",
"nodes":"__count__ Knoten",
"nodes":"__count__ Nodes",
"flowDesc":"Beschreibung des Flows",
"subflowDesc":"Beschreibung des Subflows",
"nodeHelp":"Knotenhilfe",
"nodeHelp":"Node-Hilfe",
"none":"Keine",
"arrayItems":"__count__ items",
"showTips":"Sie können die Tipps in der Anzeige \"Einstellungen\" öffnen."
},
"config":{
"name":"Konfigurationsknoten",
"name":"Konfigurations-Node",
"label":"Konfiguration",
"global":"Bei allen Flows",
"none":"keine",
"subflows":"Subflows",
"flows":"Flows",
"filterUnused":"Nicht verwendet",
"filterAll":"alle",
"filterUnused":"Nicht verwendet",
"filtered":"__count__ verdeckt"
},
"context":{
"name":"Kontextdaten",
"label":"Kontext",
"none":"keine ausgewählt",
"refresh":"Aktualisierung zum Laden",
"refresh":"Zum Aktualisieren neu laden",
"empty":"leer",
"node":"Knoten",
"node":"Node",
"flow":"Flow",
"global":"Global"
},
@@ -485,7 +477,7 @@
"none":"Keine",
"install":"installieren",
"removeFromProject":"Aus Projekt entfernen",
"addToProject":"zu Projekt hinzufügen",
"addToProject":"Zu Projekt hinzufügen",
"files":"Dateien",
"flow":"Flow",
"credentials":"Berechtigungsnachweis",
@@ -518,7 +510,7 @@
},
"userSettings":{
"committerDetail":"Committer-Details",
"committerTip":"Leer Wert für Systemstandardwert belassen",
"committerTip":"Leer lassen für Systemstandard",
"userName":"Benutzername",
"email":"E-Mail",
"sshKeys":"SSH-Schlüssel",
@@ -552,7 +544,7 @@
"revertChanges":"Änderungen zurücksetzen",
"localChanges":"Lokale Änderungen",
"none":"Keine",
"conflictResolve":"Alle Konflikte wurden aufgelöst. Festschreiben der Änderungen, um den Mischvorgang abzuschließen.",
"conflictResolve":"Alle Konflikte wurden aufgelöst. Committe die Änderungen, um den Merge Request abzuschließen.",
"modeDesc":"<h3> Puffereditor </h3> <p> Der Puffertyp wird als JSON-Array mit Bytewerten gespeichert. Der Editor versucht, den eingegebenen Wert als JSON-Array zu parsen. Wenn es sich nicht um ein gültiges JSON handelt, wird es als UTF-8-Zeichenfolge behandelt und in ein Array der einzelnen Zeichencodepunkte konvertiert. </p> <p> Beispiel: Der Wert <code> Hello World </code> wird in das JSON-Array konvertiert: <pre> [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100] </pre> </p>"
"modeDesc":"<h3> Buffereditor </h3> <p> Der Buffertyp wird als JSON-Array mit Bytewerten gespeichert. Der Editor versucht, den eingegebenen Wert als JSON-Array zu parsen. Wenn es sich nicht um ein gültiges JSON handelt, wird es als UTF-8-Zeichenfolge behandelt und in ein Array der einzelnen Zeichencodepunkte konvertiert. </p> <p> Beispiel: Der Wert <code> Hello World </code> wird in das JSON-Array konvertiert: <pre> [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100] </pre> </p>"
"tip0":"Sie können die ausgewählten Knoten oder Verbindungen mit {{ core:delete-selection }} entfernen.",
"tip1":"Suche nach Knoten mit {{ core:search }}",
"tip0":"Sie können die ausgewählten Nodes oder Verbindungen mit {{ core:delete-selection }} entfernen.",
"tip1":"Suche nach Nodes mit {{ core:search }}",
"tip2":"{{ core:toggle-sidebar }} schaltet die Ansicht dieser Seitenleiste ein.",
"tip3":"Sie können Ihre Palette von Knoten mit {{ core:manage-palette }} verwalten.",
"tip4":"Ihre Flow-Konfigurationsknoten werden in der Seitenleiste angezeigt. Es kann über das Menü oder mit {{ core:show-config-tab }} aufgerufen werden.",
"tip3":"Sie können Ihre Palette von Nodes mit {{ core:manage-palette }} verwalten.",
"tip4":"Ihre Flow-Konfigurations-Nodes werden in der Seitenleiste angezeigt. Es kann über das Menü oder mit {{ core:show-config-tab }} aufgerufen werden.",
"tip5":"Aktiviert oder inaktiviert diese Tipps von der Option in den Einstellungen",
"tip6":"Verschieben Sie die ausgewählten Knoten mit Hilfe der [left] [up] [down] und [right] Tasten. Halten Sie [Shift] gedrückt, um das Fenster weiter zu schieben",
"tip7":"Wenn Sie einen Knoten auf eine Verbindung ziehen, wird er in die Verbindung eingefügt.",
"tip8":"Die ausgewählten Knoten exportieren oder die aktuelle Registerkarte mit {{ core:show-export-dialog }}",
"tip6":"Verschieben Sie die ausgewählten Nodes mit Hilfe der [left] [up] [down] und [right] Tasten. Halten Sie [Shift] gedrückt, um das Fenster weiter zu schieben",
"tip7":"Wenn Sie einen Node auf eine Verbindung ziehen, wird er in die Verbindung eingefügt.",
"tip8":"Die ausgewählten Nodes exportieren oder die aktuelle Registerkarte mit {{ core:show-export-dialog }}",
"tip9":"Importieren Sie einen Flow, indem Sie sein JSON in den Editor ziehen oder mit {{ core:show-import-dialog }}.",
"tip10":"[Umschalt] [Klicken] und ziehen Sie auf einen Knotenanschluss, um alle angeschlossenen Verbindungen oder nur die ausgewählte zu verschieben.",
"tip10":"[Umschalt] [Klicken] und ziehen Sie auf einen Node-Anschluss, um alle angeschlossenen Verbindungen oder nur die ausgewählte zu verschieben.",
"tip11":"Die Registerkarte \"Info\" mit {{ core:show-info-tab }} oder der Registerkarte \"Debug\" mit {{ core:show-debug-tab }} anzeigen",
"tip12":"[ctrl] [Klicken] in den Arbeitsbereich, um den Schnellhinzufügedialog zu öffnen.",
"tip13":"Halten Sie [ctrl] gedrückt, wenn Sie auf einem Knotenanschluss klicken, um eine Schnellverbindung zu aktivieren.",
"tip14":"Halten Sie [Umschalt] gedrückt, wenn Sie auf einen Knoten klicken, um auch alle verbundenen Knoten auszuwählen.",
"tip15":"Halten Sie [ctrl] gedrückt, wenn Sie auf einen Knoten klicken, um ihn aus der aktuellen Auswahl hinzuzufügen oder zu entfernen.",
"tip13":"Halten Sie [ctrl] gedrückt, wenn Sie auf einem Node-Anschluss klicken, um eine Schnellverbindung zu aktivieren.",
"tip14":"Halten Sie [Umschalt] gedrückt, wenn Sie auf einen Node klicken, um auch alle verbundenen Nodes auszuwählen.",
"tip15":"Halten Sie [ctrl] gedrückt, wenn Sie auf einen Node klicken, um ihn aus der aktuellen Auswahl hinzuzufügen oder zu entfernen.",
"tip16":"Indexzungen wechseln mit {{ core:show-previous-tab }} und {{ core:show-next-tab }}",
"tip17":"Sie können die Änderungen im Editierrahmen des Knotens mit {{ core:confirm-edit-tray }} bestätigen oder sie mit {{ core:cancel-edit-tray }} abbrechen.",
"tip18":"Durch Drücken von {{ core:edit-selected-node }} wird der erste Knoten in der aktuellen Auswahl bearbeitet."
"tip17":"Sie können die Änderungen im Editierrahmen des Nodes mit {{ core:confirm-edit-tray }} bestätigen oder sie mit {{ core:cancel-edit-tray }} abbrechen.",
"tip18":"Durch Drücken von {{ core:edit-selected-node }} wird der erste Node in der aktuellen Auswahl bearbeitet."
"desc":"Generiert eine Zeitmarke im ISO-8601-kompatiblen Format und gibt sie als Zeichenfolge zurück."
"desc":"Generiert einen Zeitstempel im ISO-8601-kompatiblen Format und gibt sie als Zeichenfolge zurück."
},
"$base64encode":{
"args":"Zeichenfolge",
@@ -201,7 +201,7 @@
},
"$fromMillis":{
"args":"Anzahl",
"desc":"Konvertieren Sie eine Zahl, die Millisekunden seit der Unix-Epoche (1. Januar 1970 (UTC)) in eine Zeitmarkenzeichenfolge im ISO 8601-Format darstellt."
"desc":"Konvertieren Sie eine Zahl, die Millisekunden seit der Unix-Epoche (1. Januar 1970 (UTC)) enthält in eine Zeitangabe im ISO 8601-Format."
},
"$formatNumber":{
"args":"Zahl, Bild [, Optionen]",
@@ -212,8 +212,8 @@
"desc":"Transformiere die `Zahl` in eine Zeichenfolge und formatiert sie in eine ganze Zahl, die in der durch das `radix` -Argument angegebenen Zahlenbasis dargestellt wird. Wenn 'radix' nicht angegeben wird, wird standardmäßig die Basis 10 verwendet. 'radix` kann zwischen 2 und 36 liegen, andernfalls wird ein Fehler ausgelöst."
},
"$toMillis":{
"args":"Zeitmarke",
"desc":"Konvertieren Sie eine Zeichenfolge `Zeitmarke' im ISO 8601-Format in die Anzahl der Millisekunden seit der Unix-Epoche (1. Januar 1970 (UTC)) als Zahl. Es wird ein Fehler ausgelöst, wenn die Zeichenfolge nicht das richtige Format hat."
"args":"timestamp",
"desc":"Konvertieren Sie eine Zeitangabe im ISO 8601-Format in die Anzahl der Millisekunden seit der Unix-Epoche (1. Januar 1970 (UTC)) als Zahl. Es wird ein Fehler ausgelöst, wenn die Zeichenfolge nicht das richtige Format hat."
"recoveredNodesInfo":"The nodes on this flow were missing a valid flow id when they were imported. They have been added to this flow so you can either restore or delete them.",
"recoveredNodesNotification":"<p>Imported nodes without a valid flow id</p><p>They have been added to a new flow called '__flowName__'.</p>",
"export":{
"selected":"selected nodes",
"current":"current flow",
"all":"all flows",
"compact":"compact",
"formatted":"formatted",
"copy":"Export to clipboard"
"copy":"Copy to clipboard",
"export":"Export to library",
"exportAs":"Export as",
"overwrite":"Replace",
"exists":"<p><b>\"__file__\"</b> already exists.</p><p>Do you want to replace it?</p>"
},
"import":{
"import":"Import to",
"importSelected":"Import selected",
"importCopy":"Import copy",
"viewNodes":"View nodes...",
"newFlow":"new flow",
"replace":"replace",
"errors":{
"notArray":"Input not a JSON Array",
"itemNotObject":"Input not a valid flow - item __index__ not a node object",
"missingId":"Input not a valid flow - item __index__ missing 'id' property",
"missingType":"Input not a valid flow - item __index__ missing 'type' property"
}
},
"conflictNotification1":"Some of the nodes you are importing already exist in your workspace.",
"conflictNotification2":"Select which nodes to import and whether to replace the existing nodes, or to import a copy of them."
},
"copyMessagePath":"Path copied",
"copyMessageValue":"Value copied",
@@ -282,8 +338,20 @@
"output":"outputs:",
"status":"status node",
"deleteSubflow":"delete subflow",
"confirmDelete":"Are you sure you want to delete this subflow?",
"info":"Description",
"category":"Category",
"module":"Module",
"license":"License",
"licenseOther":"Other",
"type":"Node Type",
"version":"Version",
"versionPlaceholder":"x.y.z",
"keys":"Keywords",
"keysPlaceholder":"Comma-separated keywords",
"author":"Author",
"authorPlaceholder":"Your Name <email@example.com>",
"desc":"Description",
"env":{
"restore":"Restore to subflow default",
"remove":"Remove environment variable"
@@ -293,6 +361,13 @@
"multipleInputsToSelection":"<strong>Cannot create subflow</strong>: multiple inputs to selection"
}
},
"group":{
"editGroup":"Edit group: __name__",
"errors":{
"cannotCreateDiffGroups":"Cannot create group using nodes from different groups",
"cannotAddSubflowPorts":"Cannot add subflow ports to a group"
}
},
"editor":{
"configEdit":"Edit",
"configAdd":"Add",
@@ -306,10 +381,12 @@
"addNewType":"Add new __type__...",
"nodeProperties":"node properties",
"label":"Label",
"color":"Color",
"portLabels":"Port labels",
"labelInputs":"Inputs",
"labelOutputs":"Outputs",
"settingIcon":"Icon",
"default":"default",
"noDefaultLabel":"none",
"defaultLabel":"use default label",
"searchIcons":"Search icons",
@@ -317,8 +394,47 @@
"description":"Description",
"show":"Show",
"hide":"Hide",
"locale":"Select UI Language",
"icon":"Icon",
"inputType":"Input type",
"selectType":"select types...",
"loadCredentials":"Loading node credentials",
"inputs":{
"input":"input",
"select":"select",
"checkbox":"checkbox",
"spinner":"spinner",
"none":"none",
"hidden":"hide property"
},
"types":{
"str":"string",
"num":"number",
"bool":"bool",
"json":"JSON",
"bin":"buffer",
"env":"env variable",
"cred":"credential"
},
"menu":{
"input":"input",
"select":"select",
"checkbox":"checkbox",
"spinner":"spinner",
"hidden":"label only"
},
"select":{
"label":"Label",
"value":"Value"
},
"spinner":{
"min":"Minimum",
"max":"Maximum"
},
"errors":{
"scopeChange":"Changing the scope will make it unavailable to nodes in other flows that use it"
"scopeChange":"Changing the scope will make it unavailable to nodes in other flows that use it",
"invalidProperties":"Invalid properties:",
"credentialLoadFailed":"Failed to load node credentials"
}
},
"keyboard":{
@@ -346,25 +462,26 @@
"pasteNode":"Paste nodes",
"undoChange":"Undo the last change performed",
"searchBox":"Open search box",
"managePalette":"Manage palette"
"managePalette":"Manage palette",
"actionList":"Action list"
},
"library":{
"library":"Library",
"openLibrary":"Open Library...",
"saveToLibrary":"Save to Library...",
"typeLibrary":"__type__ library",
"unnamedType":"Unnamed __type__",
"exportToLibrary":"Export nodes to library",
"exportedToLibrary":"Nodes exported to library",
"dialogSaveOverwrite":"A __libraryType__ called __libraryName__ already exists. Overwrite?",
"invalidFilename":"Invalid filename",
"savedNodes":"Saved nodes",
"savedType":"Saved __type__",
"saveFailed":"Save failed: __message__",
"filename":"Filename",
"folder":"Folder",
"filenamePlaceholder":"file",
"fullFilenamePlaceholder":"a/b/file",
"folderPlaceholder":"a/b",
"breadcrumb":"Library"
"newFolder":"New folder",
"types":{
"local":"Local",
"examples":"Examples"
}
},
"palette":{
"noInfo":"no information available",
@@ -373,9 +490,13 @@
"addCategory":"Add new...",
"label":{
"subflows":"subflows",
"network":"network",
"common":"common",
"input":"input",
"output":"output",
"function":"function",
"sequence":"sequence",
"parser":"parser",
"social":"social",
"storage":"storage",
"analysis":"analysis",
@@ -441,6 +562,8 @@
"sortAZ":"a-z",
"sortRecent":"recent",
"more":"+ __count__ more",
"upload":"Upload module tgz file",
"refresh":"Refresh module list",
"errors":{
"catalogLoadFailed":"<p>Failed to load node catalogue.</p><p>Check the browser console for more information</p>",
"installFailed":"<p>Failed to install: __module__</p><p>__message__</p><p>Check the log for more information</p>",
@@ -476,11 +599,12 @@
},
"sidebar":{
"info":{
"name":"Node information",
"name":"Information",
"tabName":"Name",
"label":"info",
"node":"Node",
"type":"Type",
"group":"Group",
"module":"Module",
"id":"ID",
"status":"Status",
@@ -503,7 +627,29 @@
"nodeHelp":"Node Help",
"none":"None",
"arrayItems":"__count__ items",
"showTips":"You can open the tips from the settings panel"
"showTips":"You can open the tips from the settings panel",
"outline":"Outline",
"empty":"empty",
"globalConfig":"Global Configuration Nodes",
"triggerAction":"Trigger action",
"find":"Find in workspace",
"search":{
"configNodes":"Configuration nodes",
"unusedConfigNodes":"Unused configuration nodes",
"invalidNodes":"Invalid nodes",
"uknownNodes":"Unknown nodes",
"unusedSubflows":"Unused subflows"
}
},
"help":{
"name":"Help",
"label":"help",
"search":"Search help",
"nodeHelp":"Node Help",
"showHelp":"Show help",
"showInOutline":"Show in outline",
"showTopics":"Show topics",
"noHelp":"No help topic selected"
},
"config":{
"name":"Configuration nodes",
@@ -512,8 +658,10 @@
"none":"none",
"subflows":"subflows",
"flows":"flows",
"filterUnused":"unused",
"filterAll":"all",
"filterAll":"all",
"showAllConfigNodes":"Show all config nodes",
"filterUnused":"unused",
"showAllUnusedConfigNodes":"Show all unused config nodes",
"filtered":"__count__ hidden"
},
"context":{
@@ -525,7 +673,10 @@
"node":"Node",
"flow":"Flow",
"global":"Global",
"deleteConfirm":"Are you sure you want to delete this item?"
"deleteConfirm":"Are you sure you want to delete this item?",
"committerTip":"Leave blank to use system default",
"userName":"Username",
"email":"Email",
"workflow":"Workflow",
"workfowTip":"Choose your preferred git workflow",
"workflowManual":"Manual",
"workflowManualTip":"All changes must be manually committed under the 'history' sidebar",
"workflowAuto":"Automatic",
"workflowAutoTip":"Changes are committed automatically with every deploy",
"sshKeys":"SSH Keys",
"sshKeysTip":"Allows you to create secure connections to remote git repositories.",
"add":"add key",
@@ -694,7 +851,8 @@
"bin":"buffer",
"date":"timestamp",
"jsonata":"expression",
"env":"env variable"
"env":"env variable",
"cred":"credential"
}
},
"editableList":{
@@ -726,12 +884,28 @@
"jsEditor":{
"title":"JavaScript editor"
},
"textEditor":{
"title":"Text editor"
},
"jsonEditor":{
"title":"JSON editor",
"format":"format JSON"
"format":"format JSON",
"rawMode":"Edit JSON",
"uiMode":"Visual editor",
"insertAbove":"Insert above",
"insertBelow":"Insert below",
"addItem":"Add item",
"copyPath":"Copy path to item",
"expandItems":"Expand items",
"collapseItems":"Collapse items",
"duplicate":"Duplicate",
"error":{
"invalidJSON":"Invalid JSON: "
}
},
"markdownEditor":{
"title":"Markdown editor",
"expand":"Expand",
"format":"Formatted with markdown",
"heading1":"Heading 1",
"heading2":"Heading 2",
@@ -898,7 +1072,8 @@
"passphrase":"Passphrase",
"retry":"Retry",
"update-failed":"Failed to update auth",
"unhandled":"Unhandled error response"
"unhandled":"Unhandled error response",
"host-key-verify-failed":"<p>Host key verification failed.</p><p>The repository host key could not be verified. Please update your <code>known_hosts</code> file and try again.</p>"
"desc":"Casts the *arg* parameter to a string using the following casting rules:\n\n - Strings are unchanged\n - Functions are converted to an empty string\n - Numeric infinity and NaN throw an error because they cannot be represented as a JSON number\n - All other values are converted to a JSON string using the `JSON.stringify` function"
"args":"arg[, prettify]",
"desc":"Casts the `arg` parameter to a string using the following casting rules:\n\n - Strings are unchanged\n - Functions are converted to an empty string\n - Numeric infinity and NaN throw an error because they cannot be represented as a JSON number\n - All other values are converted to a JSON string using the `JSON.stringify` function. If `prettify` is true, then \"prettified\" JSON is produced. i.e One line per field and lines will be indented based on the field depth."
},
"$length":{
"args":"str",
@@ -185,7 +185,7 @@
},
"$reduce":{
"args":"array, function [, init]",
"desc":"Returns an aggregated value derived from applying the `function` parameter successively to each value in `array` in combination with the result of the previous application of the function.\n\nThe function must accept two arguments, and behaves like an infix operator between each value within the `array`.\n\nThe optional `init` parameter is used as the initial value in the aggregation."
"desc":"Returns an aggregated value derived from applying the `function` parameter successively to each value in `array` in combination with the result of the previous application of the function.\n\nThe function must accept two arguments, and behaves like an infix operator between each value within the `array`. The signature of `function` must be of the form: `myfunc($accumulator, $value[, $index[, $array]])`\n\nThe optional `init` parameter is used as the initial value in the aggregation."
},
"$flowContext":{
"args":"string[, string]",
@@ -230,6 +230,45 @@
"$parseInteger":{
"args":"string, picture",
"desc":"Parses the contents of the `string` parameter to an integer (as a JSON number) using the format specified by the `picture` string. The `picture` string parameter has the same format as `$formatInteger`."
},
"$error":{
"args":"[str]",
"desc":"Throws an error with a message. The optional `str` will replace the default message of `$error() function evaluated`"
},
"$assert":{
"args":"arg, str",
"desc":"If `arg` is true the function returns undefined. If `arg` is false an exception is thrown with `str` as the message of the exception."
},
"$single":{
"args":"array, function",
"desc":"Returns the one and only value in the `array` parameter that satisfies the `function` predicate (i.e. the `function` returns Boolean `true` when passed the value). Throws an exception if the number of matching values is not exactly one.\n\nThe function should be supplied in the following signature: `function(value [, index [, array]])` where value is each input of the array, index is the position of that value and the whole array is passed as the third argument"
},
"$encodeUrlComponent":{
"args":"str",
"desc":"Encodes a Uniform Resource Locator (URL) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character.\n\nExample: `$encodeUrlComponent(\"?x=test\")` => `\"%3Fx%3Dtest\"`"
},
"$encodeUrl":{
"args":"str",
"desc":"Encodes a Uniform Resource Locator (URL) by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character. \n\nExample: `$encodeUrl(\"https://mozilla.org/?x=шеллы\")` => `\"https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B\"`"
},
"$decodeUrlComponent":{
"args":"str",
"desc":"Decodes a Uniform Resource Locator (URL) component previously created by encodeUrlComponent. \n\nExample: `$decodeUrlComponent(\"%3Fx%3Dtest\")` => `\"?x=test\"`"
},
"$decodeUrl":{
"args":"str",
"desc":"Decodes a Uniform Resource Locator (URL) previously created by encodeUrl. \n\nExample: `$decodeUrl(\"https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B\")` => `\"https://mozilla.org/?x=шеллы\"`"
},
"$distinct":{
"args":"array",
"desc":"Returns an array with duplicate values removed from `array`"
},
"$type":{
"args":"value",
"desc":"Returns the type of `value` as a string. If `value` is undefined, this will return `undefined`"
},
"$moment":{
"args":"[str]",
"desc":"Gets a date object using the Moment library."
"desc":"`array`の要素のうち、条件判定関数`function`を満たす(`function`に与えた場合に真偽値`true`を返す)要素が1つのみである場合、それを返します。マッチする要素が1つのみでない場合、例外を送出します。\n\n指定する関数は`function(value [, index [, array]])`というシグネチャでなければなりません。ここで、`value`は`array`の要素値、`index`は要素の添字、第三引数には配列全体を渡します。"
"desc":"Преобразует параметр `arg` в строку, используя следующие правила приведения:\n\n - Строки возвращаются как есть\n - Функции преобразуются в пустую строку\n - Числовая бесконечность и NaN выдают ошибку, поскольку они не могут быть представлены числом в JSON\n - Все остальные значения преобразуются в строку JSON с помощью функции `JSON.stringify`. Если значение `prettify` равно true, тогда будет сгенерирован \"отформатированный\" JSON. То есть каждое поле будет в отдельной строке, а строки будут иметь отступ в зависимости от глубины поля."
},
"$length":{
"args":"str",
"desc":"Возвращает количество символов в строке `str`. Выдается ошибка, если `str` не является строкой."
},
"$substring":{
"args":"str, start[, length]",
"desc":"Возвращает строку, содержащую символы из первого параметра `str`, начиная с позиции `start` (отсчет с нуля). Если указан `length`, то подстрока будет содержать максимум `length` символов. Если `start` отрицателен, то это означает количество символов с конца `str`."
},
"$substringBefore":{
"args":"str, chars",
"desc":"Возвращает подстроку перед первым вхождением последовательности символов `chars` в строке `str`. Если `str` не содержит `chars`, то он возвращает `str`."
},
"$substringAfter":{
"args":"str, chars",
"desc":"Возвращает подстроку после первого вхождения последовательности символов `chars` в строке `str`. Если `str` не содержит `chars`, то он возвращает `str`."
},
"$uppercase":{
"args":"str",
"desc":"Возвращает строку со всеми символами `str`, преобразованными в верхний регистр."
},
"$lowercase":{
"args":"str",
"desc":"Возвращает строку со всеми символами `str`, преобразованными в нижний регистр."
},
"$trim":{
"args":"str",
"desc":"Нормализует и обрезает все пробельные символы в строке `str`, выполняя следующие шаги:\n\n - Все символы табуляции, возврата каретки и перевода строки заменяются пробелами.\n- Последовательности пробелов сокращаются до одного пробела.\n- Пробелы в начале и конце `str` удаляются.\n\n Если `str` не указан (то есть эта функция вызывается без аргументов), тогда значение контекста используется в качестве значения `str`. Выдается ошибка, если `str` не является строкой."
},
"$contains":{
"args":"str, pattern",
"desc":"Возвращает `true`, если строка `str` соответствует шаблону `pattern`, в противном случае возвращает `false`. Если `str` не указан (то есть эта функция вызывается с одним аргументом), то значение контекста используется как значение `str`. Параметр `pattern` может быть либо строкой, либо регулярным выражением."
},
"$split":{
"args":"str[, separator][, limit]",
"desc":"Разбивает строку `str` на массив подстрок. Выдает ошибку, если `str` не является строкой. Необязательный параметр `separator` (строка или регулярное выражение) указывает символы внутри строки `str`, относительно которых она должна быть разделена. Если `separator` не указан, то предполагается пустая строка, и `str` будет разбит на массив из отдельных символов. Выдает ошибку, если `separator` не является строкой. Необязательный параметр `limit` - это число, указывающее максимальное количество подстрок для включения в результирующий массив. Любые дополнительные подстроки отбрасываются. Если `limit` не указан, то весь `str` разделяется без ограничения размера результирующего массива. Выдает ошибку, если `limit` не является положительным числом."
},
"$join":{
"args":"array[, separator]",
"desc":"Объединяет массив подстрок в одну объединенную строку, в которой каждая подстрока отделена необязательным параметром `separator`. Выдает ошибку, если входной массив содержит элемент, который не является строкой. Если `separator` не указан, то предполагается, что это пустая строка, то есть нет `separator` между подстроками. Выдает ошибку, если `separator` не является строкой."
},
"$match":{
"args":"str, pattern [, limit]",
"desc":"Применяет строку `str` к регулярному выражению `pattern` и возвращает массив объектов, каждый из которых содержит информацию о каждом совпадении внутри `str`."
},
"$replace":{
"args":"str, pattern, replacement [, limit]",
"desc":"Находит вхождения шаблона `pattern` в строке `str` и заменяет их на строку `replacement`.\n\nНеобязательный параметр `limit` - это максимальное количество замен."
},
"$now":{
"args":"",
"desc":"Создает отметку времени в формате, совместимом с ISO 8601, и возвращает ее как строку."
},
"$base64encode":{
"args":"string",
"desc":"Преобразует ASCII-строку в base-64 кодировку. Каждый символ в строке обрабатывается как байт двоичных данных. Для этого необходимо, чтобы все символы в строке находились в диапазоне от 0x00 до 0xFF, который включает все символы строк в URI-кодировке. Символы Юникода за пределами этого диапазона не поддерживаются."
},
"$base64decode":{
"args":"string",
"desc":"Преобразует байты в кодировке base-64 в строку, используя кодовую страницу Юникод UTF-8."
},
"$number":{
"args":"arg",
"desc":"Преобразует параметр `arg` в число с использованием следующих правил приведения:\n\n - Числа возвращаются как есть\n - Строки, которые содержат последовательность символов, представляющих допустимое в JSON число, преобразуются в это число\n - Все остальные значения вызывают ошибку."
},
"$abs":{
"args":"number",
"desc":"Возвращает абсолютное значение числа `number`."
},
"$floor":{
"args":"number",
"desc":"Возвращает значение числа `number`, округленное до ближайшего целого числа, которое меньше или равно `number`."
},
"$ceil":{
"args":"number",
"desc":"Возвращает значение числа `number`, округленное до ближайшего целого числа, которое больше или равно `number`."
},
"$round":{
"args":"number [, precision]",
"desc":"Возвращает значение числа `number`, округленное до количества десятичных знаков, указанных необязательным параметром `precision`."
},
"$power":{
"args":"base, exponent",
"desc":"Возвращает значение числа `base`, возведенное в степень `exponent`."
},
"$sqrt":{
"args":"number",
"desc":"Возвращает квадратный корень из значения числа `number`."
},
"$random":{
"args":"",
"desc":"Возвращает псевдослучайное число, которе больше или равно нулю и меньше единицы."
},
"$millis":{
"args":"",
"desc":"Возвращает число миллисекунд с начала Unix-эпохи (1 января 1970 года по Гринвичу) в виде числа. Все вызовы `$millis()` в пределах выполнения выражения будут возвращать одно и то же значение."
},
"$sum":{
"args":"array",
"desc":"Возвращает арифметическую сумму массива чисел `array`. Вызывает ошибку, если входной массив `array` содержит элемент, который не является числом."
},
"$max":{
"args":"array",
"desc":"Возвращает максимальное число в массиве чисел `array`. Вызывает ошибку, если входной массив `array` содержит элемент, который не является числом."
},
"$min":{
"args":"array",
"desc":"Возвращает минимальное число в массиве чисел `array`. Вызывает ошибку, если входной массив `array` содержит элемент, который не является числом."
},
"$average":{
"args":"array",
"desc":"Возвращает среднее значение массива чисел `array`. Вызывает ошибку, если входной массив `array` содержит элемент, который не является числом."
},
"$boolean":{
"args":"arg",
"desc":"Приводит аргумент к логическому значению, используя следующие правила: \n\n - Логические значения возвращаются как есть\n - пустая строка: `false`\n - непустая строка: `true`\n - число равное `0`: `false`\n - ненулевое число: `true`\n - `null` : `false`\n - пустой массив: `false`\n - массив, который содержит хотя бы один элемент, приводимый к `true`: `true`\n - массив, все элементы которого приводятся к `false`: `false`\n - пустой объект: `false`\n - непустой объект: `true`\n - функция: `false`"
},
"$not":{
"args":"arg",
"desc":"Возвращает логическое НЕ для аргумента. `arg` сначала приводится к логическому значению"
},
"$exists":{
"args":"arg",
"desc":"Возвращает логическое `true`, если выполнение выражения `arg` возвращает значение, или `false`, если выражение ничему не соответствует (например, путь к несуществующему полю)."
},
"$count":{
"args":"array",
"desc":"Возвращает количество элементов в массиве"
},
"$append":{
"args":"array, array",
"desc":"Присоединяет один массив к другому"
},
"$sort":{
"args":"array [, function]",
"desc":"Возвращает массив, содержащий все значения параметра `array`, но отсортированные по порядку.\n\nЕсли указан компаратор `function`, то это должна быть функция, которая принимает два параметра:\n\n`function(val1, val2)`\n\nЭту функцию вызывает алгоритм сортировки для сравнения двух значений: val1 и val2. Если значение val1 следует поместить после значения val2 в желаемом порядке сортировки, то функция должна возвращать логическое значение `true`, чтобы обозначить замену. В противном случае она должна вернуть `false`."
},
"$reverse":{
"args":"array",
"desc":"Возвращает массив, содержащий все значения из параметра `array`, но в обратном порядке."
},
"$shuffle":{
"args":"array",
"desc":"Возвращает массив, содержащий все значения из параметра `array`, но перемешанный в случайном порядке."
},
"$zip":{
"args":"array, ...",
"desc":"Возвращает свернутый (сжатый) массив, содержащий сгруппированные массивы значений из аргументов `array1` … `arrayN` по индексам 0, 1, 2...."
},
"$keys":{
"args":"object",
"desc":"Возвращает массив, содержащий ключи объекта. Если аргумент является массивом объектов, то возвращаемый массив содержит недублированный список всех ключей из всех объектов."
},
"$lookup":{
"args":"object, key",
"desc":"Возвращает значение, связанное с ключом в объекте. Если первый аргумент является массивом объектов, то просходит поиск по всем объектам в массиве, и возвращаются значения, связанные со всеми вхождениями ключа."
},
"$spread":{
"args":"object",
"desc":"Разбивает объект, содержащий пары ключ / значение, на массив объектов, каждый из которых имеет одну пару ключ / значение из входного объекта. Если параметр является массивом объектов, то результирующий массив содержит объект для каждой пары ключ / значение из каждого объекта предоставленного массива."
},
"$merge":{
"args":"array<object>",
"desc":"Объединяет массив объектов в один объект, содержащий все пары ключ / значение каждого из объектов входного массива. Если какой-либо из входных объектов содержит один и тот же ключ, возвращаемый объект будет содержать значение последнего в массиве. Вызывает ошибку, если входной массив содержит элемент, который не является объектом."
},
"$sift":{
"args":"object, function",
"desc":"Возвращает объект, который содержит только пары ключ / значение из параметра `object`, которые удовлетворяют предикату `function`, переданному в качестве второго параметра.\n\n`function`, которая передается в качестве второго параметра, должна иметь следующую сигнатуру:\n\n`function(value [, key [, object]])`"
},
"$each":{
"args":"object, function",
"desc":"Возвращает массив, который содержит значения, возвращаемые функцией `function` при применении к каждой паре ключ/значение из объекта `object`."
},
"$map":{
"args":"array, function",
"desc":"Возвращает массив, содержащий результаты применения функции `function` к каждому значению массива `array`.\n\nФункция `function`, указанная в качестве второго параметра, должна иметь следующую сигнатуру:\n\n`function(value [, index [, array]])`"
},
"$filter":{
"args":"array, function",
"desc":"Возвращает массив, содержащий только те значения из массива `array`, которые удовлетворяют предикату `function`.\n\nФункция `function`, указанная в качестве второго параметра, должна иметь следующую сигнатуру:\n\n`function(value [, index [, array]])`"
},
"$reduce":{
"args":"array, function [, init]",
"desc":"Возвращает агрегированное значение, полученное в результате последовательного применения функции `function` к каждому значению в массиве в сочетании с результатом от предыдущего применения функции.\n\nФункция должна принимать два аргумента и вести себя как инфиксный оператор между каждым значением в массиве `array`. Сигнатура `function` должна иметь форму: `myfunc($accumulator, $value[, $index[, $array]])`\n\nНеобязательный параметр `init` используется в качестве начального значения в агрегации."
},
"$flowContext":{
"args":"string[, string]",
"desc":"Извлекает свойство контекста потока.\n\nЭто функция от Node-RED."
},
"$globalContext":{
"args":"string[, string]",
"desc":"Извлекает свойство глобального контекста.\n\nЭто функция от Node-RED."
},
"$pad":{
"args":"string, width [, char]",
"desc":"Возвращает копию строки `string` с дополнительным заполнением, если необходимо, чтобы общее количество символов как минимум соответствовало абсолютному значению параметра `width`.\n\nЕсли `width` является положительным числом, то строка дополняется справа; если отрицательным, то дополняется слева.\n\nНеобязательный аргумент `char` указывает символ(ы) для заполнения. Если не указано, по умолчанию используется пробел."
},
"$fromMillis":{
"args":"number",
"desc":"Преобразует число, представляющее миллисекунды с начала Unix-эпохи (1 января 1970 года по Гринвичу), в строку отметки времени в формате ISO 8601."
},
"$formatNumber":{
"args":"number, picture [, options]",
"desc":"Преобразует число `number` в строку и форматирует ее в десятичное представление, как указано в строке `picture`.\n\nПоведение этой функции соответствует XPath/XQuery-функции fn:format-number, как определено в спецификация XPath F&O 3.1. Строка `picture` определяет, как форматируется число и имеет тот же синтаксис, что и fn:format-number.\n\nНеобязательный третий аргумент `options` используется для переопределения символов форматирования, специфичных для локали по умолчанию, таких как десятичный разделитель. Если аргумент указан, то это должен быть объект, содержащий пары имя/значение, указанные в разделе десятичного формата спецификации XPath F&O 3.1."
},
"$formatBase":{
"args":"number [, radix]",
"desc":"Преобразует число `number` в строку и форматирует ее в целое число, представленное в системе счисления, указанной аргументом `radix`. Если `radix` не указан, то по умолчанию используется десятичная. Значение 'radix` может быть от 2 до 36, в противном случае выдается ошибка."
},
"$toMillis":{
"args":"timestamp",
"desc":"Преобразует строку `timestamp` в формате ISO 8601 в число миллисекунд с начала Unix-эпохи (1 января 1970 года по Гринвичу). Вызывает ошибку, если строка в неправильном формате."
},
"$env":{
"args":"arg",
"desc":"Возвращает значение переменной среды.\n\nЭто функция от Node-RED."
},
"$eval":{
"args":"expr [, context]",
"desc":"Анализирует и исполняет строку `expr`, которая содержит JSON или выражение JSONata, используя текущий контекст в качестве контекста для исполнения."
},
"$formatInteger":{
"args":"number, picture",
"desc":"Преобразует число `number` в строку и форматирует ее в целочисленное представление, как указано в строке `picture`. Строка `picture` определяет, как форматируется число и имеет тот же синтаксис, что и `fn:format-integer` из спецификации XPath F&O 3.1."
},
"$parseInteger":{
"args":"string, picture",
"desc":"Разбирает содержимое строки `string` в целое число (как число JSON), используя формат, указанный в строке `picture`. Строковый параметр `picture` имеет тот же формат, что и `$formatInteger`."
},
"$error":{
"args":"[str]",
"desc":"Вызывает ошибку с сообщением. Необязательная строка `str` заменяет сообщение по умолчанию $error() function evaluated`"
},
"$assert":{
"args":"arg, str",
"desc":"Если значение `arg` равно true, функция возвращает значение undefined. Если значение `arg` равно false, генерируется исключение с `str` в качестве сообщения об исключении."
},
"$single":{
"args":"array, function",
"desc":"Возвращает одно-единственное значение из массива `array`, которое удовлетворяет предикату `function` (то есть когда `function` возвращает логическое `true` при передаче значения). Выдает исключение, если число подходящих значений не одно.\n\nФункция должна соответствовать следующей сигнатуре: `function(value [, index [, array]])` где value - элемент массива, index - позиция этого значения, а весь массив передается в качестве третьего аргумента"
},
"$encodeUrlComponent":{
"args":"str",
"desc":"Кодирует компонент Uniform Resource Locator (URL), заменяя каждый экземпляр определенных символов одной, двумя, тремя или четырьмя escape-последовательностями, представляющими кодировку UTF-8 символа.\n\nПример: `$encodeUrlComponent(\"?x=test\")` => `\"%3Fx%3Dtest\"`"
},
"$encodeUrl":{
"args":"str",
"desc":"Кодирует Uniform Resource Locator (URL), заменяя каждый экземпляр определенных символов одной, двумя, тремя или четырьмя escape-последовательностями, представляющими кодировку UTF-8 символа.\n\nПример: `$encodeUrl(\"https://mozilla.org/?x=шеллы\")` => `\"https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B\"`"
},
"$decodeUrlComponent":{
"args":"str",
"desc":"Декодирует компонент Uniform Resource Locator (URL), ранее созданный с помощью encodeUrlComponent.\n\nПример: `$decodeUrlComponent(\"%3Fx%3Dtest\")` => `\"?x=test\"`"
},
"$decodeUrl":{
"args":"str",
"desc":"Декодирует компонент Uniform Resource Locator (URL), ранее созданный с помощью encodeUrl. \n\nПример: `$decodeUrl(\"https://mozilla.org/?x=%D1%88%D0%B5%D0%BB%D0%BB%D1%8B\")` => `\"https://mozilla.org/?x=шеллы\"`"
},
"$distinct":{
"args":"array",
"desc":"Возвращает массив содержащий все элементы из массива `array`, с удаленными дупликатами"
},
"$type":{
"args":"value",
"desc":"Возвращает тип значения `value` в виде строки. Если `value` не определено, то будет возвращено `undefined`"
},
"$moment":{
"args":"[str]",
"desc":"Получает date объект, используя библиотеку Moment."
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.