From d7a10328c047b2d9bad9733c79f1c5d536fe7fdf Mon Sep 17 00:00:00 2001 From: NetHans Date: Sun, 14 Aug 2022 20:20:59 +0200 Subject: [PATCH 01/56] function for group analysis added --- .../@node-red/runtime/lib/flows/Flow.js | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index b5685d3ec..6350755c5 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -128,6 +128,65 @@ class Flow { } this.parent.log(msg); } + + /** + * Checks if node A and node B are in the same group. + * Node B can also be placed in a subgroup. + * If node A is not in any group, false is returned + * @param {[type]} nodeIdA [description] + * @param {[type]} nodeIdB [description] + * @returns {[type]} Returns true if all nodes are in the same group. If not, then false or if node A is not in a group then also false. + */ + isNodeInSameGroup(nodeIdA, nodeIdB) { + const groups = this.global.groups; + let result = false; + for(let key in groups) { + let group = groups[key]; + + if(!group.nodes.includes(nodeIdA.id)) { + continue; + } + + if(group.nodes.includes(nodeIdB.id)) { + result = true; + break; + } + + /** + * Subfunction to recursively search the groups for matches + * @param {[type]} targetNode [description] + * @param {[type]} targetGroup [description] + * @returns Returns true if a match was found. Otherwise false. + */ + const isInSubGroup = (targetNode, targetGroup) => { + let _result = false; + if(targetGroup.nodes.includes(targetNode.id)) { + _result = true; + } else { + for(let nodeId of targetGroup.nodes) { + let node = this.getGroupNode(nodeId); + + if(!node){ + continue; + } + + if(node.type === "group"){ + let result = isInSubGroup(targetNode, node); + if(result === true){ + _result = true; + break; + } + } + } + } + + return _result; + }; + + result = isInSubGroup(nodeIdB, group); + } + return result; + } /** * Start this flow. From 08ce6cce97f81a3db9d0ffe1c5f3c9297646ce07 Mon Sep 17 00:00:00 2001 From: NetHans Date: Sun, 14 Aug 2022 20:24:05 +0200 Subject: [PATCH 02/56] status node extended --- .../@node-red/nodes/core/common/25-status.html | 5 +++++ .../node_modules/@node-red/nodes/locales/de/messages.json | 1 + .../@node-red/nodes/locales/en-US/messages.json | 1 + packages/node_modules/@node-red/runtime/lib/flows/Flow.js | 8 +++++++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/nodes/core/common/25-status.html b/packages/node_modules/@node-red/nodes/core/common/25-status.html index 47a3192e4..4c1b9c313 100644 --- a/packages/node_modules/@node-red/nodes/core/common/25-status.html +++ b/packages/node_modules/@node-red/nodes/core/common/25-status.html @@ -4,6 +4,7 @@ @@ -157,6 +158,8 @@ }); if (this.scope === null) { $("#node-input-scope-select").val("all"); + } else if(this.scope === "group"){ + $("#node-input-scope-select").val("group"); } else { $("#node-input-scope-select").val("target"); } @@ -166,6 +169,8 @@ var scope = $("#node-input-scope-select").val(); if (scope === 'all') { this.scope = null; + } else if(scope === 'group') { + this.scope = "group"; } else { this.scope = $("#node-input-status-target-container-div").treeList('selected').map(function(i) { return i.node.id}) } diff --git a/packages/node_modules/@node-red/nodes/locales/de/messages.json b/packages/node_modules/@node-red/nodes/locales/de/messages.json index 65f251e98..2ae7ba3b8 100755 --- a/packages/node_modules/@node-red/nodes/locales/de/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/de/messages.json @@ -110,6 +110,7 @@ }, "scope": { "all": "allen Nodes", + "group": "in gleicher Gruppe", "selected": "ausgewählten Nodes" } }, diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index 62d5f351f..8318693b0 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -115,6 +115,7 @@ }, "scope": { "all": "all nodes", + "group": "in same group", "selected": "selected nodes" } }, diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 6350755c5..56c98be0e 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -665,10 +665,16 @@ class Flow { } handled = true; } else { + const flow = this; this.statusNodes.forEach(function(targetStatusNode) { - if (targetStatusNode.scope && targetStatusNode.scope.indexOf(reportingNode.id) === -1) { + if (Array.isArray(targetStatusNode.scope) && targetStatusNode.scope.indexOf(reportingNode.id) === -1) { return; } + + if (targetStatusNode.scope === "group" && flow.isNodeInSameGroup(targetStatusNode, reportingNode) === false){ + return; + } + var message = { status: clone(statusMessage) } From 371253a4f6fff9b11a83fcba0c323ac92e82f641 Mon Sep 17 00:00:00 2001 From: NetHans Date: Sun, 14 Aug 2022 20:28:34 +0200 Subject: [PATCH 03/56] catch node extended --- .../@node-red/nodes/core/common/25-catch.html | 5 +++++ .../@node-red/nodes/locales/de/messages.json | 1 + .../@node-red/nodes/locales/en-US/messages.json | 1 + .../node_modules/@node-red/runtime/lib/flows/Flow.js | 10 ++++++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/common/25-catch.html b/packages/node_modules/@node-red/nodes/core/common/25-catch.html index 0b976ea78..4c591226d 100644 --- a/packages/node_modules/@node-red/nodes/core/common/25-catch.html +++ b/packages/node_modules/@node-red/nodes/core/common/25-catch.html @@ -4,6 +4,7 @@ @@ -170,6 +171,8 @@ }); if (this.scope === null) { $("#node-input-scope-select").val("all"); + } else if(this.scope === "group"){ + $("#node-input-scope-select").val("group"); } else { $("#node-input-scope-select").val("target"); } @@ -179,6 +182,8 @@ var scope = $("#node-input-scope-select").val(); if (scope === 'all') { this.scope = null; + } else if(scope === 'group') { + this.scope = "group"; } else { $("#node-input-uncaught").prop("checked",false); this.scope = $("#node-input-catch-target-container-div").treeList('selected').map(function(i) { return i.node.id}) diff --git a/packages/node_modules/@node-red/nodes/locales/de/messages.json b/packages/node_modules/@node-red/nodes/locales/de/messages.json index 2ae7ba3b8..edc881001 100755 --- a/packages/node_modules/@node-red/nodes/locales/de/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/de/messages.json @@ -98,6 +98,7 @@ }, "scope": { "all": "allen Nodes", + "group": "in gleicher Gruppe", "selected": "ausgewählten Nodes" } }, diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index 8318693b0..b600bda91 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -103,6 +103,7 @@ }, "scope": { "all": "all nodes", + "group": "in same group", "selected": "selected nodes" } }, diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 56c98be0e..7df148b7f 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -734,11 +734,17 @@ class Flow { } else { var handledByUncaught = false; + const flow = this; this.catchNodes.forEach(function(targetCatchNode) { - if (targetCatchNode.scope && targetCatchNode.scope.indexOf(reportingNode.id) === -1) { + if (Array.isArray(targetCatchNode.scope) && targetCatchNode.scope.indexOf(reportingNode.id) === -1) { return; } - if (!targetCatchNode.scope && targetCatchNode.uncaught && !handledByUncaught) { + + if (targetCatchNode.scope === "group" && flow.isNodeInSameGroup(targetCatchNode, reportingNode) === false){ + return; + } + + if ((!targetCatchNode.scope || targetCatchNode.scope === "group") && targetCatchNode.uncaught && !handledByUncaught) { if (handled) { // This has been handled by a !uncaught catch node return; From b7a016edcfde73de6d309edbd50309e948143cdd Mon Sep 17 00:00:00 2001 From: NetHans Date: Tue, 16 Aug 2022 06:37:03 +0200 Subject: [PATCH 04/56] Update Flow.js replace tabs with whitespace --- .../@node-red/runtime/lib/flows/Flow.js | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 7df148b7f..4f87854ea 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -137,32 +137,32 @@ class Flow { * @param {[type]} nodeIdB [description] * @returns {[type]} Returns true if all nodes are in the same group. If not, then false or if node A is not in a group then also false. */ - isNodeInSameGroup(nodeIdA, nodeIdB) { - const groups = this.global.groups; + isNodeInSameGroup(nodeIdA, nodeIdB) { + const groups = this.global.groups; let result = false; - for(let key in groups) { - let group = groups[key]; + for(let key in groups) { + let group = groups[key]; - if(!group.nodes.includes(nodeIdA.id)) { - continue; - } + if(!group.nodes.includes(nodeIdA.id)) { + continue; + } - if(group.nodes.includes(nodeIdB.id)) { - result = true; + if(group.nodes.includes(nodeIdB.id)) { + result = true; break; - } - + } + /** * Subfunction to recursively search the groups for matches * @param {[type]} targetNode [description] * @param {[type]} targetGroup [description] * @returns Returns true if a match was found. Otherwise false. */ - const isInSubGroup = (targetNode, targetGroup) => { + const isInSubGroup = (targetNode, targetGroup) => { let _result = false; - if(targetGroup.nodes.includes(targetNode.id)) { - _result = true; - } else { + if(targetGroup.nodes.includes(targetNode.id)) { + _result = true; + } else { for(let nodeId of targetGroup.nodes) { let node = this.getGroupNode(nodeId); @@ -180,13 +180,13 @@ class Flow { } } - return _result; - }; - - result = isInSubGroup(nodeIdB, group); - } - return result; - } + return _result; + }; + + result = isInSubGroup(nodeIdB, group); + } + return result; + } /** * Start this flow. From e147602a3a587956cf8c42481d3e6a8c4e586223 Mon Sep 17 00:00:00 2001 From: NetHans Date: Thu, 18 Aug 2022 21:27:59 +0200 Subject: [PATCH 05/56] JSdoc documentation fixed --- .../node_modules/@node-red/runtime/lib/flows/Flow.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 4f87854ea..2616b8878 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -133,9 +133,9 @@ class Flow { * Checks if node A and node B are in the same group. * Node B can also be placed in a subgroup. * If node A is not in any group, false is returned - * @param {[type]} nodeIdA [description] - * @param {[type]} nodeIdB [description] - * @returns {[type]} Returns true if all nodes are in the same group. If not, then false or if node A is not in a group then also false. + * @param {Node} nodeIdA Node which defines the first search level + * @param {Node} nodeIdB Node which is to be searched in the group or a subgroup + * @returns {boolean} Returns true if all nodes are in the same group. If not, then false or if node A is not in a group then also false. */ isNodeInSameGroup(nodeIdA, nodeIdB) { const groups = this.global.groups; @@ -154,9 +154,9 @@ class Flow { /** * Subfunction to recursively search the groups for matches - * @param {[type]} targetNode [description] - * @param {[type]} targetGroup [description] - * @returns Returns true if a match was found. Otherwise false. + * @param {Node} Node which is to be searched in the group or a subgroup + * @param {Group} targetGroup group currently under analysis + * @returns {boolean} Returns true if a match was found. Otherwise false. */ const isInSubGroup = (targetNode, targetGroup) => { let _result = false; From b56bd7bb5ea82b80ae87c3004ef347e8750b1873 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 20 Mar 2023 17:15:45 +0000 Subject: [PATCH 06/56] Fix group selection when using lasso --- .../@node-red/editor-client/src/js/ui/view.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index dbde88a9a..5caa3d98f 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -189,7 +189,13 @@ RED.view = (function() { set.unshift(...removed) } }, - find: function(func) { return set.find(func) } + find: function(func) { return set.find(func) }, + dump: function () { + console.log('MovingSet Contents') + api.forEach((n, i) => { + console.log(`${i+1}\t${n.n.id}\t${n.n.type}`) + }) + } } return api; })(); @@ -1920,10 +1926,11 @@ RED.view = (function() { if (!movingSet.has(n) && !n.selected) { // group entirely within lasso if (n.x > x && n.y > y && n.x + n.w < x2 && n.y + n.h < y2) { - n.selected = true - n.dirty = true - var groupNodes = RED.group.getNodes(n,true); - groupNodes.forEach(gn => movingSet.add(gn)) + selectGroup(n, true) + // n.selected = true + // n.dirty = true + // var groupNodes = RED.group.getNodes(n,true); + // groupNodes.forEach(gn => movingSet.add(gn)) } } }) From 33ea25922d2a245b6fe8483c9faaadc249e09e03 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 20 Mar 2023 20:29:10 +0000 Subject: [PATCH 07/56] Update packages/node_modules/@node-red/editor-client/src/js/ui/view.js --- .../node_modules/@node-red/editor-client/src/js/ui/view.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 5caa3d98f..ec59c231a 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -1927,10 +1927,6 @@ RED.view = (function() { // group entirely within lasso if (n.x > x && n.y > y && n.x + n.w < x2 && n.y + n.h < y2) { selectGroup(n, true) - // n.selected = true - // n.dirty = true - // var groupNodes = RED.group.getNodes(n,true); - // groupNodes.forEach(gn => movingSet.add(gn)) } } }) From 889489e33ecd70400c3a3b3b970d2ae6666d3c3f Mon Sep 17 00:00:00 2001 From: Kevin Godell Date: Mon, 20 Mar 2023 16:32:14 -0500 Subject: [PATCH 08/56] set default when root is not defined --- packages/node_modules/node-red/red.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/node-red/red.js b/packages/node_modules/node-red/red.js index 2f5ab354c..22b1eb224 100755 --- a/packages/node_modules/node-red/red.js +++ b/packages/node_modules/node-red/red.js @@ -316,10 +316,10 @@ httpsPromise.then(function(startupHttps) { } else { continue; } - sp.subRoot = formatRoot(sp.root); + sp.subRoot = formatRoot(sp.root || "/"); sp.root = formatRoot(path.posix.join(settings.httpStaticRoot,sp.subRoot)); } - settings.httpStatic = sanitised.length ? sanitised : false; + settings.httpStatic = sanitised.length ? sanitised : false; } // if we got a port from command line, use it (even if 0) From 54b2215164ce2e4c6584021ed4f64ac60e2275d4 Mon Sep 17 00:00:00 2001 From: Kevin Godell Date: Mon, 20 Mar 2023 17:31:10 -0500 Subject: [PATCH 09/56] pass options to express.static --- packages/node_modules/node-red/red.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/node-red/red.js b/packages/node_modules/node-red/red.js index 22b1eb224..d148dd73b 100755 --- a/packages/node_modules/node-red/red.js +++ b/packages/node_modules/node-red/red.js @@ -427,6 +427,7 @@ httpsPromise.then(function(startupHttps) { const sp = settings.httpStatic[si]; const filePath = sp.path; const thisRoot = sp.root || "/"; + const options = sp.options; if(appUseMem[filePath + "::" + thisRoot]) { continue;// this path and root already registered! } @@ -434,7 +435,7 @@ httpsPromise.then(function(startupHttps) { if (settings.httpStaticAuth) { app.use(thisRoot, basicAuthMiddleware(settings.httpStaticAuth.user, settings.httpStaticAuth.pass)); } - app.use(thisRoot, express.static(filePath)); + app.use(thisRoot, express.static(filePath, options)); } } From 7ae3e32abd11251182cca3b69164c1dd07552b4f Mon Sep 17 00:00:00 2001 From: Kevin Godell Date: Mon, 20 Mar 2023 17:34:12 -0500 Subject: [PATCH 10/56] update example and document feature for httpStatic options --- packages/node_modules/node-red/settings.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/node-red/settings.js b/packages/node_modules/node-red/settings.js index ef76f8680..218baa92d 100644 --- a/packages/node_modules/node-red/settings.js +++ b/packages/node_modules/node-red/settings.js @@ -223,10 +223,15 @@ module.exports = { * to move httpAdminRoot */ //httpStatic: '/home/nol/node-red-static/', //single static source - /* OR multiple static sources can be created using an array of objects... */ + /** + * OR multiple static sources can be created using an array of objects... + * Each object can also contain an options object for further configuration. + * See https://expressjs.com/en/api.html#express.static for available options. + */ //httpStatic: [ // {path: '/home/nol/pics/', root: "/img/"}, // {path: '/home/nol/reports/', root: "/doc/"}, + // {path: '/home/nol/videos/', root: "/vid/", options: {maxAge: '1d'}} //], /** @@ -431,7 +436,7 @@ module.exports = { enabled: true } }, - + }, /******************************************************************************* From 12ac260dce0b248784c4583d7c11a369f288a533 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Sun, 26 Mar 2023 11:00:28 +0100 Subject: [PATCH 11/56] select the deep link item --- packages/node_modules/@node-red/editor-client/src/js/red.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/node_modules/@node-red/editor-client/src/js/red.js b/packages/node_modules/@node-red/editor-client/src/js/red.js index ce3b439e4..b45f0378a 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/red.js +++ b/packages/node_modules/@node-red/editor-client/src/js/red.js @@ -263,6 +263,7 @@ var RED = (function() { setTimeout(() => { RED.view.reveal(nodeToShow.id) window.location.hash = currentHash + RED.view.select(nodeToShow.id) if (showEditDialog) { RED.editor.edit(nodeToShow) } @@ -273,6 +274,7 @@ var RED = (function() { if (nodeToShow) { RED.view.reveal(nodeToShow.id) window.location.hash = currentHash + RED.view.select({ nodes: [nodeToShow] }) if (showEditDialog) { RED.editor.editGroup(nodeToShow) } From 1f3559e14fd89404a2e59a32e3514400cab23ebd Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sat, 1 Apr 2023 02:28:48 +0900 Subject: [PATCH 12/56] Set label width in quick add dialog to prevent broken node icon --- .../node_modules/@node-red/editor-client/src/sass/search.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/search.scss b/packages/node_modules/@node-red/editor-client/src/sass/search.scss index f5502715b..2661f4164 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/search.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/search.scss @@ -108,6 +108,7 @@ } .red-ui-search-result-node-label { color: var(--red-ui-secondary-text-color); + width: 240px; } } From 8e4933041d655553ba4ac1fbf2956653e1df2466 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sat, 1 Apr 2023 02:34:11 +0900 Subject: [PATCH 13/56] Wrap text of label in quick add dialog --- .../node_modules/@node-red/editor-client/src/sass/search.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/search.scss b/packages/node_modules/@node-red/editor-client/src/sass/search.scss index 2661f4164..66ade8798 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/search.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/search.scss @@ -109,6 +109,7 @@ .red-ui-search-result-node-label { color: var(--red-ui-secondary-text-color); width: 240px; + overflow-wrap: anywhere; } } From ee811ca89b41ea35268548fd0e54ca2ccc8b87eb Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 2 Apr 2023 00:39:33 +0900 Subject: [PATCH 14/56] Use build status icon of GitHub Actions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1e9766f0..06310a220 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ http://nodered.org -[![Build Status](https://travis-ci.org/node-red/node-red.svg?branch=master)](https://travis-ci.org/node-red/node-red) +[![Build Status](https://github.com/node-red/node-red/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/node-red/node-red/actions?query=branch%3Amaster) [![Coverage Status](https://coveralls.io/repos/node-red/node-red/badge.svg?branch=master)](https://coveralls.io/r/node-red/node-red?branch=master) Low-code programming for event-driven applications. From 3c66af9506bcbea6a2035305ffacab76b8319139 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Wed, 5 Apr 2023 00:44:10 +0900 Subject: [PATCH 15/56] Wrap long node name in tooltip and node property --- .../node_modules/@node-red/editor-client/src/sass/editor.scss | 2 +- .../node_modules/@node-red/editor-client/src/sass/popover.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/editor.scss b/packages/node_modules/@node-red/editor-client/src/sass/editor.scss index b6d12faf2..f6f8eb4c1 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/editor.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/editor.scss @@ -124,7 +124,7 @@ list-style-type: none; margin: 0; padding:0; - + overflow-wrap: anywhere; li { display: inline-block; padding:0; diff --git a/packages/node_modules/@node-red/editor-client/src/sass/popover.scss b/packages/node_modules/@node-red/editor-client/src/sass/popover.scss index 7e504b59b..53d1c7cab 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/popover.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/popover.scss @@ -35,6 +35,7 @@ padding: 8px; border-radius: 2px; background: var(--red-ui-popover-background); + overflow-wrap: anywhere; } .red-ui-popover:after, .red-ui-popover:before { border: solid transparent; From 2eaae4b83f33d5bc08563c40f548423995247936 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Wed, 5 Apr 2023 00:56:27 +0900 Subject: [PATCH 16/56] Wrap long node name in info sidebar --- .../node_modules/@node-red/editor-client/src/sass/tab-info.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss b/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss index 57dc7d6e3..2d7344df2 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/tab-info.scss @@ -31,6 +31,7 @@ > span { display: inline-block; margin-left: 5px; + overflow-wrap: anywhere; } border-bottom: 1px solid var(--red-ui-secondary-border-color); } From 7b71d8d2120a506c4eb882b5e52a0d1a5e7eed0d Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Mon, 10 Apr 2023 01:25:34 +0900 Subject: [PATCH 17/56] Support uppercase in keyword when searching action list --- .../@node-red/editor-client/src/js/ui/actionList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/actionList.js b/packages/node_modules/@node-red/editor-client/src/js/ui/actionList.js index 4886deabb..d949899ca 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/actionList.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/actionList.js @@ -47,7 +47,7 @@ RED.actionList = (function() { var searchDiv = $("
",{class:"red-ui-search-container"}).appendTo(dialog); searchInput = $('').appendTo(searchDiv).searchBox({ change: function() { - filterTerm = $(this).val().trim(); + filterTerm = $(this).val().trim().toLowerCase(); filterTerms = filterTerm.split(" "); searchResults.editableList('filter'); searchResults.find("li.selected").removeClass("selected"); From df3dc36874ea4b41895f161b85c4e5463e5a5ab7 Mon Sep 17 00:00:00 2001 From: Mauricio Bonani Date: Mon, 17 Apr 2023 10:57:40 -0400 Subject: [PATCH 18/56] Fix palette filter background --- .../node_modules/@node-red/editor-client/src/sass/palette.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/palette.scss b/packages/node_modules/@node-red/editor-client/src/sass/palette.scss index fdfe77f09..e4071b9db 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/palette.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/palette.scss @@ -55,7 +55,7 @@ .red-ui-palette-search { position: relative; overflow: hidden; - background: var(--red-ui-secondary-background); + background: var(--red-ui-form-input-background); text-align: center; height: 35px; padding: 3px; From 674c9f04059e6de2d6cd53d98ccb4f49b9b82774 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sat, 22 Apr 2023 21:26:02 +0900 Subject: [PATCH 19/56] Add Japanese translations for welcome tour of 3.1.0 beta.2 --- .../editor-client/src/tours/welcome.js | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js index a34bee6e8..e3c50d229 100644 --- a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js +++ b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js @@ -5,16 +5,17 @@ export default { titleIcon: "fa fa-map-o", title: { "en-US": "Welcome to Node-RED 3.1 Beta 2!", - "ja": "Node-RED 3.1 ベータ1へようこそ!" + "ja": "Node-RED 3.1 ベータ2へようこそ!" }, description: { "en-US": "

This is the second beta release for 3.1.0 and we have a few new features to tell you about.

", - // "ja": "

これは3.1.0の最初のベータリリースです。いくつかの新機能について説明します。

" + "ja": "

これは3.1.0の2回目のベータリリースです。いくつかの新機能について説明します。

" } }, { title: { "en-US": "New ways to work with groups", + "ja": "グループの新たな操作方法" }, description: { "en-US": `

We have changed how you interact with groups in the editor.

@@ -23,49 +24,67 @@ export default {
  • They can be reordered using the Moving Forwards and Move Backwards actions
  • Multiple nodes can be dragged into a group in one go
  • Holding Alt when dragging a node will *remove* it from its group
  • + `, + "ja": `

    エディタ上のグループの操作が変更されました。

    +
      +
    • グループ内のノードをクリックする時に、グループが邪魔をすることが無くなりました。
    • +
    • 「前面へ移動」と「背面へ移動」の動作を用いて、複数のグループの表示順序を変えることができます。
    • +
    • グループ内へ一度に複数のノードをドラッグできるようになりました。
    • +
    • Alt を押したまま、グループ内のノードをドラッグすると、そのグループから *除く* ことができます。
    ` } }, { title: { "en-US": "Change notification on tabs", + "ja": "タブ上の変更通知" }, image: 'images/tab-changes.png', description: { "en-US": `

    When a tab contains undeployed changes it now shows the same style of change icon used by nodes.

    This will make it much easier to track down changes when you're - working across multiple flows.

    ` + working across multiple flows.

    `, + "ja": `

    タブ内にデプロイされていない変更が存在する時は、ノードと同じスタイルで変更の印が表示されるようになりました。

    +

    これによって複数のフローを編集している時に、変更を見つけるのが簡単になりました。

    ` } }, { title: { "en-US": "A bigger canvas to work with", + "ja": "より広くなった作業キャンバス" }, description: { "en-US": `

    The default canvas size has been increased so you can fit more into one flow.

    We still recommend using tools such as subflows and Link Nodes to help - keep things organised, but now you have more room to work in.

    ` + keep things organised, but now you have more room to work in.

    `, + "ja": `

    標準のキャンバスが広くなったため、1つのフローに沢山のものを含めることができるようになりました。

    +

    引き続き、サブフローやリンクノードなどの方法を用いて整理することをお勧めしますが、作業できる場所が増えました。

    ` } }, { title: { "en-US": "Finding help", + "ja": "ヘルプを見つける" }, image: 'images/node-help.png', description: { "en-US": `

    All node edit dialogs now include a link to that node's help in the footer.

    -

    Clicking it will open up the Help sidebar showing the help for that node.

    ` +

    Clicking it will open up the Help sidebar showing the help for that node.

    `, + "ja": `

    全てのノードの編集ダイアログの下に、ノードのヘルプへのリンクが追加されました。

    +

    これをクリックすると、ノードのヘルプサイドバーが表示されます。

    ` } }, { title: { "en-US": "And lots more...", + "ja": "そしてさらに沢山あります..." }, description: { - "en-US": `

    Of course we have everything from 3.1.0-beta.1 as well....

    ` + "en-US": `

    Of course we have everything from 3.1.0-beta.1 as well....

    `, + "ja": `

    もちろん3.1.0 ベータ1の全ての機能があります....

    ` } }, { @@ -134,13 +153,13 @@ export default { { title: { "en-US": "Adding Mermaid Diagrams", - "ja": "Mermaidの図を追加" + "ja": "Mermaid図を追加" }, image: 'images/mermaid.png', description: { "en-US": `

    You can also add Mermaid diagrams directly into your node or flow descriptions.

    This gives you much richer options for documenting your flows.

    `, - "ja": `

    ノードやフローの説明に、Mermaidの図を直接追加することもできます。

    + "ja": `

    ノードやフローの説明に、Mermaid図を直接追加することもできます。

    これによって、フローを説明する文書作成の選択肢がより多くなります。

    ` }, }, From c30e57c31d6b43ca76303b41e70fdd36680a6203 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 23 Apr 2023 20:47:17 +0900 Subject: [PATCH 20/56] Add node width and height to boundingBox --- .../editor-client/src/js/ui/subflow.js | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js b/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js index 43e525070..abe6402db 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js @@ -663,24 +663,23 @@ RED.subflow = (function() { var candidateOutputs = []; var candidateInputNodes = {}; - var boundingBox = [nodeList[0].x, - nodeList[0].y, - nodeList[0].x, - nodeList[0].y]; + var boundingBox = [nodeList[0].x-(nodeList[0].w/2), + nodeList[0].y-(nodeList[0].h/2), + nodeList[0].x+(nodeList[0].w/2), + nodeList[0].y+(nodeList[0].h/2)]; for (i=0;i Date: Mon, 24 Apr 2023 11:51:06 +0200 Subject: [PATCH 21/56] Solved node red not loading without error when subflow is missing --- .../@node-red/editor-client/src/js/nodes.js | 29 +++++++++++++------ .../editor-client/src/js/ui/editor.js | 10 ++++--- .../@node-red/runtime/lib/flows/util.js | 2 +- 3 files changed, 27 insertions(+), 14 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 865636b24..94bdbfcf7 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 @@ -2095,16 +2095,27 @@ RED.nodes = (function() { } else if (n.type.substring(0,7) === "subflow") { var parentId = n.type.split(":")[1]; var subflow = subflow_denylist[parentId]||subflow_map[parentId]||getSubflow(parentId); - if (createNewIds || options.importMap[n.id] === "copy") { - parentId = subflow.id; - node.type = "subflow:"+parentId; - node._def = registry.getNodeType(node.type); - delete node.i; + if (!subflow){ + node._def = { + color:"#fee", + defaults: {}, + label: "unknown: "+n.type, + labelStyle: "red-ui-flow-node-label-italic", + outputs: n.outputs|| (n.wires && n.wires.length) || 0, + set: registry.getNodeSet("node-red/unknown") + } + } else { + if (createNewIds || options.importMap[n.id] === "copy") { + parentId = subflow.id; + node.type = "subflow:"+parentId; + node._def = registry.getNodeType(node.type); + delete node.i; + } + node.name = n.name; + node.outputs = subflow.out.length; + node.inputs = subflow.in.length; + node.env = n.env; } - node.name = n.name; - node.outputs = subflow.out.length; - node.inputs = subflow.in.length; - node.env = n.env; } else if (n.type === 'junction') { node._def = {defaults:{}} node._config.x = node.x 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 da7954625..188819734 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 @@ -45,11 +45,13 @@ RED.editor = (function() { var hasChanged; if (node.type.indexOf("subflow:")===0) { subflow = RED.nodes.subflow(node.type.substring(8)); - isValid = subflow.valid; - hasChanged = subflow.changed; - if (isValid === undefined) { - isValid = validateNode(subflow); + if (subflow){ + isValid = subflow.valid; hasChanged = subflow.changed; + if (isValid === undefined) { + isValid = validateNode(subflow); + hasChanged = subflow.changed; + } } validationErrors = validateNodeProperties(node, node._def.defaults, node); node.valid = isValid && validationErrors.length === 0; diff --git a/packages/node_modules/@node-red/runtime/lib/flows/util.js b/packages/node_modules/@node-red/runtime/lib/flows/util.js index 7c98fc041..74e046f45 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/util.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/util.js @@ -199,7 +199,7 @@ function parseConfig(config) { if (subflowDetails) { var subflowType = subflowDetails[1] n.subflow = subflowType; - flow.subflows[subflowType].instances.push(n) + if (flow.subflows[subflowType]) flow.subflows[subflowType].instances.push(n) } if (container) { container.nodes[n.id] = n; From f917212d6754856c402f253237b1b892bdb0d9d8 Mon Sep 17 00:00:00 2001 From: Mario Wolff Date: Fri, 28 Apr 2023 12:35:19 +0200 Subject: [PATCH 22/56] a simple approach to fix #2657 --- .../@node-red/editor-client/src/js/settings.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/settings.js b/packages/node_modules/@node-red/editor-client/src/js/settings.js index c9a24d636..af7f091c9 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/settings.js +++ b/packages/node_modules/@node-red/editor-client/src/js/settings.js @@ -33,8 +33,8 @@ RED.settings = (function () { if (!hasLocalStorage()) { return; } - if (key === "auth-tokens") { - localStorage.setItem(key, JSON.stringify(value)); + if (key.startsWith("auth-tokens")) { + localStorage.setItem(key+this.authTokensSuffix, JSON.stringify(value)); } else { RED.utils.setMessageProperty(userSettings,key,value); saveUserSettings(); @@ -52,8 +52,8 @@ RED.settings = (function () { if (!hasLocalStorage()) { return undefined; } - if (key === "auth-tokens") { - return JSON.parse(localStorage.getItem(key)); + if (key.startsWith("auth-tokens")) { + return JSON.parse(localStorage.getItem(key+this.authTokensSuffix)); } else { var v; try { v = RED.utils.getMessageProperty(userSettings,key); } catch(err) {} @@ -71,8 +71,8 @@ RED.settings = (function () { if (!hasLocalStorage()) { return; } - if (key === "auth-tokens") { - localStorage.removeItem(key); + if (key.startsWith("auth-tokens")) { + localStorage.removeItem(key+this.authTokensSuffix); } else { delete userSettings[key]; saveUserSettings(); @@ -99,6 +99,8 @@ RED.settings = (function () { var init = function (options, done) { var accessTokenMatch = /[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search); + var path=window.location.pathname.slice(0,-1); + RED.settings.authTokensSuffix=path.replaceAll('/', '-'); if (accessTokenMatch) { var accessToken = accessTokenMatch[1]; RED.settings.set("auth-tokens",{access_token: accessToken}); From ed2c9d24e8af1e8176d272d44149132ef65f45e4 Mon Sep 17 00:00:00 2001 From: Mario Wolff Date: Fri, 28 Apr 2023 14:53:18 +0200 Subject: [PATCH 23/56] use replace instead of replaceAll to support node14 --- .../node_modules/@node-red/editor-client/src/js/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/settings.js b/packages/node_modules/@node-red/editor-client/src/js/settings.js index af7f091c9..85c930bfb 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/settings.js +++ b/packages/node_modules/@node-red/editor-client/src/js/settings.js @@ -100,7 +100,7 @@ RED.settings = (function () { var init = function (options, done) { var accessTokenMatch = /[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search); var path=window.location.pathname.slice(0,-1); - RED.settings.authTokensSuffix=path.replaceAll('/', '-'); + RED.settings.authTokensSuffix=path.replace(/\//g, '-'); if (accessTokenMatch) { var accessToken = accessTokenMatch[1]; RED.settings.set("auth-tokens",{access_token: accessToken}); From 841f1849c8b38a4a32ac996ffab916bb20744a20 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Apr 2023 15:25:29 +0100 Subject: [PATCH 24/56] Update packages/node_modules/@node-red/runtime/lib/flows/util.js --- packages/node_modules/@node-red/runtime/lib/flows/util.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/util.js b/packages/node_modules/@node-red/runtime/lib/flows/util.js index 74e046f45..83665b589 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/util.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/util.js @@ -199,7 +199,9 @@ function parseConfig(config) { if (subflowDetails) { var subflowType = subflowDetails[1] n.subflow = subflowType; - if (flow.subflows[subflowType]) flow.subflows[subflowType].instances.push(n) + if (flow.subflows[subflowType]) { + flow.subflows[subflowType].instances.push(n) + } } if (container) { container.nodes[n.id] = n; From 246409970d8e6dad0b1449cf1d8a15a28ece24d7 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Apr 2023 17:17:40 +0100 Subject: [PATCH 25/56] Remove coveralls reporting as it is failing builds --- .github/workflows/tests.yml | 10 +++++----- README.md | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 28d3c1b32..1c437ba8c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -29,8 +29,8 @@ jobs: - name: Run tests run: | npm run test - - name: Publish to coveralls.io - if: ${{ matrix.node-version == 14 }} - uses: coverallsapp/github-action@v1.1.2 - with: - github-token: ${{ github.token }} + # - name: Publish to coveralls.io + # if: ${{ matrix.node-version == 14 }} + # uses: coverallsapp/github-action@v1.1.2 + # with: + # github-token: ${{ github.token }} diff --git a/README.md b/README.md index 06310a220..a888ef166 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ http://nodered.org [![Build Status](https://github.com/node-red/node-red/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/node-red/node-red/actions?query=branch%3Amaster) -[![Coverage Status](https://coveralls.io/repos/node-red/node-red/badge.svg?branch=master)](https://coveralls.io/r/node-red/node-red?branch=master) Low-code programming for event-driven applications. From b129e11c8f6b93925df535a4335766605f56fc13 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Apr 2023 17:36:55 +0100 Subject: [PATCH 26/56] Avoid creating empty global-config node if not needed --- .../@node-red/editor-client/src/js/ui/env-var.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/env-var.js b/packages/node_modules/@node-red/editor-client/src/js/ui/env-var.js index db1a8e86f..998484858 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/env-var.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/env-var.js @@ -50,7 +50,11 @@ RED.envVar = (function() { var new_env = []; var items = list.editableList('items'); var credentials = gconf ? gconf.credentials : null; - + if (!gconf && list.editableList('length') === 0) { + // No existing global-config node and nothing in the list, + // so no need to do anything more + return + } if (!credentials) { credentials = { _ : {}, @@ -78,6 +82,12 @@ RED.envVar = (function() { if (gconf === null) { gconf = getGlobalConf(true); } + if (!gconf.credentials) { + gconf.credentials = { + _ : {}, + map: {} + }; + } if ((JSON.stringify(new_env) !== JSON.stringify(gconf.env)) || (JSON.stringify(credentials) !== JSON.stringify(gconf.credentials))) { gconf.env = new_env; From 86dfe8681370343ea42817b6259dec8fbc67f47e Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Apr 2023 17:47:16 +0100 Subject: [PATCH 27/56] Add editor scope to keyboard shortcut scope select --- .../@node-red/editor-client/locales/en-US/editor.json | 1 + .../@node-red/editor-client/src/js/ui/keyboard.js | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json index e6beed2e1..5474d1a23 100644 --- a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json @@ -491,6 +491,7 @@ "unassigned": "Unassigned", "global": "global", "workspace": "workspace", + "editor": "edit dialog", "selectAll": "Select all", "selectNone": "Select none", "selectAllConnected": "Select connected", diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js index 40e11aa72..a081656fc 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/keyboard.js @@ -491,7 +491,11 @@ RED.keyboard = (function() { okButton.attr("disabled",!valid); }); - var scopeSelect = $('').appendTo(scope); + var scopeSelect = $('').appendTo(scope); scopeSelect.i18n(); if (object.scope === "workspace") { object.scope = "red-ui-workspace"; From 20abe4a40cfd4d24b71e5bda69c433bf57155448 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Apr 2023 21:37:03 +0100 Subject: [PATCH 28/56] Update dependecies include got --- package.json | 16 ++++++------- .../nodes/core/network/21-httprequest.js | 24 +++++++++++-------- .../node_modules/@node-red/nodes/package.json | 6 ++--- .../@node-red/registry/package.json | 4 ++-- .../@node-red/runtime/package.json | 2 +- .../node_modules/@node-red/util/package.json | 4 ++-- packages/node_modules/node-red/package.json | 4 ++-- .../nodes/core/network/21-httprequest_spec.js | 4 ++-- 8 files changed, 34 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index f4a87961c..a92965e54 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "express": "4.18.2", "express-session": "1.17.3", "form-data": "4.0.0", - "fs-extra": "10.1.0", - "got": "11.8.6", + "fs-extra": "11.1.1", + "got": "12.6.0", "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.29.4", - "moment-timezone": "0.5.41", + "moment-timezone": "0.5.43", "mqtt": "4.3.7", "multer": "1.4.5-lts.1", "mustache": "4.2.0", @@ -73,13 +73,13 @@ "passport-http-bearer": "1.0.1", "passport-oauth2-client-password": "0.1.2", "raw-body": "2.5.2", - "semver": "7.3.8", + "semver": "7.5.0", "tar": "6.1.13", "tough-cookie": "4.1.2", "uglify-js": "3.17.4", "uuid": "9.0.0", "ws": "7.5.6", - "xml2js": "0.4.23" + "xml2js": "0.5.0" }, "optionalDependencies": { "bcrypt": "5.1.0" @@ -108,14 +108,14 @@ "i18next-http-backend": "1.4.1", "jquery-i18next": "1.2.1", "jsdoc-nr-template": "github:node-red/jsdoc-nr-template", - "marked": "4.2.12", - "mermaid": "^9.3.0", + "marked": "4.3.0", + "mermaid": "^9.4.3", "minami": "1.2.3", "mocha": "9.2.2", "node-red-node-test-helper": "^0.3.0", "nodemon": "2.0.20", "proxy": "^1.0.2", - "sass": "1.58.3", + "sass": "1.62.1", "should": "13.2.3", "sinon": "11.1.2", "stoppable": "^1.1.0", diff --git a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js index bcf3b72b9..4543c3655 100644 --- a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js +++ b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js @@ -14,9 +14,9 @@ * limitations under the License. **/ -module.exports = function(RED) { +module.exports = async function(RED) { "use strict"; - const got = require("got"); + const { got } = await import('got') const {CookieJar} = require("tough-cookie"); const { HttpProxyAgent, HttpsProxyAgent } = require('hpagent'); const FormData = require('form-data'); @@ -210,24 +210,24 @@ in your Node-RED user directory (${RED.settings.userDir}). // set defaultport, else when using HttpsProxyAgent, it's defaultPort of 443 will be used :(. // Had to remove this to get http->https redirect to work // opts.defaultPort = isHttps?443:80; - opts.timeout = node.reqTimeout; + opts.timeout = { request: node.reqTimeout || 5000 }; opts.throwHttpErrors = false; // TODO: add UI option to auto decompress. Setting to false for 1.x compatibility opts.decompress = false; opts.method = method; - opts.retry = 0; + opts.retry = { limit: 0 }; opts.responseType = 'buffer'; opts.maxRedirects = 21; opts.cookieJar = new CookieJar(); opts.ignoreInvalidCookies = true; - opts.forever = nodeHTTPPersistent; + // opts.forever = nodeHTTPPersistent; if (msg.requestTimeout !== undefined) { if (isNaN(msg.requestTimeout)) { node.warn(RED._("httpin.errors.timeout-isnan")); } else if (msg.requestTimeout < 1) { node.warn(RED._("httpin.errors.timeout-isnegative")); } else { - opts.timeout = msg.requestTimeout; + opts.timeout = { request: msg.requestTimeout }; } } const originalHeaderMap = {}; @@ -245,9 +245,12 @@ in your Node-RED user directory (${RED.settings.userDir}). delete options.headers[h]; } }) - if (node.insecureHTTPParser) { - options.insecureHTTPParser = true + // Setting the property under _unixOptions as pretty + // much the only hack available to get got to apply + // a core http option it doesn't think we should be + // allowed to set + options._unixOptions = { ...options.unixOptions, insecureHTTPParser: true } } } ], @@ -403,15 +406,16 @@ in your Node-RED user directory (${RED.settings.userDir}). return response } const requestUrl = new URL(response.request.requestUrl); - const options = response.request.options; + const options = { headers: {} } const normalisedHeaders = {}; Object.keys(response.headers).forEach(k => { normalisedHeaders[k.toLowerCase()] = response.headers[k] }) if (normalisedHeaders['www-authenticate']) { - let authHeader = buildDigestHeader(digestCreds.user,digestCreds.password, options.method, requestUrl.pathname, normalisedHeaders['www-authenticate']) + let authHeader = buildDigestHeader(digestCreds.user,digestCreds.password, response.request.options.method, requestUrl.pathname, normalisedHeaders['www-authenticate']) options.headers.Authorization = authHeader; } + // response.request.options.merge(options) sentCreds = true; return retry(options); } diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json index 197223089..6bed85bd9 100644 --- a/packages/node_modules/@node-red/nodes/package.json +++ b/packages/node_modules/@node-red/nodes/package.json @@ -27,8 +27,8 @@ "cronosjs": "1.7.1", "denque": "2.1.0", "form-data": "4.0.0", - "fs-extra": "10.1.0", - "got": "11.8.6", + "fs-extra": "11.1.1", + "got": "12.6.0", "hash-sum": "2.0.0", "hpagent": "1.2.0", "https-proxy-agent": "5.0.1", @@ -44,7 +44,7 @@ "tough-cookie": "4.1.2", "uuid": "9.0.0", "ws": "7.5.6", - "xml2js": "0.4.23", + "xml2js": "0.5.0", "iconv-lite": "0.6.3" } } diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json index 205f97631..fae0d624a 100644 --- a/packages/node_modules/@node-red/registry/package.json +++ b/packages/node_modules/@node-red/registry/package.json @@ -18,8 +18,8 @@ "dependencies": { "@node-red/util": "3.1.0-beta.2", "clone": "2.1.2", - "fs-extra": "10.1.0", - "semver": "7.3.8", + "fs-extra": "11.1.1", + "semver": "7.5.0", "tar": "6.1.13", "uglify-js": "3.17.4" } diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json index e5fcf52a8..7504a7497 100644 --- a/packages/node_modules/@node-red/runtime/package.json +++ b/packages/node_modules/@node-red/runtime/package.json @@ -21,7 +21,7 @@ "async-mutex": "0.4.0", "clone": "2.1.2", "express": "4.18.2", - "fs-extra": "10.1.0", + "fs-extra": "11.1.1", "json-stringify-safe": "5.0.1" } } diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json index 1ef2dcf08..184e96f38 100644 --- a/packages/node_modules/@node-red/util/package.json +++ b/packages/node_modules/@node-red/util/package.json @@ -15,12 +15,12 @@ } ], "dependencies": { - "fs-extra": "10.1.0", + "fs-extra": "11.1.1", "i18next": "21.10.0", "json-stringify-safe": "5.0.1", "jsonata": "1.8.6", "lodash.clonedeep": "^4.5.0", "moment": "2.29.4", - "moment-timezone": "0.5.41" + "moment-timezone": "0.5.43" } } diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json index 3ea18092c..0b899f655 100644 --- a/packages/node_modules/node-red/package.json +++ b/packages/node_modules/node-red/package.json @@ -38,10 +38,10 @@ "basic-auth": "2.0.1", "bcryptjs": "2.4.3", "express": "4.18.2", - "fs-extra": "10.1.0", + "fs-extra": "11.1.1", "node-red-admin": "^3.0.0", "nopt": "5.0.0", - "semver": "7.3.8" + "semver": "7.5.0" }, "optionalDependencies": { "bcrypt": "5.1.0" diff --git a/test/nodes/core/network/21-httprequest_spec.js b/test/nodes/core/network/21-httprequest_spec.js index 37e282bcf..f02ba8153 100644 --- a/test/nodes/core/network/21-httprequest_spec.js +++ b/test/nodes/core/network/21-httprequest_spec.js @@ -223,7 +223,7 @@ describe('HTTP Request Node', function() { } authFields[match[1]] = match[2] || match[3]; } - console.log(JSON.stringify(authFields)); + // console.log(JSON.stringify(authFields)); if (qop && authFields['qop'] != qop) { console.log('test1'); @@ -250,7 +250,7 @@ describe('HTTP Request Node', function() { req, algorithm, sess, realm, username, nonce, nc, cnonce, qop ); if (!response || expectedResponse.toLowerCase() !== response.toLowerCase()) { - console.log('test3'); + console.log('test3', response, expectedResponse); res.status(401).end(); return; } From 46ae66c8b2ff2c070800e07a3826695cb91af611 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Apr 2023 21:42:36 +0100 Subject: [PATCH 29/56] Bump test helper version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a92965e54..f53cad7c6 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "mermaid": "^9.4.3", "minami": "1.2.3", "mocha": "9.2.2", - "node-red-node-test-helper": "^0.3.0", + "node-red-node-test-helper": "^0.3.1", "nodemon": "2.0.20", "proxy": "^1.0.2", "sass": "1.62.1", From 02c7d014cb7aa1fd1c06578eb71592b42cdc6ce1 Mon Sep 17 00:00:00 2001 From: Stephen McLaughlin <44235289+Steve-Mcl@users.noreply.github.com> Date: Sat, 29 Apr 2023 21:00:26 +0100 Subject: [PATCH 30/56] dont use subscriptionIdentifier no broker support --- .../node_modules/@node-red/nodes/core/network/10-mqtt.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 0a7ed6dfa..f4fc9ad2c 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 @@ -697,7 +697,8 @@ module.exports = function(RED) { node.options.rejectUnauthorized = (node.verifyservercert == "true" || node.verifyservercert === true); } } - + node.v5 = () => node.options && node.options.protocolVersion == 5 + node.subscriptionIdentifiersAvailable = () => node.v5() && node.serverProperties && node.serverProperties.subscriptionIdentifiersAvailable n.autoConnect = n.autoConnect === "false" || n.autoConnect === false ? false : true; node.setOptions(n, true); @@ -920,7 +921,12 @@ module.exports = function(RED) { }; node.subscriptions[topic][ref] = sub; if (node.connected) { + const subIdsAvailable = node.subscriptionIdentifiersAvailable() node._clientOn('message',sub.handler); + // if the broker doesn't support subscription identifiers (e.g. AWS core), then don't send them + if (options.properties && options.properties.subscriptionIdentifier && subIdsAvailable !== true) { + delete options.properties.subscriptionIdentifier + } node.client.subscribe(topic, options); } }; From c0650cc0f5b9071269c1208f9633bdc0c1693bdf Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Mon, 1 May 2023 13:53:54 +0900 Subject: [PATCH 31/56] Add Japanese translation for keyboard shortcut scope --- .../node_modules/@node-red/editor-client/locales/ja/editor.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json index b5939cec0..6022b5e81 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json @@ -491,6 +491,7 @@ "unassigned": "未割当", "global": "グローバル", "workspace": "ワークスペース", + "editor": "編集ダイアログ", "selectAll": "全てのノードを選択", "selectNone": "選択を外す", "selectAllConnected": "接続されたノードを選択", From aff0bd3f6a35634b51414d26a26ac553ca01b52b Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Mon, 1 May 2023 14:28:02 +0900 Subject: [PATCH 32/56] Add Japanese translation for auto unsubscribe in MQTT node --- packages/node_modules/@node-red/nodes/locales/ja/messages.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node_modules/@node-red/nodes/locales/ja/messages.json b/packages/node_modules/@node-red/nodes/locales/ja/messages.json index 3b5e3d6a4..a5736c60e 100644 --- a/packages/node_modules/@node-red/nodes/locales/ja/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/ja/messages.json @@ -414,6 +414,7 @@ "port": "ポート", "keepalive": "キープアライブ時間", "cleansession": "セッションの初期化", + "autoUnsubscribe": "切断時に購読を自動解除", "cleanstart": "クリーンスタート", "use-tls": "TLSを使用", "tls-config": "TLS設定", From fb5ffa1c318e6ab04901f448f61abe134085f73b Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Mon, 1 May 2023 14:44:14 +0900 Subject: [PATCH 33/56] Add Japanese translation for keyboard shortcut scope --- .../@node-red/editor-client/locales/ja/editor.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json index 84a1f4dad..1d08e9dd8 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json @@ -504,6 +504,7 @@ "unassigned": "未割当", "global": "グローバル", "workspace": "ワークスペース", + "editor": "編集ダイアログ", "selectAll": "全てのノードを選択", "selectNone": "選択を外す", "selectAllConnected": "接続されたノードを選択", @@ -1203,7 +1204,7 @@ "fr": "フランス語", "ja": "日本語", "ko": "韓国語", - "pt-BR":"ポルトガル語", + "pt-BR": "ポルトガル語", "ru": "ロシア語", "zh-CN": "中国語(簡体)", "zh-TW": "中国語(繁体)" From be4eab65f66fb98025f53633dabbcad45428eecd Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sat, 6 May 2023 19:40:52 +0900 Subject: [PATCH 34/56] Fix content type for downloading flows.json --- .../@node-red/editor-client/src/js/ui/clipboard.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js index f547203d4..b185a90c1 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js @@ -37,13 +37,13 @@ RED.clipboard = (function() { // IE11 workaround // IE does not support data uri scheme for downloading data var blob = new Blob([data], { - type: "data:text/plain;charset=utf-8" + type: "data:json/application;charset=utf-8" }); navigator.msSaveBlob(blob, file); } else { var element = document.createElement('a'); - element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(data)); + element.setAttribute('href', 'data:json/application;charset=utf-8,' + encodeURIComponent(data)); element.setAttribute('download', file); element.style.display = 'none'; document.body.appendChild(element); From e8ddee24a9944e57d186f02b081295c56a45b67c Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sat, 6 May 2023 21:10:49 +0900 Subject: [PATCH 35/56] Use correct content type for downloading flows.json --- .../@node-red/editor-client/src/js/ui/clipboard.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js index b185a90c1..af82f1b14 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js @@ -37,13 +37,13 @@ RED.clipboard = (function() { // IE11 workaround // IE does not support data uri scheme for downloading data var blob = new Blob([data], { - type: "data:json/application;charset=utf-8" + type: "data:application/json;charset=utf-8" }); navigator.msSaveBlob(blob, file); } else { var element = document.createElement('a'); - element.setAttribute('href', 'data:json/application;charset=utf-8,' + encodeURIComponent(data)); + element.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(data)); element.setAttribute('download', file); element.style.display = 'none'; document.body.appendChild(element); From 67c5a248ad74f88d7fb5c044af288447c3e393a2 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Mon, 8 May 2023 09:28:35 +0100 Subject: [PATCH 36/56] Fix RBE for missing "payload" To close #4165 --- packages/node_modules/@node-red/nodes/core/function/rbe.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/rbe.js b/packages/node_modules/@node-red/nodes/core/function/rbe.js index eb526a441..34a8e91ed 100644 --- a/packages/node_modules/@node-red/nodes/core/function/rbe.js +++ b/packages/node_modules/@node-red/nodes/core/function/rbe.js @@ -35,7 +35,11 @@ module.exports = function(RED) { } else { node.previous = {}; } } - var value = RED.util.getMessageProperty(msg,node.property); + var value; + try { + value = RED.util.getMessageProperty(msg,node.property); + } + catch(e) { } if (value !== undefined) { var t = "_no_topic"; if (node.septopics) { t = topic || t; } From dee68b903c8e22d067edd7e6d55706830b4530e0 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Sat, 13 May 2023 11:14:57 +0100 Subject: [PATCH 37/56] fix sub/unsub when using "dont unsub" --- .../@node-red/nodes/core/network/10-mqtt.js | 335 +++++++++++++----- 1 file changed, 250 insertions(+), 85 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 9e17463dd..1835582e6 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 @@ -219,8 +219,10 @@ module.exports = function(RED) { * Handle the payload / packet recieved in MQTT In and MQTT Sub nodes */ function subscriptionHandler(node, datatype ,topic, payload, packet) { - const v5 = node.brokerConn.options && node.brokerConn.options.protocolVersion == 5; - var msg = {topic:topic, payload:null, qos:packet.qos, retain:packet.retain}; + const msg = {topic:topic, payload:null, qos:packet.qos, retain:packet.retain}; + const v5 = (node && node.brokerConn) + ? node.brokerConn.v5() + : Object.prototype.hasOwnProperty.call(packet, "properties"); if(v5 && packet.properties) { setStrProp(packet.properties, msg, "responseTopic"); setBufferProp(packet.properties, msg, "correlationData"); @@ -300,7 +302,7 @@ module.exports = function(RED) { //} } msg.payload = payload; - if ((node.brokerConn.broker === "localhost")||(node.brokerConn.broker === "127.0.0.1")) { + if (node.brokerConn && (node.brokerConn.broker === "localhost" || node.brokerConn.broker === "127.0.0.1")) { msg._topic = topic; } node.send(msg); @@ -412,6 +414,12 @@ module.exports = function(RED) { } } + /** + * Perform the connect action + * @param {MQTTInNode|MQTTOutNode} node + * @param {Object} msg + * @param {Function} done + */ function handleConnectAction(node, msg, done) { let actionData = typeof msg.broker === 'object' ? msg.broker : null; if (node.brokerConn.canConnect()) { @@ -442,12 +450,17 @@ module.exports = function(RED) { } } + /** + * Perform the disconnect action + * @param {MQTTInNode|MQTTOutNode} node + * @param {Function} done + */ function handleDisconnectAction(node, done) { node.brokerConn.disconnect(function () { done(); }); } - + const unsubscribeCandidates = {} //#endregion "Supporting functions" //#region "Broker node" @@ -591,10 +604,9 @@ module.exports = function(RED) { if (typeof node.cleansession === 'undefined') { node.cleansession = true; } - if (typeof node.autoUnsubscribe === 'undefined') { + if (typeof node.autoUnsubscribe !== 'boolean') { node.autoUnsubscribe = true; } - //use url or build a url from usetls://broker:port if (node.url && node.brokerurl !== node.url) { node.brokerurl = node.url; @@ -664,7 +676,6 @@ module.exports = function(RED) { node.options.password = node.password; node.options.keepalive = node.keepalive; node.options.clean = node.cleansession; - node.options.autoUnsubscribe = node.autoUnsubscribe; node.options.clientId = node.clientid || 'nodered_' + RED.util.generateId(); node.options.reconnectPeriod = RED.settings.mqttReconnectTime||5000; delete node.options.protocolId; //V4+ default @@ -702,7 +713,8 @@ module.exports = function(RED) { node.options.rejectUnauthorized = (node.verifyservercert == "true" || node.verifyservercert === true); } } - + node.v5 = () => node.options && node.options.protocolVersion == 5 + node.subscriptionIdentifiersAvailable = () => node.v5() && node.serverProperties && node.serverProperties.subscriptionIdentifiersAvailable n.autoConnect = n.autoConnect === "false" || n.autoConnect === false ? false : true; node.setOptions(n, true); @@ -784,18 +796,11 @@ module.exports = function(RED) { // Re-subscribe to stored topics for (var s in node.subscriptions) { if (node.subscriptions.hasOwnProperty(s)) { - let topic = s; - let qos = 0; - let _options = {}; for (var r in node.subscriptions[s]) { if (node.subscriptions[s].hasOwnProperty(r)) { - qos = Math.max(qos,node.subscriptions[s][r].qos); - _options = node.subscriptions[s][r].options; - node._clientOn('message',node.subscriptions[s][r].handler); + node.subscribe(node.subscriptions[s][r]) } } - _options.qos = _options.qos || qos; - node.client.subscribe(topic, _options); } } @@ -857,22 +862,28 @@ module.exports = function(RED) { if(!node.client) { return _callback(); } if(node.closing) { return _callback(); } + /** + * Call end and wait for the client to end (or timeout) + * @param {mqtt.MqttClient} client The broker client + * @param {number} ms The time to wait for the client to end + * @returns + */ let waitEnd = (client, ms) => { return new Promise( (resolve, reject) => { node.closing = true; - if(!client) { + if (!client) { resolve(); - } else { + } else { const t = setTimeout(() => { //clean end() has exceeded WAIT_END, lets force end! client && client.end(true); - reject(); + resolve(); }, ms); client.end(() => { - clearTimeout(t); - resolve() - }); - } + clearTimeout(t); + resolve() + }); + } }); }; if(node.connected && node.closeMessage) { @@ -893,64 +904,222 @@ module.exports = function(RED) { } node.subscriptionIds = {}; node.subid = 1; - node.subscribe = function (topic,options,callback,ref) { - ref = ref||0; - var qos; - if(typeof options == "object") { - qos = options.qos; - } else { - qos = options; - options = {}; + + //typedef for subscription object: + /** + * @typedef {Object} Subscription + * @property {String} topic - topic to subscribe to + * @property {Object} [options] - options object + * @property {Number} [options.qos] - quality of service + * @property {Number} [options.nl] - no local + * @property {Number} [options.rap] - retain as published + * @property {Number} [options.rh] - retain handling + * @property {Number} [options.properties] - MQTT 5.0 properties + * @property {Number} [options.properties.subscriptionIdentifier] - MQTT 5.0 subscription identifier + * @property {Number} [options.properties.userProperties] - MQTT 5.0 user properties + * @property {Function} callback + * @property {String} ref - reference to the node that created the subscription + */ + + /** + * Create a subscription object + * @param {String} _topic - topic to subscribe to + * @param {Object} _options - options object + * @param {String} _ref - reference to the node that created the subscription + * @returns {Subscription} + */ + function createSubscriptionObject(_topic, _options, _ref, _brokerId) { + /** @type {Subscription} */ + const subscription = {}; + const ref = _ref || 0; + let options + let qos = 1 // default to QoS 1 (AWS and several other brokers don't support QoS 2) + + // if options is an object, then clone it + if (typeof _options == "object") { + options = RED.util.cloneMessage(_options || {}) + qos = _options.qos; + } else if (typeof _options == "number") { + qos = _options; } - options.qos = qos; + options = options || {}; + + // sanitise qos + if (typeof qos === "number" && qos >= 0 && qos <= 2) { + options.qos = qos; + } + + subscription.topic = _topic; + subscription.qos = qos; + subscription.options = RED.util.cloneMessage(options); + subscription.ref = ref; + subscription.brokerId = _brokerId; + return subscription; + } + + /** + * If topic is a subscription object, then use that, otherwise look up the topic in + * the subscriptions object. If the topic is not found, then create a new subscription + * object and add it to the subscriptions object. + * @param {Subscription|String} topic + * @param {*} options + * @param {*} callback + * @param {*} ref + */ + node.subscribe = function (topic, options, callback, ref) { + /** @type {Subscription} */ + let subscription + let doCompare = false + let changesFound = false + + // function signature 1: subscribe(subscription: Subscription) + if (typeof topic === "object" && topic !== null) { + subscription = topic + topic = subscription.topic + options = subscription.options + ref = subscription.ref + callback = subscription.callback + } + + // function signature 2: subscribe(topic: String, options: Object, callback: Function, ref: String) + else if (typeof topic === "string") { + // since this is a call where all params are provided, it might be + // a node change (modification) so we need to check for changes + doCompare = true + subscription = node.subscriptions[topic] && node.subscriptions[topic][ref] + } + + // bad function call + else { + console.warn('Invalid call to node.subscribe') + return + } + const thisBrokerId = node.type === 'mqtt-broker' ? node.id : node.broker + + // unsubscribe topics where the broker has changed + const oldBrokerSubs = (unsubscribeCandidates[ref] || []).filter(sub => sub.brokerId !== thisBrokerId) + oldBrokerSubs.forEach(sub => { + /** @type {MQTTBrokerNode} */ + const _brokerConn = RED.nodes.getNode(sub.brokerId) + if (_brokerConn) { + _brokerConn.unsubscribe(sub.topic, sub.ref, true) + } + }) + + // if subscription is found (or sent in as a parameter), then check for changes. + // if there are any changes requested, tidy up the old subscription + if (subscription) { + if (doCompare) { + // compare the current sub to the passed in parameters. Use RED.util.compareObjects against + // only the minimal set of properties to identify if the subscription has changed + const currentSubscription = createSubscriptionObject(subscription.topic, subscription.options, subscription.ref) + const newSubscription = createSubscriptionObject(topic, options, ref) + changesFound = RED.util.compareObjects(currentSubscription, newSubscription) === false + } + } + + if (changesFound) { + if (subscription.handler) { + node._clientRemoveListeners('message', subscription.handler) + subscription.handler = null + } + const _brokerConn = RED.nodes.getNode(subscription.brokerId) + if (_brokerConn) { + _brokerConn.unsubscribe(subscription.topic, subscription.ref, true) + } + } + + // clean up the unsubscribe candidate list + delete unsubscribeCandidates[ref] + + // determine if this is an existing subscription + const existingSubscription = typeof subscription === "object" && subscription !== null + + // if existing subscription is not found or has changed, create a new subscription object + if (existingSubscription === false || changesFound) { + subscription = createSubscriptionObject(topic, options, ref, node.id) + } + + // setup remainder of subscription properties and event handling + node.subscriptions[topic] = node.subscriptions[topic] || {}; + node.subscriptions[topic][ref] = subscription if (!node.subscriptionIds[topic]) { node.subscriptionIds[topic] = node.subid++; } - options.properties = options.properties || {}; - options.properties.subscriptionIdentifier = node.subscriptionIds[topic]; + subscription.options = subscription.options || {}; + subscription.options.properties = options.properties || {}; + subscription.options.properties.subscriptionIdentifier = node.subscriptionIds[topic]; + subscription.callback = callback; - node.subscriptions[topic] = node.subscriptions[topic]||{}; - var sub = { - topic:topic, - qos:qos, - options:options, - handler:function(mtopic,mpayload, mpacket) { - if(mpacket.properties && options.properties && mpacket.properties.subscriptionIdentifier && options.properties.subscriptionIdentifier && (mpacket.properties.subscriptionIdentifier !== options.properties.subscriptionIdentifier) ) { - //do nothing as subscriptionIdentifier does not match - } else if (matchTopic(topic,mtopic)) { - callback(mtopic,mpayload, mpacket); - } - }, - ref: ref - }; - node.subscriptions[topic][ref] = sub; + // if the client is connected, then setup the handler and subscribe if (node.connected) { - node._clientOn('message',sub.handler); - node.client.subscribe(topic, options); - } - }; + const subIdsAvailable = node.subscriptionIdentifiersAvailable() - node.unsubscribe = function (topic, ref, removed) { - ref = ref||0; - var sub = node.subscriptions[topic]; - if (sub) { - if (sub[ref]) { - if(node.client) { - node._clientRemoveListeners('message',sub[ref].handler); - } - delete sub[ref]; - } - //TODO: Review. The `if(removed)` was commented out to always delete and remove subscriptions. - // if we dont then property changes dont get applied and old subs still trigger - //if (removed) { - if (Object.keys(sub).length === 0) { - delete node.subscriptions[topic]; - delete node.subscriptionIds[topic]; - if (node.connected) { - node.client.unsubscribe(topic); + if (!subscription.handler) { + subscription.handler = function (mtopic, mpayload, mpacket) { + const sops = subscription.options ? subscription.options.properties : {} + const pops = mpacket.properties || {} + if (subIdsAvailable && pops.subscriptionIdentifier && sops.subscriptionIdentifier && (pops.subscriptionIdentifier !== sops.subscriptionIdentifier)) { + //do nothing as subscriptionIdentifier does not match + } else if (matchTopic(topic, mtopic)) { + subscription.callback && subscription.callback(mtopic, mpayload, mpacket) } } - //} + } + node._clientOn('message', subscription.handler) + // if the broker doesn't support subscription identifiers, then don't send them (AWS support) + if (subscription.options.properties && subscription.options.properties.subscriptionIdentifier && subIdsAvailable !== true) { + delete subscription.options.properties.subscriptionIdentifier + } + node.client.subscribe(topic, subscription.options) + } + + } + + node.unsubscribe = function (topic, ref, removeClientSubscription) { + ref = ref||0; + const unsub = removeClientSubscription || node.autoUnsubscribe !== false + const sub = node.subscriptions[topic]; + let brokerId = node.id + if (sub) { + if (sub[ref]) { + brokerId = sub[ref].brokerId || brokerId + if(node.client && sub[ref].handler) { + node._clientRemoveListeners('message', sub[ref].handler); + sub[ref].handler = null + } + if (unsub) { + delete sub[ref] + } + } + // if instructed to remove the actual MQTT client subscription + if (unsub) { + // if there are no more subscriptions for the topic, then remove the topic + if (Object.keys(sub).length === 0) { + try { + node.client.unsubscribe(topic) + } catch (_err) { + // do nothing + } finally { + // remove unsubscribe candidate as it is now REALLY unsubscribed + delete node.subscriptions[topic]; + delete node.subscriptionIds[topic]; + if (unsubscribeCandidates[ref]) { + unsubscribeCandidates[ref] = unsubscribeCandidates[ref].filter(sub => sub.topic !== topic) + } + } + } + } else { + // if instructed to not remove the client subscription, then add it to the candidate list + // of subscriptions to be removed when the the same ref is used in a subsequent subscribe + // and the topic has changed + unsubscribeCandidates[ref] = unsubscribeCandidates[ref] || []; + unsubscribeCandidates[ref].push({ + topic: topic, + ref: ref, + brokerId: brokerId + }) + } } }; node.topicAliases = {}; @@ -988,7 +1157,7 @@ module.exports = function(RED) { setStrProp(msg, options.properties, "contentType"); setIntProp(msg, options.properties, "messageExpiryInterval", 0); setUserProperties(msg.userProperties, options.properties); - setIntProp(msg, options.properties, "topicAlias", 1, node.serverProperties.topicAliasMaximum || 0); + setIntProp(msg, options.properties, "topicAlias", 1, bsp.topicAliasMaximum || 0); setBoolProp(msg, options.properties, "payloadFormatIndicator"); //FUTURE setIntProp(msg, options.properties, "subscriptionIdentifier", 1, 268435455); @@ -1124,7 +1293,7 @@ module.exports = function(RED) { if(node.rap === "true" || node.rap === true) options.rap = true; else if(node.rap === "false" || node.rap === false) options.rap = false; } - + node._topic = node.topic; // store the original topic incase node is later changed node.brokerConn.subscribe(node.topic,options,function(topic, payload, packet) { subscriptionHandler(node, node.datatype, topic, payload, packet); },node.id); @@ -1177,7 +1346,7 @@ module.exports = function(RED) { } if (action === Actions.UNSUBSCRIBE) { subscriptions.forEach(function (sub) { - node.brokerConn.unsubscribe(sub.topic, node.id); + node.brokerConn.unsubscribe(sub.topic, node.id, true); delete node.dynamicSubs[sub.topic]; }) //user can access current subscriptions through the complete node is so desired @@ -1187,7 +1356,7 @@ module.exports = function(RED) { subscriptions.forEach(function (sub) { //always unsubscribe before subscribe to prevent multiple subs to same topic if (node.dynamicSubs[sub.topic]) { - node.brokerConn.unsubscribe(sub.topic, node.id); + node.brokerConn.unsubscribe(sub.topic, node.id, true); delete node.dynamicSubs[sub.topic]; } @@ -1233,16 +1402,12 @@ module.exports = function(RED) { node.on('close', function(removed, done) { if (node.brokerConn) { if(node.isDynamic) { - if (node.brokerConn.options.autoUnsubscribe) { - Object.keys(node.dynamicSubs).forEach(function (topic) { - node.brokerConn.unsubscribe(topic, node.id, removed); - }); - node.dynamicSubs = {}; - } + Object.keys(node.dynamicSubs).forEach(function (topic) { + node.brokerConn.unsubscribe(topic, node.id, removed); + }); + node.dynamicSubs = {}; } else { - if (node.brokerConn.options.autoUnsubscribe) { - node.brokerConn.unsubscribe(node.topic, node.id, removed); - } + node.brokerConn.unsubscribe(node.topic, node.id, removed); } node.brokerConn.deregister(node, done, removed); node.brokerConn = null; From 7e9042e9f713eec981adeb8ff6af226a40efb5af Mon Sep 17 00:00:00 2001 From: wooferguy Date: Wed, 17 May 2023 05:14:18 +1200 Subject: [PATCH 38/56] Check for group Remove junction from groups node list if it is present. --- .../@node-red/editor-client/src/js/ui/view.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 4131f5dbf..84bf02332 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -2646,6 +2646,16 @@ RED.view = (function() { var result = RED.nodes.removeJunction(node) removedJunctions.push(node); removedLinks = removedLinks.concat(result.links); + if (node.g) { + var group = RED.nodes.group(node.g); + if (selectedGroups.indexOf(group) === -1) { + // Don't use RED.group.removeFromGroup as that emits + // a change event on the node - but we're deleting it + var index = group.nodes.indexOf(node); + group.nodes.splice(index,1); + RED.group.markDirty(group); + } + } } else { if (node.direction === "out") { removedSubflowOutputs.push(node); From 9e3f1482735cfb5b5b46ad03debfc159b61694c6 Mon Sep 17 00:00:00 2001 From: wooferguy Date: Wed, 17 May 2023 18:56:07 +1200 Subject: [PATCH 39/56] Invalid JSONata Inject node test passing condition This test would sometimes run twice, causing the author to increase its catch count to 2 before considering the test complete. However even one pass proves the node is behaving as expected, and it always runs at least once. I have left the conditional statement in so it can be changed in future. --- test/nodes/core/common/20-inject_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/nodes/core/common/20-inject_spec.js b/test/nodes/core/common/20-inject_spec.js index a4dbdd9e4..3e9a35391 100644 --- a/test/nodes/core/common/20-inject_spec.js +++ b/test/nodes/core/common/20-inject_spec.js @@ -854,7 +854,7 @@ describe('inject node', function() { }); n1.on("call:error", function(err) { count++; - if (count == 2) { + if (count == 1) { done(); } }); From 57359d1659e2404291c9acd216119dc0ec191228 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 10:54:37 +0100 Subject: [PATCH 40/56] Ensure express server options are applied consistently Fixes #4169 --- .../@node-red/editor-api/lib/admin/index.js | 15 ++------------- .../@node-red/editor-api/lib/editor/index.js | 7 ++++--- .../editor-api/lib/editor/projects.js | 7 ++++--- .../editor-api/lib/editor/settings.js | 4 ++-- .../@node-red/editor-api/lib/editor/sshkeys.js | 6 ++++-- .../@node-red/editor-api/lib/editor/theme.js | 15 +++++++++++++-- .../@node-red/editor-api/lib/index.js | 18 +++++------------- .../@node-red/editor-api/lib/util.js | 17 ++++++++++++++--- .../@node-red/runtime/lib/index.js | 9 +++++++++ .../editor-api/lib/editor/index_spec.js | 2 ++ .../editor-api/lib/editor/settings_spec.js | 4 ++-- .../editor-api/lib/editor/sshkeys_spec.js | 2 +- 12 files changed, 62 insertions(+), 44 deletions(-) diff --git a/packages/node_modules/@node-red/editor-api/lib/admin/index.js b/packages/node_modules/@node-red/editor-api/lib/admin/index.js index 8406fa8e9..26eabe65b 100644 --- a/packages/node_modules/@node-red/editor-api/lib/admin/index.js +++ b/packages/node_modules/@node-red/editor-api/lib/admin/index.js @@ -14,8 +14,6 @@ * limitations under the License. **/ -var express = require("express"); - var nodes = require("./nodes"); var flows = require("./flows"); var flow = require("./flow"); @@ -37,18 +35,9 @@ module.exports = { plugins.init(runtimeAPI); diagnostics.init(settings, runtimeAPI); - var needsPermission = auth.needsPermission; - - var adminApp = express(); - - var defaultServerSettings = { - "x-powered-by": false - } - var serverSettings = Object.assign({},defaultServerSettings,settings.httpServerOptions||{}); - for (var eOption in serverSettings) { - adminApp.set(eOption, serverSettings[eOption]); - } + const needsPermission = auth.needsPermission; + const adminApp = apiUtil.createExpressApp(settings) // Flows adminApp.get("/flows",needsPermission("flows.read"),flows.get,apiUtil.errorHandler); diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/index.js b/packages/node_modules/@node-red/editor-api/lib/editor/index.js index f210d90fe..42be1f270 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/index.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/index.js @@ -46,14 +46,15 @@ module.exports = { runtimeAPI = _runtimeAPI; needsPermission = auth.needsPermission; if (!settings.disableEditor) { - info.init(runtimeAPI); + info.init(settings, runtimeAPI); comms.init(server,settings,runtimeAPI); var ui = require("./ui"); ui.init(runtimeAPI); - var editorApp = express(); + const editorApp = apiUtil.createExpressApp(settings) + if (settings.requireHttps === true) { editorApp.enable('trust proxy'); editorApp.use(function (req, res, next) { @@ -86,7 +87,7 @@ module.exports = { //Projects var projects = require("./projects"); - projects.init(runtimeAPI); + projects.init(settings, runtimeAPI); editorApp.use("/projects",projects.app()); // Locales diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/projects.js b/packages/node_modules/@node-red/editor-api/lib/editor/projects.js index ad505a46e..5d1b2ff26 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/projects.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/projects.js @@ -14,9 +14,9 @@ * limitations under the License. **/ -var express = require("express"); var apiUtils = require("../util"); +var settings; var runtimeAPI; var needsPermission = require("../auth").needsPermission; @@ -77,11 +77,12 @@ function getProjectRemotes(req,res) { }) } module.exports = { - init: function(_runtimeAPI) { + init: function(_settings, _runtimeAPI) { + settings = _settings; runtimeAPI = _runtimeAPI; }, app: function() { - var app = express(); + var app = apiUtils.createExpressApp(settings) app.use(function(req,res,next) { runtimeAPI.projects.available().then(function(available) { diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/settings.js b/packages/node_modules/@node-red/editor-api/lib/editor/settings.js index 5fa2476e1..200ddf2c2 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/settings.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/settings.js @@ -18,9 +18,9 @@ var runtimeAPI; var sshkeys = require("./sshkeys"); module.exports = { - init: function(_runtimeAPI) { + init: function(settings, _runtimeAPI) { runtimeAPI = _runtimeAPI; - sshkeys.init(runtimeAPI); + sshkeys.init(settings, runtimeAPI); }, userSettings: function(req, res) { var opts = { diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js b/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js index 6d1c62e11..08097571f 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js @@ -17,13 +17,15 @@ var apiUtils = require("../util"); var express = require("express"); var runtimeAPI; +var settings; module.exports = { - init: function(_runtimeAPI) { + init: function(_settings, _runtimeAPI) { runtimeAPI = _runtimeAPI; + settings = _settings; }, app: function() { - var app = express(); + const app = apiUtils.createExpressApp(settings); // List all SSH keys app.get("/", function(req,res) { diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js index c21a7e6e7..b3f6ef922 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js @@ -19,6 +19,7 @@ var util = require("util"); var path = require("path"); var fs = require("fs"); var clone = require("clone"); +const apiUtil = require("../util") var defaultContext = { page: { @@ -40,6 +41,7 @@ var defaultContext = { vendorMonaco: "" } }; +var settings; var theme = null; var themeContext = clone(defaultContext); @@ -92,7 +94,8 @@ function serveFilesFromTheme(themeValue, themeApp, directory, baseDirectory) { } module.exports = { - init: function(settings, _runtimeAPI) { + init: function(_settings, _runtimeAPI) { + settings = _settings; runtimeAPI = _runtimeAPI; themeContext = clone(defaultContext); if (process.env.NODE_ENV == "development") { @@ -113,7 +116,15 @@ module.exports = { var url; themeSettings = {}; - themeApp = express(); + themeApp = apiUtil.createExpressApp(settings); + + const defaultServerSettings = { + "x-powered-by": false + } + const serverSettings = Object.assign({},defaultServerSettings,settings.httpServerOptions||{}); + for (const eOption in serverSettings) { + themeApp.set(eOption, serverSettings[eOption]); + } if (theme.page) { diff --git a/packages/node_modules/@node-red/editor-api/lib/index.js b/packages/node_modules/@node-red/editor-api/lib/index.js index 56f52a222..d9f34eafd 100644 --- a/packages/node_modules/@node-red/editor-api/lib/index.js +++ b/packages/node_modules/@node-red/editor-api/lib/index.js @@ -37,7 +37,6 @@ var adminApp; var server; var editor; - /** * Initialise the module. * @param {Object} settings The runtime settings @@ -49,7 +48,7 @@ var editor; function init(settings,_server,storage,runtimeAPI) { server = _server; if (settings.httpAdminRoot !== false) { - adminApp = express(); + adminApp = apiUtil.createExpressApp(settings); var cors = require('cors'); var corsHandler = cors({ @@ -64,14 +63,6 @@ function init(settings,_server,storage,runtimeAPI) { } } - var defaultServerSettings = { - "x-powered-by": false - } - var serverSettings = Object.assign({},defaultServerSettings,settings.httpServerOptions||{}); - for (var eOption in serverSettings) { - adminApp.set(eOption, serverSettings[eOption]); - } - auth.init(settings,storage); var maxApiRequestSize = settings.apiMaxLength || '5mb'; @@ -136,10 +127,11 @@ async function stop() { editor.stop(); } } + module.exports = { - init: init, - start: start, - stop: stop, + init, + start, + stop, /** * @memberof @node-red/editor-api diff --git a/packages/node_modules/@node-red/editor-api/lib/util.js b/packages/node_modules/@node-red/editor-api/lib/util.js index 621fd9e33..f1420235a 100644 --- a/packages/node_modules/@node-red/editor-api/lib/util.js +++ b/packages/node_modules/@node-red/editor-api/lib/util.js @@ -14,10 +14,9 @@ * limitations under the License. **/ +const express = require("express"); -var log = require("@node-red/util").log; // TODO: separate module -var i18n = require("@node-red/util").i18n; // TODO: separate module - +const { log, i18n } = require("@node-red/util"); module.exports = { errorHandler: function(err,req,res,next) { @@ -64,5 +63,17 @@ module.exports = { path: req.path, ip: (req.headers && req.headers['x-forwarded-for']) || (req.connection && req.connection.remoteAddress) || undefined } + }, + createExpressApp: function(settings) { + const app = express(); + + const defaultServerSettings = { + "x-powered-by": false + } + const serverSettings = Object.assign({},defaultServerSettings,settings.httpServerOptions||{}); + for (let eOption in serverSettings) { + app.set(eOption, serverSettings[eOption]); + } + return app } } diff --git a/packages/node_modules/@node-red/runtime/lib/index.js b/packages/node_modules/@node-red/runtime/lib/index.js index a886cd2ca..74f03c55c 100644 --- a/packages/node_modules/@node-red/runtime/lib/index.js +++ b/packages/node_modules/@node-red/runtime/lib/index.js @@ -89,6 +89,15 @@ function init(userSettings,httpServer,_adminApi) { nodeApp = express(); adminApp = express(); + const defaultServerSettings = { + "x-powered-by": false + } + const serverSettings = Object.assign({},defaultServerSettings,userSettings.httpServerOptions||{}); + for (let eOption in serverSettings) { + nodeApp.set(eOption, serverSettings[eOption]); + adminApp.set(eOption, serverSettings[eOption]); + } + if (_adminApi) { adminApi = _adminApi; diff --git a/test/unit/@node-red/editor-api/lib/editor/index_spec.js b/test/unit/@node-red/editor-api/lib/editor/index_spec.js index 8ed4d88f3..2c11acbc3 100644 --- a/test/unit/@node-red/editor-api/lib/editor/index_spec.js +++ b/test/unit/@node-red/editor-api/lib/editor/index_spec.js @@ -61,12 +61,14 @@ describe("api/editor/index", function() { sinon.stub(NR_TEST_UTILS.require("@node-red/editor-api/lib/editor/"+m),"init").callsFake(function(){}); }); sinon.stub(NR_TEST_UTILS.require("@node-red/editor-api/lib/editor/theme"),"app").callsFake(function(){ return express()}); + sinon.stub(NR_TEST_UTILS.require("@node-red/editor-api/lib/editor/settings"),"sshkeys").callsFake(function(){ return express()}); }); after(function() { mockList.forEach(function(m) { NR_TEST_UTILS.require("@node-red/editor-api/lib/editor/"+m).init.restore(); }) NR_TEST_UTILS.require("@node-red/editor-api/lib/editor/theme").app.restore(); + NR_TEST_UTILS.require("@node-red/editor-api/lib/editor/settings").sshkeys.restore(); auth.needsPermission.restore(); log.error.restore(); }); diff --git a/test/unit/@node-red/editor-api/lib/editor/settings_spec.js b/test/unit/@node-red/editor-api/lib/editor/settings_spec.js index 171dca564..19f72977a 100644 --- a/test/unit/@node-red/editor-api/lib/editor/settings_spec.js +++ b/test/unit/@node-red/editor-api/lib/editor/settings_spec.js @@ -41,7 +41,7 @@ describe("api/editor/settings", function() { }); it('returns the user settings', function(done) { - info.init({ + info.init({}, { settings: { getUserSettings: function(opts) { if (opts.user !== "fred") { @@ -67,7 +67,7 @@ describe("api/editor/settings", function() { }); it('updates the user settings', function(done) { var update; - info.init({ + info.init({}, { settings: { updateUserSettings: function(opts) { if (opts.user !== "fred") { diff --git a/test/unit/@node-red/editor-api/lib/editor/sshkeys_spec.js b/test/unit/@node-red/editor-api/lib/editor/sshkeys_spec.js index 1647cd99d..75e8063f6 100644 --- a/test/unit/@node-red/editor-api/lib/editor/sshkeys_spec.js +++ b/test/unit/@node-red/editor-api/lib/editor/sshkeys_spec.js @@ -34,7 +34,7 @@ describe("api/editor/sshkeys", function() { } } before(function() { - sshkeys.init(mockRuntime); + sshkeys.init({}, mockRuntime); app = express(); app.use(bodyParser.json()); app.use("/settings/user/keys", sshkeys.app()); From 0e52271ba9b585bf044270cf6c70111965c20f32 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 11:00:15 +0100 Subject: [PATCH 41/56] Remove version info from theme endpoint Fixes #4170 --- packages/node_modules/@node-red/editor-api/lib/editor/theme.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js index c21a7e6e7..a3467a66c 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js @@ -27,8 +27,7 @@ var defaultContext = { tabicon: { icon: "red/images/node-red-icon-black.svg", colour: "#8f0000" - }, - version: require(path.join(__dirname,"../../package.json")).version + } }, header: { title: "Node-RED", From 6e1b298282d57cc882ae2475943618b1852c3ce9 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 13:57:12 +0100 Subject: [PATCH 42/56] Reconstruct xml2js output as proper object --- .../@node-red/nodes/core/parsers/70-XML.js | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js index a778c4d72..538368730 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js @@ -33,7 +33,13 @@ module.exports = function(RED) { parseString(value, options, function (err, result) { if (err) { done(err); } else { - value = result; + // TODO: With xml2js@0.5.0, they return an object with + // a null prototype. This could cause unexpected + // issues. So for now, we have to reconstruct + // the object with a proper prototype. + // Once https://github.com/Leonidas-from-XIV/node-xml2js/pull/674 + // is merged, we can revisit and hopefully remove this hack + value = fixObj(result) RED.util.setMessageProperty(msg,node.property,value); send(msg); done(); @@ -46,4 +52,18 @@ module.exports = function(RED) { }); } RED.nodes.registerType("xml",XMLNode); + + + function fixObj(obj) { + const res = {} + const keys = Object.keys(obj) + keys.forEach(k => { + if (typeof obj[k] === 'object' && obj[k]) { + res[k] = fixObj(obj[k]) + } else { + res[k] = obj[k] + } + }) + return res + } } From 18610bb54094e56f6a35e250b7223f392a7271b6 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 14:24:11 +0100 Subject: [PATCH 43/56] Ensure external modules are installed synchronously Fixes #4168 --- .../@node-red/registry/lib/externalModules.js | 111 +++++++++--------- 1 file changed, 58 insertions(+), 53 deletions(-) diff --git a/packages/node_modules/@node-red/registry/lib/externalModules.js b/packages/node_modules/@node-red/registry/lib/externalModules.js index b61392d9b..b76f748a4 100644 --- a/packages/node_modules/@node-red/registry/lib/externalModules.js +++ b/packages/node_modules/@node-red/registry/lib/externalModules.js @@ -242,63 +242,68 @@ async function ensureModuleDir() { } } +let installLock = Promise.resolve() async function installModule(moduleDetails) { - let installSpec = moduleDetails.module; - if (!registryUtil.checkModuleAllowed( moduleDetails.module, moduleDetails.version,installAllowList,installDenyList)) { - const e = new Error("Install not allowed"); - e.code = "install_not_allowed"; - throw e; - } - if (moduleDetails.version) { - installSpec = installSpec+"@"+moduleDetails.version; - } - log.info(log._("server.install.installing",{name: moduleDetails.module,version: moduleDetails.version||"latest"})); - const installDir = getInstallDir(); - - await ensureModuleDir(); - - let triggerPayload = { - "module": moduleDetails.module, - "version": moduleDetails.version, - "dir": installDir, - "args": ["--production","--engine-strict"] - } - return hooks.trigger("preInstall", triggerPayload).then((result) => { - // preInstall passed - // - run install - if (result !== false) { - let extraArgs = triggerPayload.args || []; - let args = ['install', ...extraArgs, installSpec] - log.trace(NPM_COMMAND + JSON.stringify(args)); - return exec.run(NPM_COMMAND, args, { cwd: installDir },true) - } else { - log.trace("skipping npm install"); - } - }).then(() => { - return hooks.trigger("postInstall", triggerPayload) - }).then(() => { - log.info(log._("server.install.installed", { name: installSpec })); - const runtimeInstalledModules = settings.get("modules") || {}; - runtimeInstalledModules[moduleDetails.module] = moduleDetails; - settings.set("modules",runtimeInstalledModules) - }).catch(result => { - var output = result.stderr || result.toString(); - var e; - if (/E404/.test(output) || /ETARGET/.test(output)) { - log.error(log._("server.install.install-failed-not-found",{name:installSpec})); - e = new Error("Module not found"); - e.code = 404; - throw e; - } else { - log.error(log._("server.install.install-failed-long",{name:installSpec})); - log.error("------------------------------------------"); - log.error(output); - log.error("------------------------------------------"); - e = new Error(log._("server.install.install-failed")); - e.code = "unexpected_error"; + const result = installLock.then(async () => { + let installSpec = moduleDetails.module; + if (!registryUtil.checkModuleAllowed( moduleDetails.module, moduleDetails.version,installAllowList,installDenyList)) { + const e = new Error("Install not allowed"); + e.code = "install_not_allowed"; throw e; } + if (moduleDetails.version) { + installSpec = installSpec+"@"+moduleDetails.version; + } + log.info(log._("server.install.installing",{name: moduleDetails.module,version: moduleDetails.version||"latest"})); + const installDir = getInstallDir(); + + await ensureModuleDir(); + + let triggerPayload = { + "module": moduleDetails.module, + "version": moduleDetails.version, + "dir": installDir, + "args": ["--production","--engine-strict"] + } + return hooks.trigger("preInstall", triggerPayload).then((result) => { + // preInstall passed + // - run install + if (result !== false) { + let extraArgs = triggerPayload.args || []; + let args = ['install', ...extraArgs, installSpec] + log.trace(NPM_COMMAND + JSON.stringify(args)); + return exec.run(NPM_COMMAND, args, { cwd: installDir },true) + } else { + log.trace("skipping npm install"); + } + }).then(() => { + return hooks.trigger("postInstall", triggerPayload) + }).then(() => { + log.info(log._("server.install.installed", { name: installSpec })); + const runtimeInstalledModules = settings.get("modules") || {}; + runtimeInstalledModules[moduleDetails.module] = moduleDetails; + settings.set("modules",runtimeInstalledModules) + }).catch(result => { + var output = result.stderr || result.toString(); + var e; + if (/E404/.test(output) || /ETARGET/.test(output)) { + log.error(log._("server.install.install-failed-not-found",{name:installSpec})); + e = new Error("Module not found"); + e.code = 404; + throw e; + } else { + log.error(log._("server.install.install-failed-long",{name:installSpec})); + log.error("------------------------------------------"); + log.error(output); + log.error("------------------------------------------"); + e = new Error(log._("server.install.install-failed")); + e.code = "unexpected_error"; + throw e; + } + }) }) + installLock = result.catch(() => {}) + return result } module.exports = { From e6c454bba544ca51df492772e52cf4882a0c96d7 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 15:11:57 +0100 Subject: [PATCH 44/56] Ensure non-zero exit codes for errors --- packages/node_modules/node-red/red.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/node-red/red.js b/packages/node_modules/node-red/red.js index 2f5ab354c..72f8a4169 100755 --- a/packages/node_modules/node-red/red.js +++ b/packages/node_modules/node-red/red.js @@ -148,7 +148,7 @@ try { } else { console.log(err); } - process.exit(); + process.exit(1); } if (parsedArgs.define) { @@ -182,7 +182,7 @@ if (parsedArgs.define) { } } catch (e) { console.log("Error processing -D option: "+e.message); - process.exit(); + process.exit(1); } } From 2ae2ec2578a668c2751556a2ad5c7b0c79b84dca Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 16:07:14 +0100 Subject: [PATCH 45/56] Combine existing env vars when merging groups Closes #4101 --- .../editor-client/src/js/ui/group.js | 8 +- .../@node-red/editor-client/src/js/ui/view.js | 120 ++++++++++-------- 2 files changed, 74 insertions(+), 54 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/group.js b/packages/node_modules/@node-red/editor-client/src/js/ui/group.js index 738b6e38d..13056f09b 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/group.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/group.js @@ -401,7 +401,7 @@ RED.group = (function() { } } var existingGroup; - + var mergedEnv = {} // Second pass, ungroup any groups in the selection and add their contents // to the selection for (var i=0; i 0) { + n.env.forEach(env => { + mergedEnv[env.name] = env + }) + } ungroupHistoryEvent.groups.push(n); nodes = nodes.concat(ungroup(n)); } else { @@ -427,6 +432,7 @@ RED.group = (function() { group.style = existingGroup.style; group.name = existingGroup.name; } + group.env = Object.values(mergedEnv) RED.view.select({nodes:[group]}) } historyEvent.events.push({ diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 2909e8182..674648747 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -232,6 +232,63 @@ RED.view = (function() { return api })(); + const selectedGroups = (function() { + let groups = new Set() + const api = { + add: function(g, includeNodes, addToMovingSet) { + groups.add(g) + if (!g.selected) { + g.selected = true; + g.dirty = true; + } + if (addToMovingSet !== false) { + movingSet.add(g); + } + if (includeNodes) { + var currentSet = new Set(movingSet.nodes()); + var allNodes = RED.group.getNodes(g,true); + allNodes.forEach(function(n) { + if (!currentSet.has(n)) { + movingSet.add(n) + } + n.dirty = true; + }) + } + selectedLinks.clearUnselected() + }, + remove: function(g) { + groups.delete(g) + if (g.selected) { + g.selected = false; + g.dirty = true; + } + const allNodes = RED.group.getNodes(g,true); + const nodeSet = new Set(allNodes); + nodeSet.add(g); + for (let i = movingSet.length()-1; i >= 0; i -= 1) { + const msn = movingSet.get(i); + if (nodeSet.has(msn.n) || msn.n === g) { + msn.n.selected = false; + msn.n.dirty = true; + movingSet.remove(msn.n,i) + } + } + selectedLinks.clearUnselected() + }, + length: () => groups.length, + forEach: (func) => { groups.forEach(func) }, + toArray: () => [...groups], + clear: function () { + groups.forEach(g => { + g.selected = false + g.dirty = true + }) + groups.clear() + } + } + return api + })() + function init() { @@ -1136,7 +1193,7 @@ RED.view = (function() { var touchTrigger = options.touchTrigger; if (targetGroup) { - selectGroup(targetGroup,false); + selectedGroups.add(targetGroup,false); RED.view.redraw(); } @@ -1462,7 +1519,7 @@ RED.view = (function() { clearSelection(); nn.selected = true; if (targetGroup) { - selectGroup(targetGroup,false); + selectedGroups.add(targetGroup,false); } movingSet.add(nn); updateActiveNodes(); @@ -1926,7 +1983,7 @@ RED.view = (function() { if (!movingSet.has(n) && !n.selected) { // group entirely within lasso if (n.x > x && n.y > y && n.x + n.w < x2 && n.y + n.h < y2) { - selectGroup(n, true) + selectedGroups.add(n, true) } } }) @@ -2276,7 +2333,7 @@ RED.view = (function() { clearSelection(); activeGroups.forEach(function(g) { if (!g.g) { - selectGroup(g, true); + selectedGroups.add(g, true); if (!g.selected) { g.selected = true; g.dirty = true; @@ -2346,10 +2403,7 @@ RED.view = (function() { } movingSet.clear(); selectedLinks.clear(); - activeGroups.forEach(function(g) { - g.selected = false; - g.dirty = true; - }) + selectedGroups.clear(); } var lastSelection = null; @@ -3438,7 +3492,7 @@ RED.view = (function() { if (!groupNodeSelectPrimed && !d.selected && d.g && RED.nodes.group(d.g).selected) { clearSelection(); - selectGroup(RED.nodes.group(d.g), false); + selectedGroups.add(RED.nodes.group(d.g), false); mousedown_node.selected = true; movingSet.add(mousedown_node); @@ -3859,14 +3913,14 @@ RED.view = (function() { lastClickNode = g; if (g.selected && (d3.event.ctrlKey||d3.event.metaKey)) { - deselectGroup(g); + selectedGroups.remove(g); d3.event.stopPropagation(); } else { if (!g.selected) { if (!d3.event.ctrlKey && !d3.event.metaKey) { clearSelection(); } - selectGroup(g,true);//!wasSelected); + selectedGroups.add(g,true);//!wasSelected); } if (d3.event.button != 2) { @@ -3882,45 +3936,6 @@ RED.view = (function() { d3.event.stopPropagation(); } - function selectGroup(g, includeNodes, addToMovingSet) { - if (!g.selected) { - g.selected = true; - g.dirty = true; - } - if (addToMovingSet !== false) { - movingSet.add(g); - } - if (includeNodes) { - var currentSet = new Set(movingSet.nodes()); - var allNodes = RED.group.getNodes(g,true); - allNodes.forEach(function(n) { - if (!currentSet.has(n)) { - movingSet.add(n) - } - n.dirty = true; - }) - } - selectedLinks.clearUnselected() - } - - function deselectGroup(g) { - if (g.selected) { - g.selected = false; - g.dirty = true; - } - const allNodes = RED.group.getNodes(g,true); - const nodeSet = new Set(allNodes); - nodeSet.add(g); - for (let i = movingSet.length()-1; i >= 0; i -= 1) { - const msn = movingSet.get(i); - if (nodeSet.has(msn.n) || msn.n === g) { - msn.n.selected = false; - msn.n.dirty = true; - movingSet.remove(msn.n,i) - } - } - selectedLinks.clearUnselected() - } function getGroupAt(x, y, ignoreSelected) { // x,y expected to be in node-co-ordinate space var candidateGroups = {}; @@ -5901,11 +5916,10 @@ RED.view = (function() { if (movingSet.length() > 0) { movingSet.forEach(function(n) { if (n.n.type !== 'group') { - allNodes.add(n.n); + allNodes.add(n.n); } }); } - var selectedGroups = activeGroups.filter(function(g) { return g.selected }); selectedGroups.forEach(function(g) { var groupNodes = RED.group.getNodes(g,true); groupNodes.forEach(function(n) { @@ -6114,7 +6128,7 @@ RED.view = (function() { n.dirty = true; movingSet.add(n); } else { - selectGroup(n,true); + selectedGroups.add(n,true); } }) } From 7a4f48e4fb083f876cdb34035b55ccddb37810c0 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 16:26:38 +0100 Subject: [PATCH 46/56] Place subflow outputs/inputs relative to current view Fixes #4111 --- .../@node-red/editor-client/src/js/ui/subflow.js | 4 +++- .../@node-red/editor-client/src/js/ui/view.js | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js b/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js index ef9da4f96..da38e6054 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js @@ -46,7 +46,9 @@ RED.subflow = (function() { ''; function findAvailableSubflowIOPosition(subflow,isInput) { - var pos = {x:50,y:30}; + const scrollPos = RED.view.scroll() + const scaleFactor = RED.view.scale() + var pos = { x: (scrollPos[0]/scaleFactor)+50, y: (scrollPos[1]/scaleFactor)+30 }; if (!isInput) { pos.x += 110; } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 2909e8182..f15c09f82 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -4359,6 +4359,7 @@ RED.view = (function() { this.__port__.setAttribute("transform","translate(-5,"+((d.h/2)-5)+")"); this.__outputOutput__.setAttribute("transform","translate(20,"+((d.h/2)-8)+")"); this.__outputNumber__.setAttribute("transform","translate(20,"+((d.h/2)+7)+")"); + this.__outputNumber__.textContent = d.i+1; } d.dirty = false; } @@ -6282,8 +6283,12 @@ RED.view = (function() { }) }, scroll: function(x,y) { - chart.scrollLeft(chart.scrollLeft()+x); - chart.scrollTop(chart.scrollTop()+y) + if (x !== undefined && y !== undefined) { + chart.scrollLeft(chart.scrollLeft()+x); + chart.scrollTop(chart.scrollTop()+y) + } else { + return [chart.scrollLeft(), chart.scrollTop()] + } }, clickNodeButton: function(n) { if (n._def.button) { From 90e32f52c9535e340c67279aeac1f04d97535797 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 16:51:17 +0100 Subject: [PATCH 47/56] Enable RED.view.select to select group by id --- .../node_modules/@node-red/editor-client/src/js/red.js | 2 +- .../node_modules/@node-red/editor-client/src/js/ui/view.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/red.js b/packages/node_modules/@node-red/editor-client/src/js/red.js index b45f0378a..89464bd6c 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/red.js +++ b/packages/node_modules/@node-red/editor-client/src/js/red.js @@ -274,7 +274,7 @@ var RED = (function() { if (nodeToShow) { RED.view.reveal(nodeToShow.id) window.location.hash = currentHash - RED.view.select({ nodes: [nodeToShow] }) + RED.view.select(nodeToShow.id) if (showEditDialog) { RED.editor.editGroup(nodeToShow) } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 04fcf1335..9fdbc3dde 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -6114,6 +6114,13 @@ RED.view = (function() { selectedNode.dirty = true; movingSet.clear(); movingSet.add(selectedNode); + } else { + selectedNode = RED.nodes.group(selection); + if (selectedNode) { + movingSet.clear(); + selectedGroups.clear() + selectedGroups.add(selectedNode) + } } } else if (selection) { if (selection.nodes) { From 2388232179f59c71066f4cf5eaea881885946088 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 22:33:31 +0100 Subject: [PATCH 48/56] Fix catch/status group scoping to handle group hierarchies --- .../@node-red/runtime/lib/flows/Flow.js | 83 ++++++++++++++----- .../@node-red/runtime/lib/flows/Flow_spec.js | 74 +++++++++++++++++ 2 files changed, 135 insertions(+), 22 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 0c0d1e61e..4430e59ed 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -665,16 +665,36 @@ class Flow { } handled = true; } else { - const flow = this; - this.statusNodes.forEach(function(targetStatusNode) { + const candidateNodes = []; + this.statusNodes.forEach(targetStatusNode => { + if (targetStatusNode.g && targetStatusNode.scope === 'group' && !reportingNode.g) { + // Status node inside a group, reporting node not in a group - skip it + return + } if (Array.isArray(targetStatusNode.scope) && targetStatusNode.scope.indexOf(reportingNode.id) === -1) { return; } - - if (targetStatusNode.scope === "group" && flow.isNodeInSameGroup(targetStatusNode, reportingNode) === false){ - return; + let distance = 0 + if (reportingNode.g) { + // Reporting node inside a group. Calculate the distance between it and the status node + let containingGroup = this.global.groups[reportingNode.g] + while (containingGroup && containingGroup.id !== targetStatusNode.g) { + distance++ + containingGroup = this.global.groups[containingGroup.g] + } + if (!containingGroup && targetStatusNode.g && targetStatusNode.scope === 'group') { + // This status node is in a group, but not in the same hierachy + // the reporting node is in + return + } } - + candidateNodes.push({ d: distance, n: targetStatusNode }) + }) + candidateNodes.sort((A,B) => { + return A.d - B.d + }) + candidateNodes.forEach(candidate => { + const targetStatusNode = candidate.n var message = { status: clone(statusMessage) } @@ -732,27 +752,46 @@ class Flow { } handled = true; } else { - var handledByUncaught = false; - - const flow = this; - this.catchNodes.forEach(function(targetCatchNode) { + const candidateNodes = []; + this.catchNodes.forEach(targetCatchNode => { + if (targetCatchNode.g && targetCatchNode.scope === 'group' && !reportingNode.g) { + // Catch node inside a group, reporting node not in a group - skip it + return + } if (Array.isArray(targetCatchNode.scope) && targetCatchNode.scope.indexOf(reportingNode.id) === -1) { + // Catch node has a scope set and it doesn't include the reporting node return; } - - if (targetCatchNode.scope === "group" && flow.isNodeInSameGroup(targetCatchNode, reportingNode) === false){ - return; - } - - if ((!targetCatchNode.scope || targetCatchNode.scope === "group") && targetCatchNode.uncaught && !handledByUncaught) { - if (handled) { - // This has been handled by a !uncaught catch node - return; + let distance = 0 + if (reportingNode.g) { + // Reporting node inside a group. Calculate the distance between it and the catch node + let containingGroup = this.global.groups[reportingNode.g] + while (containingGroup && containingGroup.id !== targetCatchNode.g) { + distance++ + containingGroup = this.global.groups[containingGroup.g] + } + if (!containingGroup && targetCatchNode.g && targetCatchNode.scope === 'group') { + // This catch node is in a group, but not in the same hierachy + // the reporting node is in + return } - // This is an uncaught error - handledByUncaught = true; } - var errorMessage; + candidateNodes.push({ d: distance, n: targetCatchNode }) + }) + candidateNodes.sort((A,B) => { + return A.d - B.d + }) + let handledByUncaught = false + candidateNodes.forEach(candidate => { + const targetCatchNode = candidate.n + if (targetCatchNode.uncaught && !handledByUncaught) { + // This node only wants errors that haven't already been handled + if (handled) { + return + } + handledByUncaught = true + } + let errorMessage; if (msg) { errorMessage = redUtil.cloneMessage(msg); } else { diff --git a/test/unit/@node-red/runtime/lib/flows/Flow_spec.js b/test/unit/@node-red/runtime/lib/flows/Flow_spec.js index ca30868d7..6d53747ef 100644 --- a/test/unit/@node-red/runtime/lib/flows/Flow_spec.js +++ b/test/unit/@node-red/runtime/lib/flows/Flow_spec.js @@ -686,6 +686,44 @@ describe('Flow', function() { },50); }); + it.only("passes a status event to the group scoped status node",function(done) { + var config = flowUtils.parseConfig([ + {id:"t1",type:"tab"}, + {id: "g1", type: "group", g: "g3" }, + {id: "g2", type: "group" }, + {id: "g3", type: "group" }, + {id:"1",x:10,y:10,z:"t1",g:"g1", type:"test",name:"a",wires:["2"]}, + // sn - in the same group as source node + {id:"sn",x:10,y:10,z:"t1",g:"g1", type:"status",scope:"group",wires:[]}, + // sn2 - in a different group hierarchy to the source node + {id:"sn2",x:10,y:10,z:"t1", g:"g2", type:"status",scope:"group",wires:[]}, + // sn3 - in a higher-level group to the source node + {id:"sn3",x:10,y:10,z:"t1", g:"g3", type:"status",scope:"group",wires:[]}, + // sn2 - in a different group hierarchy, but not scope to the group + {id:"sn4",x:10,y:10,z:"t1", g:"g2", type:"status",wires:[]}, + + ]); + var flow = Flow.create({},config,config.flows["t1"]); + + flow.start(); + + var activeNodes = flow.getActiveNodes(); + flow.handleStatus(config.flows["t1"].nodes["1"],{text:"my-status"}); + setTimeout(function() { + try { + currentNodes["sn"].should.have.a.property("handled",1); + currentNodes["sn2"].should.have.a.property("handled",0); + currentNodes["sn3"].should.have.a.property("handled",1); + currentNodes["sn3"].should.have.a.property("handled",1); + done() + } catch(err) { + done(err) + } + },50); + }); + + + }); describe("#handleError",function() { @@ -796,6 +834,42 @@ describe('Flow', function() { },50); },50); }); + it("passes an error event to the group scoped catch node",function(done) { + var config = flowUtils.parseConfig([ + {id:"t1",type:"tab"}, + {id: "g1", type: "group", g: "g3" }, + {id: "g2", type: "group" }, + {id: "g3", type: "group" }, + {id:"1",x:10,y:10,z:"t1",g:"g1", type:"test",name:"a",wires:["2"]}, + // sn - in the same group as source node + {id:"sn",x:10,y:10,z:"t1",g:"g1", type:"catch",scope:"group",wires:[]}, + // sn2 - in a different group hierarchy to the source node + {id:"sn2",x:10,y:10,z:"t1", g:"g2", type:"catch",scope:"group",wires:[]}, + // sn3 - in a higher-level group to the source node + {id:"sn3",x:10,y:10,z:"t1", g:"g3", type:"catch",scope:"group",wires:[]}, + // sn2 - in a different group hierarchy, but not scope to the group + {id:"sn4",x:10,y:10,z:"t1", g:"g2", type:"catch",wires:[]}, + + ]); + var flow = Flow.create({},config,config.flows["t1"]); + + flow.start(); + + var activeNodes = flow.getActiveNodes(); + + flow.handleError(config.flows["t1"].nodes["1"],"my-error",{a:"foo"}); + setTimeout(function() { + try { + currentNodes["sn"].should.have.a.property("handled",1); + currentNodes["sn2"].should.have.a.property("handled",0); + currentNodes["sn3"].should.have.a.property("handled",1); + currentNodes["sn3"].should.have.a.property("handled",1); + done() + } catch(err) { + done(err) + } + },50); + }); it("moves any existing error object sideways",function(done){ var config = flowUtils.parseConfig([ {id:"t1",type:"tab"}, From 991f13e704f0ae2f979bd7a4ef1d4ca92cceb8de Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 22 May 2023 23:14:31 +0100 Subject: [PATCH 49/56] Remove unused function --- .../@node-red/runtime/lib/flows/Flow.js | 59 ------------------- 1 file changed, 59 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 4430e59ed..489ec42cb 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -128,65 +128,6 @@ class Flow { } this.parent.log(msg); } - - /** - * Checks if node A and node B are in the same group. - * Node B can also be placed in a subgroup. - * If node A is not in any group, false is returned - * @param {Node} nodeIdA Node which defines the first search level - * @param {Node} nodeIdB Node which is to be searched in the group or a subgroup - * @returns {boolean} Returns true if all nodes are in the same group. If not, then false or if node A is not in a group then also false. - */ - isNodeInSameGroup(nodeIdA, nodeIdB) { - const groups = this.global.groups; - let result = false; - for(let key in groups) { - let group = groups[key]; - - if(!group.nodes.includes(nodeIdA.id)) { - continue; - } - - if(group.nodes.includes(nodeIdB.id)) { - result = true; - break; - } - - /** - * Subfunction to recursively search the groups for matches - * @param {Node} Node which is to be searched in the group or a subgroup - * @param {Group} targetGroup group currently under analysis - * @returns {boolean} Returns true if a match was found. Otherwise false. - */ - const isInSubGroup = (targetNode, targetGroup) => { - let _result = false; - if(targetGroup.nodes.includes(targetNode.id)) { - _result = true; - } else { - for(let nodeId of targetGroup.nodes) { - let node = this.getGroupNode(nodeId); - - if(!node){ - continue; - } - - if(node.type === "group"){ - let result = isInSubGroup(targetNode, node); - if(result === true){ - _result = true; - break; - } - } - } - } - - return _result; - }; - - result = isInSubGroup(nodeIdB, group); - } - return result; - } /** * Start this flow. From e8378b382b478a5341b19a285eb8ef55cd7dbcbc Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Thu, 25 May 2023 10:58:25 +0100 Subject: [PATCH 50/56] update function node env typing --- .../src/types/node-red/func.d.ts | 5 +- .../editor-client/src/types/node/crypto.d.ts | 19 +- .../editor-client/src/types/node/dns.d.ts | 2 +- .../editor-client/src/types/node/globals.d.ts | 2 +- .../editor-client/src/types/node/stream.d.ts | 99 ++++++++ .../editor-client/src/types/node/test.d.ts | 4 +- .../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 +- .../monaco/dist/fa2cc0ab9f0bec2b3365.ttf | Bin 0 -> 73504 bytes .../src/vendor/monaco/dist/html.worker.js | 2 +- .../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 | 139 ++++++++--- .../src/vendor/monaco/dist/locale/de.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/es.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/fr.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/it.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/ja.js | 141 ++++++++--- .../src/vendor/monaco/dist/locale/ko.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/pl.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/pt-br.js | 143 +++++++---- .../src/vendor/monaco/dist/locale/qps-ploc.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/ru.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/tr.js | 139 ++++++++--- .../src/vendor/monaco/dist/locale/zh-hans.js | 141 ++++++++--- .../src/vendor/monaco/dist/locale/zh-hant.js | 139 ++++++++--- .../vendor/monaco/dist/theme/forge-dark.json | 213 ++++++++++++++++ .../vendor/monaco/dist/theme/forge-light.json | 227 ++++++++++++++++++ .../src/vendor/monaco/dist/ts.worker.js | 7 +- 33 files changed, 1977 insertions(+), 573 deletions(-) create mode 100644 packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/fa2cc0ab9f0bec2b3365.ttf create mode 100644 packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/theme/forge-dark.json create mode 100644 packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/theme/forge-light.json diff --git a/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts index fd2adcbd8..59f8a8bd7 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node-red/func.d.ts @@ -1,6 +1,5 @@ -/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/node-red/nr-monaco-build */ - +/* NOTE: Do not edit directly! This file is generated using `npm run update-types` in https://github.com/Steve-Mcl/monaco-editor-esm-i18n */ interface NodeMessage { topic?: string; @@ -281,5 +280,5 @@ declare class env { * @example * ```const flowName = env.get("NR_FLOW_NAME");``` */ - static get(name:string) :string; + static get(name:string) :any; } diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/crypto.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/crypto.d.ts index 027b7d750..7983fc0c0 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node/crypto.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node/crypto.d.ts @@ -1279,6 +1279,7 @@ declare module 'crypto' { interface VerifyKeyObjectInput extends SigningOptions { key: KeyObject; } + interface VerifyJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {} type KeyLike = string | Buffer | KeyObject; /** * The `Sign` class is a utility for generating signatures. It can be used in one @@ -1433,8 +1434,8 @@ declare module 'crypto' { * be passed instead of a public key. * @since v0.1.92 */ - verify(object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, signature: NodeJS.ArrayBufferView): boolean; - verify(object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, signature: string, signature_format?: BinaryToTextEncoding): boolean; + verify(object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, signature: NodeJS.ArrayBufferView): boolean; + verify(object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, signature: string, signature_format?: BinaryToTextEncoding): boolean; } /** * Creates a `DiffieHellman` key exchange object using the supplied `prime` and an @@ -2941,11 +2942,16 @@ declare module 'crypto' { * If the `callback` function is provided this function uses libuv's threadpool. * @since v12.0.0 */ - function verify(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, signature: NodeJS.ArrayBufferView): boolean; function verify( algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, - key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, + signature: NodeJS.ArrayBufferView + ): boolean; + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, signature: NodeJS.ArrayBufferView, callback: (error: Error | null, result: boolean) => void ): void; @@ -3094,12 +3100,13 @@ declare module 'crypto' { */ disableEntropyCache?: boolean | undefined; } + type UUID = `${string}-${string}-${string}-${string}-${string}`; /** * Generates a random [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122.txt) version 4 UUID. The UUID is generated using a * cryptographic pseudorandom number generator. * @since v15.6.0 */ - function randomUUID(options?: RandomUUIDOptions): string; + function randomUUID(options?: RandomUUIDOptions): UUID; interface X509CheckOptions { /** * @default 'always' @@ -3558,7 +3565,7 @@ declare module 'crypto' { * The UUID is generated using a cryptographic pseudorandom number generator. * @since v16.7.0 */ - randomUUID(): string; + randomUUID(): UUID; CryptoKey: CryptoKeyConstructor; } // This constructor throws ILLEGAL_CONSTRUCTOR so it should not be newable. diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/dns.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/dns.d.ts index 65db4e843..b45b0ec6e 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node/dns.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node/dns.d.ts @@ -174,7 +174,7 @@ declare module 'dns' { type: 'AAAA'; } export interface CaaRecord { - critial: number; + critical: number; issue?: string | undefined; issuewild?: string | undefined; iodef?: string | undefined; diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/globals.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/globals.d.ts index ca9edd437..304f5a976 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node/globals.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node/globals.d.ts @@ -56,7 +56,7 @@ interface AbortController { /** * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. */ - abort(): void; + abort(reason?: any): void; } /** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */ diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/stream.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/stream.d.ts index d32cbf9ce..d71f5a733 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node/stream.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node/stream.d.ts @@ -862,6 +862,105 @@ declare module 'stream' { end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this; cork(): void; uncork(): void; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. drain + * 4. end + * 5. error + * 6. finish + * 7. pause + * 8. pipe + * 9. readable + * 10. resume + * 11. unpipe + */ + addListener(event: 'close', listener: () => void): this; + addListener(event: 'data', listener: (chunk: any) => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'end', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'finish', listener: () => void): this; + addListener(event: 'pause', listener: () => void): this; + addListener(event: 'pipe', listener: (src: Readable) => void): this; + addListener(event: 'readable', listener: () => void): this; + addListener(event: 'resume', listener: () => void): this; + addListener(event: 'unpipe', listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'close'): boolean; + emit(event: 'data', chunk: any): boolean; + emit(event: 'drain'): boolean; + emit(event: 'end'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'finish'): boolean; + emit(event: 'pause'): boolean; + emit(event: 'pipe', src: Readable): boolean; + emit(event: 'readable'): boolean; + emit(event: 'resume'): boolean; + emit(event: 'unpipe', src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'close', listener: () => void): this; + on(event: 'data', listener: (chunk: any) => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'end', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'finish', listener: () => void): this; + on(event: 'pause', listener: () => void): this; + on(event: 'pipe', listener: (src: Readable) => void): this; + on(event: 'readable', listener: () => void): this; + on(event: 'resume', listener: () => void): this; + on(event: 'unpipe', listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'data', listener: (chunk: any) => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'end', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'finish', listener: () => void): this; + once(event: 'pause', listener: () => void): this; + once(event: 'pipe', listener: (src: Readable) => void): this; + once(event: 'readable', listener: () => void): this; + once(event: 'resume', listener: () => void): this; + once(event: 'unpipe', listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'data', listener: (chunk: any) => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'end', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'finish', listener: () => void): this; + prependListener(event: 'pause', listener: () => void): this; + prependListener(event: 'pipe', listener: (src: Readable) => void): this; + prependListener(event: 'readable', listener: () => void): this; + prependListener(event: 'resume', listener: () => void): this; + prependListener(event: 'unpipe', listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'data', listener: (chunk: any) => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'end', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'finish', listener: () => void): this; + prependOnceListener(event: 'pause', listener: () => void): this; + prependOnceListener(event: 'pipe', listener: (src: Readable) => void): this; + prependOnceListener(event: 'readable', listener: () => void): this; + prependOnceListener(event: 'resume', listener: () => void): this; + prependOnceListener(event: 'unpipe', listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: 'close', listener: () => void): this; + removeListener(event: 'data', listener: (chunk: any) => void): this; + removeListener(event: 'drain', listener: () => void): this; + removeListener(event: 'end', listener: () => void): this; + removeListener(event: 'error', listener: (err: Error) => void): this; + removeListener(event: 'finish', listener: () => void): this; + removeListener(event: 'pause', listener: () => void): this; + removeListener(event: 'pipe', listener: (src: Readable) => void): this; + removeListener(event: 'readable', listener: () => void): this; + removeListener(event: 'resume', listener: () => void): this; + removeListener(event: 'unpipe', listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; } type TransformCallback = (error?: Error | null, data?: any) => void; interface TransformOptions extends DuplexOptions { diff --git a/packages/node_modules/@node-red/editor-client/src/types/node/test.d.ts b/packages/node_modules/@node-red/editor-client/src/types/node/test.d.ts index 8189c30dd..27e4d1530 100644 --- a/packages/node_modules/@node-red/editor-client/src/types/node/test.d.ts +++ b/packages/node_modules/@node-red/editor-client/src/types/node/test.d.ts @@ -45,7 +45,7 @@ declare module 'node:test' { function test(options?: TestOptions, fn?: TestFn): Promise; function test(fn?: TestFn): Promise; - /** + /* * @since v16.17.0 * @param name The name of the suite, which is displayed when reporting suite results. * Default: The `name` property of fn, or `''` if `fn` does not have a name. @@ -57,7 +57,7 @@ declare module 'node:test' { function describe(options?: TestOptions, fn?: SuiteFn): void; function describe(fn?: SuiteFn): void; - /** + /* * @since v16.17.0 * @param name The name of the test, which is displayed when reporting test results. * Default: The `name` property of fn, or `''` if `fn` does not have a name. 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 f41f6d7c3..cfb0d0cc0 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 po("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(s.isErrorNoTelemetry(e))throw new s(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 o||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:s.isErrorNoTelemetry(e)}}return e}const i="Canceled";class o extends Error{constructor(){super(i),this.name=this.message}}Error;class s extends Error{constructor(e){super(e),this.name="CodeExpectedError"}static fromError(e){if(e instanceof s)return e;const t=new s;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){const t=this;let n,r=!1;return function(){return r||(r=!0,n=e.apply(t,arguments)),n}}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.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)for(const e of t)yield e},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}]}}(c||(c={}));var h;function d(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 p(e){const t={dispose:l((()=>{e()}))};return t}class u{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(0!==this._toDispose.size)try{d(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 this._isDisposed?u.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}}u.DISABLE_DISPOSED_WARNING=!1;class m{constructor(){this._store=new u,this._store}dispose(){this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}}m.None=Object.freeze({dispose(){}});class f{constructor(){this.dispose=()=>{},this.unset=()=>{},this.isset=()=>!1}set(e){let t=e;return this.unset=()=>t=void 0,this.isset=()=>void 0!==t,this.dispose=()=>{t&&(t(),t=void 0)},this}}Symbol.iterator;class g{constructor(e){this.element=e,this.next=g.Undefined,this.prev=g.Undefined}}g.Undefined=new g(void 0);class b{constructor(){this._first=g.Undefined,this._last=g.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===g.Undefined}clear(){let e=this._first;for(;e!==g.Undefined;){const t=e.next;e.prev=g.Undefined,e.next=g.Undefined,e=t}this._first=g.Undefined,this._last=g.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const n=new g(e);if(this._first===g.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!==g.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==g.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==g.Undefined&&e.next!==g.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===g.Undefined&&e.next===g.Undefined?(this._first=g.Undefined,this._last=g.Undefined):e.next===g.Undefined?(this._last=this._last.prev,this._last.next=g.Undefined):e.prev===g.Undefined&&(this._first=this._first.next,this._first.prev=g.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==g.Undefined;)yield e.element,e=e.next}}function v(e,t){let n;return n=0===t.length?e:e.replace(/\{(\d+)\}/g,(function(e,n){const r=n[0];return void 0!==t[r]?t[r]:e})),n}const y="en";let w,x,S=!1,k=!1,C=!1,_=!1,E=!1,F=!1,R=!1,N=!1,D=!1,T=!1,A=null,z=null;const I="object"==typeof self?self:"object"==typeof e.g?e.g:{};let M;void 0!==I.vscode&&void 0!==I.vscode.process?M=I.vscode.process:"undefined"!=typeof process&&(M=process);const P="string"==typeof(null===(h=null==M?void 0:M.versions)||void 0===h?void 0:h.electron),L=P&&"renderer"===(null==M?void 0:M.type);if("object"!=typeof navigator||L)if("object"==typeof M){S="win32"===M.platform,k="darwin"===M.platform,C="linux"===M.platform,_=C&&!!M.env.SNAP&&!!M.env.SNAP_REVISION,R=P,D=!!M.env.CI||!!M.env.BUILD_ARTIFACTSTAGINGDIRECTORY,w=y,A=y;const e=M.env.VSCODE_NLS_CONFIG;if(e)try{const t=JSON.parse(e),n=t.availableLanguages["*"];w=t.locale,A=n||y,z=t._translationsConfigFile}catch(e){}E=!0}else console.error("Unable to resolve platform.");else x=navigator.userAgent,S=x.indexOf("Windows")>=0,k=x.indexOf("Macintosh")>=0,N=(x.indexOf("Macintosh")>=0||x.indexOf("iPad")>=0||x.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,C=x.indexOf("Linux")>=0,T=(null==x?void 0:x.indexOf("Mobi"))>=0,F=!0,function(e,t,n){const r="object"==typeof t?t.key:t;let i=(((self.MonacoLocale||{}||{}).data||{})[e]||{})[r];i||(i=n);const o=[];for(let e=3;e{if(K){const e=[];I.addEventListener("message",(t=>{if(t.data&&t.data.vscodeScheduleAsyncWork)for(let n=0,r=e.length;n=0),j=(V&&V.indexOf("Firefox"),!B&&V&&V.indexOf("Safari"),V&&V.indexOf("Edg/"),V&&V.indexOf("Android"),I.performance&&"function"==typeof I.performance.now);class q{static create(e=!0){return new q(e)}constructor(e){this._highResolution=j&&e,this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}_now(){return this._highResolution?I.performance.now():Date.now()}}var $,H;!function(e){function t(e){return(t,n=null,r)=>{let i,o=!1;return i=e((e=>{if(!o)return i?i.dispose():o=!0,t.call(n,e)}),null,r),o&&i.dispose(),i}}function n(e,t,n){return s(((n,r=null,i)=>e((e=>n.call(r,t(e))),null,i)),n)}function r(e,t,n){return s(((n,r=null,i)=>e((e=>{t(e),n.call(r,e)}),null,i)),n)}function i(e,t,n){return s(((n,r=null,i)=>e((e=>t(e)&&n.call(r,e)),null,i)),n)}function o(e,t,r,i){let o=r;return n(e,(e=>(o=t(o,e),o)),i)}function s(e,t){let n;const r=new Z({onWillAddFirstListener(){n=e(r.fire,r)},onDidRemoveLastListener(){null==n||n.dispose()}});return null==t||t.add(r),r.event}function a(e,t,n=100,r=!1,i=!1,o,s){let a,l,c,h,d=0;const p=new Z({leakWarningThreshold:o,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==s||s.add(p),p.event}function l(e,t=((e,t)=>e===t),n){let r,o=!0;return i(e,(e=>{const n=o||!t(e,r);return o=!1,r=e,n}),n)}e.None=()=>m.None,e.defer=function(e,t){return a(e,(()=>{}),0,void 0,!0,void 0,t)},e.once=t,e.map=n,e.forEach=r,e.filter=i,e.signal=function(e){return e},e.any=function(...e){return(t,n=null,r)=>function(...e){return p((()=>d(e)))}(...e.map((e=>e((e=>t.call(n,e)),null,r))))},e.reduce=o,e.debounce=a,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=l,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=[]){let r=n.slice(),i=e((e=>{r?r.push(e):s.fire(e)}));const o=()=>{null==r||r.forEach((e=>s.fire(e))),r=null},s=new Z({onWillAddFirstListener(){i||(i=e((e=>s.fire(e))))},onDidAddFirstListener(){r&&(t?setTimeout(o):o())},onDidRemoveLastListener(){i&&i.dispose(),i=null}});return s.event};class c{constructor(e){this.event=e,this.disposables=new u}map(e){return new c(n(this.event,e,this.disposables))}forEach(e){return new c(r(this.event,e,this.disposables))}filter(e){return new c(i(this.event,e,this.disposables))}reduce(e,t){return new c(o(this.event,e,t,this.disposables))}latch(){return new c(l(this.event,void 0,this.disposables))}debounce(e,t=100,n=!1,r=!1,i){return new c(a(this.event,e,t,n,r,i,this.disposables))}on(e,t,n){return this.event(e,t,n)}once(e,n,r){return t(this.event)(e,n,r)}dispose(){this.disposables.dispose()}}e.chain=function(e){return new c(e)},e.fromNodeEventEmitter=function(e,t,n=(e=>e)){const r=(...e)=>i.fire(n(...e)),i=new Z({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 Z({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.runAndSubscribe=function(e,t){return t(void 0),e((e=>t(e)))},e.runAndSubscribeWithStore=function(e,t){let n=null;function r(e){null==n||n.dispose(),n=new u,t(e,n)}r(void 0);const i=e((e=>r(e)));return p((()=>{i.dispose(),null==n||n.dispose()}))};class h{constructor(e,t){this.obs=e,this._counter=0,this._hasChanged=!1;const n={onWillAddFirstListener:()=>{e.addObserver(this)},onDidRemoveLastListener:()=>{e.removeObserver(this)}};this.emitter=new Z(n),t&&t.add(this.emitter)}beginUpdate(e){this._counter++}handleChange(e,t){this._hasChanged=!0}endUpdate(e){0==--this._counter&&this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this.obs.get()))}}e.fromObservable=function(e,t){return new h(e,t).emitter.event}}($||($={}));class G{constructor(e){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${e}_${G._idPool++}`,G.all.add(this)}start(e){this._stopWatch=new q(!0),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}}}G.all=new Set,G._idPool=0;class J{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 X{static create(){var e;return new X(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 Y{constructor(e,t,n){this.callback=e,this.callbackThis=t,this.stack=n,this.subscription=new f}invoke(e){this.callback.call(this.callbackThis,e)}}class Z{constructor(e){var t,n,r,i,o;this._disposed=!1,this._options=e,this._leakageMon=(null===(t=this._options)||void 0===t?void 0:t.leakWarningThreshold)?new J(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 G(this._options._profName):void 0,this._deliveryQueue=null===(o=this._options)||void 0===o?void 0:o.deliveryQueue}dispose(){var e,t,n,r;this._disposed||(this._disposed=!0,this._listeners&&this._listeners.clear(),null===(e=this._deliveryQueue)||void 0===e||e.clear(this),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(){return this._event||(this._event=(e,t,n)=>{var r,i,o;if(this._listeners||(this._listeners=new b),this._leakageMon&&this._listeners.size>3*this._leakageMon.threshold)return console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`),m.None;const s=this._listeners.isEmpty();let a,l;s&&(null===(r=this._options)||void 0===r?void 0:r.onWillAddFirstListener)&&this._options.onWillAddFirstListener(this),this._leakageMon&&this._listeners.size>=Math.ceil(.2*this._leakageMon.threshold)&&(l=X.create(),a=this._leakageMon.check(l,this._listeners.size+1));const c=new Y(e,t,l),h=this._listeners.push(c);s&&(null===(i=this._options)||void 0===i?void 0:i.onDidAddFirstListener)&&this._options.onDidAddFirstListener(this),(null===(o=this._options)||void 0===o?void 0:o.onDidAddListener)&&this._options.onDidAddListener(this,e,t);const d=c.subscription.set((()=>{var e,t;null==a||a(),!this._disposed&&(null===(t=null===(e=this._options)||void 0===e?void 0:e.onWillRemoveListener)||void 0===t||t.call(e,this),h(),this._options&&this._options.onDidRemoveLastListener)&&(this._listeners&&!this._listeners.isEmpty()||this._options.onDidRemoveLastListener(this))}));return n instanceof u?n.add(d):Array.isArray(n)&&n.push(d),d}),this._event}fire(e){var t,n;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new Q);for(const t of this._listeners)this._deliveryQueue.push(this,t,e);null===(t=this._perfMon)||void 0===t||t.start(this._deliveryQueue.size),this._deliveryQueue.deliver(),null===(n=this._perfMon)||void 0===n||n.stop()}}hasListeners(){return!!this._listeners&&!this._listeners.isEmpty()}}class Q extends class{constructor(){this._queue=new b}get size(){return this._queue.size}push(e,t,n){this._queue.push(new ee(e,t,n))}clear(e){const t=new b;for(const n of this._queue)n.emitter!==e&&t.push(n);this._queue=t}deliver(){for(;this._queue.size>0;){const e=this._queue.shift();try{e.listener.invoke(e.event)}catch(e){n(e)}}}}{clear(e){this._queue.clear()}}class ee{constructor(e,t,n){this.emitter=e,this.listener=t,this.event=n}}function te(e){const t=[];for(const n of function(e){let t=[],n=Object.getPrototypeOf(e);for(;Object.prototype!==n;)t=t.concat(Object.getOwnPropertyNames(n)),n=Object.getPrototypeOf(n);return t}(e))"function"==typeof e[n]&&t.push(n);return t}Object.prototype.hasOwnProperty;class ne{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}}function re(e){return e>=65&&e<=90}function ie(e){return 55296<=e&&e<=56319}function oe(e){return 56320<=e&&e<=57343}function se(e,t){return t-56320+(e-55296<<10)+65536}function ae(e,t,n){const r=e.charCodeAt(n);if(ie(r)&&n+1t[3*r+1]))return t[3*r+2];r=2*r+1}return 0}}ce._INSTANCE=null;class he{static getInstance(e){return he.cache.get(Array.from(e))}static getLocales(){return he._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())}}H=he,he.ambiguousCharacterData=new ne((()=>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],"_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]}'))),he.cache=new class{constructor(e){this.fn=e,this.lastCache=void 0,this.lastArgKey=void 0}get(e){const t=JSON.stringify(e);return this.lastArgKey!==t&&(this.lastArgKey=t,this.lastCache=this.fn(e)),this.lastCache}}((e=>{function t(e){const t=new Map;for(let n=0;n!e.startsWith("_")&&e in r));0===o.length&&(o=["_default"]);for(const e of o)i=n(i,t(r[e]));const s=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 he(s)})),he._locales=new ne((()=>Object.keys(he.ambiguousCharacterData.value).filter((e=>!e.startsWith("_")))));class de{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(de.getRawData())),this._data}static isInvisibleCharacter(e){return de.getData().has(e)}static get codePoints(){return de.getData()}}de._data=void 0;let pe;class ue{constructor(e,t,n,r){this.vsWorker=e,this.req=t,this.method=n,this.args=r,this.type=0}}class me{constructor(e,t,n,r){this.vsWorker=e,this.seq=t,this.res=n,this.err=r,this.type=1}}class fe{constructor(e,t,n,r){this.vsWorker=e,this.req=t,this.eventName=n,this.arg=r,this.type=2}}class ge{constructor(e,t,n){this.vsWorker=e,this.req=t,this.event=n,this.type=3}}class be{constructor(e,t){this.vsWorker=e,this.req=t,this.type=4}}class ve{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 ue(this._workerId,n,e,t))}))}listen(e,t){let n=null;const r=new Z({onWillAddFirstListener:()=>{n=String(++this._lastSentReq),this._pendingEmitters.set(n,r),this._send(new fe(this._workerId,n,e,t))},onDidRemoveLastListener:()=>{this._pendingEmitters.delete(n),this._send(new be(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 me(this._workerId,t,e,void 0))}),(e=>{e.detail instanceof Error&&(e.detail=r(e.detail)),this._send(new me(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 ge(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(we(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(ye(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)},o={};for(const t of e)we(t)?o[t]=i(t):ye(t)?o[t]=n(t,void 0):o[t]=r(t);return o}(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(te(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!==typeof t.trustedTypesPolicy&&delete t.trustedTypesPolicy,t.catchError=!0,I.require.config(t)),new Promise(((e,t)=>{(0,I.require)([n],(n=>{this._requestHandler=n.create(i),this._requestHandler?e(te(this._requestHandler)):t(new Error("No RequestHandler!"))}),t)})))}}class Se{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 ke(e,t){return(t<<5)-t+e|0}function Ce(e,t){t=ke(149417,t);for(let n=0,r=e.length;n>>r)>>>0}function Ee(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 Re{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,o=this._buffLen,s=this._leftoverHighSurrogate;for(0!==s?(r=s,i=-1,s=0):(r=e.charCodeAt(0),i=0);;){let a=r;if(ie(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()),Fe(this._h0)+Fe(this._h1)+Fe(this._h2)+Fe(this._h3)+Fe(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,Ee(this._buff,this._buffLen),this._buffLen>56&&(this._step(),Ee(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=Re._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,_e(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,o=this._h0,s=this._h1,a=this._h2,l=this._h3,c=this._h4;for(let t=0;t<80;t++)t<20?(n=s&a|~s&l,r=1518500249):t<40?(n=s^a^l,r=1859775393):t<60?(n=s&a|s&l|a&l,r=2400959708):(n=s^a^l,r=3395469782),i=_e(o,5)+n+c+r+e.getUint32(4*t,!1)&4294967295,c=l,l=a,a=_e(s,30),s=o,o=i;this._h0=this._h0+o&4294967295,this._h1=this._h1+s&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+c&4294967295}}Re._bigBlock32=new DataView(new ArrayBuffer(320));class Ne{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 Se(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 Ie{constructor(e,t,n=null){this.ContinueProcessingPredicate=n,this._originalSequence=e,this._modifiedSequence=t;const[r,i,o]=Ie._getElements(e),[s,a,l]=Ie._getElements(t);this._hasStrings=o&&l,this._originalStringElements=r,this._originalElementsOrHash=i,this._modifiedStringElements=s,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(Ie._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?(Te.Assert(e===t+1,"originalStart should only be one more than originalEnd"),i=[new Se(e,0,n,r-n+1)]):e<=t?(Te.Assert(n===r+1,"modifiedStart should only be one more than modifiedEnd"),i=[new Se(e,t-e+1,n,0)]):(Te.Assert(e===t+1,"originalStart should only be one more than originalEnd"),Te.Assert(n===r+1,"modifiedStart should only be one more than modifiedEnd"),i=[]),i}const o=[0],s=[0],a=this.ComputeRecursionPoint(e,t,n,r,o,s,i),l=o[0],c=s[0];if(null!==a)return a;if(!i[0]){const o=this.ComputeDiffRecursive(e,l,n,c,i);let s=[];return s=i[0]?[new Se(l+1,t-(l+1)+1,c+1,r-(c+1)+1)]:this.ComputeDiffRecursive(l+1,t,c+1,r,i),this.ConcatenateChanges(o,s)}return[new Se(e,t-e+1,n,r-n+1)]}WALKTRACE(e,t,n,r,i,o,s,a,l,c,h,d,p,u,m,f,g,b){let v=null,y=null,w=new ze,x=t,S=n,k=p[0]-f[0]-r,C=-1073741824,_=this.m_forwardHistory.length-1;do{const t=k+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 Se(e,d-e+1,t,m-t+1)]}else{w=new ze,x=o,S=s,k=p[0]-f[0]-a,C=1073741824,_=g?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=k+i;e===x||e=c[e+1]?(u=(h=c[e+1]-1)-k-a,h>C&&w.MarkNextChange(),C=h+1,w.AddOriginalElement(h+1,u+1),k=e+1-i):(u=(h=c[e-1])-k-a,h>C&&w.MarkNextChange(),C=h,w.AddModifiedElement(h+1,u+1),k=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,o,s){let a=0,l=0,c=0,h=0,d=0,p=0;e--,n--,i[0]=0,o[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,s[0]=!1;for(let S=1;S<=u/2+1;S++){let u=0,k=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+k&&(u=a,k=l),!x&&Math.abs(e-v)<=S-1&&a>=g[e])return i[0]=a,o[0]=l,n<=g[e]&&S<=1448?this.WALKTRACE(b,c,h,y,v,d,p,w,f,g,a,t,i,l,r,o,x,s):null}const C=(u-e+(k-n)-S)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(u,C))return s[0]=!0,i[0]=u,o[0]=k,C>0&&S<=1448?this.WALKTRACE(b,c,h,y,v,d,p,w,f,g,a,t,i,l,r,o,x,s):(e++,n++,[new Se(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=g[u+1]?g[u+1]-1:g[u-1],l=a-(u-v)-w;const m=a;for(;a>e&&l>n&&this.ElementsAreEqual(a,l);)a--,l--;if(g[u]=a,x&&Math.abs(u-b)<=S&&a<=f[u])return i[0]=a,o[0]=l,m>=f[u]&&S<=1448?this.WALKTRACE(b,c,h,y,v,d,p,w,f,g,a,t,i,l,r,o,x,s):null}if(S<=1447){let e=new Int32Array(h-c+2);e[0]=b-c+1,Ae.Copy2(f,c,e,1,h-c+1),this.m_forwardHistory.push(e),e=new Int32Array(p-d+2),e[0]=v-d+1,Ae.Copy2(g,d,e,1,p-d+1),this.m_reverseHistory.push(e)}}return this.WALKTRACE(b,c,h,y,v,d,p,w,f,g,a,t,i,l,r,o,x,s)}PrettifyChanges(e){for(let t=0;t0,s=n.modifiedLength>0;for(;n.originalStart+n.originalLength=0;t--){const n=e[t];let r=0,i=0;if(t>0){const n=e[t-1];r=n.originalStart+n.originalLength,i=n.modifiedStart+n.modifiedLength}const o=n.originalLength>0,s=n.modifiedLength>0;let a=0,l=this._boundaryScore(n.originalStart,n.originalLength,n.modifiedStart,n.modifiedLength);for(let e=1;;e++){const t=n.originalStart-e,c=n.modifiedStart-e;if(tl&&(l=h,a=e)}n.originalStart-=a,n.modifiedStart-=a;const c=[null];t>0&&this.ChangesOverlap(e[t-1],e[t],c)&&(e[t-1]=c[0],e.splice(t,1),t++)}if(this._hasStrings)for(let t=1,n=e.length;t0&&n>a&&(a=n,l=t,c=e)}return a>0?[l,c]:null}_contiguousSequenceScore(e,t,n){let r=0;for(let i=0;i=this._originalElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,t){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(t>0){const n=e+t;if(this._OriginalIsBoundary(n-1)||this._OriginalIsBoundary(n))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,t){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(t>0){const n=e+t;if(this._ModifiedIsBoundary(n-1)||this._ModifiedIsBoundary(n))return!0}return!1}_boundaryScore(e,t,n,r){return(this._OriginalRegionIsBoundary(e,t)?1:0)+(this._ModifiedRegionIsBoundary(n,r)?1:0)}ConcatenateChanges(e,t){const n=[];if(0===e.length||0===t.length)return t.length>0?t:e;if(this.ChangesOverlap(e[e.length-1],t[0],n)){const r=new Array(e.length+t.length-1);return Ae.Copy(e,0,r,0,e.length-1),r[e.length-1]=n[0],Ae.Copy(t,1,r,e.length,t.length-1),r}{const n=new Array(e.length+t.length);return Ae.Copy(e,0,n,0,e.length),Ae.Copy(t,0,n,e.length,t.length),n}}ChangesOverlap(e,t,n){if(Te.Assert(e.originalStart<=t.originalStart,"Left change is not less than or equal to right change"),Te.Assert(e.modifiedStart<=t.modifiedStart,"Left change is not less than or equal to right change"),e.originalStart+e.originalLength>=t.originalStart||e.modifiedStart+e.modifiedLength>=t.modifiedStart){const r=e.originalStart;let i=e.originalLength;const o=e.modifiedStart;let s=e.modifiedLength;return e.originalStart+e.originalLength>=t.originalStart&&(i=t.originalStart+t.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=t.modifiedStart&&(s=t.modifiedStart+t.modifiedLength-e.modifiedStart),n[0]=new Se(r,i,o,s),!0}return n[0]=null,!1}ClipDiagonalBound(e,t,n,r){if(e>=0&&ee.cwd()}}else pe="undefined"!=typeof process?{get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd:()=>process.env.VSCODE_CWD||process.cwd()}:{get platform(){return W?"win32":U?"darwin":"linux"},get arch(){},get env(){return{}},cwd:()=>"/"};const Me=pe.cwd,Pe=pe.env,Le=pe.platform,Oe=46,We=47,Ue=92,Ve=58;class Ke extends Error{constructor(e,t,n){let r;"string"==typeof t&&0===t.indexOf("not ")?(r="must not be",t=t.replace(/^not /,"")):r="must be";const i=-1!==e.indexOf(".")?"property":"argument";let o=`The "${e}" ${i} ${r} of type ${t}`;o+=". Received type "+typeof n,super(o),this.code="ERR_INVALID_ARG_TYPE"}}function Be(e,t){if("string"!=typeof e)throw new Ke(t,"string",e)}const je="win32"===Le;function qe(e){return e===We||e===Ue}function $e(e){return e===We}function He(e){return e>=65&&e<=90||e>=97&&e<=122}function Ge(e,t,n,r){let i="",o=0,s=-1,a=0,l=0;for(let c=0;c<=e.length;++c){if(c2){const e=i.lastIndexOf(n);-1===e?(i="",o=0):(i=i.slice(0,e),o=i.length-1-i.lastIndexOf(n)),s=c,a=0;continue}if(0!==i.length){i="",o=0,s=c,a=0;continue}}t&&(i+=i.length>0?`${n}..`:"..",o=2)}else i.length>0?i+=`${n}${e.slice(s+1,c)}`:i=e.slice(s+1,c),o=c-s-1;s=c,a=0}else l===Oe&&-1!==a?++a:a=-1}return i}function Je(e,t){!function(e,t){if(null===e||"object"!=typeof e)throw new Ke("pathObject","Object",e)}(t);const n=t.dir||t.root,r=t.base||`${t.name||""}${t.ext||""}`;return n?n===t.root?`${n}${r}`:`${n}${e}${r}`:r}const Xe={resolve(...e){let t="",n="",r=!1;for(let i=e.length-1;i>=-1;i--){let o;if(i>=0){if(o=e[i],Be(o,"path"),0===o.length)continue}else 0===t.length?o=Me():(o=Pe[`=${t}`]||Me(),(void 0===o||o.slice(0,2).toLowerCase()!==t.toLowerCase()&&o.charCodeAt(2)===Ue)&&(o=`${t}\\`));const s=o.length;let a=0,l="",c=!1;const h=o.charCodeAt(0);if(1===s)qe(h)&&(a=1,c=!0);else if(qe(h))if(c=!0,qe(o.charCodeAt(1))){let e=2,t=e;for(;e2&&qe(o.charCodeAt(2))&&(c=!0,a=3));if(l.length>0)if(t.length>0){if(l.toLowerCase()!==t.toLowerCase())continue}else t=l;if(r){if(t.length>0)break}else if(n=`${o.slice(a)}\\${n}`,r=c,c&&t.length>0)break}return n=Ge(n,!r,"\\",qe),r?`${t}\\${n}`:`${t}${n}`||"."},normalize(e){Be(e,"path");const t=e.length;if(0===t)return".";let n,r=0,i=!1;const o=e.charCodeAt(0);if(1===t)return $e(o)?"\\":e;if(qe(o))if(i=!0,qe(e.charCodeAt(1))){let i=2,o=i;for(;i2&&qe(e.charCodeAt(2))&&(i=!0,r=3));let s=r0&&qe(e.charCodeAt(t-1))&&(s+="\\"),void 0===n?i?`\\${s}`:s:i?`${n}\\${s}`:`${n}${s}`},isAbsolute(e){Be(e,"path");const t=e.length;if(0===t)return!1;const n=e.charCodeAt(0);return qe(n)||t>2&&He(n)&&e.charCodeAt(1)===Ve&&qe(e.charCodeAt(2))},join(...e){if(0===e.length)return".";let t,n;for(let r=0;r0&&(void 0===t?t=n=i:t+=`\\${i}`)}if(void 0===t)return".";let r=!0,i=0;if("string"==typeof n&&qe(n.charCodeAt(0))){++i;const e=n.length;e>1&&qe(n.charCodeAt(1))&&(++i,e>2&&(qe(n.charCodeAt(2))?++i:r=!1))}if(r){for(;i=2&&(t=`\\${t.slice(i)}`)}return Xe.normalize(t)},relative(e,t){if(Be(e,"from"),Be(t,"to"),e===t)return"";const n=Xe.resolve(e),r=Xe.resolve(t);if(n===r)return"";if((e=n.toLowerCase())===(t=r.toLowerCase()))return"";let i=0;for(;ii&&e.charCodeAt(o-1)===Ue;)o--;const s=o-i;let a=0;for(;aa&&t.charCodeAt(l-1)===Ue;)l--;const c=l-a,h=sh){if(t.charCodeAt(a+p)===Ue)return r.slice(a+p+1);if(2===p)return r.slice(a+p)}s>h&&(e.charCodeAt(i+p)===Ue?d=p:2===p&&(d=3)),-1===d&&(d=0)}let u="";for(p=i+d+1;p<=o;++p)p!==o&&e.charCodeAt(p)!==Ue||(u+=0===u.length?"..":"\\..");return a+=d,u.length>0?`${u}${r.slice(a,l)}`:(r.charCodeAt(a)===Ue&&++a,r.slice(a,l))},toNamespacedPath(e){if("string"!=typeof e||0===e.length)return e;const t=Xe.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===Ue){if(t.charCodeAt(1)===Ue){const e=t.charCodeAt(2);if(63!==e&&e!==Oe)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(He(t.charCodeAt(0))&&t.charCodeAt(1)===Ve&&t.charCodeAt(2)===Ue)return`\\\\?\\${t}`;return e},dirname(e){Be(e,"path");const t=e.length;if(0===t)return".";let n=-1,r=0;const i=e.charCodeAt(0);if(1===t)return qe(i)?e:".";if(qe(i)){if(n=r=1,qe(e.charCodeAt(1))){let i=2,o=i;for(;i2&&qe(e.charCodeAt(2))?3:2,r=n);let o=-1,s=!0;for(let n=t-1;n>=r;--n)if(qe(e.charCodeAt(n))){if(!s){o=n;break}}else s=!1;if(-1===o){if(-1===n)return".";o=n}return e.slice(0,o)},basename(e,t){void 0!==t&&Be(t,"ext"),Be(e,"path");let n,r=0,i=-1,o=!0;if(e.length>=2&&He(e.charCodeAt(0))&&e.charCodeAt(1)===Ve&&(r=2),void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let s=t.length-1,a=-1;for(n=e.length-1;n>=r;--n){const l=e.charCodeAt(n);if(qe(l)){if(!o){r=n+1;break}}else-1===a&&(o=!1,a=n+1),s>=0&&(l===t.charCodeAt(s)?-1==--s&&(i=n):(s=-1,i=a))}return r===i?i=a:-1===i&&(i=e.length),e.slice(r,i)}for(n=e.length-1;n>=r;--n)if(qe(e.charCodeAt(n))){if(!o){r=n+1;break}}else-1===i&&(o=!1,i=n+1);return-1===i?"":e.slice(r,i)},extname(e){Be(e,"path");let t=0,n=-1,r=0,i=-1,o=!0,s=0;e.length>=2&&e.charCodeAt(1)===Ve&&He(e.charCodeAt(0))&&(t=r=2);for(let a=e.length-1;a>=t;--a){const t=e.charCodeAt(a);if(qe(t)){if(!o){r=a+1;break}}else-1===i&&(o=!1,i=a+1),t===Oe?-1===n?n=a:1!==s&&(s=1):-1!==n&&(s=-1)}return-1===n||-1===i||0===s||1===s&&n===i-1&&n===r+1?"":e.slice(n,i)},format:Je.bind(null,"\\"),parse(e){Be(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const n=e.length;let r=0,i=e.charCodeAt(0);if(1===n)return qe(i)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(qe(i)){if(r=1,qe(e.charCodeAt(1))){let t=2,i=t;for(;t0&&(t.root=e.slice(0,r));let o=-1,s=r,a=-1,l=!0,c=e.length-1,h=0;for(;c>=r;--c)if(i=e.charCodeAt(c),qe(i)){if(!l){s=c+1;break}}else-1===a&&(l=!1,a=c+1),i===Oe?-1===o?o=c:1!==h&&(h=1):-1!==o&&(h=-1);return-1!==a&&(-1===o||0===h||1===h&&o===a-1&&o===s+1?t.base=t.name=e.slice(s,a):(t.name=e.slice(s,o),t.base=e.slice(s,a),t.ext=e.slice(o,a))),t.dir=s>0&&s!==r?e.slice(0,s-1):t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},Ye=(()=>{if(je){const e=/\\/g;return()=>{const t=Me().replace(e,"/");return t.slice(t.indexOf("/"))}}return()=>Me()})(),Ze={resolve(...e){let t="",n=!1;for(let r=e.length-1;r>=-1&&!n;r--){const i=r>=0?e[r]:Ye();Be(i,"path"),0!==i.length&&(t=`${i}/${t}`,n=i.charCodeAt(0)===We)}return t=Ge(t,!n,"/",$e),n?`/${t}`:t.length>0?t:"."},normalize(e){if(Be(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===We,n=e.charCodeAt(e.length-1)===We;return 0===(e=Ge(e,!t,"/",$e)).length?t?"/":n?"./":".":(n&&(e+="/"),t?`/${e}`:e)},isAbsolute:e=>(Be(e,"path"),e.length>0&&e.charCodeAt(0)===We),join(...e){if(0===e.length)return".";let t;for(let n=0;n0&&(void 0===t?t=r:t+=`/${r}`)}return void 0===t?".":Ze.normalize(t)},relative(e,t){if(Be(e,"from"),Be(t,"to"),e===t)return"";if((e=Ze.resolve(e))===(t=Ze.resolve(t)))return"";const n=e.length,r=n-1,i=t.length-1,o=ro){if(t.charCodeAt(1+a)===We)return t.slice(1+a+1);if(0===a)return t.slice(1+a)}else r>o&&(e.charCodeAt(1+a)===We?s=a:0===a&&(s=0));let l="";for(a=1+s+1;a<=n;++a)a!==n&&e.charCodeAt(a)!==We||(l+=0===l.length?"..":"/..");return`${l}${t.slice(1+s)}`},toNamespacedPath:e=>e,dirname(e){if(Be(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===We;let n=-1,r=!0;for(let t=e.length-1;t>=1;--t)if(e.charCodeAt(t)===We){if(!r){n=t;break}}else r=!1;return-1===n?t?"/":".":t&&1===n?"//":e.slice(0,n)},basename(e,t){void 0!==t&&Be(t,"ext"),Be(e,"path");let n,r=0,i=-1,o=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let s=t.length-1,a=-1;for(n=e.length-1;n>=0;--n){const l=e.charCodeAt(n);if(l===We){if(!o){r=n+1;break}}else-1===a&&(o=!1,a=n+1),s>=0&&(l===t.charCodeAt(s)?-1==--s&&(i=n):(s=-1,i=a))}return r===i?i=a:-1===i&&(i=e.length),e.slice(r,i)}for(n=e.length-1;n>=0;--n)if(e.charCodeAt(n)===We){if(!o){r=n+1;break}}else-1===i&&(o=!1,i=n+1);return-1===i?"":e.slice(r,i)},extname(e){Be(e,"path");let t=-1,n=0,r=-1,i=!0,o=0;for(let s=e.length-1;s>=0;--s){const a=e.charCodeAt(s);if(a!==We)-1===r&&(i=!1,r=s+1),a===Oe?-1===t?t=s:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){n=s+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===n+1?"":e.slice(t,r)},format:Je.bind(null,"/"),parse(e){Be(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const n=e.charCodeAt(0)===We;let r;n?(t.root="/",r=1):r=0;let i=-1,o=0,s=-1,a=!0,l=e.length-1,c=0;for(;l>=r;--l){const t=e.charCodeAt(l);if(t!==We)-1===s&&(a=!1,s=l+1),t===Oe?-1===i?i=l:1!==c&&(c=1):-1!==i&&(c=-1);else if(!a){o=l+1;break}}if(-1!==s){const r=0===o&&n?1:o;-1===i||0===c||1===c&&i===s-1&&i===o+1?t.base=t.name=e.slice(r,s):(t.name=e.slice(r,i),t.base=e.slice(r,s),t.ext=e.slice(i,s))}return o>0?t.dir=e.slice(0,o-1):n&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};Ze.win32=Xe.win32=Xe,Ze.posix=Xe.posix=Ze,je?Xe.normalize:Ze.normalize,je?Xe.resolve:Ze.resolve,je?Xe.relative:Ze.relative,je?Xe.dirname:Ze.dirname,je?Xe.basename:Ze.basename,je?Xe.extname:Ze.extname,je?Xe.sep:Ze.sep;const Qe=/^\w[\w\d+.-]*$/,et=/^\//,tt=/^\/\//;function nt(e,t){if(!e.scheme&&t)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${e.authority}", path: "${e.path}", query: "${e.query}", fragment: "${e.fragment}"}`);if(e.scheme&&!Qe.test(e.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(e.path)if(e.authority){if(!et.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(tt.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}const rt="",it="/",ot=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class st{static isUri(e){return e instanceof st||!!e&&"string"==typeof e.authority&&"string"==typeof e.fragment&&"string"==typeof e.path&&"string"==typeof e.query&&"string"==typeof e.scheme&&"string"==typeof e.fsPath&&"function"==typeof e.with&&"function"==typeof e.toString}constructor(e,t,n,r,i,o=!1){"object"==typeof e?(this.scheme=e.scheme||rt,this.authority=e.authority||rt,this.path=e.path||rt,this.query=e.query||rt,this.fragment=e.fragment||rt):(this.scheme=function(e,t){return e||t?e:"file"}(e,o),this.authority=t||rt,this.path=function(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==it&&(t=it+t):t=it}return t}(this.scheme,n||rt),this.query=r||rt,this.fragment=i||rt,nt(this,o))}get fsPath(){return pt(this,!1)}with(e){if(!e)return this;let{scheme:t,authority:n,path:r,query:i,fragment:o}=e;return void 0===t?t=this.scheme:null===t&&(t=rt),void 0===n?n=this.authority:null===n&&(n=rt),void 0===r?r=this.path:null===r&&(r=rt),void 0===i?i=this.query:null===i&&(i=rt),void 0===o?o=this.fragment:null===o&&(o=rt),t===this.scheme&&n===this.authority&&r===this.path&&i===this.query&&o===this.fragment?this:new lt(t,n,r,i,o)}static parse(e,t=!1){const n=ot.exec(e);return n?new lt(n[2]||rt,gt(n[4]||rt),gt(n[5]||rt),gt(n[7]||rt),gt(n[9]||rt),t):new lt(rt,rt,rt,rt,rt)}static file(e){let t=rt;if(W&&(e=e.replace(/\\/g,it)),e[0]===it&&e[1]===it){const n=e.indexOf(it,2);-1===n?(t=e.substring(2),e=it):(t=e.substring(2,n),e=e.substring(n)||it)}return new lt("file",t,e,rt,rt)}static from(e){const t=new lt(e.scheme,e.authority,e.path,e.query,e.fragment);return nt(t,!0),t}static joinPath(e,...t){if(!e.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let n;return n=W&&"file"===e.scheme?st.file(Xe.join(pt(e,!0),...t)).path:Ze.join(e.path,...t),e.with({path:n})}toString(e=!1){return ut(this,e)}toJSON(){return this}static revive(e){if(e){if(e instanceof st)return e;{const t=new lt(e);return t._formatted=e.external,t._fsPath=e._sep===at?e.fsPath:null,t}}return e}}const at=W?1:void 0;class lt extends st{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=pt(this,!1)),this._fsPath}toString(e=!1){return e?ut(this,!0):(this._formatted||(this._formatted=ut(this,!1)),this._formatted)}toJSON(){const e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=at),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e}}const ct={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function ht(e,t,n){let r,i=-1;for(let o=0;o=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||t&&47===s||n&&91===s||n&&93===s||n&&58===s)-1!==i&&(r+=encodeURIComponent(e.substring(i,o)),i=-1),void 0!==r&&(r+=e.charAt(o));else{void 0===r&&(r=e.substr(0,o));const t=ct[s];void 0!==t?(-1!==i&&(r+=encodeURIComponent(e.substring(i,o)),i=-1),r+=t):-1===i&&(i=o)}}return-1!==i&&(r+=encodeURIComponent(e.substring(i))),void 0!==r?r:e}function dt(e){let t;for(let n=0;n1&&"file"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,W&&(n=n.replace(/\//g,"\\")),n}function ut(e,t){const n=t?dt:ht;let r="",{scheme:i,authority:o,path:s,query:a,fragment:l}=e;if(i&&(r+=i,r+=":"),(o||"file"===i)&&(r+=it,r+=it),o){let e=o.indexOf("@");if(-1!==e){const t=o.substr(0,e);o=o.substr(e+1),e=t.lastIndexOf(":"),-1===e?r+=n(t,!1,!1):(r+=n(t.substr(0,e),!1,!1),r+=":",r+=n(t.substr(e+1),!1,!0)),r+="@"}o=o.toLowerCase(),e=o.lastIndexOf(":"),-1===e?r+=n(o,!1,!0):(r+=n(o.substr(0,e),!1,!0),r+=o.substr(e))}if(s){if(s.length>=3&&47===s.charCodeAt(0)&&58===s.charCodeAt(2)){const e=s.charCodeAt(1);e>=65&&e<=90&&(s=`/${String.fromCharCode(e+32)}:${s.substr(3)}`)}else if(s.length>=2&&58===s.charCodeAt(1)){const e=s.charCodeAt(0);e>=65&&e<=90&&(s=`${String.fromCharCode(e+32)}:${s.substr(2)}`)}r+=n(s,!0,!1)}return a&&(r+="?",r+=n(a,!1,!1)),l&&(r+="#",r+=t?l:ht(l,!1,!1)),r}function mt(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+mt(e.substr(3)):e}}const ft=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function gt(e){return e.match(ft)?e.replace(ft,(e=>mt(e))):e}class bt{constructor(e,t){this.lineNumber=e,this.column=t}with(e=this.lineNumber,t=this.column){return e===this.lineNumber&&t===this.column?this:new bt(e,t)}delta(e=0,t=0){return this.with(this.lineNumber+e,this.column+t)}equals(e){return bt.equals(this,e)}static equals(e,t){return!e&&!t||!!e&&!!t&&e.lineNumber===t.lineNumber&&e.column===t.column}isBefore(e){return bt.isBefore(this,e)}static isBefore(e,t){return e.lineNumbern||e===n&&t>r?(this.startLineNumber=n,this.startColumn=r,this.endLineNumber=e,this.endColumn=t):(this.startLineNumber=e,this.startColumn=t,this.endLineNumber=n,this.endColumn=r)}isEmpty(){return vt.isEmpty(this)}static isEmpty(e){return e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn}containsPosition(e){return vt.containsPosition(this,e)}static containsPosition(e,t){return!(t.lineNumbere.endLineNumber||t.lineNumber===e.startLineNumber&&t.columne.endColumn)}static strictContainsPosition(e,t){return!(t.lineNumbere.endLineNumber||t.lineNumber===e.startLineNumber&&t.column<=e.startColumn||t.lineNumber===e.endLineNumber&&t.column>=e.endColumn)}containsRange(e){return vt.containsRange(this,e)}static containsRange(e,t){return!(t.startLineNumbere.endLineNumber||t.endLineNumber>e.endLineNumber||t.startLineNumber===e.startLineNumber&&t.startColumne.endColumn)}strictContainsRange(e){return vt.strictContainsRange(this,e)}static strictContainsRange(e,t){return!(t.startLineNumbere.endLineNumber||t.endLineNumber>e.endLineNumber||t.startLineNumber===e.startLineNumber&&t.startColumn<=e.startColumn||t.endLineNumber===e.endLineNumber&&t.endColumn>=e.endColumn)}plusRange(e){return vt.plusRange(this,e)}static plusRange(e,t){let n,r,i,o;return t.startLineNumbere.endLineNumber?(i=t.endLineNumber,o=t.endColumn):t.endLineNumber===e.endLineNumber?(i=t.endLineNumber,o=Math.max(t.endColumn,e.endColumn)):(i=e.endLineNumber,o=e.endColumn),new vt(n,r,i,o)}intersectRanges(e){return vt.intersectRanges(this,e)}static intersectRanges(e,t){let n=e.startLineNumber,r=e.startColumn,i=e.endLineNumber,o=e.endColumn;const s=t.startLineNumber,a=t.startColumn,l=t.endLineNumber,c=t.endColumn;return nl?(i=l,o=c):i===l&&(o=Math.min(o,c)),n>i||n===i&&r>o?null:new vt(n,r,i,o)}equalsRange(e){return vt.equalsRange(this,e)}static equalsRange(e,t){return!e&&!t||!!e&&!!t&&e.startLineNumber===t.startLineNumber&&e.startColumn===t.startColumn&&e.endLineNumber===t.endLineNumber&&e.endColumn===t.endColumn}getEndPosition(){return vt.getEndPosition(this)}static getEndPosition(e){return new bt(e.endLineNumber,e.endColumn)}getStartPosition(){return vt.getStartPosition(this)}static getStartPosition(e){return new bt(e.startLineNumber,e.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(e,t){return new vt(this.startLineNumber,this.startColumn,e,t)}setStartPosition(e,t){return new vt(e,t,this.endLineNumber,this.endColumn)}collapseToStart(){return vt.collapseToStart(this)}static collapseToStart(e){return new vt(e.startLineNumber,e.startColumn,e.startLineNumber,e.startColumn)}collapseToEnd(){return vt.collapseToEnd(this)}static collapseToEnd(e){return new vt(e.endLineNumber,e.endColumn,e.endLineNumber,e.endColumn)}delta(e){return new vt(this.startLineNumber+e,this.startColumn,this.endLineNumber+e,this.endColumn)}static fromPositions(e,t=e){return new vt(e.lineNumber,e.column,t.lineNumber,t.column)}static lift(e){return e?new vt(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn):null}static isIRange(e){return e&&"number"==typeof e.startLineNumber&&"number"==typeof e.startColumn&&"number"==typeof e.endLineNumber&&"number"==typeof e.endColumn}static areIntersectingOrTouching(e,t){return!(e.endLineNumbere.startLineNumber}toJSON(){return this}}var yt;!function(e){e.isLessThan=function(e){return e<0},e.isGreaterThan=function(e){return e>0},e.isNeitherLessOrGreaterThan=function(e){return 0===e},e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0}(yt||(yt={}));class wt{constructor(e){this.iterate=e}toArray(){const e=[];return this.iterate((t=>(e.push(t),!0))),e}filter(e){return new wt((t=>this.iterate((n=>!e(n)||t(n)))))}map(e){return new wt((t=>this.iterate((n=>t(e(n))))))}findLast(e){let t;return this.iterate((n=>(e(n)&&(t=n),!0))),t}findLastMaxBy(e){let t,n=!0;return this.iterate((r=>((n||yt.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0))),t}}function xt(e){return e<0?0:e>255?255:0|e}function St(e){return e<0?0:e>4294967295?4294967295:0|e}wt.empty=new wt((e=>{}));class kt{constructor(e){this.values=e,this.prefixSum=new Uint32Array(e.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(e,t){e=St(e);const n=this.values,r=this.prefixSum,i=t.length;return 0!==i&&(this.values=new Uint32Array(n.length+i),this.values.set(n.subarray(0,e),0),this.values.set(n.subarray(e),e+i),this.values.set(t,e),e-1=0&&this.prefixSum.set(r.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}setValue(e,t){return e=St(e),t=St(t),this.values[e]!==t&&(this.values[e]=t,e-1=n.length)return!1;const i=n.length-e;return t>=i&&(t=i),0!==t&&(this.values=new Uint32Array(n.length-t),this.values.set(n.subarray(0,e),0),this.values.set(n.subarray(e+t),e),this.prefixSum=new Uint32Array(this.values.length),e-1=0&&this.prefixSum.set(r.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalSum(){return 0===this.values.length?0:this._getPrefixSum(this.values.length-1)}getPrefixSum(e){return e<0?0:(e=St(e),this._getPrefixSum(e))}_getPrefixSum(e){if(e<=this.prefixSumValidIndex[0])return this.prefixSum[e];let t=this.prefixSumValidIndex[0]+1;0===t&&(this.prefixSum[0]=this.values[0],t++),e>=this.values.length&&(e=this.values.length-1);for(let n=t;n<=e;n++)this.prefixSum[n]=this.prefixSum[n-1]+this.values[n];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],e),this.prefixSum[e]}getIndexOf(e){e=Math.floor(e),this.getTotalSum();let t=0,n=this.values.length-1,r=0,i=0,o=0;for(;t<=n;)if(r=t+(n-t)/2|0,i=this.prefixSum[r],o=i-this.values[r],e=i))break;t=r+1}return new Ct(r,e-o)}}class Ct{constructor(e,t){this.index=e,this.remainder=t,this._prefixSumIndexOfResultBrand=void 0,this.index=e,this.remainder=t}}const _t=function(e=""){let t="(-?\\d*\\.\\d\\w*)|([^";for(const n of"`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?")e.indexOf(n)>=0||(t+="\\"+n);return t+="\\s]+)",new RegExp(t,"g")}(),Et=new b;function Ft(e,t,n,r,i){if(i||(i=c.first(Et)),n.length>i.maxLen){let o=e-i.maxLen/2;return o<0?o=0:r+=o,Ft(e,t,n=n.substring(o,e+i.maxLen/2),r,i)}const o=Date.now(),s=e-1-r;let a=-1,l=null;for(let e=1;!(Date.now()-o>=i.timeBudget);e++){const r=s-i.windowSize*e;t.lastIndex=Math.max(0,r);const o=Rt(t,n,s,a);if(!o&&l)break;if(l=o,r<=0)break;a=r}if(l){const e={word:l[0],startColumn:r+1+l.index,endColumn:r+1+l.index+l[0].length};return t.lastIndex=0,e}return null}function Rt(e,t,n,r){let i;for(;i=e.exec(t);){const t=i.index||0;if(t<=n&&e.lastIndex>=n)return i;if(r>0&&t>r)return null}return null}Et.unshift({maxLen:1e3,windowSize:15,timeBudget:150});class Nt{constructor(e){const t=xt(e);this._defaultValue=t,this._asciiMap=Nt._createAsciiMap(t),this._map=new Map}static _createAsciiMap(e){const t=new Uint8Array(256);return t.fill(e),t}set(e,t){const n=xt(t);e>=0&&e<256?this._asciiMap[e]=n:this._map.set(e,n)}get(e){return e>=0&&e<256?this._asciiMap[e]:this._map.get(e)||this._defaultValue}clear(){this._asciiMap.fill(this._defaultValue),this._map.clear()}}class Dt{constructor(e,t,n){const r=new Uint8Array(e*t);for(let i=0,o=e*t;it&&(t=o),i>n&&(n=i),s>n&&(n=s)}t++,n++;const r=new Dt(n,t,0);for(let t=0,n=e.length;t=this._maxCharCode?0:this._states.get(e,t)}}let At=null,zt=null;class It{static _createLink(e,t,n,r,i){let o=i-1;do{const n=t.charCodeAt(o);if(2!==e.get(n))break;o--}while(o>r);if(r>0){const e=t.charCodeAt(r-1),n=t.charCodeAt(o);(40===e&&41===n||91===e&&93===n||123===e&&125===n)&&o--}return{range:{startLineNumber:n,startColumn:r+1,endLineNumber:n,endColumn:o+2},url:t.substring(r,o+1)}}static computeLinks(e,t=function(){return null===At&&(At=new Tt([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),At}()){const n=function(){if(null===zt){zt=new Nt(0);const e=" \t<>'\"、。。、,.:;‘〈「『〔([{「」}])〕』」〉’`~…";for(let t=0;t=0?(r+=n?1:-1,r<0?r=e.length-1:r%=e.length,e[r]):null}}Mt.INSTANCE=new Mt;const Pt=Object.freeze((function(e,t){const n=setTimeout(e.bind(t),0);return{dispose(){clearTimeout(n)}}}));var Lt;!function(e){e.isCancellationToken=function(t){return t===e.None||t===e.Cancelled||t instanceof Ot||!(!t||"object"!=typeof t)&&"boolean"==typeof t.isCancellationRequested&&"function"==typeof t.onCancellationRequested},e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:$.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Pt})}(Lt||(Lt={}));class Ot{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Pt:(this._emitter||(this._emitter=new Z),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class Wt{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}}const Ut=new Wt,Vt=new Wt,Kt=new Wt,Bt=new Array(230),jt={},qt=[],$t=Object.create(null),Ht=Object.create(null),Gt=[],Jt=[];for(let e=0;e<=193;e++)Gt[e]=-1;for(let e=0;e<=127;e++)Jt[e]=-1;var Xt;!function(){const e="",t=[[0,1,0,"None",0,"unknown",0,"VK_UNKNOWN",e,e],[0,1,1,"Hyper",0,e,0,e,e,e],[0,1,2,"Super",0,e,0,e,e,e],[0,1,3,"Fn",0,e,0,e,e,e],[0,1,4,"FnLock",0,e,0,e,e,e],[0,1,5,"Suspend",0,e,0,e,e,e],[0,1,6,"Resume",0,e,0,e,e,e],[0,1,7,"Turbo",0,e,0,e,e,e],[0,1,8,"Sleep",0,e,0,"VK_SLEEP",e,e],[0,1,9,"WakeUp",0,e,0,e,e,e],[31,0,10,"KeyA",31,"A",65,"VK_A",e,e],[32,0,11,"KeyB",32,"B",66,"VK_B",e,e],[33,0,12,"KeyC",33,"C",67,"VK_C",e,e],[34,0,13,"KeyD",34,"D",68,"VK_D",e,e],[35,0,14,"KeyE",35,"E",69,"VK_E",e,e],[36,0,15,"KeyF",36,"F",70,"VK_F",e,e],[37,0,16,"KeyG",37,"G",71,"VK_G",e,e],[38,0,17,"KeyH",38,"H",72,"VK_H",e,e],[39,0,18,"KeyI",39,"I",73,"VK_I",e,e],[40,0,19,"KeyJ",40,"J",74,"VK_J",e,e],[41,0,20,"KeyK",41,"K",75,"VK_K",e,e],[42,0,21,"KeyL",42,"L",76,"VK_L",e,e],[43,0,22,"KeyM",43,"M",77,"VK_M",e,e],[44,0,23,"KeyN",44,"N",78,"VK_N",e,e],[45,0,24,"KeyO",45,"O",79,"VK_O",e,e],[46,0,25,"KeyP",46,"P",80,"VK_P",e,e],[47,0,26,"KeyQ",47,"Q",81,"VK_Q",e,e],[48,0,27,"KeyR",48,"R",82,"VK_R",e,e],[49,0,28,"KeyS",49,"S",83,"VK_S",e,e],[50,0,29,"KeyT",50,"T",84,"VK_T",e,e],[51,0,30,"KeyU",51,"U",85,"VK_U",e,e],[52,0,31,"KeyV",52,"V",86,"VK_V",e,e],[53,0,32,"KeyW",53,"W",87,"VK_W",e,e],[54,0,33,"KeyX",54,"X",88,"VK_X",e,e],[55,0,34,"KeyY",55,"Y",89,"VK_Y",e,e],[56,0,35,"KeyZ",56,"Z",90,"VK_Z",e,e],[22,0,36,"Digit1",22,"1",49,"VK_1",e,e],[23,0,37,"Digit2",23,"2",50,"VK_2",e,e],[24,0,38,"Digit3",24,"3",51,"VK_3",e,e],[25,0,39,"Digit4",25,"4",52,"VK_4",e,e],[26,0,40,"Digit5",26,"5",53,"VK_5",e,e],[27,0,41,"Digit6",27,"6",54,"VK_6",e,e],[28,0,42,"Digit7",28,"7",55,"VK_7",e,e],[29,0,43,"Digit8",29,"8",56,"VK_8",e,e],[30,0,44,"Digit9",30,"9",57,"VK_9",e,e],[21,0,45,"Digit0",21,"0",48,"VK_0",e,e],[3,1,46,"Enter",3,"Enter",13,"VK_RETURN",e,e],[9,1,47,"Escape",9,"Escape",27,"VK_ESCAPE",e,e],[1,1,48,"Backspace",1,"Backspace",8,"VK_BACK",e,e],[2,1,49,"Tab",2,"Tab",9,"VK_TAB",e,e],[10,1,50,"Space",10,"Space",32,"VK_SPACE",e,e],[83,0,51,"Minus",83,"-",189,"VK_OEM_MINUS","-","OEM_MINUS"],[81,0,52,"Equal",81,"=",187,"VK_OEM_PLUS","=","OEM_PLUS"],[87,0,53,"BracketLeft",87,"[",219,"VK_OEM_4","[","OEM_4"],[89,0,54,"BracketRight",89,"]",221,"VK_OEM_6","]","OEM_6"],[88,0,55,"Backslash",88,"\\",220,"VK_OEM_5","\\","OEM_5"],[0,0,56,"IntlHash",0,e,0,e,e,e],[80,0,57,"Semicolon",80,";",186,"VK_OEM_1",";","OEM_1"],[90,0,58,"Quote",90,"'",222,"VK_OEM_7","'","OEM_7"],[86,0,59,"Backquote",86,"`",192,"VK_OEM_3","`","OEM_3"],[82,0,60,"Comma",82,",",188,"VK_OEM_COMMA",",","OEM_COMMA"],[84,0,61,"Period",84,".",190,"VK_OEM_PERIOD",".","OEM_PERIOD"],[85,0,62,"Slash",85,"/",191,"VK_OEM_2","/","OEM_2"],[8,1,63,"CapsLock",8,"CapsLock",20,"VK_CAPITAL",e,e],[59,1,64,"F1",59,"F1",112,"VK_F1",e,e],[60,1,65,"F2",60,"F2",113,"VK_F2",e,e],[61,1,66,"F3",61,"F3",114,"VK_F3",e,e],[62,1,67,"F4",62,"F4",115,"VK_F4",e,e],[63,1,68,"F5",63,"F5",116,"VK_F5",e,e],[64,1,69,"F6",64,"F6",117,"VK_F6",e,e],[65,1,70,"F7",65,"F7",118,"VK_F7",e,e],[66,1,71,"F8",66,"F8",119,"VK_F8",e,e],[67,1,72,"F9",67,"F9",120,"VK_F9",e,e],[68,1,73,"F10",68,"F10",121,"VK_F10",e,e],[69,1,74,"F11",69,"F11",122,"VK_F11",e,e],[70,1,75,"F12",70,"F12",123,"VK_F12",e,e],[0,1,76,"PrintScreen",0,e,0,e,e,e],[79,1,77,"ScrollLock",79,"ScrollLock",145,"VK_SCROLL",e,e],[7,1,78,"Pause",7,"PauseBreak",19,"VK_PAUSE",e,e],[19,1,79,"Insert",19,"Insert",45,"VK_INSERT",e,e],[14,1,80,"Home",14,"Home",36,"VK_HOME",e,e],[11,1,81,"PageUp",11,"PageUp",33,"VK_PRIOR",e,e],[20,1,82,"Delete",20,"Delete",46,"VK_DELETE",e,e],[13,1,83,"End",13,"End",35,"VK_END",e,e],[12,1,84,"PageDown",12,"PageDown",34,"VK_NEXT",e,e],[17,1,85,"ArrowRight",17,"RightArrow",39,"VK_RIGHT","Right",e],[15,1,86,"ArrowLeft",15,"LeftArrow",37,"VK_LEFT","Left",e],[18,1,87,"ArrowDown",18,"DownArrow",40,"VK_DOWN","Down",e],[16,1,88,"ArrowUp",16,"UpArrow",38,"VK_UP","Up",e],[78,1,89,"NumLock",78,"NumLock",144,"VK_NUMLOCK",e,e],[108,1,90,"NumpadDivide",108,"NumPad_Divide",111,"VK_DIVIDE",e,e],[103,1,91,"NumpadMultiply",103,"NumPad_Multiply",106,"VK_MULTIPLY",e,e],[106,1,92,"NumpadSubtract",106,"NumPad_Subtract",109,"VK_SUBTRACT",e,e],[104,1,93,"NumpadAdd",104,"NumPad_Add",107,"VK_ADD",e,e],[3,1,94,"NumpadEnter",3,e,0,e,e,e],[94,1,95,"Numpad1",94,"NumPad1",97,"VK_NUMPAD1",e,e],[95,1,96,"Numpad2",95,"NumPad2",98,"VK_NUMPAD2",e,e],[96,1,97,"Numpad3",96,"NumPad3",99,"VK_NUMPAD3",e,e],[97,1,98,"Numpad4",97,"NumPad4",100,"VK_NUMPAD4",e,e],[98,1,99,"Numpad5",98,"NumPad5",101,"VK_NUMPAD5",e,e],[99,1,100,"Numpad6",99,"NumPad6",102,"VK_NUMPAD6",e,e],[100,1,101,"Numpad7",100,"NumPad7",103,"VK_NUMPAD7",e,e],[101,1,102,"Numpad8",101,"NumPad8",104,"VK_NUMPAD8",e,e],[102,1,103,"Numpad9",102,"NumPad9",105,"VK_NUMPAD9",e,e],[93,1,104,"Numpad0",93,"NumPad0",96,"VK_NUMPAD0",e,e],[107,1,105,"NumpadDecimal",107,"NumPad_Decimal",110,"VK_DECIMAL",e,e],[92,0,106,"IntlBackslash",92,"OEM_102",226,"VK_OEM_102",e,e],[58,1,107,"ContextMenu",58,"ContextMenu",93,e,e,e],[0,1,108,"Power",0,e,0,e,e,e],[0,1,109,"NumpadEqual",0,e,0,e,e,e],[71,1,110,"F13",71,"F13",124,"VK_F13",e,e],[72,1,111,"F14",72,"F14",125,"VK_F14",e,e],[73,1,112,"F15",73,"F15",126,"VK_F15",e,e],[74,1,113,"F16",74,"F16",127,"VK_F16",e,e],[75,1,114,"F17",75,"F17",128,"VK_F17",e,e],[76,1,115,"F18",76,"F18",129,"VK_F18",e,e],[77,1,116,"F19",77,"F19",130,"VK_F19",e,e],[0,1,117,"F20",0,e,0,"VK_F20",e,e],[0,1,118,"F21",0,e,0,"VK_F21",e,e],[0,1,119,"F22",0,e,0,"VK_F22",e,e],[0,1,120,"F23",0,e,0,"VK_F23",e,e],[0,1,121,"F24",0,e,0,"VK_F24",e,e],[0,1,122,"Open",0,e,0,e,e,e],[0,1,123,"Help",0,e,0,e,e,e],[0,1,124,"Select",0,e,0,e,e,e],[0,1,125,"Again",0,e,0,e,e,e],[0,1,126,"Undo",0,e,0,e,e,e],[0,1,127,"Cut",0,e,0,e,e,e],[0,1,128,"Copy",0,e,0,e,e,e],[0,1,129,"Paste",0,e,0,e,e,e],[0,1,130,"Find",0,e,0,e,e,e],[0,1,131,"AudioVolumeMute",112,"AudioVolumeMute",173,"VK_VOLUME_MUTE",e,e],[0,1,132,"AudioVolumeUp",113,"AudioVolumeUp",175,"VK_VOLUME_UP",e,e],[0,1,133,"AudioVolumeDown",114,"AudioVolumeDown",174,"VK_VOLUME_DOWN",e,e],[105,1,134,"NumpadComma",105,"NumPad_Separator",108,"VK_SEPARATOR",e,e],[110,0,135,"IntlRo",110,"ABNT_C1",193,"VK_ABNT_C1",e,e],[0,1,136,"KanaMode",0,e,0,e,e,e],[0,0,137,"IntlYen",0,e,0,e,e,e],[0,1,138,"Convert",0,e,0,e,e,e],[0,1,139,"NonConvert",0,e,0,e,e,e],[0,1,140,"Lang1",0,e,0,e,e,e],[0,1,141,"Lang2",0,e,0,e,e,e],[0,1,142,"Lang3",0,e,0,e,e,e],[0,1,143,"Lang4",0,e,0,e,e,e],[0,1,144,"Lang5",0,e,0,e,e,e],[0,1,145,"Abort",0,e,0,e,e,e],[0,1,146,"Props",0,e,0,e,e,e],[0,1,147,"NumpadParenLeft",0,e,0,e,e,e],[0,1,148,"NumpadParenRight",0,e,0,e,e,e],[0,1,149,"NumpadBackspace",0,e,0,e,e,e],[0,1,150,"NumpadMemoryStore",0,e,0,e,e,e],[0,1,151,"NumpadMemoryRecall",0,e,0,e,e,e],[0,1,152,"NumpadMemoryClear",0,e,0,e,e,e],[0,1,153,"NumpadMemoryAdd",0,e,0,e,e,e],[0,1,154,"NumpadMemorySubtract",0,e,0,e,e,e],[0,1,155,"NumpadClear",126,"Clear",12,"VK_CLEAR",e,e],[0,1,156,"NumpadClearEntry",0,e,0,e,e,e],[5,1,0,e,5,"Ctrl",17,"VK_CONTROL",e,e],[4,1,0,e,4,"Shift",16,"VK_SHIFT",e,e],[6,1,0,e,6,"Alt",18,"VK_MENU",e,e],[57,1,0,e,57,"Meta",0,"VK_COMMAND",e,e],[5,1,157,"ControlLeft",5,e,0,"VK_LCONTROL",e,e],[4,1,158,"ShiftLeft",4,e,0,"VK_LSHIFT",e,e],[6,1,159,"AltLeft",6,e,0,"VK_LMENU",e,e],[57,1,160,"MetaLeft",57,e,0,"VK_LWIN",e,e],[5,1,161,"ControlRight",5,e,0,"VK_RCONTROL",e,e],[4,1,162,"ShiftRight",4,e,0,"VK_RSHIFT",e,e],[6,1,163,"AltRight",6,e,0,"VK_RMENU",e,e],[57,1,164,"MetaRight",57,e,0,"VK_RWIN",e,e],[0,1,165,"BrightnessUp",0,e,0,e,e,e],[0,1,166,"BrightnessDown",0,e,0,e,e,e],[0,1,167,"MediaPlay",0,e,0,e,e,e],[0,1,168,"MediaRecord",0,e,0,e,e,e],[0,1,169,"MediaFastForward",0,e,0,e,e,e],[0,1,170,"MediaRewind",0,e,0,e,e,e],[114,1,171,"MediaTrackNext",119,"MediaTrackNext",176,"VK_MEDIA_NEXT_TRACK",e,e],[115,1,172,"MediaTrackPrevious",120,"MediaTrackPrevious",177,"VK_MEDIA_PREV_TRACK",e,e],[116,1,173,"MediaStop",121,"MediaStop",178,"VK_MEDIA_STOP",e,e],[0,1,174,"Eject",0,e,0,e,e,e],[117,1,175,"MediaPlayPause",122,"MediaPlayPause",179,"VK_MEDIA_PLAY_PAUSE",e,e],[0,1,176,"MediaSelect",123,"LaunchMediaPlayer",181,"VK_MEDIA_LAUNCH_MEDIA_SELECT",e,e],[0,1,177,"LaunchMail",124,"LaunchMail",180,"VK_MEDIA_LAUNCH_MAIL",e,e],[0,1,178,"LaunchApp2",125,"LaunchApp2",183,"VK_MEDIA_LAUNCH_APP2",e,e],[0,1,179,"LaunchApp1",0,e,0,"VK_MEDIA_LAUNCH_APP1",e,e],[0,1,180,"SelectTask",0,e,0,e,e,e],[0,1,181,"LaunchScreenSaver",0,e,0,e,e,e],[0,1,182,"BrowserSearch",115,"BrowserSearch",170,"VK_BROWSER_SEARCH",e,e],[0,1,183,"BrowserHome",116,"BrowserHome",172,"VK_BROWSER_HOME",e,e],[112,1,184,"BrowserBack",117,"BrowserBack",166,"VK_BROWSER_BACK",e,e],[113,1,185,"BrowserForward",118,"BrowserForward",167,"VK_BROWSER_FORWARD",e,e],[0,1,186,"BrowserStop",0,e,0,"VK_BROWSER_STOP",e,e],[0,1,187,"BrowserRefresh",0,e,0,"VK_BROWSER_REFRESH",e,e],[0,1,188,"BrowserFavorites",0,e,0,"VK_BROWSER_FAVORITES",e,e],[0,1,189,"ZoomToggle",0,e,0,e,e,e],[0,1,190,"MailReply",0,e,0,e,e,e],[0,1,191,"MailForward",0,e,0,e,e,e],[0,1,192,"MailSend",0,e,0,e,e,e],[109,1,0,e,109,"KeyInComposition",229,e,e,e],[111,1,0,e,111,"ABNT_C2",194,"VK_ABNT_C2",e,e],[91,1,0,e,91,"OEM_8",223,"VK_OEM_8",e,e],[0,1,0,e,0,e,0,"VK_KANA",e,e],[0,1,0,e,0,e,0,"VK_HANGUL",e,e],[0,1,0,e,0,e,0,"VK_JUNJA",e,e],[0,1,0,e,0,e,0,"VK_FINAL",e,e],[0,1,0,e,0,e,0,"VK_HANJA",e,e],[0,1,0,e,0,e,0,"VK_KANJI",e,e],[0,1,0,e,0,e,0,"VK_CONVERT",e,e],[0,1,0,e,0,e,0,"VK_NONCONVERT",e,e],[0,1,0,e,0,e,0,"VK_ACCEPT",e,e],[0,1,0,e,0,e,0,"VK_MODECHANGE",e,e],[0,1,0,e,0,e,0,"VK_SELECT",e,e],[0,1,0,e,0,e,0,"VK_PRINT",e,e],[0,1,0,e,0,e,0,"VK_EXECUTE",e,e],[0,1,0,e,0,e,0,"VK_SNAPSHOT",e,e],[0,1,0,e,0,e,0,"VK_HELP",e,e],[0,1,0,e,0,e,0,"VK_APPS",e,e],[0,1,0,e,0,e,0,"VK_PROCESSKEY",e,e],[0,1,0,e,0,e,0,"VK_PACKET",e,e],[0,1,0,e,0,e,0,"VK_DBE_SBCSCHAR",e,e],[0,1,0,e,0,e,0,"VK_DBE_DBCSCHAR",e,e],[0,1,0,e,0,e,0,"VK_ATTN",e,e],[0,1,0,e,0,e,0,"VK_CRSEL",e,e],[0,1,0,e,0,e,0,"VK_EXSEL",e,e],[0,1,0,e,0,e,0,"VK_EREOF",e,e],[0,1,0,e,0,e,0,"VK_PLAY",e,e],[0,1,0,e,0,e,0,"VK_ZOOM",e,e],[0,1,0,e,0,e,0,"VK_NONAME",e,e],[0,1,0,e,0,e,0,"VK_PA1",e,e],[0,1,0,e,0,e,0,"VK_OEM_CLEAR",e,e]],n=[],r=[];for(const e of t){const[t,i,o,s,a,l,c,h,d,p]=e;if(r[o]||(r[o]=!0,qt[o]=s,$t[s]=o,Ht[s.toLowerCase()]=o,i&&(Gt[o]=a,0!==a&&3!==a&&5!==a&&4!==a&&6!==a&&57!==a&&(Jt[a]=o))),!n[a]){if(n[a]=!0,!l)throw new Error(`String representation missing for key code ${a} around scan code ${s}`);Ut.define(a,l),Vt.define(a,d||l),Kt.define(a,p||d||l)}c&&(Bt[c]=a),h&&(jt[h]=a)}Jt[3]=46}(),function(e){e.toString=function(e){return Ut.keyCodeToStr(e)},e.fromString=function(e){return Ut.strToKeyCode(e)},e.toUserSettingsUS=function(e){return Vt.keyCodeToStr(e)},e.toUserSettingsGeneral=function(e){return Kt.keyCodeToStr(e)},e.fromUserSettings=function(e){return Vt.strToKeyCode(e)||Kt.strToKeyCode(e)},e.toElectronAccelerator=function(e){if(e>=93&&e<=108)return null;switch(e){case 16:return"Up";case 18:return"Down";case 15:return"Left";case 17:return"Right"}return Ut.keyCodeToStr(e)}}(Xt||(Xt={}));class Yt extends vt{constructor(e,t,n,r){super(e,t,n,r),this.selectionStartLineNumber=e,this.selectionStartColumn=t,this.positionLineNumber=n,this.positionColumn=r}toString(){return"["+this.selectionStartLineNumber+","+this.selectionStartColumn+" -> "+this.positionLineNumber+","+this.positionColumn+"]"}equalsSelection(e){return Yt.selectionsEqual(this,e)}static selectionsEqual(e,t){return e.selectionStartLineNumber===t.selectionStartLineNumber&&e.selectionStartColumn===t.selectionStartColumn&&e.positionLineNumber===t.positionLineNumber&&e.positionColumn===t.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(e,t){return 0===this.getDirection()?new Yt(this.startLineNumber,this.startColumn,e,t):new Yt(e,t,this.startLineNumber,this.startColumn)}getPosition(){return new bt(this.positionLineNumber,this.positionColumn)}getSelectionStart(){return new bt(this.selectionStartLineNumber,this.selectionStartColumn)}setStartPosition(e,t){return 0===this.getDirection()?new Yt(e,t,this.endLineNumber,this.endColumn):new Yt(this.endLineNumber,this.endColumn,e,t)}static fromPositions(e,t=e){return new Yt(e.lineNumber,e.column,t.lineNumber,t.column)}static fromRange(e,t){return 0===t?new Yt(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn):new Yt(e.endLineNumber,e.endColumn,e.startLineNumber,e.startColumn)}static liftSelection(e){return new Yt(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn)}static selectionsArrEqual(e,t){if(e&&!t||!e&&t)return!1;if(!e&&!t)return!0;if(e.length!==t.length)return!1;for(let n=0,r=e.length;n{this._map.get(e)===t&&(this._map.delete(e),this.fire([e]))}))}registerFactory(e,t){var n;null===(n=this._factories.get(e))||void 0===n||n.dispose();const r=new Yn(this,e,t);return this._factories.set(e,r),p((()=>{const t=this._factories.get(e);t&&t===r&&(this._factories.delete(e),t.dispose())}))}getOrCreate(e){return Xn(this,void 0,void 0,(function*(){const t=this.get(e);if(t)return t;const n=this._factories.get(e);return!n||n.isResolved?null:(yield n.resolve(),this.get(e))}))}get(e){return this._map.get(e)||null}isResolved(e){if(this.get(e))return!0;const t=this._factories.get(e);return!(t&&!t.isResolved)}setColorMap(e){this._colorMap=e,this._onDidChange.fire({changedLanguages:Array.from(this._map.keys()),changedColorMap:!0})}getColorMap(){return this._colorMap}getDefaultBackground(){return this._colorMap&&this._colorMap.length>2?this._colorMap[2]:null}},function(e){e[e.Unknown=0]="Unknown",e[e.Disabled=1]="Disabled",e[e.Enabled=2]="Enabled"}(cn||(cn={})),function(e){e[e.Invoke=1]="Invoke",e[e.Auto=2]="Auto"}(hn||(hn={})),function(e){e[e.None=0]="None",e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet"}(dn||(dn={})),function(e){e[e.Method=0]="Method",e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="Text",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet"}(pn||(pn={})),function(e){e[e.Deprecated=1]="Deprecated"}(un||(un={})),function(e){e[e.Invoke=0]="Invoke",e[e.TriggerCharacter=1]="TriggerCharacter",e[e.TriggerForIncompleteCompletions=2]="TriggerForIncompleteCompletions"}(mn||(mn={})),function(e){e[e.EXACT=0]="EXACT",e[e.ABOVE=1]="ABOVE",e[e.BELOW=2]="BELOW"}(fn||(fn={})),function(e){e[e.NotSet=0]="NotSet",e[e.ContentFlush=1]="ContentFlush",e[e.RecoverFromMarkers=2]="RecoverFromMarkers",e[e.Explicit=3]="Explicit",e[e.Paste=4]="Paste",e[e.Undo=5]="Undo",e[e.Redo=6]="Redo"}(gn||(gn={})),function(e){e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(bn||(bn={})),function(e){e[e.Text=0]="Text",e[e.Read=1]="Read",e[e.Write=2]="Write"}(vn||(vn={})),function(e){e[e.None=0]="None",e[e.Keep=1]="Keep",e[e.Brackets=2]="Brackets",e[e.Advanced=3]="Advanced",e[e.Full=4]="Full"}(yn||(yn={})),function(e){e[e.acceptSuggestionOnCommitCharacter=0]="acceptSuggestionOnCommitCharacter",e[e.acceptSuggestionOnEnter=1]="acceptSuggestionOnEnter",e[e.accessibilitySupport=2]="accessibilitySupport",e[e.accessibilityPageSize=3]="accessibilityPageSize",e[e.ariaLabel=4]="ariaLabel",e[e.autoClosingBrackets=5]="autoClosingBrackets",e[e.autoClosingDelete=6]="autoClosingDelete",e[e.autoClosingOvertype=7]="autoClosingOvertype",e[e.autoClosingQuotes=8]="autoClosingQuotes",e[e.autoIndent=9]="autoIndent",e[e.automaticLayout=10]="automaticLayout",e[e.autoSurround=11]="autoSurround",e[e.bracketPairColorization=12]="bracketPairColorization",e[e.guides=13]="guides",e[e.codeLens=14]="codeLens",e[e.codeLensFontFamily=15]="codeLensFontFamily",e[e.codeLensFontSize=16]="codeLensFontSize",e[e.colorDecorators=17]="colorDecorators",e[e.colorDecoratorsLimit=18]="colorDecoratorsLimit",e[e.columnSelection=19]="columnSelection",e[e.comments=20]="comments",e[e.contextmenu=21]="contextmenu",e[e.copyWithSyntaxHighlighting=22]="copyWithSyntaxHighlighting",e[e.cursorBlinking=23]="cursorBlinking",e[e.cursorSmoothCaretAnimation=24]="cursorSmoothCaretAnimation",e[e.cursorStyle=25]="cursorStyle",e[e.cursorSurroundingLines=26]="cursorSurroundingLines",e[e.cursorSurroundingLinesStyle=27]="cursorSurroundingLinesStyle",e[e.cursorWidth=28]="cursorWidth",e[e.disableLayerHinting=29]="disableLayerHinting",e[e.disableMonospaceOptimizations=30]="disableMonospaceOptimizations",e[e.domReadOnly=31]="domReadOnly",e[e.dragAndDrop=32]="dragAndDrop",e[e.dropIntoEditor=33]="dropIntoEditor",e[e.emptySelectionClipboard=34]="emptySelectionClipboard",e[e.experimentalWhitespaceRendering=35]="experimentalWhitespaceRendering",e[e.extraEditorClassName=36]="extraEditorClassName",e[e.fastScrollSensitivity=37]="fastScrollSensitivity",e[e.find=38]="find",e[e.fixedOverflowWidgets=39]="fixedOverflowWidgets",e[e.folding=40]="folding",e[e.foldingStrategy=41]="foldingStrategy",e[e.foldingHighlight=42]="foldingHighlight",e[e.foldingImportsByDefault=43]="foldingImportsByDefault",e[e.foldingMaximumRegions=44]="foldingMaximumRegions",e[e.unfoldOnClickAfterEndOfLine=45]="unfoldOnClickAfterEndOfLine",e[e.fontFamily=46]="fontFamily",e[e.fontInfo=47]="fontInfo",e[e.fontLigatures=48]="fontLigatures",e[e.fontSize=49]="fontSize",e[e.fontWeight=50]="fontWeight",e[e.fontVariations=51]="fontVariations",e[e.formatOnPaste=52]="formatOnPaste",e[e.formatOnType=53]="formatOnType",e[e.glyphMargin=54]="glyphMargin",e[e.gotoLocation=55]="gotoLocation",e[e.hideCursorInOverviewRuler=56]="hideCursorInOverviewRuler",e[e.hover=57]="hover",e[e.inDiffEditor=58]="inDiffEditor",e[e.inlineSuggest=59]="inlineSuggest",e[e.letterSpacing=60]="letterSpacing",e[e.lightbulb=61]="lightbulb",e[e.lineDecorationsWidth=62]="lineDecorationsWidth",e[e.lineHeight=63]="lineHeight",e[e.lineNumbers=64]="lineNumbers",e[e.lineNumbersMinChars=65]="lineNumbersMinChars",e[e.linkedEditing=66]="linkedEditing",e[e.links=67]="links",e[e.matchBrackets=68]="matchBrackets",e[e.minimap=69]="minimap",e[e.mouseStyle=70]="mouseStyle",e[e.mouseWheelScrollSensitivity=71]="mouseWheelScrollSensitivity",e[e.mouseWheelZoom=72]="mouseWheelZoom",e[e.multiCursorMergeOverlapping=73]="multiCursorMergeOverlapping",e[e.multiCursorModifier=74]="multiCursorModifier",e[e.multiCursorPaste=75]="multiCursorPaste",e[e.multiCursorLimit=76]="multiCursorLimit",e[e.occurrencesHighlight=77]="occurrencesHighlight",e[e.overviewRulerBorder=78]="overviewRulerBorder",e[e.overviewRulerLanes=79]="overviewRulerLanes",e[e.padding=80]="padding",e[e.parameterHints=81]="parameterHints",e[e.peekWidgetDefaultFocus=82]="peekWidgetDefaultFocus",e[e.definitionLinkOpensInPeek=83]="definitionLinkOpensInPeek",e[e.quickSuggestions=84]="quickSuggestions",e[e.quickSuggestionsDelay=85]="quickSuggestionsDelay",e[e.readOnly=86]="readOnly",e[e.renameOnType=87]="renameOnType",e[e.renderControlCharacters=88]="renderControlCharacters",e[e.renderFinalNewline=89]="renderFinalNewline",e[e.renderLineHighlight=90]="renderLineHighlight",e[e.renderLineHighlightOnlyWhenFocus=91]="renderLineHighlightOnlyWhenFocus",e[e.renderValidationDecorations=92]="renderValidationDecorations",e[e.renderWhitespace=93]="renderWhitespace",e[e.revealHorizontalRightPadding=94]="revealHorizontalRightPadding",e[e.roundedSelection=95]="roundedSelection",e[e.rulers=96]="rulers",e[e.scrollbar=97]="scrollbar",e[e.scrollBeyondLastColumn=98]="scrollBeyondLastColumn",e[e.scrollBeyondLastLine=99]="scrollBeyondLastLine",e[e.scrollPredominantAxis=100]="scrollPredominantAxis",e[e.selectionClipboard=101]="selectionClipboard",e[e.selectionHighlight=102]="selectionHighlight",e[e.selectOnLineNumbers=103]="selectOnLineNumbers",e[e.showFoldingControls=104]="showFoldingControls",e[e.showUnused=105]="showUnused",e[e.snippetSuggestions=106]="snippetSuggestions",e[e.smartSelect=107]="smartSelect",e[e.smoothScrolling=108]="smoothScrolling",e[e.stickyScroll=109]="stickyScroll",e[e.stickyTabStops=110]="stickyTabStops",e[e.stopRenderingLineAfter=111]="stopRenderingLineAfter",e[e.suggest=112]="suggest",e[e.suggestFontSize=113]="suggestFontSize",e[e.suggestLineHeight=114]="suggestLineHeight",e[e.suggestOnTriggerCharacters=115]="suggestOnTriggerCharacters",e[e.suggestSelection=116]="suggestSelection",e[e.tabCompletion=117]="tabCompletion",e[e.tabIndex=118]="tabIndex",e[e.unicodeHighlighting=119]="unicodeHighlighting",e[e.unusualLineTerminators=120]="unusualLineTerminators",e[e.useShadowDOM=121]="useShadowDOM",e[e.useTabStops=122]="useTabStops",e[e.wordBreak=123]="wordBreak",e[e.wordSeparators=124]="wordSeparators",e[e.wordWrap=125]="wordWrap",e[e.wordWrapBreakAfterCharacters=126]="wordWrapBreakAfterCharacters",e[e.wordWrapBreakBeforeCharacters=127]="wordWrapBreakBeforeCharacters",e[e.wordWrapColumn=128]="wordWrapColumn",e[e.wordWrapOverride1=129]="wordWrapOverride1",e[e.wordWrapOverride2=130]="wordWrapOverride2",e[e.wrappingIndent=131]="wrappingIndent",e[e.wrappingStrategy=132]="wrappingStrategy",e[e.showDeprecated=133]="showDeprecated",e[e.inlayHints=134]="inlayHints",e[e.editorClassName=135]="editorClassName",e[e.pixelRatio=136]="pixelRatio",e[e.tabFocusMode=137]="tabFocusMode",e[e.layoutInfo=138]="layoutInfo",e[e.wrappingInfo=139]="wrappingInfo"}(wn||(wn={})),function(e){e[e.TextDefined=0]="TextDefined",e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(xn||(xn={})),function(e){e[e.LF=0]="LF",e[e.CRLF=1]="CRLF"}(Sn||(Sn={})),function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"}(kn||(kn={})),function(e){e[e.Both=0]="Both",e[e.Right=1]="Right",e[e.Left=2]="Left",e[e.None=3]="None"}(Cn||(Cn={})),function(e){e[e.Type=1]="Type",e[e.Parameter=2]="Parameter"}(_n||(_n={})),function(e){e[e.Automatic=0]="Automatic",e[e.Explicit=1]="Explicit"}(En||(En={})),function(e){e[e.DependsOnKbLayout=-1]="DependsOnKbLayout",e[e.Unknown=0]="Unknown",e[e.Backspace=1]="Backspace",e[e.Tab=2]="Tab",e[e.Enter=3]="Enter",e[e.Shift=4]="Shift",e[e.Ctrl=5]="Ctrl",e[e.Alt=6]="Alt",e[e.PauseBreak=7]="PauseBreak",e[e.CapsLock=8]="CapsLock",e[e.Escape=9]="Escape",e[e.Space=10]="Space",e[e.PageUp=11]="PageUp",e[e.PageDown=12]="PageDown",e[e.End=13]="End",e[e.Home=14]="Home",e[e.LeftArrow=15]="LeftArrow",e[e.UpArrow=16]="UpArrow",e[e.RightArrow=17]="RightArrow",e[e.DownArrow=18]="DownArrow",e[e.Insert=19]="Insert",e[e.Delete=20]="Delete",e[e.Digit0=21]="Digit0",e[e.Digit1=22]="Digit1",e[e.Digit2=23]="Digit2",e[e.Digit3=24]="Digit3",e[e.Digit4=25]="Digit4",e[e.Digit5=26]="Digit5",e[e.Digit6=27]="Digit6",e[e.Digit7=28]="Digit7",e[e.Digit8=29]="Digit8",e[e.Digit9=30]="Digit9",e[e.KeyA=31]="KeyA",e[e.KeyB=32]="KeyB",e[e.KeyC=33]="KeyC",e[e.KeyD=34]="KeyD",e[e.KeyE=35]="KeyE",e[e.KeyF=36]="KeyF",e[e.KeyG=37]="KeyG",e[e.KeyH=38]="KeyH",e[e.KeyI=39]="KeyI",e[e.KeyJ=40]="KeyJ",e[e.KeyK=41]="KeyK",e[e.KeyL=42]="KeyL",e[e.KeyM=43]="KeyM",e[e.KeyN=44]="KeyN",e[e.KeyO=45]="KeyO",e[e.KeyP=46]="KeyP",e[e.KeyQ=47]="KeyQ",e[e.KeyR=48]="KeyR",e[e.KeyS=49]="KeyS",e[e.KeyT=50]="KeyT",e[e.KeyU=51]="KeyU",e[e.KeyV=52]="KeyV",e[e.KeyW=53]="KeyW",e[e.KeyX=54]="KeyX",e[e.KeyY=55]="KeyY",e[e.KeyZ=56]="KeyZ",e[e.Meta=57]="Meta",e[e.ContextMenu=58]="ContextMenu",e[e.F1=59]="F1",e[e.F2=60]="F2",e[e.F3=61]="F3",e[e.F4=62]="F4",e[e.F5=63]="F5",e[e.F6=64]="F6",e[e.F7=65]="F7",e[e.F8=66]="F8",e[e.F9=67]="F9",e[e.F10=68]="F10",e[e.F11=69]="F11",e[e.F12=70]="F12",e[e.F13=71]="F13",e[e.F14=72]="F14",e[e.F15=73]="F15",e[e.F16=74]="F16",e[e.F17=75]="F17",e[e.F18=76]="F18",e[e.F19=77]="F19",e[e.NumLock=78]="NumLock",e[e.ScrollLock=79]="ScrollLock",e[e.Semicolon=80]="Semicolon",e[e.Equal=81]="Equal",e[e.Comma=82]="Comma",e[e.Minus=83]="Minus",e[e.Period=84]="Period",e[e.Slash=85]="Slash",e[e.Backquote=86]="Backquote",e[e.BracketLeft=87]="BracketLeft",e[e.Backslash=88]="Backslash",e[e.BracketRight=89]="BracketRight",e[e.Quote=90]="Quote",e[e.OEM_8=91]="OEM_8",e[e.IntlBackslash=92]="IntlBackslash",e[e.Numpad0=93]="Numpad0",e[e.Numpad1=94]="Numpad1",e[e.Numpad2=95]="Numpad2",e[e.Numpad3=96]="Numpad3",e[e.Numpad4=97]="Numpad4",e[e.Numpad5=98]="Numpad5",e[e.Numpad6=99]="Numpad6",e[e.Numpad7=100]="Numpad7",e[e.Numpad8=101]="Numpad8",e[e.Numpad9=102]="Numpad9",e[e.NumpadMultiply=103]="NumpadMultiply",e[e.NumpadAdd=104]="NumpadAdd",e[e.NUMPAD_SEPARATOR=105]="NUMPAD_SEPARATOR",e[e.NumpadSubtract=106]="NumpadSubtract",e[e.NumpadDecimal=107]="NumpadDecimal",e[e.NumpadDivide=108]="NumpadDivide",e[e.KEY_IN_COMPOSITION=109]="KEY_IN_COMPOSITION",e[e.ABNT_C1=110]="ABNT_C1",e[e.ABNT_C2=111]="ABNT_C2",e[e.AudioVolumeMute=112]="AudioVolumeMute",e[e.AudioVolumeUp=113]="AudioVolumeUp",e[e.AudioVolumeDown=114]="AudioVolumeDown",e[e.BrowserSearch=115]="BrowserSearch",e[e.BrowserHome=116]="BrowserHome",e[e.BrowserBack=117]="BrowserBack",e[e.BrowserForward=118]="BrowserForward",e[e.MediaTrackNext=119]="MediaTrackNext",e[e.MediaTrackPrevious=120]="MediaTrackPrevious",e[e.MediaStop=121]="MediaStop",e[e.MediaPlayPause=122]="MediaPlayPause",e[e.LaunchMediaPlayer=123]="LaunchMediaPlayer",e[e.LaunchMail=124]="LaunchMail",e[e.LaunchApp2=125]="LaunchApp2",e[e.Clear=126]="Clear",e[e.MAX_VALUE=127]="MAX_VALUE"}(Fn||(Fn={})),function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="Error"}(Rn||(Rn={})),function(e){e[e.Unnecessary=1]="Unnecessary",e[e.Deprecated=2]="Deprecated"}(Nn||(Nn={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(Dn||(Dn={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.TEXTAREA=1]="TEXTAREA",e[e.GUTTER_GLYPH_MARGIN=2]="GUTTER_GLYPH_MARGIN",e[e.GUTTER_LINE_NUMBERS=3]="GUTTER_LINE_NUMBERS",e[e.GUTTER_LINE_DECORATIONS=4]="GUTTER_LINE_DECORATIONS",e[e.GUTTER_VIEW_ZONE=5]="GUTTER_VIEW_ZONE",e[e.CONTENT_TEXT=6]="CONTENT_TEXT",e[e.CONTENT_EMPTY=7]="CONTENT_EMPTY",e[e.CONTENT_VIEW_ZONE=8]="CONTENT_VIEW_ZONE",e[e.CONTENT_WIDGET=9]="CONTENT_WIDGET",e[e.OVERVIEW_RULER=10]="OVERVIEW_RULER",e[e.SCROLLBAR=11]="SCROLLBAR",e[e.OVERLAY_WIDGET=12]="OVERLAY_WIDGET",e[e.OUTSIDE_EDITOR=13]="OUTSIDE_EDITOR"}(Tn||(Tn={})),function(e){e[e.TOP_RIGHT_CORNER=0]="TOP_RIGHT_CORNER",e[e.BOTTOM_RIGHT_CORNER=1]="BOTTOM_RIGHT_CORNER",e[e.TOP_CENTER=2]="TOP_CENTER"}(An||(An={})),function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}(zn||(zn={})),function(e){e[e.Left=0]="Left",e[e.Right=1]="Right",e[e.None=2]="None",e[e.LeftOfInjectedText=3]="LeftOfInjectedText",e[e.RightOfInjectedText=4]="RightOfInjectedText"}(In||(In={})),function(e){e[e.Off=0]="Off",e[e.On=1]="On",e[e.Relative=2]="Relative",e[e.Interval=3]="Interval",e[e.Custom=4]="Custom"}(Mn||(Mn={})),function(e){e[e.None=0]="None",e[e.Text=1]="Text",e[e.Blocks=2]="Blocks"}(Pn||(Pn={})),function(e){e[e.Smooth=0]="Smooth",e[e.Immediate=1]="Immediate"}(Ln||(Ln={})),function(e){e[e.Auto=1]="Auto",e[e.Hidden=2]="Hidden",e[e.Visible=3]="Visible"}(On||(On={})),function(e){e[e.LTR=0]="LTR",e[e.RTL=1]="RTL"}(Wn||(Wn={})),function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"}(Un||(Un={})),function(e){e[e.File=0]="File",e[e.Module=1]="Module",e[e.Namespace=2]="Namespace",e[e.Package=3]="Package",e[e.Class=4]="Class",e[e.Method=5]="Method",e[e.Property=6]="Property",e[e.Field=7]="Field",e[e.Constructor=8]="Constructor",e[e.Enum=9]="Enum",e[e.Interface=10]="Interface",e[e.Function=11]="Function",e[e.Variable=12]="Variable",e[e.Constant=13]="Constant",e[e.String=14]="String",e[e.Number=15]="Number",e[e.Boolean=16]="Boolean",e[e.Array=17]="Array",e[e.Object=18]="Object",e[e.Key=19]="Key",e[e.Null=20]="Null",e[e.EnumMember=21]="EnumMember",e[e.Struct=22]="Struct",e[e.Event=23]="Event",e[e.Operator=24]="Operator",e[e.TypeParameter=25]="TypeParameter"}(Vn||(Vn={})),function(e){e[e.Deprecated=1]="Deprecated"}(Kn||(Kn={})),function(e){e[e.Hidden=0]="Hidden",e[e.Blink=1]="Blink",e[e.Smooth=2]="Smooth",e[e.Phase=3]="Phase",e[e.Expand=4]="Expand",e[e.Solid=5]="Solid"}(Bn||(Bn={})),function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"}(jn||(jn={})),function(e){e[e.AlwaysGrowsWhenTypingAtEdges=0]="AlwaysGrowsWhenTypingAtEdges",e[e.NeverGrowsWhenTypingAtEdges=1]="NeverGrowsWhenTypingAtEdges",e[e.GrowsOnlyWhenTypingBefore=2]="GrowsOnlyWhenTypingBefore",e[e.GrowsOnlyWhenTypingAfter=3]="GrowsOnlyWhenTypingAfter"}(qn||(qn={})),function(e){e[e.None=0]="None",e[e.Same=1]="Same",e[e.Indent=2]="Indent",e[e.DeepIndent=3]="DeepIndent"}($n||($n={}));class Qn{static chord(e,t){return function(e,t){return(e|(65535&t)<<16>>>0)>>>0}(e,t)}}Qn.CtrlCmd=2048,Qn.Shift=1024,Qn.Alt=512,Qn.WinCtrl=256;function er(e,t,n,r,i){return function(e,t,n,r,i){if(0===r)return!0;const o=t.charCodeAt(r-1);if(0!==e.get(o))return!0;if(13===o||10===o)return!0;if(i>0){const n=t.charCodeAt(r);if(0!==e.get(n))return!0}return!1}(e,t,0,r,i)&&function(e,t,n,r,i){if(r+i===n)return!0;const o=t.charCodeAt(r+i);if(0!==e.get(o))return!0;if(13===o||10===o)return!0;if(i>0){const n=t.charCodeAt(r+i-1);if(0!==e.get(n))return!0}return!1}(e,t,n,r,i)}!function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}(Hn||(Hn={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(Gn||(Gn={})),function(e){e[e.Both=0]="Both",e[e.Right=1]="Right",e[e.Left=2]="Left",e[e.None=3]="None"}(Jn||(Jn={}));class tr{constructor(e,t){this._wordSeparators=e,this._searchRegex=t,this._prevMatchStartIndex=-1,this._prevMatchLength=0}reset(e){this._searchRegex.lastIndex=e,this._prevMatchStartIndex=-1,this._prevMatchLength=0}next(e){const t=e.length;let n;do{if(this._prevMatchStartIndex+this._prevMatchLength===t)return null;if(n=this._searchRegex.exec(e),!n)return null;const r=n.index,i=n[0].length;if(r===this._prevMatchStartIndex&&i===this._prevMatchLength){if(0===i){ae(e,t,this._searchRegex.lastIndex)>65535?this._searchRegex.lastIndex+=2:this._searchRegex.lastIndex+=1;continue}return null}if(this._prevMatchStartIndex=r,this._prevMatchLength=i,!this._wordSeparators||er(this._wordSeparators,e,t,r,i))return n}while(n);return null}}function nr(e,t="Unreachable"){throw new Error(t)}function rr(e){e()||(e(),n(new a("Assertion Failed")))}function ir(e,t){let n=0;for(;n${this.modifiedRange.toString()}}`}}class lr{constructor(e,t){this.originalRange=e,this.modifiedRange=t}toString(){return`{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`}}class cr{constructor(e,t){this.startLineNumber=e,this.endLineNumberExclusive=t}get isEmpty(){return this.startLineNumber===this.endLineNumberExclusive}delta(e){return new cr(this.startLineNumber+e,this.endLineNumberExclusive+e)}get length(){return this.endLineNumberExclusive-this.startLineNumber}join(e){return new cr(Math.min(this.startLineNumber,e.startLineNumber),Math.max(this.endLineNumberExclusive,e.endLineNumberExclusive))}toString(){return`[${this.startLineNumber},${this.endLineNumberExclusive})`}}function hr(e,t,n,r){return new Ie(e,t,n).ComputeDiff(r)}class dr{constructor(e){const t=[],n=[];for(let r=0,i=e.length;r(10===e?"\\n":String.fromCharCode(e))+`-(${this._lineNumbers[t]},${this._columns[t]})`)).join(", ")+"]"}_assertIndex(e,t){if(e<0||e>=t.length)throw new Error("Illegal index")}getElements(){return this._charCodes}getStartLineNumber(e){return e>0&&e===this._lineNumbers.length?this.getEndLineNumber(e-1):(this._assertIndex(e,this._lineNumbers),this._lineNumbers[e])}getEndLineNumber(e){return-1===e?this.getStartLineNumber(e+1):(this._assertIndex(e,this._lineNumbers),10===this._charCodes[e]?this._lineNumbers[e]+1:this._lineNumbers[e])}getStartColumn(e){return e>0&&e===this._columns.length?this.getEndColumn(e-1):(this._assertIndex(e,this._columns),this._columns[e])}getEndColumn(e){return-1===e?this.getStartColumn(e+1):(this._assertIndex(e,this._columns),10===this._charCodes[e]?1:this._columns[e]+1)}}class ur{constructor(e,t,n,r,i,o,s,a){this.originalStartLineNumber=e,this.originalStartColumn=t,this.originalEndLineNumber=n,this.originalEndColumn=r,this.modifiedStartLineNumber=i,this.modifiedStartColumn=o,this.modifiedEndLineNumber=s,this.modifiedEndColumn=a}static createFromDiffChange(e,t,n){const r=t.getStartLineNumber(e.originalStart),i=t.getStartColumn(e.originalStart),o=t.getEndLineNumber(e.originalStart+e.originalLength-1),s=t.getEndColumn(e.originalStart+e.originalLength-1),a=n.getStartLineNumber(e.modifiedStart),l=n.getStartColumn(e.modifiedStart),c=n.getEndLineNumber(e.modifiedStart+e.modifiedLength-1),h=n.getEndColumn(e.modifiedStart+e.modifiedLength-1);return new ur(r,i,o,s,a,l,c,h)}}class mr{constructor(e,t,n,r,i){this.originalStartLineNumber=e,this.originalEndLineNumber=t,this.modifiedStartLineNumber=n,this.modifiedEndLineNumber=r,this.charChanges=i}static createFromDiffResult(e,t,n,r,i,o,s){let a,l,c,h,d;if(0===t.originalLength?(a=n.getStartLineNumber(t.originalStart)-1,l=0):(a=n.getStartLineNumber(t.originalStart),l=n.getEndLineNumber(t.originalStart+t.originalLength-1)),0===t.modifiedLength?(c=r.getStartLineNumber(t.modifiedStart)-1,h=0):(c=r.getStartLineNumber(t.modifiedStart),h=r.getEndLineNumber(t.modifiedStart+t.modifiedLength-1)),o&&t.originalLength>0&&t.originalLength<20&&t.modifiedLength>0&&t.modifiedLength<20&&i()){const o=n.createCharSequence(e,t.originalStart,t.originalStart+t.originalLength-1),a=r.createCharSequence(e,t.modifiedStart,t.modifiedStart+t.modifiedLength-1);if(o.getElements().length>0&&a.getElements().length>0){let e=hr(o,a,i,!0).changes;s&&(e=function(e){if(e.length<=1)return e;const t=[e[0]];let n=t[0];for(let r=1,i=e.length;r1&&s>1&&e.charCodeAt(n-2)===t.charCodeAt(s-2);)n--,s--;(n>1||s>1)&&this._pushTrimWhitespaceCharChange(r,i+1,1,n,o+1,1,s)}{let n=br(e,1),s=br(t,1);const a=e.length+1,l=t.length+1;for(;n=0;n--){const t=e.charCodeAt(n);if(32!==t&&9!==t)return n}return-1}(e);return-1===n?t:n+2}function vr(e){if(0===e)return()=>!0;const t=Date.now();return()=>Date.now()-t ${this.seq2Range}`}}class wr{constructor(e,t){this.start=e,this.endExclusive=t}get isEmpty(){return this.start===this.endExclusive}delta(e){return new wr(this.start+e,this.endExclusive+e)}get length(){return this.endExclusive-this.start}toString(){return`[${this.start}, ${this.endExclusive})`}join(e){return new wr(Math.min(this.start,e.start),Math.max(this.endExclusive,e.endExclusive))}}class xr{constructor(e,t){this.width=e,this.height=t,this.array=[],this.array=new Array(e*t)}get(e,t){return this.array[e+t*this.width]}set(e,t,n){this.array[e+t*this.width]=n}}class Sr{compute(e,t,n){const r=new xr(e.length,t.length),i=new xr(e.length,t.length),o=new xr(e.length,t.length);for(let s=0;s0&&a>0&&3===i.get(s-1,a-1)&&(h+=o.get(s-1,a-1)),h+=n?n(s,a):1):h=-1;const d=Math.max(l,c,h);if(d===h){const e=s>0&&a>0?o.get(s-1,a-1):0;o.set(s,a,e+1),i.set(s,a,3)}else d===l?(o.set(s,a,0),i.set(s,a,1)):d===c&&(o.set(s,a,0),i.set(s,a,2));r.set(s,a,d)}const s=[];let a=e.length,l=t.length;function c(e,t){e+1===a&&t+1===l||s.push(new yr(new wr(e+1,a),new wr(t+1,l))),a=e,l=t}let h=e.length-1,d=t.length-1;for(;h>=0&&d>=0;)3===i.get(h,d)?(c(h,d),h--,d--):1===i.get(h,d)?h--:d--;return c(-1,-1),s.reverse(),s}}function kr(e,t,n){let r=n;return r=function(e,t,n){const r=[];n.length>0&&r.push(n[0]);for(let e=1;e0?n[r-1].seq2Range.endExclusive:-1,s=r+10?n[r-1].seq1Range.endExclusive:-1,s=r+1i&&n.getElement(e.seq2Range.start-o)===n.getElement(e.seq2Range.endExclusive-o)&&o<20;)o++;o--;let s=0;for(;e.seq2Range.start+sl&&(l=c,a=r)}return 0!==a?new yr(e.seq1Range.delta(a),e.seq2Range.delta(a)):e}class _r{compute(e,t){if(0===e.length)return[new yr(new wr(0,0),new wr(0,t.length))];if(0===t.length)return[new yr(new wr(0,e.length),new wr(0,0))];function n(n,r){for(;n=this.negativeArr.length){const e=this.negativeArr;this.negativeArr=new Int32Array(2*e.length),this.negativeArr.set(e)}this.negativeArr[e]=t}else{if(e>=this.positiveArr.length){const e=this.positiveArr;this.positiveArr=new Int32Array(2*e.length),this.positiveArr.set(e)}this.positiveArr[e]=t}}}class Rr{constructor(){this.positiveArr=[],this.negativeArr=[]}get(e){return e<0?(e=-e-1,this.negativeArr[e]):this.positiveArr[e]}set(e,t){e<0?(e=-e-1,this.negativeArr[e]=t):this.positiveArr[e]=t}}class Nr{constructor(e,t){this.trimmedHash=e,this.lines=t}getElement(e){return this.trimmedHash[e]}get length(){return this.trimmedHash.length}getBoundaryScore(e){return 1e3-((0===e?0:Dr(this.lines[e-1]))+(e===this.lines.length?0:Dr(this.lines[e])))}}function Dr(e){let t=0;for(;t0?this.elements[e-1]:-1),n=Ir(ee?n=r:t=r+1}const r=0===t?0:this.firstCharOnLineOffsets[t-1];return new bt(t+1,e-r+1)}translateRange(e){return vt.fromPositions(this.translateOffset(e.start),this.translateOffset(e.endExclusive))}}const Ar={0:0,1:0,2:0,3:10,4:2,5:3,6:10,7:10};function zr(e){return Ar[e]}function Ir(e){return 10===e?7:13===e?6:function(e){return 32===e||9===e}(e)?5:e>=97&&e<=122?0:e>=65&&e<=90?1:e>=48&&e<=57?2:-1===e?3:4}const Mr={smart:new class{computeDiff(e,t,n){var r;const i=new fr(e,t,{maxComputationTime:n.maxComputationTimeMs,shouldIgnoreTrimWhitespace:n.ignoreTrimWhitespace,shouldComputeCharChanges:!0,shouldMakePrettyDiff:!0,shouldPostProcessCharChanges:!0}).computeDiff(),o=[];let s=null;for(const e of i.changes){let t,n;t=0===e.originalEndLineNumber?new cr(e.originalStartLineNumber+1,e.originalStartLineNumber+1):new cr(e.originalStartLineNumber,e.originalEndLineNumber+1),n=0===e.modifiedEndLineNumber?new cr(e.modifiedStartLineNumber+1,e.modifiedStartLineNumber+1):new cr(e.modifiedStartLineNumber,e.modifiedEndLineNumber+1);let i=new ar(t,n,null===(r=e.charChanges)||void 0===r?void 0:r.map((e=>new lr(new vt(e.originalStartLineNumber,e.originalStartColumn,e.originalEndLineNumber,e.originalEndColumn),new vt(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn)))));s&&(s.modifiedRange.endLineNumberExclusive!==i.modifiedRange.startLineNumber&&s.originalRange.endLineNumberExclusive!==i.originalRange.startLineNumber||(i=new ar(s.originalRange.join(i.originalRange),s.modifiedRange.join(i.modifiedRange),s.innerChanges&&i.innerChanges?s.innerChanges.concat(i.innerChanges):void 0),o.pop())),o.push(i),s=i}return rr((()=>ir(o,((e,t)=>t.originalRange.startLineNumber-e.originalRange.endLineNumberExclusive==t.modifiedRange.startLineNumber-e.modifiedRange.endLineNumberExclusive&&e.originalRange.endLineNumberExclusivei(e.trim()))),s=t.map((e=>i(e.trim()))),a=new Nr(o,e),l=new Nr(s,t);let c=(()=>a.length+l.length<1500?this.dynamicProgrammingDiffing.compute(a,l,((n,r)=>e[n]===t[r]?0===t[r].length?.1:1+Math.log(1+t[r].length):.99)):this.myersDiffingAlgorithm.compute(a,l))();c=kr(a,l,c);const h=[],d=n=>{for(let r=0;rn.seq1Range.start-p==n.seq2Range.start-u)),d(n.seq1Range.start-p),p=n.seq1Range.endExclusive,u=n.seq2Range.endExclusive;const r=this.refineDiff(e,t,n);for(const e of r)h.push(e)}d(e.length-p);const m=function(e){const t=[];for(const n of function*(e,t){let n,r;for(const t of e)void 0!==r&&(i=r,(o=t).originalRange.startLineNumber-(i.originalRange.endLineNumber-(i.originalRange.endColumn>1?0:1))<=1||o.modifiedRange.startLineNumber-(i.modifiedRange.endLineNumber-(i.modifiedRange.endColumn>1?0:1))<=1)?n.push(t):(n&&(yield n),n=[t]),r=t;var i,o;n&&(yield n)}(e)){const e=n[0],r=n[n.length-1];t.push(new ar(new cr(e.originalRange.startLineNumber,r.originalRange.endLineNumber+(r.originalRange.endColumn>1||r.modifiedRange.endColumn>1?1:0)),new cr(e.modifiedRange.startLineNumber,r.modifiedRange.endLineNumber+(r.originalRange.endColumn>1||r.modifiedRange.endColumn>1?1:0)),n))}return rr((()=>ir(t,((e,t)=>t.originalRange.startLineNumber-e.originalRange.endLineNumberExclusive==t.modifiedRange.startLineNumber-e.modifiedRange.endLineNumberExclusive&&e.originalRange.endLineNumberExclusivenew lr(r.translateRange(e.seq1Range).delta(n.seq1Range.start),i.translateRange(e.seq2Range).delta(n.seq2Range.start))))}}};var Pr=function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{l(r.next(e))}catch(e){o(e)}}function a(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}l((r=r.apply(e,t||[])).next())}))};class Lr extends class{constructor(e,t,n,r){this._uri=e,this._lines=t,this._eol=n,this._versionId=r,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}get version(){return this._versionId}getText(){return null===this._cachedTextValue&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(e){e.eol&&e.eol!==this._eol&&(this._eol=e.eol,this._lineStarts=null);const t=e.changes;for(const e of t)this._acceptDeleteRange(e.range),this._acceptInsertText(new bt(e.range.startLineNumber,e.range.startColumn),e.text);this._versionId=e.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const e=this._eol.length,t=this._lines.length,n=new Uint32Array(t);for(let r=0;rthis._lines.length)t=this._lines.length,n=this._lines[t-1].length+1,r=!0;else{const e=this._lines[t-1].length+1;n<1?(n=1,r=!0):n>e&&(n=e,r=!0)}return r?{lineNumber:t,column:n}:e}}class Or{constructor(e,t){this._host=e,this._models=Object.create(null),this._foreignModuleFactory=t,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(e){return this._models[e]}_getModels(){const e=[];return Object.keys(this._models).forEach((t=>e.push(this._models[t]))),e}acceptNewModel(e){this._models[e.url]=new Lr(st.parse(e.url),e.lines,e.EOL,e.versionId)}acceptModelChanged(e,t){this._models[e]&&this._models[e].onEvents(t)}acceptRemovedModel(e){this._models[e]&&delete this._models[e]}computeUnicodeHighlights(e,t,n){return Pr(this,void 0,void 0,(function*(){const r=this._getModel(e);return r?class{static computeUnicodeHighlights(e,t,n){const r=n?n.startLineNumber:1,i=n?n.endLineNumber:e.getLineCount(),o=new or(t),s=o.getCandidateCodePoints();let a;var l;a="allNonBasicAscii"===s?new RegExp("[^\\t\\n\\r\\x20-\\x7E]","g"):new RegExp(`[${l=Array.from(s).map((e=>String.fromCodePoint(e))).join(""),l.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g,"\\$&")}]`,"g");const c=new tr(null,a),h=[];let d,p=!1,u=0,m=0,f=0;e:for(let t=r,n=i;t<=n;t++){const n=e.getLineContent(t),r=n.length;c.reset(0);do{if(d=c.next(n),d){let e=d.index,i=d.index+d[0].length;e>0&&ie(n.charCodeAt(e-1))&&e--,i+1=n){p=!0;break e}h.push(new vt(t,e+1,t,i+1))}}}while(d)}return{ranges:h,hasMore:p,ambiguousCharacterCount:u,invisibleCharacterCount:m,nonBasicAsciiCharacterCount:f}}static computeUnicodeHighlightReason(e,t){const n=new or(t);switch(n.shouldHighlightNonBasicASCII(e,null)){case 0:return null;case 2:return{kind:1};case 3:{const r=e.codePointAt(0),i=n.ambiguousCharacters.getPrimaryConfusable(r),o=he.getLocales().filter((e=>!he.getInstance(new Set([...t.allowedLocales,e])).isAmbiguous(r)));return{kind:0,confusableWith:String.fromCodePoint(i),notAmbiguousInLocales:o}}case 1:return{kind:2}}}}.computeUnicodeHighlights(r,t,n):{ranges:[],hasMore:!1,ambiguousCharacterCount:0,invisibleCharacterCount:0,nonBasicAsciiCharacterCount:0}}))}computeDiff(e,t,n,r){return Pr(this,void 0,void 0,(function*(){const i=this._getModel(e),o=this._getModel(t);return i&&o?Or.computeDiff(i,o,n,r):null}))}static computeDiff(e,t,n,r){const i="experimental"===r?Mr.experimental:Mr.smart,o=e.getLinesContent(),s=t.getLinesContent(),a=i.computeDiff(o,s,n);return{identical:!(a.changes.length>0)&&this._modelsAreIdentical(e,t),quitEarly:a.quitEarly,changes:a.changes.map((e=>{var t;return[e.originalRange.startLineNumber,e.originalRange.endLineNumberExclusive,e.modifiedRange.startLineNumber,e.modifiedRange.endLineNumberExclusive,null===(t=e.innerChanges)||void 0===t?void 0:t.map((e=>[e.originalRange.startLineNumber,e.originalRange.startColumn,e.originalRange.endLineNumber,e.originalRange.endColumn,e.modifiedRange.startLineNumber,e.modifiedRange.startColumn,e.modifiedRange.endLineNumber,e.modifiedRange.endColumn]))]}))}}static _modelsAreIdentical(e,t){const n=e.getLineCount();if(n!==t.getLineCount())return!1;for(let r=1;r<=n;r++)if(e.getLineContent(r)!==t.getLineContent(r))return!1;return!0}computeMoreMinimalEdits(e,t){return Pr(this,void 0,void 0,(function*(){const n=this._getModel(e);if(!n)return t;const r=[];let i;t=t.slice(0).sort(((e,t)=>e.range&&t.range?vt.compareRangesUsingStarts(e.range,t.range):(e.range?0:1)-(t.range?0:1)));for(let{range:e,text:o,eol:s}of t){if("number"==typeof s&&(i=s),vt.isEmpty(e)&&!o)continue;const t=n.getValueInRange(e);if(o=o.replace(/\r\n|\n|\r/g,n.eol),t===o)continue;if(Math.max(o.length,t.length)>Or._diffLimit){r.push({range:e,text:o});continue}const a=De(t,o,!1),l=n.offsetAt(vt.lift(e).getStartPosition());for(const e of a){const t=n.positionAt(l+e.originalStart),i=n.positionAt(l+e.originalStart+e.originalLength),s={text:o.substr(e.modifiedStart,e.modifiedLength),range:{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:i.lineNumber,endColumn:i.column}};n.getValueInRange(s.range)!==s.text&&r.push(s)}}return"number"==typeof i&&r.push({eol:i,text:"",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),r}))}computeLinks(e){return Pr(this,void 0,void 0,(function*(){const t=this._getModel(e);return t?function(e){return e&&"function"==typeof e.getLineCount&&"function"==typeof e.getLineContent?It.computeLinks(e):[]}(t):null}))}textualSuggest(e,t,n,r){return Pr(this,void 0,void 0,(function*(){const i=new q(!0),o=new RegExp(n,r),s=new Set;e:for(const n of e){const e=this._getModel(n);if(e)for(const n of e.words(o))if(n!==t&&isNaN(Number(n))&&(s.add(n),s.size>Or._suggestionsLimit))break e}return{words:Array.from(s),duration:i.elapsed()}}))}computeWordRanges(e,t,n,r){return Pr(this,void 0,void 0,(function*(){const i=this._getModel(e);if(!i)return Object.create(null);const o=new RegExp(n,r),s=Object.create(null);for(let e=t.startLineNumber;efunction(){const n=Array.prototype.slice.call(arguments,0);return t(e,n)},r={};for(const t of e)r[t]=n(t);return r}(n,((e,t)=>this._host.fhr(e,t))),i={host:r,getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(i,t),Promise.resolve(te(this._foreignModule))):Promise.reject(new Error("Unexpected usage"))}fmr(e,t){if(!this._foreignModule||"function"!=typeof this._foreignModule[e])return Promise.reject(new Error("Missing requestHandler or method: "+e));try{return Promise.resolve(this._foreignModule[e].apply(this._foreignModule,t))}catch(e){return Promise.reject(e)}}}Or._diffLimit=1e5,Or._suggestionsLimit=1e4,"function"==typeof importScripts&&(I.monaco={editor:void 0,languages:void 0,CancellationTokenSource:class{constructor(e){this._token=void 0,this._parentListener=void 0,this._parentListener=e&&e.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new Ot),this._token}cancel(){this._token?this._token instanceof Ot&&this._token.cancel():this._token=Lt.Cancelled}dispose(e=!1){var t;e&&this.cancel(),null===(t=this._parentListener)||void 0===t||t.dispose(),this._token?this._token instanceof Ot&&this._token.dispose():this._token=Lt.None}},Emitter:Z,KeyCode:Fn,KeyMod:Qn,Position:bt,Range:vt,Selection:Yt,SelectionDirection:Wn,MarkerSeverity:Rn,MarkerTag:Nn,Uri:st,Token:class{constructor(e,t,n){this.offset=e,this.type=t,this.language=n,this._tokenBrand=void 0}toString(){return"("+this.offset+", "+this.type+")"}}});let Wr=!1;function Ur(e){if(Wr)return;Wr=!0;const t=new xe((e=>{self.postMessage(e)}),(t=>new Or(t,e)));self.onmessage=e=>{t.onmessage(e.data)}}var Vr,Kr;self.onmessage=e=>{Wr||Ur(null)},(Kr=Vr||(Vr={}))[Kr.Ident=0]="Ident",Kr[Kr.AtKeyword=1]="AtKeyword",Kr[Kr.String=2]="String",Kr[Kr.BadString=3]="BadString",Kr[Kr.UnquotedString=4]="UnquotedString",Kr[Kr.Hash=5]="Hash",Kr[Kr.Num=6]="Num",Kr[Kr.Percentage=7]="Percentage",Kr[Kr.Dimension=8]="Dimension",Kr[Kr.UnicodeRange=9]="UnicodeRange",Kr[Kr.CDO=10]="CDO",Kr[Kr.CDC=11]="CDC",Kr[Kr.Colon=12]="Colon",Kr[Kr.SemiColon=13]="SemiColon",Kr[Kr.CurlyL=14]="CurlyL",Kr[Kr.CurlyR=15]="CurlyR",Kr[Kr.ParenthesisL=16]="ParenthesisL",Kr[Kr.ParenthesisR=17]="ParenthesisR",Kr[Kr.BracketL=18]="BracketL",Kr[Kr.BracketR=19]="BracketR",Kr[Kr.Whitespace=20]="Whitespace",Kr[Kr.Includes=21]="Includes",Kr[Kr.Dashmatch=22]="Dashmatch",Kr[Kr.SubstringOperator=23]="SubstringOperator",Kr[Kr.PrefixOperator=24]="PrefixOperator",Kr[Kr.SuffixOperator=25]="SuffixOperator",Kr[Kr.Delim=26]="Delim",Kr[Kr.EMS=27]="EMS",Kr[Kr.EXS=28]="EXS",Kr[Kr.Length=29]="Length",Kr[Kr.Angle=30]="Angle",Kr[Kr.Time=31]="Time",Kr[Kr.Freq=32]="Freq",Kr[Kr.Exclamation=33]="Exclamation",Kr[Kr.Resolution=34]="Resolution",Kr[Kr.Comma=35]="Comma",Kr[Kr.Charset=36]="Charset",Kr[Kr.EscapedJavaScript=37]="EscapedJavaScript",Kr[Kr.BadEscapedJavaScript=38]="BadEscapedJavaScript",Kr[Kr.Comment=39]="Comment",Kr[Kr.SingleLineComment=40]="SingleLineComment",Kr[Kr.EOF=41]="EOF",Kr[Kr.CustomToken=42]="CustomToken";var Br=function(){function e(e){this.source=e,this.len=e.length,this.position=0}return e.prototype.substring=function(e,t){return void 0===t&&(t=this.position),this.source.substring(e,t)},e.prototype.eos=function(){return this.len<=this.position},e.prototype.pos=function(){return this.position},e.prototype.goBackTo=function(e){this.position=e},e.prototype.goBack=function(e){this.position-=e},e.prototype.advance=function(e){this.position+=e},e.prototype.nextChar=function(){return this.source.charCodeAt(this.position++)||0},e.prototype.peekChar=function(e){return void 0===e&&(e=0),this.source.charCodeAt(this.position+e)||0},e.prototype.lookbackChar=function(e){return void 0===e&&(e=0),this.source.charCodeAt(this.position-e)||0},e.prototype.advanceIfChar=function(e){return e===this.source.charCodeAt(this.position)&&(this.position++,!0)},e.prototype.advanceIfChars=function(e){if(this.position+e.length>this.source.length)return!1;for(var t=0;t".charCodeAt(0),hi="@".charCodeAt(0),di="#".charCodeAt(0),pi="$".charCodeAt(0),ui="\\".charCodeAt(0),mi="/".charCodeAt(0),fi="\n".charCodeAt(0),gi="\r".charCodeAt(0),bi="\f".charCodeAt(0),vi='"'.charCodeAt(0),yi="'".charCodeAt(0),wi=" ".charCodeAt(0),xi="\t".charCodeAt(0),Si=";".charCodeAt(0),ki=":".charCodeAt(0),Ci="{".charCodeAt(0),_i="}".charCodeAt(0),Ei="[".charCodeAt(0),Fi="]".charCodeAt(0),Ri=",".charCodeAt(0),Ni=".".charCodeAt(0),Di="!".charCodeAt(0),Ti="?".charCodeAt(0),Ai="+".charCodeAt(0),zi={};zi[Si]=Vr.SemiColon,zi[ki]=Vr.Colon,zi[Ci]=Vr.CurlyL,zi[_i]=Vr.CurlyR,zi[Fi]=Vr.BracketR,zi[Ei]=Vr.BracketL,zi[si]=Vr.ParenthesisL,zi[ai]=Vr.ParenthesisR,zi[Ri]=Vr.Comma;var Ii={};Ii.em=Vr.EMS,Ii.ex=Vr.EXS,Ii.px=Vr.Length,Ii.cm=Vr.Length,Ii.mm=Vr.Length,Ii.in=Vr.Length,Ii.pt=Vr.Length,Ii.pc=Vr.Length,Ii.deg=Vr.Angle,Ii.rad=Vr.Angle,Ii.grad=Vr.Angle,Ii.ms=Vr.Time,Ii.s=Vr.Time,Ii.hz=Vr.Freq,Ii.khz=Vr.Freq,Ii["%"]=Vr.Percentage,Ii.fr=Vr.Percentage,Ii.dpi=Vr.Resolution,Ii.dpcm=Vr.Resolution;var Mi=function(){function e(){this.stream=new Br(""),this.ignoreComment=!0,this.ignoreWhitespace=!0,this.inURL=!1}return e.prototype.setSource=function(e){this.stream=new Br(e)},e.prototype.finishToken=function(e,t,n){return{offset:e,len:this.stream.pos()-e,type:t,text:n||this.stream.substring(e)}},e.prototype.substring=function(e,t){return this.stream.substring(e,e+t)},e.prototype.pos=function(){return this.stream.pos()},e.prototype.goBackTo=function(e){this.stream.goBackTo(e)},e.prototype.scanUnquotedString=function(){var e=this.stream.pos(),t=[];return this._unquotedString(t)?this.finishToken(e,Vr.UnquotedString,t.join("")):null},e.prototype.scan=function(){var e=this.trivia();if(null!==e)return e;var t=this.stream.pos();return this.stream.eos()?this.finishToken(t,Vr.EOF):this.scanNext(t)},e.prototype.tryScanUnicode=function(){var e=this.stream.pos();if(!this.stream.eos()&&this._unicodeRange())return this.finishToken(e,Vr.UnicodeRange);this.stream.goBackTo(e)},e.prototype.scanNext=function(e){if(this.stream.advanceIfChars([li,Di,ni,ni]))return this.finishToken(e,Vr.CDO);if(this.stream.advanceIfChars([ni,ni,ci]))return this.finishToken(e,Vr.CDC);var t=[];if(this.ident(t))return this.finishToken(e,Vr.Ident,t.join(""));if(this.stream.advanceIfChar(hi)){if(t=["@"],this._name(t)){var n=t.join("");return"@charset"===n?this.finishToken(e,Vr.Charset,n):this.finishToken(e,Vr.AtKeyword,n)}return this.finishToken(e,Vr.Delim)}if(this.stream.advanceIfChar(di))return t=["#"],this._name(t)?this.finishToken(e,Vr.Hash,t.join("")):this.finishToken(e,Vr.Delim);if(this.stream.advanceIfChar(Di))return this.finishToken(e,Vr.Exclamation);if(this._number()){var r=this.stream.pos();if(t=[this.stream.substring(e,r)],this.stream.advanceIfChar(ii))return this.finishToken(e,Vr.Percentage);if(this.ident(t)){var i=this.stream.substring(r).toLowerCase(),o=Ii[i];return void 0!==o?this.finishToken(e,o,t.join("")):this.finishToken(e,Vr.Dimension,t.join(""))}return this.finishToken(e,Vr.Num)}t=[];var s=this._string(t);return null!==s?this.finishToken(e,s,t.join("")):void 0!==(s=zi[this.stream.peekChar()])?(this.stream.advance(1),this.finishToken(e,s)):this.stream.peekChar(0)===Zr&&this.stream.peekChar(1)===ei?(this.stream.advance(2),this.finishToken(e,Vr.Includes)):this.stream.peekChar(0)===ti&&this.stream.peekChar(1)===ei?(this.stream.advance(2),this.finishToken(e,Vr.Dashmatch)):this.stream.peekChar(0)===oi&&this.stream.peekChar(1)===ei?(this.stream.advance(2),this.finishToken(e,Vr.SubstringOperator)):this.stream.peekChar(0)===Qr&&this.stream.peekChar(1)===ei?(this.stream.advance(2),this.finishToken(e,Vr.PrefixOperator)):this.stream.peekChar(0)===pi&&this.stream.peekChar(1)===ei?(this.stream.advance(2),this.finishToken(e,Vr.SuffixOperator)):(this.stream.nextChar(),this.finishToken(e,Vr.Delim))},e.prototype.trivia=function(){for(;;){var e=this.stream.pos();if(this._whitespace()){if(!this.ignoreWhitespace)return this.finishToken(e,Vr.Whitespace)}else{if(!this.comment())return null;if(!this.ignoreComment)return this.finishToken(e,Vr.Comment)}}},e.prototype.comment=function(){if(this.stream.advanceIfChars([mi,oi])){var e=!1,t=!1;return this.stream.advanceWhileChar((function(n){return t&&n===mi?(e=!0,!1):(t=n===oi,!0)})),e&&this.stream.advance(1),!0}return!1},e.prototype._number=function(){var e,t=0;return this.stream.peekChar()===Ni&&(t=1),(e=this.stream.peekChar(t))>=Xr&&e<=Yr&&(this.stream.advance(t+1),this.stream.advanceWhileChar((function(e){return e>=Xr&&e<=Yr||0===t&&e===Ni})),!0)},e.prototype._newline=function(e){var t=this.stream.peekChar();switch(t){case gi:case bi:case fi:return this.stream.advance(1),e.push(String.fromCharCode(t)),t===gi&&this.stream.advanceIfChar(fi)&&e.push("\n"),!0}return!1},e.prototype._escape=function(e,t){var n=this.stream.peekChar();if(n===ui){this.stream.advance(1),n=this.stream.peekChar();for(var r=0;r<6&&(n>=Xr&&n<=Yr||n>=jr&&n<=qr||n>=Hr&&n<=Gr);)this.stream.advance(1),n=this.stream.peekChar(),r++;if(r>0){try{var i=parseInt(this.stream.substring(this.stream.pos()-r),16);i&&e.push(String.fromCharCode(i))}catch(e){}return n===wi||n===xi?this.stream.advance(1):this._newline([]),!0}if(n!==gi&&n!==bi&&n!==fi)return this.stream.advance(1),e.push(String.fromCharCode(n)),!0;if(t)return this._newline(e)}return!1},e.prototype._stringChar=function(e,t){var n=this.stream.peekChar();return 0!==n&&n!==e&&n!==ui&&n!==gi&&n!==bi&&n!==fi&&(this.stream.advance(1),t.push(String.fromCharCode(n)),!0)},e.prototype._string=function(e){if(this.stream.peekChar()===yi||this.stream.peekChar()===vi){var t=this.stream.nextChar();for(e.push(String.fromCharCode(t));this._stringChar(t,e)||this._escape(e,!0););return this.stream.peekChar()===t?(this.stream.nextChar(),e.push(String.fromCharCode(t)),Vr.String):Vr.BadString}return null},e.prototype._unquotedChar=function(e){var t=this.stream.peekChar();return 0!==t&&t!==ui&&t!==yi&&t!==vi&&t!==si&&t!==ai&&t!==wi&&t!==xi&&t!==fi&&t!==bi&&t!==gi&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._unquotedString=function(e){for(var t=!1;this._unquotedChar(e)||this._escape(e);)t=!0;return t},e.prototype._whitespace=function(){return this.stream.advanceWhileChar((function(e){return e===wi||e===xi||e===fi||e===bi||e===gi}))>0},e.prototype._name=function(e){for(var t=!1;this._identChar(e)||this._escape(e);)t=!0;return t},e.prototype.ident=function(e){var t=this.stream.pos();if(this._minus(e)){if(this._minus(e)||this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}}else if(this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}return this.stream.goBackTo(t),!1},e.prototype._identFirstChar=function(e){var t=this.stream.peekChar();return(t===ri||t>=jr&&t<=$r||t>=Hr&&t<=Jr||t>=128&&t<=65535)&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._minus=function(e){var t=this.stream.peekChar();return t===ni&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._identChar=function(e){var t=this.stream.peekChar();return(t===ri||t===ni||t>=jr&&t<=$r||t>=Hr&&t<=Jr||t>=Xr&&t<=Yr||t>=128&&t<=65535)&&(this.stream.advance(1),e.push(String.fromCharCode(t)),!0)},e.prototype._unicodeRange=function(){if(this.stream.advanceIfChar(Ai)){var e=function(e){return e>=Xr&&e<=Yr||e>=jr&&e<=qr||e>=Hr&&e<=Gr},t=this.stream.advanceWhileChar(e)+this.stream.advanceWhileChar((function(e){return e===Ti}));if(t>=1&&t<=6){if(!this.stream.advanceIfChar(ni))return!0;var n=this.stream.advanceWhileChar(e);if(n>=1&&n<=6)return!0}}return!1},e}();function Pi(e,t){if(e.length0?e.lastIndexOf(t)===n:0===n&&e===t}function Oi(e,t){return void 0===t&&(t=!0),e?e.length<140?e:e.slice(0,140)+(t?"…":""):""}function Wi(e,t){for(var n="";t>0;)1==(1&t)&&(n+=e),e+=e,t>>>=1;return n}var Ui,Vi,Ki,Bi,ji,qi=(Ui=function(e,t){return(Ui=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}Ui(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});function $i(e,t){var n=null;return!e||te.end?null:(e.accept((function(e){return-1===e.offset&&-1===e.length||e.offset<=t&&e.end>=t&&(n?e.length<=n.length&&(n=e):n=e,!0)})),n)}function Hi(e,t){for(var n=$i(e,t),r=[];n;)r.unshift(n),n=n.parent;return r}(Ki=Vi||(Vi={}))[Ki.Undefined=0]="Undefined",Ki[Ki.Identifier=1]="Identifier",Ki[Ki.Stylesheet=2]="Stylesheet",Ki[Ki.Ruleset=3]="Ruleset",Ki[Ki.Selector=4]="Selector",Ki[Ki.SimpleSelector=5]="SimpleSelector",Ki[Ki.SelectorInterpolation=6]="SelectorInterpolation",Ki[Ki.SelectorCombinator=7]="SelectorCombinator",Ki[Ki.SelectorCombinatorParent=8]="SelectorCombinatorParent",Ki[Ki.SelectorCombinatorSibling=9]="SelectorCombinatorSibling",Ki[Ki.SelectorCombinatorAllSiblings=10]="SelectorCombinatorAllSiblings",Ki[Ki.SelectorCombinatorShadowPiercingDescendant=11]="SelectorCombinatorShadowPiercingDescendant",Ki[Ki.Page=12]="Page",Ki[Ki.PageBoxMarginBox=13]="PageBoxMarginBox",Ki[Ki.ClassSelector=14]="ClassSelector",Ki[Ki.IdentifierSelector=15]="IdentifierSelector",Ki[Ki.ElementNameSelector=16]="ElementNameSelector",Ki[Ki.PseudoSelector=17]="PseudoSelector",Ki[Ki.AttributeSelector=18]="AttributeSelector",Ki[Ki.Declaration=19]="Declaration",Ki[Ki.Declarations=20]="Declarations",Ki[Ki.Property=21]="Property",Ki[Ki.Expression=22]="Expression",Ki[Ki.BinaryExpression=23]="BinaryExpression",Ki[Ki.Term=24]="Term",Ki[Ki.Operator=25]="Operator",Ki[Ki.Value=26]="Value",Ki[Ki.StringLiteral=27]="StringLiteral",Ki[Ki.URILiteral=28]="URILiteral",Ki[Ki.EscapedValue=29]="EscapedValue",Ki[Ki.Function=30]="Function",Ki[Ki.NumericValue=31]="NumericValue",Ki[Ki.HexColorValue=32]="HexColorValue",Ki[Ki.RatioValue=33]="RatioValue",Ki[Ki.MixinDeclaration=34]="MixinDeclaration",Ki[Ki.MixinReference=35]="MixinReference",Ki[Ki.VariableName=36]="VariableName",Ki[Ki.VariableDeclaration=37]="VariableDeclaration",Ki[Ki.Prio=38]="Prio",Ki[Ki.Interpolation=39]="Interpolation",Ki[Ki.NestedProperties=40]="NestedProperties",Ki[Ki.ExtendsReference=41]="ExtendsReference",Ki[Ki.SelectorPlaceholder=42]="SelectorPlaceholder",Ki[Ki.Debug=43]="Debug",Ki[Ki.If=44]="If",Ki[Ki.Else=45]="Else",Ki[Ki.For=46]="For",Ki[Ki.Each=47]="Each",Ki[Ki.While=48]="While",Ki[Ki.MixinContentReference=49]="MixinContentReference",Ki[Ki.MixinContentDeclaration=50]="MixinContentDeclaration",Ki[Ki.Media=51]="Media",Ki[Ki.Keyframe=52]="Keyframe",Ki[Ki.FontFace=53]="FontFace",Ki[Ki.Import=54]="Import",Ki[Ki.Namespace=55]="Namespace",Ki[Ki.Invocation=56]="Invocation",Ki[Ki.FunctionDeclaration=57]="FunctionDeclaration",Ki[Ki.ReturnStatement=58]="ReturnStatement",Ki[Ki.MediaQuery=59]="MediaQuery",Ki[Ki.MediaCondition=60]="MediaCondition",Ki[Ki.MediaFeature=61]="MediaFeature",Ki[Ki.FunctionParameter=62]="FunctionParameter",Ki[Ki.FunctionArgument=63]="FunctionArgument",Ki[Ki.KeyframeSelector=64]="KeyframeSelector",Ki[Ki.ViewPort=65]="ViewPort",Ki[Ki.Document=66]="Document",Ki[Ki.AtApplyRule=67]="AtApplyRule",Ki[Ki.CustomPropertyDeclaration=68]="CustomPropertyDeclaration",Ki[Ki.CustomPropertySet=69]="CustomPropertySet",Ki[Ki.ListEntry=70]="ListEntry",Ki[Ki.Supports=71]="Supports",Ki[Ki.SupportsCondition=72]="SupportsCondition",Ki[Ki.NamespacePrefix=73]="NamespacePrefix",Ki[Ki.GridLine=74]="GridLine",Ki[Ki.Plugin=75]="Plugin",Ki[Ki.UnknownAtRule=76]="UnknownAtRule",Ki[Ki.Use=77]="Use",Ki[Ki.ModuleConfiguration=78]="ModuleConfiguration",Ki[Ki.Forward=79]="Forward",Ki[Ki.ForwardVisibility=80]="ForwardVisibility",Ki[Ki.Module=81]="Module",Ki[Ki.UnicodeRange=82]="UnicodeRange",(ji=Bi||(Bi={}))[ji.Mixin=0]="Mixin",ji[ji.Rule=1]="Rule",ji[ji.Variable=2]="Variable",ji[ji.Function=3]="Function",ji[ji.Keyframe=4]="Keyframe",ji[ji.Unknown=5]="Unknown",ji[ji.Module=6]="Module",ji[ji.Forward=7]="Forward",ji[ji.ForwardVisibility=8]="ForwardVisibility";var Gi,Ji,Xi=function(){function e(e,t,n){void 0===e&&(e=-1),void 0===t&&(t=-1),this.parent=null,this.offset=e,this.length=t,n&&(this.nodeType=n)}return Object.defineProperty(e.prototype,"end",{get:function(){return this.offset+this.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"type",{get:function(){return this.nodeType||Vi.Undefined},set:function(e){this.nodeType=e},enumerable:!1,configurable:!0}),e.prototype.getTextProvider=function(){for(var e=this;e&&!e.textProvider;)e=e.parent;return e?e.textProvider:function(){return"unknown"}},e.prototype.getText=function(){return this.getTextProvider()(this.offset,this.length)},e.prototype.matches=function(e){return this.length===e.length&&this.getTextProvider()(this.offset,this.length)===e},e.prototype.startsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.offset,e.length)===e},e.prototype.endsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.end-e.length,e.length)===e},e.prototype.accept=function(e){if(e(this)&&this.children)for(var t=0,n=this.children;t=0&&e.parent.children.splice(n,1)}e.parent=this;var r=this.children;return r||(r=this.children=[]),-1!==t?r.splice(t,0,e):r.push(e),e},e.prototype.attachTo=function(e,t){return void 0===t&&(t=-1),e&&e.adoptChild(this,t),this},e.prototype.collectIssues=function(e){this.issues&&e.push.apply(e,this.issues)},e.prototype.addIssue=function(e){this.issues||(this.issues=[]),this.issues.push(e)},e.prototype.hasIssue=function(e){return Array.isArray(this.issues)&&this.issues.some((function(t){return t.getRule()===e}))},e.prototype.isErroneous=function(e){return void 0===e&&(e=!1),!!(this.issues&&this.issues.length>0)||e&&Array.isArray(this.children)&&this.children.some((function(e){return e.isErroneous(!0)}))},e.prototype.setNode=function(e,t,n){return void 0===n&&(n=-1),!!t&&(t.attachTo(this,n),this[e]=t,!0)},e.prototype.addChild=function(e){return!!e&&(this.children||(this.children=[]),e.attachTo(this),this.updateOffsetAndLength(e),!0)},e.prototype.updateOffsetAndLength=function(e){(e.offsetthis.end||-1===this.length)&&(this.length=t-this.offset)},e.prototype.hasChildren=function(){return!!this.children&&this.children.length>0},e.prototype.getChildren=function(){return this.children?this.children.slice(0):[]},e.prototype.getChild=function(e){return this.children&&e=0;n--)if((t=this.children[n]).offset<=e)return t;return null},e.prototype.findChildAtOffset=function(e,t){var n=this.findFirstChildBeforeOffset(e);return n&&n.end>=e?t&&n.findChildAtOffset(e,!0)||n:null},e.prototype.encloses=function(e){return this.offset<=e.offset&&this.offset+this.length>=e.offset+e.length},e.prototype.getParent=function(){for(var e=this.parent;e instanceof Yi;)e=e.parent;return e},e.prototype.findParent=function(e){for(var t=this;t&&t.type!==e;)t=t.parent;return t},e.prototype.findAParent=function(){for(var e=[],t=0;t{let r=n[0];return void 0!==t[r]?t[r]:e})),n}(t,n)}function ms(e){return us}var fs,gs,bs,vs,ys,ws,xs,Ss,ks,Cs,_s,Es,Fs,Rs,Ns,Ds,Ts,As,zs,Is,Ms,Ps,Ls,Os,Ws,Us,Vs,Ks,Bs,js,qs,$s,Hs,Gs,Js,Xs,Ys,Zs,Qs,ea,ta,na,ra,ia,oa,sa,aa,la,ca,ha=ms(),da=function(e,t){this.id=e,this.message=t},pa={NumberExpected:new da("css-numberexpected",ha("vs/language/css/css.worker","expected.number","number expected")),ConditionExpected:new da("css-conditionexpected",ha("vs/language/css/css.worker","expected.condt","condition expected")),RuleOrSelectorExpected:new da("css-ruleorselectorexpected",ha("vs/language/css/css.worker","expected.ruleorselector","at-rule or selector expected")),DotExpected:new da("css-dotexpected",ha("vs/language/css/css.worker","expected.dot","dot expected")),ColonExpected:new da("css-colonexpected",ha("vs/language/css/css.worker","expected.colon","colon expected")),SemiColonExpected:new da("css-semicolonexpected",ha("vs/language/css/css.worker","expected.semicolon","semi-colon expected")),TermExpected:new da("css-termexpected",ha("vs/language/css/css.worker","expected.term","term expected")),ExpressionExpected:new da("css-expressionexpected",ha("vs/language/css/css.worker","expected.expression","expression expected")),OperatorExpected:new da("css-operatorexpected",ha("vs/language/css/css.worker","expected.operator","operator expected")),IdentifierExpected:new da("css-identifierexpected",ha("vs/language/css/css.worker","expected.ident","identifier expected")),PercentageExpected:new da("css-percentageexpected",ha("vs/language/css/css.worker","expected.percentage","percentage expected")),URIOrStringExpected:new da("css-uriorstringexpected",ha("vs/language/css/css.worker","expected.uriorstring","uri or string expected")),URIExpected:new da("css-uriexpected",ha("vs/language/css/css.worker","expected.uri","URI expected")),VariableNameExpected:new da("css-varnameexpected",ha("vs/language/css/css.worker","expected.varname","variable name expected")),VariableValueExpected:new da("css-varvalueexpected",ha("vs/language/css/css.worker","expected.varvalue","variable value expected")),PropertyValueExpected:new da("css-propertyvalueexpected",ha("vs/language/css/css.worker","expected.propvalue","property value expected")),LeftCurlyExpected:new da("css-lcurlyexpected",ha("vs/language/css/css.worker","expected.lcurly","{ expected")),RightCurlyExpected:new da("css-rcurlyexpected",ha("vs/language/css/css.worker","expected.rcurly","} expected")),LeftSquareBracketExpected:new da("css-rbracketexpected",ha("vs/language/css/css.worker","expected.lsquare","[ expected")),RightSquareBracketExpected:new da("css-lbracketexpected",ha("vs/language/css/css.worker","expected.rsquare","] expected")),LeftParenthesisExpected:new da("css-lparentexpected",ha("vs/language/css/css.worker","expected.lparen","( expected")),RightParenthesisExpected:new da("css-rparentexpected",ha("vs/language/css/css.worker","expected.rparent",") expected")),CommaExpected:new da("css-commaexpected",ha("vs/language/css/css.worker","expected.comma","comma expected")),PageDirectiveOrDeclarationExpected:new da("css-pagedirordeclexpected",ha("vs/language/css/css.worker","expected.pagedirordecl","page directive or declaraton expected")),UnknownAtRule:new da("css-unknownatrule",ha("vs/language/css/css.worker","unknown.atrule","at-rule unknown")),UnknownKeyword:new da("css-unknownkeyword",ha("vs/language/css/css.worker","unknown.keyword","unknown keyword")),SelectorExpected:new da("css-selectorexpected",ha("vs/language/css/css.worker","expected.selector","selector expected")),StringLiteralExpected:new da("css-stringliteralexpected",ha("vs/language/css/css.worker","expected.stringliteral","string literal expected")),WhitespaceExpected:new da("css-whitespaceexpected",ha("vs/language/css/css.worker","expected.whitespace","whitespace expected")),MediaQueryExpected:new da("css-mediaqueryexpected",ha("vs/language/css/css.worker","expected.mediaquery","media query expected")),IdentifierOrWildcardExpected:new da("css-idorwildcardexpected",ha("vs/language/css/css.worker","expected.idorwildcard","identifier or wildcard expected")),WildcardExpected:new da("css-wildcardexpected",ha("vs/language/css/css.worker","expected.wildcard","wildcard expected")),IdentifierOrVariableExpected:new da("css-idorvarexpected",ha("vs/language/css/css.worker","expected.idorvar","identifier or variable expected"))};(gs=fs||(fs={})).MIN_VALUE=-2147483648,gs.MAX_VALUE=2147483647,(vs=bs||(bs={})).MIN_VALUE=0,vs.MAX_VALUE=2147483647,(ws=ys||(ys={})).create=function(e,t){return e===Number.MAX_VALUE&&(e=bs.MAX_VALUE),t===Number.MAX_VALUE&&(t=bs.MAX_VALUE),{line:e,character:t}},ws.is=function(e){var t=e;return pl.objectLiteral(t)&&pl.uinteger(t.line)&&pl.uinteger(t.character)},(Ss=xs||(xs={})).create=function(e,t,n,r){if(pl.uinteger(e)&&pl.uinteger(t)&&pl.uinteger(n)&&pl.uinteger(r))return{start:ys.create(e,t),end:ys.create(n,r)};if(ys.is(e)&&ys.is(t))return{start:e,end:t};throw new Error("Range#create called with invalid arguments["+e+", "+t+", "+n+", "+r+"]")},Ss.is=function(e){var t=e;return pl.objectLiteral(t)&&ys.is(t.start)&&ys.is(t.end)},(Cs=ks||(ks={})).create=function(e,t){return{uri:e,range:t}},Cs.is=function(e){var t=e;return pl.defined(t)&&xs.is(t.range)&&(pl.string(t.uri)||pl.undefined(t.uri))},(Es=_s||(_s={})).create=function(e,t,n,r){return{targetUri:e,targetRange:t,targetSelectionRange:n,originSelectionRange:r}},Es.is=function(e){var t=e;return pl.defined(t)&&xs.is(t.targetRange)&&pl.string(t.targetUri)&&(xs.is(t.targetSelectionRange)||pl.undefined(t.targetSelectionRange))&&(xs.is(t.originSelectionRange)||pl.undefined(t.originSelectionRange))},(Rs=Fs||(Fs={})).create=function(e,t,n,r){return{red:e,green:t,blue:n,alpha:r}},Rs.is=function(e){var t=e;return pl.numberRange(t.red,0,1)&&pl.numberRange(t.green,0,1)&&pl.numberRange(t.blue,0,1)&&pl.numberRange(t.alpha,0,1)},(Ds=Ns||(Ns={})).create=function(e,t){return{range:e,color:t}},Ds.is=function(e){var t=e;return xs.is(t.range)&&Fs.is(t.color)},(As=Ts||(Ts={})).create=function(e,t,n){return{label:e,textEdit:t,additionalTextEdits:n}},As.is=function(e){var t=e;return pl.string(t.label)&&(pl.undefined(t.textEdit)||Gs.is(t))&&(pl.undefined(t.additionalTextEdits)||pl.typedArray(t.additionalTextEdits,Gs.is))},(Is=zs||(zs={})).Comment="comment",Is.Imports="imports",Is.Region="region",(Ps=Ms||(Ms={})).create=function(e,t,n,r,i){var o={startLine:e,endLine:t};return pl.defined(n)&&(o.startCharacter=n),pl.defined(r)&&(o.endCharacter=r),pl.defined(i)&&(o.kind=i),o},Ps.is=function(e){var t=e;return pl.uinteger(t.startLine)&&pl.uinteger(t.startLine)&&(pl.undefined(t.startCharacter)||pl.uinteger(t.startCharacter))&&(pl.undefined(t.endCharacter)||pl.uinteger(t.endCharacter))&&(pl.undefined(t.kind)||pl.string(t.kind))},(Os=Ls||(Ls={})).create=function(e,t){return{location:e,message:t}},Os.is=function(e){var t=e;return pl.defined(t)&&ks.is(t.location)&&pl.string(t.message)},(Us=Ws||(Ws={})).Error=1,Us.Warning=2,Us.Information=3,Us.Hint=4,(Ks=Vs||(Vs={})).Unnecessary=1,Ks.Deprecated=2,(Bs||(Bs={})).is=function(e){var t=e;return null!=t&&pl.string(t.href)},(qs=js||(js={})).create=function(e,t,n,r,i,o){var s={range:e,message:t};return pl.defined(n)&&(s.severity=n),pl.defined(r)&&(s.code=r),pl.defined(i)&&(s.source=i),pl.defined(o)&&(s.relatedInformation=o),s},qs.is=function(e){var t,n=e;return pl.defined(n)&&xs.is(n.range)&&pl.string(n.message)&&(pl.number(n.severity)||pl.undefined(n.severity))&&(pl.integer(n.code)||pl.string(n.code)||pl.undefined(n.code))&&(pl.undefined(n.codeDescription)||pl.string(null===(t=n.codeDescription)||void 0===t?void 0:t.href))&&(pl.string(n.source)||pl.undefined(n.source))&&(pl.undefined(n.relatedInformation)||pl.typedArray(n.relatedInformation,Ls.is))},(Hs=$s||($s={})).create=function(e,t){for(var n=[],r=2;r0&&(i.arguments=n),i},Hs.is=function(e){var t=e;return pl.defined(t)&&pl.string(t.title)&&pl.string(t.command)},(Js=Gs||(Gs={})).replace=function(e,t){return{range:e,newText:t}},Js.insert=function(e,t){return{range:{start:e,end:e},newText:t}},Js.del=function(e){return{range:e,newText:""}},Js.is=function(e){var t=e;return pl.objectLiteral(t)&&pl.string(t.newText)&&xs.is(t.range)},(Ys=Xs||(Xs={})).create=function(e,t,n){var r={label:e};return void 0!==t&&(r.needsConfirmation=t),void 0!==n&&(r.description=n),r},Ys.is=function(e){var t=e;return void 0!==t&&pl.objectLiteral(t)&&pl.string(t.label)&&(pl.boolean(t.needsConfirmation)||void 0===t.needsConfirmation)&&(pl.string(t.description)||void 0===t.description)},(Zs||(Zs={})).is=function(e){return"string"==typeof e},(ea=Qs||(Qs={})).replace=function(e,t,n){return{range:e,newText:t,annotationId:n}},ea.insert=function(e,t,n){return{range:{start:e,end:e},newText:t,annotationId:n}},ea.del=function(e,t){return{range:e,newText:"",annotationId:t}},ea.is=function(e){var t=e;return Gs.is(t)&&(Xs.is(t.annotationId)||Zs.is(t.annotationId))},(na=ta||(ta={})).create=function(e,t){return{textDocument:e,edits:t}},na.is=function(e){var t=e;return pl.defined(t)&&ba.is(t.textDocument)&&Array.isArray(t.edits)},(ia=ra||(ra={})).create=function(e,t,n){var r={kind:"create",uri:e};return void 0===t||void 0===t.overwrite&&void 0===t.ignoreIfExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},ia.is=function(e){var t=e;return t&&"create"===t.kind&&pl.string(t.uri)&&(void 0===t.options||(void 0===t.options.overwrite||pl.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||pl.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||Zs.is(t.annotationId))},(sa=oa||(oa={})).create=function(e,t,n,r){var i={kind:"rename",oldUri:e,newUri:t};return void 0===n||void 0===n.overwrite&&void 0===n.ignoreIfExists||(i.options=n),void 0!==r&&(i.annotationId=r),i},sa.is=function(e){var t=e;return t&&"rename"===t.kind&&pl.string(t.oldUri)&&pl.string(t.newUri)&&(void 0===t.options||(void 0===t.options.overwrite||pl.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||pl.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||Zs.is(t.annotationId))},(la=aa||(aa={})).create=function(e,t,n){var r={kind:"delete",uri:e};return void 0===t||void 0===t.recursive&&void 0===t.ignoreIfNotExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},la.is=function(e){var t=e;return t&&"delete"===t.kind&&pl.string(t.uri)&&(void 0===t.options||(void 0===t.options.recursive||pl.boolean(t.options.recursive))&&(void 0===t.options.ignoreIfNotExists||pl.boolean(t.options.ignoreIfNotExists)))&&(void 0===t.annotationId||Zs.is(t.annotationId))},(ca||(ca={})).is=function(e){var t=e;return t&&(void 0!==t.changes||void 0!==t.documentChanges)&&(void 0===t.documentChanges||t.documentChanges.every((function(e){return pl.string(e.kind)?ra.is(e)||oa.is(e)||aa.is(e):ta.is(e)})))};var ua,ma,fa,ga,ba,va,ya,wa,xa,Sa,ka,Ca,_a,Ea,Fa,Ra,Na,Da,Ta,Aa,za,Ia,Ma,Pa,La,Oa,Wa,Ua,Va,Ka,Ba,ja,qa,$a,Ha,Ga,Ja,Xa,Ya,Za,Qa,el,tl,nl,rl,il,ol,sl,al,ll,cl,hl=function(){function e(e,t){this.edits=e,this.changeAnnotations=t}return e.prototype.insert=function(e,t,n){var r,i;if(void 0===n?r=Gs.insert(e,t):Zs.is(n)?(i=n,r=Qs.insert(e,t,n)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(n),r=Qs.insert(e,t,i)),this.edits.push(r),void 0!==i)return i},e.prototype.replace=function(e,t,n){var r,i;if(void 0===n?r=Gs.replace(e,t):Zs.is(n)?(i=n,r=Qs.replace(e,t,n)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(n),r=Qs.replace(e,t,i)),this.edits.push(r),void 0!==i)return i},e.prototype.delete=function(e,t){var n,r;if(void 0===t?n=Gs.del(e):Zs.is(t)?(r=t,n=Qs.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),r=this.changeAnnotations.manage(t),n=Qs.del(e,r)),this.edits.push(n),void 0!==r)return r},e.prototype.add=function(e){this.edits.push(e)},e.prototype.all=function(){return this.edits},e.prototype.clear=function(){this.edits.splice(0,this.edits.length)},e.prototype.assertChangeAnnotations=function(e){if(void 0===e)throw new Error("Text edit change is not configured to manage change annotations.")},e}(),dl=function(){function e(e){this._annotations=void 0===e?Object.create(null):e,this._counter=0,this._size=0}return e.prototype.all=function(){return this._annotations},Object.defineProperty(e.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.manage=function(e,t){var n;if(Zs.is(e)?n=e:(n=this.nextId(),t=e),void 0!==this._annotations[n])throw new Error("Id "+n+" is already in use.");if(void 0===t)throw new Error("No annotation provided for id "+n);return this._annotations[n]=t,this._size++,n},e.prototype.nextId=function(){return this._counter++,this._counter.toString()},e}();!function(){function e(e){var t=this;this._textEditChanges=Object.create(null),void 0!==e?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new dl(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach((function(e){if(ta.is(e)){var n=new hl(e.edits,t._changeAnnotations);t._textEditChanges[e.textDocument.uri]=n}}))):e.changes&&Object.keys(e.changes).forEach((function(n){var r=new hl(e.changes[n]);t._textEditChanges[n]=r}))):this._workspaceEdit={}}Object.defineProperty(e.prototype,"edit",{get:function(){return this.initDocumentChanges(),void 0!==this._changeAnnotations&&(0===this._changeAnnotations.size?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),e.prototype.getTextEditChange=function(e){if(ba.is(e)){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var t={uri:e.uri,version:e.version};if(!(r=this._textEditChanges[t.uri])){var n={textDocument:t,edits:i=[]};this._workspaceEdit.documentChanges.push(n),r=new hl(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}if(this.initChanges(),void 0===this._workspaceEdit.changes)throw new Error("Workspace edit is not configured for normal text edit changes.");var r;if(!(r=this._textEditChanges[e])){var i=[];this._workspaceEdit.changes[e]=i,r=new hl(i),this._textEditChanges[e]=r}return r},e.prototype.initDocumentChanges=function(){void 0===this._workspaceEdit.documentChanges&&void 0===this._workspaceEdit.changes&&(this._changeAnnotations=new dl,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},e.prototype.initChanges=function(){void 0===this._workspaceEdit.documentChanges&&void 0===this._workspaceEdit.changes&&(this._workspaceEdit.changes=Object.create(null))},e.prototype.createFile=function(e,t,n){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var r,i,o;if(Xs.is(t)||Zs.is(t)?r=t:n=t,void 0===r?i=ra.create(e,n):(o=Zs.is(r)?r:this._changeAnnotations.manage(r),i=ra.create(e,n,o)),this._workspaceEdit.documentChanges.push(i),void 0!==o)return o},e.prototype.renameFile=function(e,t,n,r){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var i,o,s;if(Xs.is(n)||Zs.is(n)?i=n:r=n,void 0===i?o=oa.create(e,t,r):(s=Zs.is(i)?i:this._changeAnnotations.manage(i),o=oa.create(e,t,r,s)),this._workspaceEdit.documentChanges.push(o),void 0!==s)return s},e.prototype.deleteFile=function(e,t,n){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var r,i,o;if(Xs.is(t)||Zs.is(t)?r=t:n=t,void 0===r?i=aa.create(e,n):(o=Zs.is(r)?r:this._changeAnnotations.manage(r),i=aa.create(e,n,o)),this._workspaceEdit.documentChanges.push(i),void 0!==o)return o}}(),(ma=ua||(ua={})).create=function(e){return{uri:e}},ma.is=function(e){var t=e;return pl.defined(t)&&pl.string(t.uri)},(ga=fa||(fa={})).create=function(e,t){return{uri:e,version:t}},ga.is=function(e){var t=e;return pl.defined(t)&&pl.string(t.uri)&&pl.integer(t.version)},(va=ba||(ba={})).create=function(e,t){return{uri:e,version:t}},va.is=function(e){var t=e;return pl.defined(t)&&pl.string(t.uri)&&(null===t.version||pl.integer(t.version))},(wa=ya||(ya={})).create=function(e,t,n,r){return{uri:e,languageId:t,version:n,text:r}},wa.is=function(e){var t=e;return pl.defined(t)&&pl.string(t.uri)&&pl.string(t.languageId)&&pl.integer(t.version)&&pl.string(t.text)},(Sa=xa||(xa={})).PlainText="plaintext",Sa.Markdown="markdown",function(e){e.is=function(t){var n=t;return n===e.PlainText||n===e.Markdown}}(xa||(xa={})),(ka||(ka={})).is=function(e){var t=e;return pl.objectLiteral(e)&&xa.is(t.kind)&&pl.string(t.value)},(_a=Ca||(Ca={})).Text=1,_a.Method=2,_a.Function=3,_a.Constructor=4,_a.Field=5,_a.Variable=6,_a.Class=7,_a.Interface=8,_a.Module=9,_a.Property=10,_a.Unit=11,_a.Value=12,_a.Enum=13,_a.Keyword=14,_a.Snippet=15,_a.Color=16,_a.File=17,_a.Reference=18,_a.Folder=19,_a.EnumMember=20,_a.Constant=21,_a.Struct=22,_a.Event=23,_a.Operator=24,_a.TypeParameter=25,(Fa=Ea||(Ea={})).PlainText=1,Fa.Snippet=2,(Ra||(Ra={})).Deprecated=1,(Da=Na||(Na={})).create=function(e,t,n){return{newText:e,insert:t,replace:n}},Da.is=function(e){var t=e;return t&&pl.string(t.newText)&&xs.is(t.insert)&&xs.is(t.replace)},(Aa=Ta||(Ta={})).asIs=1,Aa.adjustIndentation=2,(za||(za={})).create=function(e){return{label:e}},(Ia||(Ia={})).create=function(e,t){return{items:e||[],isIncomplete:!!t}},(Pa=Ma||(Ma={})).fromPlainText=function(e){return e.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")},Pa.is=function(e){var t=e;return pl.string(t)||pl.objectLiteral(t)&&pl.string(t.language)&&pl.string(t.value)},(La||(La={})).is=function(e){var t=e;return!!t&&pl.objectLiteral(t)&&(ka.is(t.contents)||Ma.is(t.contents)||pl.typedArray(t.contents,Ma.is))&&(void 0===e.range||xs.is(e.range))},(Oa||(Oa={})).create=function(e,t){return t?{label:e,documentation:t}:{label:e}},(Wa||(Wa={})).create=function(e,t){for(var n=[],r=2;r=0;s--){var a=i[s],l=e.offsetAt(a.range.start),c=e.offsetAt(a.range.end);if(!(c<=o))throw new Error("Overlapping edit");r=r.substring(0,l)+a.newText+r.substring(c,r.length),o=l}return r}}(cl||(cl={}));var pl,ul,ml,fl=function(){function e(e,t,n,r){this._uri=e,this._languageId=t,this._version=n,this._content=r,this._lineOffsets=void 0}return Object.defineProperty(e.prototype,"uri",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"languageId",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"version",{get:function(){return this._version},enumerable:!1,configurable:!0}),e.prototype.getText=function(e){if(e){var t=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(t,n)}return this._content},e.prototype.update=function(e,t){this._content=e.text,this._version=t,this._lineOffsets=void 0},e.prototype.getLineOffsets=function(){if(void 0===this._lineOffsets){for(var e=[],t=this._content,n=!0,r=0;r0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},e.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),n=0,r=t.length;if(0===r)return ys.create(0,e);for(;ne?r=i:n=i+1}var o=n-1;return ys.create(o,e-t[o])},e.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var n=t[e.line],r=e.line+1e?r=i:n=i+1}let i=n-1;return{line:i,character:e-t[i]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let n=t[e.line],r=e.line+1n.line||t.line===n.line&&t.character>n.character?{start:n,end:t}:e}function _l(e){const t=Cl(e.range);return t!==e.range?{newText:e.newText,range:t}:e}(bl=gl||(gl={})).create=function(e,t,n,r){return new xl(e,t,n,r)},bl.update=function(e,t,n){if(e instanceof xl)return e.update(t,n),e;throw new Error("TextDocument.update: document must be created by TextDocument.create")},bl.applyEdits=function(e,t){let n=e.getText(),r=Sl(t.map(_l),((e,t)=>{let n=e.range.start.line-t.range.start.line;return 0===n?e.range.start.character-t.range.start.character:n})),i=0;const o=[];for(const t of r){let r=e.offsetAt(t.range.start);if(ri&&o.push(n.substring(i,r)),t.newText.length&&o.push(t.newText),i=e.offsetAt(t.range.end)}return o.push(n.substr(i)),o.join("")},(vl||(vl={})).LATEST={textDocument:{completion:{completionItem:{documentationFormat:[xa.Markdown,xa.PlainText]}},hover:{contentFormat:[xa.Markdown,xa.PlainText]}}},(wl=yl||(yl={}))[wl.Unknown=0]="Unknown",wl[wl.File=1]="File",wl[wl.Directory=2]="Directory",wl[wl.SymbolicLink=64]="SymbolicLink";var El={E:"Edge",FF:"Firefox",S:"Safari",C:"Chrome",IE:"IE",O:"Opera"};function Fl(e){switch(e){case"experimental":return"⚠️ Property is experimental. Be cautious when using it.️\n\n";case"nonstandard":return"🚨️ Property is nonstandard. Avoid using it.\n\n";case"obsolete":return"🚨️️️ Property is obsolete. Avoid using it.\n\n";default:return""}}function Rl(e,t,n){var r;if(""!==(r=t?{kind:"markdown",value:Tl(e,n)}:{kind:"plaintext",value:Dl(e,n)}).value)return r}function Nl(e){return(e=e.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")).replace(//g,">")}function Dl(e,t){if(!e.description||""===e.description)return"";if("string"!=typeof e.description)return e.description.value;var n="";if(!1!==(null==t?void 0:t.documentation)){e.status&&(n+=Fl(e.status)),n+=e.description;var r=Al(e.browsers);r&&(n+="\n("+r+")"),"syntax"in e&&(n+="\n\nSyntax: ".concat(e.syntax))}return e.references&&e.references.length>0&&!1!==(null==t?void 0:t.references)&&(n.length>0&&(n+="\n\n"),n+=e.references.map((function(e){return"".concat(e.name,": ").concat(e.url)})).join(" | ")),n}function Tl(e,t){if(!e.description||""===e.description)return"";var n="";if(!1!==(null==t?void 0:t.documentation)){e.status&&(n+=Fl(e.status)),"string"==typeof e.description?n+=Nl(e.description):n+=e.description.kind===xa.Markdown?e.description.value:Nl(e.description.value);var r=Al(e.browsers);r&&(n+="\n\n("+Nl(r)+")"),"syntax"in e&&e.syntax&&(n+="\n\nSyntax: ".concat(Nl(e.syntax)))}return e.references&&e.references.length>0&&!1!==(null==t?void 0:t.references)&&(n.length>0&&(n+="\n\n"),n+=e.references.map((function(e){return"[".concat(e.name,"](").concat(e.url,")")})).join(" | ")),n}function Al(e){return void 0===e&&(e=[]),0===e.length?null:e.map((function(e){var t="",n=e.match(/([A-Z]+)(\d+)?/),r=n[1],i=n[2];return r in El&&(t+=El[r]),i&&(t+=" "+i),t})).join(", ")}var zl=ms(),Il=[{func:"rgb($red, $green, $blue)",desc:zl("vs/language/css/css.worker","css.builtin.rgb","Creates a Color from red, green, and blue values.")},{func:"rgba($red, $green, $blue, $alpha)",desc:zl("vs/language/css/css.worker","css.builtin.rgba","Creates a Color from red, green, blue, and alpha values.")},{func:"hsl($hue, $saturation, $lightness)",desc:zl("vs/language/css/css.worker","css.builtin.hsl","Creates a Color from hue, saturation, and lightness values.")},{func:"hsla($hue, $saturation, $lightness, $alpha)",desc:zl("vs/language/css/css.worker","css.builtin.hsla","Creates a Color from hue, saturation, lightness, and alpha values.")},{func:"hwb($hue $white $black)",desc:zl("vs/language/css/css.worker","css.builtin.hwb","Creates a Color from hue, white and black.")}],Ml={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rebeccapurple:"#663399",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},Pl={currentColor:"The value of the 'color' property. The computed value of the 'currentColor' keyword is the computed value of the 'color' property. If the 'currentColor' keyword is set on the 'color' property itself, it is treated as 'color:inherit' at parse time.",transparent:"Fully transparent. This keyword can be considered a shorthand for rgba(0,0,0,0) which is its computed value."};function Ll(e,t){var n=e.getText().match(/^([-+]?[0-9]*\.?[0-9]+)(%?)$/);if(n){n[2]&&(t=100);var r=parseFloat(n[1])/t;if(r>=0&&r<=1)return r}throw new Error}function Ol(e){var t=e.getText(),n=t.match(/^([-+]?[0-9]*\.?[0-9]+)(deg|rad|grad|turn)?$/);if(n)switch(n[2]){case"deg":return parseFloat(t)%360;case"rad":return 180*parseFloat(t)/Math.PI%360;case"grad":return.9*parseFloat(t)%360;case"turn":return 360*parseFloat(t)%360;default:if(void 0===n[2])return parseFloat(t)%360}throw new Error}function Wl(e){return e<48?0:e<=57?e-48:(e<97&&(e+=32),e>=97&&e<=102?e-97+10:0)}function Ul(e){if("#"!==e[0])return null;switch(e.length){case 4:return{red:17*Wl(e.charCodeAt(1))/255,green:17*Wl(e.charCodeAt(2))/255,blue:17*Wl(e.charCodeAt(3))/255,alpha:1};case 5:return{red:17*Wl(e.charCodeAt(1))/255,green:17*Wl(e.charCodeAt(2))/255,blue:17*Wl(e.charCodeAt(3))/255,alpha:17*Wl(e.charCodeAt(4))/255};case 7:return{red:(16*Wl(e.charCodeAt(1))+Wl(e.charCodeAt(2)))/255,green:(16*Wl(e.charCodeAt(3))+Wl(e.charCodeAt(4)))/255,blue:(16*Wl(e.charCodeAt(5))+Wl(e.charCodeAt(6)))/255,alpha:1};case 9:return{red:(16*Wl(e.charCodeAt(1))+Wl(e.charCodeAt(2)))/255,green:(16*Wl(e.charCodeAt(3))+Wl(e.charCodeAt(4)))/255,blue:(16*Wl(e.charCodeAt(5))+Wl(e.charCodeAt(6)))/255,alpha:(16*Wl(e.charCodeAt(7))+Wl(e.charCodeAt(8)))/255}}return null}function Vl(e,t,n,r){if(void 0===r&&(r=1),0===t)return{red:n,green:n,blue:n,alpha:r};var i=function(e,t,n){for(;n<0;)n+=6;for(;n>=6;)n-=6;return n<1?(t-e)*n+e:n<3?t:n<4?(t-e)*(4-n)+e:e},o=n<=.5?n*(t+1):n+t-n*t,s=2*n-o;return{red:i(s,o,2+(e/=60)),green:i(s,o,e),blue:i(s,o,e-2),alpha:r}}function Kl(e){var t=e.red,n=e.green,r=e.blue,i=e.alpha,o=Math.max(t,n,r),s=Math.min(t,n,r),a=0,l=0,c=(s+o)/2,h=o-s;if(h>0){switch(l=Math.min(c<=.5?h/(2*c):h/(2-2*c),1),o){case t:a=(n-r)/h+(ne.offset?i-e.offset:0}return e},e.prototype.markError=function(e,t,n,r){this.token!==this.lastErrorToken&&(e.addIssue(new ds(e,t,Gi.Error,void 0,this.token.offset,this.token.len)),this.lastErrorToken=this.token),(n||r)&&this.resync(n,r)},e.prototype.parseStylesheet=function(e){var t=e.version,n=e.getText();return this.internalParse(n,this._parseStylesheet,(function(r,i){if(e.version!==t)throw new Error("Underlying model has changed, AST is no longer valid");return n.substr(r,i)}))},e.prototype.internalParse=function(e,t,n){this.scanner.setSource(e),this.token=this.scanner.scan();var r=t.bind(this)();return r&&(r.textProvider=n||function(t,n){return e.substr(t,n)}),r},e.prototype._parseStylesheet=function(){for(var e=this.create(eo);e.addChild(this._parseStylesheetStart()););var t=!1;do{var n=!1;do{n=!1;var r=this._parseStylesheetStatement();for(r&&(e.addChild(r),n=!0,t=!1,this.peek(Vr.EOF)||!this._needsSemicolonAfter(r)||this.accept(Vr.SemiColon)||this.markError(e,pa.SemiColonExpected));this.accept(Vr.SemiColon)||this.accept(Vr.CDO)||this.accept(Vr.CDC);)n=!0,t=!1}while(n);if(this.peek(Vr.EOF))break;t||(this.peek(Vr.AtKeyword)?this.markError(e,pa.UnknownAtRule):this.markError(e,pa.RuleOrSelectorExpected),t=!0),this.consumeToken()}while(!this.peek(Vr.EOF));return this.finish(e)},e.prototype._parseStylesheetStart=function(){return this._parseCharset()},e.prototype._parseStylesheetStatement=function(e){return void 0===e&&(e=!1),this.peek(Vr.AtKeyword)?this._parseStylesheetAtStatement(e):this._parseRuleset(e)},e.prototype._parseStylesheetAtStatement=function(e){return void 0===e&&(e=!1),this._parseImport()||this._parseMedia(e)||this._parsePage()||this._parseFontFace()||this._parseKeyframe()||this._parseSupports(e)||this._parseViewPort()||this._parseNamespace()||this._parseDocument()||this._parseUnknownAtRule()},e.prototype._tryParseRuleset=function(e){var t=this.mark();if(this._parseSelector(e)){for(;this.accept(Vr.Comma)&&this._parseSelector(e););if(this.accept(Vr.CurlyL))return this.restoreAtMark(t),this._parseRuleset(e)}return this.restoreAtMark(t),null},e.prototype._parseRuleset=function(e){void 0===e&&(e=!1);var t=this.create(ro),n=t.getSelectors();if(!n.addChild(this._parseSelector(e)))return null;for(;this.accept(Vr.Comma);)if(!n.addChild(this._parseSelector(e)))return this.finish(t,pa.SelectorExpected);return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseRuleSetDeclarationAtStatement=function(){return this._parseUnknownAtRule()},e.prototype._parseRuleSetDeclaration=function(){return this.peek(Vr.AtKeyword)?this._parseRuleSetDeclarationAtStatement():this._parseDeclaration()},e.prototype._needsSemicolonAfter=function(e){switch(e.type){case Vi.Keyframe:case Vi.ViewPort:case Vi.Media:case Vi.Ruleset:case Vi.Namespace:case Vi.If:case Vi.For:case Vi.Each:case Vi.While:case Vi.MixinDeclaration:case Vi.FunctionDeclaration:case Vi.MixinContentDeclaration:return!1;case Vi.ExtendsReference:case Vi.MixinContentReference:case Vi.ReturnStatement:case Vi.MediaQuery:case Vi.Debug:case Vi.Import:case Vi.AtApplyRule:case Vi.CustomPropertyDeclaration:return!0;case Vi.VariableDeclaration:return e.needsSemicolon;case Vi.MixinReference:return!e.getContent();case Vi.Declaration:return!e.getNestedProperties()}return!1},e.prototype._parseDeclarations=function(e){var t=this.create(to);if(!this.accept(Vr.CurlyL))return null;for(var n=e();t.addChild(n)&&!this.peek(Vr.CurlyR);){if(this._needsSemicolonAfter(n)&&!this.accept(Vr.SemiColon))return this.finish(t,pa.SemiColonExpected,[Vr.SemiColon,Vr.CurlyR]);for(n&&this.prevToken&&this.prevToken.type===Vr.SemiColon&&(n.semicolonPosition=this.prevToken.offset);this.accept(Vr.SemiColon););n=e()}return this.accept(Vr.CurlyR)?this.finish(t):this.finish(t,pa.RightCurlyExpected,[Vr.CurlyR,Vr.SemiColon])},e.prototype._parseBody=function(e,t){return e.setDeclarations(this._parseDeclarations(t))?this.finish(e):this.finish(e,pa.LeftCurlyExpected,[Vr.CurlyR,Vr.SemiColon])},e.prototype._parseSelector=function(e){var t=this.create(io),n=!1;for(e&&(n=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());)n=!0,t.addChild(this._parseCombinator());return n?this.finish(t):null},e.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var n=this.create(lo);return n.setProperty(this._parseProperty())?this.accept(Vr.Colon)?(this.prevToken&&(n.colonPosition=this.prevToken.offset),n.setValue(this._parseExpr())?(n.addChild(this._parsePrio()),this.peek(Vr.SemiColon)&&(n.semicolonPosition=this.token.offset),this.finish(n)):this.finish(n,pa.PropertyValueExpected)):this.finish(n,pa.ColonExpected,[Vr.Colon],e||[Vr.SemiColon]):null},e.prototype._tryParseCustomPropertyDeclaration=function(e){if(!this.peekRegExp(Vr.Ident,/^--/))return null;var t=this.create(co);if(!t.setProperty(this._parseProperty()))return null;if(!this.accept(Vr.Colon))return this.finish(t,pa.ColonExpected,[Vr.Colon]);this.prevToken&&(t.colonPosition=this.prevToken.offset);var n=this.mark();if(this.peek(Vr.CurlyL)){var r=this.create(ao),i=this._parseDeclarations(this._parseRuleSetDeclaration.bind(this));if(r.setDeclarations(i)&&!i.isErroneous(!0)&&(r.addChild(this._parsePrio()),this.peek(Vr.SemiColon)))return this.finish(r),t.setPropertySet(r),t.semicolonPosition=this.token.offset,this.finish(t);this.restoreAtMark(n)}var o=this._parseExpr();return o&&!o.isErroneous(!0)&&(this._parsePrio(),this.peekOne.apply(this,sc(sc([],e||[],!1),[Vr.SemiColon,Vr.EOF],!1)))?(t.setValue(o),this.peek(Vr.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)):(this.restoreAtMark(n),t.addChild(this._parseCustomPropertyValue(e)),t.addChild(this._parsePrio()),oc(t.colonPosition)&&this.token.offset===t.colonPosition+1?this.finish(t,pa.PropertyValueExpected):this.finish(t))},e.prototype._parseCustomPropertyValue=function(e){var t=this;void 0===e&&(e=[Vr.CurlyR]);var n=this.create(Xi),r=function(){return-1!==e.indexOf(t.token.type)},i=0,o=0,s=0;e:for(;;){switch(this.token.type){case Vr.SemiColon:case Vr.Exclamation:if(0===i&&0===o&&0===s)break e;break;case Vr.CurlyL:i++;break;case Vr.CurlyR:if(--i<0){if(r()&&0===o&&0===s)break e;return this.finish(n,pa.LeftCurlyExpected)}break;case Vr.ParenthesisL:o++;break;case Vr.ParenthesisR:if(--o<0){if(r()&&0===s&&0===i)break e;return this.finish(n,pa.LeftParenthesisExpected)}break;case Vr.BracketL:s++;break;case Vr.BracketR:if(--s<0)return this.finish(n,pa.LeftSquareBracketExpected);break;case Vr.BadString:break e;case Vr.EOF:var a=pa.RightCurlyExpected;return s>0?a=pa.RightSquareBracketExpected:o>0&&(a=pa.RightParenthesisExpected),this.finish(n,a)}this.consumeToken()}return this.finish(n)},e.prototype._tryToParseDeclaration=function(e){var t=this.mark();return this._parseProperty()&&this.accept(Vr.Colon)?(this.restoreAtMark(t),this._parseDeclaration(e)):(this.restoreAtMark(t),null)},e.prototype._parseProperty=function(){var e=this.create(ho),t=this.mark();return(this.acceptDelim("*")||this.acceptDelim("_"))&&this.hasWhitespace()?(this.restoreAtMark(t),null):e.setIdentifier(this._parsePropertyIdentifier())?this.finish(e):null},e.prototype._parsePropertyIdentifier=function(){return this._parseIdent()},e.prototype._parseCharset=function(){if(!this.peek(Vr.Charset))return null;var e=this.create(Xi);return this.consumeToken(),this.accept(Vr.String)?this.accept(Vr.SemiColon)?this.finish(e):this.finish(e,pa.SemiColonExpected):this.finish(e,pa.IdentifierExpected)},e.prototype._parseImport=function(){if(!this.peekKeyword("@import"))return null;var e=this.create(Eo);return this.consumeToken(),e.addChild(this._parseURILiteral())||e.addChild(this._parseStringLiteral())?(this.peek(Vr.SemiColon)||this.peek(Vr.EOF)||e.setMedialist(this._parseMediaQueryList()),this.finish(e)):this.finish(e,pa.URIOrStringExpected)},e.prototype._parseNamespace=function(){if(!this.peekKeyword("@namespace"))return null;var e=this.create(To);return this.consumeToken(),e.addChild(this._parseURILiteral())||(e.addChild(this._parseIdent()),e.addChild(this._parseURILiteral())||e.addChild(this._parseStringLiteral()))?this.accept(Vr.SemiColon)?this.finish(e):this.finish(e,pa.SemiColonExpected):this.finish(e,pa.URIExpected,[Vr.SemiColon])},e.prototype._parseFontFace=function(){if(!this.peekKeyword("@font-face"))return null;var e=this.create(So);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseViewPort=function(){if(!this.peekKeyword("@-ms-viewport")&&!this.peekKeyword("@-o-viewport")&&!this.peekKeyword("@viewport"))return null;var e=this.create(xo);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseKeyframe=function(){if(!this.peekRegExp(Vr.AtKeyword,this.keyframeRegex))return null;var e=this.create(Co),t=this.create(Xi);return this.consumeToken(),e.setKeyword(this.finish(t)),t.matches("@-ms-keyframes")&&this.markError(t,pa.UnknownKeyword),e.setIdentifier(this._parseKeyframeIdent())?this._parseBody(e,this._parseKeyframeSelector.bind(this)):this.finish(e,pa.IdentifierExpected,[Vr.CurlyR])},e.prototype._parseKeyframeIdent=function(){return this._parseIdent([Bi.Keyframe])},e.prototype._parseKeyframeSelector=function(){var e=this.create(_o);if(!e.addChild(this._parseIdent())&&!this.accept(Vr.Percentage))return null;for(;this.accept(Vr.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(Vr.Percentage))return this.finish(e,pa.PercentageExpected);return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._tryParseKeyframeSelector=function(){var e=this.create(_o),t=this.mark();if(!e.addChild(this._parseIdent())&&!this.accept(Vr.Percentage))return null;for(;this.accept(Vr.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(Vr.Percentage))return this.restoreAtMark(t),null;return this.peek(Vr.CurlyL)?this._parseBody(e,this._parseRuleSetDeclaration.bind(this)):(this.restoreAtMark(t),null)},e.prototype._parseSupports=function(e){if(void 0===e&&(e=!1),!this.peekKeyword("@supports"))return null;var t=this.create(zo);return this.consumeToken(),t.addChild(this._parseSupportsCondition()),this._parseBody(t,this._parseSupportsDeclaration.bind(this,e))},e.prototype._parseSupportsDeclaration=function(e){return void 0===e&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},e.prototype._parseSupportsCondition=function(){var e=this.create(Wo);if(this.acceptIdent("not"))e.addChild(this._parseSupportsConditionInParens());else if(e.addChild(this._parseSupportsConditionInParens()),this.peekRegExp(Vr.Ident,/^(and|or)$/i))for(var t=this.token.text.toLowerCase();this.acceptIdent(t);)e.addChild(this._parseSupportsConditionInParens());return this.finish(e)},e.prototype._parseSupportsConditionInParens=function(){var e=this.create(Wo);if(this.accept(Vr.ParenthesisL))return this.prevToken&&(e.lParent=this.prevToken.offset),e.addChild(this._tryToParseDeclaration([Vr.ParenthesisR]))||this._parseSupportsCondition()?this.accept(Vr.ParenthesisR)?(this.prevToken&&(e.rParent=this.prevToken.offset),this.finish(e)):this.finish(e,pa.RightParenthesisExpected,[Vr.ParenthesisR],[]):this.finish(e,pa.ConditionExpected);if(this.peek(Vr.Ident)){var t=this.mark();if(this.consumeToken(),!this.hasWhitespace()&&this.accept(Vr.ParenthesisL)){for(var n=1;this.token.type!==Vr.EOF&&0!==n;)this.token.type===Vr.ParenthesisL?n++:this.token.type===Vr.ParenthesisR&&n--,this.consumeToken();return this.finish(e)}this.restoreAtMark(t)}return this.finish(e,pa.LeftParenthesisExpected,[],[Vr.ParenthesisL])},e.prototype._parseMediaDeclaration=function(e){return void 0===e&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},e.prototype._parseMedia=function(e){if(void 0===e&&(e=!1),!this.peekKeyword("@media"))return null;var t=this.create(Ao);return this.consumeToken(),t.addChild(this._parseMediaQueryList())?this._parseBody(t,this._parseMediaDeclaration.bind(this,e)):this.finish(t,pa.MediaQueryExpected)},e.prototype._parseMediaQueryList=function(){var e=this.create(Mo);if(!e.addChild(this._parseMediaQuery()))return this.finish(e,pa.MediaQueryExpected);for(;this.accept(Vr.Comma);)if(!e.addChild(this._parseMediaQuery()))return this.finish(e,pa.MediaQueryExpected);return this.finish(e)},e.prototype._parseMediaQuery=function(){var e=this.create(Po),t=this.mark();if(this.acceptIdent("not"),this.peek(Vr.ParenthesisL))this.restoreAtMark(t),e.addChild(this._parseMediaCondition());else{if(this.acceptIdent("only"),!e.addChild(this._parseIdent()))return null;this.acceptIdent("and")&&e.addChild(this._parseMediaCondition())}return this.finish(e)},e.prototype._parseRatio=function(){var e=this.mark(),t=this.create(Ho);return this._parseNumeric()?this.acceptDelim("/")?this._parseNumeric()?this.finish(t):this.finish(t,pa.NumberExpected):(this.restoreAtMark(e),null):null},e.prototype._parseMediaCondition=function(){var e=this.create(Lo);this.acceptIdent("not");for(var t=!0;t;){if(!this.accept(Vr.ParenthesisL))return this.finish(e,pa.LeftParenthesisExpected,[],[Vr.CurlyL]);if(this.peek(Vr.ParenthesisL)||this.peekIdent("not")?e.addChild(this._parseMediaCondition()):e.addChild(this._parseMediaFeature()),!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected,[],[Vr.CurlyL]);t=this.acceptIdent("and")||this.acceptIdent("or")}return this.finish(e)},e.prototype._parseMediaFeature=function(){var e=this,t=[Vr.ParenthesisR],n=this.create(Oo),r=function(){return e.acceptDelim("<")||e.acceptDelim(">")?(e.hasWhitespace()||e.acceptDelim("="),!0):!!e.acceptDelim("=")};if(n.addChild(this._parseMediaFeatureName())){if(this.accept(Vr.Colon)){if(!n.addChild(this._parseMediaFeatureValue()))return this.finish(n,pa.TermExpected,[],t)}else if(r()){if(!n.addChild(this._parseMediaFeatureValue()))return this.finish(n,pa.TermExpected,[],t);if(r()&&!n.addChild(this._parseMediaFeatureValue()))return this.finish(n,pa.TermExpected,[],t)}}else{if(!n.addChild(this._parseMediaFeatureValue()))return this.finish(n,pa.IdentifierExpected,[],t);if(!r())return this.finish(n,pa.OperatorExpected,[],t);if(!n.addChild(this._parseMediaFeatureName()))return this.finish(n,pa.IdentifierExpected,[],t);if(r()&&!n.addChild(this._parseMediaFeatureValue()))return this.finish(n,pa.TermExpected,[],t)}return this.finish(n)},e.prototype._parseMediaFeatureName=function(){return this._parseIdent()},e.prototype._parseMediaFeatureValue=function(){return this._parseRatio()||this._parseTermExpression()},e.prototype._parseMedium=function(){var e=this.create(Xi);return e.addChild(this._parseIdent())?this.finish(e):null},e.prototype._parsePageDeclaration=function(){return this._parsePageMarginBox()||this._parseRuleSetDeclaration()},e.prototype._parsePage=function(){if(!this.peekKeyword("@page"))return null;var e=this.create(Uo);if(this.consumeToken(),e.addChild(this._parsePageSelector()))for(;this.accept(Vr.Comma);)if(!e.addChild(this._parsePageSelector()))return this.finish(e,pa.IdentifierExpected);return this._parseBody(e,this._parsePageDeclaration.bind(this))},e.prototype._parsePageMarginBox=function(){if(!this.peek(Vr.AtKeyword))return null;var e=this.create(Vo);return this.acceptOneKeyword(rc)||this.markError(e,pa.UnknownAtRule,[],[Vr.CurlyL]),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},e.prototype._parsePageSelector=function(){if(!this.peek(Vr.Ident)&&!this.peek(Vr.Colon))return null;var e=this.create(Xi);return e.addChild(this._parseIdent()),this.accept(Vr.Colon)&&!e.addChild(this._parseIdent())?this.finish(e,pa.IdentifierExpected):this.finish(e)},e.prototype._parseDocument=function(){if(!this.peekKeyword("@-moz-document"))return null;var e=this.create(Io);return this.consumeToken(),this.resync([],[Vr.CurlyL]),this._parseBody(e,this._parseStylesheetStatement.bind(this))},e.prototype._parseUnknownAtRule=function(){if(!this.peek(Vr.AtKeyword))return null;var e=this.create(ss);e.addChild(this._parseUnknownAtRuleName());var t=0,n=0,r=0,i=0;e:for(;;){switch(this.token.type){case Vr.SemiColon:if(0===n&&0===r&&0===i)break e;break;case Vr.EOF:return n>0?this.finish(e,pa.RightCurlyExpected):i>0?this.finish(e,pa.RightSquareBracketExpected):r>0?this.finish(e,pa.RightParenthesisExpected):this.finish(e);case Vr.CurlyL:t++,n++;break;case Vr.CurlyR:if(n--,t>0&&0===n){if(this.consumeToken(),i>0)return this.finish(e,pa.RightSquareBracketExpected);if(r>0)return this.finish(e,pa.RightParenthesisExpected);break e}if(n<0){if(0===r&&0===i)break e;return this.finish(e,pa.LeftCurlyExpected)}break;case Vr.ParenthesisL:r++;break;case Vr.ParenthesisR:if(--r<0)return this.finish(e,pa.LeftParenthesisExpected);break;case Vr.BracketL:i++;break;case Vr.BracketR:if(--i<0)return this.finish(e,pa.LeftSquareBracketExpected)}this.consumeToken()}return e},e.prototype._parseUnknownAtRuleName=function(){var e=this.create(Xi);return this.accept(Vr.AtKeyword)?this.finish(e):e},e.prototype._parseOperator=function(){if(this.peekDelim("/")||this.peekDelim("*")||this.peekDelim("+")||this.peekDelim("-")||this.peek(Vr.Dashmatch)||this.peek(Vr.Includes)||this.peek(Vr.SubstringOperator)||this.peek(Vr.PrefixOperator)||this.peek(Vr.SuffixOperator)||this.peekDelim("=")){var e=this.createNode(Vi.Operator);return this.consumeToken(),this.finish(e)}return null},e.prototype._parseUnaryOperator=function(){if(!this.peekDelim("+")&&!this.peekDelim("-"))return null;var e=this.create(Xi);return this.consumeToken(),this.finish(e)},e.prototype._parseCombinator=function(){if(this.peekDelim(">")){var e=this.create(Xi);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptDelim(">")){if(!this.hasWhitespace()&&this.acceptDelim(">"))return e.type=Vi.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return e.type=Vi.SelectorCombinatorParent,this.finish(e)}if(this.peekDelim("+"))return e=this.create(Xi),this.consumeToken(),e.type=Vi.SelectorCombinatorSibling,this.finish(e);if(this.peekDelim("~"))return e=this.create(Xi),this.consumeToken(),e.type=Vi.SelectorCombinatorAllSiblings,this.finish(e);if(this.peekDelim("/")){if(e=this.create(Xi),this.consumeToken(),t=this.mark(),!this.hasWhitespace()&&this.acceptIdent("deep")&&!this.hasWhitespace()&&this.acceptDelim("/"))return e.type=Vi.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return null},e.prototype._parseSimpleSelector=function(){var e=this.create(oo),t=0;for(e.addChild(this._parseElementName())&&t++;(0===t||!this.hasWhitespace())&&e.addChild(this._parseSimpleSelectorBody());)t++;return t>0?this.finish(e):null},e.prototype._parseSimpleSelectorBody=function(){return this._parsePseudo()||this._parseHash()||this._parseClass()||this._parseAttrib()},e.prototype._parseSelectorIdent=function(){return this._parseIdent()},e.prototype._parseHash=function(){if(!this.peek(Vr.Hash)&&!this.peekDelim("#"))return null;var e=this.createNode(Vi.IdentifierSelector);if(this.acceptDelim("#")){if(this.hasWhitespace()||!e.addChild(this._parseSelectorIdent()))return this.finish(e,pa.IdentifierExpected)}else this.consumeToken();return this.finish(e)},e.prototype._parseClass=function(){if(!this.peekDelim("."))return null;var e=this.createNode(Vi.ClassSelector);return this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseSelectorIdent())?this.finish(e,pa.IdentifierExpected):this.finish(e)},e.prototype._parseElementName=function(){var e=this.mark(),t=this.createNode(Vi.ElementNameSelector);return t.addChild(this._parseNamespacePrefix()),t.addChild(this._parseSelectorIdent())||this.acceptDelim("*")?this.finish(t):(this.restoreAtMark(e),null)},e.prototype._parseNamespacePrefix=function(){var e=this.mark(),t=this.createNode(Vi.NamespacePrefix);return!t.addChild(this._parseIdent())&&this.acceptDelim("*"),this.acceptDelim("|")?this.finish(t):(this.restoreAtMark(e),null)},e.prototype._parseAttrib=function(){if(!this.peek(Vr.BracketL))return null;var e=this.create(qo);return this.consumeToken(),e.setNamespacePrefix(this._parseNamespacePrefix()),e.setIdentifier(this._parseIdent())?(e.setOperator(this._parseOperator())&&(e.setValue(this._parseBinaryExpr()),this.acceptIdent("i"),this.acceptIdent("s")),this.accept(Vr.BracketR)?this.finish(e):this.finish(e,pa.RightSquareBracketExpected)):this.finish(e,pa.IdentifierExpected)},e.prototype._parsePseudo=function(){var e=this,t=this._tryParsePseudoIdentifier();return t?this.hasWhitespace()||!this.accept(Vr.ParenthesisL)||(t.addChild(this.try((function(){var t=e.create(Xi);if(!t.addChild(e._parseSelector(!1)))return null;for(;e.accept(Vr.Comma)&&t.addChild(e._parseSelector(!1)););return e.peek(Vr.ParenthesisR)?e.finish(t):null}))||this._parseBinaryExpr()),this.accept(Vr.ParenthesisR))?this.finish(t):this.finish(t,pa.RightParenthesisExpected):null},e.prototype._tryParsePseudoIdentifier=function(){if(!this.peek(Vr.Colon))return null;var e=this.mark(),t=this.createNode(Vi.PseudoSelector);return this.consumeToken(),this.hasWhitespace()?(this.restoreAtMark(e),null):(this.accept(Vr.Colon),this.hasWhitespace()||!t.addChild(this._parseIdent())?this.finish(t,pa.IdentifierExpected):this.finish(t))},e.prototype._tryParsePrio=function(){var e=this.mark();return this._parsePrio()||(this.restoreAtMark(e),null)},e.prototype._parsePrio=function(){if(!this.peek(Vr.Exclamation))return null;var e=this.createNode(Vi.Prio);return this.accept(Vr.Exclamation)&&this.acceptIdent("important")?this.finish(e):null},e.prototype._parseExpr=function(e){void 0===e&&(e=!1);var t=this.create(Ko);if(!t.addChild(this._parseBinaryExpr()))return null;for(;;){if(this.peek(Vr.Comma)){if(e)return this.finish(t);this.consumeToken()}else if(!this.hasWhitespace())break;if(!t.addChild(this._parseBinaryExpr()))break}return this.finish(t)},e.prototype._parseUnicodeRange=function(){if(!this.peekIdent("u"))return null;var e=this.create(Zi);return this.acceptUnicodeRange()?this.finish(e):null},e.prototype._parseNamedLine=function(){if(!this.peek(Vr.BracketL))return null;var e=this.createNode(Vi.GridLine);for(this.consumeToken();e.addChild(this._parseIdent()););return this.accept(Vr.BracketR)?this.finish(e):this.finish(e,pa.RightSquareBracketExpected)},e.prototype._parseBinaryExpr=function(e,t){var n=this.create(Bo);if(!n.setLeft(e||this._parseTerm()))return null;if(!n.setOperator(t||this._parseOperator()))return this.finish(n);if(!n.setRight(this._parseTerm()))return this.finish(n,pa.TermExpected);n=this.finish(n);var r=this._parseOperator();return r&&(n=this._parseBinaryExpr(n,r)),this.finish(n)},e.prototype._parseTerm=function(){var e=this.create(jo);return e.setOperator(this._parseUnaryOperator()),e.setExpression(this._parseTermExpression())?this.finish(e):null},e.prototype._parseTermExpression=function(){return this._parseURILiteral()||this._parseUnicodeRange()||this._parseFunction()||this._parseIdent()||this._parseStringLiteral()||this._parseNumeric()||this._parseHexColor()||this._parseOperation()||this._parseNamedLine()},e.prototype._parseOperation=function(){if(!this.peek(Vr.ParenthesisL))return null;var e=this.create(Xi);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(Vr.ParenthesisR)?this.finish(e):this.finish(e,pa.RightParenthesisExpected)},e.prototype._parseNumeric=function(){if(this.peek(Vr.Num)||this.peek(Vr.Percentage)||this.peek(Vr.Resolution)||this.peek(Vr.Length)||this.peek(Vr.EMS)||this.peek(Vr.EXS)||this.peek(Vr.Angle)||this.peek(Vr.Time)||this.peek(Vr.Dimension)||this.peek(Vr.Freq)){var e=this.create(Yo);return this.consumeToken(),this.finish(e)}return null},e.prototype._parseStringLiteral=function(){if(!this.peek(Vr.String)&&!this.peek(Vr.BadString))return null;var e=this.createNode(Vi.StringLiteral);return this.consumeToken(),this.finish(e)},e.prototype._parseURILiteral=function(){if(!this.peekRegExp(Vr.Ident,/^url(-prefix)?$/i))return null;var e=this.mark(),t=this.createNode(Vi.URILiteral);return this.accept(Vr.Ident),this.hasWhitespace()||!this.peek(Vr.ParenthesisL)?(this.restoreAtMark(e),null):(this.scanner.inURL=!0,this.consumeToken(),t.addChild(this._parseURLArgument()),this.scanner.inURL=!1,this.accept(Vr.ParenthesisR)?this.finish(t):this.finish(t,pa.RightParenthesisExpected))},e.prototype._parseURLArgument=function(){var e=this.create(Xi);return this.accept(Vr.String)||this.accept(Vr.BadString)||this.acceptUnquotedString()?this.finish(e):null},e.prototype._parseIdent=function(e){if(!this.peek(Vr.Ident))return null;var t=this.create(Qi);return e&&(t.referenceTypes=e),t.isCustomProperty=this.peekRegExp(Vr.Ident,/^--/),this.consumeToken(),this.finish(t)},e.prototype._parseFunction=function(){var e=this.mark(),t=this.create(po);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(Vr.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)t.getArguments().addChild(this._parseFunctionArgument())||this.markError(t,pa.ExpressionExpected);return this.accept(Vr.ParenthesisR)?this.finish(t):this.finish(t,pa.RightParenthesisExpected)},e.prototype._parseFunctionIdentifier=function(){if(!this.peek(Vr.Ident))return null;var e=this.create(Qi);if(e.referenceTypes=[Bi.Function],this.acceptIdent("progid")){if(this.accept(Vr.Colon))for(;this.accept(Vr.Ident)&&this.acceptDelim("."););return this.finish(e)}return this.consumeToken(),this.finish(e)},e.prototype._parseFunctionArgument=function(){var e=this.create(mo);return e.setValue(this._parseExpr(!0))?this.finish(e):null},e.prototype._parseHexColor=function(){if(this.peekRegExp(Vr.Hash,/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/g)){var e=this.create($o);return this.consumeToken(),this.finish(e)}return null},e}();function lc(e,t){return-1!==e.indexOf(t)}function cc(){for(var e=[],t=0;te+t||this.offset===e&&this.length===t?this.findInScope(e,t):null},e.prototype.findInScope=function(e,t){void 0===t&&(t=0);var n=e+t,r=function(e,t){var r=0,i=e.length;if(0===i)return 0;for(;rn?i=o:r=o+1}return r}(this.children);if(0===r)return this;var i=this.children[r-1];return i.offset<=e&&i.offset+i.length>=e+t?i.findInScope(e,t):this},e.prototype.addSymbol=function(e){this.symbols.push(e)},e.prototype.getSymbol=function(e,t){for(var n=0;n{var e={470:e=>{function t(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function n(e,t){for(var n,r="",i=0,o=-1,s=0,a=0;a<=e.length;++a){if(a2){var l=r.lastIndexOf("/");if(l!==r.length-1){-1===l?(r="",i=0):i=(r=r.slice(0,l)).length-1-r.lastIndexOf("/"),o=a,s=0;continue}}else if(2===r.length||1===r.length){r="",i=0,o=a,s=0;continue}t&&(r.length>0?r+="/..":r="..",i=2)}else r.length>0?r+="/"+e.slice(o+1,a):r=e.slice(o+1,a),i=a-o-1;o=a,s=0}else 46===n&&-1!==s?++s:s=-1}return r}var r={resolve:function(){for(var e,r="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var s;o>=0?s=arguments[o]:(void 0===e&&(e=process.cwd()),s=e),t(s),0!==s.length&&(r=s+"/"+r,i=47===s.charCodeAt(0))}return r=n(r,!i),i?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(e){if(t(e),0===e.length)return".";var r=47===e.charCodeAt(0),i=47===e.charCodeAt(e.length-1);return 0!==(e=n(e,!r)).length||r||(e="."),e.length>0&&i&&(e+="/"),r?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,n=0;n0&&(void 0===e?e=i:e+="/"+i)}return void 0===e?".":r.normalize(e)},relative:function(e,n){if(t(e),t(n),e===n)return"";if((e=r.resolve(e))===(n=r.resolve(n)))return"";for(var i=1;ic){if(47===n.charCodeAt(a+d))return n.slice(a+d+1);if(0===d)return n.slice(a+d)}else s>c&&(47===e.charCodeAt(i+d)?h=d:0===d&&(h=0));break}var p=e.charCodeAt(i+d);if(p!==n.charCodeAt(a+d))break;47===p&&(h=d)}var u="";for(d=i+h+1;d<=o;++d)d!==o&&47!==e.charCodeAt(d)||(0===u.length?u+="..":u+="/..");return u.length>0?u+n.slice(a+h):(a+=h,47===n.charCodeAt(a)&&++a,n.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var n=e.charCodeAt(0),r=47===n,i=-1,o=!0,s=e.length-1;s>=1;--s)if(47===(n=e.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?r?"/":".":r&&1===i?"//":e.slice(0,i)},basename:function(e,n){if(void 0!==n&&"string"!=typeof n)throw new TypeError('"ext" argument must be a string');t(e);var r,i=0,o=-1,s=!0;if(void 0!==n&&n.length>0&&n.length<=e.length){if(n.length===e.length&&n===e)return"";var a=n.length-1,l=-1;for(r=e.length-1;r>=0;--r){var c=e.charCodeAt(r);if(47===c){if(!s){i=r+1;break}}else-1===l&&(s=!1,l=r+1),a>=0&&(c===n.charCodeAt(a)?-1==--a&&(o=r):(a=-1,o=l))}return i===o?o=l:-1===o&&(o=e.length),e.slice(i,o)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!s){i=r+1;break}}else-1===o&&(s=!1,o=r+1);return-1===o?"":e.slice(i,o)},extname:function(e){t(e);for(var n=-1,r=0,i=-1,o=!0,s=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===i&&(o=!1,i=a+1),46===l?-1===n?n=a:1!==s&&(s=1):-1!==n&&(s=-1);else if(!o){r=a+1;break}}return-1===n||-1===i||0===s||1===s&&n===i-1&&n===r+1?"":e.slice(n,i)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return n=(t=e).dir||t.root,r=t.base||(t.name||"")+(t.ext||""),n?n===t.root?n+r:n+"/"+r:r;var t,n,r},parse:function(e){t(e);var n={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return n;var r,i=e.charCodeAt(0),o=47===i;o?(n.root="/",r=1):r=0;for(var s=-1,a=0,l=-1,c=!0,h=e.length-1,d=0;h>=r;--h)if(47!==(i=e.charCodeAt(h)))-1===l&&(c=!1,l=h+1),46===i?-1===s?s=h:1!==d&&(d=1):-1!==s&&(d=-1);else if(!c){a=h+1;break}return-1===s||-1===l||0===d||1===d&&s===l-1&&s===a+1?-1!==l&&(n.base=n.name=0===a&&o?e.slice(1,l):e.slice(a,l)):(0===a&&o?(n.name=e.slice(1,s),n.base=e.slice(1,l)):(n.name=e.slice(a,s),n.base=e.slice(a,l)),n.ext=e.slice(s,l)),a>0?n.dir=e.slice(0,a-1):o&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};r.posix=r,e.exports=r},447:(e,t,n)=>{var r;if(n.r(t),n.d(t,{URI:()=>f,Utils:()=>E}),"object"==typeof process)r="win32"===process.platform;else if("object"==typeof navigator){var i=navigator.userAgent;r=i.indexOf("Windows")>=0}var o,s,a=(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),l=/^\w[\w\d+.-]*$/,c=/^\//,h=/^\/\//;function d(e,t){if(!e.scheme&&t)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'.concat(e.authority,'", path: "').concat(e.path,'", query: "').concat(e.query,'", fragment: "').concat(e.fragment,'"}'));if(e.scheme&&!l.test(e.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(e.path)if(e.authority){if(!c.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(h.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}var p="",u="/",m=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,f=function(){function e(e,t,n,r,i,o){var s;void 0===o&&(o=!1),"object"==typeof e?(this.scheme=e.scheme||p,this.authority=e.authority||p,this.path=e.path||p,this.query=e.query||p,this.fragment=e.fragment||p):(this.scheme=(s=e)||o?s:"file",this.authority=t||p,this.path=function(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==u&&(t=u+t):t=u}return t}(this.scheme,n||p),this.query=r||p,this.fragment=i||p,d(this,o))}return e.isUri=function(t){return t instanceof e||!!t&&"string"==typeof t.authority&&"string"==typeof t.fragment&&"string"==typeof t.path&&"string"==typeof t.query&&"string"==typeof t.scheme&&"string"==typeof t.fsPath&&"function"==typeof t.with&&"function"==typeof t.toString},Object.defineProperty(e.prototype,"fsPath",{get:function(){return x(this,!1)},enumerable:!1,configurable:!0}),e.prototype.with=function(e){if(!e)return this;var t=e.scheme,n=e.authority,r=e.path,i=e.query,o=e.fragment;return void 0===t?t=this.scheme:null===t&&(t=p),void 0===n?n=this.authority:null===n&&(n=p),void 0===r?r=this.path:null===r&&(r=p),void 0===i?i=this.query:null===i&&(i=p),void 0===o?o=this.fragment:null===o&&(o=p),t===this.scheme&&n===this.authority&&r===this.path&&i===this.query&&o===this.fragment?this:new b(t,n,r,i,o)},e.parse=function(e,t){void 0===t&&(t=!1);var n=m.exec(e);return n?new b(n[2]||p,_(n[4]||p),_(n[5]||p),_(n[7]||p),_(n[9]||p),t):new b(p,p,p,p,p)},e.file=function(e){var t=p;if(r&&(e=e.replace(/\\/g,u)),e[0]===u&&e[1]===u){var n=e.indexOf(u,2);-1===n?(t=e.substring(2),e=u):(t=e.substring(2,n),e=e.substring(n)||u)}return new b("file",t,e,p,p)},e.from=function(e){var t=new b(e.scheme,e.authority,e.path,e.query,e.fragment);return d(t,!0),t},e.prototype.toString=function(e){return void 0===e&&(e=!1),S(this,e)},e.prototype.toJSON=function(){return this},e.revive=function(t){if(t){if(t instanceof e)return t;var n=new b(t);return n._formatted=t.external,n._fsPath=t._sep===g?t.fsPath:null,n}return t},e}(),g=r?1:void 0,b=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._formatted=null,t._fsPath=null,t}return a(t,e),Object.defineProperty(t.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=x(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),t.prototype.toString=function(e){return void 0===e&&(e=!1),e?S(this,!0):(this._formatted||(this._formatted=S(this,!1)),this._formatted)},t.prototype.toJSON=function(){var e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=g),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e},t}(f),v=((s={})[58]="%3A",s[47]="%2F",s[63]="%3F",s[35]="%23",s[91]="%5B",s[93]="%5D",s[64]="%40",s[33]="%21",s[36]="%24",s[38]="%26",s[39]="%27",s[40]="%28",s[41]="%29",s[42]="%2A",s[43]="%2B",s[44]="%2C",s[59]="%3B",s[61]="%3D",s[32]="%20",s);function y(e,t){for(var n=void 0,r=-1,i=0;i=97&&o<=122||o>=65&&o<=90||o>=48&&o<=57||45===o||46===o||95===o||126===o||t&&47===o)-1!==r&&(n+=encodeURIComponent(e.substring(r,i)),r=-1),void 0!==n&&(n+=e.charAt(i));else{void 0===n&&(n=e.substr(0,i));var s=v[o];void 0!==s?(-1!==r&&(n+=encodeURIComponent(e.substring(r,i)),r=-1),n+=s):-1===r&&(r=i)}}return-1!==r&&(n+=encodeURIComponent(e.substring(r))),void 0!==n?n:e}function w(e){for(var t=void 0,n=0;n1&&"file"===e.scheme?"//".concat(e.authority).concat(e.path):47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,r&&(n=n.replace(/\//g,"\\")),n}function S(e,t){var n=t?w:y,r="",i=e.scheme,o=e.authority,s=e.path,a=e.query,l=e.fragment;if(i&&(r+=i,r+=":"),(o||"file"===i)&&(r+=u,r+=u),o){var c=o.indexOf("@");if(-1!==c){var h=o.substr(0,c);o=o.substr(c+1),-1===(c=h.indexOf(":"))?r+=n(h,!1):(r+=n(h.substr(0,c),!1),r+=":",r+=n(h.substr(c+1),!1)),r+="@"}-1===(c=(o=o.toLowerCase()).indexOf(":"))?r+=n(o,!1):(r+=n(o.substr(0,c),!1),r+=o.substr(c))}if(s){if(s.length>=3&&47===s.charCodeAt(0)&&58===s.charCodeAt(2))(d=s.charCodeAt(1))>=65&&d<=90&&(s="/".concat(String.fromCharCode(d+32),":").concat(s.substr(3)));else if(s.length>=2&&58===s.charCodeAt(1)){var d;(d=s.charCodeAt(0))>=65&&d<=90&&(s="".concat(String.fromCharCode(d+32),":").concat(s.substr(2)))}r+=n(s,!0)}return a&&(r+="?",r+=n(a,!1)),l&&(r+="#",r+=t?l:y(l,!1)),r}function k(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+k(e.substr(3)):e}}var C=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function _(e){return e.match(C)?e.replace(C,(function(e){return k(e)})):e}var E,F,R=n(470),N=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n(447)})();var{URI:bc,Utils:vc}=hc,yc=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0&&-1===' \t\n\r":{[()]},*>+'.indexOf(r.charAt(n));)n--;return r.substring(n+1,t)}(e,this.offset),this.defaultReplaceRange=xs.create(ys.create(this.position.line,this.position.character-this.currentWord.length),this.position),this.textDocument=e,this.styleSheet=n,this.documentSettings=r;try{var i={isIncomplete:!1,items:[]};this.nodePath=Hi(this.styleSheet,this.offset);for(var o=this.nodePath.length-1;o>=0;o--){var s=this.nodePath[o];if(s instanceof ho)this.getCompletionsForDeclarationProperty(s.getParent(),i);else if(s instanceof Ko)s.parent instanceof Qo?this.getVariableProposals(null,i):this.getCompletionsForExpression(s,i);else if(s instanceof oo){var a=s.findAParent(Vi.ExtendsReference,Vi.Ruleset);if(a)if(a.type===Vi.ExtendsReference)this.getCompletionsForExtendsReference(a,s,i);else{var l=a;this.getCompletionsForSelector(l,l&&l.isNested(),i)}}else if(s instanceof mo)this.getCompletionsForFunctionArgument(s,s.getParent(),i);else if(s instanceof to)this.getCompletionsForDeclarations(s,i);else if(s instanceof Zo)this.getCompletionsForVariableDeclaration(s,i);else if(s instanceof ro)this.getCompletionsForRuleSet(s,i);else if(s instanceof Qo)this.getCompletionsForInterpolation(s,i);else if(s instanceof wo)this.getCompletionsForFunctionDeclaration(s,i);else if(s instanceof is)this.getCompletionsForMixinReference(s,i);else if(s instanceof po)this.getCompletionsForFunctionArgument(null,s,i);else if(s instanceof zo)this.getCompletionsForSupports(s,i);else if(s instanceof Wo)this.getCompletionsForSupportsCondition(s,i);else if(s instanceof ts)this.getCompletionsForExtendsReference(s,null,i);else if(s.type===Vi.URILiteral)this.getCompletionForUriLiteralValue(s,i);else if(null===s.parent)this.getCompletionForTopLevel(i);else{if(s.type!==Vi.StringLiteral||!this.isImportPathParent(s.parent.type))continue;this.getCompletionForImportPath(s,i)}if(i.items.length>0||this.offset>s.offset)return this.finalize(i)}return this.getCompletionsForStylesheet(i),0===i.items.length&&this.variablePrefix&&0===this.currentWord.indexOf(this.variablePrefix)&&this.getVariableProposals(null,i),this.finalize(i)}finally{this.position=null,this.currentWord=null,this.textDocument=null,this.styleSheet=null,this.symbolContext=null,this.defaultReplaceRange=null,this.nodePath=null}},e.prototype.isImportPathParent=function(e){return e===Vi.Import},e.prototype.finalize=function(e){return e},e.prototype.findInNodePath=function(){for(var e=[],t=0;t=0;n--){var r=this.nodePath[n];if(-1!==e.indexOf(r.type))return r}return null},e.prototype.getCompletionsForDeclarationProperty=function(e,t){return this.getPropertyProposals(e,t)},e.prototype.getPropertyProposals=function(e,t){var n=this,r=this.isTriggerPropertyValueCompletionEnabled,i=this.isCompletePropertyWithSemicolonEnabled;return this.cssDataManager.getProperties().forEach((function(o){var s,a,l=!1;e?(s=n.getCompletionRange(e.getProperty()),a=o.name,oc(e.colonPosition)||(a+=": ",l=!0)):(s=n.getCompletionRange(null),a=o.name+": ",l=!0),!e&&i&&(a+="$0;"),e&&!e.semicolonPosition&&i&&n.offset>=n.textDocument.offsetAt(s.end)&&(a+="$0;");var c={label:o.name,documentation:Rl(o,n.doesSupportMarkdown()),tags:Pc(o)?[Ra.Deprecated]:[],textEdit:Gs.replace(s,a),insertTextFormat:Ea.Snippet,kind:Ca.Property};o.restrictions||(l=!1),r&&l&&(c.command=Ic);var h=(255-("number"==typeof o.relevance?Math.min(Math.max(o.relevance,0),99):50)).toString(16),d=Pi(o.name,"-")?Dc.VendorPrefixed:Dc.Normal;c.sortText=d+"_"+h,t.items.push(c)})),this.completionParticipants.forEach((function(e){e.onCssProperty&&e.onCssProperty({propertyName:n.currentWord,range:n.defaultReplaceRange})})),t},Object.defineProperty(e.prototype,"isTriggerPropertyValueCompletionEnabled",{get:function(){var e,t;return null===(t=null===(e=this.documentSettings)||void 0===e?void 0:e.triggerPropertyValueCompletion)||void 0===t||t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isCompletePropertyWithSemicolonEnabled",{get:function(){var e,t;return null===(t=null===(e=this.documentSettings)||void 0===e?void 0:e.completePropertyWithSemicolon)||void 0===t||t},enumerable:!1,configurable:!0}),e.prototype.getCompletionsForDeclarationValue=function(e,t){for(var n=this,r=e.getFullPropertyName(),i=this.cssDataManager.getProperty(r),o=e.getValue()||null;o&&o.hasChildren();)o=o.findChildAtOffset(this.offset,!1);if(this.completionParticipants.forEach((function(e){e.onCssPropertyValue&&e.onCssPropertyValue({propertyName:r,propertyValue:n.currentWord,range:n.getCompletionRange(o)})})),i){if(i.restrictions)for(var s=0,a=i.restrictions;s=e.offset+2&&this.getVariableProposals(null,t),t},e.prototype.getVariableProposals=function(e,t){for(var n=0,r=this.getSymbolContext().findSymbolsAtOffset(this.offset,Bi.Variable);n0){var i=this.currentWord.match(/^-?\d[\.\d+]*/);i&&(r=i[0],n.isIncomplete=r.length===this.currentWord.length)}else 0===this.currentWord.length&&(n.isIncomplete=!0);if(t&&t.parent&&t.parent.type===Vi.Term&&(t=t.getParent()),e.restrictions)for(var o=0,s=e.restrictions;o=n.end?this.getCompletionForTopLevel(t):!n||this.offset<=n.offset?this.getCompletionsForSelector(e,e.isNested(),t):this.getCompletionsForDeclarations(e.getDeclarations(),t)},e.prototype.getCompletionsForSelector=function(e,t,n){var r=this,i=this.findInNodePath(Vi.PseudoSelector,Vi.IdentifierSelector,Vi.ClassSelector,Vi.ElementNameSelector);if(!i&&this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord,this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord),this.defaultReplaceRange=xs.create(ys.create(this.position.line,this.position.character-this.currentWord.length),this.position)),this.cssDataManager.getPseudoClasses().forEach((function(e){var t=Oc(e.name),o={label:e.name,textEdit:Gs.replace(r.getCompletionRange(i),t),documentation:Rl(e,r.doesSupportMarkdown()),tags:Pc(e)?[Ra.Deprecated]:[],kind:Ca.Function,insertTextFormat:e.name!==t?zc:void 0};Pi(e.name,":-")&&(o.sortText=Dc.VendorPrefixed),n.items.push(o)})),this.cssDataManager.getPseudoElements().forEach((function(e){var t=Oc(e.name),o={label:e.name,textEdit:Gs.replace(r.getCompletionRange(i),t),documentation:Rl(e,r.doesSupportMarkdown()),tags:Pc(e)?[Ra.Deprecated]:[],kind:Ca.Function,insertTextFormat:e.name!==t?zc:void 0};Pi(e.name,"::-")&&(o.sortText=Dc.VendorPrefixed),n.items.push(o)})),!t){for(var o=0,s=tc;o0){var t=d.substr(e.offset,e.length);return"."!==t.charAt(0)||h[t]||(h[t]=!0,n.items.push({label:t,textEdit:Gs.replace(r.getCompletionRange(i),t),kind:Ca.Keyword})),!1}return!0})),e&&e.isNested()){var p=e.getSelectors().findFirstChildBeforeOffset(this.offset);p&&0===e.getSelectors().getChildren().indexOf(p)&&this.getPropertyProposals(null,n)}return n},e.prototype.getCompletionsForDeclarations=function(e,t){if(!e||this.offset===e.offset)return t;var n=e.findFirstChildBeforeOffset(this.offset);if(!n)return this.getCompletionsForDeclarationProperty(null,t);if(n instanceof so){var r=n;if(!oc(r.colonPosition)||this.offset<=r.colonPosition)return this.getCompletionsForDeclarationProperty(r,t);if(oc(r.semicolonPosition)&&r.semicolonPositione.colonPosition&&this.getVariableProposals(e.getValue(),t),t},e.prototype.getCompletionsForExpression=function(e,t){var n=e.getParent();if(n instanceof mo)return this.getCompletionsForFunctionArgument(n,n.getParent(),t),t;var r=e.findParent(Vi.Declaration);if(!r)return this.getTermProposals(void 0,null,t),t;var i=e.findChildAtOffset(this.offset,!0);return i?i instanceof Yo||i instanceof Qi?this.getCompletionsForDeclarationValue(r,t):t:this.getCompletionsForDeclarationValue(r,t)},e.prototype.getCompletionsForFunctionArgument=function(e,t,n){var r=t.getIdentifier();return r&&r.matches("var")&&(t.getArguments().hasChildren()&&t.getArguments().getChild(0)!==e||this.getVariableProposalsForCSSVarFunction(n)),n},e.prototype.getCompletionsForFunctionDeclaration=function(e,t){var n=e.getDeclarations();return n&&this.offset>n.offset&&this.offsete.lParent&&(!oc(e.rParent)||this.offset<=e.rParent)?this.getCompletionsForDeclarationProperty(null,t):t},e.prototype.getCompletionsForSupports=function(e,t){var n=e.getDeclarations();if(!n||this.offset<=n.offset){var r=e.findFirstChildBeforeOffset(this.offset);return r instanceof Wo?this.getCompletionsForSupportsCondition(r,t):t}return this.getCompletionForTopLevel(t)},e.prototype.getCompletionsForExtendsReference=function(e,t,n){return n},e.prototype.getCompletionForUriLiteralValue=function(e,t){var n,r,i;if(e.hasChildren()){var o=e.getChild(0);n=o.getText(),r=this.position,i=this.getCompletionRange(o)}else{n="",r=this.position;var s=this.textDocument.positionAt(e.offset+"url(".length);i=xs.create(s,s)}return this.completionParticipants.forEach((function(e){e.onCssURILiteralValue&&e.onCssURILiteralValue({uriValue:n,position:r,range:i})})),t},e.prototype.getCompletionForImportPath=function(e,t){var n=this;return this.completionParticipants.forEach((function(t){t.onCssImportPath&&t.onCssImportPath({pathValue:e.getText(),position:n.position,range:n.getCompletionRange(e)})})),t},e.prototype.hasCharacterAtPosition=function(e,t){var n=this.textDocument.getText();return e>=0&&e"),this.writeLine(t,r.join(""))}},e}();!function(e){function t(e){var t=e.match(/^['"](.*)["']$/);return t?t[1]:e}e.ensure=function(e,n){return n+t(e)+n},e.remove=t}(Kc||(Kc={}));var Jc=function(){this.id=0,this.attr=0,this.tag=0};function Xc(e,t){for(var n=new qc,r=0,i=e.getChildren();r1){var l=t.cloneWithParent();n.addChild(l.findRoot()),n=l}n.append(s[a])}}break;case Vi.SelectorPlaceholder:if(o.matches("@at-root"))return n;case Vi.ElementNameSelector:var c=o.getText();n.addAttr("name","*"===c?"element":Yc(c));break;case Vi.ClassSelector:n.addAttr("class",Yc(o.getText().substring(1)));break;case Vi.IdentifierSelector:n.addAttr("id",Yc(o.getText().substring(1)));break;case Vi.MixinDeclaration:n.addAttr("class",o.getName());break;case Vi.PseudoSelector:n.addAttr(Yc(o.getText()),"");break;case Vi.AttributeSelector:var h=o,d=h.getIdentifier();if(d){var p=h.getValue(),u=h.getOperator(),m=void 0;if(p&&u)switch(Yc(u.getText())){case"|=":m="".concat(Kc.remove(Yc(p.getText())),"-…");break;case"^=":m="".concat(Kc.remove(Yc(p.getText())),"…");break;case"$=":m="…".concat(Kc.remove(Yc(p.getText())));break;case"~=":m=" … ".concat(Kc.remove(Yc(p.getText()))," … ");break;case"*=":m="…".concat(Kc.remove(Yc(p.getText())),"…");break;default:m=Kc.remove(Yc(p.getText()))}n.addAttr(Yc(d.getText()),m)}}}return n}function Yc(e){var t=new Mi;t.setSource(e);var n=t.scanUnquotedString();return n?n.text:e}var Zc=function(){function e(e){this.cssDataManager=e}return e.prototype.selectorToMarkedString=function(e){var t=function(e){if(e.matches("@at-root"))return null;var t=new $c,n=[],r=e.getParent();if(r instanceof ro)for(var i=r.getParent();i&&!eh(i);){if(i instanceof ro){if(i.getSelectors().matches("@at-root"))break;n.push(i)}i=i.getParent()}for(var o=new Qc(t),s=n.length-1;s>=0;s--){var a=n[s].getSelectors().getChild(0);a&&o.processSelector(a)}return o.processSelector(e),t}(e);if(t){var n=new Gc('"').print(t);return n.push(this.selectorToSpecificityMarkedString(e)),n}return[]},e.prototype.simpleSelectorToMarkedString=function(e){var t=Xc(e),n=new Gc('"').print(t);return n.push(this.selectorToSpecificityMarkedString(e)),n},e.prototype.isPseudoElementIdentifier=function(e){var t=e.match(/^::?([\w-]+)/);return!!t&&!!this.cssDataManager.getPseudoElement("::"+t[1])},e.prototype.selectorToSpecificityMarkedString=function(e){var t=this,n=function(e){var r=new Jc;e:for(var i=0,o=e.getChildren();i0){for(var l=new Jc,c=0,h=s.getChildren();cl.id?l=f:f.idl.attr?l=f:f.attrl.tag&&(l=f))}}r.id+=l.id,r.attr+=l.attr,r.tag+=l.tag;continue e}r.attr++}if(s.getChildren().length>0){var f=n(s);r.id+=f.id,r.attr+=f.attr,r.tag+=f.tag}}return r},r=n(e);return jc("vs/language/css/css.worker","specificity","[Selector Specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity): ({0}, {1}, {2})",r.id,r.attr,r.tag)},e}(),Qc=function(){function e(e){this.prev=null,this.element=e}return e.prototype.processSelector=function(e){var t=null;if(!(this.element instanceof $c)&&e.getChildren().some((function(e){return e.hasChildren()&&e.getChild(0).type===Vi.SelectorCombinator}))){var n=this.element.findRoot();n.parent instanceof $c&&(t=this.element,this.element=n.parent,this.element.removeChild(n),this.prev=null)}for(var r=0,i=e.getChildren();r0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]4)return null;try{var c=4===r.length?Ll(r[3],1):1;if("rgb"===n||"rgba"===n)return{red:Ll(r[0],255),green:Ll(r[1],255),blue:Ll(r[2],255),alpha:c};if("hsl"===n||"hsla"===n)return Vl(Ol(r[0]),Ll(r[1],100),Ll(r[2],100),c);if("hwb"===n)return function(e,t,n,r){if(void 0===r&&(r=1),t+n>=1){var i=t/(t+n);return{red:i,green:i,blue:i,alpha:r}}var o=Vl(e,1,.5,r),s=o.red;s*=1-t-n,s+=t;var a=o.green;a*=1-t-n,a+=t;var l=o.blue;return l*=1-t-n,{red:s,green:a,blue:l+=t,alpha:r}}(Ol(r[0]),Ll(r[1],100),Ll(r[2],100),c)}catch(e){return null}}else if(e.type===Vi.Identifier){if(e.parent&&e.parent.type!==Vi.Term)return null;var h=e.parent;if(h&&h.parent&&h.parent.type===Vi.BinaryExpression){var d=h.parent;if(d.parent&&d.parent.type===Vi.ListEntry&&d.parent.key===d)return null}var p=e.getText().toLowerCase();if("none"===p)return null;var u=Ml[p];if(u)return Ul(u)}return null}(e);return n?{color:n,range:lh(e,t)}:null}(t,e);return r&&n.push(r),!0})),n},e.prototype.getColorPresentations=function(e,t,n,r){var i,o=[],s=Math.round(255*n.red),a=Math.round(255*n.green),l=Math.round(255*n.blue);i=1===n.alpha?"rgb(".concat(s,", ").concat(a,", ").concat(l,")"):"rgba(".concat(s,", ").concat(a,", ").concat(l,", ").concat(n.alpha,")"),o.push({label:i,textEdit:Gs.replace(r,i)}),i=1===n.alpha?"#".concat(hh(s)).concat(hh(a)).concat(hh(l)):"#".concat(hh(s)).concat(hh(a)).concat(hh(l)).concat(hh(Math.round(255*n.alpha))),o.push({label:i,textEdit:Gs.replace(r,i)});var c=Kl(n);i=1===c.a?"hsl(".concat(c.h,", ").concat(Math.round(100*c.s),"%, ").concat(Math.round(100*c.l),"%)"):"hsla(".concat(c.h,", ").concat(Math.round(100*c.s),"%, ").concat(Math.round(100*c.l),"%, ").concat(c.a,")"),o.push({label:i,textEdit:Gs.replace(r,i)});var h=function(e){var t=Kl(e),n=Math.min(e.red,e.green,e.blue),r=1-Math.max(e.red,e.green,e.blue);return{h:t.h,w:n,b:r,a:t.a}}(n);return i=1===h.a?"hwb(".concat(h.h," ").concat(Math.round(100*h.w),"% ").concat(Math.round(100*h.b),"%)"):"hwb(".concat(h.h," ").concat(Math.round(100*h.w),"% ").concat(Math.round(100*h.b),"% / ").concat(h.a,")"),o.push({label:i,textEdit:Gs.replace(r,i)}),o},e.prototype.doRename=function(e,t,n,r){var i,o=this.findDocumentHighlights(e,t,r).map((function(e){return Gs.replace(e.range,n)}));return{changes:(i={},i[e.uri]=o,i)}},e.prototype.resolveModuleReference=function(e,t,n){return nh(this,void 0,void 0,(function(){var r,i,o,s,a;return rh(this,(function(l){switch(l.label){case 0:return Pi(t,"file://")?(r="@"===(c=e)[0]?c.substring(0,c.indexOf("/",c.indexOf("/")+1)):c.substring(0,c.indexOf("/")),i=n.resolveReference("/",t),o=wc(t),[4,this.resolvePathToModule(r,o,i)]):[3,2];case 1:if(s=l.sent())return a=e.substring(r.length+1),[2,xc(s,a)];l.label=2;case 2:return[2,void 0]}var c}))}))},e.prototype.resolveRelativeReference=function(e,t,n,r){return nh(this,void 0,void 0,(function(){var r,i;return rh(this,(function(o){switch(o.label){case 0:return r=n.resolveReference(e,t),"~"===e[0]&&"/"!==e[1]&&this.fileSystemProvider?(e=e.substring(1),[4,this.resolveModuleReference(e,t,n)]):[3,2];case 1:return[2,o.sent()||r];case 2:return this.resolveModuleReferences?(i=r)?[4,this.fileExists(r)]:[3,4]:[3,7];case 3:i=o.sent(),o.label=4;case 4:return i?[2,r]:[3,5];case 5:return[4,this.resolveModuleReference(e,t,n)];case 6:return[2,o.sent()||r];case 7:return[2,r]}}))}))},e.prototype.resolvePathToModule=function(e,t,n){return nh(this,void 0,void 0,(function(){var r;return rh(this,(function(i){switch(i.label){case 0:return r=xc(t,"node_modules",e,"package.json"),[4,this.fileExists(r)];case 1:return i.sent()?[2,wc(r)]:n&&t.startsWith(n)&&t.length!==n.length?[2,this.resolvePathToModule(e,wc(t),n)]:[2,void 0]}}))}))},e.prototype.fileExists=function(e){return nh(this,void 0,void 0,(function(){var t;return rh(this,(function(n){switch(n.label){case 0:if(!this.fileSystemProvider)return[2,!1];n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this.fileSystemProvider.stat(e)];case 2:return(t=n.sent()).type===yl.Unknown&&-1===t.size?[2,!1]:[2,!0];case 3:return n.sent(),[2,!1];case 4:return[2]}}))}))},e}();function lh(e,t){return xs.create(t.positionAt(e.offset),t.positionAt(e.end))}function ch(e){if(e.type===Vi.Selector)return Ua.Write;if(e instanceof Qi&&e.parent&&e.parent instanceof ho&&e.isCustomProperty)return Ua.Write;if(e.parent)switch(e.parent.type){case Vi.FunctionDeclaration:case Vi.MixinDeclaration:case Vi.Keyframe:case Vi.VariableDeclaration:case Vi.FunctionParameter:return Ua.Write}return Ua.Read}function hh(e){var t=e.toString(16);return 2!==t.length?"0"+t:t}var dh=ms(),ph=Gi.Warning,uh=Gi.Error,mh=Gi.Ignore,fh=function(e,t,n){this.id=e,this.message=t,this.defaultValue=n},gh={AllVendorPrefixes:new fh("compatibleVendorPrefixes",dh("vs/language/css/css.worker","rule.vendorprefixes.all","When using a vendor-specific prefix make sure to also include all other vendor-specific properties"),mh),IncludeStandardPropertyWhenUsingVendorPrefix:new fh("vendorPrefix",dh("vs/language/css/css.worker","rule.standardvendorprefix.all","When using a vendor-specific prefix also include the standard property"),ph),DuplicateDeclarations:new fh("duplicateProperties",dh("vs/language/css/css.worker","rule.duplicateDeclarations","Do not use duplicate style definitions"),mh),EmptyRuleSet:new fh("emptyRules",dh("vs/language/css/css.worker","rule.emptyRuleSets","Do not use empty rulesets"),ph),ImportStatemement:new fh("importStatement",dh("vs/language/css/css.worker","rule.importDirective","Import statements do not load in parallel"),mh),BewareOfBoxModelSize:new fh("boxModel",dh("vs/language/css/css.worker","rule.bewareOfBoxModelSize","Do not use width or height when using padding or border"),mh),UniversalSelector:new fh("universalSelector",dh("vs/language/css/css.worker","rule.universalSelector","The universal selector (*) is known to be slow"),mh),ZeroWithUnit:new fh("zeroUnits",dh("vs/language/css/css.worker","rule.zeroWidthUnit","No unit for zero needed"),mh),RequiredPropertiesForFontFace:new fh("fontFaceProperties",dh("vs/language/css/css.worker","rule.fontFaceProperties","@font-face rule must define 'src' and 'font-family' properties"),ph),HexColorLength:new fh("hexColorLength",dh("vs/language/css/css.worker","rule.hexColor","Hex colors must consist of three, four, six or eight hex numbers"),uh),ArgsInColorFunction:new fh("argumentsInColorFunction",dh("vs/language/css/css.worker","rule.colorFunction","Invalid number of parameters"),uh),UnknownProperty:new fh("unknownProperties",dh("vs/language/css/css.worker","rule.unknownProperty","Unknown property."),ph),UnknownAtRules:new fh("unknownAtRules",dh("vs/language/css/css.worker","rule.unknownAtRules","Unknown at-rule."),ph),IEStarHack:new fh("ieHack",dh("vs/language/css/css.worker","rule.ieHack","IE hacks are only necessary when supporting IE7 and older"),mh),UnknownVendorSpecificProperty:new fh("unknownVendorSpecificProperties",dh("vs/language/css/css.worker","rule.unknownVendorSpecificProperty","Unknown vendor specific property."),mh),PropertyIgnoredDueToDisplay:new fh("propertyIgnoredDueToDisplay",dh("vs/language/css/css.worker","rule.propertyIgnoredDueToDisplay","Property is ignored due to the display."),ph),AvoidImportant:new fh("important",dh("vs/language/css/css.worker","rule.avoidImportant","Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored."),mh),AvoidFloat:new fh("float",dh("vs/language/css/css.worker","rule.avoidFloat","Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes."),mh),AvoidIdSelector:new fh("idSelector",dh("vs/language/css/css.worker","rule.avoidIdSelector","Selectors should not contain IDs because these rules are too tightly coupled with the HTML."),mh)},bh={ValidProperties:new function(e,t,n){this.id=e,this.message=t,this.defaultValue=n}("validProperties",dh("vs/language/css/css.worker","rule.validProperties","A list of properties that are not validated against the `unknownProperties` rule."),[])},vh=function(){function e(e){void 0===e&&(e={}),this.conf=e}return e.prototype.getRule=function(e){if(this.conf.hasOwnProperty(e.id)){var t=function(e){switch(e){case"ignore":return Gi.Ignore;case"warning":return Gi.Warning;case"error":return Gi.Error}return null}(this.conf[e.id]);if(t)return t}return e.defaultValue},e.prototype.getSetting=function(e){return this.conf[e.id]},e}(),yh=ms(),wh=function(){function e(e){this.cssDataManager=e}return e.prototype.doCodeActions=function(e,t,n,r){return this.doCodeActions2(e,t,n,r).map((function(t){var n=t.edit&&t.edit.documentChanges&&t.edit.documentChanges[0];return $s.create(t.title,"_css.applyCodeAction",e.uri,e.version,n&&n.edits)}))},e.prototype.doCodeActions2=function(e,t,n,r){var i=[];if(n.diagnostics)for(var o=0,s=n.diagnostics;on)return 0;var i,o,s=[],a=[];for(i=0;i=i.length/2&&o.push({property:e.name,score:t})})),o.sort((function(e,t){return t.score-e.score||e.property.localeCompare(t.property)}));for(var s=3,a=0,l=o;a=0;a--){var l=s[a];if(l instanceof lo){var c=l.getProperty();if(c&&c.offset===i&&c.end===o)return void this.getFixesForUnknownProperty(e,c,n,r)}}},e}(),xh=function(e){this.fullPropertyName=e.getFullPropertyName().toLowerCase(),this.node=e};function Sh(e,t,n,r){var i=e[t];i.value=n,n&&(lc(i.properties,r)||i.properties.push(r))}function kh(e,t,n,r){"top"===t||"right"===t||"bottom"===t||"left"===t?Sh(e,t,n,r):function(e,t,n){Sh(e,"top",t,n),Sh(e,"right",t,n),Sh(e,"bottom",t,n),Sh(e,"left",t,n)}(e,n,r)}function Ch(e,t,n){switch(t.length){case 1:kh(e,void 0,t[0],n);break;case 2:kh(e,"top",t[0],n),kh(e,"bottom",t[0],n),kh(e,"right",t[1],n),kh(e,"left",t[1],n);break;case 3:kh(e,"top",t[0],n),kh(e,"right",t[1],n),kh(e,"left",t[1],n),kh(e,"bottom",t[2],n);break;case 4:kh(e,"top",t[0],n),kh(e,"right",t[1],n),kh(e,"bottom",t[2],n),kh(e,"left",t[3],n)}}function _h(e,t){for(var n=0,r=t;n0)for(var m=this.fetch(r,"float"),f=0;f0)for(m=this.fetch(r,"vertical-align"),f=0;f1)for(var S=0;S")||this.peekDelim("<")||this.peekIdent("and")||this.peekIdent("or")||this.peekDelim("%")){var t=this.createNode(Vi.Operator);return this.consumeToken(),this.finish(t)}return e.prototype._parseOperator.call(this)},t.prototype._parseUnaryOperator=function(){if(this.peekIdent("not")){var t=this.create(Xi);return this.consumeToken(),this.finish(t)}return e.prototype._parseUnaryOperator.call(this)},t.prototype._parseRuleSetDeclaration=function(){return this.peek(Vr.AtKeyword)?this._parseKeyframe()||this._parseImport()||this._parseMedia(!0)||this._parseFontFace()||this._parseWarnAndDebug()||this._parseControlStatement()||this._parseFunctionDeclaration()||this._parseExtends()||this._parseMixinReference()||this._parseMixinContent()||this._parseMixinDeclaration()||this._parseRuleset(!0)||this._parseSupports(!0)||e.prototype._parseRuleSetDeclarationAtStatement.call(this):this._parseVariableDeclaration()||this._tryParseRuleset(!0)||e.prototype._parseRuleSetDeclaration.call(this)},t.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var n=this.create(lo);if(!n.setProperty(this._parseProperty()))return null;if(!this.accept(Vr.Colon))return this.finish(n,pa.ColonExpected,[Vr.Colon],e||[Vr.SemiColon]);this.prevToken&&(n.colonPosition=this.prevToken.offset);var r=!1;if(n.setValue(this._parseExpr())&&(r=!0,n.addChild(this._parsePrio())),this.peek(Vr.CurlyL))n.setNestedProperties(this._parseNestedProperties());else if(!r)return this.finish(n,pa.PropertyValueExpected);return this.peek(Vr.SemiColon)&&(n.semicolonPosition=this.token.offset),this.finish(n)},t.prototype._parseNestedProperties=function(){var e=this.create(ko);return this._parseBody(e,this._parseDeclaration.bind(this))},t.prototype._parseExtends=function(){if(this.peekKeyword("@extend")){var e=this.create(ts);if(this.consumeToken(),!e.getSelectors().addChild(this._parseSimpleSelector()))return this.finish(e,pa.SelectorExpected);for(;this.accept(Vr.Comma);)e.getSelectors().addChild(this._parseSimpleSelector());return this.accept(Vr.Exclamation)&&!this.acceptIdent("optional")?this.finish(e,pa.UnknownKeyword):this.finish(e)}return null},t.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||this._parseSelectorPlaceholder()||e.prototype._parseSimpleSelectorBody.call(this)},t.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var e=this.createNode(Vi.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(Vr.Num)||this.accept(Vr.Dimension)||e.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(e)}return null},t.prototype._parseSelectorPlaceholder=function(){if(this.peekDelim("%")){var e=this.createNode(Vi.SelectorPlaceholder);return this.consumeToken(),this._parseIdent(),this.finish(e)}return this.peekKeyword("@at-root")?(e=this.createNode(Vi.SelectorPlaceholder),this.consumeToken(),this.finish(e)):null},t.prototype._parseElementName=function(){var t=this.mark(),n=e.prototype._parseElementName.call(this);return n&&!this.hasWhitespace()&&this.peek(Vr.ParenthesisL)?(this.restoreAtMark(t),null):n},t.prototype._tryParsePseudoIdentifier=function(){return this._parseInterpolation()||e.prototype._tryParsePseudoIdentifier.call(this)},t.prototype._parseWarnAndDebug=function(){if(!this.peekKeyword("@debug")&&!this.peekKeyword("@warn")&&!this.peekKeyword("@error"))return null;var e=this.createNode(Vi.Debug);return this.consumeToken(),e.addChild(this._parseExpr()),this.finish(e)},t.prototype._parseControlStatement=function(e){return void 0===e&&(e=this._parseRuleSetDeclaration.bind(this)),this.peek(Vr.AtKeyword)?this._parseIfStatement(e)||this._parseForStatement(e)||this._parseEachStatement(e)||this._parseWhileStatement(e):null},t.prototype._parseIfStatement=function(e){return this.peekKeyword("@if")?this._internalParseIfStatement(e):null},t.prototype._internalParseIfStatement=function(e){var t=this.create(fo);if(this.consumeToken(),!t.setExpression(this._parseExpr(!0)))return this.finish(t,pa.ExpressionExpected);if(this._parseBody(t,e),this.acceptKeyword("@else"))if(this.peekIdent("if"))t.setElseClause(this._internalParseIfStatement(e));else if(this.peek(Vr.CurlyL)){var n=this.create(yo);this._parseBody(n,e),t.setElseClause(n)}return this.finish(t)},t.prototype._parseForStatement=function(e){if(!this.peekKeyword("@for"))return null;var t=this.create(go);return this.consumeToken(),t.setVariable(this._parseVariable())?this.acceptIdent("from")?t.addChild(this._parseBinaryExpr())?this.acceptIdent("to")||this.acceptIdent("through")?t.addChild(this._parseBinaryExpr())?this._parseBody(t,e):this.finish(t,pa.ExpressionExpected,[Vr.CurlyR]):this.finish(t,od.ThroughOrToExpected,[Vr.CurlyR]):this.finish(t,pa.ExpressionExpected,[Vr.CurlyR]):this.finish(t,od.FromExpected,[Vr.CurlyR]):this.finish(t,pa.VariableNameExpected,[Vr.CurlyR])},t.prototype._parseEachStatement=function(e){if(!this.peekKeyword("@each"))return null;var t=this.create(bo);this.consumeToken();var n=t.getVariables();if(!n.addChild(this._parseVariable()))return this.finish(t,pa.VariableNameExpected,[Vr.CurlyR]);for(;this.accept(Vr.Comma);)if(!n.addChild(this._parseVariable()))return this.finish(t,pa.VariableNameExpected,[Vr.CurlyR]);return this.finish(n),this.acceptIdent("in")?t.addChild(this._parseExpr())?this._parseBody(t,e):this.finish(t,pa.ExpressionExpected,[Vr.CurlyR]):this.finish(t,od.InExpected,[Vr.CurlyR])},t.prototype._parseWhileStatement=function(e){if(!this.peekKeyword("@while"))return null;var t=this.create(vo);return this.consumeToken(),t.addChild(this._parseBinaryExpr())?this._parseBody(t,e):this.finish(t,pa.ExpressionExpected,[Vr.CurlyR])},t.prototype._parseFunctionBodyDeclaration=function(){return this._parseVariableDeclaration()||this._parseReturnStatement()||this._parseWarnAndDebug()||this._parseControlStatement(this._parseFunctionBodyDeclaration.bind(this))},t.prototype._parseFunctionDeclaration=function(){if(!this.peekKeyword("@function"))return null;var e=this.create(wo);if(this.consumeToken(),!e.setIdentifier(this._parseIdent([Bi.Function])))return this.finish(e,pa.IdentifierExpected,[Vr.CurlyR]);if(!this.accept(Vr.ParenthesisL))return this.finish(e,pa.LeftParenthesisExpected,[Vr.CurlyR]);if(e.getParameters().addChild(this._parseParameterDeclaration()))for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(e,pa.VariableNameExpected);return this.accept(Vr.ParenthesisR)?this._parseBody(e,this._parseFunctionBodyDeclaration.bind(this)):this.finish(e,pa.RightParenthesisExpected,[Vr.CurlyR])},t.prototype._parseReturnStatement=function(){if(!this.peekKeyword("@return"))return null;var e=this.createNode(Vi.ReturnStatement);return this.consumeToken(),e.addChild(this._parseExpr())?this.finish(e):this.finish(e,pa.ExpressionExpected)},t.prototype._parseMixinDeclaration=function(){if(!this.peekKeyword("@mixin"))return null;var e=this.create(os);if(this.consumeToken(),!e.setIdentifier(this._parseIdent([Bi.Mixin])))return this.finish(e,pa.IdentifierExpected,[Vr.CurlyR]);if(this.accept(Vr.ParenthesisL)){if(e.getParameters().addChild(this._parseParameterDeclaration()))for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(e,pa.VariableNameExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected,[Vr.CurlyR])}return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},t.prototype._parseParameterDeclaration=function(){var e=this.create(uo);return e.setIdentifier(this._parseVariable())?(this.accept(td),this.accept(Vr.Colon)&&!e.setDefaultValue(this._parseExpr(!0))?this.finish(e,pa.VariableValueExpected,[],[Vr.Comma,Vr.ParenthesisR]):this.finish(e)):null},t.prototype._parseMixinContent=function(){if(!this.peekKeyword("@content"))return null;var e=this.create(ns);if(this.consumeToken(),this.accept(Vr.ParenthesisL)){if(e.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getArguments().addChild(this._parseFunctionArgument()))return this.finish(e,pa.ExpressionExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected)}return this.finish(e)},t.prototype._parseMixinReference=function(){if(!this.peekKeyword("@include"))return null;var e=this.create(is);this.consumeToken();var t=this._parseIdent([Bi.Mixin]);if(!e.setIdentifier(t))return this.finish(e,pa.IdentifierExpected,[Vr.CurlyR]);if(!this.hasWhitespace()&&this.acceptDelim(".")&&!this.hasWhitespace()){var n=this._parseIdent([Bi.Mixin]);if(!n)return this.finish(e,pa.IdentifierExpected,[Vr.CurlyR]);var r=this.create(hs);t.referenceTypes=[Bi.Module],r.setIdentifier(t),e.setIdentifier(n),e.addChild(r)}if(this.accept(Vr.ParenthesisL)){if(e.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getArguments().addChild(this._parseFunctionArgument()))return this.finish(e,pa.ExpressionExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected)}return(this.peekIdent("using")||this.peek(Vr.CurlyL))&&e.setContent(this._parseMixinContentDeclaration()),this.finish(e)},t.prototype._parseMixinContentDeclaration=function(){var e=this.create(rs);if(this.acceptIdent("using")){if(!this.accept(Vr.ParenthesisL))return this.finish(e,pa.LeftParenthesisExpected,[Vr.CurlyL]);if(e.getParameters().addChild(this._parseParameterDeclaration()))for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(e,pa.VariableNameExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected,[Vr.CurlyL])}return this.peek(Vr.CurlyL)&&this._parseBody(e,this._parseMixinReferenceBodyStatement.bind(this)),this.finish(e)},t.prototype._parseMixinReferenceBodyStatement=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},t.prototype._parseFunctionArgument=function(){var e=this.create(mo),t=this.mark(),n=this._parseVariable();if(n)if(this.accept(Vr.Colon))e.setIdentifier(n);else{if(this.accept(td))return e.setValue(n),this.finish(e);this.restoreAtMark(t)}return e.setValue(this._parseExpr(!0))?(this.accept(td),e.addChild(this._parsePrio()),this.finish(e)):e.setValue(this._tryParsePrio())?this.finish(e):null},t.prototype._parseURLArgument=function(){var t=this.mark(),n=e.prototype._parseURLArgument.call(this);if(!n||!this.peek(Vr.ParenthesisR)){this.restoreAtMark(t);var r=this.create(Xi);return r.addChild(this._parseBinaryExpr()),this.finish(r)}return n},t.prototype._parseOperation=function(){if(!this.peek(Vr.ParenthesisL))return null;var e=this.create(Xi);for(this.consumeToken();e.addChild(this._parseListElement());)this.accept(Vr.Comma);return this.accept(Vr.ParenthesisR)?this.finish(e):this.finish(e,pa.RightParenthesisExpected)},t.prototype._parseListElement=function(){var e=this.create(as),t=this._parseBinaryExpr();if(!t)return null;if(this.accept(Vr.Colon)){if(e.setKey(t),!e.setValue(this._parseBinaryExpr()))return this.finish(e,pa.ExpressionExpected)}else e.setValue(t);return this.finish(e)},t.prototype._parseUse=function(){if(!this.peekKeyword("@use"))return null;var e=this.create(Fo);if(this.consumeToken(),!e.addChild(this._parseStringLiteral()))return this.finish(e,pa.StringLiteralExpected);if(!this.peek(Vr.SemiColon)&&!this.peek(Vr.EOF)){if(!this.peekRegExp(Vr.Ident,/as|with/))return this.finish(e,pa.UnknownKeyword);if(this.acceptIdent("as")&&!e.setIdentifier(this._parseIdent([Bi.Module]))&&!this.acceptDelim("*"))return this.finish(e,pa.IdentifierOrWildcardExpected);if(this.acceptIdent("with")){if(!this.accept(Vr.ParenthesisL))return this.finish(e,pa.LeftParenthesisExpected,[Vr.ParenthesisR]);if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,pa.VariableNameExpected);for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,pa.VariableNameExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected)}}return this.accept(Vr.SemiColon)||this.accept(Vr.EOF)?this.finish(e):this.finish(e,pa.SemiColonExpected)},t.prototype._parseModuleConfigDeclaration=function(){var e=this.create(Ro);return e.setIdentifier(this._parseVariable())?this.accept(Vr.Colon)&&e.setValue(this._parseExpr(!0))?!this.accept(Vr.Exclamation)||!this.hasWhitespace()&&this.acceptIdent("default")?this.finish(e):this.finish(e,pa.UnknownKeyword):this.finish(e,pa.VariableValueExpected,[],[Vr.Comma,Vr.ParenthesisR]):null},t.prototype._parseForward=function(){if(!this.peekKeyword("@forward"))return null;var e=this.create(No);if(this.consumeToken(),!e.addChild(this._parseStringLiteral()))return this.finish(e,pa.StringLiteralExpected);if(this.acceptIdent("with")){if(!this.accept(Vr.ParenthesisL))return this.finish(e,pa.LeftParenthesisExpected,[Vr.ParenthesisR]);if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,pa.VariableNameExpected);for(;this.accept(Vr.Comma)&&!this.peek(Vr.ParenthesisR);)if(!e.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(e,pa.VariableNameExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected)}if(!this.peek(Vr.SemiColon)&&!this.peek(Vr.EOF)){if(!this.peekRegExp(Vr.Ident,/as|hide|show/))return this.finish(e,pa.UnknownKeyword);if(this.acceptIdent("as")){var t=this._parseIdent([Bi.Forward]);if(!e.setIdentifier(t))return this.finish(e,pa.IdentifierExpected);if(this.hasWhitespace()||!this.acceptDelim("*"))return this.finish(e,pa.WildcardExpected)}if((this.peekIdent("hide")||this.peekIdent("show"))&&!e.addChild(this._parseForwardVisibility()))return this.finish(e,pa.IdentifierOrVariableExpected)}return this.accept(Vr.SemiColon)||this.accept(Vr.EOF)?this.finish(e):this.finish(e,pa.SemiColonExpected)},t.prototype._parseForwardVisibility=function(){var e=this.create(Do);for(e.setIdentifier(this._parseIdent());e.addChild(this._parseVariable()||this._parseIdent());)this.accept(Vr.Comma);return e.getChildren().length>1?e:null},t.prototype._parseSupportsCondition=function(){return this._parseInterpolation()||e.prototype._parseSupportsCondition.call(this)},t}(ac),ld=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),cd=ms(),hd=function(e){function t(n,r){var i=e.call(this,"$",n,r)||this;return dd(t.scssModuleLoaders),dd(t.scssModuleBuiltIns),i}return ld(t,e),t.prototype.isImportPathParent=function(t){return t===Vi.Forward||t===Vi.Use||e.prototype.isImportPathParent.call(this,t)},t.prototype.getCompletionForImportPath=function(n,r){var i=n.getParent().type;if(i===Vi.Forward||i===Vi.Use)for(var o=0,s=t.scssModuleBuiltIns;o0){var t="string"==typeof e.documentation?{kind:"markdown",value:e.documentation}:{kind:"markdown",value:e.documentation.value};t.value+="\n\n",t.value+=e.references.map((function(e){return"[".concat(e.name,"](").concat(e.url,")")})).join(" | "),e.documentation=t}}))}var pd,ud,md,fd=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),gd="/".charCodeAt(0),bd="\n".charCodeAt(0),vd="\r".charCodeAt(0),yd="\f".charCodeAt(0),wd="`".charCodeAt(0),xd=".".charCodeAt(0),Sd=Vr.CustomToken,kd=Sd++,Cd=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return fd(t,e),t.prototype.scanNext=function(t){var n=this.escapedJavaScript();return null!==n?this.finishToken(t,n):this.stream.advanceIfChars([xd,xd,xd])?this.finishToken(t,kd):e.prototype.scanNext.call(this,t)},t.prototype.comment=function(){return!!e.prototype.comment.call(this)||!(this.inURL||!this.stream.advanceIfChars([gd,gd]))&&(this.stream.advanceWhileChar((function(e){switch(e){case bd:case vd:case yd:return!1;default:return!0}})),!0)},t.prototype.escapedJavaScript=function(){return this.stream.peekChar()===wd?(this.stream.advance(1),this.stream.advanceWhileChar((function(e){return e!==wd})),this.stream.advanceIfChar(wd)?Vr.EscapedJavaScript:Vr.BadEscapedJavaScript):null},t}(Mi),_d=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Ed=function(e){function t(){return e.call(this,new Cd)||this}return _d(t,e),t.prototype._parseStylesheetStatement=function(t){return void 0===t&&(t=!1),this.peek(Vr.AtKeyword)?this._parseVariableDeclaration()||this._parsePlugin()||e.prototype._parseStylesheetAtStatement.call(this,t):this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseFunction()||this._parseRuleset(!0)},t.prototype._parseImport=function(){if(!this.peekKeyword("@import")&&!this.peekKeyword("@import-once"))return null;var e=this.create(Eo);if(this.consumeToken(),this.accept(Vr.ParenthesisL)){if(!this.accept(Vr.Ident))return this.finish(e,pa.IdentifierExpected,[Vr.SemiColon]);do{if(!this.accept(Vr.Comma))break}while(this.accept(Vr.Ident));if(!this.accept(Vr.ParenthesisR))return this.finish(e,pa.RightParenthesisExpected,[Vr.SemiColon])}return e.addChild(this._parseURILiteral())||e.addChild(this._parseStringLiteral())?(this.peek(Vr.SemiColon)||this.peek(Vr.EOF)||e.setMedialist(this._parseMediaQueryList()),this.finish(e)):this.finish(e,pa.URIOrStringExpected,[Vr.SemiColon])},t.prototype._parsePlugin=function(){if(!this.peekKeyword("@plugin"))return null;var e=this.createNode(Vi.Plugin);return this.consumeToken(),e.addChild(this._parseStringLiteral())?this.accept(Vr.SemiColon)?this.finish(e):this.finish(e,pa.SemiColonExpected):this.finish(e,pa.StringLiteralExpected)},t.prototype._parseMediaQuery=function(){var t=e.prototype._parseMediaQuery.call(this);if(!t){var n=this.create(Po);return n.addChild(this._parseVariable())?this.finish(n):null}return t},t.prototype._parseMediaDeclaration=function(e){return void 0===e&&(e=!1),this._tryParseRuleset(e)||this._tryToParseDeclaration()||this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseDetachedRuleSetMixin()||this._parseStylesheetStatement(e)},t.prototype._parseMediaFeatureName=function(){return this._parseIdent()||this._parseVariable()},t.prototype._parseVariableDeclaration=function(e){void 0===e&&(e=[]);var t=this.create(Zo),n=this.mark();if(!t.setVariable(this._parseVariable(!0)))return null;if(!this.accept(Vr.Colon))return this.restoreAtMark(n),null;if(this.prevToken&&(t.colonPosition=this.prevToken.offset),t.setValue(this._parseDetachedRuleSet()))t.needsSemicolon=!1;else if(!t.setValue(this._parseExpr()))return this.finish(t,pa.VariableValueExpected,[],e);return t.addChild(this._parsePrio()),this.peek(Vr.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)},t.prototype._parseDetachedRuleSet=function(){var e=this.mark();if(this.peekDelim("#")||this.peekDelim(".")){if(this.consumeToken(),this.hasWhitespace()||!this.accept(Vr.ParenthesisL))return this.restoreAtMark(e),null;var t=this.create(os);if(t.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(Vr.Comma)||this.accept(Vr.SemiColon))&&!this.peek(Vr.ParenthesisR);)t.getParameters().addChild(this._parseMixinParameter())||this.markError(t,pa.IdentifierExpected,[],[Vr.ParenthesisR]);if(!this.accept(Vr.ParenthesisR))return this.restoreAtMark(e),null}if(!this.peek(Vr.CurlyL))return null;var n=this.create(no);return this._parseBody(n,this._parseDetachedRuleSetBody.bind(this)),this.finish(n)},t.prototype._parseDetachedRuleSetBody=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},t.prototype._addLookupChildren=function(e){if(!e.addChild(this._parseLookupValue()))return!1;for(var t=!1;this.peek(Vr.BracketL)&&(t=!0),e.addChild(this._parseLookupValue());)t=!1;return!t},t.prototype._parseLookupValue=function(){var e=this.create(Xi),t=this.mark();return this.accept(Vr.BracketL)&&((e.addChild(this._parseVariable(!1,!0))||e.addChild(this._parsePropertyIdentifier()))&&this.accept(Vr.BracketR)||this.accept(Vr.BracketR))?e:(this.restoreAtMark(t),null)},t.prototype._parseVariable=function(e,t){void 0===e&&(e=!1),void 0===t&&(t=!1);var n=!e&&this.peekDelim("$");if(!this.peekDelim("@")&&!n&&!this.peek(Vr.AtKeyword))return null;for(var r=this.create(es),i=this.mark();this.acceptDelim("@")||!e&&this.acceptDelim("$");)if(this.hasWhitespace())return this.restoreAtMark(i),null;return!this.accept(Vr.AtKeyword)&&!this.accept(Vr.Ident)||!t&&this.peek(Vr.BracketL)&&!this._addLookupChildren(r)?(this.restoreAtMark(i),null):r},t.prototype._parseTermExpression=function(){return this._parseVariable()||this._parseEscaped()||e.prototype._parseTermExpression.call(this)||this._tryParseMixinReference(!1)},t.prototype._parseEscaped=function(){if(this.peek(Vr.EscapedJavaScript)||this.peek(Vr.BadEscapedJavaScript)){var e=this.createNode(Vi.EscapedValue);return this.consumeToken(),this.finish(e)}return this.peekDelim("~")?(e=this.createNode(Vi.EscapedValue),this.consumeToken(),this.accept(Vr.String)||this.accept(Vr.EscapedJavaScript)?this.finish(e):this.finish(e,pa.TermExpected)):null},t.prototype._parseOperator=function(){return this._parseGuardOperator()||e.prototype._parseOperator.call(this)},t.prototype._parseGuardOperator=function(){if(this.peekDelim(">")){var e=this.createNode(Vi.Operator);return this.consumeToken(),this.acceptDelim("="),e}return this.peekDelim("=")?(e=this.createNode(Vi.Operator),this.consumeToken(),this.acceptDelim("<"),e):this.peekDelim("<")?(e=this.createNode(Vi.Operator),this.consumeToken(),this.acceptDelim("="),e):null},t.prototype._parseRuleSetDeclaration=function(){return this.peek(Vr.AtKeyword)?this._parseKeyframe()||this._parseMedia(!0)||this._parseImport()||this._parseSupports(!0)||this._parseDetachedRuleSetMixin()||this._parseVariableDeclaration()||e.prototype._parseRuleSetDeclarationAtStatement.call(this):this._tryParseMixinDeclaration()||this._tryParseRuleset(!0)||this._tryParseMixinReference()||this._parseFunction()||this._parseExtend()||e.prototype._parseRuleSetDeclaration.call(this)},t.prototype._parseKeyframeIdent=function(){return this._parseIdent([Bi.Keyframe])||this._parseVariable()},t.prototype._parseKeyframeSelector=function(){return this._parseDetachedRuleSetMixin()||e.prototype._parseKeyframeSelector.call(this)},t.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||e.prototype._parseSimpleSelectorBody.call(this)},t.prototype._parseSelector=function(e){var t=this.create(io),n=!1;for(e&&(n=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());){n=!0;var r=this.mark();if(t.addChild(this._parseGuard())&&this.peek(Vr.CurlyL))break;this.restoreAtMark(r),t.addChild(this._parseCombinator())}return n?this.finish(t):null},t.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var e=this.createNode(Vi.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(Vr.Num)||this.accept(Vr.Dimension)||e.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(e)}return null},t.prototype._parseSelectorIdent=function(){if(!this.peekInterpolatedIdent())return null;var e=this.createNode(Vi.SelectorInterpolation);return this._acceptInterpolatedIdent(e)?this.finish(e):null},t.prototype._parsePropertyIdentifier=function(e){void 0===e&&(e=!1);var t=/^[\w-]+/;if(!this.peekInterpolatedIdent()&&!this.peekRegExp(this.token.type,t))return null;var n=this.mark(),r=this.create(Qi);return r.isCustomProperty=this.acceptDelim("-")&&this.acceptDelim("-"),(e?r.isCustomProperty?r.addChild(this._parseIdent()):r.addChild(this._parseRegexp(t)):r.isCustomProperty?this._acceptInterpolatedIdent(r):this._acceptInterpolatedIdent(r,t))?(e||this.hasWhitespace()||(this.acceptDelim("+"),this.hasWhitespace()||this.acceptIdent("_")),this.finish(r)):(this.restoreAtMark(n),null)},t.prototype.peekInterpolatedIdent=function(){return this.peek(Vr.Ident)||this.peekDelim("@")||this.peekDelim("$")||this.peekDelim("-")},t.prototype._acceptInterpolatedIdent=function(e,t){for(var n=this,r=!1,i=function(){var e=n.mark();return n.acceptDelim("-")&&(n.hasWhitespace()||n.acceptDelim("-"),n.hasWhitespace())?(n.restoreAtMark(e),null):n._parseInterpolation()},o=t?function(){return n.acceptRegexp(t)}:function(){return n.accept(Vr.Ident)};(o()||e.addChild(this._parseInterpolation()||this.try(i)))&&(r=!0,!this.hasWhitespace()););return r},t.prototype._parseInterpolation=function(){var e=this.mark();if(this.peekDelim("@")||this.peekDelim("$")){var t=this.createNode(Vi.Interpolation);return this.consumeToken(),this.hasWhitespace()||!this.accept(Vr.CurlyL)?(this.restoreAtMark(e),null):t.addChild(this._parseIdent())?this.accept(Vr.CurlyR)?this.finish(t):this.finish(t,pa.RightCurlyExpected):this.finish(t,pa.IdentifierExpected)}return null},t.prototype._tryParseMixinDeclaration=function(){var e=this.mark(),t=this.create(os);if(!t.setIdentifier(this._parseMixinDeclarationIdentifier())||!this.accept(Vr.ParenthesisL))return this.restoreAtMark(e),null;if(t.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(Vr.Comma)||this.accept(Vr.SemiColon))&&!this.peek(Vr.ParenthesisR);)t.getParameters().addChild(this._parseMixinParameter())||this.markError(t,pa.IdentifierExpected,[],[Vr.ParenthesisR]);return this.accept(Vr.ParenthesisR)?(t.setGuard(this._parseGuard()),this.peek(Vr.CurlyL)?this._parseBody(t,this._parseMixInBodyDeclaration.bind(this)):(this.restoreAtMark(e),null)):(this.restoreAtMark(e),null)},t.prototype._parseMixInBodyDeclaration=function(){return this._parseFontFace()||this._parseRuleSetDeclaration()},t.prototype._parseMixinDeclarationIdentifier=function(){var e;if(this.peekDelim("#")||this.peekDelim(".")){if(e=this.create(Qi),this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseIdent()))return null}else{if(!this.peek(Vr.Hash))return null;e=this.create(Qi),this.consumeToken()}return e.referenceTypes=[Bi.Mixin],this.finish(e)},t.prototype._parsePseudo=function(){if(!this.peek(Vr.Colon))return null;var t=this.mark(),n=this.create(ts);return this.consumeToken(),this.acceptIdent("extend")?this._completeExtends(n):(this.restoreAtMark(t),e.prototype._parsePseudo.call(this))},t.prototype._parseExtend=function(){if(!this.peekDelim("&"))return null;var e=this.mark(),t=this.create(ts);return this.consumeToken(),!this.hasWhitespace()&&this.accept(Vr.Colon)&&this.acceptIdent("extend")?this._completeExtends(t):(this.restoreAtMark(e),null)},t.prototype._completeExtends=function(e){if(!this.accept(Vr.ParenthesisL))return this.finish(e,pa.LeftParenthesisExpected);var t=e.getSelectors();if(!t.addChild(this._parseSelector(!0)))return this.finish(e,pa.SelectorExpected);for(;this.accept(Vr.Comma);)if(!t.addChild(this._parseSelector(!0)))return this.finish(e,pa.SelectorExpected);return this.accept(Vr.ParenthesisR)?this.finish(e):this.finish(e,pa.RightParenthesisExpected)},t.prototype._parseDetachedRuleSetMixin=function(){if(!this.peek(Vr.AtKeyword))return null;var e=this.mark(),t=this.create(is);return!t.addChild(this._parseVariable(!0))||!this.hasWhitespace()&&this.accept(Vr.ParenthesisL)?this.accept(Vr.ParenthesisR)?this.finish(t):this.finish(t,pa.RightParenthesisExpected):(this.restoreAtMark(e),null)},t.prototype._tryParseMixinReference=function(e){void 0===e&&(e=!0);for(var t=this.mark(),n=this.create(is),r=this._parseMixinDeclarationIdentifier();r;){this.acceptDelim(">");var i=this._parseMixinDeclarationIdentifier();if(!i)break;n.getNamespaces().addChild(r),r=i}if(!n.setIdentifier(r))return this.restoreAtMark(t),null;var o=!1;if(this.accept(Vr.ParenthesisL)){if(o=!0,n.getArguments().addChild(this._parseMixinArgument()))for(;(this.accept(Vr.Comma)||this.accept(Vr.SemiColon))&&!this.peek(Vr.ParenthesisR);)if(!n.getArguments().addChild(this._parseMixinArgument()))return this.finish(n,pa.ExpressionExpected);if(!this.accept(Vr.ParenthesisR))return this.finish(n,pa.RightParenthesisExpected);r.referenceTypes=[Bi.Mixin]}else r.referenceTypes=[Bi.Mixin,Bi.Rule];return this.peek(Vr.BracketL)?e||this._addLookupChildren(n):n.addChild(this._parsePrio()),o||this.peek(Vr.SemiColon)||this.peek(Vr.CurlyR)||this.peek(Vr.EOF)?this.finish(n):(this.restoreAtMark(t),null)},t.prototype._parseMixinArgument=function(){var e=this.create(mo),t=this.mark(),n=this._parseVariable();return n&&(this.accept(Vr.Colon)?e.setIdentifier(n):this.restoreAtMark(t)),e.setValue(this._parseDetachedRuleSet()||this._parseExpr(!0))?this.finish(e):(this.restoreAtMark(t),null)},t.prototype._parseMixinParameter=function(){var e=this.create(uo);if(this.peekKeyword("@rest")){var t=this.create(Xi);return this.consumeToken(),this.accept(kd)?(e.setIdentifier(this.finish(t)),this.finish(e)):this.finish(e,pa.DotExpected,[],[Vr.Comma,Vr.ParenthesisR])}if(this.peek(kd)){var n=this.create(Xi);return this.consumeToken(),e.setIdentifier(this.finish(n)),this.finish(e)}var r=!1;return e.setIdentifier(this._parseVariable())&&(this.accept(Vr.Colon),r=!0),e.setDefaultValue(this._parseDetachedRuleSet()||this._parseExpr(!0))||r?this.finish(e):null},t.prototype._parseGuard=function(){if(!this.peekIdent("when"))return null;var e=this.create(ls);if(this.consumeToken(),e.isNegated=this.acceptIdent("not"),!e.getConditions().addChild(this._parseGuardCondition()))return this.finish(e,pa.ConditionExpected);for(;this.acceptIdent("and")||this.accept(Vr.Comma);)if(!e.getConditions().addChild(this._parseGuardCondition()))return this.finish(e,pa.ConditionExpected);return this.finish(e)},t.prototype._parseGuardCondition=function(){if(!this.peek(Vr.ParenthesisL))return null;var e=this.create(cs);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(Vr.ParenthesisR)?this.finish(e):this.finish(e,pa.RightParenthesisExpected)},t.prototype._parseFunction=function(){var e=this.mark(),t=this.create(po);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(Vr.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseMixinArgument()))for(;(this.accept(Vr.Comma)||this.accept(Vr.SemiColon))&&!this.peek(Vr.ParenthesisR);)if(!t.getArguments().addChild(this._parseMixinArgument()))return this.finish(t,pa.ExpressionExpected);return this.accept(Vr.ParenthesisR)?this.finish(t):this.finish(t,pa.RightParenthesisExpected)},t.prototype._parseFunctionIdentifier=function(){if(this.peekDelim("%")){var t=this.create(Qi);return t.referenceTypes=[Bi.Function],this.consumeToken(),this.finish(t)}return e.prototype._parseFunctionIdentifier.call(this)},t.prototype._parseURLArgument=function(){var t=this.mark(),n=e.prototype._parseURLArgument.call(this);if(!n||!this.peek(Vr.ParenthesisR)){this.restoreAtMark(t);var r=this.create(Xi);return r.addChild(this._parseBinaryExpr()),this.finish(r)}return n},t}(ac),Fd=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Rd=ms(),Nd=function(e){function t(t,n){return e.call(this,"@",t,n)||this}return Fd(t,e),t.prototype.createFunctionProposals=function(e,t,n,r){for(var i=0,o=e;i 50%"),example:"percentage(@number);",type:"percentage"},{name:"round",description:Rd("vs/language/css/css.worker","less.builtin.round","rounds a number to a number of places"),example:"round(number, [places: 0]);"},{name:"sqrt",description:Rd("vs/language/css/css.worker","less.builtin.sqrt","calculates square root of a number"),example:"sqrt(number);"},{name:"sin",description:Rd("vs/language/css/css.worker","less.builtin.sin","sine function"),example:"sin(number);"},{name:"tan",description:Rd("vs/language/css/css.worker","less.builtin.tan","tangent function"),example:"tan(number);"},{name:"atan",description:Rd("vs/language/css/css.worker","less.builtin.atan","arctangent - inverse of tangent function"),example:"atan(number);"},{name:"pi",description:Rd("vs/language/css/css.worker","less.builtin.pi","returns pi"),example:"pi();"},{name:"pow",description:Rd("vs/language/css/css.worker","less.builtin.pow","first argument raised to the power of the second argument"),example:"pow(@base, @exponent);"},{name:"mod",description:Rd("vs/language/css/css.worker","less.builtin.mod","first argument modulus second argument"),example:"mod(number, number);"},{name:"min",description:Rd("vs/language/css/css.worker","less.builtin.min","returns the lowest of one or more values"),example:"min(@x, @y);"},{name:"max",description:Rd("vs/language/css/css.worker","less.builtin.max","returns the lowest of one or more values"),example:"max(@x, @y);"}],t.colorProposals=[{name:"argb",example:"argb(@color);",description:Rd("vs/language/css/css.worker","less.builtin.argb","creates a #AARRGGBB")},{name:"hsl",example:"hsl(@hue, @saturation, @lightness);",description:Rd("vs/language/css/css.worker","less.builtin.hsl","creates a color")},{name:"hsla",example:"hsla(@hue, @saturation, @lightness, @alpha);",description:Rd("vs/language/css/css.worker","less.builtin.hsla","creates a color")},{name:"hsv",example:"hsv(@hue, @saturation, @value);",description:Rd("vs/language/css/css.worker","less.builtin.hsv","creates a color")},{name:"hsva",example:"hsva(@hue, @saturation, @value, @alpha);",description:Rd("vs/language/css/css.worker","less.builtin.hsva","creates a color")},{name:"hue",example:"hue(@color);",description:Rd("vs/language/css/css.worker","less.builtin.hue","returns the `hue` channel of `@color` in the HSL space")},{name:"saturation",example:"saturation(@color);",description:Rd("vs/language/css/css.worker","less.builtin.saturation","returns the `saturation` channel of `@color` in the HSL space")},{name:"lightness",example:"lightness(@color);",description:Rd("vs/language/css/css.worker","less.builtin.lightness","returns the `lightness` channel of `@color` in the HSL space")},{name:"hsvhue",example:"hsvhue(@color);",description:Rd("vs/language/css/css.worker","less.builtin.hsvhue","returns the `hue` channel of `@color` in the HSV space")},{name:"hsvsaturation",example:"hsvsaturation(@color);",description:Rd("vs/language/css/css.worker","less.builtin.hsvsaturation","returns the `saturation` channel of `@color` in the HSV space")},{name:"hsvvalue",example:"hsvvalue(@color);",description:Rd("vs/language/css/css.worker","less.builtin.hsvvalue","returns the `value` channel of `@color` in the HSV space")},{name:"red",example:"red(@color);",description:Rd("vs/language/css/css.worker","less.builtin.red","returns the `red` channel of `@color`")},{name:"green",example:"green(@color);",description:Rd("vs/language/css/css.worker","less.builtin.green","returns the `green` channel of `@color`")},{name:"blue",example:"blue(@color);",description:Rd("vs/language/css/css.worker","less.builtin.blue","returns the `blue` channel of `@color`")},{name:"alpha",example:"alpha(@color);",description:Rd("vs/language/css/css.worker","less.builtin.alpha","returns the `alpha` channel of `@color`")},{name:"luma",example:"luma(@color);",description:Rd("vs/language/css/css.worker","less.builtin.luma","returns the `luma` value (perceptual brightness) of `@color`")},{name:"saturate",example:"saturate(@color, 10%);",description:Rd("vs/language/css/css.worker","less.builtin.saturate","return `@color` 10% points more saturated")},{name:"desaturate",example:"desaturate(@color, 10%);",description:Rd("vs/language/css/css.worker","less.builtin.desaturate","return `@color` 10% points less saturated")},{name:"lighten",example:"lighten(@color, 10%);",description:Rd("vs/language/css/css.worker","less.builtin.lighten","return `@color` 10% points lighter")},{name:"darken",example:"darken(@color, 10%);",description:Rd("vs/language/css/css.worker","less.builtin.darken","return `@color` 10% points darker")},{name:"fadein",example:"fadein(@color, 10%);",description:Rd("vs/language/css/css.worker","less.builtin.fadein","return `@color` 10% points less transparent")},{name:"fadeout",example:"fadeout(@color, 10%);",description:Rd("vs/language/css/css.worker","less.builtin.fadeout","return `@color` 10% points more transparent")},{name:"fade",example:"fade(@color, 50%);",description:Rd("vs/language/css/css.worker","less.builtin.fade","return `@color` with 50% transparency")},{name:"spin",example:"spin(@color, 10);",description:Rd("vs/language/css/css.worker","less.builtin.spin","return `@color` with a 10 degree larger in hue")},{name:"mix",example:"mix(@color1, @color2, [@weight: 50%]);",description:Rd("vs/language/css/css.worker","less.builtin.mix","return a mix of `@color1` and `@color2`")},{name:"greyscale",example:"greyscale(@color);",description:Rd("vs/language/css/css.worker","less.builtin.greyscale","returns a grey, 100% desaturated color")},{name:"contrast",example:"contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);",description:Rd("vs/language/css/css.worker","less.builtin.contrast","return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes")},{name:"multiply",example:"multiply(@color1, @color2);"},{name:"screen",example:"screen(@color1, @color2);"},{name:"overlay",example:"overlay(@color1, @color2);"},{name:"softlight",example:"softlight(@color1, @color2);"},{name:"hardlight",example:"hardlight(@color1, @color2);"},{name:"difference",example:"difference(@color1, @color2);"},{name:"exclusion",example:"exclusion(@color1, @color2);"},{name:"average",example:"average(@color1, @color2);"},{name:"negation",example:"negation(@color1, @color2);"}],t}(Mc);function Dd(e,t){var n=function(e){function t(t){return e.positionAt(t.offset).line}function n(t){return e.positionAt(t.offset+t.len).line}var r=[],i=[],o=function(){switch(e.languageId){case"scss":return new nd;case"less":return new Cd;default:return new Mi}}();o.ignoreComment=!1,o.setSource(e.getText());for(var s=o.scan(),a=null,l=function(){switch(s.type){case Vr.CurlyL:case Xh:i.push({line:t(s),type:"brace",isStart:!0});break;case Vr.CurlyR:if(0!==i.length){if(!(d=Td(i,"brace")))break;var l=n(s);"brace"===d.type&&(a&&n(a)!==l&&l--,d.line!==l&&r.push({startLine:d.line,endLine:l,kind:void 0}))}break;case Vr.Comment:var c=function(e){return"#region"===e?{line:t(s),type:"comment",isStart:!0}:{line:n(s),type:"comment",isStart:!1}},h=function(t){var n=t.text.match(/^\s*\/\*\s*(#region|#endregion)\b\s*(.*?)\s*\*\//);if(n)return c(n[1]);if("scss"===e.languageId||"less"===e.languageId){var r=t.text.match(/^\s*\/\/\s*(#region|#endregion)\b\s*(.*?)\s*/);if(r)return c(r[1])}return null}(s);if(h)if(h.isStart)i.push(h);else{var d;if(!(d=Td(i,"comment")))break;"comment"===d.type&&d.line!==h.line&&r.push({startLine:d.line,endLine:h.line,kind:"region"})}else{var p=function(e,r){var i=t(e),o=n(e);return i!==o?{startLine:i,endLine:o,kind:r}:null}(s,"comment");p&&r.push(p)}}a=s,s=o.scan()};s.type!==Vr.EOF;)l();return r}(e);return function(e,t){var n=t&&t.rangeLimit||Number.MAX_VALUE,r=e.sort((function(e,t){var n=e.startLine-t.startLine;return 0===n&&(n=e.endLine-t.endLine),n})),i=[],o=-1;return r.forEach((function(e){e.startLine=0;n--)if(e[n].type===t&&e[n].isStart)return e.splice(n,1)[0];return null}pd=[,,function(e){function t(e){this.__parent=e,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}function n(e,t){this.__cache=[""],this.__indent_size=e.indent_size,this.__indent_string=e.indent_char,e.indent_with_tabs||(this.__indent_string=new Array(e.indent_size+1).join(e.indent_char)),t=t||"",e.indent_level>0&&(t=new Array(e.indent_level+1).join(this.__indent_string)),this.__base_string=t,this.__base_string_length=t.length}function r(e,r){this.__indent_cache=new n(e,r),this.raw=!1,this._end_with_newline=e.end_with_newline,this.indent_size=e.indent_size,this.wrap_line_length=e.wrap_line_length,this.indent_empty_lines=e.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new t(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}t.prototype.clone_empty=function(){var e=new t(this.__parent);return e.set_indent(this.__indent_count,this.__alignment_count),e},t.prototype.item=function(e){return e<0?this.__items[this.__items.length+e]:this.__items[e]},t.prototype.has_match=function(e){for(var t=this.__items.length-1;t>=0;t--)if(this.__items[t].match(e))return!0;return!1},t.prototype.set_indent=function(e,t){this.is_empty()&&(this.__indent_count=e||0,this.__alignment_count=t||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},t.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},t.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},t.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var e=this.__parent.current_line;return e.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),e.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),e.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count," "===e.__items[0]&&(e.__items.splice(0,1),e.__character_count-=1),!0}return!1},t.prototype.is_empty=function(){return 0===this.__items.length},t.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},t.prototype.push=function(e){this.__items.push(e);var t=e.lastIndexOf("\n");-1!==t?this.__character_count=e.length-t:this.__character_count+=e.length},t.prototype.pop=function(){var e=null;return this.is_empty()||(e=this.__items.pop(),this.__character_count-=e.length),e},t.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},t.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},t.prototype.trim=function(){for(;" "===this.last();)this.__items.pop(),this.__character_count-=1},t.prototype.toString=function(){var e="";return this.is_empty()?this.__parent.indent_empty_lines&&(e=this.__parent.get_indent_string(this.__indent_count)):(e=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),e+=this.__items.join("")),e},n.prototype.get_indent_size=function(e,t){var n=this.__base_string_length;return t=t||0,e<0&&(n=0),(n+=e*this.__indent_size)+t},n.prototype.get_indent_string=function(e,t){var n=this.__base_string;return t=t||0,e<0&&(e=0,n=""),t+=e*this.__indent_size,this.__ensure_cache(t),n+this.__cache[t]},n.prototype.__ensure_cache=function(e){for(;e>=this.__cache.length;)this.__add_column()},n.prototype.__add_column=function(){var e=this.__cache.length,t=0,n="";this.__indent_size&&e>=this.__indent_size&&(e-=(t=Math.floor(e/this.__indent_size))*this.__indent_size,n=new Array(t+1).join(this.__indent_string)),e&&(n+=new Array(e+1).join(" ")),this.__cache.push(n)},r.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},r.prototype.get_line_number=function(){return this.__lines.length},r.prototype.get_indent_string=function(e,t){return this.__indent_cache.get_indent_string(e,t)},r.prototype.get_indent_size=function(e,t){return this.__indent_cache.get_indent_size(e,t)},r.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},r.prototype.add_new_line=function(e){return!(this.is_empty()||!e&&this.just_added_newline()||(this.raw||this.__add_outputline(),0))},r.prototype.get_code=function(e){this.trim(!0);var t=this.current_line.pop();t&&("\n"===t[t.length-1]&&(t=t.replace(/\n+$/g,"")),this.current_line.push(t)),this._end_with_newline&&this.__add_outputline();var n=this.__lines.join("\n");return"\n"!==e&&(n=n.replace(/[\n]/g,e)),n},r.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},r.prototype.set_indent=function(e,t){return e=e||0,t=t||0,this.next_line.set_indent(e,t),this.__lines.length>1?(this.current_line.set_indent(e,t),!0):(this.current_line.set_indent(),!1)},r.prototype.add_raw_token=function(e){for(var t=0;t1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},r.prototype.just_added_newline=function(){return this.current_line.is_empty()},r.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},r.prototype.ensure_empty_line_above=function(e,n){for(var r=this.__lines.length-2;r>=0;){var i=this.__lines[r];if(i.is_empty())break;if(0!==i.item(0).indexOf(e)&&i.item(-1)!==n){this.__lines.splice(r+1,0,new t(this)),this.previous_line=this.__lines[this.__lines.length-2];break}r--}},e.exports.Output=r},,,,function(e){function t(e,t){this.raw_options=n(e,t),this.disabled=this._get_boolean("disabled"),this.eol=this._get_characters("eol","auto"),this.end_with_newline=this._get_boolean("end_with_newline"),this.indent_size=this._get_number("indent_size",4),this.indent_char=this._get_characters("indent_char"," "),this.indent_level=this._get_number("indent_level"),this.preserve_newlines=this._get_boolean("preserve_newlines",!0),this.max_preserve_newlines=this._get_number("max_preserve_newlines",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean("indent_with_tabs","\t"===this.indent_char),this.indent_with_tabs&&(this.indent_char="\t",1===this.indent_size&&(this.indent_size=4)),this.wrap_line_length=this._get_number("wrap_line_length",this._get_number("max_char")),this.indent_empty_lines=this._get_boolean("indent_empty_lines"),this.templating=this._get_selection_list("templating",["auto","none","django","erb","handlebars","php","smarty"],["auto"])}function n(e,t){var n,i={};for(n in e=r(e))n!==t&&(i[n]=e[n]);if(t&&e[t])for(n in e[t])i[n]=e[t][n];return i}function r(e){var t,n={};for(t in e)n[t.replace(/-/g,"_")]=e[t];return n}t.prototype._get_array=function(e,t){var n=this.raw_options[e],r=t||[];return"object"==typeof n?null!==n&&"function"==typeof n.concat&&(r=n.concat()):"string"==typeof n&&(r=n.split(/[^a-zA-Z0-9_\/\-]+/)),r},t.prototype._get_boolean=function(e,t){var n=this.raw_options[e];return void 0===n?!!t:!!n},t.prototype._get_characters=function(e,t){var n=this.raw_options[e],r=t||"";return"string"==typeof n&&(r=n.replace(/\\r/,"\r").replace(/\\n/,"\n").replace(/\\t/,"\t")),r},t.prototype._get_number=function(e,t){var n=this.raw_options[e];t=parseInt(t,10),isNaN(t)&&(t=0);var r=parseInt(n,10);return isNaN(r)&&(r=t),r},t.prototype._get_selection=function(e,t,n){var r=this._get_selection_list(e,t,n);if(1!==r.length)throw new Error("Invalid Option Value: The option '"+e+"' can only be one of the following values:\n"+t+"\nYou passed in: '"+this.raw_options[e]+"'");return r[0]},t.prototype._get_selection_list=function(e,t,n){if(!t||0===t.length)throw new Error("Selection list cannot be empty.");if(n=n||[t[0]],!this._is_valid_selection(n,t))throw new Error("Invalid Default Value!");var r=this._get_array(e,n);if(!this._is_valid_selection(r,t))throw new Error("Invalid Option Value: The option '"+e+"' can contain only the following values:\n"+t+"\nYou passed in: '"+this.raw_options[e]+"'");return r},t.prototype._is_valid_selection=function(e,t){return e.length&&t.length&&!e.some((function(e){return-1===t.indexOf(e)}))},e.exports.Options=t,e.exports.normalizeOpts=r,e.exports.mergeOpts=n},,function(e){var t=RegExp.prototype.hasOwnProperty("sticky");function n(e){this.__input=e||"",this.__input_length=this.__input.length,this.__position=0}n.prototype.restart=function(){this.__position=0},n.prototype.back=function(){this.__position>0&&(this.__position-=1)},n.prototype.hasNext=function(){return this.__position=0&&e=0&&t=e.length&&this.__input.substring(t-e.length,t).toLowerCase()===e},e.exports.InputScanner=n},,,,,function(e){function t(e,t){e="string"==typeof e?e:e.source,t="string"==typeof t?t:t.source,this.__directives_block_pattern=new RegExp(e+/ beautify( \w+[:]\w+)+ /.source+t,"g"),this.__directive_pattern=/ (\w+)[:](\w+)/g,this.__directives_end_ignore_pattern=new RegExp(e+/\sbeautify\signore:end\s/.source+t,"g")}t.prototype.get_directives=function(e){if(!e.match(this.__directives_block_pattern))return null;var t={};this.__directive_pattern.lastIndex=0;for(var n=this.__directive_pattern.exec(e);n;)t[n[1]]=n[2],n=this.__directive_pattern.exec(e);return t},t.prototype.readIgnored=function(e){return e.readUntilAfter(this.__directives_end_ignore_pattern)},e.exports.Directives=t},,function(e,t,n){var r=n(16).Beautifier,i=n(17).Options;e.exports=function(e,t){return new r(e,t).beautify()},e.exports.defaultOptions=function(){return new i}},function(e,t,n){var r=n(17).Options,i=n(2).Output,o=n(8).InputScanner,s=new(0,n(13).Directives)(/\/\*/,/\*\//),a=/\r\n|[\r\n]/,l=/\r\n|[\r\n]/g,c=/\s/,h=/(?:\s|\n)+/g,d=/\/\*(?:[\s\S]*?)((?:\*\/)|$)/g,p=/\/\/(?:[^\n\r\u2028\u2029]*)/g;function u(e,t){this._source_text=e||"",this._options=new r(t),this._ch=null,this._input=null,this.NESTED_AT_RULE={"@page":!0,"@font-face":!0,"@keyframes":!0,"@media":!0,"@supports":!0,"@document":!0},this.CONDITIONAL_GROUP_RULE={"@media":!0,"@supports":!0,"@document":!0}}u.prototype.eatString=function(e){var t="";for(this._ch=this._input.next();this._ch;){if(t+=this._ch,"\\"===this._ch)t+=this._input.next();else if(-1!==e.indexOf(this._ch)||"\n"===this._ch)break;this._ch=this._input.next()}return t},u.prototype.eatWhitespace=function(e){for(var t=c.test(this._input.peek()),n=0;c.test(this._input.peek());)this._ch=this._input.next(),e&&"\n"===this._ch&&(0===n||n0&&this._indentLevel--},u.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var e=this._source_text,t=this._options.eol;"auto"===t&&(t="\n",e&&a.test(e||"")&&(t=e.match(a)[0]));var n=(e=e.replace(l,"\n")).match(/^[\t ]*/)[0];this._output=new i(this._options,n),this._input=new o(e),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var r,u,m=0,f=!1,g=!1,b=!1,v=!1,y=!1,w=this._ch;r=""!==this._input.read(h),u=w,this._ch=this._input.next(),"\\"===this._ch&&this._input.hasNext()&&(this._ch+=this._input.next()),w=this._ch,this._ch;)if("/"===this._ch&&"*"===this._input.peek()){this._output.add_new_line(),this._input.back();var x=this._input.read(d),S=s.get_directives(x);S&&"start"===S.ignore&&(x+=s.readIgnored(this._input)),this.print_string(x),this.eatWhitespace(!0),this._output.add_new_line()}else if("/"===this._ch&&"/"===this._input.peek())this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(p)),this.eatWhitespace(!0);else if("@"===this._ch)if(this.preserveSingleSpace(r),"{"===this._input.peek())this.print_string(this._ch+this.eatString("}"));else{this.print_string(this._ch);var k=this._input.peekUntilAfter(/[: ,;{}()[\]\/='"]/g);k.match(/[ :]$/)&&(k=this.eatString(": ").replace(/\s$/,""),this.print_string(k),this._output.space_before_token=!0),"extend"===(k=k.replace(/\s$/,""))?v=!0:"import"===k&&(y=!0),k in this.NESTED_AT_RULE?(this._nestedLevel+=1,k in this.CONDITIONAL_GROUP_RULE&&(b=!0)):f||0!==m||-1===k.indexOf(":")||(g=!0,this.indent())}else"#"===this._ch&&"{"===this._input.peek()?(this.preserveSingleSpace(r),this.print_string(this._ch+this.eatString("}"))):"{"===this._ch?(g&&(g=!1,this.outdent()),b?(b=!1,f=this._indentLevel>=this._nestedLevel):f=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&f&&this._output.previous_line&&"{"!==this._output.previous_line.item(-1)&&this._output.ensure_empty_line_above("/",","),this._output.space_before_token=!0,"expand"===this._options.brace_style?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):(this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line()):"}"===this._ch?(this.outdent(),this._output.add_new_line(),"{"===u&&this._output.trim(!0),y=!1,v=!1,g&&(this.outdent(),g=!1),this.print_string(this._ch),f=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&"}"!==this._input.peek()&&this._output.add_new_line(!0)):":"===this._ch?!f&&!b||this._input.lookBack("&")||this.foundNestedPseudoClass()||this._input.lookBack("(")||v||0!==m?(this._input.lookBack(" ")&&(this._output.space_before_token=!0),":"===this._input.peek()?(this._ch=this._input.next(),this.print_string("::")):this.print_string(":")):(this.print_string(":"),g||(g=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent())):'"'===this._ch||"'"===this._ch?(this.preserveSingleSpace(r),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0)):";"===this._ch?0===m?(g&&(this.outdent(),g=!1),v=!1,y=!1,this.print_string(this._ch),this.eatWhitespace(!0),"/"!==this._input.peek()&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0):"("===this._ch?this._input.lookBack("url")?(this.print_string(this._ch),this.eatWhitespace(),m++,this.indent(),this._ch=this._input.next(),")"===this._ch||'"'===this._ch||"'"===this._ch?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(")")),m&&(m--,this.outdent()))):(this.preserveSingleSpace(r),this.print_string(this._ch),this.eatWhitespace(),m++,this.indent()):")"===this._ch?(m&&(m--,this.outdent()),this.print_string(this._ch)):","===this._ch?(this.print_string(this._ch),this.eatWhitespace(!0),!this._options.selector_separator_newline||g||0!==m||y||v?this._output.space_before_token=!0:this._output.add_new_line()):">"!==this._ch&&"+"!==this._ch&&"~"!==this._ch||g||0!==m?"]"===this._ch?this.print_string(this._ch):"["===this._ch?(this.preserveSingleSpace(r),this.print_string(this._ch)):"="===this._ch?(this.eatWhitespace(),this.print_string("="),c.test(this._ch)&&(this._ch="")):"!"!==this._ch||this._input.lookBack("\\")?(this.preserveSingleSpace(r),this.print_string(this._ch)):(this.print_string(" "),this.print_string(this._ch)):this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&c.test(this._ch)&&(this._ch=""));return this._output.get_code(t)},e.exports.Beautifier=u},function(e,t,n){var r=n(6).Options;function i(e){r.call(this,e,"css"),this.selector_separator_newline=this._get_boolean("selector_separator_newline",!0),this.newline_between_rules=this._get_boolean("newline_between_rules",!0);var t=this._get_boolean("space_around_selector_separator");this.space_around_combinator=this._get_boolean("space_around_combinator")||t;var n=this._get_selection_list("brace_style",["collapse","expand","end-expand","none","preserve-inline"]);this.brace_style="collapse";for(var i=0;i0&&Wd(r,c-1);)c--;0===c||Od(r,c-1)?l=c:c=0;){var n=e.charCodeAt(t);if(n===Md)return!0;if(n===Pd)return!1;t--}return!1}(r,l),i=h===r.length,r=r.substring(l,h),0!==l){var p=e.offsetAt(ys.create(t.start.line,0));o=function(e,t,n){for(var r=t,i=0,o=n.tabSize||4;r0){var f=n.insertSpaces?Wi(" ",a*o):Wi("\t",o);m=m.split("\n").join("\n"+f),0===t.start.character&&(m=f+m)}return[{range:t,newText:m}]}function Id(e){return e.replace(/^\s+/,"")}var Md="{".charCodeAt(0),Pd="}".charCodeAt(0);function Ld(e,t,n){if(e&&e.hasOwnProperty(t)){var r=e[t];if(null!==r)return r}return n}function Od(e,t){return-1!=="\r\n".indexOf(e.charAt(t))}function Wd(e,t){return-1!==" \t".indexOf(e.charAt(t))}var Ud={version:1.1,properties:[{name:"additive-symbols",browsers:["FF33"],syntax:"[ && ]#",relevance:50,description:"@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor. Needs to be specified if the counter system is 'additive'.",restrictions:["integer","string","image","identifier"]},{name:"align-content",values:[{name:"center",description:"Lines are packed toward the center of the flex container."},{name:"flex-end",description:"Lines are packed toward the end of the flex container."},{name:"flex-start",description:"Lines are packed toward the start of the flex container."},{name:"space-around",description:"Lines are evenly distributed in the flex container, with half-size spaces on either end."},{name:"space-between",description:"Lines are evenly distributed in the flex container."},{name:"stretch",description:"Lines stretch to take up the remaining space."}],syntax:"normal | | | ? ",relevance:62,description:"Aligns a flex container’s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.",restrictions:["enum"]},{name:"align-items",values:[{name:"baseline",description:"If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item’s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"normal | stretch | | [ ? ]",relevance:85,description:"Aligns flex items along the cross axis of the current line of the flex container.",restrictions:["enum"]},{name:"justify-items",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"},{name:"legacy"}],syntax:"normal | stretch | | ? [ | left | right ] | legacy | legacy && [ left | right | center ]",relevance:53,description:"Defines the default justify-self for all items of the box, giving them the default way of justifying each box along the appropriate axis",restrictions:["enum"]},{name:"justify-self",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"}],syntax:"auto | normal | stretch | | ? [ | left | right ]",relevance:53,description:"Defines the way of justifying a box inside its container along the appropriate axis.",restrictions:["enum"]},{name:"align-self",values:[{name:"auto",description:"Computes to the value of 'align-items' on the element’s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself."},{name:"baseline",description:"If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item’s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"auto | normal | stretch | | ? ",relevance:72,description:"Allows the default alignment along the cross axis to be overridden for individual flex items.",restrictions:["enum"]},{name:"all",browsers:["E79","FF27","S9.1","C37","O24"],values:[],syntax:"initial | inherit | unset | revert",relevance:53,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/all"}],description:"Shorthand that resets all properties except 'direction' and 'unicode-bidi'.",restrictions:["enum"]},{name:"alt",browsers:["S9"],values:[],relevance:50,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/alt"}],description:"Provides alternative text for assistive technology to replace the generated content of a ::before or ::after element.",restrictions:["string","enum"]},{name:"animation",values:[{name:"alternate",description:"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."},{name:"alternate-reverse",description:"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."},{name:"backwards",description:"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."},{name:"both",description:"Both forwards and backwards fill modes are applied."},{name:"forwards",description:"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."},{name:"infinite",description:"Causes the animation to repeat forever."},{name:"none",description:"No animation is performed"},{name:"normal",description:"Normal playback."},{name:"reverse",description:"All iterations of the animation are played in the reverse direction from the way they were specified."}],syntax:"#",relevance:82,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/animation"}],description:"Shorthand property combines six of the animation properties into a single property.",restrictions:["time","timing-function","enum","identifier","number"]},{name:"animation-delay",syntax:"