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.
+
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.
+
Cuando se selecciona el analizador RFC, la plantilla de columna debe ser compatible con RFC4180.
+
Al convertir a CSV, la plantilla de columnas se utiliza para identificar qué propiedades extraer del objeto y en qué orden.
Si la plantilla de columnas está en blanco, puede utilizar una lista simple de propiedades separadas por comas proporcionada en msg.columns 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.
Si la entrada es una matriz, entonces la plantilla de columnas solo se usa para generar opcionalmente una fila de títulos de columnas.
@@ -46,4 +48,5 @@
Si genera varios mensajes, tendrán su propiedad parts configurada y formarán una secuencia de mensajes completa.
Si el nodo está configurado para enviar encabezados de columna solo una vez, si se configura msg.reset en cualquier valor hará que el nodo reenvíe los encabezados.
Nota: la plantilla de columna debe estar separada por comas, incluso si se elige un separador diferente para los datos.
+
Nota: en el modo RFC, se generarán errores detectables para encabezados CSV mal formados y datos de carga útil de entrada no válidos
diff --git a/packages/node_modules/@node-red/runtime/locales/es-ES/runtime.json b/packages/node_modules/@node-red/runtime/locales/es-ES/runtime.json
index 9fba64ad3..d1c2c44a9 100644
--- a/packages/node_modules/@node-red/runtime/locales/es-ES/runtime.json
+++ b/packages/node_modules/@node-red/runtime/locales/es-ES/runtime.json
@@ -25,6 +25,7 @@
"removing-modules": "Eliminando módulos de la configuración",
"added-types": "Tipos de nodos añadidos:",
"removed-types": "Tipos de nodos eliminados:",
+ "removed-plugins": "Extensiones eliminadas:",
"install": {
"invalid": "Nombre de módulo no válido",
"installing": "Instalando módulo: __name__, versión: __version__",
From bdb545d6ebd438189010ea55bd7ffba2c4a41bf8 Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Mon, 7 Oct 2024 16:30:38 +0100
Subject: [PATCH 053/173] Update dependencies
---
package.json | 14 +++++++-------
packages/node_modules/@node-red/nodes/package.json | 6 +++---
.../node_modules/@node-red/registry/package.json | 4 ++--
packages/node_modules/@node-red/util/package.json | 2 +-
packages/node_modules/node-red/package.json | 2 +-
5 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/package.json b/package.json
index 6597530f2..952b95bc0 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"cheerio": "1.0.0-rc.10",
"clone": "2.1.2",
"content-type": "1.0.5",
- "cookie": "0.6.0",
+ "cookie": "0.7.2",
"cookie-parser": "1.4.6",
"cors": "2.8.5",
"cronosjs": "1.7.1",
@@ -45,7 +45,7 @@
"express-session": "1.18.0",
"form-data": "4.0.0",
"fs-extra": "11.2.0",
- "got": "12.6.0",
+ "got": "12.6.1",
"hash-sum": "2.0.0",
"hpagent": "1.2.0",
"https-proxy-agent": "5.0.1",
@@ -60,7 +60,7 @@
"memorystore": "1.6.7",
"mime": "3.0.0",
"moment": "2.30.1",
- "moment-timezone": "0.5.45",
+ "moment-timezone": "0.5.46",
"mqtt": "5.7.0",
"multer": "1.4.5-lts.1",
"mustache": "4.2.0",
@@ -72,10 +72,10 @@
"passport": "0.7.0",
"passport-http-bearer": "1.0.1",
"passport-oauth2-client-password": "0.1.2",
- "raw-body": "2.5.2",
+ "raw-body": "3.0.0",
"rfdc": "^1.3.1",
- "semver": "7.5.4",
- "tar": "7.2.0",
+ "semver": "7.6.3",
+ "tar": "7.4.3",
"tough-cookie": "^5.0.0",
"uglify-js": "3.17.4",
"uuid": "9.0.1",
@@ -110,7 +110,7 @@
"jquery-i18next": "1.2.1",
"jsdoc-nr-template": "github:node-red/jsdoc-nr-template",
"marked": "4.3.0",
- "mermaid": "^10.4.0",
+ "mermaid": "11.3.0",
"minami": "1.2.3",
"mocha": "9.2.2",
"node-red-node-test-helper": "^0.3.3",
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index dcbb59b24..72179409c 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -22,13 +22,13 @@
"cheerio": "1.0.0-rc.10",
"content-type": "1.0.5",
"cookie-parser": "1.4.6",
- "cookie": "0.6.0",
+ "cookie": "0.7.2",
"cors": "2.8.5",
"cronosjs": "1.7.1",
"denque": "2.1.0",
"form-data": "4.0.0",
"fs-extra": "11.2.0",
- "got": "12.6.0",
+ "got": "12.6.1",
"hash-sum": "2.0.0",
"hpagent": "1.2.0",
"https-proxy-agent": "5.0.1",
@@ -40,7 +40,7 @@
"mustache": "4.2.0",
"node-watch": "0.7.4",
"on-headers": "1.0.2",
- "raw-body": "2.5.2",
+ "raw-body": "3.0.0",
"tough-cookie": "^5.0.0",
"uuid": "9.0.1",
"ws": "7.5.10",
diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json
index 2515b19b7..7c6e8ebcc 100644
--- a/packages/node_modules/@node-red/registry/package.json
+++ b/packages/node_modules/@node-red/registry/package.json
@@ -19,8 +19,8 @@
"@node-red/util": "4.0.3",
"clone": "2.1.2",
"fs-extra": "11.2.0",
- "semver": "7.5.4",
- "tar": "7.2.0",
+ "semver": "7.6.3",
+ "tar": "7.4.3",
"uglify-js": "3.17.4"
}
}
diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index d747109dd..67ed9d88b 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -21,6 +21,6 @@
"jsonata": "2.0.5",
"lodash.clonedeep": "^4.5.0",
"moment": "2.30.1",
- "moment-timezone": "0.5.45"
+ "moment-timezone": "0.5.46"
}
}
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index b6c767e9b..2f61e8468 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -42,7 +42,7 @@
"fs-extra": "11.2.0",
"node-red-admin": "^4.0.1",
"nopt": "5.0.0",
- "semver": "7.5.4"
+ "semver": "7.6.3"
},
"optionalDependencies": {
"@node-rs/bcrypt": "1.10.4"
From 3812ed5ed3cd7b51b074025ae8eacdda31e6762e Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Mon, 7 Oct 2024 21:13:13 +0200
Subject: [PATCH 054/173] Link call node cannot call a link in a subflow
Co-authored-by: Nick O'Leary
---
.../node_modules/@node-red/editor-client/src/js/nodes.js | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
index 25e8c2185..857068d4b 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
@@ -2419,12 +2419,13 @@ RED.nodes = (function() {
if (otherNode.z === n.z) {
// Both ends in the same flow/subflow
return true
- } else if (n.type === "link call") {
- // Link call node can call out of a subflow
- return true
+ } else if (n.type === "link call" && !!getSubflow(otherNode.z)) {
+ // Link call node can call out of a subflow as long as otherNode is
+ // not in a subflow
+ return false
} else if (!!getSubflow(n.z) || !!getSubflow(otherNode.z)) {
// One end is in a subflow - remove the link
- return false
+ return false
}
return true
});
From a0b4fc83726e647cfc2a6f6db2a529675d10785b Mon Sep 17 00:00:00 2001
From: Ben Hardill
Date: Tue, 8 Oct 2024 13:58:29 +0100
Subject: [PATCH 055/173] Convert to string
---
.../node_modules/@node-red/nodes/core/network/10-mqtt.js | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
index bc6f9644d..2b4968483 100644
--- a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
+++ b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
@@ -161,9 +161,13 @@ module.exports = function(RED) {
if(typeof val === "string") {
count++;
_clone[key] = val;
- } else if (typeof val === "number") {
+ } else {
count++;
- _clone[key] = val.toString();
+ try {
+ _clone[key] = JSON.stringify(val)
+ } catch (err) {
+ console.log('MQTT v5 Property value can not be converted to a String')
+ }
}
});
if(count) properties.userProperties = _clone;
From d50ccea017e97552078a86324c76159957b66614 Mon Sep 17 00:00:00 2001
From: Ben Hardill
Date: Tue, 8 Oct 2024 16:51:09 +0100
Subject: [PATCH 056/173] Update
packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
Co-authored-by: Nick O'Leary
---
.../node_modules/@node-red/nodes/core/network/10-mqtt.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
index 2b4968483..afa0066f4 100644
--- a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
+++ b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js
@@ -161,12 +161,12 @@ module.exports = function(RED) {
if(typeof val === "string") {
count++;
_clone[key] = val;
- } else {
- count++;
+ } else if (val !== undefined && val !== null) {
try {
_clone[key] = JSON.stringify(val)
+ count++;
} catch (err) {
- console.log('MQTT v5 Property value can not be converted to a String')
+ // Silently drop property
}
}
});
From 49a3eded59e59b6dc1207fcd872233aa0cb2e701 Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Tue, 8 Oct 2024 18:10:28 +0200
Subject: [PATCH 057/173] Apply code review + add comments
Co-authored-by: Nick O'Leary
---
.../@node-red/editor-client/src/js/ui/deploy.js | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js b/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js
index e429c1586..ed503bcfe 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js
@@ -591,6 +591,7 @@ RED.deploy = (function() {
const flowsToLock = new Set()
// Node's properties cannot be modified if its workspace is locked.
function ensureUnlocked(id) {
+ // TODO: `RED.nodes.subflow` is useless
const flow = id && (RED.nodes.workspace(id) || RED.nodes.subflow(id) || null);
const isLocked = flow ? flow.locked : false;
if (flow && isLocked) {
@@ -643,27 +644,27 @@ RED.deploy = (function() {
delete confNode.credentials;
}
});
+ // Subflow cannot be locked
RED.nodes.eachSubflow(function (subflow) {
if (subflow.changed) {
subflow.changed = false;
- if (flowsToLock.has(subflow)) {
- subflow.locked = true;
- }
RED.events.emit("subflows:change", subflow);
}
});
RED.nodes.eachWorkspace(function (ws) {
if (ws.changed || ws.added) {
- ensureUnlocked(ws.z)
+ // Ensure the Workspace is unlocked to modify its properties.
+ ensureUnlocked(ws.id);
ws.changed = false;
delete ws.added
if (flowsToLock.has(ws)) {
ws.locked = true;
+ flowsToLock.delete(ws);
}
RED.events.emit("flows:change", ws)
}
});
- // Ensures all workspaces/subflows to be locked have been locked.
+ // Ensures all workspaces to be locked have been locked.
flowsToLock.forEach(flow => {
flow.locked = true
})
From a0033697ea435fdd69db51e8edb17439de5eba5a Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Wed, 9 Oct 2024 10:25:35 +0100
Subject: [PATCH 058/173] Update cookie
---
package.json | 6 +++---
packages/node_modules/@node-red/editor-api/package.json | 4 ++--
packages/node_modules/@node-red/nodes/package.json | 2 +-
packages/node_modules/@node-red/runtime/package.json | 2 +-
packages/node_modules/node-red/package.json | 2 +-
5 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index 952b95bc0..229ede53d 100644
--- a/package.json
+++ b/package.json
@@ -37,12 +37,12 @@
"clone": "2.1.2",
"content-type": "1.0.5",
"cookie": "0.7.2",
- "cookie-parser": "1.4.6",
+ "cookie-parser": "1.4.7",
"cors": "2.8.5",
"cronosjs": "1.7.1",
"denque": "2.1.0",
- "express": "4.21.0",
- "express-session": "1.18.0",
+ "express": "4.21.1",
+ "express-session": "1.18.1",
"form-data": "4.0.0",
"fs-extra": "11.2.0",
"got": "12.6.1",
diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json
index 59a265ca4..02d8cf673 100644
--- a/packages/node_modules/@node-red/editor-api/package.json
+++ b/packages/node_modules/@node-red/editor-api/package.json
@@ -22,8 +22,8 @@
"body-parser": "1.20.3",
"clone": "2.1.2",
"cors": "2.8.5",
- "express-session": "1.18.0",
- "express": "4.21.0",
+ "express-session": "1.18.1",
+ "express": "4.21.1",
"memorystore": "1.6.7",
"mime": "3.0.0",
"multer": "1.4.5-lts.1",
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index 72179409c..a2f82334a 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -21,7 +21,7 @@
"body-parser": "1.20.3",
"cheerio": "1.0.0-rc.10",
"content-type": "1.0.5",
- "cookie-parser": "1.4.6",
+ "cookie-parser": "1.4.7",
"cookie": "0.7.2",
"cors": "2.8.5",
"cronosjs": "1.7.1",
diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json
index 67464f496..276e2ecef 100644
--- a/packages/node_modules/@node-red/runtime/package.json
+++ b/packages/node_modules/@node-red/runtime/package.json
@@ -20,7 +20,7 @@
"@node-red/util": "4.0.3",
"async-mutex": "0.5.0",
"clone": "2.1.2",
- "express": "4.21.0",
+ "express": "4.21.1",
"fs-extra": "11.2.0",
"json-stringify-safe": "5.0.1",
"rfdc": "^1.3.1"
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index 2f61e8468..b3fab303d 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -38,7 +38,7 @@
"basic-auth": "2.0.1",
"bcryptjs": "2.4.3",
"cors": "2.8.5",
- "express": "4.21.0",
+ "express": "4.21.1",
"fs-extra": "11.2.0",
"node-red-admin": "^4.0.1",
"nopt": "5.0.0",
From 90ea3c15b35e042f285aecf1fc7e234738f0ed19 Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Wed, 9 Oct 2024 10:56:14 +0100
Subject: [PATCH 059/173] Bump for 4.0.4 release
---
CHANGELOG.md | 17 +++++++++++++++++
package.json | 2 +-
.../@node-red/editor-api/package.json | 6 +++---
.../@node-red/editor-client/package.json | 2 +-
.../node_modules/@node-red/nodes/package.json | 2 +-
.../@node-red/registry/package.json | 4 ++--
.../node_modules/@node-red/runtime/package.json | 6 +++---
.../node_modules/@node-red/util/package.json | 2 +-
packages/node_modules/node-red/package.json | 10 +++++-----
9 files changed, 34 insertions(+), 17 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6eaa3b7fa..5d51c45f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,20 @@
+#### 4.0.4: Maintenance Release
+
+Editor
+
+ - Fix `link call` node can call out of a subflow (#4892) @GogoVega
+ - Fix wrong unlock state when event is triggered after deployment (#4889) @GogoVega
+ - i18n(App) update with latest language file changes (#4903) @joebordes
+ - fix typo: depreciated (#4895) @dxdc
+
+Runtime
+
+ - Update dev dependencies (#4893) @knolleary
+
+Nodes
+
+ - MQTT: Allow msg.userProperties to have number values (#4900) @hardillb
+
#### 4.0.3: Maintenance Release
Editor
diff --git a/package.json b/package.json
index 229ede53d..9d30315fd 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "node-red",
- "version": "4.0.3",
+ "version": "4.0.4",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json
index 02d8cf673..b1cdd9ad5 100644
--- a/packages/node_modules/@node-red/editor-api/package.json
+++ b/packages/node_modules/@node-red/editor-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-api",
- "version": "4.0.3",
+ "version": "4.0.4",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,8 +16,8 @@
}
],
"dependencies": {
- "@node-red/util": "4.0.3",
- "@node-red/editor-client": "4.0.3",
+ "@node-red/util": "4.0.4",
+ "@node-red/editor-client": "4.0.4",
"bcryptjs": "2.4.3",
"body-parser": "1.20.3",
"clone": "2.1.2",
diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json
index 7e65dcc1a..587a32c6a 100644
--- a/packages/node_modules/@node-red/editor-client/package.json
+++ b/packages/node_modules/@node-red/editor-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-client",
- "version": "4.0.3",
+ "version": "4.0.4",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index a2f82334a..7fdcb3a3e 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/nodes",
- "version": "4.0.3",
+ "version": "4.0.4",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json
index 7c6e8ebcc..229c5d31d 100644
--- a/packages/node_modules/@node-red/registry/package.json
+++ b/packages/node_modules/@node-red/registry/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/registry",
- "version": "4.0.3",
+ "version": "4.0.4",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,7 +16,7 @@
}
],
"dependencies": {
- "@node-red/util": "4.0.3",
+ "@node-red/util": "4.0.4",
"clone": "2.1.2",
"fs-extra": "11.2.0",
"semver": "7.6.3",
diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json
index 276e2ecef..71d36b54a 100644
--- a/packages/node_modules/@node-red/runtime/package.json
+++ b/packages/node_modules/@node-red/runtime/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/runtime",
- "version": "4.0.3",
+ "version": "4.0.4",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,8 +16,8 @@
}
],
"dependencies": {
- "@node-red/registry": "4.0.3",
- "@node-red/util": "4.0.3",
+ "@node-red/registry": "4.0.4",
+ "@node-red/util": "4.0.4",
"async-mutex": "0.5.0",
"clone": "2.1.2",
"express": "4.21.1",
diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index 67ed9d88b..80ae1a517 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/util",
- "version": "4.0.3",
+ "version": "4.0.4",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index b3fab303d..b7e87be84 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -1,6 +1,6 @@
{
"name": "node-red",
- "version": "4.0.3",
+ "version": "4.0.4",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
@@ -31,10 +31,10 @@
"flow"
],
"dependencies": {
- "@node-red/editor-api": "4.0.3",
- "@node-red/runtime": "4.0.3",
- "@node-red/util": "4.0.3",
- "@node-red/nodes": "4.0.3",
+ "@node-red/editor-api": "4.0.4",
+ "@node-red/runtime": "4.0.4",
+ "@node-red/util": "4.0.4",
+ "@node-red/nodes": "4.0.4",
"basic-auth": "2.0.1",
"bcryptjs": "2.4.3",
"cors": "2.8.5",
From 802b116b0140f8b06da7087b8de07c9f68139b28 Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Thu, 10 Oct 2024 08:53:33 +0200
Subject: [PATCH 060/173] Refix link call node can call out of a subflow
---
packages/node_modules/@node-red/editor-client/src/js/nodes.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
index 857068d4b..12e0a6ef1 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
@@ -2419,10 +2419,10 @@ RED.nodes = (function() {
if (otherNode.z === n.z) {
// Both ends in the same flow/subflow
return true
- } else if (n.type === "link call" && !!getSubflow(otherNode.z)) {
+ } else if (n.type === "link call" && !getSubflow(otherNode.z)) {
// Link call node can call out of a subflow as long as otherNode is
// not in a subflow
- return false
+ return true
} else if (!!getSubflow(n.z) || !!getSubflow(otherNode.z)) {
// One end is in a subflow - remove the link
return false
From fe9354d10b893de689efaddaf120c690bb595049 Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Thu, 10 Oct 2024 11:05:08 +0100
Subject: [PATCH 061/173] Bump for 4.0.5
---
CHANGELOG.md | 6 ++++++
package.json | 2 +-
.../node_modules/@node-red/editor-api/package.json | 6 +++---
.../node_modules/@node-red/editor-client/package.json | 2 +-
packages/node_modules/@node-red/nodes/package.json | 2 +-
packages/node_modules/@node-red/registry/package.json | 4 ++--
packages/node_modules/@node-red/runtime/package.json | 6 +++---
packages/node_modules/@node-red/util/package.json | 2 +-
packages/node_modules/node-red/package.json | 10 +++++-----
scripts/generate-publish-script.js | 8 +++++---
10 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5d51c45f9..4b55ac4c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+#### 4.0.5: Maintenance Release
+
+Editor
+
+ - Refix link call node can call out of a subflow (#4908) @GogoVega
+
#### 4.0.4: Maintenance Release
Editor
diff --git a/package.json b/package.json
index 9d30315fd..c7fe644f7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "node-red",
- "version": "4.0.4",
+ "version": "4.0.5",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json
index b1cdd9ad5..e58f2e9fb 100644
--- a/packages/node_modules/@node-red/editor-api/package.json
+++ b/packages/node_modules/@node-red/editor-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-api",
- "version": "4.0.4",
+ "version": "4.0.5",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,8 +16,8 @@
}
],
"dependencies": {
- "@node-red/util": "4.0.4",
- "@node-red/editor-client": "4.0.4",
+ "@node-red/util": "4.0.5",
+ "@node-red/editor-client": "4.0.5",
"bcryptjs": "2.4.3",
"body-parser": "1.20.3",
"clone": "2.1.2",
diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json
index 587a32c6a..b6b7a2c73 100644
--- a/packages/node_modules/@node-red/editor-client/package.json
+++ b/packages/node_modules/@node-red/editor-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-client",
- "version": "4.0.4",
+ "version": "4.0.5",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index 7fdcb3a3e..84db88466 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/nodes",
- "version": "4.0.4",
+ "version": "4.0.5",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json
index 229c5d31d..9437a5beb 100644
--- a/packages/node_modules/@node-red/registry/package.json
+++ b/packages/node_modules/@node-red/registry/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/registry",
- "version": "4.0.4",
+ "version": "4.0.5",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,7 +16,7 @@
}
],
"dependencies": {
- "@node-red/util": "4.0.4",
+ "@node-red/util": "4.0.5",
"clone": "2.1.2",
"fs-extra": "11.2.0",
"semver": "7.6.3",
diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json
index 71d36b54a..a160c402c 100644
--- a/packages/node_modules/@node-red/runtime/package.json
+++ b/packages/node_modules/@node-red/runtime/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/runtime",
- "version": "4.0.4",
+ "version": "4.0.5",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,8 +16,8 @@
}
],
"dependencies": {
- "@node-red/registry": "4.0.4",
- "@node-red/util": "4.0.4",
+ "@node-red/registry": "4.0.5",
+ "@node-red/util": "4.0.5",
"async-mutex": "0.5.0",
"clone": "2.1.2",
"express": "4.21.1",
diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index 80ae1a517..c02ab3805 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/util",
- "version": "4.0.4",
+ "version": "4.0.5",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index b7e87be84..0969024ff 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -1,6 +1,6 @@
{
"name": "node-red",
- "version": "4.0.4",
+ "version": "4.0.5",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
@@ -31,10 +31,10 @@
"flow"
],
"dependencies": {
- "@node-red/editor-api": "4.0.4",
- "@node-red/runtime": "4.0.4",
- "@node-red/util": "4.0.4",
- "@node-red/nodes": "4.0.4",
+ "@node-red/editor-api": "4.0.5",
+ "@node-red/runtime": "4.0.5",
+ "@node-red/util": "4.0.5",
+ "@node-red/nodes": "4.0.5",
"basic-auth": "2.0.1",
"bcryptjs": "2.4.3",
"cors": "2.8.5",
diff --git a/scripts/generate-publish-script.js b/scripts/generate-publish-script.js
index 0b2a75cd0..c31b2dd9e 100644
--- a/scripts/generate-publish-script.js
+++ b/scripts/generate-publish-script.js
@@ -36,10 +36,12 @@ function generateScript() {
packages.forEach(name => {
const tarName = name.replace(/@/,"").replace(/\//,"-")
lines.push(`npm publish ${tarName}-${version}.tgz ${tagArg}\n`);
- if (updateNextToLatest) {
- lines.push(`npm dist-tag add ${name}@${version} next\n`);
- }
})
+ if (updateNextToLatest) {
+ packages.forEach(name => {
+ lines.push(`npm dist-tag add ${name}@${version} next\n`);
+ })
+ }
resolve(lines.join(""))
});
}
From a7b1ce0cf84acf25d1517af1be2ff0b06e5293b5 Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Thu, 10 Oct 2024 15:47:42 +0200
Subject: [PATCH 062/173] Improve the node name auto-generated with the first
available nb
---
.../editor-client/src/js/ui/view-tools.js | 27 ++++++++++++-------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js
index f503beecb..22cb1eecd 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js
@@ -1102,18 +1102,27 @@ RED.view.tools = (function() {
const paletteLabel = RED.utils.getPaletteLabel(n.type, nodeDef)
const defaultNodeNameRE = new RegExp('^'+paletteLabel.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')+' (\\d+)$')
if (!typeIndex.hasOwnProperty(n.type)) {
- const existingNodes = RED.nodes.filterNodes({type: n.type})
- let maxNameNumber = 0;
- existingNodes.forEach(n => {
- let match = defaultNodeNameRE.exec(n.name)
+ const existingNodes = RED.nodes.filterNodes({ type: n.type });
+ const existingIds = existingNodes.reduce((ids, node) => {
+ let match = defaultNodeNameRE.exec(node.name);
if (match) {
- let nodeNumber = parseInt(match[1])
- if (nodeNumber > maxNameNumber) {
- maxNameNumber = nodeNumber
+ const nodeNumber = parseInt(match[1], 10);
+ if (!ids.includes(nodeNumber)) {
+ ids.push(nodeNumber);
}
}
- })
- typeIndex[n.type] = maxNameNumber + 1
+ return ids;
+ }, []).sort((a, b) => a - b);
+
+ let availableNameNumber = 1;
+ for (let i = 0; i < existingIds.length; i++) {
+ if (existingIds[i] !== availableNameNumber) {
+ break;
+ }
+ availableNameNumber++;
+ }
+
+ typeIndex[n.type] = availableNameNumber;
}
if ((options.renameBlank && n.name === '') || (options.renameClash && defaultNodeNameRE.test(n.name))) {
if (generateHistory) {
From 2eba7548013a0bfba56369abc1bc58f61f61d3ca Mon Sep 17 00:00:00 2001
From: Dave Conway-Jones
Date: Sat, 12 Oct 2024 16:49:09 +0100
Subject: [PATCH 063/173] Fix trigger node date handling for latest time type
input
to fix #4914
---
.../@node-red/nodes/core/function/89-trigger.js | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
index 16a00e99d..0fc6ad6fb 100644
--- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
+++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
@@ -166,7 +166,13 @@ module.exports = function(RED) {
if (err) {
reject(err);
} else {
- msg.payload = value;
+ if (node.op1type === "date") {
+ let d = new Date();
+ if (node.op1 == "1") { msg.payload = Date.now(); }
+ else if (node.op1 == "iso") { msg.payload = d.toISOString(); }
+ else { msg.payload = d; }
+ }
+ else { msg.payload = value; }
resolve();
}
});
@@ -213,7 +219,12 @@ module.exports = function(RED) {
}
else {
msg2.payload = node.topics[topic].m2;
- if (node.op2type === "date") { msg2.payload = Date.now(); }
+ if (node.op2type === "date") {
+ let d = new Date();
+ if (node.op2 == "0") { msg2.payload = Date.now(); }
+ else if (node.op2 == "iso") { msg2.payload = d.toISOString(); }
+ else { msg2.payload = d; }
+ }
if (node.second === true) { msgInfo.send([null,msg2]); }
else { msgInfo.send(msg2); }
}
From 61fd01b8716e62d5f26fbcc1d56f47ca6d05db5d Mon Sep 17 00:00:00 2001
From: Dave Conway-Jones
Date: Sat, 12 Oct 2024 17:09:18 +0100
Subject: [PATCH 064/173] And add some tests
---
test/nodes/core/function/89-trigger_spec.js | 24 +++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/test/nodes/core/function/89-trigger_spec.js b/test/nodes/core/function/89-trigger_spec.js
index 33401e540..e86ed7a31 100644
--- a/test/nodes/core/function/89-trigger_spec.js
+++ b/test/nodes/core/function/89-trigger_spec.js
@@ -111,7 +111,15 @@ describe('trigger node', function() {
try {
if (rval) {
msg.should.have.property("payload");
- should.deepEqual(msg.payload, rval);
+ if (type == "date" && val == "1") {
+ should.deepEqual(Math.round(msg.payload/10000), Math.round(rval/10000));
+ }
+ else if (type == "date" && val == "iso") {
+ should.deepEqual(msg.payload.substr(0,11), rval.substr(0,11));
+ }
+ else {
+ should.deepEqual(msg.payload, rval);
+ }
}
else {
msg.should.have.property("payload", val);
@@ -126,6 +134,7 @@ describe('trigger node', function() {
});
it('should output 2st value when triggered ('+type+')', function(done) {
+ if (type == "date" && val == "1") { val = "0"; }
var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", op1:"foo", op1type:"str", op2:val, op2type:type, duration:"20", wires:[["n2"]] },
{id:"n2", type:"helper"} ];
process.env[val] = rval;
@@ -142,7 +151,15 @@ describe('trigger node', function() {
else {
if (rval) {
msg.should.have.property("payload");
- should.deepEqual(msg.payload, rval);
+ if (type == "date" && val == "0") {
+ should.deepEqual(Math.round(msg.payload/10000), Math.round(rval/10000));
+ }
+ else if (type == "date" && val == "iso") {
+ should.deepEqual(msg.payload.substr(0,11), rval.substr(0,11));
+ }
+ else {
+ should.deepEqual(msg.payload, rval);
+ }
}
else {
msg.should.have.property("payload", val);
@@ -166,6 +183,9 @@ describe('trigger node', function() {
var val_buf = "[1,2,3,4,5]";
basicTest("bin", val_buf, Buffer.from(JSON.parse(val_buf)));
basicTest("env", "NR-TEST", "env-val");
+ basicTest("date", "1", Date.now());
+ basicTest("date", "iso", (new Date()).toISOString());
+ // basicTest("date", "object", Date.now());
it('should output 1 then 0 when triggered (default)', function(done) {
var flow = [{"id":"n1", "type":"trigger", "name":"triggerNode", duration:"20", wires:[["n2"]] },
From 892933ff758d240109fb0d711d322c73f672250d Mon Sep 17 00:00:00 2001
From: Dave Conway-Jones
Date: Sat, 12 Oct 2024 17:22:24 +0100
Subject: [PATCH 065/173] Update 89-trigger_spec.js
---
test/nodes/core/function/89-trigger_spec.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/nodes/core/function/89-trigger_spec.js b/test/nodes/core/function/89-trigger_spec.js
index e86ed7a31..f78db0423 100644
--- a/test/nodes/core/function/89-trigger_spec.js
+++ b/test/nodes/core/function/89-trigger_spec.js
@@ -112,7 +112,7 @@ describe('trigger node', function() {
if (rval) {
msg.should.have.property("payload");
if (type == "date" && val == "1") {
- should.deepEqual(Math.round(msg.payload/10000), Math.round(rval/10000));
+ should.deepEqual(Math.round(msg.payload/1000000), Math.round(Date.now()/1000000));
}
else if (type == "date" && val == "iso") {
should.deepEqual(msg.payload.substr(0,11), rval.substr(0,11));
@@ -152,7 +152,7 @@ describe('trigger node', function() {
if (rval) {
msg.should.have.property("payload");
if (type == "date" && val == "0") {
- should.deepEqual(Math.round(msg.payload/10000), Math.round(rval/10000));
+ should.deepEqual(Math.round(msg.payload/1000000), parseInt(Date.now()/1000000));
}
else if (type == "date" && val == "iso") {
should.deepEqual(msg.payload.substr(0,11), rval.substr(0,11));
From d0ad62a82bd2b3afea4183aa99fb2509589d7226 Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Mon, 21 Oct 2024 16:24:21 +0100
Subject: [PATCH 066/173] Revert trigger node fix
---
.../@node-red/nodes/core/function/89-trigger.js | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
index 0fc6ad6fb..16a00e99d 100644
--- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
+++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
@@ -166,13 +166,7 @@ module.exports = function(RED) {
if (err) {
reject(err);
} else {
- if (node.op1type === "date") {
- let d = new Date();
- if (node.op1 == "1") { msg.payload = Date.now(); }
- else if (node.op1 == "iso") { msg.payload = d.toISOString(); }
- else { msg.payload = d; }
- }
- else { msg.payload = value; }
+ msg.payload = value;
resolve();
}
});
@@ -219,12 +213,7 @@ module.exports = function(RED) {
}
else {
msg2.payload = node.topics[topic].m2;
- if (node.op2type === "date") {
- let d = new Date();
- if (node.op2 == "0") { msg2.payload = Date.now(); }
- else if (node.op2 == "iso") { msg2.payload = d.toISOString(); }
- else { msg2.payload = d; }
- }
+ if (node.op2type === "date") { msg2.payload = Date.now(); }
if (node.second === true) { msgInfo.send([null,msg2]); }
else { msgInfo.send(msg2); }
}
From b3aff3a3e6847f03ef851d98e68c80eafe27573d Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Mon, 21 Oct 2024 16:26:03 +0100
Subject: [PATCH 067/173] Ensure trigger node properties work with
evaluateNodeProperty
---
.../@node-red/nodes/core/function/89-trigger.js | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
index 16a00e99d..f0aaaf393 100644
--- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
+++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
@@ -24,6 +24,14 @@ module.exports = function(RED) {
this.op2 = n.op2 || "0";
this.op1type = n.op1type || "str";
this.op2type = n.op2type || "str";
+ // If the op1/2type is 'date', then we need to leave op1/2 alone so that
+ // evaluateNodeProperty works as expected.
+ if (this.op1type === 'date' && this.op1 === '1') {
+ this.op1 = ''
+ }
+ if (this.op2type === 'date' && this.op2 === '0') {
+ this.op2 = ''
+ }
this.second = (n.outputs == 2) ? true : false;
this.topic = n.topic || "topic";
@@ -213,7 +221,6 @@ module.exports = function(RED) {
}
else {
msg2.payload = node.topics[topic].m2;
- if (node.op2type === "date") { msg2.payload = Date.now(); }
if (node.second === true) { msgInfo.send([null,msg2]); }
else { msgInfo.send(msg2); }
}
From 2220956007347017a37d273ff8e1389f3bd48158 Mon Sep 17 00:00:00 2001
From: Nick O'Leary
Date: Mon, 21 Oct 2024 16:35:11 +0100
Subject: [PATCH 068/173] Ensure trigger second output is revaluated for date
types
---
.../node_modules/@node-red/nodes/core/function/89-trigger.js | 2 +-
test/nodes/core/function/89-trigger_spec.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
index f0aaaf393..8b3625f2d 100644
--- a/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
+++ b/packages/node_modules/@node-red/nodes/core/function/89-trigger.js
@@ -201,7 +201,7 @@ module.exports = function(RED) {
if (node.op2type !== "nul") {
var promise = Promise.resolve();
msg2 = RED.util.cloneMessage(msg);
- if (node.op2type === "flow" || node.op2type === "global") {
+ if (node.op2type === "flow" || node.op2type === "global" || node.op2type === "date") {
promise = new Promise((resolve,reject) => {
RED.util.evaluateNodeProperty(node.op2,node.op2type,node,msg,(err,value) => {
if (err) {
diff --git a/test/nodes/core/function/89-trigger_spec.js b/test/nodes/core/function/89-trigger_spec.js
index f78db0423..913298901 100644
--- a/test/nodes/core/function/89-trigger_spec.js
+++ b/test/nodes/core/function/89-trigger_spec.js
@@ -152,7 +152,7 @@ describe('trigger node', function() {
if (rval) {
msg.should.have.property("payload");
if (type == "date" && val == "0") {
- should.deepEqual(Math.round(msg.payload/1000000), parseInt(Date.now()/1000000));
+ ;(Math.round(msg.payload/1000000)).should.be.approximately(parseInt(Date.now()/1000000), 1);
}
else if (type == "date" && val == "iso") {
should.deepEqual(msg.payload.substr(0,11), rval.substr(0,11));
From 5a1c18de242b77aecc22241c651c908d90bb15ce Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Tue, 22 Oct 2024 15:14:46 +0200
Subject: [PATCH 069/173] Trigger button action of the selected nodes with new
Hotkey
---
.../@node-red/editor-client/src/js/keymap.json | 4 ++--
.../node_modules/@node-red/editor-client/src/js/nodes.js | 7 ++++++-
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/keymap.json b/packages/node_modules/@node-red/editor-client/src/js/keymap.json
index 1bedab6e8..39fdc02d5 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/keymap.json
+++ b/packages/node_modules/@node-red/editor-client/src/js/keymap.json
@@ -91,8 +91,8 @@
"alt-shift-w": "core:show-last-hidden-flow",
"ctrl-+": "core:zoom-in",
"ctrl--": "core:zoom-out",
- "ctrl-0": "core:zoom-reset"
-
+ "ctrl-0": "core:zoom-reset",
+ "ctrl-shift-t": "core:click-selected-nodes-button"
},
"red-ui-editor-stack": {
"ctrl-enter": "core:confirm-edit-tray",
diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
index 2a7b440f2..d831e4eae 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js
@@ -3013,7 +3013,12 @@ RED.nodes = (function() {
});
RED.events.on('deploy', function () {
allNodes.clearState()
- })
+ });
+ RED.actions.add("core:click-selected-nodes-button", function () {
+ const selectedNodes = RED.view.selection().nodes || [];
+ // Triggers the button action of the selected nodes
+ selectedNodes.forEach((node) => RED.view.clickNodeButton(node));
+ });
},
registry:registry,
setNodeList: registry.setNodeList,
From 7555e0644f3bc78cfa87f930ecbe9f7e99d3cb6c Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Wed, 23 Oct 2024 12:15:24 +0200
Subject: [PATCH 070/173] Apply `envVarExcludes` setting to
`RED.util.getSetting` into the function node
---
.../nodes/core/function/10-function.js | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/function/10-function.js b/packages/node_modules/@node-red/nodes/core/function/10-function.js
index 0120d8c92..8d365722f 100644
--- a/packages/node_modules/@node-red/nodes/core/function/10-function.js
+++ b/packages/node_modules/@node-red/nodes/core/function/10-function.js
@@ -111,8 +111,6 @@ module.exports = function(RED) {
throw new Error(RED._("function.error.externalModuleNotAllowed"));
}
-
-
var functionText = "var results = null;"+
"results = (async function(msg,__send__,__done__){ "+
"var __msgid__ = msg._msgid;"+
@@ -160,13 +158,26 @@ module.exports = function(RED) {
node.outstandingIntervals = [];
node.clearStatus = false;
+ const envVarExcludes = {};
+ if (RED.settings.envVarExcludes && Array.isArray(RED.settings.envVarExcludes)) {
+ RED.settings.envVarExcludes.forEach((e) => envVarExcludes[e] = true);
+ }
+
var sandbox = {
console:console,
util:util,
Buffer:Buffer,
Date: Date,
RED: {
- util: RED.util
+ util: {
+ ...RED.util,
+ getSetting: function (node, name, flow) {
+ if (envVarExcludes[name]) {
+ return undefined;
+ }
+ return RED.util.getSetting(node, name, flow);
+ }
+ }
},
__node__: {
id: node.id,
From 2fd7aee4dad20b8eea860f684dd80538e29e6892 Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Thu, 24 Oct 2024 13:44:40 +0200
Subject: [PATCH 071/173] Move `envVarExcludes` to the top scope
---
.../@node-red/nodes/core/function/10-function.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/packages/node_modules/@node-red/nodes/core/function/10-function.js b/packages/node_modules/@node-red/nodes/core/function/10-function.js
index 8d365722f..413830b72 100644
--- a/packages/node_modules/@node-red/nodes/core/function/10-function.js
+++ b/packages/node_modules/@node-red/nodes/core/function/10-function.js
@@ -22,6 +22,11 @@ module.exports = function(RED) {
var acorn = require("acorn");
var acornWalk = require("acorn-walk");
+ const envVarExcludes = {};
+ if (RED.settings.envVarExcludes && Array.isArray(RED.settings.envVarExcludes)) {
+ RED.settings.envVarExcludes.forEach((e) => envVarExcludes[e] = true);
+ }
+
function sendResults(node,send,_msgid,msgs,cloneFirstMessage) {
if (msgs == null) {
return;
@@ -158,11 +163,6 @@ module.exports = function(RED) {
node.outstandingIntervals = [];
node.clearStatus = false;
- const envVarExcludes = {};
- if (RED.settings.envVarExcludes && Array.isArray(RED.settings.envVarExcludes)) {
- RED.settings.envVarExcludes.forEach((e) => envVarExcludes[e] = true);
- }
-
var sandbox = {
console:console,
util:util,
From 83696abf9db7f433c38dec5f9deb5092f696bb71 Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Fri, 25 Oct 2024 17:34:51 +0200
Subject: [PATCH 072/173] Fixes and improvements with comments
---
.../src/js/ui/editors/panes/properties.js | 49 ++++++++++++-------
1 file changed, 31 insertions(+), 18 deletions(-)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/panes/properties.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/panes/properties.js
index 9b18ec35e..8f78b0a9a 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/editors/panes/properties.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editors/panes/properties.js
@@ -131,12 +131,15 @@
}
}
if (node._def.credentials) {
- const credsDefinition = node._def.credentials;
- const credsChanged = updateNodeCredentials(node, credsDefinition, this.inputClass);
+ const credDefinition = node._def.credentials;
+ const credChanges = updateNodeCredentials(node, credDefinition, this.inputClass);
- if (credsChanged) {
+ if (Object.keys(credChanges).length) {
editState.changed = true;
- editState.changes.credentials = node.credentials._;
+ editState.changes.credentials = {
+ ...(editState.changes.credentials || {}),
+ ...credChanges
+ };
}
}
}
@@ -165,10 +168,11 @@
* @param node - the node containing the credentials
* @param credDefinition - definition of the credentials
* @param prefix - prefix of the input fields
- * @return {boolean} whether anything has changed
+ * @return {object} an object containing the modified properties
*/
function updateNodeCredentials(node, credDefinition, prefix) {
- var changed = false;
+ const changes = {};
+
if (!node.credentials) {
node.credentials = {_:{}};
} else if (!node.credentials._) {
@@ -181,23 +185,32 @@
if (input.length > 0) {
var value = input.val();
if (credDefinition[cred].type == 'password') {
- node.credentials['has_' + cred] = (value !== "");
-
- // Skip if the credential has not changed
- if ((value === '__PWRD__' && node.credentials._['has_' + cred] === true) ||
- (value === "" && node.credentials._['has_' + cred] === false)) {
- continue;
+ if (value === '__PWRD__') {
+ // A cred value exists - no changes
+ } else if (value === '' && node.credentials['has_' + cred] === false) {
+ // Empty cred value exists - no changes
+ } else if (value === node.credentials[cred]) {
+ // A cred value exists locally in the editor - no changes
+ // Like the user sets a value, saves the config,
+ // reopens the config and save the config again
+ } else {
+ changes[cred] = node.credentials[cred];
+ node.credentials[cred] = value;
}
- changed = true;
- }
- node.credentials[cred] = value;
- if (value != node.credentials._[cred]) {
- changed = true;
+ node.credentials['has_' + cred] = (value !== '');
+ } else {
+ // Since these creds are loaded by the editor,
+ // values can be directly compared
+ if (value !== node.credentials[cred]) {
+ changes[cred] = node.credentials[cred];
+ node.credentials[cred] = value;
+ }
}
}
}
}
- return changed;
+
+ return changes;
}
})();
From 966064328f6fd92145729f7710da82cd98c3997d Mon Sep 17 00:00:00 2001
From: GogoVega <92022724+GogoVega@users.noreply.github.com>
Date: Fri, 25 Oct 2024 23:33:19 +0200
Subject: [PATCH 073/173] Add `oneditsave` credentials changes to history
---
.../editor-client/src/js/ui/editor.js | 26 +++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js
index 1bdd134fb..b656af0b0 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js
@@ -804,6 +804,17 @@ RED.editor = (function() {
}
}
+ const oldCreds = {};
+ if (editing_node._def.credentials) {
+ for (const prop in editing_node._def.credentials) {
+ if (Object.prototype.hasOwnProperty.call(editing_node._def.credentials, prop)) {
+ if (prop in editing_node.credentials) {
+ oldCreds[prop] = editing_node.credentials[prop];
+ }
+ }
+ }
+ }
+
try {
const rc = editing_node._def.oneditsave.call(editing_node);
if (rc === true) {
@@ -835,6 +846,21 @@ RED.editor = (function() {
}
}
}
+
+ if (editing_node._def.credentials) {
+ for (const prop in editing_node._def.credentials) {
+ if (Object.prototype.hasOwnProperty.call(editing_node._def.credentials, prop)) {
+ if (oldCreds[prop] !== editing_node.credentials[prop]) {
+ if (editing_node.credentials[prop] === '__PWRD__') {
+ continue;
+ }
+ editState.changes.credentials = editState.changes.credentials || {};
+ editState.changes.credentials[prop] = oldCreds[prop];
+ editState.changed = true;
+ }
+ }
+ }
+ }
}
}
From 24c6f4d655e7907cb23261352d56f8630bdc9313 Mon Sep 17 00:00:00 2001
From: Steve-Mcl
Date: Mon, 28 Oct 2024 11:03:29 +0000
Subject: [PATCH 074/173] updates monaco to latest. Includes fix for action
widget sizing
---
.../src/vendor/monaco/dist/css.worker.js | 2 +-
.../monaco/dist/css.worker.js.LICENSE.txt | 2 +-
.../src/vendor/monaco/dist/editor.js | 2 +-
.../vendor/monaco/dist/editor.js.LICENSE.txt | 2 +-
.../src/vendor/monaco/dist/editor.worker.js | 2 +-
...3396e1f13.ttf => f6283f7ccaed1249d9eb.ttf} | Bin 80188 -> 80340 bytes
.../src/vendor/monaco/dist/html.worker.js | 3 +-
.../monaco/dist/html.worker.js.LICENSE.txt | 2 +-
.../src/vendor/monaco/dist/json.worker.js | 2 +-
.../monaco/dist/json.worker.js.LICENSE.txt | 2 +-
.../src/vendor/monaco/dist/locale/cs.js | 172 ++++++++++-------
.../src/vendor/monaco/dist/locale/de.js | 172 ++++++++++-------
.../src/vendor/monaco/dist/locale/es.js | 174 ++++++++++-------
.../src/vendor/monaco/dist/locale/fr.js | 178 +++++++++++-------
.../src/vendor/monaco/dist/locale/it.js | 172 ++++++++++-------
.../src/vendor/monaco/dist/locale/ja.js | 176 ++++++++++-------
.../src/vendor/monaco/dist/locale/ko.js | 168 ++++++++++-------
.../src/vendor/monaco/dist/locale/pl.js | 176 ++++++++++-------
.../src/vendor/monaco/dist/locale/pt-br.js | 174 ++++++++++-------
.../src/vendor/monaco/dist/locale/qps-ploc.js | 170 ++++++++++-------
.../src/vendor/monaco/dist/locale/ru.js | 170 ++++++++++-------
.../src/vendor/monaco/dist/locale/tr.js | 174 ++++++++++-------
.../src/vendor/monaco/dist/locale/zh-hans.js | 170 ++++++++++-------
.../src/vendor/monaco/dist/locale/zh-hant.js | 174 ++++++++++-------
.../src/vendor/monaco/dist/ts.worker.js | 6 +-
25 files changed, 1516 insertions(+), 929 deletions(-)
rename packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/{8f3abbcbc983396e1f13.ttf => f6283f7ccaed1249d9eb.ttf} (89%)
diff --git a/packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/css.worker.js b/packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/css.worker.js
index 87f64a7a3..f9e3cfea6 100644
--- a/packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/css.worker.js
+++ b/packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/css.worker.js
@@ -1,2 +1,2 @@
/*! For license information please see css.worker.js.LICENSE.txt */
-(()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new ko("return this")()}catch(e){if("object"==typeof window)return window}}();const t=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout((()=>{if(e.stack){if(o.isErrorNoTelemetry(e))throw new o(e.message+"\n\n"+e.stack);throw new Error(e.message+"\n\n"+e.stack)}throw e}),0)}}emit(e){this.listeners.forEach((t=>{t(e)}))}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function n(e){var n;(n=e)instanceof s||n instanceof Error&&n.name===i&&n.message===i||t.onUnexpectedError(e)}function r(e){if(e instanceof Error){const{name:t,message:n}=e;return{$isError:!0,name:t,message:n,stack:e.stacktrace||e.stack,noTelemetry:o.isErrorNoTelemetry(e)}}return e}const i="Canceled";class s extends Error{constructor(){super(i),this.name=this.message}}class o extends Error{constructor(e){super(e),this.name="CodeExpectedError"}static fromError(e){if(e instanceof o)return e;const t=new o;return t.message=e.message,t.stack=e.stack,t}static isErrorNoTelemetry(e){return"CodeExpectedError"===e.name}}class a extends Error{constructor(e){super(e||"An unexpected bug occurred."),Object.setPrototypeOf(this,a.prototype)}}function l(e,t){const n=this;let r,i=!1;return function(){if(i)return r;if(i=!0,t)try{r=e.apply(n,arguments)}finally{t()}else r=e.apply(n,arguments);return r}}var c;!function(e){function t(e){return e&&"object"==typeof e&&"function"==typeof e[Symbol.iterator]}e.is=t;const n=Object.freeze([]);function*r(e){yield e}e.empty=function(){return n},e.single=r,e.wrap=function(e){return t(e)?e:r(e)},e.from=function(e){return e||n},e.reverse=function*(e){for(let t=e.length-1;t>=0;t--)yield e[t]},e.isEmpty=function(e){return!e||!0===e[Symbol.iterator]().next().done},e.first=function(e){return e[Symbol.iterator]().next().value},e.some=function(e,t){for(const n of e)if(t(n))return!0;return!1},e.find=function(e,t){for(const n of e)if(t(n))return n},e.filter=function*(e,t){for(const n of e)t(n)&&(yield n)},e.map=function*(e,t){let n=0;for(const r of e)yield t(r,n++)},e.concat=function*(...e){for(const t of e)yield*t},e.reduce=function(e,t,n){let r=n;for(const n of e)r=t(r,n);return r},e.slice=function*(e,t,n=e.length){for(t<0&&(t+=e.length),n<0?n+=e.length:n>e.length&&(n=e.length);ti}]},e.asyncToArray=async function(e){const t=[];for await(const n of e)t.push(n);return Promise.resolve(t)}}(c||(c={}));let h=null;function d(e){return null==h||h.trackDisposable(e),e}function p(e){null==h||h.markAsDisposed(e)}function u(e,t){null==h||h.setParent(e,t)}function m(e){if(c.is(e)){const t=[];for(const n of e)if(n)try{n.dispose()}catch(e){t.push(e)}if(1===t.length)throw t[0];if(t.length>1)throw new AggregateError(t,"Encountered errors while disposing of store");return Array.isArray(e)?[]:e}if(e)return e.dispose(),e}function f(e){const t=d({dispose:l((()=>{p(t),e()}))});return t}class g{constructor(){this._toDispose=new Set,this._isDisposed=!1,d(this)}dispose(){this._isDisposed||(p(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(0!==this._toDispose.size)try{m(this._toDispose)}finally{this._toDispose.clear()}}add(e){if(!e)return e;if(e===this)throw new Error("Cannot register a disposable on itself!");return u(e,this),this._isDisposed?g.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(e),e}deleteAndLeak(e){e&&this._toDispose.has(e)&&(this._toDispose.delete(e),u(e,null))}}g.DISABLE_DISPOSED_WARNING=!1;class b{constructor(){this._store=new g,d(this),u(this._store,this)}dispose(){p(this),this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}}b.None=Object.freeze({dispose(){}}),Symbol.iterator;class v{constructor(e){this.element=e,this.next=v.Undefined,this.prev=v.Undefined}}v.Undefined=new v(void 0);class y{constructor(){this._first=v.Undefined,this._last=v.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===v.Undefined}clear(){let e=this._first;for(;e!==v.Undefined;){const t=e.next;e.prev=v.Undefined,e.next=v.Undefined,e=t}this._first=v.Undefined,this._last=v.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const n=new v(e);if(this._first===v.Undefined)this._first=n,this._last=n;else if(t){const e=this._last;this._last=n,n.prev=e,e.next=n}else{const e=this._first;this._first=n,n.next=e,e.prev=n}this._size+=1;let r=!1;return()=>{r||(r=!0,this._remove(n))}}shift(){if(this._first!==v.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==v.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==v.Undefined&&e.next!==v.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===v.Undefined&&e.next===v.Undefined?(this._first=v.Undefined,this._last=v.Undefined):e.next===v.Undefined?(this._last=this._last.prev,this._last.next=v.Undefined):e.prev===v.Undefined&&(this._first=this._first.next,this._first.prev=v.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==v.Undefined;)yield e.element,e=e.next}}const w=globalThis.performance&&"function"==typeof globalThis.performance.now;class x{static create(e){return new x(e)}constructor(e){this._now=w&&!1===e?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}}var S;!function(e){function t(e){return(t,n=null,r)=>{let i,s=!1;return i=e((e=>{if(!s)return i?i.dispose():s=!0,t.call(n,e)}),null,r),s&&i.dispose(),i}}function n(e,t,n){return i(((n,r=null,i)=>e((e=>n.call(r,t(e))),null,i)),n)}function r(e,t,n){return i(((n,r=null,i)=>e((e=>t(e)&&n.call(r,e)),null,i)),n)}function i(e,t){let n;const r=new R({onWillAddFirstListener(){n=e(r.fire,r)},onDidRemoveLastListener(){null==n||n.dispose()}});return null==t||t.add(r),r.event}function s(e,t,n=100,r=!1,i=!1,s,o){let a,l,c,h,d=0;const p=new R({leakWarningThreshold:s,onWillAddFirstListener(){a=e((e=>{d++,l=t(l,e),r&&!c&&(p.fire(l),l=void 0),h=()=>{const e=l;l=void 0,c=void 0,(!r||d>1)&&p.fire(e),d=0},"number"==typeof n?(clearTimeout(c),c=setTimeout(h,n)):void 0===c&&(c=0,queueMicrotask(h))}))},onWillRemoveListener(){i&&d>0&&(null==h||h())},onDidRemoveLastListener(){h=void 0,a.dispose()}});return null==o||o.add(p),p.event}e.None=()=>b.None,e.defer=function(e,t){return s(e,(()=>{}),0,void 0,!0,void 0,t)},e.once=t,e.map=n,e.forEach=function(e,t,n){return i(((n,r=null,i)=>e((e=>{t(e),n.call(r,e)}),null,i)),n)},e.filter=r,e.signal=function(e){return e},e.any=function(...e){return(t,n=null,r)=>{return i=function(...e){const t=f((()=>m(e)));return function(e,t){if(h)for(const n of e)h.setParent(n,t)}(e,t),t}(...e.map((e=>e((e=>t.call(n,e)))))),(s=r)instanceof Array?s.push(i):s&&s.add(i),i;var i,s}},e.reduce=function(e,t,r,i){let s=r;return n(e,(e=>(s=t(s,e),s)),i)},e.debounce=s,e.accumulate=function(t,n=0,r){return e.debounce(t,((e,t)=>e?(e.push(t),e):[t]),n,void 0,!0,void 0,r)},e.latch=function(e,t=((e,t)=>e===t),n){let i,s=!0;return r(e,(e=>{const n=s||!t(e,i);return s=!1,i=e,n}),n)},e.split=function(t,n,r){return[e.filter(t,n,r),e.filter(t,(e=>!n(e)),r)]},e.buffer=function(e,t=!1,n=[],r){let i=n.slice(),s=e((e=>{i?i.push(e):a.fire(e)}));r&&r.add(s);const o=()=>{null==i||i.forEach((e=>a.fire(e))),i=null},a=new R({onWillAddFirstListener(){s||(s=e((e=>a.fire(e))),r&&r.add(s))},onDidAddFirstListener(){i&&(t?setTimeout(o):o())},onDidRemoveLastListener(){s&&s.dispose(),s=null}});return r&&r.add(a),a.event},e.chain=function(e,t){return(n,r,i)=>{const s=t(new a);return e((function(e){const t=s.evaluate(e);t!==o&&n.call(r,t)}),void 0,i)}};const o=Symbol("HaltChainable");class a{constructor(){this.steps=[]}map(e){return this.steps.push(e),this}forEach(e){return this.steps.push((t=>(e(t),t))),this}filter(e){return this.steps.push((t=>e(t)?t:o)),this}reduce(e,t){let n=t;return this.steps.push((t=>(n=e(n,t),n))),this}latch(e=((e,t)=>e===t)){let t,n=!0;return this.steps.push((r=>{const i=n||!e(r,t);return n=!1,t=r,i?r:o})),this}evaluate(e){for(const t of this.steps)if((e=t(e))===o)break;return e}}e.fromNodeEventEmitter=function(e,t,n=(e=>e)){const r=(...e)=>i.fire(n(...e)),i=new R({onWillAddFirstListener:()=>e.on(t,r),onDidRemoveLastListener:()=>e.removeListener(t,r)});return i.event},e.fromDOMEventEmitter=function(e,t,n=(e=>e)){const r=(...e)=>i.fire(n(...e)),i=new R({onWillAddFirstListener:()=>e.addEventListener(t,r),onDidRemoveLastListener:()=>e.removeEventListener(t,r)});return i.event},e.toPromise=function(e){return new Promise((n=>t(e)(n)))},e.fromPromise=function(e){const t=new R;return e.then((e=>{t.fire(e)}),(()=>{t.fire(void 0)})).finally((()=>{t.dispose()})),t.event},e.runAndSubscribe=function(e,t,n){return t(n),e((e=>t(e)))};class l{constructor(e,t){this._observable=e,this._counter=0,this._hasChanged=!1;const n={onWillAddFirstListener:()=>{e.addObserver(this)},onDidRemoveLastListener:()=>{e.removeObserver(this)}};this.emitter=new R(n),t&&t.add(this.emitter)}beginUpdate(e){this._counter++}handlePossibleChange(e){}handleChange(e,t){this._hasChanged=!0}endUpdate(e){this._counter--,0===this._counter&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}e.fromObservable=function(e,t){return new l(e,t).emitter.event},e.fromObservableLight=function(e){return(t,n,r)=>{let i=0,s=!1;const o={beginUpdate(){i++},endUpdate(){i--,0===i&&(e.reportChanges(),s&&(s=!1,t.call(n)))},handlePossibleChange(){},handleChange(){s=!0}};e.addObserver(o),e.reportChanges();const a={dispose(){e.removeObserver(o)}};return r instanceof g?r.add(a):Array.isArray(r)&&r.push(a),a}}}(S||(S={}));class C{constructor(e){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${e}_${C._idPool++}`,C.all.add(this)}start(e){this._stopWatch=new x,this.listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this.durations.push(e),this.elapsedOverall+=e,this.invocationCount+=1,this._stopWatch=void 0}}}C.all=new Set,C._idPool=0;class k{constructor(e,t=Math.random().toString(18).slice(2,5)){this.threshold=e,this.name=t,this._warnCountdown=0}dispose(){var e;null===(e=this._stacks)||void 0===e||e.clear()}check(e,t){const n=this.threshold;if(n<=0||t{const t=this._stacks.get(e.value)||0;this._stacks.set(e.value,t-1)}}}class _{static create(){var e;return new _(null!==(e=(new Error).stack)&&void 0!==e?e:"")}constructor(e){this.value=e}print(){console.warn(this.value.split("\n").slice(2).join("\n"))}}class E{constructor(e){this.value=e}}class R{constructor(e){var t,n,r,i,s;this._size=0,this._options=e,this._leakageMon=(null===(t=this._options)||void 0===t?void 0:t.leakWarningThreshold)?new k(null!==(r=null===(n=this._options)||void 0===n?void 0:n.leakWarningThreshold)&&void 0!==r?r:-1):void 0,this._perfMon=(null===(i=this._options)||void 0===i?void 0:i._profName)?new C(this._options._profName):void 0,this._deliveryQueue=null===(s=this._options)||void 0===s?void 0:s.deliveryQueue}dispose(){var e,t,n,r;this._disposed||(this._disposed=!0,(null===(e=this._deliveryQueue)||void 0===e?void 0:e.current)===this&&this._deliveryQueue.reset(),this._listeners&&(this._listeners=void 0,this._size=0),null===(n=null===(t=this._options)||void 0===t?void 0:t.onDidRemoveLastListener)||void 0===n||n.call(t),null===(r=this._leakageMon)||void 0===r||r.dispose())}get event(){var e;return null!==(e=this._event)&&void 0!==e||(this._event=(e,t,n)=>{var r,i,s,o,a;if(this._leakageMon&&this._size>3*this._leakageMon.threshold)return console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`),b.None;if(this._disposed)return b.None;t&&(e=e.bind(t));const l=new E(e);let c;this._leakageMon&&this._size>=Math.ceil(.2*this._leakageMon.threshold)&&(l.stack=_.create(),c=this._leakageMon.check(l.stack,this._size+1)),this._listeners?this._listeners instanceof E?(null!==(a=this._deliveryQueue)&&void 0!==a||(this._deliveryQueue=new N),this._listeners=[this._listeners,l]):this._listeners.push(l):(null===(i=null===(r=this._options)||void 0===r?void 0:r.onWillAddFirstListener)||void 0===i||i.call(r,this),this._listeners=l,null===(o=null===(s=this._options)||void 0===s?void 0:s.onDidAddFirstListener)||void 0===o||o.call(s,this)),this._size++;const h=f((()=>{null==c||c(),this._removeListener(l)}));return n instanceof g?n.add(h):Array.isArray(n)&&n.push(h),h}),this._event}_removeListener(e){var t,n,r,i;if(null===(n=null===(t=this._options)||void 0===t?void 0:t.onWillRemoveListener)||void 0===n||n.call(t,this),!this._listeners)return;if(1===this._size)return this._listeners=void 0,null===(i=null===(r=this._options)||void 0===r?void 0:r.onDidRemoveLastListener)||void 0===i||i.call(r,this),void(this._size=0);const s=this._listeners,o=s.indexOf(e);if(-1===o)throw console.log("disposed?",this._disposed),console.log("size?",this._size),console.log("arr?",JSON.stringify(this._listeners)),new Error("Attempted to dispose unknown listener");this._size--,s[o]=void 0;const a=this._deliveryQueue.current===this;if(2*this._size<=s.length){let e=0;for(let t=0;t0}}class N{constructor(){this.i=-1,this.end=0}enqueue(e,t,n){this.i=0,this.end=n,this.current=e,this.value=t}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}function F(e){const t=[];for(const n of function(e){let t=[];for(;Object.prototype!==e;)t=t.concat(Object.getOwnPropertyNames(e)),e=Object.getPrototypeOf(e);return t}(e))"function"==typeof e[n]&&t.push(n);return t}Object.prototype.hasOwnProperty;const D="object"==typeof globalThis?globalThis:"object"==typeof window?window:"object"==typeof self?self:e.g;let T="undefined"!=typeof document&&document.location&&document.location.hash.indexOf("pseudo=true")>=0;function A(e,t,n,...r){const i="object"==typeof t?t.key:t;let s=(((D.MonacoLocale||{}||{}).data||{})[e]||{})[i];s||(s=n),r=[];for(let e=3;e=0,W=P.indexOf("Macintosh")>=0,j=(P.indexOf("Macintosh")>=0||P.indexOf("iPad")>=0||P.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,V=P.indexOf("Linux")>=0,H=(null==P?void 0:P.indexOf("Mobi"))>=0,K=!0,A("vs/base/common/platform",{key:"ensureLoaderPluginIsLoaded",comment:["{Locked}"]},"_"),L=(self.MonacoLocale||{}).language||I,G=L,J=navigator.language);let te=0;W?te=1:O?te=3:V&&(te=2);const ne=O,re=W,ie=(K&&"function"==typeof Y.importScripts&&Y.origin,P),se="function"==typeof Y.postMessage&&!Y.importScripts;(()=>{if(se){const e=[];Y.addEventListener("message",(t=>{if(t.data&&t.data.vscodeScheduleAsyncWork)for(let n=0,r=e.length;n=0);function ae(e){return e}ie&&ie.indexOf("Firefox"),!oe&&ie&&ie.indexOf("Safari"),ie&&ie.indexOf("Edg/"),ie&&ie.indexOf("Android");class le{constructor(e){this.executor=e,this._didRun=!1}get value(){if(!this._didRun)try{this._value=this.executor()}catch(e){this._error=e}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}var ce;function he(e){return e>=65&&e<=90}function de(e){return 55296<=e&&e<=56319}function pe(e){return 56320<=e&&e<=57343}function ue(e,t){return t-56320+(e-55296<<10)+65536}function me(e,t,n){const r=e.charCodeAt(n);if(de(r)&&n+1t[3*r+1]))return t[3*r+2];r=2*r+1}return 0}}ge._INSTANCE=null;class be{static getInstance(e){return ce.cache.get(Array.from(e))}static getLocales(){return ce._locales.value}constructor(e){this.confusableDictionary=e}isAmbiguous(e){return this.confusableDictionary.has(e)}getPrimaryConfusable(e){return this.confusableDictionary.get(e)}getConfusableCodePoints(){return new Set(this.confusableDictionary.keys())}}ce=be,be.ambiguousCharacterData=new le((()=>JSON.parse('{"_common":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],"_default":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"cs":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"de":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"es":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"fr":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"it":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"ja":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],"ko":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"pl":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"pt-BR":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"qps-ploc":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"ru":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"tr":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"zh-hans":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],"zh-hant":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}'))),be.cache=new class{constructor(e,t){this.lastCache=void 0,this.lastArgKey=void 0,"function"==typeof e?(this._fn=e,this._computeKey=ae):(this._fn=t,this._computeKey=e.getCacheKey)}get(e){const t=this._computeKey(e);return this.lastArgKey!==t&&(this.lastArgKey=t,this.lastCache=this._fn(e)),this.lastCache}}({getCacheKey:JSON.stringify},(e=>{function t(e){const t=new Map;for(let n=0;n!e.startsWith("_")&&e in r));0===s.length&&(s=["_default"]);for(const e of s)i=n(i,t(r[e]));const o=function(e,t){const n=new Map(e);for(const[e,r]of t)n.set(e,r);return n}(t(r._common),i);return new ce(o)})),be._locales=new le((()=>Object.keys(ce.ambiguousCharacterData.value).filter((e=>!e.startsWith("_")))));class ve{static getRawData(){return JSON.parse("[9,10,11,12,13,32,127,160,173,847,1564,4447,4448,6068,6069,6155,6156,6157,6158,7355,7356,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,10240,12288,12644,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279,65440,65520,65521,65522,65523,65524,65525,65526,65527,65528,65532,78844,119155,119156,119157,119158,119159,119160,119161,119162,917504,917505,917506,917507,917508,917509,917510,917511,917512,917513,917514,917515,917516,917517,917518,917519,917520,917521,917522,917523,917524,917525,917526,917527,917528,917529,917530,917531,917532,917533,917534,917535,917536,917537,917538,917539,917540,917541,917542,917543,917544,917545,917546,917547,917548,917549,917550,917551,917552,917553,917554,917555,917556,917557,917558,917559,917560,917561,917562,917563,917564,917565,917566,917567,917568,917569,917570,917571,917572,917573,917574,917575,917576,917577,917578,917579,917580,917581,917582,917583,917584,917585,917586,917587,917588,917589,917590,917591,917592,917593,917594,917595,917596,917597,917598,917599,917600,917601,917602,917603,917604,917605,917606,917607,917608,917609,917610,917611,917612,917613,917614,917615,917616,917617,917618,917619,917620,917621,917622,917623,917624,917625,917626,917627,917628,917629,917630,917631,917760,917761,917762,917763,917764,917765,917766,917767,917768,917769,917770,917771,917772,917773,917774,917775,917776,917777,917778,917779,917780,917781,917782,917783,917784,917785,917786,917787,917788,917789,917790,917791,917792,917793,917794,917795,917796,917797,917798,917799,917800,917801,917802,917803,917804,917805,917806,917807,917808,917809,917810,917811,917812,917813,917814,917815,917816,917817,917818,917819,917820,917821,917822,917823,917824,917825,917826,917827,917828,917829,917830,917831,917832,917833,917834,917835,917836,917837,917838,917839,917840,917841,917842,917843,917844,917845,917846,917847,917848,917849,917850,917851,917852,917853,917854,917855,917856,917857,917858,917859,917860,917861,917862,917863,917864,917865,917866,917867,917868,917869,917870,917871,917872,917873,917874,917875,917876,917877,917878,917879,917880,917881,917882,917883,917884,917885,917886,917887,917888,917889,917890,917891,917892,917893,917894,917895,917896,917897,917898,917899,917900,917901,917902,917903,917904,917905,917906,917907,917908,917909,917910,917911,917912,917913,917914,917915,917916,917917,917918,917919,917920,917921,917922,917923,917924,917925,917926,917927,917928,917929,917930,917931,917932,917933,917934,917935,917936,917937,917938,917939,917940,917941,917942,917943,917944,917945,917946,917947,917948,917949,917950,917951,917952,917953,917954,917955,917956,917957,917958,917959,917960,917961,917962,917963,917964,917965,917966,917967,917968,917969,917970,917971,917972,917973,917974,917975,917976,917977,917978,917979,917980,917981,917982,917983,917984,917985,917986,917987,917988,917989,917990,917991,917992,917993,917994,917995,917996,917997,917998,917999]")}static getData(){return this._data||(this._data=new Set(ve.getRawData())),this._data}static isInvisibleCharacter(e){return ve.getData().has(e)}static get codePoints(){return ve.getData()}}ve._data=void 0;let ye;class we{constructor(e,t,n,r){this.vsWorker=e,this.req=t,this.method=n,this.args=r,this.type=0}}class xe{constructor(e,t,n,r){this.vsWorker=e,this.seq=t,this.res=n,this.err=r,this.type=1}}class Se{constructor(e,t,n,r){this.vsWorker=e,this.req=t,this.eventName=n,this.arg=r,this.type=2}}class Ce{constructor(e,t,n){this.vsWorker=e,this.req=t,this.event=n,this.type=3}}class ke{constructor(e,t){this.vsWorker=e,this.req=t,this.type=4}}class _e{constructor(e){this._workerId=-1,this._handler=e,this._lastSentReq=0,this._pendingReplies=Object.create(null),this._pendingEmitters=new Map,this._pendingEvents=new Map}setWorkerId(e){this._workerId=e}sendMessage(e,t){const n=String(++this._lastSentReq);return new Promise(((r,i)=>{this._pendingReplies[n]={resolve:r,reject:i},this._send(new we(this._workerId,n,e,t))}))}listen(e,t){let n=null;const r=new R({onWillAddFirstListener:()=>{n=String(++this._lastSentReq),this._pendingEmitters.set(n,r),this._send(new Se(this._workerId,n,e,t))},onDidRemoveLastListener:()=>{this._pendingEmitters.delete(n),this._send(new ke(this._workerId,n)),n=null}});return r.event}handleMessage(e){e&&e.vsWorker&&(-1!==this._workerId&&e.vsWorker!==this._workerId||this._handleMessage(e))}_handleMessage(e){switch(e.type){case 1:return this._handleReplyMessage(e);case 0:return this._handleRequestMessage(e);case 2:return this._handleSubscribeEventMessage(e);case 3:return this._handleEventMessage(e);case 4:return this._handleUnsubscribeEventMessage(e)}}_handleReplyMessage(e){if(!this._pendingReplies[e.seq])return void console.warn("Got reply to unknown seq");const t=this._pendingReplies[e.seq];if(delete this._pendingReplies[e.seq],e.err){let n=e.err;return e.err.$isError&&(n=new Error,n.name=e.err.name,n.message=e.err.message,n.stack=e.err.stack),void t.reject(n)}t.resolve(e.res)}_handleRequestMessage(e){const t=e.req;this._handler.handleMessage(e.method,e.args).then((e=>{this._send(new xe(this._workerId,t,e,void 0))}),(e=>{e.detail instanceof Error&&(e.detail=r(e.detail)),this._send(new xe(this._workerId,t,void 0,r(e)))}))}_handleSubscribeEventMessage(e){const t=e.req,n=this._handler.handleEvent(e.eventName,e.arg)((e=>{this._send(new Ce(this._workerId,t,e))}));this._pendingEvents.set(t,n)}_handleEventMessage(e){this._pendingEmitters.has(e.req)?this._pendingEmitters.get(e.req).fire(e.event):console.warn("Got event for unknown req")}_handleUnsubscribeEventMessage(e){this._pendingEvents.has(e.req)?(this._pendingEvents.get(e.req).dispose(),this._pendingEvents.delete(e.req)):console.warn("Got unsubscribe for unknown req")}_send(e){const t=[];if(0===e.type)for(let n=0;n{e(t,n)},handleMessage:(e,t)=>this._handleMessage(e,t),handleEvent:(e,t)=>this._handleEvent(e,t)})}onmessage(e){this._protocol.handleMessage(e)}_handleMessage(e,t){if("$initialize"===e)return this.initialize(t[0],t[1],t[2],t[3]);if(!this._requestHandler||"function"!=typeof this._requestHandler[e])return Promise.reject(new Error("Missing requestHandler or method: "+e));try{return Promise.resolve(this._requestHandler[e].apply(this._requestHandler,t))}catch(e){return Promise.reject(e)}}_handleEvent(e,t){if(!this._requestHandler)throw new Error("Missing requestHandler");if(Re(e)){const n=this._requestHandler[e].call(this._requestHandler,t);if("function"!=typeof n)throw new Error(`Missing dynamic event ${e} on request handler.`);return n}if(Ee(e)){const t=this._requestHandler[e];if("function"!=typeof t)throw new Error(`Missing event ${e} on request handler.`);return t}throw new Error(`Malformed event name ${e}`)}initialize(e,t,n,r){this._protocol.setWorkerId(e);const i=function(e,t,n){const r=e=>function(){const n=Array.prototype.slice.call(arguments,0);return t(e,n)},i=e=>function(t){return n(e,t)},s={};for(const t of e)Re(t)?s[t]=i(t):Ee(t)?s[t]=n(t,void 0):s[t]=r(t);return s}(r,((e,t)=>this._protocol.sendMessage(e,t)),((e,t)=>this._protocol.listen(e,t)));return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(i),Promise.resolve(F(this._requestHandler))):(t&&(void 0!==t.baseUrl&&delete t.baseUrl,void 0!==t.paths&&void 0!==t.paths.vs&&delete t.paths.vs,void 0!==t.trustedTypesPolicy&&delete t.trustedTypesPolicy,t.catchError=!0,globalThis.require.config(t)),new Promise(((e,t)=>{(0,globalThis.require)([n],(n=>{this._requestHandler=n.create(i),this._requestHandler?e(F(this._requestHandler)):t(new Error("No RequestHandler!"))}),t)})))}}class Fe{constructor(e,t,n,r){this.originalStart=e,this.originalLength=t,this.modifiedStart=n,this.modifiedLength=r}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}function De(e,t){return(t<<5)-t+e|0}function Te(e,t){t=De(149417,t);for(let n=0,r=e.length;n>>r)>>>0}function Me(e,t=0,n=e.byteLength,r=0){for(let i=0;ie.toString(16).padStart(2,"0"))).join(""):function(e,t,n="0"){for(;e.length>>0).toString(16),t/4)}class Ie{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(e){const t=e.length;if(0===t)return;const n=this._buff;let r,i,s=this._buffLen,o=this._leftoverHighSurrogate;for(0!==o?(r=o,i=-1,o=0):(r=e.charCodeAt(0),i=0);;){let a=r;if(de(r)){if(!(i+1>>6,e[t++]=128|(63&n)>>>0):n<65536?(e[t++]=224|(61440&n)>>>12,e[t++]=128|(4032&n)>>>6,e[t++]=128|(63&n)>>>0):(e[t++]=240|(1835008&n)>>>18,e[t++]=128|(258048&n)>>>12,e[t++]=128|(4032&n)>>>6,e[t++]=128|(63&n)>>>0),t>=64&&(this._step(),t-=64,this._totalLen+=64,e[0]=e[64],e[1]=e[65],e[2]=e[66]),t}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),ze(this._h0)+ze(this._h1)+ze(this._h2)+ze(this._h3)+ze(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,Me(this._buff,this._buffLen),this._buffLen>56&&(this._step(),Me(this._buff));const e=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(e/4294967296),!1),this._buffDV.setUint32(60,e%4294967296,!1),this._step()}_step(){const e=Ie._bigBlock32,t=this._buffDV;for(let n=0;n<64;n+=4)e.setUint32(n,t.getUint32(n,!1),!1);for(let t=64;t<320;t+=4)e.setUint32(t,Ae(e.getUint32(t-12,!1)^e.getUint32(t-32,!1)^e.getUint32(t-56,!1)^e.getUint32(t-64,!1),1),!1);let n,r,i,s=this._h0,o=this._h1,a=this._h2,l=this._h3,c=this._h4;for(let t=0;t<80;t++)t<20?(n=o&a|~o&l,r=1518500249):t<40?(n=o^a^l,r=1859775393):t<60?(n=o&a|o&l|a&l,r=2400959708):(n=o^a^l,r=3395469782),i=Ae(s,5)+n+c+r+e.getUint32(4*t,!1)&4294967295,c=l,l=a,a=Ae(o,30),o=s,s=i;this._h0=this._h0+s&4294967295,this._h1=this._h1+o&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+c&4294967295}}Ie._bigBlock32=new DataView(new ArrayBuffer(320));class Le{constructor(e){this.source=e}getElements(){const e=this.source,t=new Int32Array(e.length);for(let n=0,r=e.length;n0||this.m_modifiedCount>0)&&this.m_changes.push(new Fe(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_originalCount++}AddModifiedElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class Ue{constructor(e,t,n=null){this.ContinueProcessingPredicate=n,this._originalSequence=e,this._modifiedSequence=t;const[r,i,s]=Ue._getElements(e),[o,a,l]=Ue._getElements(t);this._hasStrings=s&&l,this._originalStringElements=r,this._originalElementsOrHash=i,this._modifiedStringElements=o,this._modifiedElementsOrHash=a,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&"string"==typeof e[0]}static _getElements(e){const t=e.getElements();if(Ue._isStringArray(t)){const e=new Int32Array(t.length);for(let n=0,r=t.length;n=e&&r>=n&&this.ElementsAreEqual(t,r);)t--,r--;if(e>t||n>r){let i;return n<=r?(Oe.Assert(e===t+1,"originalStart should only be one more than originalEnd"),i=[new Fe(e,0,n,r-n+1)]):e<=t?(Oe.Assert(n===r+1,"modifiedStart should only be one more than modifiedEnd"),i=[new Fe(e,t-e+1,n,0)]):(Oe.Assert(e===t+1,"originalStart should only be one more than originalEnd"),Oe.Assert(n===r+1,"modifiedStart should only be one more than modifiedEnd"),i=[]),i}const s=[0],o=[0],a=this.ComputeRecursionPoint(e,t,n,r,s,o,i),l=s[0],c=o[0];if(null!==a)return a;if(!i[0]){const s=this.ComputeDiffRecursive(e,l,n,c,i);let o=[];return o=i[0]?[new Fe(l+1,t-(l+1)+1,c+1,r-(c+1)+1)]:this.ComputeDiffRecursive(l+1,t,c+1,r,i),this.ConcatenateChanges(s,o)}return[new Fe(e,t-e+1,n,r-n+1)]}WALKTRACE(e,t,n,r,i,s,o,a,l,c,h,d,p,u,m,f,g,b){let v=null,y=null,w=new Ve,x=t,S=n,C=p[0]-f[0]-r,k=-1073741824,_=this.m_forwardHistory.length-1;do{const t=C+e;t===x||t=0&&(e=(l=this.m_forwardHistory[_])[0],x=1,S=l.length-1)}while(--_>=-1);if(v=w.getReverseChanges(),b[0]){let e=p[0]+1,t=f[0]+1;if(null!==v&&v.length>0){const n=v[v.length-1];e=Math.max(e,n.getOriginalEnd()),t=Math.max(t,n.getModifiedEnd())}y=[new Fe(e,d-e+1,t,m-t+1)]}else{w=new Ve,x=s,S=o,C=p[0]-f[0]-a,k=1073741824,_=g?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=C+i;e===x||e=c[e+1]?(u=(h=c[e+1]-1)-C-a,h>k&&w.MarkNextChange(),k=h+1,w.AddOriginalElement(h+1,u+1),C=e+1-i):(u=(h=c[e-1])-C-a,h>k&&w.MarkNextChange(),k=h,w.AddModifiedElement(h+1,u+1),C=e-1-i),_>=0&&(i=(c=this.m_reverseHistory[_])[0],x=1,S=c.length-1)}while(--_>=-1);y=w.getChanges()}return this.ConcatenateChanges(v,y)}ComputeRecursionPoint(e,t,n,r,i,s,o){let a=0,l=0,c=0,h=0,d=0,p=0;e--,n--,i[0]=0,s[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const u=t-e+(r-n),m=u+1,f=new Int32Array(m),g=new Int32Array(m),b=r-n,v=t-e,y=e-n,w=t-r,x=(v-b)%2==0;f[b]=e,g[v]=t,o[0]=!1;for(let S=1;S<=u/2+1;S++){let u=0,C=0;c=this.ClipDiagonalBound(b-S,S,b,m),h=this.ClipDiagonalBound(b+S,S,b,m);for(let e=c;e<=h;e+=2){a=e===c||eu+C&&(u=a,C=l),!x&&Math.abs(e-v)<=S-1&&a>=g[e])return i[0]=a,s[0]=l,n<=g[e]&&S<=1448?this.WALKTRACE(b,c,h,y,v,d,p,w,f,g,a,t,i,l,r,s,x,o):null}const k=(u-e+(C-n)-S)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(u,k))return o[0]=!0,i[0]=u,s[0]=C,k>0&&S<=1448?this.WALKTRACE(b,c,h,y,v,d,p,w,f,g,a,t,i,l,r,s,x,o):(e++,n++,[new Fe(e,t-e+1,n,r-n+1)]);d=this.ClipDiagonalBound(v-S,S,v,m),p=this.ClipDiagonalBound(v+S,S,v,m);for(let u=d;u<=p;u+=2){a=u===d||u