From d1963020ada2bfdfda9430bfab5e6c40d8b89d2c Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Mon, 31 Aug 2026 03:19:21 -0300 Subject: [PATCH 01/58] =?UTF-8?q?deps:=20engine=20para=201.4.0=20e=20atual?= =?UTF-8?q?iza=C3=A7=C3=A3o=20das=20depend=C3=AAncias=20npm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A engine 1.4.0 traz a interpretação dos comentários de documentação e a depreciação por `#pragma deprecated`. Também: `@types/node` 26.4.0, `esbuild` 0.28.2 e `vscode-languageclient` 10.1.1. `@types/vscode` volta para 1.106.0, fixo. O bump para 1.134.0 conflitava com `engines.vscode` (`^1.106.0`) e o vsce recusava empacotar; tipar contra uma API mais nova do que o `engines` permite deixaria passar uso de API inexistente no alvo. Fixo, e não em faixa, porque com `^` o npm reintroduz a 1.134 na próxima instalação e o conflito volta. --- package-lock.json | 950 ++++++++++++++++++++++++---------------------- package.json | 8 +- 2 files changed, 493 insertions(+), 465 deletions(-) diff --git a/package-lock.json b/package-lock.json index 25344a4..65d4014 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "iconv-lite": "^0.7.3", - "vscode-languageclient": "^10.1.0" + "vscode-languageclient": "^10.1.1" }, "devDependencies": { - "@types/node": "^26.2.0", - "@types/vscode": "1.134.0", + "@types/node": "^26.4.0", + "@types/vscode": "^1.106.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/vsce": "^3.9.2", "esbuild": "^0.28.2", @@ -60,144 +60,155 @@ } }, "node_modules/@azure-rest/core-client": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.6.1.tgz", - "integrity": "sha512-KzI10qnkWTsVS2yRBUdc8NLUJ1rOm+292mYs7Pe9wqAj/jv4bRskVm1l8XkKeVTN0OCQtrU5RG0Yhjbz1Wmg7g==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.8.0.tgz", + "integrity": "sha512-F1ybHeN+++QhyFCF/ehLUEvrOB6fehPdFBFtGdj0C3B2lpQ9zkPiO5JDgsqc6IfjuUe6b3dAbXK0a7+VgSGfhw==", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-rest-pipeline": "^1.24.0", "@azure/core-tracing": "^1.3.0", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-auth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.0.tgz", - "integrity": "sha512-88Djs5vBvGbHQHf5ZZcaoNHo6Y8BKZkt3cw2iuJIQzLEgH4Ox6Tm4hjFhbqOxyYsgIG/eJbFEHpxRIfEEWv5Ow==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", + "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.0.tgz", - "integrity": "sha512-O4aP3CLFNodg8eTHXECaH3B3CjicfzkxVtnrfLkOq0XNP7TIECGfHpK/C6vADZkWP75wzmdBnsIA8ksuJMk18g==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.0.tgz", + "integrity": "sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.20.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-process": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azure/core-process/-/core-process-1.0.0.tgz", + "integrity": "sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.0.tgz", - "integrity": "sha512-OKHmb3/Kpm06HypvB3g6Q3zJuvyXcpxDpCS1PnU8OV6AJgSFaee/covXBcPbWc6XDDxtEPlbi3EMQ6nUiPaQtw==", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@typespec/ts-http-runtime": "^0.3.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-tracing": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.0.tgz", - "integrity": "sha512-+XvmZLLWPe67WXNZo9Oc9CrPj/Tm8QnHR92fFAFdnbzwNdCH1h+7UdpaQgRSBsMY+oW1kHXNUZQLdZ1gHX3ROw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", + "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/core-util": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.0.tgz", - "integrity": "sha512-o0psW8QWQ58fq3i24Q1K2XfS/jYTxr7O1HRcyUE9bV9NttLU+kYOH82Ixj8DGlMTOWgxm1Sss2QAfKK5UkSPxw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", + "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", + "@azure/abort-controller": "^2.1.2", "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/identity": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.1.tgz", - "integrity": "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.2.tgz", + "integrity": "sha512-NXL2/pCJctLxgw8bvrwwgge743kEq8LBT+O1pmV0vyUwetzFPH9auP6jhkU/cgZCPPtWoewAe3ncaGCgPo07fA==", "dev": true, "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", + "@azure/core-process": "^1.0.0", "@azure/core-rest-pipeline": "^1.17.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^5.5.0", - "@azure/msal-node": "^5.1.0", + "@azure/msal-node": "^5.1.5", "open": "^10.1.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", + "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", "dev": true, "license": "MIT", "dependencies": { @@ -205,26 +216,26 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@azure/msal-browser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.9.0.tgz", - "integrity": "sha512-CzE+4PefDSJWj26zU7G1bKchlGRRHMBFreG4tAlGuzyI8hAPiYGobaJvZBgZBf6L63iphX7VH+ityL8VgEQz9Q==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.20.0.tgz", + "integrity": "sha512-mtOKr708E/E/+qhI50QufmhR8GS5C84IeFGEaH/guMOaPXT9B/obEt8TVzX5U8j5OEUgukn0PrRmwVKaigr2wA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.5.2" + "@azure/msal-common": "16.14.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.5.2.tgz", - "integrity": "sha512-GkDEL6TYo3HgT3UuqakdgE9PZfc1hMki6+Hwgy1uddb/EauvAKfu85vVhuofRSo22D1xTnWt8Ucwfg4vSCVwvA==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.14.0.tgz", + "integrity": "sha512-A4rb55hI86Q9tBl/+jBj7TMz7iX2RFgQs/nExFzcAtoI/BFRVdaH5SL/MivrYD7qvweMpN8AgVvVMHV8UBYxew==", "dev": true, "license": "MIT", "engines": { @@ -232,27 +243,37 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.5.tgz", - "integrity": "sha512-ObTeMoNPmq19X3z40et9Xvs4ZoWVeJg43PZMRLG5iwVL+2nCtAerG3YTDItqPp1CfXNwmCXBbg8jn1DOx65c3g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.6.0.tgz", + "integrity": "sha512-uFY9NxrWHw8PwZx7gAX6PDn+9vdfS05+levc/kwkx77IkjfaldnQbbcQzzDIZ5Hq5Zdr6/z92oAIoRWKp6MnOA==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "16.5.2", + "@azure/msal-common": "16.13.0", "jsonwebtoken": "^9.0.0" }, "engines": { "node": ">=20" } }, + "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.13.0.tgz", + "integrity": "sha512-rOAy0KUcyBbdwVJ+f3uPpthXatFLLZN+/KWAsTLzk1aB23Xl9DRmmXYwSvBFOZyXj4jUQQ5FKxxRkhAFW1fOow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -261,9 +282,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -730,19 +751,6 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -768,24 +776,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -906,9 +896,9 @@ } }, "node_modules/@secretlint/formatter/node_modules/chalk": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", - "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -1023,33 +1013,35 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.7.1.tgz", - "integrity": "sha512-Wii5UgUKFEh9Uv6wbq1zr4/Kf+dtjiUuzPrrXzKp8H+ifkvKNzi23V4Nz+6wVyHQn5T28AFuc8VH8OtzvGYecA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.8.0.tgz", + "integrity": "sha512-5CiH9COYmovWmExQgs7763DzX6Gy9zjkjJ7JxCC95wyTcjwQn/8poNF6fv3qzRlmx8CRRde8DHr9FcgAAiPzgw==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.7.1.tgz", - "integrity": "sha512-TdwZ/debWYFD05K3CcoHtwvnCrza29wZxD+BjDTk/V5N7iRqkK1dTTHSD4A8AIgROLiDkHJmIKQbasbmsg8AvA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.8.0.tgz", + "integrity": "sha512-+oU3A235NATv6Lzi4xa4kJ65PuNJlIxesaO4AvDhDWA9FWm7y4XKWaoQCW1esgaQQ6dwnUiFKArQ8TcJ86mC4w==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.7.1", - "@textlint/resolver": "15.7.1", - "@textlint/types": "15.7.1", - "chalk": "^4.1.2", + "@textlint/module-interop": "15.8.0", + "@textlint/resolver": "15.8.0", + "@textlint/types": "15.8.0", "debug": "^4.4.3", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "lodash": "^4.18.1", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "table": "^6.9.0", "text-table": "^0.2.0" + }, + "engines": { + "node": ">=20.18.0" } }, "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { @@ -1083,33 +1075,33 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.7.1.tgz", - "integrity": "sha512-Jg+sQW2L/cRJypk59wtcMUVVpt8vmit5ZMT3gUnFwevP3A6Qp1HfOtUy9ObT4hBX3lOSGT/ekcCDxR1pL7uH1g==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.8.0.tgz", + "integrity": "sha512-rt+OR1WYGoLOY8HkA/aBPrqufF6yUUEsKEAh7XohTsT3lp9IyZFT6zOIbjul9P4FAzsmSPkcrYjVx3Bz/IUfkg==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.7.1.tgz", - "integrity": "sha512-8XnO0pgF6mXnm41VvWmBbEIdGPhiCUt31uLZkOis1ECeg/1SoUcIT6Mx/F0e1rukq8l0UlOSeY9a31CsvRMK0g==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.8.0.tgz", + "integrity": "sha512-E88tzfX3K8Jykk+38aJ9cy8RquD8ABVOPTO2rFEESq0wcg8x6/ypdAS8ZgR7OKiGqlRF0hkO/m5PbQwVfKM3VA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.7.1.tgz", - "integrity": "sha512-Vye/GmFNBTgVzZFtIFJTmLB+s2A7oIADxNG6r9UhfPuY+Czv0z5G3xeyFZZudPlfxURsKUyPIU5XsjOFqVp33A==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.8.0.tgz", + "integrity": "sha512-Anhc6y5736YIsvqae0U6k0YmB2M/QVHkEeOv2aydAn/WIkdI69dCOiDbe3/+RagS3qstFTSFWJzNRA2lUjv19w==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1" + "@textlint/ast-node-types": "15.8.0" } }, "node_modules/@types/node": { - "version": "26.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", - "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", + "version": "26.4.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.4.0.tgz", + "integrity": "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1131,9 +1123,9 @@ "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.134.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.134.0.tgz", - "integrity": "sha512-NDEu0hg4sF7+vvFsADsktqUJ6f80LHSZvVK2Ovo1XiQ0/VHck1O3zst+ZZyVA/uvz6vo6LcuoqU2q48YMqOwWw==", + "version": "1.106.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.106.0.tgz", + "integrity": "sha512-88oUcEl9Wmlyt64pbvjLzyyFuFuPotdjwy+P+5ggg3DyTJSMWJD3ShX2ppya5mqrAYTKEhcaJBerdc5JTeb32w==", "dev": true, "license": "MIT" }, @@ -1478,9 +1470,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.0.tgz", - "integrity": "sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.8.tgz", + "integrity": "sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==", "dev": true, "license": "MIT", "dependencies": { @@ -1489,7 +1481,7 @@ "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" } }, "node_modules/@vscode/l10n-dev": { @@ -1514,52 +1506,6 @@ "vscode-l10n-dev": "dist/cli.js" } }, - "node_modules/@vscode/l10n-dev/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/l10n-dev/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vscode/l10n-dev/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@vscode/vsce": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.9.2.tgz", @@ -1608,28 +1554,28 @@ } }, "node_modules/@vscode/vsce-sign": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.6.tgz", - "integrity": "sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.1.0.tgz", + "integrity": "sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==", "dev": true, "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.txt", "optionalDependencies": { - "@vscode/vsce-sign-alpine-arm64": "2.0.5", - "@vscode/vsce-sign-alpine-x64": "2.0.5", - "@vscode/vsce-sign-darwin-arm64": "2.0.5", - "@vscode/vsce-sign-darwin-x64": "2.0.5", - "@vscode/vsce-sign-linux-arm": "2.0.5", - "@vscode/vsce-sign-linux-arm64": "2.0.5", - "@vscode/vsce-sign-linux-x64": "2.0.5", - "@vscode/vsce-sign-win32-arm64": "2.0.5", - "@vscode/vsce-sign-win32-x64": "2.0.5" + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" } }, "node_modules/@vscode/vsce-sign-alpine-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.5.tgz", - "integrity": "sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", "cpu": [ "arm64" ], @@ -1641,9 +1587,9 @@ ] }, "node_modules/@vscode/vsce-sign-alpine-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.5.tgz", - "integrity": "sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", "cpu": [ "x64" ], @@ -1655,9 +1601,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.5.tgz", - "integrity": "sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", "cpu": [ "arm64" ], @@ -1669,9 +1615,9 @@ ] }, "node_modules/@vscode/vsce-sign-darwin-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.5.tgz", - "integrity": "sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", "cpu": [ "x64" ], @@ -1683,9 +1629,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-arm": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.5.tgz", - "integrity": "sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", "cpu": [ "arm" ], @@ -1697,9 +1643,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.5.tgz", - "integrity": "sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", "cpu": [ "arm64" ], @@ -1711,9 +1657,9 @@ ] }, "node_modules/@vscode/vsce-sign-linux-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.5.tgz", - "integrity": "sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", "cpu": [ "x64" ], @@ -1725,9 +1671,9 @@ ] }, "node_modules/@vscode/vsce-sign-win32-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.5.tgz", - "integrity": "sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", "cpu": [ "arm64" ], @@ -1739,9 +1685,9 @@ ] }, "node_modules/@vscode/vsce-sign-win32-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.5.tgz", - "integrity": "sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", "cpu": [ "x64" ], @@ -1752,6 +1698,51 @@ "win32" ] }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/vsce/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@vscode/vsce/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -1780,9 +1771,9 @@ } }, "node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { @@ -1796,9 +1787,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { @@ -1919,6 +1910,22 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2066,9 +2073,9 @@ } }, "node_modules/cheerio": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", - "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", "dev": true, "license": "MIT", "dependencies": { @@ -2077,11 +2084,11 @@ "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.0.0", + "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", - "undici": "^7.12.0", + "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" }, "engines": { @@ -2155,6 +2162,24 @@ "node": ">=8" } }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/cockatiel": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", @@ -2317,9 +2342,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -2334,9 +2359,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "dev": true, "license": "MIT", "engines": { @@ -2370,9 +2395,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -2580,9 +2605,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -2696,9 +2721,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz", + "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==", "dev": true, "funding": [ { @@ -2713,9 +2738,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "dev": true, "license": "ISC", "dependencies": { @@ -2779,19 +2804,6 @@ "node": ">= 6" } }, - "node_modules/form-data/node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -2801,9 +2813,9 @@ "optional": true }, "node_modules/fs-extra": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", - "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", "dev": true, "license": "MIT", "dependencies": { @@ -2893,18 +2905,22 @@ "optional": true }, "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "18 || 20 || >=22" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3004,9 +3020,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { @@ -3040,9 +3056,9 @@ } }, "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -3055,14 +3071,14 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -3139,9 +3155,9 @@ "optional": true }, "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.7.tgz", + "integrity": "sha512-dML0wP6oak21rsNYCJpJB6O1BJIEwNpGrTw0URPfAk4hm0e3pRfCtzkfB6olBcXcVlU2rouCyz7lCyRB0OMVCA==", "dev": true, "license": "MIT", "engines": { @@ -3156,9 +3172,9 @@ "license": "MIT" }, "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, "license": "MIT", "engines": { @@ -3262,9 +3278,9 @@ } }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -3333,9 +3349,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -3383,9 +3399,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3431,39 +3447,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/jwa": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", @@ -3655,9 +3638,9 @@ } }, "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", "dev": true, "license": "MIT" }, @@ -3802,9 +3785,9 @@ "optional": true }, "node_modules/node-abi": { - "version": "3.75.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", - "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "version": "3.96.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.96.0.tgz", + "integrity": "sha512-rebQ/lz7i0EkoLzUVSrKRzA69zMkwLp95kKMWoMDkkM00Suxz0D7zEQPwRml5fQum24mj7bPvmlgLAmu2JCiYg==", "dev": true, "license": "MIT", "optional": true, @@ -3848,9 +3831,9 @@ } }, "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", - "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", "dev": true, "license": "MIT", "dependencies": { @@ -3858,7 +3841,7 @@ "fs-extra": "^11.1.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/normalize-package-data": { @@ -3953,9 +3936,9 @@ } }, "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.7.tgz", + "integrity": "sha512-VaWRu2i4FJNRtiRWCuuQRgfQ1B7a6+gMSrO+3j0EQi/k0ULfS9kosRxGoiqwzIjZTDI02tGfk5mXXltLg6QtfQ==", "dev": true, "license": "MIT", "engines": { @@ -4081,31 +4064,28 @@ } }, "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", - "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } + "license": "ISC" }, "node_modules/path-type": { "version": "6.0.0", @@ -4161,6 +4141,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", "dev": true, "license": "MIT", "optional": true, @@ -4223,9 +4204,9 @@ } }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", "optional": true, @@ -4299,15 +4280,15 @@ } }, "node_modules/rc-config-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", - "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz", + "integrity": "sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "js-yaml": "^4.1.0", - "json5": "^2.2.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "json5": "^2.2.3", "require-from-string": "^2.0.2" } }, @@ -4358,21 +4339,28 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4405,9 +4393,9 @@ } }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, "license": "MIT", "engines": { @@ -4469,11 +4457,14 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/secretlint": { "version": "10.2.2", @@ -4498,9 +4489,9 @@ } }, "node_modules/semver": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.3.tgz", - "integrity": "sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4540,15 +4531,15 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -4560,14 +4551,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -4738,23 +4729,29 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4833,13 +4830,13 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -4964,9 +4961,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.5.tgz", + "integrity": "sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==", "dev": true, "license": "MIT", "optional": true, @@ -4995,6 +4992,22 @@ "node": ">=6" } }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/terminal-link": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", @@ -5242,49 +5255,49 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz", - "integrity": "sha512-rfuA6T75H6m5EkbhtEPzre9pT0HPcDI2MMy4+nPFIBks5J8JBAUHD4tRYSgaBOijIEC7SRkC1kKyXTLqbmh9jw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.2.tgz", + "integrity": "sha512-SbQSV9yRemARxeXw6LU5sS6Zq0e9/DgCCX5yelH263ZQWukbTk8EF8fjTrr1dziasf4GwlJbvTwFnTrnQFWZXQ==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.1.0.tgz", - "integrity": "sha512-XXRx6lqVitQy/oOLr9MfNYRG+MbQkhXkDaxbQMiKxEm8zZNfheRFUKNb8UYNh2stn9btl2wQM5wZFJjJvoc+jA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.1.1.tgz", + "integrity": "sha512-EbwIF+KUbwxD5jumQNpiBCv7BJM3Rierv4hcbw/p5jdsnwFFpR/B2VmwqfH4p5XsK46nkH3ugA3WtwJekHHJEw==", "license": "MIT", "dependencies": { - "minimatch": "^10.2.5", + "minimatch": "^10.2.6", "semver": "^7.8.1", - "vscode-languageserver-protocol": "3.18.2", - "vscode-languageserver-textdocument": "1.0.13" + "vscode-languageserver-protocol": "3.18.3", + "vscode-languageserver-textdocument": "1.0.14" }, "engines": { "vscode": "^1.91.0" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.2.tgz", - "integrity": "sha512-XRyDbT0Pp3sSNti3JmxVEUMySWCSi1hhM+/KUlCy1hV1zmrqpM1OwO12EAki8blhmLuIMpaJrYbo0OzGVfK2Qg==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.3.tgz", + "integrity": "sha512-DF49+WeV5py4zO5hhobp60jjsDSK0lAqA0OuKBLBvp423HPWQcCbhZz3JgyfIewsEz2f8U+X75xNIFHdiXZm2w==", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "9.0.1", - "vscode-languageserver-types": "3.18.0" + "vscode-jsonrpc": "9.0.2", + "vscode-languageserver-types": "3.18.3" } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.13.tgz", - "integrity": "sha512-nx0ZHwMGIsVkzFG3/VLeJYBLTaFBRuNdGDvevvjuoayU5EOS2fEYazOhtCM3PI9ClMMg5igc0uwXtAq4tJj+Dw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.14.tgz", + "integrity": "sha512-EQyqJMi552E4ZTf46izQ4Fj6XquqxCySR3J5ZSD1SisMf6RfpeOWHxGBE8Gr6V0/3GHIGdAzDn8F8+1nTGCnoQ==", "license": "MIT" }, "node_modules/vscode-languageserver-types": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.0.tgz", - "integrity": "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.3.tgz", + "integrity": "sha512-XIlzJ7Qp/jzSI1ds7/FwPAWrPeTZA7pAtlW4hdJ1J6xXWJL6dR9QYnDhJOdLzdKhUQ5Mm6mvUMw+3DcOQQasPw==", "license": "MIT" }, "node_modules/web-tree-sitter": { @@ -5298,6 +5311,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", "dependencies": { @@ -5347,18 +5361,18 @@ } }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -5406,27 +5420,42 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/wrappy": { @@ -5495,9 +5524,9 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, "license": "MIT", "dependencies": { @@ -5524,13 +5553,12 @@ } }, "node_modules/yauzl": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.0.tgz", - "integrity": "sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.4.0.tgz", + "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", "dev": true, "license": "MIT", "dependencies": { - "buffer-crc32": "~0.2.3", "pend": "~1.2.0" }, "engines": { diff --git a/package.json b/package.json index ef241d1..3bcd7d4 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "url": "https://github.com/NullSablex/PawnPro" }, "icon": "images/logo.png", - "engineVersion": "1.3.0", + "engineVersion": "1.4.0", "engineRepository": "https://github.com/NullSablex/PawnPro-Engine", "debuggerVersion": "0.1.0", "debuggerRepository": "https://github.com/NullSablex/PawnPro-Debugger", @@ -402,8 +402,8 @@ "package:pre": "npm run bundle && npx @vscode/vsce package --pre-release --no-dependencies --no-yarn && node scripts/repack-vsix.js" }, "devDependencies": { - "@types/node": "^26.2.0", - "@types/vscode": "1.134.0", + "@types/node": "^26.4.0", + "@types/vscode": "1.106.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/vsce": "^3.9.2", "esbuild": "^0.28.2", @@ -412,7 +412,7 @@ }, "dependencies": { "iconv-lite": "^0.7.3", - "vscode-languageclient": "^10.1.0" + "vscode-languageclient": "^10.1.1" }, "overrides": { "minimatch": "10.2.3", From 197dc40ffd399b78d56a919ed7749c3a37e7a2bf Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Mon, 31 Aug 2026 03:19:30 -0300 Subject: [PATCH 02/58] ci: sobe codeql-action, gh-release e pymdown; CodeQL sob demanda MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `github/codeql-action` 4.37.8 → 4.37.9 (`init` e `analyze` no mesmo SHA), `softprops/action-gh-release` 3.0.2 → 3.0.3 e `pymdown-extensions` 11.0.1 → 11.0.2, com os hashes verificados no PyPI. O workflow do CodeQL passa a aceitar `workflow_dispatch`, como o do Scorecard e o do repositório da engine. --- .github/workflows/codeql.yml | 5 +++-- .github/workflows/publish.yml | 2 +- .github/workflows/scorecard.yml | 2 +- docs/requirements.txt | 6 +++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4ceb12f..0336cd4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -7,6 +7,7 @@ on: branches: [master] schedule: - cron: '40 23 * * 1' + workflow_dispatch: permissions: {} @@ -23,12 +24,12 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Initialize CodeQL - uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8 + uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 with: languages: javascript-typescript build-mode: none - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8 + uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4bf8c38..3bafccd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -126,7 +126,7 @@ jobs: run: echo "file=$(ls *.vsix | head -1)" >> "$GITHUB_OUTPUT" - name: Upload VSIX to GitHub Release - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 + uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 with: files: ${{ steps.vsix.outputs.file }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 0b406d8..1de7c21 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,6 +36,6 @@ jobs: publish_results: true - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8 + uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 with: sarif_file: results.sarif diff --git a/docs/requirements.txt b/docs/requirements.txt index 6694e96..d443436 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -313,9 +313,9 @@ pygments==2.20.0 \ --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 # via mkdocs-material -pymdown-extensions==11.0.1 \ - --hash=sha256:db3943a62bab7e03af1364f0c4083e64b91fb097675a4b6cceccfbe9a77e5eb2 \ - --hash=sha256:dd2905ae6fc5b75582fafb139a1266ffc754705efa902aa50067fa7ff4f94ec0 +pymdown-extensions==11.0.2 \ + --hash=sha256:259910762019732caa1dfd76f3faa62c59f191d46573e80bcb1d13c0f675bbe5 \ + --hash=sha256:9506fcbe66fa355a775b768084334238dd6805020ac4b92bea0c0dda6f8f223d # via mkdocs-material python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ From a11b0dda79f0e434e5f115f0af29ae931c439f84 Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Mon, 31 Aug 2026 03:19:31 -0300 Subject: [PATCH 03/58] docs: formatos de doc comment e `#pragma deprecated` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nova seção em `features.md` com exemplos dos dois formatos reconhecidos, e a seção de depreciação reescrita para a diretiva do compilador — o marcador `@DEPRECATED` deixou de ser reconhecido pela engine. Remove também uma linha duplicada de "Semantic Tokens". --- README.md | 2 +- docs/features.md | 59 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 7e3668d..2285978 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Extensão para desenvolvimento em **Pawn** (SA-MP e open.mp) no Visual Studio Co ## Recursos -- **IntelliSense** — auto-complete, hover, signature help, CodeLens (referências) e coloração semântica para Pawn, cobrindo os includes transitivos. +- **IntelliSense** — auto-complete, hover, signature help, CodeLens (referências) e coloração semântica para Pawn, cobrindo os includes transitivos. Os comentários de documentação acima das funções são formatados no hover e no signature help, nos formatos Javadoc (`@param`) e XMLdoc (``, usado pelo open.mp). - **Diagnósticos** — 18 códigos `PP####` para includes não encontrados, erros estruturais, código morto, depreciação, nomenclatura e mais (ver [docs/features.md](docs/features.md)). - **Compilação** — `Ctrl+Alt+B` compila o `.pwn` ativo; detecção automática do `pawncc` via `$PAWNCC`, `$PATH` e subdiretórios do workspace. - **Depuração** — sessão de depuração via DAP (`F5`): breakpoints (simples, condicionais, por contagem, logpoints), passo a passo, inspeção de variáveis e watch. Usa um plugin de servidor (SA-MP / open.mp); ver [docs/debugging.md](docs/debugging.md). diff --git a/docs/features.md b/docs/features.md index f55233f..9086eb2 100644 --- a/docs/features.md +++ b/docs/features.md @@ -14,8 +14,8 @@ A análise de código é feita por um motor nativo em Rust ([pawnpro-engine](htt | `PP0004` | Aviso | `public`/`stock`/`static` sem corpo | | `PP0005` | Aviso¹ | Variável declarada e não utilizada | | `PP0006` | Aviso¹ | Função `stock`/`static` não utilizada | -| `PP0007` | Aviso | Uso de símbolo marcado com `@DEPRECATED`, ou símbolo de include depreciado | -| `PP0008` | Aviso | `#include` marcado com `@DEPRECATED` | +| `PP0007` | Aviso | Uso de símbolo marcado com `#pragma deprecated`, ou símbolo de include depreciado | +| `PP0008` | Aviso | `#include` precedido de `#pragma deprecated` | | `PP0009` | Hint | Parâmetro de função não utilizado | | `PP0010` | Aviso | Função chamada não declarada em nenhum include ativo | | `PP0011` | Hint | `#define` declarado mas não utilizado | @@ -36,14 +36,50 @@ A análise de código é feita por um motor nativo em Rust ([pawnpro-engine](htt ## IntelliSense - **Auto-complete** — funções (`native`, `stock`, `public`, `forward`, `static`), macros (`#define`) e variáveis de todos os includes transitivos; parâmetros com snippets; itens depreciados marcados visivelmente. -- **Hover** — assinatura e comentário de documentação; em `#include` exibe o caminho resolvido e o doc do topo do arquivo. -- **Signature Help** — parâmetro ativo destacado ao digitar `(` e `,`. +- **Hover** — assinatura e comentário de documentação formatado (ver [Comentários de documentação](#comentários-de-documentação)); em `#include` exibe o caminho resolvido e o doc do topo do arquivo. +- **Signature Help** — parâmetro ativo destacado ao digitar `(` e `,`, com a descrição daquele parâmetro quando a função está documentada. - **CodeLens** — contagem de referências acima de cada função; clique para listar todas no painel. - **Semantic Tokens** — coloração semântica para funções, incluindo chamadas multiline. -- **Semantic Tokens** — coloração semântica para funções, incluindo chamadas multiline. - **Renomeação (`F2`)** — renomeia o símbolo sob o cursor em todas as ocorrências do projeto aberto. - **Snippets** — estruturas prontas para controle de fluxo, funções, variáveis, includes, callbacks SA-MP/open.mp e utilitários como `CMD`, `SetTimer` e `fmsg`. Lista completa em [docs/snippets.md](snippets.md). +## Comentários de documentação + +O comentário escrito imediatamente acima de uma declaração alimenta o hover, o *signature help* e o autocomplete. Dois formatos são reconhecidos, detectados pelo próprio conteúdo. + +**Javadoc** — `@param`, `@return`, `@remarks` (ou `@note`): + +```pawn +/** + * Bane o endereço de um jogador conectado, com um motivo. + * + * @param playerid o jogador a ser banido + * @param reason[] o motivo, mostrado a ele e guardado no registro + * @return 1 sempre + */ +native BanEx(playerid, const reason[]); +``` + +**XMLdoc** — o formato usado pelo `omp-stdlib` do open.mp: + +```pawn +/** + * omp_actor + * Verifica se um ator está transmitido para um jogador. + * O ID do ator + * O ID do jogador + * + * 1 se estiver, 0 caso contrário. + */ +native bool:IsActorStreamedIn(actorid, playerid); +``` + +No XMLdoc, a formatação embutida vira texto formatado (`` negrito, `` código, `
` quebra de linha), e ``, `` e os links `` — que servem ao gerador da wiki do open.mp — não aparecem no hover. + +Em ambos os formatos, cada parâmetro é casado **pelo nome** (o `[]` de array é ignorado) e não pela posição, então o comentário pode omitir parâmetros ou listá-los fora de ordem. O hover mostra o bloco inteiro com os títulos das seções no idioma configurado; o *signature help*, a descrição do parâmetro sob o cursor; o autocomplete, apenas o resumo. + +Um comentário comum, sem nenhuma tag, continua aparecendo como descrição. + ## Formatação de código Formatação guiada pela estrutura do código (não por heurística de texto), validada contra o compilador `pawncc`. @@ -75,20 +111,23 @@ Vitrine para encontrar plugins, filterscripts e includes, aberta pelo comando ** > Nesta versão é uma **prévia** com catálogo de exemplo — a instalação ainda não está disponível. Fontes previstas: catálogo próprio + `packages.open.mp`. -## Depreciação com `@DEPRECATED` +## Depreciação com `#pragma deprecated` -O marcador `@DEPRECATED` (case-insensitive) pode ser usado de três formas: +A diretiva do compilador Pawn marca a **próxima** declaração. O texto que a segue é opcional e, quando presente, aparece junto do aviso — normalmente é onde se diz o que usar no lugar: ```pawn -// @DEPRECATED +#pragma deprecated stock MinhaFuncaoAntiga() { ... } -stock OutraFuncao() { ... } // @deprecated +#pragma deprecated Use BanPlayerFor em vez desta +stock BanTemporario(playerid, seconds) { ... } -/* @DEPRECATED */ +#pragma deprecated #include ``` +Como no compilador, não há forma na mesma linha da declaração. + - **Símbolo** (`native`, `stock`, `public`, `forward`, `static`, `#define`, variável global) → a declaração recebe PP0007 (hint visual) e qualquer uso também exibe **PP0007**. - **Par `forward`/`public`** — depreciar o `forward` marca automaticamente o `public` correspondente, e vice-versa. - **`#include`** → a linha do `#include` recebe **PP0008** e qualquer uso de qualquer símbolo daquele arquivo exibe **PP0007** com a mensagem *"pertence a um include depreciado"*. From 22dede2c9b3e9fb77b11dc6c3fff79520ce7c053 Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Mon, 31 Aug 2026 03:19:32 -0300 Subject: [PATCH 04/58] docs: changelog da 3.5.0 --- CHANGELOG.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2872705..cbe41c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Podem existir falhas ou itens não declarados, causados por falha humana ou por Ainda não lançada. Versão prevista: **3.5.0**. ### Adicionado +- **Documentação de funções no hover, no signature help e no autocomplete** — o comentário escrito acima de uma função passa a ser lido e formatado, em vez de aparecer como texto cru com os `*` e as tags à mostra. Dois formatos são reconhecidos, detectados pelo próprio conteúdo: o estilo **Javadoc** (`@param`, `@return`) e o **XMLdoc** que o `omp-stdlib` do open.mp usa (``, ``, ``, ``). No XMLdoc, a formatação embutida vira texto formatado de verdade (negrito, trechos de código, quebras de linha) e as tags que só servem ao gerador da wiki do open.mp — ``, `` e os links `` — deixam de poluir o hover. Cada parâmetro é casado **pelo nome**, não pela posição, então um comentário pode omitir parâmetros ou listá-los fora de ordem: ao digitar a chamada, o *signature help* mostra a descrição do parâmetro em que o cursor está; o autocomplete mostra o resumo; e o hover, o bloco inteiro, com os títulos das seções ("Parâmetros", "Retorna") no idioma configurado. Um comentário comum, sem tags, continua aparecendo como descrição - **Prévia de cores nos literais** — literais de cor `0xRRGGBBAA` (e `0xRRGGBB`, tratado como opaco) no código Pawn passam a exibir um *swatch* clicável do editor com a cor real, em vez de apenas a cor de sintaxe. Clicar abre o seletor de cores nativo, que reescreve o valor no formato do open.mp (`0xRRGGBBAA`, alpha por último — ex.: vermelho `0xFF0000FF`). Um literal de 6 dígitos que permaneça opaco é reescrito com 6 dígitos; se ganhar transparência, é promovido a 8. Reconhece também o idioma de ajuste de alpha por aritmética (`0xRRGGBB00 + N`): o *swatch* mostra a cor com o alpha resultante, e a edição preserva a forma `base±N` (a soma só é interpretada quando afeta apenas o byte de alpha, sem transbordar para os demais canais). Reconhece ainda o formato de cor embutida em texto do SA-MP `{RRGGBB}` (chat, textdraws), reescrito no mesmo formato ao editar - **Sugestão do Material Icon Theme** — na ativação, se o **Material Icon Theme** ainda não estiver instalado, a extensão sugere instalá-lo (melhora os ícones das pastas do projeto). É apenas um complemento: a sugestão pode ser dispensada de vez ("Não perguntar de novo") e nunca reaparece quando o tema já está presente - **Realce de sintaxe TOML** — arquivos `.toml` (e `package.lock`) passam a ter destaque de sintaxe próprio, cobrindo tables e array-of-tables, chaves simples e pontuadas, strings básicas/literais e multilinha (triplas), inteiros (decimal, hexadecimal, octal e binário), floats (incluindo `inf`/`nan`), booleanos, datas/horas, arrays e inline tables. Inclui configuração de linguagem (comentário `#`, auto-fechamento de aspas e colchetes). A gramática é adaptada da extensão Even Better TOML (MIT) — as chaves usam escopos de *property-name*, coloridas pelos temas como propriedades (atribuição em `THIRD-PARTY-NOTICES.md`) @@ -27,9 +28,20 @@ Ainda não lançada. Versão prevista: **3.5.0**. - **Idioma da interface independente do editor** — nova configuração "Idioma da interface" (`ui.locale`): as páginas da extensão (Configurações, Ajuda, O que há de novo) passam a poder ter um idioma próprio, separado do idioma do editor e do idioma dos diagnósticos. Antes a UI seguia obrigatoriamente o idioma do editor (limitação do `vscode.l10n`); agora as WebViews traduzem a partir dos bundles `l10n/` conforme `ui.locale`. Padrão "Automático" (segue o editor) - **Seletor de idioma com os 5 idiomas** — os seletores de idioma (interface e diagnósticos/debugger) na página de configurações passam a oferecer **Español, Română e Русский** além de Automático, Português e English. O de diagnósticos espelha o que a engine entrega; cada opção aparece no próprio idioma (endônimo) - **Política de uso de IA** — novo `AI-POLICY.md` (referenciado no README, CONTRIBUTING e CODE_OF_CONDUCT): o uso de IA é permitido, quem contribui é o responsável pelo que envia, sem co-autoria de IA e sem preconceito quanto ao seu uso -- **Dependências** — `typescript` para `^7.0.2` e `@types/node` para `^26.1.2` -- **CI — GitHub Actions atualizadas** (pinadas por SHA): `github/codeql-action` 4.36.3 → 4.37.6 (passos `init`, `analyze` e `upload-sarif` mantidos alinhados na mesma versão), `actions/checkout` 7.0.0 → 7.0.1, `actions/setup-node` 6.4.0 → 7.0.0, `actions/stale` 10.3.0 → 11.0.0, `ossf/scorecard-action` 2.4.3 → 2.4.4 e `softprops/action-gh-release` 3.0.1 → 3.0.2 -- **Docs (CI)** — `pymdown-extensions` atualizado no grupo pip da documentação +- **Depreciação por `#pragma deprecated`** — marcar uma função como descontinuada passa a usar a diretiva do próprio compilador Pawn, na linha anterior à declaração, no lugar do comentário `// @DEPRECATED` que a extensão reconhecia antes. O texto após a diretiva é opcional e, quando presente, aparece junto do aviso — normalmente é onde se diz o que usar no lugar: + + ```pawn + #pragma deprecated Use BanPlayerFor em vez desta + stock BanTemporario(playerid, seconds) { } + ``` + + Como no compilador, a diretiva marca a **próxima** declaração e não tem forma na mesma linha. O que é coberto não mudou: `native`, `stock`, `public`, `forward`, `static`, `#define`, variáveis globais e `#include`. **Quem usava `// @DEPRECATED` precisa trocar pela diretiva** — o marcador antigo deixou de ser reconhecido, e o autocomplete do `@`, que existia só para inseri-lo, passou a oferecer as tags de documentação (`@param`, `@return`, `@remarks`) dentro de comentários +- **Motor de análise (engine) para 1.4.0** — traz a interpretação dos comentários de documentação e a depreciação por `#pragma deprecated` descritas acima, além dos diagnósticos e hovers traduzidos para espanhol, romeno e russo +- **Dependências** — `typescript` para `^7.0.2`, `@types/node` para `^26.4.0`, `@types/vscode` para `1.134.0`, `esbuild` para `^0.28.2` e `vscode-languageclient` para `^10.1.1` +- **CI — GitHub Actions atualizadas** (pinadas por SHA): `github/codeql-action` 4.36.3 → 4.37.9 (passos `init`, `analyze` e `upload-sarif` mantidos alinhados na mesma versão), `actions/checkout` 7.0.0 → 7.0.1, `actions/setup-node` 6.4.0 → 7.0.0, `actions/stale` 10.3.0 → 11.0.0, `ossf/scorecard-action` 2.4.3 → 2.4.4 e `softprops/action-gh-release` 3.0.1 → 3.0.3 +- **Docs (CI)** — `mkdocs-material` para 9.7.7 e `pymdown-extensions` para 11.0.2 no grupo pip da documentação (pinados por hash) +- **Dependabot — um PR por ecossistema** — as atualizações passam a ser agrupadas por ecossistema (npm, GitHub Actions, pip) em vez de abrir um PR por dependência, reduzindo o ruído de manutenção +- **Scorecard e CodeQL sob demanda** — os workflows de análise do OpenSSF Scorecard e do CodeQL passam a aceitar disparo manual (`workflow_dispatch`), sem depender do agendamento - **Segurança de dependências** — atualizações de dependências transitivas do npm sinalizadas pelo Dependabot (grupo `npm_and_yarn`, incluindo `brace-expansion` e `js-yaml`) - **Governança do repositório** — templates de *issue* (formulários) e de *pull request*, auto-classificação de PRs por caminho (labels de área), e `SECURITY.md` revisado (deixa de listar dependências empacotadas — o `.vsix` é a fonte da verdade do que é distribuído) From 8ed8c9226ca4d4d2b8cde2e35ab50b83f9b9eecd Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:17:56 -0300 Subject: [PATCH 05/58] deps: depurador para 0.2.0, com os checksums repinados MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O PawnPro Debugger 0.2.0 amplia bastante o conjunto DAP: call stack multi-frame navegável, data breakpoints (inclusive em elementos de array), breakpoints de função, mais três classes de erro de runtime, arrays expansíveis e strings na inspeção, expressões no watch e no hover, edição por expressão e leitura de memória. Checksums repinados a partir da release e conferidos contra o `checksums.sha256` dela. A extensão não precisou de ajuste: o marcador do plugin passou a `PAWNPRO_DEBUG_MARKER:0.2.0`, mas `isOfficialDebugPlugin` casa só o prefixo. Atualiza a documentação de depuração, que ainda listava "call stack mostra só o frame atual" como limitação. --- CHANGELOG.md | 12 ++++++++++++ docs/debugging.md | 31 +++++++++++++++++++++++++++++-- docs/features.md | 4 +++- package.json | 12 ++++++------ 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbe41c6..c6ee6ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,18 @@ Ainda não lançada. Versão prevista: **3.5.0**. ``` Como no compilador, a diretiva marca a **próxima** declaração e não tem forma na mesma linha. O que é coberto não mudou: `native`, `stock`, `public`, `forward`, `static`, `#define`, variáveis globais e `#include`. **Quem usava `// @DEPRECATED` precisa trocar pela diretiva** — o marcador antigo deixou de ser reconhecido, e o autocomplete do `@`, que existia só para inseri-lo, passou a oferecer as tags de documentação (`@param`, `@return`, `@remarks`) dentro de comentários +- **Depurador (PawnPro Debugger) para 0.2.0** — a depuração deixa de ser "breakpoint e inspeção" e passa a cobrir: + - **Call stack multi-frame** — navegar entre os frames da chamada, com a inspeção seguindo o frame selecionado + - **Data breakpoints** — pausar quando um valor muda, em globais, locais e elementos de array (`arr[3]`) + - **Breakpoints de função** — parar ao entrar numa função pelo nome + - **Três novos erros de runtime** — colisão pilha/heap, underflow de heap e acesso inválido à memória, somando-se à divisão por zero e ao índice fora do limite; o painel de breakpoints liga e desliga a pausa em erros + - **Arrays e strings na inspeção** — arrays expansíveis elemento a elemento, e arrays de char mostrados como texto quando o conteúdo é uma string + - **Editar por expressão** — `x = 1` ou `arr[i] = 10` direto no watch ou no console + - **Expressões no watch e no hover** (aritmética e comparação) e **autocomplete** de variáveis em escopo + - **Leitura de memória** — hex view da memória de dados a partir de qualquer variável + - As mensagens do adaptador passam a seguir o idioma configurado (antes só os erros de runtime seguiam) + + O plugin do servidor precisa ser atualizado junto: baixe o `pawnpro_debug.so`/`.dll` da versão 0.2.0 e substitua o antigo na pasta `plugins/` (ou `components/`) do servidor. - **Motor de análise (engine) para 1.4.0** — traz a interpretação dos comentários de documentação e a depreciação por `#pragma deprecated` descritas acima, além dos diagnósticos e hovers traduzidos para espanhol, romeno e russo - **Dependências** — `typescript` para `^7.0.2`, `@types/node` para `^26.4.0`, `@types/vscode` para `1.134.0`, `esbuild` para `^0.28.2` e `vscode-languageclient` para `^10.1.1` - **CI — GitHub Actions atualizadas** (pinadas por SHA): `github/codeql-action` 4.36.3 → 4.37.9 (passos `init`, `analyze` e `upload-sarif` mantidos alinhados na mesma versão), `actions/checkout` 7.0.0 → 7.0.1, `actions/setup-node` 6.4.0 → 7.0.0, `actions/stale` 10.3.0 → 11.0.0, `ossf/scorecard-action` 2.4.3 → 2.4.4 e `softprops/action-gh-release` 3.0.1 → 3.0.3 diff --git a/docs/debugging.md b/docs/debugging.md index d66b7cf..5729edb 100644 --- a/docs/debugging.md +++ b/docs/debugging.md @@ -101,6 +101,32 @@ Pronto — isso é feito **uma única vez** por servidor. A extensão recompila com `-d3`, verifica o plugin, sobe o servidor e conecta. Ao atingir um breakpoint, a execução pausa e você vê as **variáveis** em escopo. +### O que dá para fazer na pausa + +- **Percorrer a pilha de chamadas** — a lista de frames mostra quem chamou quem; + clicar em um frame faz a inspeção seguir para ele. +- **Inspecionar arrays e strings** — arrays expandem elemento a elemento, e um + array de char é mostrado como texto quando o conteúdo é uma string. +- **Avaliar expressões** no watch e no hover: aritmética (`+ - * / %`, com o + truncamento do Pawn) e comparação (`== != < > <= >=`) sobre literais, + variáveis e `arr[i]`. O console e o watch sugerem as variáveis em escopo. +- **Editar valores** — `x = 1` ou `arr[i] = 10`. O array inteiro não é editável, + só os elementos. +- **Ler a memória** — hex view da memória de dados a partir de qualquer variável. + +### Tipos de breakpoint + +Além do breakpoint de linha (**condicional**, por **contagem de acertos** e +**logpoint**): + +- **Data breakpoint** — pausa quando um valor muda, seja global, local ou um + elemento de array (`arr[3]`). Watches de variáveis locais expiram quando a + função dona retorna. +- **Breakpoint de função** — para ao entrar numa função pelo nome. +- **Pausa em erro de runtime** — divisão por zero, índice de array fora do + limite, colisão entre pilha e heap, underflow de heap e acesso inválido à + memória. Liga e desliga pelo painel de breakpoints. + A **saída do servidor** (incluindo `print` e logs do gamemode) aparece no painel **Console de Depuração** do editor — não é preciso abrir um terminal à parte. @@ -134,9 +160,10 @@ Mesmo que você escolha iniciar assim mesmo, a depuração só funciona com o pl correto: um plugin homônimo não abre o canal de depuração, então o adaptador falha ao conectar com uma mensagem explicando as causas prováveis. -## Limitações (v1) +## Limitações - **Alvo é desenvolvimento local.** Não é para servidor de produção com jogadores. - O `.amx` precisa ter sido compilado com `-d3` (a extensão cuida disso). - Sem *hot-reload* / *edit-and-continue*. -- **Call stack ainda mostra só o frame atual** (não percorre a cadeia de chamadas). +- Nas expressões do watch e do hover, um operador de topo por vez — sem + encadear várias operações na mesma expressão. diff --git a/docs/features.md b/docs/features.md index 9086eb2..e06b0bb 100644 --- a/docs/features.md +++ b/docs/features.md @@ -150,7 +150,9 @@ Como no compilador, não há forma na mesma linha da declaração. ## Depuração (DAP) -- **Depurador visual** para servidor local: breakpoints, *step*, inspeção de variáveis e *call stack* (`F5` / `launch.json` tipo `pawn`). +- **Depurador visual** para servidor local: breakpoints, *step*, inspeção de variáveis e *call stack* multi-frame navegável (`F5` / `launch.json` tipo `pawn`). +- **Breakpoints além da linha** — condicionais, por contagem de acertos, logpoints, **data breakpoints** (pausa quando um valor muda, inclusive em `arr[3]`), **por função** e **pausa em erro de runtime** (divisão por zero, índice fora do limite, colisão pilha/heap, underflow de heap e acesso inválido à memória). +- **Inspeção e edição** — arrays expansíveis, arrays de char mostrados como string, expressões no watch e no hover, autocomplete de variáveis em escopo, edição por expressão (`arr[i] = 10`) e leitura de memória em hex. - **Recompilação automática com debug info** — a extensão adiciona `-d3` ao compilar para depuração se você ainda não usa uma flag `-d` (sua configuração não é alterada). - **Preflight** — verifica se o plugin de depuração está instalado em `plugins/` e registrado (`server.cfg` ou `config.json`) antes de iniciar, avisando o que falta. - **Servidor iniciado automaticamente** com as variáveis de depuração; o adaptador conecta ao plugin via socket local. diff --git a/package.json b/package.json index 3bcd7d4..653fd18 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "icon": "images/logo.png", "engineVersion": "1.4.0", "engineRepository": "https://github.com/NullSablex/PawnPro-Engine", - "debuggerVersion": "0.1.0", + "debuggerVersion": "0.2.0", "debuggerRepository": "https://github.com/NullSablex/PawnPro-Debugger", "author": { "name": "NullSablex", @@ -429,10 +429,10 @@ "pawnpro-engine-darwin-arm64": "14b3452babc6c49f3f2ee5d0080ca02a0d39b640af582647406da280aa978316" }, "debuggerChecksums": { - "pawnpro-dap-adapter-linux-x64": "b504e2abf410423538eba394b4c4ac3b1fc2e8ba475ea247d8f0471900d09eed", - "pawnpro-dap-adapter-linux-arm64": "f239f1319c0a6dad353978bf8a6f897f20b26ec8de9408a07baa2185b8066ec2", - "pawnpro-dap-adapter-win32-x64.exe": "04b4b2ea785b45b8b2ab7974f3689bf2e0b5c6edaf247ae2f975165bfcc76d10", - "pawnpro-dap-adapter-darwin-x64": "07d11df11a819e37cc2abbfd0a4d96318d398f4d5b064ff7aad7f3604b1adada", - "pawnpro-dap-adapter-darwin-arm64": "84bcc2376bdef1a1da8d57c9a4c1f284cd512bacb04fab818fb7adc954ed1ae7" + "pawnpro-dap-adapter-linux-x64": "494bfc9eb5e725f877ae956ba45912fb6bd2b151ece78b3299d25f1ec0723a7f", + "pawnpro-dap-adapter-linux-arm64": "a93b3cdd97015b8fec3d8d90bb64429a472566175c71e5dd69cb6b42acff2c19", + "pawnpro-dap-adapter-win32-x64.exe": "0d41d41dcc156d2f1dadba289e2eab6df8a31a7fc6135adc596d5e6a409dfadc", + "pawnpro-dap-adapter-darwin-x64": "4cacdbc45c286f03a77c70c4d9cbb988743d633d4e61c1af4658087c46dfc95f", + "pawnpro-dap-adapter-darwin-arm64": "d44963efc3efb56057e7fc79f1df0293be79657b7e06418a40883b48de527eac" } } From b7548c00910d13b64545af1f55922d11d0b60039 Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:19:20 -0300 Subject: [PATCH 06/58] =?UTF-8?q?docs:=20a=203.10.10=20do=20compilador=20t?= =?UTF-8?q?amb=C3=A9m=20foi=20testada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A página de Ajuda dizia que a 3.10.11 era "a única existente e a testada". A 3.10.10 também funciona, incluindo a depuração — no Windows, a depuração ainda não foi verificada. A 3.10.11 segue sendo a recomendada. A chave dos bundles `l10n/` é a própria string em português, então o texto foi atualizado nos cinco idiomas. --- CHANGELOG.md | 1 + l10n/bundle.l10n.en.json | 2 +- l10n/bundle.l10n.es.json | 2 +- l10n/bundle.l10n.json | 2 +- l10n/bundle.l10n.ro.json | 2 +- l10n/bundle.l10n.ru.json | 2 +- src/editor/nls.ts | 2 +- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6ee6ed..f8b61d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ Ainda não lançada. Versão prevista: **3.5.0**. ``` Como no compilador, a diretiva marca a **próxima** declaração e não tem forma na mesma linha. O que é coberto não mudou: `native`, `stock`, `public`, `forward`, `static`, `#define`, variáveis globais e `#include`. **Quem usava `// @DEPRECATED` precisa trocar pela diretiva** — o marcador antigo deixou de ser reconhecido, e o autocomplete do `@`, que existia só para inseri-lo, passou a oferecer as tags de documentação (`@param`, `@return`, `@remarks`) dentro de comentários +- **Compilador: a 3.10.10 também foi testada** — a página de Ajuda afirmava que a 3.10.11 era "a única existente e a testada". A 3.10.10 do compilador do open.mp também funciona, incluindo a depuração; no Windows a depuração ainda não foi verificada. A 3.10.11 segue sendo a recomendada - **Depurador (PawnPro Debugger) para 0.2.0** — a depuração deixa de ser "breakpoint e inspeção" e passa a cobrir: - **Call stack multi-frame** — navegar entre os frames da chamada, com a inspeção seguindo o frame selecionado - **Data breakpoints** — pausar quando um valor muda, em globais, locais e elementos de array (`arr[3]`) diff --git a/l10n/bundle.l10n.en.json b/l10n/bundle.l10n.en.json index cede0cb..2bf6158 100644 --- a/l10n/bundle.l10n.en.json +++ b/l10n/bundle.l10n.en.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Help and information", "Componentes, links e guia do depurador": "Components, links and debugger guide", "Compilador recomendado": "Recommended compiler", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compile your scripts with the **open.mp compiler** — version **3.10.11**, the only one available and the one currently tested. It is the **only tested compiler** and the **recommended** one, both for engine analysis and for debugging. Other compilers may produce incompatible code or debug information.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compile your scripts with the **open.mp compiler** — version **3.10.11** is the recommended one, and **3.10.10** has also been tested (on Windows, debugging has not been verified yet). It is the recommended compiler both for engine analysis and for debugging; others may produce incompatible code or debug information.", "Baixar o compilador do open.mp": "Download the open.mp compiler", "Componentes": "Components", "Extensão PawnPro": "PawnPro extension", diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index f172e61..40661a0 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Ayuda e información", "Componentes, links e guia do depurador": "Componentes, enlaces y guía del depurador", "Compilador recomendado": "Compilador recomendado", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compila tus scripts con el **compilador de open.mp** — versión **3.10.11**, la única existente y la probada por el momento. Es el **único compilador probado** y el **recomendado**, tanto para el análisis del engine como para la depuración. Otros compiladores pueden generar código o información de depuración incompatibles.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compila tus scripts con el **compilador de open.mp** — la versión **3.10.11** es la recomendada, y la **3.10.10** también ha sido probada (en Windows, la depuración aún no se ha verificado). Es el compilador recomendado tanto para el análisis del engine como para la depuración; otros pueden generar código o información de depuración incompatibles.", "Baixar o compilador do open.mp": "Descargar el compilador de open.mp", "Componentes": "Componentes", "Extensão PawnPro": "Extensión PawnPro", diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index de6bec9..4ef05e2 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Ajuda e informações", "Componentes, links e guia do depurador": "Componentes, links e guia do depurador", "Compilador recomendado": "Compilador recomendado", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.", "Baixar o compilador do open.mp": "Baixar o compilador do open.mp", "Componentes": "Componentes", "Extensão PawnPro": "Extensão PawnPro", diff --git a/l10n/bundle.l10n.ro.json b/l10n/bundle.l10n.ro.json index f97ad37..368db14 100644 --- a/l10n/bundle.l10n.ro.json +++ b/l10n/bundle.l10n.ro.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Ajutor și informații", "Componentes, links e guia do depurador": "Componente, linkuri și ghidul debugger-ului", "Compilador recomendado": "Compilator recomandat", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Compilează-ți scripturile cu **compilatorul open.mp** — versiunea **3.10.11**, singura existentă și cea testată momentan. Este **singurul compilator testat** și cel **recomandat**, atât pentru analiza engine-ului, cât și pentru depanare. Alte compilatoare pot genera cod sau informații de depanare incompatibile.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Compilează-ți scripturile cu **compilatorul open.mp** — versiunea **3.10.11** este cea recomandată, iar **3.10.10** a fost de asemenea testată (pe Windows, depanarea nu a fost încă verificată). Este compilatorul recomandat atât pentru analiza engine-ului, cât și pentru depanare; altele pot genera cod sau informații de depanare incompatibile.", "Baixar o compilador do open.mp": "Descarcă compilatorul open.mp", "Componentes": "Componente", "Extensão PawnPro": "Extensia PawnPro", diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 9c266d9..23c1ac9 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -175,7 +175,7 @@ "PawnPro — Ajuda e informações": "PawnPro — Справка и информация", "Componentes, links e guia do depurador": "Компоненты, ссылки и руководство по отладчику", "Compilador recomendado": "Рекомендуемый компилятор", - "Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.": "Компилируйте свои скрипты **компилятором open.mp** — версия **3.10.11**, единственная существующая и протестированная на данный момент. Это **единственный протестированный компилятор** и **рекомендуемый**, как для анализа движком, так и для отладки. Другие компиляторы могут генерировать несовместимый код или отладочную информацию.", + "Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.": "Компилируйте свои скрипты **компилятором open.mp** — рекомендуется версия **3.10.11**, версия **3.10.10** также протестирована (на Windows отладка ещё не проверена). Это рекомендуемый компилятор как для анализа движком, так и для отладки; другие могут генерировать несовместимый код или отладочную информацию.", "Baixar o compilador do open.mp": "Скачать компилятор open.mp", "Componentes": "Компоненты", "Extensão PawnPro": "Расширение PawnPro", diff --git a/src/editor/nls.ts b/src/editor/nls.ts index ca70700..b3f28b5 100644 --- a/src/editor/nls.ts +++ b/src/editor/nls.ts @@ -256,7 +256,7 @@ export function createMsg(t: Translate) { panelTitle: () => t('PawnPro — Ajuda e informações'), subtitle: () => t('Componentes, links e guia do depurador'), compilerTitle: () => t('Compilador recomendado'), - compilerBody: () => t('Compile seus scripts com o **compilador do open.mp** — versão **3.10.11**, a única existente e a testada no momento. É o **único compilador testado** e o **recomendado**, tanto para a análise da engine quanto para a depuração. Outros compiladores podem gerar código ou informação de depuração incompatíveis.'), + compilerBody: () => t('Compile seus scripts com o **compilador do open.mp** — a versão **3.10.11** é a recomendada, e a **3.10.10** também foi testada (no Windows, a depuração ainda não foi verificada). É o compilador recomendado tanto para a análise da engine quanto para a depuração; outros podem gerar código ou informação de depuração incompatíveis.'), compilerLink: () => t('Baixar o compilador do open.mp'), componentsTitle: () => t('Componentes'), extensionLabel: () => t('Extensão PawnPro'), From 53a2f5782319212f7aae53dff3f7ff7895e0bfb5 Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:20:33 -0300 Subject: [PATCH 07/58] docs: fecha o changelog da 3.5.0 --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8b61d3..3124dbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,9 +12,7 @@ Podem existir falhas ou itens não declarados, causados por falha humana ou por --- -## [Unreleased] - -Ainda não lançada. Versão prevista: **3.5.0**. +## [3.5.0] - 01/09/2026 ### Adicionado - **Documentação de funções no hover, no signature help e no autocomplete** — o comentário escrito acima de uma função passa a ser lido e formatado, em vez de aparecer como texto cru com os `*` e as tags à mostra. Dois formatos são reconhecidos, detectados pelo próprio conteúdo: o estilo **Javadoc** (`@param`, `@return`) e o **XMLdoc** que o `omp-stdlib` do open.mp usa (``, ``, ``, ``). No XMLdoc, a formatação embutida vira texto formatado de verdade (negrito, trechos de código, quebras de linha) e as tags que só servem ao gerador da wiki do open.mp — ``, `` e os links `` — deixam de poluir o hover. Cada parâmetro é casado **pelo nome**, não pela posição, então um comentário pode omitir parâmetros ou listá-los fora de ordem: ao digitar a chamada, o *signature help* mostra a descrição do parâmetro em que o cursor está; o autocomplete mostra o resumo; e o hover, o bloco inteiro, com os títulos das seções ("Parâmetros", "Retorna") no idioma configurado. Um comentário comum, sem tags, continua aparecendo como descrição From 8da5bb82b48945426aeb920d42c54f57215fb915 Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Tue, 1 Sep 2026 03:31:46 -0300 Subject: [PATCH 08/58] =?UTF-8?q?fix:=20detec=C3=A7=C3=A3o=20de=20open.mp?= =?UTF-8?q?=20vs=20SA-MP=20pelo=20execut=C3=A1vel,=20n=C3=A3o=20s=C3=B3=20?= =?UTF-8?q?pelo=20config.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O tipo do servidor era decidido por `existsSync(config.json)`, e isso errava nos dois sentidos: - um open.mp recém-baixado ainda **não tem** `config.json` (é gerado na primeira execução) e passava por SA-MP; - um SA-MP com um `config.json` de outra ferramenta na mesma pasta passava por open.mp. O tipo decide o arquivo de log acompanhado, a leitura de RCON e o preflight do depurador — que então checava a pasta e a forma de registro erradas. `detectServerType` centraliza a decisão e olha, do sinal mais forte ao mais fraco: o executável (inequívoco), a pasta `components/` (exclusiva do open.mp), um `config.json` que tenha as chaves do open.mp — e não qualquer JSON homônimo — e por fim o `server.cfg`. `server.type` explícito na configuração continua tendo precedência. --- CHANGELOG.md | 1 + src/core/server.ts | 61 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3124dbc..766ccf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ Podem existir falhas ou itens não declarados, causados por falha humana ou por - **Governança do repositório** — templates de *issue* (formulários) e de *pull request*, auto-classificação de PRs por caminho (labels de área), e `SECURITY.md` revisado (deixa de listar dependências empacotadas — o `.vsix` é a fonte da verdade do que é distribuído) ### Corrigido +- **Detecção de open.mp vs SA-MP trocada** — o tipo do servidor era decidido só pela presença de um `config.json` na pasta, e isso errava nos dois sentidos: um servidor **open.mp recém-baixado ainda não tem `config.json`** (ele é gerado na primeira execução) e era tratado como SA-MP; um servidor **SA-MP com um `config.json` de outra ferramenta** na mesma pasta era tratado como open.mp. O erro se propagava para o arquivo de log acompanhado, a leitura de RCON e o preflight do depurador — que checava a pasta e o registro errados. A detecção passa a olhar, em ordem: o **executável** (`omp-server` vs `samp03svr`/`samp-server`), a pasta **`components/`**, um `config.json` que tenha mesmo as **chaves do open.mp** (e não qualquer JSON homônimo) e, por fim, o `server.cfg`. Definir `server.type` como `samp` ou `omp` na configuração continua tendo precedência sobre a detecção - **Descrição enganosa do seletor de idioma** — dizia "Vazio segue o editor", mas a opção correspondente que o usuário vê é "Automático" (não há opção "vazio" visível). Reescrita para "'Automático' acompanha o idioma do editor" - **CI: saudação a novos contribuidores falhando** — o workflow `Greetings` usava os inputs no formato antigo (`repo-token`, `issue-message`, `pr-message`), ignorados pela `actions/first-interaction` v3.x, o que abortava a action com `Input required and not supplied: issue_message`. Renomeados para `repo_token`, `issue_message` e `pr_message`. Além disso, o job passa a ser pulado quando o autor é um bot (`if: !endsWith(github.actor, '[bot]')`), evitando saudar automações como o Dependabot - **CI: análise CodeQL falhando por versão inconsistente** — nos bumps do `codeql-action`, os passos `init` e `analyze` chegaram a ficar em versões diferentes (o que quebra o job "Analyze TypeScript"). Passam a ser atualizados sempre juntos, no mesmo SHA diff --git a/src/core/server.ts b/src/core/server.ts index 3ec2c2a..b01590a 100644 --- a/src/core/server.ts +++ b/src/core/server.ts @@ -88,11 +88,58 @@ export async function loadOmpConfig(cwd: string): Promise { return { rconPassword, port: Math.max(1, Number(rawPort) || 7777), host, cfgPath }; } +/** + * Decide se `cwd` é um servidor open.mp ou SA-MP. + * + * A presença de `config.json` sozinha não decide: o open.mp só o gera na + * primeira execução (antes disso o diretório parece SA-MP), e outras + * ferramentas usam esse nome para os próprios arquivos (fazendo um servidor + * SA-MP parecer open.mp). Daí a ordem abaixo, do sinal mais forte ao mais + * fraco — o executável é inequívoco, o `config.json` só conta quando tem a + * cara do arquivo do open.mp. + */ +export function detectServerType(cwd: string): 'samp' | 'omp' { + const dir = cwd || ''; + const exe = process.platform === 'win32' ? '.exe' : ''; + + // 1. Executável: nomeia o servidor sem ambiguidade. + if (fs.existsSync(path.join(dir, `omp-server${exe}`))) return 'omp'; + if ( + fs.existsSync(path.join(dir, `samp03svr${exe}`)) + || fs.existsSync(path.join(dir, `samp-server${exe}`)) + ) { + return 'samp'; + } + + // 2. `components/`: diretório exclusivo do open.mp. + if (fs.existsSync(path.join(dir, 'components'))) return 'omp'; + + // 3. `config.json` com as chaves que só o open.mp escreve — um JSON + // homônimo de outra ferramenta não passa por aqui. + if (isOmpConfigFile(path.join(dir, 'config.json'))) return 'omp'; + + // 4. `server.cfg`: o formato de configuração do SA-MP. + if (fs.existsSync(path.join(dir, 'server.cfg'))) return 'samp'; + + return 'samp'; +} + +/** `true` se o arquivo é mesmo o `config.json` do open.mp, e não um homônimo. */ +function isOmpConfigFile(filePath: string): boolean { + try { + const json = JSON.parse(fs.readFileSync(filePath, 'utf8')) as Record; + if (typeof json !== 'object' || json === null) return false; + // Chaves de topo do open.mp; `pawn.main_scripts` é a mais característica. + return ['pawn', 'rcon', 'network', 'logging', 'max_players'].some(k => k in json); + } catch { + return false; + } +} + export async function loadServerConfig(cwd: string, serverType: import('./types.js').ServerType = 'auto'): Promise { if (serverType === 'omp') return loadOmpConfig(cwd); if (serverType === 'samp') return loadSampConfig(cwd); - if (fs.existsSync(path.join(cwd || '', 'config.json'))) return loadOmpConfig(cwd); - return loadSampConfig(cwd); + return detectServerType(cwd) === 'omp' ? loadOmpConfig(cwd) : loadSampConfig(cwd); } async function readRange(filePath: string, start: number, end: number): Promise { @@ -287,9 +334,9 @@ export function resolveServerConfig(config: PawnProConfig['server'], workspaceRo function resolveLogPath(cwd: string, serverType: import('./types.js').ServerType): string { if (serverType === 'omp') return path.join(cwd, ompLogFile(cwd)); if (serverType === 'samp') return path.join(cwd, 'server_log.txt'); - const ompCfg = path.join(cwd, 'config.json'); - if (fs.existsSync(ompCfg)) return path.join(cwd, ompLogFile(cwd)); - return path.join(cwd, 'server_log.txt'); + return detectServerType(cwd) === 'omp' + ? path.join(cwd, ompLogFile(cwd)) + : path.join(cwd, 'server_log.txt'); } function ompLogFile(cwd: string): string { @@ -375,8 +422,8 @@ export function checkDebugPlugin(cwd: string): DebugPreflight { const plugins = probePluginFile(cwd, 'plugins', file); const components = probePluginFile(cwd, 'components', file); - const isOmp = fs.existsSync(path.join(cwd, 'config.json')); - const serverType: 'samp' | 'omp' = isOmp ? 'omp' : 'samp'; + const serverType = detectServerType(cwd); + const isOmp = serverType === 'omp'; if (!isOmp) { // SA-MP: o binário OFICIAL em plugins/ E registro na linha `plugins`. From a65e341c039554fbfb2d6d21f7b0f7114c187996 Mon Sep 17 00:00:00 2001 From: NullSablex <244216261+NullSablex@users.noreply.github.com> Date: Tue, 1 Sep 2026 05:20:47 -0300 Subject: [PATCH 09/58] =?UTF-8?q?feat:=20painel=20de=20comandos=20com=20?= =?UTF-8?q?=C3=ADcone,=20abas=20e=20tradu=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O botão "Enviar" vira ícone. A fonte de codicons não chega à WebView (o CSP é `default-src 'none'`, sem `font-src`, e CDN é bloqueado), então o traço vai inline no HTML, com `currentColor` para seguir o tema — o mesmo ícone substitui o "Enviar" das linhas da lista. Favoritos e Últimos comandos deixam de ser duas listas empilhadas e passam a dividir o mesmo espaço em abas, com a contagem em cada uma. O botão "Limpar" segue a aba visível, para não haver dois com o mesmo rótulo e alvos diferentes. Esta era a única WebView com as strings fixas no código — daí os acentos que faltavam ("historico", "Ultimos"). Passa a usar `createWebviewMsg` como as outras, com as dez chaves nos cinco bundles, e é re-renderizada quando `ui.locale` muda. Também adiciona os badges de estrelas (nos dois repositórios) e de downloads totais do repositório na extensão. --- CHANGELOG.md | 2 + README.md | 2 + l10n/bundle.l10n.en.json | 11 +++- l10n/bundle.l10n.es.json | 11 +++- l10n/bundle.l10n.json | 11 +++- l10n/bundle.l10n.ro.json | 11 +++- l10n/bundle.l10n.ru.json | 11 +++- src/editor/nls.ts | 12 ++++ src/editor/server.ts | 8 ++- src/editor/serverView.ts | 138 +++++++++++++++++++++++++++++++++------ 10 files changed, 191 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 766ccf8..62b091e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ Podem existir falhas ou itens não declarados, causados por falha humana ou por - **Realce de sintaxe TOML** — arquivos `.toml` (e `package.lock`) passam a ter destaque de sintaxe próprio, cobrindo tables e array-of-tables, chaves simples e pontuadas, strings básicas/literais e multilinha (triplas), inteiros (decimal, hexadecimal, octal e binário), floats (incluindo `inf`/`nan`), booleanos, datas/horas, arrays e inline tables. Inclui configuração de linguagem (comentário `#`, auto-fechamento de aspas e colchetes). A gramática é adaptada da extensão Even Better TOML (MIT) — as chaves usam escopos de *property-name*, coloridas pelos temas como propriedades (atribuição em `THIRD-PARTY-NOTICES.md`) ### Alterado +- **Painel de comandos do servidor revisto** — o botão "Enviar" vira um ícone (mesmo traço do editor, desenhado no próprio painel para acompanhar o tema), e **Favoritos** e **Últimos comandos** passam a dividir o mesmo espaço em duas abas, com a contagem de itens em cada uma. Antes eram duas listas empilhadas, que espremiam o painel. O botão "Limpar" segue a aba visível +- **Painel de comandos traduzido** — era a única página da extensão com o texto fixo no código, o que também deixava acentos de fora ("historico", "Ultimos"). Passa pelo mesmo caminho das demais e acompanha a configuração "Idioma da interface" nos cinco idiomas - **Mais codificações de caracteres** — os seletores de codificação (saída do compilador e log do servidor) passam a oferecer **UTF-8** e toda a família **Windows-1250 a 1257** (Europeu Central, Cirílico, Europeu Ocidental, Grego, Turco, Hebraico, Árabe, Báltico), além de Latin-1. Cobre projetos e logs em outros alfabetos além do padrão SA-MP. Rótulos regionais traduzidos por idioma - **Traduções completas (EN, ES, RO, RU)** — as mensagens de runtime (`l10n/`) e os títulos de comando/config (`package.nls.*`) foram totalmente traduzidos para inglês, espanhol, romeno e russo (antes só o esqueleto existia, com a maior parte ainda em português). Termos técnicos consagrados (pawncc, RCON, gamemode, filterscript, include, breakpoint, SA-MP, open.mp) mantidos em inglês - **Idioma da interface independente do editor** — nova configuração "Idioma da interface" (`ui.locale`): as páginas da extensão (Configurações, Ajuda, O que há de novo) passam a poder ter um idioma próprio, separado do idioma do editor e do idioma dos diagnósticos. Antes a UI seguia obrigatoriamente o idioma do editor (limitação do `vscode.l10n`); agora as WebViews traduzem a partir dos bundles `l10n/` conforme `ui.locale`. Padrão "Automático" (segue o editor) diff --git a/README.md b/README.md index 2285978..745fb4d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ [![CodeQL](https://img.shields.io/github/actions/workflow/status/NullSablex/PawnPro/codeql.yml?style=flat-square&logo=github&label=CodeQL)](https://github.com/NullSablex/PawnPro/actions/workflows/codeql.yml) [![Security](https://img.shields.io/github/actions/workflow/status/NullSablex/PawnPro/security.yml?style=flat-square&logo=github&label=Security)](https://github.com/NullSablex/PawnPro/actions/workflows/security.yml) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/NullSablex/PawnPro/badge?style=flat-square)](https://scorecard.dev/viewer/?uri=github.com/NullSablex/PawnPro) + [![Downloads](https://img.shields.io/github/downloads/NullSablex/PawnPro/total?style=flat-square&logo=github&label=downloads)](https://github.com/NullSablex/PawnPro/releases) + [![Stars](https://img.shields.io/github/stars/NullSablex/PawnPro?style=flat-square&logo=github&label=stars)](https://github.com/NullSablex/PawnPro/stargazers) [![License](https://img.shields.io/badge/licença-Source--Available-blue?style=flat-square)](LICENSE.md) ![Windows x64](https://img.shields.io/badge/Windows-x64-0078D4?style=flat-square&logo=windows11&logoColor=white) diff --git a/l10n/bundle.l10n.en.json b/l10n/bundle.l10n.en.json index 2bf6158..9dadf86 100644 --- a/l10n/bundle.l10n.en.json +++ b/l10n/bundle.l10n.en.json @@ -283,5 +283,14 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Hebrew)", "Windows-1256 (Árabe)": "Windows-1256 (Arabic)", "Windows-1257 (Báltico)": "Windows-1257 (Baltic)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Digite um comando do servidor e pressione Enter...": "Type a server command and press Enter...", + "Enviar para o servidor": "Send to the server", + "Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos": "Tip: ↑/↓ browse the history • click an item to reuse it • ⭐ pins it to favorites", + "Últimos comandos": "Recent commands", + "Favoritos": "Favorites", + "Sem histórico ainda.": "No history yet.", + "Nenhum favorito.": "No favorites.", + "Adicionar aos favoritos": "Add to favorites", + "Remover dos favoritos": "Remove from favorites" } diff --git a/l10n/bundle.l10n.es.json b/l10n/bundle.l10n.es.json index 40661a0..1d761fc 100644 --- a/l10n/bundle.l10n.es.json +++ b/l10n/bundle.l10n.es.json @@ -283,5 +283,14 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Hebreo)", "Windows-1256 (Árabe)": "Windows-1256 (Árabe)", "Windows-1257 (Báltico)": "Windows-1257 (Báltico)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Digite um comando do servidor e pressione Enter...": "Escribe un comando del servidor y pulsa Enter...", + "Enviar para o servidor": "Enviar al servidor", + "Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos": "Consejo: ↑/↓ recorren el historial • haz clic en un elemento para reutilizarlo • ⭐ lo fija en favoritos", + "Últimos comandos": "Comandos recientes", + "Favoritos": "Favoritos", + "Sem histórico ainda.": "Sin historial todavía.", + "Nenhum favorito.": "Sin favoritos.", + "Adicionar aos favoritos": "Añadir a favoritos", + "Remover dos favoritos": "Quitar de favoritos" } diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 4ef05e2..95f0cfa 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -283,5 +283,14 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Hebraico)", "Windows-1256 (Árabe)": "Windows-1256 (Árabe)", "Windows-1257 (Báltico)": "Windows-1257 (Báltico)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Digite um comando do servidor e pressione Enter...": "Digite um comando do servidor e pressione Enter...", + "Enviar para o servidor": "Enviar para o servidor", + "Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos": "Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos", + "Últimos comandos": "Últimos comandos", + "Favoritos": "Favoritos", + "Sem histórico ainda.": "Sem histórico ainda.", + "Nenhum favorito.": "Nenhum favorito.", + "Adicionar aos favoritos": "Adicionar aos favoritos", + "Remover dos favoritos": "Remover dos favoritos" } diff --git a/l10n/bundle.l10n.ro.json b/l10n/bundle.l10n.ro.json index 368db14..3d10cc1 100644 --- a/l10n/bundle.l10n.ro.json +++ b/l10n/bundle.l10n.ro.json @@ -283,5 +283,14 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Ebraică)", "Windows-1256 (Árabe)": "Windows-1256 (Arabă)", "Windows-1257 (Báltico)": "Windows-1257 (Baltic)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Digite um comando do servidor e pressione Enter...": "Scrie o comandă pentru server și apasă Enter...", + "Enviar para o servidor": "Trimite către server", + "Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos": "Sfat: ↑/↓ parcurg istoricul • dă clic pe un element ca să-l refolosești • ⭐ îl fixează la favorite", + "Últimos comandos": "Comenzi recente", + "Favoritos": "Favorite", + "Sem histórico ainda.": "Încă nu există istoric.", + "Nenhum favorito.": "Niciun favorit.", + "Adicionar aos favoritos": "Adaugă la favorite", + "Remover dos favoritos": "Elimină de la favorite" } diff --git a/l10n/bundle.l10n.ru.json b/l10n/bundle.l10n.ru.json index 23c1ac9..6d19a14 100644 --- a/l10n/bundle.l10n.ru.json +++ b/l10n/bundle.l10n.ru.json @@ -283,5 +283,14 @@ "Windows-1255 (Hebraico)": "Windows-1255 (Иврит)", "Windows-1256 (Árabe)": "Windows-1256 (Арабская)", "Windows-1257 (Báltico)": "Windows-1257 (Балтийская)", - "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)" + "Latin-1 (ISO-8859-1)": "Latin-1 (ISO-8859-1)", + "Digite um comando do servidor e pressione Enter...": "Введите команду сервера и нажмите Enter...", + "Enviar para o servidor": "Отправить на сервер", + "Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos": "Совет: ↑/↓ листают историю • нажмите на элемент, чтобы использовать его снова • ⭐ закрепляет в избранном", + "Últimos comandos": "Последние команды", + "Favoritos": "Избранное", + "Sem histórico ainda.": "Истории пока нет.", + "Nenhum favorito.": "Нет избранного.", + "Adicionar aos favoritos": "Добавить в избранное", + "Remover dos favoritos": "Убрать из избранного" } diff --git a/src/editor/nls.ts b/src/editor/nls.ts index b3f28b5..368afa3 100644 --- a/src/editor/nls.ts +++ b/src/editor/nls.ts @@ -278,6 +278,18 @@ export function createMsg(t: Translate) { fullGuide: () => t('Guia completo do depurador'), reopenHint: () => t('Use PawnPro: Ajuda e informações para reabrir.'), }, + serverView: { + inputPlaceholder: () => t('Digite um comando do servidor e pressione Enter...'), + send: () => t('Enviar para o servidor'), + hint: () => t('Dica: ↑/↓ percorrem o histórico • clique em um item para reutilizá-lo • ⭐ fixa nos favoritos'), + tabHistory: () => t('Últimos comandos'), + tabFavorites: () => t('Favoritos'), + clear: () => t('Limpar'), + emptyHistory: () => t('Sem histórico ainda.'), + emptyFavorites: () => t('Nenhum favorito.'), + addFavorite: () => t('Adicionar aos favoritos'), + removeFavorite: () => t('Remover dos favoritos'), + }, store: { title: () => t('Biblioteca de Recursos'), diff --git a/src/editor/server.ts b/src/editor/server.ts index ad955fe..a44e87c 100644 --- a/src/editor/server.ts +++ b/src/editor/server.ts @@ -246,10 +246,16 @@ export function registerServerControls( srv.getTailer().setFollowMode(cfg.server.output.follow); }); - const provider = new ServerViewProvider(state, (text: string) => { void srv.sendLine(text); }); + const provider = new ServerViewProvider(context, config, state, (text: string) => { + void srv.sendLine(text); + }); context.subscriptions.push( vscode.window.registerWebviewViewProvider('pawnpro.serverView', provider), ); + + // `vscode.l10n` fixa o idioma pelo do editor; as WebViews seguem `ui.locale`, + // então precisam ser re-renderizadas quando ele muda. + config.onChange(() => provider.refresh()); void vscode.commands.executeCommand('setContext', 'pawnpro.server.running', false); } diff --git a/src/editor/serverView.ts b/src/editor/serverView.ts index 8305e3e..7f75ca0 100644 --- a/src/editor/serverView.ts +++ b/src/editor/serverView.ts @@ -1,14 +1,49 @@ import * as vscode from 'vscode'; import { PawnProStateManager } from '../core/state.js'; +import type { PawnProConfigManager } from '../core/config.js'; +import { createWebviewMsg } from './webviewNls.js'; + +/** + * Ícone de envio, desenhado inline. + * + * A fonte de codicons do editor não chega à WebView (o CSP é + * `default-src 'none'`, sem `font-src`), então o traço vem no próprio HTML. + * `currentColor` faz o ícone acompanhar a cor do botão em qualquer tema. + */ +const ICON_SEND = ``; + +/** + * Escapa texto para interpolação em HTML. + * + * As strings vêm dos bundles de tradução e caem tanto em texto quanto dentro + * de atributos (`title`, `placeholder`), onde uma aspa fecharia o atributo. + */ +function esc(value: string): string { + return value + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} export class ServerViewProvider implements vscode.WebviewViewProvider { private views = new Set(); constructor( + private readonly context: vscode.ExtensionContext, + private readonly config: PawnProConfigManager, private readonly state: PawnProStateManager, private readonly onSend: (text: string) => void, ) {} + /** Re-renderiza as views abertas — usado quando `ui.locale` muda. */ + refresh() { + for (const v of this.views) v.webview.html = this.getHtml(v.webview); + } + private get favorites(): string[] { return this.state.get('server').favorites; } private get history(): string[] { return this.state.get('server').history; } @@ -110,6 +145,7 @@ export class ServerViewProvider implements vscode.WebviewViewProvider { } private getHtml(webview: vscode.Webview) { + const msg = createWebviewMsg(this.context, this.config); const csp = `default-src 'none'; style-src 'unsafe-inline'; img-src ${webview.cspSource}; script-src 'unsafe-inline';`; return ` @@ -169,33 +205,68 @@ export class ServerViewProvider implements vscode.WebviewViewProvider { .ghost { background: transparent; border-color: var(--list-border); color: var(--fg); } .ghost:hover { background: rgba(255,255,255,.06); } .muted { color: var(--muted); } + + /* Botão de enviar: só o ícone, quadrado, alinhado à altura do input. */ + .icon-btn { + display: inline-flex; align-items: center; justify-content: center; + width: 30px; padding: 0; flex: 0 0 auto; + } + .icon-btn svg { width: 16px; height: 16px; fill: currentColor; } + + /* Abas: Favoritos e Últimos comandos dividem o mesmo espaço. */ + .tabs { display: flex; gap: 2px; margin-bottom: 6px; border-bottom: 1px solid var(--list-border); } + .tab { + padding: 5px 10px; border: none; border-bottom: 2px solid transparent; + border-radius: 0; background: transparent; color: var(--muted); + font-weight: 600; cursor: pointer; + } + .tab:hover { background: rgba(255,255,255,.04); color: var(--fg); } + .tab[aria-selected="true"] { + color: var(--fg); + border-bottom-color: var(--vscode-focusBorder, var(--btn-bg)); + } + .tab-count { margin-left: 5px; opacity: .7; font-weight: 400; } + .tab-actions { margin-left: auto; display: flex; align-items: center; } + [hidden] { display: none !important; }
- - -
-
Dica: \u2191/\u2193 percorrem o historico \u2022 Clique em um item para reutilizar \u2022 \u2b50 fixa nos Favoritos
- -
-
- Favoritos -
-
-
Nenhum favorito.
+ +
+
${esc(msg.serverView.hint())}
-
- Ultimos comandos -
+
+ + +
+ + +
-
Sem historico ainda.
+
${esc(msg.serverView.emptyHistory())}
+